diff --git a/lib/roblox_emulator/src/runner/vector3.rs b/lib/roblox_emulator/src/runner/vector3.rs
index 05430ed..288832a 100644
--- a/lib/roblox_emulator/src/runner/vector3.rs
+++ b/lib/roblox_emulator/src/runner/vector3.rs
@@ -49,23 +49,20 @@ impl mlua::UserData for Vector3{
 	fn add_methods<M:mlua::UserDataMethods<Self>>(methods:&mut M){
 		//methods.add_method("area",|_,this,()| Ok(this.length * this.width));
 
-		methods.add_meta_function(mlua::MetaMethod::Add,|_,(this,val):(Self,Self)|Ok(Self(this.0+val.0)));
-		methods.add_meta_function(mlua::MetaMethod::Div,|_,(this,val):(Self,mlua::Value)|{
+		methods.add_meta_function(mlua::MetaMethod::Add,|_,(Vector3(this),Vector3(val)):(Self,Self)|Ok(Self(this+val)));
+		methods.add_meta_function(mlua::MetaMethod::Div,|_,(Vector3(this),val):(Self,mlua::Value)|{
 			match val{
-				mlua::Value::Integer(n)=>Ok(Self(this.0/(n as f32))),
-				mlua::Value::Number(n)=>Ok(Self(this.0/(n as f32))),
-				mlua::Value::UserData(ud)=>{
-					let rhs:Vector3=ud.take()?;
-					Ok(Self(this.0/rhs.0))
-				},
+				mlua::Value::Integer(n)=>Ok(Self(this/(n as f32))),
+				mlua::Value::Number(n)=>Ok(Self(this/(n as f32))),
+				mlua::Value::UserData(ud)=>ud.borrow_scoped(|Vector3(rhs):&Vector3|Self(this/rhs)),
 				other=>Err(mlua::Error::runtime(format!("Attempt to divide Vector3 by {other:?}"))),
 			}
 		});
-		methods.add_meta_function(mlua::MetaMethod::ToString,|_,this:Self|
+		methods.add_meta_function(mlua::MetaMethod::ToString,|_,Vector3(this):Self|
 			Ok(format!("Vector3.new({},{},{})",
-				this.0.x,
-				this.0.y,
-				this.0.z,
+				this.x,
+				this.y,
+				this.z,
 			))
 		);
 	}