diff --git a/validation/src/check.rs b/validation/src/check.rs
index e8d337f..1f957b4 100644
--- a/validation/src/check.rs
+++ b/validation/src/check.rs
@@ -177,21 +177,13 @@ impl<'a,Str:std::fmt::Display> std::fmt::Display for StringCheckContext<'a,Str>{
 
 // check if a string is empty
 pub struct StringEmpty;
-pub struct StringEmptyCheck<Context>(Result<Context,StringEmpty>);
-impl<Context> StringEmptyCheck<Context>{
-	fn map<T>(self,f:impl Fn(Context)->T)->StringEmptyCheck<T>{
-		StringEmptyCheck(self.0.map(f))
-	}
-}
 impl std::fmt::Display for StringEmpty{
 	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
 		write!(f,"Empty string")
 	}
 }
-impl<'a> StringEmptyCheck<&'a str>{
-	fn new(value:&'a str)->StringEmptyCheck<&'a str>{
-		StringEmptyCheck(value.is_empty().then_some(value).ok_or(StringEmpty))
-	}
+fn check_empty(value:&str)->Result<&str,StringEmpty>{
+	value.is_empty().then_some(value).ok_or(StringEmpty)
 }
 
 // check for duplicate objects
@@ -282,10 +274,10 @@ pub struct MapCheck<'a>{
 	model_name:StringCheck<'a,(),String>,
 	// Map must have a StringValue named DisplayName.
 	// Value must not be empty, must be in title case.
-	display_name:Result<StringEmptyCheck<StringCheck<'a,&'a str,String>>,StringValueError>,
+	display_name:Result<Result<StringCheck<'a,&'a str,String>,StringEmpty>,StringValueError>,
 	// Map must have a StringValue named Creator.
 	// Value must not be empty.
-	creator:Result<StringEmptyCheck<&'a str>,StringValueError>,
+	creator:Result<Result<&'a str,StringEmpty>,StringValueError>,
 	// The prefix of the model's name must match the game it was submitted for.
 	// bhop_ for bhop, and surf_ for surf
 	game_id:Result<GameID,ParseGameIDError>,
@@ -323,14 +315,14 @@ impl<'a> ModelInfo<'a>{
 
 		// Check display name is not empty and has title case
 		let display_name=self.map_info.display_name.map(|display_name|{
-			StringEmptyCheck::new(display_name).map(|display_name|StringCheckContext{
+			check_empty(display_name).map(|display_name|StringCheckContext{
 				observed:display_name,
 				expected:display_name.to_title_case(),
 			}.check(display_name))
 		});
 
 		// Check Creator is not empty
-		let creator=self.map_info.creator.map(StringEmptyCheck::new);
+		let creator=self.map_info.creator.map(check_empty);
 
 		// Check GameID (model name was prefixed with bhop_ surf_ etc)
 		let game_id=self.map_info.game_id;
@@ -391,8 +383,8 @@ impl<'a> MapCheck<'a>{
 			MapCheck{
 				model_class:StringCheck(Ok(())),
 				model_name:StringCheck(Ok(())),
-				display_name:Ok(StringEmptyCheck(Ok(StringCheck(Ok(display_name))))),
-				creator:Ok(StringEmptyCheck(Ok(creator))),
+				display_name:Ok(Ok(StringCheck(Ok(display_name)))),
+				creator:Ok(Ok(creator)),
 				game_id:Ok(game_id),
 				mapstart:Ok(()),
 				mode_start_counts:DuplicateCheck(Ok(())),
@@ -446,16 +438,16 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 			writeln!(f,"Invalid Model Name: {context}")?;
 		}
 		match &self.display_name{
-			Ok(StringEmptyCheck(Ok(StringCheck(Ok(_)))))=>(),
-			Ok(StringEmptyCheck(Ok(StringCheck(Err(context)))))=>writeln!(f,"Invalid DisplayName: {context}")?,
-			Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid DisplayName: {context}")?,
+			Ok(Ok(StringCheck(Ok(_))))=>(),
+			Ok(Ok(StringCheck(Err(context))))=>writeln!(f,"Invalid DisplayName: {context}")?,
+			Ok(Err(context))=>writeln!(f,"Invalid DisplayName: {context}")?,
 			Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing DisplayName StringValue")?,
 			Err(StringValueError::ValueNotSet)=>writeln!(f,"DisplayName Value not set")?,
 			Err(StringValueError::NonStringValue)=>writeln!(f,"DisplayName Value is not a String")?,
 		}
 		match &self.creator{
-			Ok(StringEmptyCheck(Ok(_)))=>(),
-			Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid Creator: {context}")?,
+			Ok(Ok(_))=>(),
+			Ok(Err(context))=>writeln!(f,"Invalid Creator: {context}")?,
 			Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing Creator StringValue")?,
 			Err(StringValueError::ValueNotSet)=>writeln!(f,"Creator Value not set")?,
 			Err(StringValueError::NonStringValue)=>writeln!(f,"Creator Value is not a String")?,