diff --git a/validation/src/check.rs b/validation/src/check.rs
index d001dd3..3a99b6f 100644
--- a/validation/src/check.rs
+++ b/validation/src/check.rs
@@ -48,23 +48,9 @@ enum Zone{
 
 #[derive(Clone,Copy,Debug,Hash,Eq,PartialEq)]
 struct ModeID(u64);
-macro_rules! write_zone{
-	($fname:ident,$zone:expr)=>{
-		fn $fname(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
-			match self{
-				ModeID(0)=>write!(f,concat!("Map",$zone)),
-				ModeID(1)=>write!(f,concat!("Bonus",$zone)),
-				ModeID(other)=>write!(f,concat!("Bonus{}",$zone),other),
-			}
-		}
-	};
-}
 impl ModeID{
 	const MAIN:Self=Self(0);
 	const BONUS:Self=Self(1);
-	write_zone!(write_start_zone,"Start");
-	write_zone!(write_finish_zone,"Finish");
-	write_zone!(write_anticheat_zone,"Anticheat");
 }
 #[allow(dead_code)]
 pub enum ZoneParseError{
@@ -426,10 +412,11 @@ impl<'a> MapCheck<'a>{
 	}
 }
 
-fn comma_separated<T,F>(f:&mut std::fmt::Formatter<'_>,mut it:impl Iterator<Item=T>,custom_write:F)->std::fmt::Result
-where
-	F:Fn(&mut std::fmt::Formatter<'_>,T)->std::fmt::Result,
-{
+fn write_comma_separated<T>(
+	f:&mut std::fmt::Formatter<'_>,
+	mut it:impl Iterator<Item=T>,
+	custom_write:impl Fn(&mut std::fmt::Formatter<'_>,T)->std::fmt::Result
+)->std::fmt::Result{
 	if let Some(t)=it.next(){
 		custom_write(f,t)?;
 		for t in it{
@@ -440,6 +427,15 @@ where
 	Ok(())
 }
 
+macro_rules! write_zone{
+	($f:expr,$mode:expr,$zone:expr)=>{
+		match $mode{
+			ModeID(0)=>write!($f,concat!("Map",$zone)),
+			ModeID(1)=>write!($f,concat!("Bonus",$zone)),
+			ModeID(other)=>write!($f,concat!("Bonus{}",$zone),other),
+		}
+	};
+}
 impl<'a> std::fmt::Display for MapCheck<'a>{
 	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
 		if let StringCheck(Err(context))=&self.model_class{
@@ -471,8 +467,8 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 		}
 		if let DuplicateCheck(Err(DuplicateCheckContext(context)))=&self.mode_start_counts{
 			write!(f,"Duplicate start zones: ")?;
-			comma_separated(f,context.iter(),|f,(mode_id,count)|{
-				mode_id.write_start_zone(f)?;
+			write_comma_separated(f,context.iter(),|f,(mode_id,count)|{
+				write_zone!(f,mode_id,"Start")?;
 				write!(f,"({count} duplicates)")?;
 				Ok(())
 			})?;
@@ -482,16 +478,16 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 			// perhaps there are extra end zones (context.extra)
 			if !context.extra.is_empty(){
 				write!(f,"Extra finish zones with no matching start zone: ")?;
-				comma_separated(f,context.extra.iter(),|f,(mode_id,_count)|
-					mode_id.write_finish_zone(f)
+				write_comma_separated(f,context.extra.iter(),|f,(mode_id,_count)|
+					write_zone!(f,mode_id,"Finish")
 				)?;
 				writeln!(f,"")?;
 			}
 			// perhaps there are missing end zones (context.missing)
 			if !context.missing.is_empty(){
 				write!(f,"Missing finish zones: ")?;
-				comma_separated(f,context.missing.iter(),|f,mode_id|
-					mode_id.write_finish_zone(f)
+				write_comma_separated(f,context.missing.iter(),|f,mode_id|
+					write_zone!(f,mode_id,"Finish")
 				)?;
 				writeln!(f,"")?;
 			}
@@ -500,8 +496,8 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 			// perhaps there are extra end zones (context.extra)
 			if !context.extra.is_empty(){
 				write!(f,"Extra anticheat zones with no matching start zone: ")?;
-				comma_separated(f,context.extra.iter(),|f,(mode_id,_count)|
-					mode_id.write_anticheat_zone(f)
+				write_comma_separated(f,context.extra.iter(),|f,(mode_id,_count)|
+					write_zone!(f,mode_id,"Anticheat")
 				)?;
 				writeln!(f,"")?;
 			}
@@ -511,14 +507,14 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 		}
 		if let DuplicateCheck(Err(DuplicateCheckContext(context)))=&self.spawn_counts{
 			write!(f,"Duplicate spawn zones: ")?;
-			comma_separated(f,context.iter(),|f,(SpawnID(spawn_id),count)|
+			write_comma_separated(f,context.iter(),|f,(SpawnID(spawn_id),count)|
 				write!(f,"Spawn{spawn_id}({count} duplicates)")
 			)?;
 			writeln!(f,"")?;
 		}
 		if let DuplicateCheck(Err(DuplicateCheckContext(context)))=&self.wormhole_out_counts{
 			write!(f,"Duplicate wormhole out: ")?;
-			comma_separated(f,context.iter(),|f,(WormholeOutID(wormhole_out_id),count)|
+			write_comma_separated(f,context.iter(),|f,(WormholeOutID(wormhole_out_id),count)|
 				write!(f,"WormholeOut{wormhole_out_id}({count} duplicates)")
 			)?;
 			writeln!(f,"")?;