diff --git a/Framework/DataHandling/test/LoadEmptyInstrumentTest.h b/Framework/DataHandling/test/LoadEmptyInstrumentTest.h
index 1c2f93c517f9b3b685570f6ada260dcaa5516ff2..79eabc9f886c063d638a387dcfd1e7d2e1f575e2 100644
--- a/Framework/DataHandling/test/LoadEmptyInstrumentTest.h
+++ b/Framework/DataHandling/test/LoadEmptyInstrumentTest.h
@@ -1043,6 +1043,33 @@ public:
     TS_ASSERT_EQUALS(1, detectorInfo.detectorIDs()[1])
   }
 
+  void test_compare_wish_idf_vs_nexus() {
+    // Now rerun
+    LoadEmptyInstrument alg;
+    alg.setChild(true);
+    alg.initialize();
+    alg.setPropertyValue("Filename", "WISH_Definition_10Panels.hdf5");
+    alg.setPropertyValue("OutputWorkspace", "dummy");
+    alg.execute();
+    Mantid::API::MatrixWorkspace_sptr wish_nexus =
+        alg.getProperty("OutputWorkspace");
+
+    // Now re-run
+    alg.setPropertyValue("Filename", "WISH_Definition_10Panels.xml");
+    alg.execute();
+    Mantid::API::MatrixWorkspace_sptr wish_xml =
+        alg.getProperty("OutputWorkspace");
+
+    const auto &wish_nexus_detinfo = wish_nexus->detectorInfo();
+    const auto &wish_xml_detinfo = wish_xml->detectorInfo();
+    TS_ASSERT_EQUALS(wish_nexus_detinfo.size(), wish_xml_detinfo.size());
+    for (size_t i = 0; i < wish_nexus_detinfo.size(); ++i) {
+      TSM_ASSERT_EQUALS("Detector position mismatch",
+                        wish_nexus_detinfo.position(i),
+                        wish_xml_detinfo.position(i));
+    }
+  }
+
 private:
   std::string inputFile;
   std::string wsName;
diff --git a/Framework/NexusGeometry/src/NexusGeometryParser.cpp b/Framework/NexusGeometry/src/NexusGeometryParser.cpp
index 2d6c7547da73266087a95ecf019ce3c6502efb27..7e7b82c64f4d57f74855d50348723c7f14256577 100644
--- a/Framework/NexusGeometry/src/NexusGeometryParser.cpp
+++ b/Framework/NexusGeometry/src/NexusGeometryParser.cpp
@@ -578,7 +578,8 @@ void parseAndAddSample(const H5File &file, const Group &root,
   builder.addSample(sampleName, samplePos);
 }
 
-void parseMonitors(const H5::Group &root, InstrumentBuilder &builder) {
+void parseMonitors(const H5File &file, const H5::Group &root,
+                   InstrumentBuilder &builder) {
   std::vector<Group> rawDataGroupPaths = openSubGroups(root, NX_ENTRY);
 
   // Open all instrument groups within rawDataGroups
@@ -591,9 +592,10 @@ void parseMonitors(const H5::Group &root, InstrumentBuilder &builder) {
         auto detectorId = get1DDataset<int64_t>(DETECTOR_ID, monitor)[0];
         bool proxy = false;
         auto monitorShape = parseNexusShape(monitor, proxy);
-        builder.addMonitor(std::to_string(detectorId),
-                           static_cast<int32_t>(detectorId),
-                           Eigen::Vector3d{0, 0, 0}, monitorShape);
+        auto monitorTransforms = getTransformations(file, monitor);
+        builder.addMonitor(
+            std::to_string(detectorId), static_cast<int32_t>(detectorId),
+            monitorTransforms * Eigen::Vector3d{0, 0, 0}, monitorShape);
       }
     }
   }
@@ -652,7 +654,7 @@ extractInstrument(const H5File &file, const Group &root) {
   // Parse source and sample and add to instrument
   parseAndAddSample(file, root, builder);
   parseAndAddSource(file, root, builder);
-  parseMonitors(root, builder);
+  parseMonitors(file, root, builder);
   return builder.createInstrument();
 }
 } // namespace