diff --git a/validation/src/create.rs b/validation/src/create.rs
index 8c99f54..76d8ccf 100644
--- a/validation/src/create.rs
+++ b/validation/src/create.rs
@@ -1,4 +1,4 @@
-use crate::rbx_util::{get_mapinfo,read_dom,MapInfo,ReadDomError,GetMapInfoError,ParseGameIDError};
+use crate::rbx_util::{get_root_instance,get_mapinfo,read_dom,MapInfo,ReadDomError,GetRootInstanceError,ParseGameIDError};
 
 #[allow(dead_code)]
 #[derive(Debug)]
@@ -11,7 +11,7 @@ pub enum Error{
 	ParseUserID(core::num::ParseIntError),
 	ParseModelVersion(core::num::ParseIntError),
 	ModelFileDecode(ReadDomError),
-	GetMapInfo(GetMapInfoError),
+	GetRootInstance(GetRootInstanceError),
 	ParseGameID(ParseGameIDError),
 }
 impl std::fmt::Display for Error{
@@ -66,12 +66,15 @@ impl crate::message_handler::MessageHandler{
 		// decode dom (slow!)
 		let dom=read_dom(std::io::Cursor::new(model_data)).map_err(Error::ModelFileDecode)?;
 
+		// extract the root instance
+		let model_instance=get_root_instance(&dom).map_err(Error::GetRootInstance)?;
+
 		// parse create fields out of asset
 		let MapInfo{
 			display_name,
 			creator,
 			game_id,
-		}=get_mapinfo(&dom).map_err(Error::GetMapInfo)?;
+		}=get_mapinfo(&dom,model_instance);
 
 		let game_id=game_id.map_err(Error::ParseGameID)?;
 
diff --git a/validation/src/rbx_util.rs b/validation/src/rbx_util.rs
index 94f9344..4d49cd0 100644
--- a/validation/src/rbx_util.rs
+++ b/validation/src/rbx_util.rs
@@ -100,20 +100,24 @@ fn string_value(instance:Option<&rbx_dom_weak::Instance>)->Result<&str,StringVal
 }
 
 #[derive(Debug)]
-pub enum GetMapInfoError{
+pub enum GetRootInstanceError{
 	ModelFileRootMustHaveOneChild,
 	ModelFileChildRefIsNil,
 }
 
-pub fn get_mapinfo(dom:&rbx_dom_weak::WeakDom)->Result<MapInfo,GetMapInfoError>{
+pub fn get_root_instance(dom:&rbx_dom_weak::WeakDom)->Result<&rbx_dom_weak::Instance,GetRootInstanceError>{
 	let &[map_ref]=dom.root().children()else{
-		return Err(GetMapInfoError::ModelFileRootMustHaveOneChild);
+		return Err(GetRootInstanceError::ModelFileRootMustHaveOneChild);
 	};
-	let model_instance=dom.get_by_ref(map_ref).ok_or(GetMapInfoError::ModelFileChildRefIsNil)?;
+	let model_instance=dom.get_by_ref(map_ref).ok_or(GetRootInstanceError::ModelFileChildRefIsNil)?;
 
-	Ok(MapInfo{
+	Ok(model_instance)
+}
+
+pub fn get_mapinfo<'a>(dom:&'a rbx_dom_weak::WeakDom,model_instance:&rbx_dom_weak::Instance)->MapInfo<'a>{
+	MapInfo{
 		display_name:string_value(find_first_child_class(dom,model_instance,"DisplayName","StringValue")),
 		creator:string_value(find_first_child_class(dom,model_instance,"Creator","StringValue")),
 		game_id:model_instance.name.parse(),
-	})
+	}
 }