diff --git a/lib/roblox_emulator/src/runner/instance/instance.rs b/lib/roblox_emulator/src/runner/instance/instance.rs
index 8e24d87..36df0dd 100644
--- a/lib/roblox_emulator/src/runner/instance/instance.rs
+++ b/lib/roblox_emulator/src/runner/instance/instance.rs
@@ -286,17 +286,14 @@ impl mlua::UserData for Instance{
 				).ok_or_else(||
 					mlua::Error::runtime(format!("Property '{index_str}' missing on class '{}'",class.name))
 				)?;
-				// the index is known to be a real property at this point
-				// allow creating a permanent ustr (memory leak)
-				let index_ustr=rbx_dom_weak::ustr(index_str);
-				match &property.data_type{
+				let value=match &property.data_type{
 					rbx_reflection::DataType::Value(rbx_types::VariantType::Vector3)=>{
 						let typed_value:Vector3=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected Userdata"))?.borrow()?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::Vector3(typed_value.into()));
+						rbx_types::Variant::Vector3(typed_value.into())
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::Float32)=>{
 						let typed_value:f32=coerce_float32(&value).ok_or_else(||mlua::Error::runtime("Expected f32"))?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::Float32(typed_value));
+						rbx_types::Variant::Float32(typed_value)
 					},
 					rbx_reflection::DataType::Enum(enum_name)=>{
 						let typed_value=match &value{
@@ -312,30 +309,34 @@ impl mlua::UserData for Instance{
 							},
 							_=>Err(mlua::Error::runtime("Expected Enum")),
 						}?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::Enum(typed_value));
+						rbx_types::Variant::Enum(typed_value)
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::Color3)=>{
 						let typed_value:crate::runner::color3::Color3=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected Color3"))?.borrow()?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::Color3(typed_value.into()));
+						rbx_types::Variant::Color3(typed_value.into())
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::Bool)=>{
 						let typed_value=value.as_boolean().ok_or_else(||mlua::Error::runtime("Expected boolean"))?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::Bool(typed_value));
+						rbx_types::Variant::Bool(typed_value)
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::String)=>{
 						let typed_value=value.as_str().ok_or_else(||mlua::Error::runtime("Expected boolean"))?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::String(typed_value.to_owned()));
+						rbx_types::Variant::String(typed_value.to_owned())
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::NumberSequence)=>{
 						let typed_value:crate::runner::number_sequence::NumberSequence=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected NumberSequence"))?.borrow()?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::NumberSequence(typed_value.into()));
+						rbx_types::Variant::NumberSequence(typed_value.into())
 					},
 					rbx_reflection::DataType::Value(rbx_types::VariantType::ColorSequence)=>{
 						let typed_value:crate::runner::color_sequence::ColorSequence=*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected ColorSequence"))?.borrow()?;
-						instance.properties.insert(index_ustr,rbx_types::Variant::ColorSequence(typed_value.into()));
+						rbx_types::Variant::ColorSequence(typed_value.into())
 					},
 					other=>return Err(mlua::Error::runtime(format!("Unimplemented property type: {other:?}"))),
-				}
+				};
+				// the index is known to be a real property at this point
+				// allow creating a permanent ustr (memory leak)
+				let index_ustr=rbx_dom_weak::ustr(index_str);
+				instance.properties.insert(index_ustr,value);
 				Ok(())
 			})
 		});