diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
index 3110729c13c05a5d7dc27274ade6223205cc49e4..528cca2fcd7b02504362ae096c5c5fedfbd598a8 100755
--- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
+++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -18,6 +18,8 @@
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 
 #include "InDetIdentifier/SCT_ID.h"
+
+#include <memory>
   
 class StoreGateSvc;
 class Identifier;
@@ -158,10 +160,10 @@ namespace InDetDD {
     //@{
     std::vector<PVLink>                                         m_volume;
     SiDetectorElementCollection                                 m_elementCollection;
-    typedef std::map<Identifier, ExtendedAlignableTransform*>   AlignableTransformMap;
+    typedef std::map<Identifier, std::unique_ptr<ExtendedAlignableTransform>> AlignableTransformMap;
     std::vector<AlignableTransformMap>                          m_higherAlignableTransforms;
-    std::vector<ExtendedAlignableTransform*>                    m_alignableTransforms;
-    std::vector<ExtendedAlignableTransform*>                    m_moduleAlignableTransforms;
+    std::vector<std::unique_ptr<ExtendedAlignableTransform>>    m_alignableTransforms;
+    std::vector<std::unique_ptr<ExtendedAlignableTransform>>    m_moduleAlignableTransforms;
     const SCT_ID*                                               m_idHelper;
       
     /**
diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
index 45cfb85fce666d7061e561d47563c3c7163dea45..f624231129b4b416a293da711887d4b68f1b02dd 100755
--- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
@@ -50,20 +50,6 @@ namespace InDetDD {
     for (auto vol : m_volume) {
       vol->unref();
     }
-
-    for (auto higherAlignableTransform : m_higherAlignableTransforms){
-      for (auto iterMap : higherAlignableTransform) {
-        delete iterMap.second;
-      }
-    }
-
-    for (auto alignableTransform : m_alignableTransforms){
-      delete alignableTransform;
-    }
-
-    for (auto moduleAlignableTransform : m_moduleAlignableTransforms){
-      delete moduleAlignableTransform;
-    }
   }
 
   unsigned int SCT_DetectorManager::getNumTreeTops() const
@@ -185,7 +171,7 @@ namespace InDetDD {
 
       if (frame == InDetDD::global) { // global shift
         // Its a global transform
-        return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash], delta, alignStore);
+        return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash].get(), delta, alignStore);
 
       } else if (frame == InDetDD::local) { // local shift
 
@@ -198,10 +184,10 @@ namespace InDetDD {
         if( m_isLogical ){
           //Ensure cache is up to date and use the alignment corrected local to global transform
           element->setCache();
-          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash], element->transform(), delta, alignStore);
+          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->transform(), delta, alignStore);
         } else 
           //Use default local to global transform
-          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash], element->defTransform(), delta, alignStore);
+          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->defTransform(), delta, alignStore);
 
       } else {   
         // other not supported
@@ -224,7 +210,7 @@ namespace InDetDD {
 
       if (frame == InDetDD::global) { // global shift
         // Its a global transform
-        return setAlignableTransformGlobalDelta(m_moduleAlignableTransforms[idModuleHash], delta, alignStore);
+        return setAlignableTransformGlobalDelta(m_moduleAlignableTransforms[idModuleHash].get(), delta, alignStore);
       } else if (frame == InDetDD::local) { // local shift
         SiDetectorElement * element =  m_elementCollection[idHash];
         if (!element) return false;
@@ -234,10 +220,10 @@ namespace InDetDD {
         if( m_isLogical ){
           //Ensure cache is up to date and use the alignment corrected local to global transform
           element->setCache();
-          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash], element->moduleTransform(), delta, alignStore);
+          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->moduleTransform(), delta, alignStore);
         } else 
           //Use default local to global transform
-          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash],element->defModuleTransform(), delta, alignStore);
+          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->defModuleTransform(), delta, alignStore);
 
       } else {
         // other not supported
@@ -261,7 +247,7 @@ namespace InDetDD {
       if (iter == m_higherAlignableTransforms[index].end()) return false;      
 
       // Its a global transform
-      return setAlignableTransformGlobalDelta(iter->second, delta, alignStore);
+      return setAlignableTransformGlobalDelta((iter->second).get(), delta, alignStore);
     }
 
   }
@@ -292,13 +278,13 @@ namespace InDetDD {
         // Element
         IdentifierHash idHash = m_idHelper->wafer_hash(id);
         if (idHash.is_valid()) {
-          m_alignableTransforms[idHash]= new ExtendedAlignableTransform(transform, child);
+          m_alignableTransforms[idHash] = std::make_unique<ExtendedAlignableTransform>(transform, child);
         } 
       } else if (level == 1) {
         // Module
         IdentifierHash idHash = m_idHelper->wafer_hash(id);
         if (idHash.is_valid()) {
-          m_moduleAlignableTransforms[idHash/2]=new ExtendedAlignableTransform(transform, child);
+          m_moduleAlignableTransforms[idHash/2] = std::make_unique<ExtendedAlignableTransform>(transform, child);
         } 
 
       } else {
@@ -306,7 +292,7 @@ namespace InDetDD {
         // Higher levels are saved in a map. NB level=0,1 is treated above.   
         int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
         if (index >= static_cast<int>(m_higherAlignableTransforms.size())) m_higherAlignableTransforms.resize(index+1); 
-        m_higherAlignableTransforms[index][id] = new ExtendedAlignableTransform(transform, child);
+        m_higherAlignableTransforms[index][id] = std::make_unique<ExtendedAlignableTransform>(transform, child);
       }  
     }
   }