diff --git a/validation/src/check.rs b/validation/src/check.rs
index abc2349..bfbb9ad 100644
--- a/validation/src/check.rs
+++ b/validation/src/check.rs
@@ -554,6 +554,16 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 		if let Err(())=&self.spawn1{
 			writeln!(f,"Model has no Spawn1")?;
 		}
+		if let SetDifferenceCheck(Err(context))=&self.teleport_counts{
+			if !context.extra.is_empty(){
+				// TODO: include original names of objects in hashmap value as HashSet<&str>
+				write!(f,"Extra Teleport with no matching Spawn: ")?;
+				write_comma_separated(f,context.extra.iter(),|f,(SpawnID(spawn_id),_count)|
+					write!(f,"Teleport{spawn_id}")
+				)?;
+				writeln!(f,"")?;
+			}
+		}
 		if let DuplicateCheck(Err(DuplicateCheckContext(context)))=&self.spawn_counts{
 			write!(f,"Duplicate Spawn: ")?;
 			write_comma_separated(f,context.iter(),|f,(SpawnID(spawn_id),count)|
@@ -561,6 +571,24 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
 			)?;
 			writeln!(f,"")?;
 		}
+		if let SetDifferenceCheck(Err(context))=&self.wormhole_in_counts{
+			if !context.extra.is_empty(){
+				write!(f,"WormholeIn with no matching WormholeOut: ")?;
+				write_comma_separated(f,context.extra.iter(),|f,(WormholeID(wormhole_id),_count)|
+					write!(f,"WormholeIn{wormhole_id}")
+				)?;
+				writeln!(f,"")?;
+			}
+			if !context.missing.is_empty(){
+				// This counts WormholeIn objects, but
+				// flipped logic is easier to understand
+				write!(f,"WormholeOut with no matching WormholeIn: ")?;
+				write_comma_separated(f,context.missing.iter(),|f,WormholeID(wormhole_id)|
+					write!(f,"WormholeOut{wormhole_id}")
+				)?;
+				writeln!(f,"")?;
+			}
+		}
 		if let DuplicateCheck(Err(DuplicateCheckContext(context)))=&self.wormhole_out_counts{
 			write!(f,"Duplicate WormholeOut: ")?;
 			write_comma_separated(f,context.iter(),|f,(WormholeID(wormhole_id),count)|