diff --git a/Framework/DataHandling/src/MoveInstrumentComponent.cpp b/Framework/DataHandling/src/MoveInstrumentComponent.cpp
index 8f9ccf029d460bebbabe1ba224cce7319a9e1f97..efde8f13b69ab67dc66f6f4590b98cb865c74082 100644
--- a/Framework/DataHandling/src/MoveInstrumentComponent.cpp
+++ b/Framework/DataHandling/src/MoveInstrumentComponent.cpp
@@ -106,10 +106,20 @@ void MoveInstrumentComponent::exec() {
     throw std::invalid_argument("DetectorID or ComponentName must be given.");
   }
 
-  if (dynamic_cast<const Geometry::GridDetectorPixel *>(comp.get())) {
+  const auto &componentInfo = inputW->componentInfo();
+  auto compIndex = componentInfo.indexOf(comp->getComponentID());
+  auto parent = componentInfo.parent(compIndex);
+  auto grandParent = componentInfo.parent(parent);
+  if (componentInfo.isDetector(compIndex) &&
+      (componentInfo.componentType(grandParent) ==
+           Mantid::Beamline::ComponentType::Grid ||
+       componentInfo.componentType(grandParent) ==
+           Mantid::Beamline::ComponentType::Rectangular ||
+       componentInfo.componentType(grandParent) ==
+           Mantid::Beamline::ComponentType::Structured)) {
     // DetectorInfo makes changing positions possible but we keep the old
     // behavior of ignoring position changes for GridDetectorPixel.
-    g_log.warning("Component is a GridDetectorPixel, moving is not "
+    g_log.warning("Component is fixed within a structured bank, moving is not "
                   "possible, doing nothing.");
     return;
   }