diff --git a/src/xrt/drivers/wmr/wmr_hmd.c b/src/xrt/drivers/wmr/wmr_hmd.c
index 2b95d76eb..6d6aabe6f 100644
--- a/src/xrt/drivers/wmr/wmr_hmd.c
+++ b/src/xrt/drivers/wmr/wmr_hmd.c
@@ -53,6 +53,7 @@
 #endif
 
 #ifdef XRT_BUILD_DRIVER_HANDTRACKING
+#include "../multi_wrapper/multi.h"
 #include "../drivers/ht/ht_interface.h"
 #endif
 
@@ -1429,16 +1430,19 @@ wmr_hmd_hand_track(struct wmr_hmd *wh,
 
 #ifdef XRT_BUILD_DRIVER_HANDTRACKING
 
-	int create_status = ht_device_create(&wh->tracking.xfctx,                     //
-	                                     stereo_calib,                            //
-	                                     HT_OUTPUT_SPACE_CENTER_OF_STEREO_CAMERA, //
-	                                     HT_ALGORITHM_MERCURY,                    //
-	                                     &sinks,                                  //
+	int create_status = ht_device_create(&wh->tracking.xfctx,         //
+	                                     stereo_calib,                //
+	                                     HT_OUTPUT_SPACE_LEFT_CAMERA, //
+	                                     HT_ALGORITHM_MERCURY,        //
+	                                     &sinks,                      //
 	                                     &device);
 	if (create_status != 0) {
 		return create_status;
 	}
 
+	device = multi_create_tracking_override(XRT_TRACKING_OVERRIDE_ATTACHED, device, &wh->base,
+	                                        XRT_INPUT_GENERIC_HEAD_POSE, &wh->P_ht0_me);
+
 	WMR_DEBUG(wh, "WMR HMD hand tracker successfully created");
 #endif
 
@@ -1638,6 +1642,7 @@ precompute_sensor_transforms(struct wmr_hmd *wh)
 	struct xrt_pose P_me_gyr = {0};
 	struct xrt_pose P_ht0_me = {0};
 	struct xrt_pose P_acc_me = {0};
+	struct xrt_pose P_oxr_ht0_me = {0}; // P_ht0_me in OpenXR coordinates
 	struct xrt_pose P_oxr_acc_me = {0}; // P_acc_me in OpenXR coordinates
 
 	// All of the observed headsets have reported a zero translation for its gyro
@@ -1658,10 +1663,13 @@ precompute_sensor_transforms(struct wmr_hmd *wh)
 	// Express P_*_me pose in OpenXR coordinates through sandwich products.
 	math_pose_transform(&P_acc_me, &P_wmr_oxr, &P_oxr_acc_me);
 	math_pose_transform(&P_oxr_wmr, &P_oxr_acc_me, &P_oxr_acc_me);
+	math_pose_transform(&P_ht0_me, &P_wmr_oxr, &P_oxr_ht0_me);
+	math_pose_transform(&P_oxr_wmr, &P_oxr_ht0_me, &P_oxr_ht0_me);
 
 	// Save transforms
 	math_pose_transform(&P_oxr_wmr, &P_me_acc, &wh->P_oxr_acc);
 	math_pose_transform(&P_oxr_wmr, &P_me_gyr, &wh->P_oxr_gyr);
+	wh->P_ht0_me = P_oxr_ht0_me;
 	wh->P_imu_me = P_oxr_acc_me; // Assume accel pose is IMU pose
 }
 
diff --git a/src/xrt/drivers/wmr/wmr_hmd.h b/src/xrt/drivers/wmr/wmr_hmd.h
index 33aac824d..9bbbe06a6 100644
--- a/src/xrt/drivers/wmr/wmr_hmd.h
+++ b/src/xrt/drivers/wmr/wmr_hmd.h
@@ -119,6 +119,7 @@ struct wmr_hmd
 	//! Precomputed transforms, @see precompute_sensor_transforms.
 	struct xrt_pose P_oxr_acc; //!< Converts accel samples into OpenXR coordinates
 	struct xrt_pose P_oxr_gyr; //!< Converts gyro samples into OpenXR coordinates
+	struct xrt_pose P_ht0_me;  //!< ME="middle of the eyes". HT0-to-ME transform but in OpenXR coordinates
 	struct xrt_pose P_imu_me;  //!< IMU=accel. IMU-to-ME transform but in OpenXR coordinates
 
 	struct hololens_sensors_packet packet;
diff --git a/src/xrt/drivers/wmr/wmr_prober.c b/src/xrt/drivers/wmr/wmr_prober.c
index 8c04b39f0..9655e3fb5 100644
--- a/src/xrt/drivers/wmr/wmr_prober.c
+++ b/src/xrt/drivers/wmr/wmr_prober.c
@@ -216,11 +216,8 @@ wmr_found(struct xrt_prober *xp,
 
 #ifdef XRT_BUILD_DRIVER_HANDTRACKING
 	if (ht != NULL) { // Create hand-tracked controllers
-		struct xrt_pose pose = XRT_POSE_IDENTITY;
-		struct xrt_device *wrap = multi_create_tracking_override(XRT_TRACKING_OVERRIDE_ATTACHED, ht, hmd,
-		                                                         XRT_INPUT_GENERIC_HEAD_POSE, &pose);
 		struct xrt_device *two_hands[2];
-		cemu_devices_create(hmd, wrap, two_hands);
+		cemu_devices_create(hmd, ht, two_hands);
 
 		out_xdev[out_idx++] = two_hands[0];
 		out_xdev[out_idx++] = two_hands[1];