diff --git a/validation/src/check.rs b/validation/src/check.rs
index c6c1bbd..a4a1208 100644
--- a/validation/src/check.rs
+++ b/validation/src/check.rs
@@ -193,11 +193,21 @@ 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))
+	}
+}
 
 // check for duplicate objects
 pub struct DuplicateCheckContext<ID>(HashMap<ID,u64>);
@@ -302,24 +312,14 @@ impl<'a> ModelInfo<'a>{
 
 		// check display name
 		let display_name=self.map_info.display_name.map(|display_name|{
-			if display_name.is_empty(){
-				StringEmptyCheck(Err(StringEmpty))
-			}else{
-				StringEmptyCheck(Ok(StringCheckContext{
-					observed:display_name,
-					expected:display_name.to_title_case(),
-				}.check(display_name)))
-			}
+			StringEmptyCheck::new(display_name).map(|display_name|StringCheckContext{
+				observed:display_name,
+				expected:display_name.to_title_case(),
+			}.check(display_name))
 		});
 
 		// check Creator
-		let creator=self.map_info.creator.map(|creator|{
-			if creator.is_empty(){
-				StringEmptyCheck(Err(StringEmpty))
-			}else{
-				StringEmptyCheck(Ok(creator))
-			}
-		});
+		let creator=self.map_info.creator.map(StringEmptyCheck::new);
 
 		// check GameID
 		let game_id=self.map_info.game_id;