diff --git a/src/g_demo.c b/src/g_demo.c
index 63ab4c74ff0fd6685c988f38db9eaf2554809871..c03e2c53f8998cfdd46a5797ca122c3a9074cd32 100644
--- a/src/g_demo.c
+++ b/src/g_demo.c
@@ -996,7 +996,11 @@ void G_ReadMetalTic(mobj_t *metal)
 	// Read changes from the tic
 	if (ziptic & GZT_XYZ)
 	{
-		P_TeleportMove(metal, READFIXED(metal_p), READFIXED(metal_p), READFIXED(metal_p));
+		// make sure the values are read in the right order
+		oldmetal.x = READFIXED(metal_p);
+		oldmetal.y = READFIXED(metal_p);
+		oldmetal.z = READFIXED(metal_p);
+		P_TeleportMove(metal, oldmetal.x, oldmetal.y, oldmetal.z);
 		oldmetal.x = metal->x;
 		oldmetal.y = metal->y;
 		oldmetal.z = metal->z;