diff --git a/validation/src/validator.rs b/validation/src/validator.rs
index f36cf73..560f1a2 100644
--- a/validation/src/validator.rs
+++ b/validation/src/validator.rs
@@ -118,7 +118,7 @@ impl Validator{
 					// associate a name and policy with the source code
 					// policy will be fetched from the database to replace the default policy
 					script_map.insert(source.clone(),NamePolicy{
-						name:script.name.clone(),
+						name:get_partial_path(&dom,script),
 						policy:Policy::None,
 					});
 				}
@@ -309,6 +309,25 @@ fn recursive_collect_superclass(objects:&mut std::vec::Vec<rbx_dom_weak::types::
 	}
 }
 
+fn get_partial_path(dom:&rbx_dom_weak::WeakDom,instance:&rbx_dom_weak::Instance)->String{
+	struct ParentIter<'a>{
+		dom:&'a rbx_dom_weak::WeakDom,
+		instance:Option<&'a rbx_dom_weak::Instance>,
+	}
+	impl<'a> Iterator for ParentIter<'a>{
+		type Item=&'a rbx_dom_weak::Instance;
+		fn next(&mut self)->Option<Self::Item>{
+			let parent=self.instance.map(|i|i.parent()).and_then(|p|self.dom.get_by_ref(p));
+			core::mem::replace(&mut self.instance,parent)
+		}
+	}
+
+	let mut tragic:Vec<_>=ParentIter{dom,instance:Some(instance)}.map(|i|i.name.as_str()).collect();
+	tragic.pop();
+	tragic.reverse();
+	tragic.join(".")
+}
+
 fn get_script_refs(dom:&rbx_dom_weak::WeakDom)->Vec<rbx_dom_weak::types::Ref>{
 	let mut scripts=std::vec::Vec::new();
 	recursive_collect_superclass(&mut scripts,dom,dom.root(),"LuaSourceContainer");