diff --git a/validation/src/create_mapfix.rs b/validation/src/create_mapfix.rs
index 6dbe905..982fd91 100644
--- a/validation/src/create_mapfix.rs
+++ b/validation/src/create_mapfix.rs
@@ -4,8 +4,8 @@ use crate::create::CreateRequest;
 #[allow(dead_code)]
 #[derive(Debug)]
 pub enum Error{
+	Create(crate::create::Error),
 	ApiActionMapfixCreate(submissions_api::Error),
-	ApiActionOperationFailed(submissions_api::Error),
 }
 impl std::fmt::Display for Error{
 	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
@@ -15,31 +15,36 @@ impl std::fmt::Display for Error{
 impl std::error::Error for Error{}
 
 impl crate::message_handler::MessageHandler{
-	pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),Error>{
-		let create_result=self.create_inner(CreateRequest{
+	async fn create_mapfix_inner(&self,create_info:CreateMapfixRequest)->Result<(),Error>{
+		// call deduplicated inner code
+		let create_request=self.create_inner(CreateRequest{
 			ModelID:create_info.ModelID,
-		}).await;
+		}).await.map_err(Error::Create)?;
 
-		match create_result{
-			Ok(create_request)=>{
-				// call create on api
-				self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{
-					OperationID:create_info.OperationID,
-					AssetOwner:create_request.AssetOwner,
-					DisplayName:create_request.DisplayName.as_str(),
-					Creator:create_request.Creator.as_str(),
-					GameID:create_request.GameID,
-					AssetID:create_info.ModelID,
-					AssetVersion:create_request.AssetVersion,
-					TargetAssetID:create_info.TargetAssetID,
-				}).await.map_err(Error::ApiActionMapfixCreate)?;
-			},
-			Err(e)=>{
-				self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
-					OperationID:create_info.OperationID,
-					StatusMessage:format!("{e}"),
-				}).await.map_err(Error::ApiActionOperationFailed)?;
-			},
+		// call create on api
+		self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{
+			OperationID:create_info.OperationID,
+			AssetOwner:create_request.AssetOwner,
+			DisplayName:create_request.DisplayName.as_str(),
+			Creator:create_request.Creator.as_str(),
+			GameID:create_request.GameID,
+			AssetID:create_info.ModelID,
+			AssetVersion:create_request.AssetVersion,
+			TargetAssetID:create_info.TargetAssetID,
+		}).await.map_err(Error::ApiActionMapfixCreate)?;
+
+		Ok(())
+	}
+	pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),submissions_api::Error>{
+		let operation_id=create_info.OperationID;
+
+		let create_result=self.create_mapfix_inner(create_info).await;
+
+		if let Err(e)=create_result{
+			self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
+				OperationID:operation_id,
+				StatusMessage:format!("{e}"),
+			}).await?;
 		}
 
 		Ok(())
diff --git a/validation/src/create_submission.rs b/validation/src/create_submission.rs
index 31f2a0e..4949366 100644
--- a/validation/src/create_submission.rs
+++ b/validation/src/create_submission.rs
@@ -4,8 +4,8 @@ use crate::create::CreateRequest;
 #[allow(dead_code)]
 #[derive(Debug)]
 pub enum Error{
+	Create(crate::create::Error),
 	ApiActionSubmissionCreate(submissions_api::Error),
-	ApiActionOperationFailed(submissions_api::Error),
 }
 impl std::fmt::Display for Error{
 	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
@@ -15,30 +15,33 @@ impl std::fmt::Display for Error{
 impl std::error::Error for Error{}
 
 impl crate::message_handler::MessageHandler{
-	pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{
-		let create_result=self.create_inner(CreateRequest{
+	async fn create_submission_inner(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{
+		let create_request=self.create_inner(CreateRequest{
 			ModelID:create_info.ModelID,
-		}).await;
+		}).await.map_err(Error::Create)?;
+		// call create on api
+		self.api.create_submission(submissions_api::types::CreateSubmissionRequest{
+			OperationID:create_info.OperationID,
+			AssetOwner:create_request.AssetOwner,
+			DisplayName:create_request.DisplayName.as_str(),
+			Creator:create_request.Creator.as_str(),
+			GameID:create_request.GameID,
+			AssetID:create_info.ModelID,
+			AssetVersion:create_request.AssetVersion,
+		}).await.map_err(Error::ApiActionSubmissionCreate)?;
 
-		match create_result{
-			Ok(create_request)=>{
-				// call create on api
-				self.api.create_submission(submissions_api::types::CreateSubmissionRequest{
-					OperationID:create_info.OperationID,
-					AssetOwner:create_request.AssetOwner,
-					DisplayName:create_request.DisplayName.as_str(),
-					Creator:create_request.Creator.as_str(),
-					GameID:create_request.GameID,
-					AssetID:create_info.ModelID,
-					AssetVersion:create_request.AssetVersion,
-				}).await.map_err(Error::ApiActionSubmissionCreate)?;
-			},
-			Err(e)=>{
-				self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
-					OperationID:create_info.OperationID,
-					StatusMessage:format!("{e}"),
-				}).await.map_err(Error::ApiActionOperationFailed)?;
-			},
+		Ok(())
+	}
+	pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),submissions_api::Error>{
+		let operation_id=create_info.OperationID;
+
+		let create_result=self.create_submission_inner(create_info).await;
+
+		if let Err(e)=create_result{
+			self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
+				OperationID:operation_id,
+				StatusMessage:format!("{e}"),
+			}).await?;
 		}
 
 		Ok(())
diff --git a/validation/src/message_handler.rs b/validation/src/message_handler.rs
index bff0f10..fe79ee5 100644
--- a/validation/src/message_handler.rs
+++ b/validation/src/message_handler.rs
@@ -5,8 +5,8 @@ pub enum HandleMessageError{
 	DoubleAck(async_nats::Error),
 	Json(serde_json::Error),
 	UnknownSubject(String),
-	CreateMapfix(crate::create_mapfix::Error),
-	CreateSubmission(crate::create_submission::Error),
+	CreateMapfix(submissions_api::Error),
+	CreateSubmission(submissions_api::Error),
 	UploadMapfix(crate::upload_mapfix::Error),
 	UploadSubmission(crate::upload_submission::Error),
 	ValidateMapfix(crate::validate_mapfix::Error),