diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakeShapeShift.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakeShapeShift.cxx
index 137e2568fffb0b374d3bb469d4ae933284d7dc2a..e752b1c48d03581146b304a376928571d8a9fd9e 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakeShapeShift.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakeShapeShift.cxx
@@ -40,8 +40,8 @@ GeoIntrusivePtr<RCBase> MakeShapeShift::make(const xercesc::DOMElement *element,
             std::string nodeName{toRelease};
             XMLString::release(&toRelease);
             const GeoTransform *geoXf = (nodeName == "transformation")
-              ? static_cast<const GeoTransform *>( gmxUtil.tagHandler.transformation.process(dynamic_cast<DOMElement *>(child), gmxUtil))
-              : static_cast<const GeoTransform *>( gmxUtil.tagHandler.transformationref.process(dynamic_cast<DOMElement *>(child), gmxUtil));
+              ? dynamic_pointer_cast<const GeoTransform>( gmxUtil.tagHandler.transformation.process(dynamic_cast<DOMElement *>(child), gmxUtil))
+              : dynamic_pointer_cast<const GeoTransform>( gmxUtil.tagHandler.transformationref.process(dynamic_cast<DOMElement *>(child), gmxUtil));
             hepXf = geoXf->getTransform();
             break;
         } default: // More than 3 elements?