diff --git a/AtlasGeometryCommon/CrackRegionGeoModel/CMakeLists.txt b/AtlasGeometryCommon/CrackRegionGeoModel/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6c5848e0e05eea8a9f5c84813a32098fb7d5e0e9
--- /dev/null
+++ b/AtlasGeometryCommon/CrackRegionGeoModel/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+
+# Declare the package name.
+atlas_subdir( CrackRegionGeoModel )
+
+find_package( GeoModel COMPONENTS GeoModelKernel GeoModelDBManager GeoModelRead)
+
+# Component(s) in the package.
+atlas_add_library( CrackRegionGeoModel
+		   src/*.cxx
+		   PUBLIC_HEADERS CrackRegionGeoModel
+		   LINK_LIBRARIES ${GEOMODEL_LIBRARIES}
+		   PRIVATE_LINK_LIBRARIES GaudiKernel GeoModelUtilities StoreGateLib RDBAccessSvcLib )
+
diff --git a/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/ATLAS_CHECK_THREAD_SAFETY b/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 0000000000000000000000000000000000000000..5de8c8a707618329bc29d08c17485625a6bb2169
--- /dev/null
+++ b/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+AtlasGeometryCommon/CrackRegionGeoModel
\ No newline at end of file
diff --git a/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/CrackDMConstruction.h b/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/CrackDMConstruction.h
new file mode 100644
index 0000000000000000000000000000000000000000..728979b19e2a92e727d7608b8c172a495b524f41
--- /dev/null
+++ b/AtlasGeometryCommon/CrackRegionGeoModel/CrackRegionGeoModel/CrackDMConstruction.h
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef CRACKREGIONGEOMODEL_CRACKDMCONSTRUCTION_H
+#define CRACKREGIONGEOMODEL_CRACKDMCONSTRUCTION_H
+
+#include "AthenaBaseComps/AthMessaging.h"
+
+class IRDBAccessSvc;
+class IGeoModelSvc;
+class StoredMaterialManager;
+class GeoFullPhysVol;
+
+class CrackDMConstruction : public AthMessaging
+{
+ public:
+  CrackDMConstruction() = delete;
+  CrackDMConstruction(IRDBAccessSvc* rdbAccess
+		      , IGeoModelSvc* geoModel
+		      , StoredMaterialManager* materialManager
+		      , bool activateFT);
+  
+  void create(GeoFullPhysVol* envelope);
+
+ private:
+  IRDBAccessSvc*         m_rdbAccess{nullptr};
+  IGeoModelSvc*          m_geoModel{nullptr};
+  StoredMaterialManager* m_materialManager{nullptr};
+  bool                   m_activateFT{false};
+
+};
+
+#endif
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx b/AtlasGeometryCommon/CrackRegionGeoModel/src/CrackDMConstruction.cxx
old mode 100755
new mode 100644
similarity index 54%
rename from LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx
rename to AtlasGeometryCommon/CrackRegionGeoModel/src/CrackDMConstruction.cxx
index cee35b2eeaaa8c165370173be4ac0a40af4e1038..ba0c676097abb718aecead9909a4af5f11fc200e
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx
+++ b/AtlasGeometryCommon/CrackRegionGeoModel/src/CrackDMConstruction.cxx
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
 */
 
+#include "CrackRegionGeoModel/CrackDMConstruction.h"
 
-#include "LArGeoBarrel/BarrelDMConstruction.h"
 #include "GeoModelKernel/GeoElement.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
@@ -14,11 +14,8 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
-#include "GeoModelKernel/GeoSerialDenominator.h"
 #include "GeoModelKernel/GeoXF.h"
-
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoPcon.h"
 #include "GeoModelKernel/GeoTubs.h"
@@ -31,6 +28,7 @@
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/Units.h"
+
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
@@ -39,37 +37,17 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
-
 // For units:
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
 
-// For Functions:
-
 // For functions:
-#include "GeoGenericFunctions/Abs.h"
-#include "GeoGenericFunctions/Sin.h"
-#include "GeoGenericFunctions/Cos.h"
-#include "GeoGenericFunctions/Sqrt.h"
-#include "GeoGenericFunctions/ATan.h"
-#include "GeoGenericFunctions/Rectangular.h"
-#include "GeoGenericFunctions/Mod.h"
 #include "GeoGenericFunctions/Variable.h"
-#include "GeoGenericFunctions/FixedConstant.h"
 
 using namespace GeoGenfun;
 using namespace GeoXF;
 
-
-
-namespace LArGeo {
-namespace BarrelDM {
-
-
 static const unsigned int NCrates=16;
 static const double Alfa=360*Gaudi::Units::deg/NCrates;
 static const double Enda=1155;
@@ -82,7 +60,7 @@ static const double DYc=2771.6*tan(Alfa/2);
 
 void
 createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
-                              StoredMaterialManager& materialManager,
+                              StoredMaterialManager* materialManager,
                               std::map<std::string, unsigned int>& trdMap,
                               IRDBRecordset& BarrelDMTrds,
                               std::map<std::string, unsigned int>& trapMap,
@@ -169,12 +147,12 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   double Spb2ytr = BarrelDMTraps[recordIndex]->getDouble("YTR");
   double Spb2ztr = BarrelDMTraps[recordIndex]->getDouble("ZTR");
 
-  const GeoMaterial* matLArServices17  = materialManager.getMaterial("LAr::LArServices17");// 0.035*gram/cm3
-  const GeoMaterial* matLArServices18  = materialManager.getMaterial("LAr::LArServices18");// 0.240*gram/cm3
-  const GeoMaterial* matLArServices19  = materialManager.getMaterial("LAr::LArServices19");// 0.469*gram/cm3
-  const GeoMaterial* matLArServices20  = materialManager.getMaterial("LAr::LArServices20");// 0.353*gram/cm3
-  const GeoMaterial *alu               = materialManager.getMaterial("std::Aluminium"); //2.7 g/cm3
-  const GeoMaterial *air               = materialManager.getMaterial("std::Air"); //0.001214 g/cm3
+  const GeoMaterial* matLArServices17  = materialManager->getMaterial("LAr::LArServices17");// 0.035*gram/cm3
+  const GeoMaterial* matLArServices18  = materialManager->getMaterial("LAr::LArServices18");// 0.240*gram/cm3
+  const GeoMaterial* matLArServices19  = materialManager->getMaterial("LAr::LArServices19");// 0.469*gram/cm3
+  const GeoMaterial* matLArServices20  = materialManager->getMaterial("LAr::LArServices20");// 0.353*gram/cm3
+  const GeoMaterial *alu               = materialManager->getMaterial("std::Aluminium"); //2.7 g/cm3
+  const GeoMaterial *air               = materialManager->getMaterial("std::Air"); //0.001214 g/cm3
 
   GeoTrf::Transform3D Cut3Boxe  = GeoTrf::Translate3D(Boxxtr, Boxytr, Boxztr)*GeoTrf::RotateX3D(-20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
   GeoTrf::Transform3D Cut4Boxe  = GeoTrf::Translate3D(Boxxtr, -Boxytr,Boxztr)*GeoTrf::RotateX3D(20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
@@ -353,11 +331,10 @@ createBaseEnvelopesFromDB (GeoFullPhysVol* envelope,
   envelope->add(betC);
 }
 
-
 void createFromDB (GeoFullPhysVol* envelope,
                    IRDBAccessSvc* rdbAccess,
                    IGeoModelSvc* geoModel,
-                   StoredMaterialManager& materialManager)
+                   StoredMaterialManager* materialManager)
 {
   // Use Geometry Database
   DecodeVersionKey keyLAr(geoModel,"LAr");
@@ -394,24 +371,24 @@ void createFromDB (GeoFullPhysVol* envelope,
   unsigned int recordIndex;
 
   // Get materials
-  const GeoMaterial *alu               = materialManager.getMaterial("std::Aluminium"); //2.7 g/cm3
-  const GeoMaterial* matBoardsEnvelope = materialManager.getMaterial("LAr::BoardsEnvelope");// 0.932*gram/cm3);
-  const GeoMaterial* matLArServices1   = materialManager.getMaterial("LAr::LArServices1");// 1.020*gram/cm3
-  const GeoMaterial* matLArServices2   = materialManager.getMaterial("LAr::LArServices2");// 0.955*gram/cm3
-  const GeoMaterial* matLArServices3   = materialManager.getMaterial("LAr::LArServices3");// 1.005*gram/cm3
-  const GeoMaterial* matLArServices4   = materialManager.getMaterial("LAr::LArServices4");// 0.460*gram/cm3
-  const GeoMaterial* matLArServices5   = materialManager.getMaterial("LAr::LArServices5");// 0.480*gram/cm3
-  const GeoMaterial* matLArServices6   = materialManager.getMaterial("LAr::LArServices6");// 1.000*gram/cm3
-  const GeoMaterial* matLArServices7   = materialManager.getMaterial("LAr::LArServices7");// 0.935*gram/cm3
-  const GeoMaterial* matLArServices8   = materialManager.getMaterial("LAr::LArServices8");// 1.070*gram/cm3
-  const GeoMaterial* matLArServices9   = materialManager.getMaterial("LAr::LArServices9");// 1.020*gram/cm3
-  const GeoMaterial* matLArServices10  = materialManager.getMaterial("LAr::LArServices10");// 0.995*gram/cm3
-  const GeoMaterial* matLArServices11  = materialManager.getMaterial("LAr::LArServices11");// 0.835*gram/cm3
-  const GeoMaterial* matLArServices12  = materialManager.getMaterial("LAr::LArServices12");// 0.640*gram/cm3
-  const GeoMaterial* matLArServices13  = materialManager.getMaterial("LAr::LArServices13");// 0.690*gram/cm3
-  const GeoMaterial* matLArServices14  = materialManager.getMaterial("LAr::LArServices14");// 0.825*gram/cm3
-  const GeoMaterial* matLArServices15  = materialManager.getMaterial("LAr::LArServices15");// 0.875*gram/cm3
-  const GeoMaterial* matLArServices16  = materialManager.getMaterial("LAr::LArServices16");// 1.035*gram/cm3
+  const GeoMaterial *alu               = materialManager->getMaterial("std::Aluminium"); //2.7 g/cm3
+  const GeoMaterial* matBoardsEnvelope = materialManager->getMaterial("LAr::BoardsEnvelope");// 0.932*gram/cm3);
+  const GeoMaterial* matLArServices1   = materialManager->getMaterial("LAr::LArServices1");// 1.020*gram/cm3
+  const GeoMaterial* matLArServices2   = materialManager->getMaterial("LAr::LArServices2");// 0.955*gram/cm3
+  const GeoMaterial* matLArServices3   = materialManager->getMaterial("LAr::LArServices3");// 1.005*gram/cm3
+  const GeoMaterial* matLArServices4   = materialManager->getMaterial("LAr::LArServices4");// 0.460*gram/cm3
+  const GeoMaterial* matLArServices5   = materialManager->getMaterial("LAr::LArServices5");// 0.480*gram/cm3
+  const GeoMaterial* matLArServices6   = materialManager->getMaterial("LAr::LArServices6");// 1.000*gram/cm3
+  const GeoMaterial* matLArServices7   = materialManager->getMaterial("LAr::LArServices7");// 0.935*gram/cm3
+  const GeoMaterial* matLArServices8   = materialManager->getMaterial("LAr::LArServices8");// 1.070*gram/cm3
+  const GeoMaterial* matLArServices9   = materialManager->getMaterial("LAr::LArServices9");// 1.020*gram/cm3
+  const GeoMaterial* matLArServices10  = materialManager->getMaterial("LAr::LArServices10");// 0.995*gram/cm3
+  const GeoMaterial* matLArServices11  = materialManager->getMaterial("LAr::LArServices11");// 0.835*gram/cm3
+  const GeoMaterial* matLArServices12  = materialManager->getMaterial("LAr::LArServices12");// 0.640*gram/cm3
+  const GeoMaterial* matLArServices13  = materialManager->getMaterial("LAr::LArServices13");// 0.690*gram/cm3
+  const GeoMaterial* matLArServices14  = materialManager->getMaterial("LAr::LArServices14");// 0.825*gram/cm3
+  const GeoMaterial* matLArServices15  = materialManager->getMaterial("LAr::LArServices15");// 0.875*gram/cm3
+  const GeoMaterial* matLArServices16  = materialManager->getMaterial("LAr::LArServices16");// 1.035*gram/cm3
 
   const double inv_Endab = 1. / (Endb - Enda);
   Variable       i;
@@ -645,78 +622,62 @@ void createFromDB (GeoFullPhysVol* envelope,
   // dedicated volumes to add in SectorEnvelopes1
   //    (a) volume in Trd shape to add slice of extra material in a given eta bin
   IRDBRecordset_ptr BarrelDMRing = rdbAccess->getRecordsetPtr("LArDMEnv1Ring",keyLAr.tag(),keyLAr.node());
-  if (BarrelDMRing->size()>0)
-  {
-    for (unsigned int i=0;i<BarrelDMRing->size();i++) {
-      double etaMin=(*BarrelDMRing)[i]->getDouble("ETAMIN");
-      double etaMax=(*BarrelDMRing)[i]->getDouble("ETAMAX");
-      double thicknessExtra=(*BarrelDMRing)[i]->getDouble("THICKNESS");
-      std::string ringName = "LAr::DM::SectorEnvelopes1::"+(*BarrelDMRing)[i]->getString("RINGNAME");
-
-      double radiusMin=SecE1ztr/sinh(etaMax);
-      double radiusMax=SecE1ztr/sinh(etaMin);
-      double dy1 = DYa + (DYb-DYa)*(radiusMin-Enda)*inv_Endab;
-      double dy2 = DYa + (DYb-DYa)*(radiusMax-Enda)*inv_Endab;
-      double zpos=0.5*(radiusMax+radiusMin - (Endb+Enda));
-      const GeoMaterial *matExtraTdr = materialManager.getMaterial((*BarrelDMRing)[i]->getString("MATERIAL"));
-
-      //std::cout << " extraTdr: etamin,etamx " << etaMin << " " << etaMax << " thickness " << thicknessExtra << " size in Radius " << (radiusMax-radiusMin)
-      //   << " size in R.phi " << dy1*2 << " " << dy2*2 << std::endl;
-      //std::cout << " position in tdr1 " << zpos << std::endl;
-      //std::cout << " name " << ringName << std::endl;
-      GeoTrd   *extraMatTdr  = new GeoTrd(thicknessExtra/2., thicknessExtra/2., dy1, dy2, (radiusMax-radiusMin)/2);
-      GeoLogVol *extraMatLog = new GeoLogVol(ringName,extraMatTdr,matExtraTdr);
-      GeoPhysVol *extraMatPhys = new GeoPhysVol(extraMatLog);
-      for (unsigned int isect=0;isect<se1List.size();isect++) {
-        se1List[isect]->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
-        se1List[isect]->add(extraMatPhys);
-      }
+  for (unsigned int i=0;i<BarrelDMRing->size();i++) {
+    double etaMin=(*BarrelDMRing)[i]->getDouble("ETAMIN");
+    double etaMax=(*BarrelDMRing)[i]->getDouble("ETAMAX");
+    double thicknessExtra=(*BarrelDMRing)[i]->getDouble("THICKNESS");
+    std::string ringName = "LAr::DM::SectorEnvelopes1::"+(*BarrelDMRing)[i]->getString("RINGNAME");
+    
+    double radiusMin=SecE1ztr/sinh(etaMax);
+    double radiusMax=SecE1ztr/sinh(etaMin);
+    double dy1 = DYa + (DYb-DYa)*(radiusMin-Enda)*inv_Endab;
+    double dy2 = DYa + (DYb-DYa)*(radiusMax-Enda)*inv_Endab;
+    double zpos=0.5*(radiusMax+radiusMin - (Endb+Enda));
+    const GeoMaterial *matExtraTdr = materialManager->getMaterial((*BarrelDMRing)[i]->getString("MATERIAL"));
+    
+    GeoTrd   *extraMatTdr  = new GeoTrd(thicknessExtra/2., thicknessExtra/2., dy1, dy2, (radiusMax-radiusMin)/2);
+    GeoLogVol *extraMatLog = new GeoLogVol(ringName,extraMatTdr,matExtraTdr);
+    GeoPhysVol *extraMatPhys = new GeoPhysVol(extraMatLog);
+    for (unsigned int isect=0;isect<se1List.size();isect++) {
+      se1List[isect]->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
+      se1List[isect]->add(extraMatPhys);
     }
   }
 
   // (b) extra material at fixed phi locations in the PPF1 area
   IRDBRecordset_ptr BarrelDMPhiBox = rdbAccess->getRecordsetPtr("LArDMEnv1PhiBox",keyLAr.tag(),keyLAr.node());
-  if (BarrelDMPhiBox->size()>0)
-  {
-    for (unsigned int i=0;i<BarrelDMPhiBox->size();i++) {
-      double eta=(*BarrelDMPhiBox)[i]->getDouble("ETA");
-      double phi0=(*BarrelDMPhiBox)[i]->getDouble("PHI0");
-      double deltaR=(*BarrelDMPhiBox)[i]->getDouble("DELTAR");
-      double deltaRphi=(*BarrelDMPhiBox)[i]->getDouble("DELTARPHI");
-      double thickness=(*BarrelDMPhiBox)[i]->getDouble("THICKNESS");
-      int nphi=(*BarrelDMPhiBox)[i]->getInt("NPHI");
-      int noHorizontal = (*BarrelDMPhiBox)[i]->getInt("NOHORIZ");
-
-      const GeoMaterial* matExtraPPF1 = materialManager.getMaterial((*BarrelDMPhiBox)[i]->getString("MATERIAL"));
-      std::string boxName = "LAr::DM::SectorEnvelopes1::"+(*BarrelDMPhiBox)[i]->getString("BOXNAME");
-
-      //std::cout << " extraBox name " << boxName << " eta " << eta << " phi0" << phi0 << " deltaR " << deltaR << " deltaRphi " << deltaRphi
-      //  << " thickness " << thickness << " nphi " << nphi << std::endl;
-
-      GeoBox *ppf1Box = new GeoBox(thickness/2.,deltaRphi/2.,deltaR/2.);
-      GeoLogVol *ppf1Log = new GeoLogVol(boxName,ppf1Box,matExtraPPF1);
-      GeoPhysVol *ppf1Phys = new GeoPhysVol(ppf1Log);
-
-      int nPerEnv1 = nphi/NCrates;
-      double dphi=2.*M_PI/((float)(nphi));
-      double radius=SecE1ztr/sinh(eta);
-      for (int iphi=0;iphi<nPerEnv1;iphi++) {
-        double xpos=0.;
-        double ypos=radius*sin(phi0+((float)(iphi))*dphi);
-        double zpos=radius*cos(phi0+((float)(iphi))*dphi) - (Endb+Enda)/2.;
-        for (unsigned int isect=0;isect<se1List.size();isect++) {
-          // no PPF1 box around phi=0 and phi=pi
-          if (noHorizontal>0 && ((isect==7 && iphi==1) || (isect==8 && iphi==0) || (isect==15 && iphi==1) || (isect==0 && iphi==0) ) ) continue;
-          se1List[isect]->add(new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos)));
-          se1List[isect]->add(ppf1Phys);
-        }
+  for (unsigned int i=0;i<BarrelDMPhiBox->size();i++) {
+    double eta=(*BarrelDMPhiBox)[i]->getDouble("ETA");
+    double phi0=(*BarrelDMPhiBox)[i]->getDouble("PHI0");
+    double deltaR=(*BarrelDMPhiBox)[i]->getDouble("DELTAR");
+    double deltaRphi=(*BarrelDMPhiBox)[i]->getDouble("DELTARPHI");
+    double thickness=(*BarrelDMPhiBox)[i]->getDouble("THICKNESS");
+    int nphi=(*BarrelDMPhiBox)[i]->getInt("NPHI");
+    int noHorizontal = (*BarrelDMPhiBox)[i]->getInt("NOHORIZ");
+    
+    const GeoMaterial* matExtraPPF1 = materialManager->getMaterial((*BarrelDMPhiBox)[i]->getString("MATERIAL"));
+    std::string boxName = "LAr::DM::SectorEnvelopes1::"+(*BarrelDMPhiBox)[i]->getString("BOXNAME");
+    
+    GeoBox *ppf1Box = new GeoBox(thickness/2.,deltaRphi/2.,deltaR/2.);
+    GeoLogVol *ppf1Log = new GeoLogVol(boxName,ppf1Box,matExtraPPF1);
+    GeoPhysVol *ppf1Phys = new GeoPhysVol(ppf1Log);
+    
+    int nPerEnv1 = nphi/NCrates;
+    double dphi=2.*M_PI/((float)(nphi));
+    double radius=SecE1ztr/sinh(eta);
+    for (int iphi=0;iphi<nPerEnv1;iphi++) {
+      double xpos=0.;
+      double ypos=radius*sin(phi0+((float)(iphi))*dphi);
+      double zpos=radius*cos(phi0+((float)(iphi))*dphi) - (Endb+Enda)/2.;
+      for (unsigned int isect=0;isect<se1List.size();isect++) {
+	// no PPF1 box around phi=0 and phi=pi
+	if (noHorizontal>0 && ((isect==7 && iphi==1) || (isect==8 && iphi==0) || (isect==15 && iphi==1) || (isect==0 && iphi==0) ) ) continue;
+	se1List[isect]->add(new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos)));
+	se1List[isect]->add(ppf1Phys);
       }
     }
   }
 
-
-
-
   // ----- build base plates -----
   GeoTrd   *Trd1alu  = new GeoTrd(BasePxhlen1, BasePxhlen2, BasePyhlen1, BasePyhlen2, BasePzhlen);
   GeoLogVol  *lvbp          = new GeoLogVol("LAr::DM::BasePlates",Trd1alu,alu);
@@ -884,708 +845,34 @@ void createFromDB (GeoFullPhysVol* envelope,
 }
 
 
-} // namespace BarrelDM
-} // namespace LArGeo
-
-
-
-// Constructor;
-LArGeo::BarrelDMConstruction ::BarrelDMConstruction(bool ft) :
-  m_activateFT(ft)
+CrackDMConstruction::CrackDMConstruction(IRDBAccessSvc* rdbAccess
+					 , IGeoModelSvc* geoModel
+					 , StoredMaterialManager* materialManager
+					 , bool activateFT)
+  : AthMessaging("CrackDMConstruction")
+  , m_rdbAccess(rdbAccess)
+  , m_geoModel(geoModel)
+  , m_materialManager(materialManager)
+  , m_activateFT(activateFT)
 {
 }
 
-// Destructor:
-LArGeo::BarrelDMConstruction::~BarrelDMConstruction() {
-}
-
-void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
+void CrackDMConstruction::create(GeoFullPhysVol* envelope)
 {
-  // Various initializations - Detector Store, Material Manager
-
-  ISvcLocator *svcLocator = Gaudi::svcLocator();
-  IMessageSvc * msgSvc;
-  if (svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
-    throw std::runtime_error("Error in BarrelDMConstruction, cannot access MessageSvc");
-  }
-  MsgStream log(msgSvc, "BarrelDMConstruction");
-  log << MSG::DEBUG << "started" << endmsg;
-
-  StoreGateSvc *detStore;
-  if (svcLocator->service("DetectorStore", detStore, false )==StatusCode::FAILURE) {
-    throw std::runtime_error("Error in BarrelDMConstruction, cannot access DetectorStore");
-  }
-
-  IGeoModelSvc *geoModel;
-  IRDBAccessSvc* rdbAccess;
-
-  if(svcLocator->service ("GeoModelSvc",geoModel) == StatusCode::FAILURE)
-    throw std::runtime_error("Error in BarrelDMConstruction, cannot access GeoModelSvc");
-  if(svcLocator->service ("RDBAccessSvc",rdbAccess) == StatusCode::FAILURE)
-    throw std::runtime_error("Error in BarrelDMConstruction, cannot access RDBAccessSvc");
-
-  DecodeVersionKey larVersionKey(geoModel, "LAr");
-
-  StoredMaterialManager* materialManager = nullptr;
-  if (StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string("MATERIALS"))) {
-    throw std::runtime_error("Error in BarrelDMConstruction, stored MaterialManager is not found.");
-
-  }
-
-  // following actions depend on the tag of LArBarrelDM node
-  //
-  // 1. LArBarrelDM-00 - DUMMY tag! works as a flag for building initial
-  // version of the description with hardwired numbers
-  //
-  // 2. LArBarrelDM-01 and -02 are dummy tags as well.
-  //
-  // 3. The first DB tag which is actually used by this code is LArBarrelDM-03
-  //
-  //   .... Hope that future tags will be used in a 'normal' way
-
-
-  std::string strDMTopTag = rdbAccess->getChildTag("LArBarrelDM",larVersionKey.tag(),larVersionKey.node());
-
-  if(strDMTopTag=="")
-    throw std::runtime_error("Error in BarrelDMConstruction, empty BarrelDM tag!");
-  else if(strDMTopTag=="LArBarrelDM-00")
-  {
-    // Get some standard materials
-    const GeoMaterial *air        = materialManager->getMaterial("std::Air");
-    const GeoMaterial *alu        = materialManager->getMaterial("std::Aluminium");
-    //const GeoMaterial *c        = materialManager->getMaterial("std::Carbon");
-    //const GeoMaterial *cu        = materialManager->getMaterial("std::Copper");
-    const GeoMaterial *matXeCO2O2 = materialManager->getMaterial("trt::XeCO2O2");
-    const GeoMaterial *shieldSteel = materialManager->getMaterial("shield::ShieldSteel");
-    const GeoMaterial *matRubber = materialManager->getMaterial("std::Rubber")!=nullptr
-      ? materialManager->getMaterial("std::Rubber")
-      : materialManager->getMaterial("sct::Rubber");
-
-    // Get required elements
-    const GeoElement* silicon = materialManager->getElement("Silicon");
-    const GeoElement* oxygen = materialManager->getElement("Oxygen");
-    const GeoElement* hydrogen = materialManager->getElement("Hydrogen");
-    const GeoElement* carbon = materialManager->getElement("Carbon");
-    const GeoElement* copper = materialManager->getElement("Copper");
-
-
-    // Define some custom materials - That will move to the GeomDB
-    //Fiberglass
-    GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-    matFiberglass->add(silicon,silicon->getA()/(silicon->getA()+2*oxygen->getA()));
-    matFiberglass->add(oxygen,2*oxygen->getA()/(silicon->getA()+2*oxygen->getA()));
-    matFiberglass->lock();
-
-    //Epoxy Resin
-    GeoMaterial *matEpoxyResin = new GeoMaterial("Epoxy", 1.9*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-    matEpoxyResin->add(hydrogen,     14*hydrogen->getA()   / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()));
-    matEpoxyResin->add(oxygen,        4*oxygen->getA()     / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()));
-    matEpoxyResin->add(carbon,        8*carbon->getA()     / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()));
-    matEpoxyResin->add(silicon,       1*silicon->getA()     / (5*carbon->getA() + 8*hydrogen->getA() + 4*oxygen->getA()+ 1*silicon->getA()));
-    matEpoxyResin->lock();
-
-    //FEBBoards
-    GeoMaterial *matFEBBoards = new GeoMaterial("FEBBoards", 4.03*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-    matFEBBoards->add(matFiberglass, 0.52);
-    matFEBBoards->add(copper, 0.28);
-    matFEBBoards->add(matEpoxyResin, 0.20);
-    matFEBBoards->lock();
-
-    //SERVICES:CABLES, TUBES ETC...//
-
-    //Water
-    GeoMaterial *matWater = new GeoMaterial("Water", 1*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-    matWater->add(hydrogen,     2*hydrogen->getA()   / (2*hydrogen->getA() + 1*oxygen->getA()));
-    matWater->add(oxygen,       1*oxygen->getA()     / (2*hydrogen->getA() + 1*oxygen->getA()));
-    matWater->lock();
-
-    //InDetServices
-    GeoMaterial* matLArServices = new GeoMaterial("LArServices", 4.03*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-    matLArServices->add(shieldSteel, 0.20);
-    matLArServices->add(copper, 0.60);
-    matLArServices->add(matRubber, 0.10);
-    matLArServices->add(air, 0.02);
-    matLArServices->add(matXeCO2O2, 0.03); //new gas mixture from TRT
-    matLArServices->add(matWater, 0.05);
-    matLArServices->lock();
-
-    //----------
-
-    //----------- Building Front-end crates --------------------
-
-    GeoBox     *Pedestal = new GeoBox(71, 400.05, 248.65);
-    GeoBox     *Ped1     = new GeoBox(67, 397.05, 245.65);
-    GeoTube    *Ped2     = new GeoTube(0, 150, 75);
-    GeoTube    *Ped3     = new GeoTube(0, 2775, 300);   //, -75*Gaudi::Units::deg, 150*Gaudi::Units::deg); // 0, 2775, 300, -8.2*Gaudi::Units::deg, 16.4*Gaudi::Units::deg)
-
-    //GeoLogVol  *lvped3   = new GeoLogVol("LAr::DM::PED3",Ped3,air);
-    //GeoPhysVol *ped3   = new GeoPhysVol(lvped3);
-    //envelope->add(ped3);
-
-    const GeoShape & CratePed=((*Pedestal).subtract(*Ped1).
-			       subtract((*Ped2)  <<GeoTrf::TranslateY3D(-200.025)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)).
-			       subtract((*Ped3)  <<GeoTrf::TranslateX3D(-2815)).
-			       subtract((*Ped2)  <<GeoTrf::TranslateY3D(200.025)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)));
-
-
-    GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::PED",&CratePed,air);
-    GeoPhysVol *pedestal   = new GeoPhysVol(lvped);
-    //envelope->add(pedestal);
-
-    GeoBox     *Crate1   = new GeoBox(244.5, 400.05, 255.05);
-    GeoBox     *Crate2   = new GeoBox(250, 396.87, 245.55);
-    GeoBox     *Crate3   = new GeoBox(186.5, 3.175, 245.55);
-    const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<GeoTrf::TranslateX3D(-6.7));
-
-
-    GeoLogVol  *lvcrate = new GeoLogVol("LAr::DM::CRATE",&FEBCrate,alu);
-    GeoPhysVol *crate   = new GeoPhysVol(lvcrate);
-
-
-    //---------- Build Boards and Cooling plates--------
-
-    GeoBox     *Boxb1   = new GeoBox(205.472, 396.87, 245.55);
-    GeoBox     *Boxb2   = new GeoBox(205.472, 3.175, 245.55);
-    const GeoShape & BoardEnvelope= (*Boxb1).subtract(*Boxb2);
-    GeoLogVol  *lvbenv = new GeoLogVol("LAr::DM::BOARDENVELOPE",&BoardEnvelope,air);
-    GeoPhysVol *boardenvelope   = new GeoPhysVol(lvbenv);
-
-
-    GeoBox     *Board   = new GeoBox(204.472, 1.0287, 244.475);
-    GeoLogVol  *lvboard = new GeoLogVol("LAr::DM::FEBBOARD",Board,matFEBBoards); //Board Material go here
-    GeoPhysVol *board   = new GeoPhysVol(lvboard);
-
-    GeoBox     *Plate1   = new GeoBox(197, 7.5, 240);
-    GeoBox     *Plate2   = new GeoBox(200, 5.5, 250);
-    const GeoShape & CoolPlates= (*Plate1).subtract(*Plate2);
-    GeoLogVol  *lvplate = new GeoLogVol("LAr::DM::COOLPLATE",&CoolPlates,alu);
-    GeoPhysVol *plate   = new GeoPhysVol(lvplate);
-
-    GeoBox     *BoardPannel  = new GeoBox(0.5, 9.5925, 244.475);
-    GeoLogVol  *lvboardp     = new GeoLogVol("LAr::DM::BOARDPANNEL",BoardPannel,alu);
-    GeoPhysVol *pannel       = new GeoPhysVol(lvboardp);
-
-    const unsigned int NCrates=16;
-    Variable       i;
-    GENFUNCTION    f = (360*Gaudi::Units::deg/NCrates)*i;
-    GENFUNCTION    f1 = (360*Gaudi::Units::deg/NCrates)*i+315*Gaudi::Units::deg;
-    GENFUNCTION    f2 = (360*Gaudi::Units::deg/NCrates)*i+157.5*Gaudi::Units::deg;
-    GENFUNCTION    g = i*19.685;
-
-    //(f=22.5|| f=45|| f=67.5|| f=180|| f=203.5|| f=225|| f=247.5|| f=270|| f=337.5|| f=360)
-
-    //-------------- Place volumes in envelope ----------------------------
-
-    //boards
-    TRANSFUNCTION xfb1 = Pow(GeoTrf::TranslateY3D(1.0),g)*GeoTrf::TranslateY3D(19.685);
-    TRANSFUNCTION xfb2 = Pow(GeoTrf::TranslateY3D(1.0),-g)*GeoTrf::TranslateY3D(-19.685);
-    GeoSerialTransformer *stb1 = new GeoSerialTransformer(board,&xfb1, (NCrates+3));
-    GeoSerialTransformer *stb2 = new GeoSerialTransformer(board,&xfb2, (NCrates+3));
-    boardenvelope->add(stb1);
-    boardenvelope->add(stb2);
-
-    //coolingplates
-    TRANSFUNCTION xfcp1 = Pow(GeoTrf::TranslateY3D(1.0),g)*GeoTrf::TranslateY3D(19.685);
-    TRANSFUNCTION xfcp2 = Pow(GeoTrf::TranslateY3D(1.0),-g)*GeoTrf::TranslateY3D(-19.685);
-    GeoSerialTransformer *stcp1 = new GeoSerialTransformer(plate,&xfcp1, (NCrates+3));
-    GeoSerialTransformer *stcp2 = new GeoSerialTransformer(plate,&xfcp2, (NCrates+3));
-    boardenvelope->add(stcp1);
-    boardenvelope->add(stcp2);
-
-    //boardpannels
-    TRANSFUNCTION xfp1 = Pow(GeoTrf::TranslateY3D(1.0),g)*GeoTrf::TranslateY3D(19.685)*GeoTrf::TranslateX3D(204.972);
-    TRANSFUNCTION xfp2 = Pow(GeoTrf::TranslateY3D(1.0),-g)*GeoTrf::TranslateY3D(-19.685)*GeoTrf::TranslateX3D(204.972);
-    GeoSerialTransformer *stp1 = new GeoSerialTransformer(pannel,&xfp1, (NCrates+3));
-    GeoSerialTransformer *stp2 = new GeoSerialTransformer(pannel,&xfp2, (NCrates+3));
-    boardenvelope->add(stp1);
-    boardenvelope->add(stp2);
-
-    //crates
-    TRANSFUNCTION xfc1 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3141.25)*GeoTrf::TranslateZ3D(3135.05);
-    TRANSFUNCTION xfc2 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3141.25)*GeoTrf::TranslateZ3D(-3135.05);
-    GeoSerialTransformer *stc1 = new GeoSerialTransformer(crate,&xfc1, NCrates);
-    GeoSerialTransformer *stc2 = new GeoSerialTransformer(crate,&xfc2, NCrates);
-    envelope->add(stc1);
-    envelope->add(stc2);
-
-    //pedestal
-    TRANSFUNCTION xfped1 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(2825.75)*GeoTrf::TranslateZ3D(3135.05);
-    TRANSFUNCTION xfped2 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(2825.75)*GeoTrf::TranslateZ3D(-3135.05);
-    GeoSerialTransformer *stped1 = new GeoSerialTransformer(pedestal,&xfped1, NCrates);
-    GeoSerialTransformer *stped2 = new GeoSerialTransformer(pedestal,&xfped2, NCrates);
-    envelope->add(stped1);
-    envelope->add(stped2);
-
-    //boardenvelopes
-    TRANSFUNCTION xfe1 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3180.278)*GeoTrf::TranslateZ3D(3135.05);
-    TRANSFUNCTION xfe2 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3180.278)*GeoTrf::TranslateZ3D(-3135.05);
-    GeoSerialTransformer *ste1 = new GeoSerialTransformer(boardenvelope,&xfe1, NCrates);
-    GeoSerialTransformer *ste2 = new GeoSerialTransformer(boardenvelope,&xfe2, NCrates);
-    envelope->add(ste1);
-    envelope->add(ste2);
-
-
-    //----------- Building envelope for Cables and Tubes --------------
-
-    GeoTrd   *Trd1air  = new GeoTrd(123.5, 123.5, 167, 245.43, 117.65);
-    GeoTrap  *Trapair  = new GeoTrap(178.33, 39.596*Gaudi::Units::deg, 0, 167, 53.5, 53.5, 0, 167, 123.5, 123.5, 0);
-    GeoTrd   *Trd2air  = new GeoTrd(53.5, 53.5, 280, 548, 677.5);
-    GeoBox   *Box   = new GeoBox(280, 280, 100);
-
-    GeoTrd   *Trd1alu  = new GeoTrd(5, 5, 167, 245.43, 117.65);
-    GeoTrap  *Trapalu  = new GeoTrap(178.33, 45.5*Gaudi::Units::deg, 0, 167, 5, 5, 0, 167, 5, 5, 0);
-    GeoTrd   *Trd2alu  = new GeoTrd(5, 5, 280, 548, 677.5);
-
-    GeoTrf::Transform3D Cut1Box  = GeoTrf::Translate3D(-295.5, 500, -473.563)*GeoTrf::RotateX3D(-20*Gaudi::Units::deg);
-    GeoTrf::Transform3D Cut2Box  = GeoTrf::Translate3D(-295.5, -500, -473.563)*GeoTrf::RotateX3D(20*Gaudi::Units::deg);
-
-
-
-    const GeoShape & Envelopes= (*Trd1air).
-      // add((*Trapair)  <<GeoTrf::Translate3D(-147.5, 0, -295.25)).
-      add((*Trd2air)  <<GeoTrf::Translate3D(-295.5, 0,  -1151.063)).
-      subtract((*Box)  <<GeoTrf::Transform3D(Cut1Box)).
-      subtract((*Box)  <<GeoTrf::Transform3D(Cut2Box)).
-      add((*Trapair)  <<GeoTrf::Translate3D(-147.5, 0, -295.25));
-    GeoLogVol  *lv          = new GeoLogVol("LAr::DM::Envelopes",&Envelopes,matLArServices); // Services material go here
-    GeoPhysVol *envelopes    = new GeoPhysVol(lv);
-
-    const GeoShape & Baseplates= (*Trd1alu).add((*Trapalu)  <<GeoTrf::Translate3D(-180.5, 0, -295.25));
-    GeoLogVol  *lvbis          = new GeoLogVol("LAr::DM::Baseplates",&Baseplates,alu);
-    GeoPhysVol *baseplates    = new GeoPhysVol(lvbis);
-
-    const GeoShape & SectorPlates= ((*Trd2alu)  <<GeoTrf::Translate3D(-366, 0, -1151.063)).
-      subtract((*Box)  <<GeoTrf::Transform3D(Cut1Box)).
-      subtract((*Box)  <<GeoTrf::Transform3D(Cut2Box));
-    GeoLogVol  *lvbiss          = new GeoLogVol("LAr::DM::Sectorplates",&SectorPlates,alu);
-    GeoPhysVol *sectorplates    = new GeoPhysVol(lvbiss);
-
-
-    //envelopes
-    TRANSFUNCTION xf3a = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3165.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-    TRANSFUNCTION xf4a = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3165.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg);
-    GeoSerialTransformer *st3 = new GeoSerialTransformer(envelopes,&xf3a, NCrates);
-    GeoSerialTransformer *st4 = new GeoSerialTransformer(envelopes,&xf4a, NCrates);
-    envelope->add(st3);
-    envelope->add(st4);
-
-    //baseplates
-    TRANSFUNCTION xf3b = Pow(GeoTrf::RotateZ3D(1.0),f1)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-    TRANSFUNCTION xf4b = Pow(GeoTrf::RotateZ3D(1.0),(f1+22.5*Gaudi::Units::deg))*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg);
-    GeoSerialTransformer *st3bis = new GeoSerialTransformer(baseplates,&xf3b, (NCrates-11));
-    GeoSerialTransformer *st4bis = new GeoSerialTransformer(baseplates,&xf4b, (NCrates-11));
-    envelope->add(st3bis);
-    envelope->add(st4bis);
-
-    TRANSFUNCTION xf5b = Pow(GeoTrf::RotateZ3D(1.0),f2)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-    TRANSFUNCTION xf6b = Pow(GeoTrf::RotateZ3D(1.0),(f2-22.5*Gaudi::Units::deg))*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg);
-    GeoSerialTransformer *st5bis = new GeoSerialTransformer(baseplates,&xf5b, (NCrates-11));
-    GeoSerialTransformer *st6bis = new GeoSerialTransformer(baseplates,&xf6b, (NCrates-11));
-    envelope->add(st5bis);
-    envelope->add(st6bis);
-
-    //sectorplates
-    TRANSFUNCTION xf3bb = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-    TRANSFUNCTION xf4bb = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3044.5)*GeoTrf::RotateZ3D(-11.25*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg);
-    GeoSerialTransformer *st3biss = new GeoSerialTransformer(sectorplates,&xf3bb, NCrates);
-    GeoSerialTransformer *st4biss = new GeoSerialTransformer(sectorplates,&xf4bb, NCrates);
-    envelope->add(st3biss);
-    envelope->add(st4biss);
-  }
-  else if(strDMTopTag=="LArBarrelDM-01" || strDMTopTag=="LArBarrelDM-02")
-  {
-  // Get some standard materials
-  const GeoMaterial *air        = materialManager->getMaterial("std::Air"); //0.001214 g/cm3
-  const GeoMaterial *alu        = materialManager->getMaterial("std::Aluminium"); //2.7 g/cm3
-  const GeoMaterial *shieldSteel = materialManager->getMaterial("shield::ShieldSteel"); //8 g/cm3
-  const GeoMaterial *matCO2 = materialManager->getMaterial("std::CO2")!=nullptr //0.001842 g/cm3
-    ? materialManager->getMaterial("std::CO2")
-    : materialManager->getMaterial("trt::CO2");
-  const GeoMaterial *matKapton = materialManager->getMaterial("std::Kapton"); // 1.42*gram/cm3
-  const GeoMaterial *matC3F8 = materialManager->getMaterial("std::C3F8"); //1.032*gram/cm3
-
-  // Get required elements
-  const GeoElement* silicon = materialManager->getElement("Silicon");
-  const GeoElement* oxygen = materialManager->getElement("Oxygen");
-  const GeoElement* hydrogen = materialManager->getElement("Hydrogen");
-  const GeoElement* carbon = materialManager->getElement("Carbon");
-  const GeoElement* copper = materialManager->getElement("Copper");
-  const GeoElement* nitrogen = materialManager->getElement("Nitrogen");
-  const GeoElement* fluorine = materialManager->getElement("Fluorine");
-
-  // Define some custom materials - That will move to the GeomDB
-
-
-  //C6F14
-  GeoMaterial *matC6F14 = new GeoMaterial("C6F14",1.68*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matC6F14->add(carbon,   6*carbon->getA()   / (6*carbon->getA() + 14*fluorine->getA()));
-  matC6F14->add(fluorine, 14*fluorine->getA() / (6*carbon->getA() + 14*fluorine->getA()));
-  matC6F14->lock();
-
-  //Water
-  GeoMaterial *matWater = new GeoMaterial("Water", 1*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matWater->add(hydrogen,     2*hydrogen->getA()   / (2*hydrogen->getA() + 1*oxygen->getA()));
-  matWater->add(oxygen,       1*oxygen->getA()     / (2*hydrogen->getA() + 1*oxygen->getA()));
-  matWater->lock();
-
-  //Nitrogen
-  GeoMaterial *matN2 = new GeoMaterial("N2", 0.0012506*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matN2->add(nitrogen,1);
-  matN2->lock();
-
-  //Fiberglass
-  GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matFiberglass->add(silicon,silicon->getA()/(silicon->getA()+2*oxygen->getA()));
-  matFiberglass->add(oxygen,2*oxygen->getA()/(silicon->getA()+2*oxygen->getA()));
-  matFiberglass->lock();
-
-  //Epoxy Resin
-  GeoMaterial *matEpoxyResin = new GeoMaterial("Epoxy:C8H14O4Si", 1.9*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matEpoxyResin->add(hydrogen,     14*hydrogen->getA()   / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()+ 1*silicon->getA()));
-  matEpoxyResin->add(oxygen,        4*oxygen->getA()     / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()+ 1*silicon->getA()));
-  matEpoxyResin->add(carbon,        8*carbon->getA()     / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()+ 1*silicon->getA()));
-  matEpoxyResin->add(silicon,       1*silicon->getA()    / (14*hydrogen->getA() + 4*oxygen->getA()+ 8*carbon->getA()+ 1*silicon->getA()));
-  matEpoxyResin->lock();
-
-  //FEBoards
-  GeoMaterial *matFEBoards = new GeoMaterial("FEBoards", 4.03*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matFEBoards->add(matFiberglass, 0.52);
-  matFEBoards->add(copper, 0.28);
-  matFEBoards->add(matEpoxyResin, 0.20);
-  matFEBoards->lock();
-
-  //BoardsEnvelope (FEBoards + Cooling Plates + Water + Air)
-  GeoMaterial* matBoardsEnvelope = new GeoMaterial("BoardsEnvelope", 0.932*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
-  matBoardsEnvelope->add(matFEBoards, 0.4147);
-  matBoardsEnvelope->add(matWater, 0.0736);
-  matBoardsEnvelope->add(air, 0.0008);
-  matBoardsEnvelope->add(alu,0.5109 );
-  matBoardsEnvelope->lock();
-
-  //InDetServices !!! Provisoire !!!
-  double density1 = 1.*GeoModelKernelUnits::gram/Gaudi::Units::cm3;
-  if (strDMTopTag=="LArBarrelDM-02") density1 = 1.7*GeoModelKernelUnits::gram/Gaudi::Units::cm3;
-  GeoMaterial* matLArServices1 = new GeoMaterial("LArServices1", density1);
-  matLArServices1->add(copper, .60);
-  matLArServices1->add(shieldSteel, .05);
-  matLArServices1->add(matKapton, .20);
-  matLArServices1->add(matC3F8, .051);
-  matLArServices1->add(matC6F14, .051);
-  matLArServices1->add(air, .016);
-  matLArServices1->add(matN2, .016);
-  matLArServices1->add(matCO2, .016);
-  matLArServices1->lock();
-
-  //InDetServices !!! Provisoire !!!
-  double density2 = 2.*GeoModelKernelUnits::gram/Gaudi::Units::cm3;
-  if (strDMTopTag=="LArBarrelDM-02") density2 = 3.4*GeoModelKernelUnits::gram/Gaudi::Units::cm3;
-  GeoMaterial* matLArServices2 = new GeoMaterial("LArServices2", density2);
-  matLArServices2->add(copper, .60);
-  matLArServices2->add(shieldSteel, .05);
-  matLArServices2->add(matKapton, .20);
-  matLArServices2->add(matC3F8, .051);
-  matLArServices2->add(matC6F14, .051);
-  matLArServices2->add(air, .016);
-  matLArServices2->add(matN2, .016);
-  matLArServices2->add(matCO2, .016);
-  matLArServices2->lock();
-
-//  std::cout << " -- LArServices1 density,x0,lambda " << matLArServices1->getDensity()/(g/cm3) << " "
-//     << matLArServices1->getRadLength() << " " << matLArServices1->getIntLength() << std::endl;
-//  std::cout << " -- LArServices2 density,x0,lambda " << matLArServices2->getDensity()/(g/cm3) << " "
-//     << matLArServices2->getRadLength() << " " << matLArServices2->getIntLength() << std::endl;
-
-  const unsigned int NCrates=16;
-  const double Alfa=360*Gaudi::Units::deg/NCrates;
-  const double Enda=1155;
-  const double Endb=1695.2;
-  const double Endc=2771.6;
-  const double DYa=1155*tan(Alfa/2);
-  const double DYb=1695.2*tan(Alfa/2);
-  const double DYc=2771.6*tan(Alfa/2);
-  Variable       i;
-  GENFUNCTION    f = Alfa*i;
-
-  ////----------- Building Front-end crates --------------------
-
-
-  // ----- build pedestal -----
-  GeoBox     *Pedestal = new GeoBox(71, 383.18, 248.65);
-  GeoBox     *Ped1     = new GeoBox(67, 380.18, 245.65);
-  GeoTube    *Ped2     = new GeoTube(0, 150, 75);
-  GeoTube    *Ped3     = new GeoTube(0, 2775, 300);
-  const GeoShape & CratePed=((*Pedestal).subtract(*Ped1).
-			     subtract((*Ped2)  <<GeoTrf::TranslateY3D(-200.025)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)).
-			     subtract((*Ped3)  <<GeoTrf::TranslateX3D(-2800)).
-		             subtract((*Ped2)  <<GeoTrf::TranslateY3D(200.025)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)));
-
-  GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::Ped",&CratePed,alu);
-  GeoPhysVol *pedestal   = new GeoPhysVol(lvped);
-
-  // ----- build crates -----
-  GeoBox     *Crate1   = new GeoBox(244.5, 400.05, 255.05);
-  GeoBox     *Crate2   = new GeoBox(250, 396.87, 245.55);
-  GeoBox     *Crate3   = new GeoBox(186.5, 3.175, 245.55);
-  const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<GeoTrf::TranslateX3D(-6.7));
-
-  GeoLogVol  *lvcrate = new GeoLogVol("LAr::DM::Crate",&FEBCrate,alu);
-  GeoPhysVol *crate   = new GeoPhysVol(lvcrate);
-
-  // ----- build boardenvelopes -----
-  GeoBox     *BoardEnvelope   = new GeoBox(204, 194, 244);
-  GeoLogVol  *lvbenv = new GeoLogVol("LAr::DM::FEBoard",BoardEnvelope,matBoardsEnvelope);
-  GeoPhysVol *boardenvelope   = new GeoPhysVol(lvbenv);
-
-
-  //-------------- Place volumes in envelope ----------------------------
-
-  //Crates
-  TRANSFUNCTION crA = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3141.25)*GeoTrf::TranslateZ3D(3135.05);
-  TRANSFUNCTION crC = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(3141.25)*GeoTrf::TranslateZ3D(-3135.05);
-  GeoSerialTransformer *crtA = new GeoSerialTransformer(crate,&crA, NCrates);
-  GeoSerialTransformer *crtC = new GeoSerialTransformer(crate,&crC, NCrates);
-  envelope->add(crtA);
-  envelope->add(crtC);
-
-  //Pedestals
-  TRANSFUNCTION pedA = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(2825.75)*GeoTrf::TranslateZ3D(3135.05);
-  TRANSFUNCTION pedC = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(2825.75)*GeoTrf::TranslateZ3D(-3135.05);
-  GeoSerialTransformer *pedtA = new GeoSerialTransformer(pedestal,&pedA, NCrates);
-  GeoSerialTransformer *pedtC = new GeoSerialTransformer(pedestal,&pedC, NCrates);
-  envelope->add(pedtA);
-  envelope->add(pedtC);
-
-  //FEBoards
-  TRANSFUNCTION feb1A = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(200.25)*GeoTrf::TranslateX3D(3181.25)*GeoTrf::TranslateZ3D(3135.05);
-  TRANSFUNCTION feb2A = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-200.25)*GeoTrf::TranslateX3D(3181.25)*GeoTrf::TranslateZ3D(3135.05);
-  TRANSFUNCTION feb1C = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(200.25)*GeoTrf::TranslateX3D(3181.25)*GeoTrf::TranslateZ3D(-3135.05);
-  TRANSFUNCTION feb2C = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-200.25)*GeoTrf::TranslateX3D(3181.25)*GeoTrf::TranslateZ3D(-3135.05);
-  GeoSerialTransformer *febt1A = new GeoSerialTransformer(boardenvelope,&feb1A, NCrates);
-  GeoSerialTransformer *febt1C = new GeoSerialTransformer(boardenvelope,&feb1C, NCrates);
-  GeoSerialTransformer *febt2A = new GeoSerialTransformer(boardenvelope,&feb2A, NCrates);
-  GeoSerialTransformer *febt2C = new GeoSerialTransformer(boardenvelope,&feb2C, NCrates);
-  envelope->add(febt1A);
-  envelope->add(febt1C);
-  envelope->add(febt2A);
-  envelope->add(febt2C);
-
-  ////----------- Building envelopes and support plates for Cables and Tubes --------------
-
-  // transforms
-  GeoBox   *Box   = new GeoBox(280, 280, 100);
-
-  GeoTrf::Transform3D Cut3Boxe  = GeoTrf::Translate3D(0, 548, 711)*GeoTrf::RotateX3D(-20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoTrf::Transform3D Cut4Boxe  = GeoTrf::Translate3D(0, -548,711)*GeoTrf::RotateX3D(20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoTrf::Transform3D Cut3Boxp  = GeoTrf::Translate3D(0, 548, 850)*GeoTrf::RotateX3D(-20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoTrf::Transform3D Cut4Boxp  = GeoTrf::Translate3D(0, -548,850)*GeoTrf::RotateX3D(20*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-
-  // ----- build base envelopes -----
-  GeoTrd   *Trd1air  = new GeoTrd(123.5, 123.5, 167, 305, 287.5);
-  GeoLogVol  *lvbe          = new GeoLogVol("LAr::DM::BaseEnvelopes",Trd1air,matLArServices1);
-  GeoPhysVol *baseenvelopes    = new GeoPhysVol(lvbe);
-
-  // ----- build bridge envelopes -----
-  GeoTrap  *Trapair  = new GeoTrap(201.70, 45.35*Gaudi::Units::deg, 0, 160, 52.95, 52.95, 0, 160, 123.5, 123.5, 0);
-  GeoLogVol  *lvbre          = new GeoLogVol("LAr::DM::BridgeEnvelopes",Trapair,matLArServices1);
-  GeoPhysVol *bridgeenvelopes    = new GeoPhysVol(lvbre);
-
-  // ----- build sector envelopes -----
-  GeoTrd   *Trdair1  = new GeoTrd(52.95, 52.95, DYa, DYb, (Endb-Enda)/2);// (52.95, 52.95, 229.7, 335.83, 269.6)
-  GeoLogVol  *lvse1          = new GeoLogVol("LAr::DM::SectorEnvelopes1",Trdair1,matLArServices2);
-  GeoPhysVol *sectorenvelopes1    = new GeoPhysVol(lvse1);
-
-
-  GeoTrd   *Trdair2  = new GeoTrd(52.95, 52.95, DYb, DYc, (Endc-Endb)/2);//(52.95, 52.95, 335.83, 548.5, 538.2)
-  const GeoShape & SectorEnvelope= ((*Trdair2).
-				     subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxe)).
-				     subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxe)));
-
-  const GeoShape & SectorEnvelopes= ((SectorEnvelope).
-                                    add(SectorEnvelope  << GeoTrf::TranslateY3D(-(DYb+DYc)*cos(Alfa/2)*cos(Alfa/2))*GeoTrf::TranslateZ3D(-(DYb+DYc)*0.5*sin(Alfa))*GeoTrf::RotateX3D(Alfa)));
-
-  GeoLogVol  *lvse2r          = new GeoLogVol("LAr::DM::SectorEnvelopes2r",&SectorEnvelopes,matLArServices1);
-  GeoPhysVol *sectorenvelopes2r    = new GeoPhysVol(lvse2r);  // for right-handed splice boxes sideA
-
-  GeoLogVol  *lvse2l          = new GeoLogVol("LAr::DM::SectorEnvelopes2l",&SectorEnvelopes,matLArServices1);
-  GeoPhysVol *sectorenvelopes2l    = new GeoPhysVol(lvse2l);  // for left-handed splice boxes
-
-  GeoLogVol  *lvse2          = new GeoLogVol("LAr::DM::SectorEnvelopes2",&SectorEnvelopes,matLArServices1);
-  GeoPhysVol *sectorenvelopes2    = new GeoPhysVol(lvse2);  // no splice boxes
-
-  // ----- build base plates -----
-  GeoTrd   *Trd1alu  = new GeoTrd(5, 5, 167, 305, 287.5);
-  GeoLogVol  *lvbp          = new GeoLogVol("LAr::DM::BasePlates",Trd1alu,alu);
-  GeoPhysVol *baseplates    = new GeoPhysVol(lvbp);
-
-  // ----- build bridge plates -----
-  GeoTrap  *Trapalu  = new GeoTrap(201.70, 49.92*Gaudi::Units::deg, 0, 160, 5, 5, 0, 160, 5, 5, 0);
-  GeoLogVol  *lvbrp          = new GeoLogVol("LAr::DM::BridgePlates",Trapalu,alu);
-  GeoPhysVol *bridgeplates    = new GeoPhysVol(lvbrp);
-
-
-  // ----- build sector plates -----
-  GeoTrd   *Trd2alu  = new GeoTrd(5, 5, 280, 548, 677.5);
-  const GeoShape & SectorPlates= ((*Trd2alu).
-                                   subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxp)).
-				   subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxp)));
-  GeoLogVol  *lvsp          = new GeoLogVol("LAr::DM::SectorPlates",&SectorPlates,alu);
-  GeoPhysVol *sectorplates    = new GeoPhysVol(lvsp);
-
-  //---------- Build Splice boxes for InDet optical fibers--------
-
-  GeoTrap  *GeoTrap1  = new GeoTrap(237.5, 0, 0, 307, 47.5, 47.5, 0, 259.17, 47.5, 47.5, 0);
-  GeoBox   *Box1   = new GeoBox(50, 244.80, 150);
-  const GeoShape & SpliceBox = ((*GeoTrap1).
-				subtract(*Box1 << GeoTrf::TranslateZ3D(193.88)*GeoTrf::TranslateY3D(-223.49)*GeoTrf::RotateX3D(41.592*Gaudi::Units::deg)));
-
-  GeoTransform *xtr = new GeoTransform (GeoTrf::TranslateZ3D(39.57)*GeoTrf::TranslateY3D(-452.12)*GeoTrf::TranslateX3D(5.40)*GeoTrf::RotateX3D(191.25*Gaudi::Units::deg));
-  sectorenvelopes2r->add(xtr);
-  GeoLogVol  *lvspbr     = new GeoLogVol("LAr::DM::SPliceBoxr",&SpliceBox,alu);
-  GeoPhysVol *spliceboxr       = new GeoPhysVol(lvspbr);
-  sectorenvelopes2r->add(spliceboxr);
-
-  GeoTransform *xtl = new GeoTransform (GeoTrf::TranslateZ3D(39.57)*GeoTrf::TranslateY3D(-452.12)*GeoTrf::TranslateX3D(5.40)*GeoTrf::RotateY3D(-180*Gaudi::Units::deg)*GeoTrf::RotateX3D(-(Alfa/2)));
-  sectorenvelopes2l->add(xtl);
-  GeoLogVol  *lvspbl     = new GeoLogVol("LAr::DM::SpliceBoxl",&SpliceBox,alu);
-  GeoPhysVol *spliceboxl       = new GeoPhysVol(lvspbl);
-  sectorenvelopes2l->add(spliceboxl);
-
-
-  ////
-  GeoTrd   *Trd1  = new GeoTrd(44.5, 44.5, 0, 214.72, 94.20);
-  GeoTrap  *GeoTrap2  = new GeoTrap(149, 0, 0, 126.215, 44.5, 44.5, 0, 95, 44.5, 44.5, 0);
-  GeoTrap  *GeoTrap3  = new GeoTrap(72, 0, 0, 294.5, 44.5, 44.5, 0, 279.396, 44.5, 44.5, 0);
-
-  GeoTransform *xt1 = new GeoTransform (GeoTrf::TranslateY3D(-53)*GeoTrf::RotateX3D(42.25*Gaudi::Units::deg));
-  spliceboxr->add(xt1);
-  spliceboxl->add(xt1);
-  GeoLogVol  *lt1     = new GeoLogVol("LAr::DM::TBox1",Trd1,air);
-  GeoPhysVol *tbox1       = new GeoPhysVol(lt1);
-  spliceboxr->add(tbox1);
-  spliceboxl->add(tbox1);
-
-  GeoTransform *xt2 = new GeoTransform (GeoTrf::TranslateZ3D(78)*GeoTrf::TranslateY3D(154));
-  spliceboxr->add(xt2);
-  spliceboxl->add(xt2);
-  GeoLogVol  *lt2     = new GeoLogVol("LAr::DM::TBox2",GeoTrap2,air);
-  GeoPhysVol *tbox2       = new GeoPhysVol(lt2);
-  spliceboxr->add(tbox2);
-  spliceboxl->add(tbox2);
-
-  GeoTransform *xt3 = new GeoTransform (GeoTrf::TranslateZ3D(-155.81));
-  spliceboxr->add(xt3);
-  spliceboxl->add(xt3);
-  GeoLogVol  *lt3     = new GeoLogVol("LAr::DM::TBox3",GeoTrap3,air);
-  GeoPhysVol *tbox3       = new GeoPhysVol(lt3);
-  spliceboxr->add(tbox3);
-  spliceboxl->add(tbox3);
-
-
-  //-------------- Place volumes in LAr Envelope -------------------
-
-  //sectorPlates
-  TRANSFUNCTION spA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2095)*GeoTrf::TranslateZ3D(3410.1)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION spC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(2095)*GeoTrf::TranslateZ3D(-3410.1)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoSerialTransformer *sptA = new GeoSerialTransformer(sectorplates,&spA, NCrates);
-  GeoSerialTransformer *sptC = new GeoSerialTransformer(sectorplates,&spC, NCrates);
-  envelope->add(sptA);
-  envelope->add(sptC);
-
-  //bridgePlates
-  TRANSFUNCTION brpA1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(3170.1)*GeoTrf::RotateZ3D(90*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)*GeoTrf::RotateX3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION brpA2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(3170.1)*GeoTrf::RotateZ3D(90*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)*GeoTrf::RotateX3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION brpC1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(-3170.1)*GeoTrf::RotateZ3D(-90*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg)*GeoTrf::RotateX3D(-90*Gaudi::Units::deg);
-  TRANSFUNCTION brpC2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(-3170.1)*GeoTrf::RotateZ3D(-90*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg)*GeoTrf::RotateX3D(-90*Gaudi::Units::deg);   GeoSerialTransformer *brptA1 = new GeoSerialTransformer(bridgeplates,&brpA1, 5);
-  GeoSerialTransformer *brptA2 = new GeoSerialTransformer(bridgeplates,&brpA2, 5);
-  GeoSerialTransformer *brptC1 = new GeoSerialTransformer(bridgeplates,&brpC1, 5);
-  GeoSerialTransformer *brptC2 = new GeoSerialTransformer(bridgeplates,&brpC2, 5);
-  envelope->add(brptA1);
-  envelope->add(brptA2);
-  envelope->add(brptC1);
-  envelope->add(brptC2);
-
-  //basePlates
-  TRANSFUNCTION bpA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(2930.6)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION bpC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(-2930.6)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoSerialTransformer *bptA = new GeoSerialTransformer(baseplates,&bpA, NCrates);
-  GeoSerialTransformer *bptC = new GeoSerialTransformer(baseplates,&bpC, NCrates);
-  envelope->add(bptA);
-  envelope->add(bptC);
-
-  //sectorEnvelopes
-  TRANSFUNCTION seA1 = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seC1 = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoSerialTransformer *setA1 = new GeoSerialTransformer(sectorenvelopes1,&seA1, NCrates);
-  GeoSerialTransformer *setC1 = new GeoSerialTransformer(sectorenvelopes1,&seC1, NCrates);
-  envelope->add(setA1);
-  envelope->add(setC1);
-
-  TRANSFUNCTION seA2r = Pow(GeoTrf::RotateZ3D(1.0),8*f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seA2l = Pow(GeoTrf::RotateZ3D(1.0),8*f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seA2 = Pow(GeoTrf::RotateZ3D(1.0),4*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seC2 = Pow(GeoTrf::RotateZ3D(1.0),4*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seC2r = Pow(GeoTrf::RotateZ3D(1.0),8*f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION seC2l = Pow(GeoTrf::RotateZ3D(1.0),8*f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoSerialTransformer *setA2r = new GeoSerialTransformer(sectorenvelopes2r,&seA2r, 2);
-  GeoSerialTransformer *setA2l = new GeoSerialTransformer(sectorenvelopes2l,&seA2l, 2);
-  GeoSerialTransformer *setA2 = new GeoSerialTransformer(sectorenvelopes2,&seA2, 4);
-  GeoSerialTransformer *setC2 = new GeoSerialTransformer(sectorenvelopes2,&seC2, 4);
-  GeoSerialTransformer *setC2r = new GeoSerialTransformer(sectorenvelopes2r,&seC2r, 2);
-  GeoSerialTransformer *setC2l = new GeoSerialTransformer(sectorenvelopes2l,&seC2l, 2);
-  envelope->add(setA2r);
-  envelope->add(setA2l);
-  envelope->add(setA2);
-  envelope->add(setC2);
-  envelope->add(setC2r);
-  envelope->add(setC2l);
-
-  //bridgeEnvelopes
-  TRANSFUNCTION breA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2974.532)*GeoTrf::TranslateZ3D(3263.65)*GeoTrf::RotateZ3D(90*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg)*GeoTrf::RotateX3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION breC = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2974.532)*GeoTrf::TranslateZ3D(-3263.65)*GeoTrf::RotateZ3D(-90*Gaudi::Units::deg)*GeoTrf::RotateY3D(-90*Gaudi::Units::deg)*GeoTrf::RotateX3D(-90*Gaudi::Units::deg);
-  GeoSerialTransformer *bretA = new GeoSerialTransformer(bridgeenvelopes,&breA, NCrates);
-  GeoSerialTransformer *bretC = new GeoSerialTransformer(bridgeenvelopes,&breC, NCrates);
-  envelope->add(bretA);
-  envelope->add(bretC);
-
-  //baseEnvelopes
-  TRANSFUNCTION beA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(3059.2)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  TRANSFUNCTION beC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(-3059.2)*GeoTrf::RotateY3D(90*Gaudi::Units::deg);
-  GeoSerialTransformer *betA = new GeoSerialTransformer(baseenvelopes,&beA, NCrates);
-  GeoSerialTransformer *betC = new GeoSerialTransformer(baseenvelopes,&beC, NCrates);
-  envelope->add(betA);
-  envelope->add(betC);
-
-
-  // GeoMaterial::add(GeoMaterial*) does not take ownership of the
-  // material passed as a parameter.  Thus, something like
-  //   mat1* = new GeoMaterial (...);
-  //   ...
-  //   mat2->add (mat1);
-  // will leak mat1.
-  // Make sure such materials get deleted.
-  // Do a ref/unref just in case something changes above and they
-  // end up owned by someone.
-  matFEBoards->ref();    matFEBoards->unref();
-  matC6F14->ref();       matC6F14->unref();
-  matWater->ref();       matWater->unref();
-  matEpoxyResin->ref();  matEpoxyResin->unref();
-  matFiberglass->ref();  matFiberglass->unref();
-  matN2->ref();          matN2->unref();
-  }
-  else
-  {
-    LArGeo::BarrelDM::createFromDB (envelope, rdbAccess, geoModel, *materialManager);
-  }
+  createFromDB(envelope
+	       , m_rdbAccess
+	       , m_geoModel
+	       , m_materialManager);
 
   if(m_activateFT){
     std::string name = "LAr::Barrel::SignalFT::";
-    log << MSG::DEBUG << "creating " << name << " volumes" << endmsg;
+    ATH_MSG_DEBUG("creating " << name << " volumes");
 
-    const GeoMaterial* iron = materialManager->getMaterial("std::Iron");
+    const GeoMaterial* iron = m_materialManager->getMaterial("std::Iron");
 
     const double wflange_height = 37.*Gaudi::Units::mm;
     const double wflange_R = 0.5*360.*Gaudi::Units::mm;
-    const GeoMaterial* wflange_mat = materialManager->getMaterial("LAr::FT::WarmFlange");
+    const GeoMaterial* wflange_mat = m_materialManager->getMaterial("LAr::FT::WarmFlange");
 
     GeoShape* wflange = new GeoTube(0., wflange_R, wflange_height/2);
     GeoLogVol* wflangeLV = new GeoLogVol(name + "WarmFlange", wflange, wflange_mat);
@@ -1594,14 +881,14 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     const double bellow_height = 225.*Gaudi::Units::mm;
     const double bellow_Router = 0.5*299.*Gaudi::Units::mm; // this also to be cut in warm wall
     const double bellow_wall = 15.*Gaudi::Units::mm;
-    const GeoMaterial* bellow_mat = materialManager->getMaterial("LAr::FT::Bellow");
+    const GeoMaterial* bellow_mat = m_materialManager->getMaterial("LAr::FT::Bellow");
 
     const double bellow_Rinner = bellow_Router - bellow_wall;
     GeoShape* bellow = new GeoTube(bellow_Rinner, bellow_Router, bellow_height/2);
     GeoLogVol* bellowLV = new GeoLogVol(name + "Bellow", bellow, bellow_mat);
     GeoPhysVol* bellowPV = new GeoPhysVol(bellowLV);
 
-    const GeoMaterial* vcables_mat = materialManager->getMaterial("LAr::FT::VacuumCables");
+    const GeoMaterial* vcables_mat = m_materialManager->getMaterial("LAr::FT::VacuumCables");
 
     GeoShape* vcables = new GeoTube(0., bellow_Rinner, bellow_height/2);
     GeoLogVol* vcablesLV = new GeoLogVol(name + "VacuumCables", vcables, vcables_mat);
@@ -1609,7 +896,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
 
     const double cflange_height = 35.*Gaudi::Units::mm;
     const double cflange_Router = 0.5*283.*Gaudi::Units::mm;
-    const GeoMaterial* cflange_mat = materialManager->getMaterial("LAr::FT::ColdFlange");
+    const GeoMaterial* cflange_mat = m_materialManager->getMaterial("LAr::FT::ColdFlange");
     GeoShape* cflange = new GeoTube(0., cflange_Router, cflange_height/2);
     GeoLogVol* cflangeLV = new GeoLogVol(name + "ColdFlange", cflange, cflange_mat);
     GeoPhysVol* cflangePV = new GeoPhysVol(cflangeLV);
@@ -1626,9 +913,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     const double coldbox3_height = // adjust to match dist between cryo walls
         barrel_dist_from_outer_warm_wall_to_inner_cold_wall
         - bellow_height - coldbox1_height - coldbox2_height;
-    log << MSG::DEBUG << "funnel tube len = "
-        << coldbox3_height / Gaudi::Units::mm
-        << " mm " << endmsg;
+    ATH_MSG_DEBUG("funnel tube len = " << coldbox3_height / Gaudi::Units::mm << " mm ");
     const GeoMaterial* coldbox_mat = iron;
     GeoShape* coldbox1 = new GeoTube(coldbox1_Router - coldbox1_wall, coldbox1_Router, coldbox1_height/2); // wide part
     GeoShape* coldbox11 = new GeoTube(0., coldbox1_Router, coldbox1_height/2); // wide part for FTenvelope
@@ -1671,7 +956,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
 
     GeoLogVol* FTLV = new GeoLogVol(name + "Envelope",
         &FTenvelope,
-        materialManager->getMaterial("std::Air")
+        m_materialManager->getMaterial("std::Air")
     );
     GeoPhysVol* FTPV = new GeoPhysVol(FTLV);
 
@@ -1694,7 +979,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     FTPV->add(coldbox3_trf);
     FTPV->add(coldbox3PV);
 
-    const GeoMaterial* lar_mat = materialManager->getMaterial("std::LiquidArgon");
+    const GeoMaterial* lar_mat = m_materialManager->getMaterial("std::LiquidArgon");
     GeoShape* lar1 = new GeoTube(0., coldbox1_Router - coldbox1_wall, coldbox1_height/2);
     GeoShape* lar2 = new GeoTube(0., hole_r, coldbox1_height);
     const GeoShape& lar = lar1->subtract((*lar2) << GeoTrf::TranslateY3D(hole_shift));
@@ -1703,7 +988,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     FTPV->add(coldbox1_trf);
     FTPV->add(larPV);
 
-    const GeoMaterial *pigtail_mat = materialManager->getMaterial("LAr::FT::Pigtail");
+    const GeoMaterial *pigtail_mat = m_materialManager->getMaterial("LAr::FT::Pigtail");
 
     const double pth = (coldbox1_height + coldbox2_height + coldbox3_height) / 2;
     GeoTransform *pigtail_trf = new GeoTransform(
@@ -1719,7 +1004,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     // total lenght should be 28.5 cm
     const double ocable_len = 10.*Gaudi::Units::cm;
     const double ocable_R = (1.1/2)*sqrt(1920*2.85)*Gaudi::Units::mm;
-    const GeoMaterial* ocable_mat = materialManager->getMaterial("LAr::FT::Cable");
+    const GeoMaterial* ocable_mat = m_materialManager->getMaterial("LAr::FT::Cable");
     GeoShape* ocable = new GeoTube(0., ocable_R, ocable_len / 2);
     GeoLogVol* ocableLV = new GeoLogVol("LAr::Barrel::FTCables", ocable, ocable_mat);
     GeoPhysVol* ocablePV = new GeoPhysVol(ocableLV);
@@ -1759,5 +1044,6 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
         put(phi + dphi, -z_pos);
     }
   }
+
 }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
index 7148898da3aedb240e23c9714cc14a2c957072df..050b86c86ecd1b6aa1377ef79e842b310766b4b1 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
@@ -1,4 +1,4 @@
-#Copyright (C) 2021 CERN for the benefit of the ATLAS collaboration
+#Copyright (C) 2023 CERN for the benefit of the ATLAS collaboration
 
 # Declare the package name:
 atlas_subdir( LArGeoBarrel )
@@ -12,5 +12,5 @@ atlas_add_library( LArGeoBarrel
                    PUBLIC_HEADERS LArGeoBarrel
                    INCLUDE_DIRS ${GEOMODEL_INCLUDE_DIRS}
                    LINK_LIBRARIES ${GEOMODEL_LIBRARIES} LArGeoCode StoreGateLib
-                   PRIVATE_LINK_LIBRARIES GeoModelUtilities GaudiKernel LArReadoutGeometry RDBAccessSvcLib )
+                   PRIVATE_LINK_LIBRARIES GeoModelUtilities GaudiKernel LArReadoutGeometry RDBAccessSvcLib CrackRegionGeoModel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelDMConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelDMConstruction.h
deleted file mode 100755
index 512e4eac9228b392c8db5149053f91390aa738e2..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelDMConstruction.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
- * @file BarrelDMConstruction.h
- *
- * @brief Declaration of BarrelDMConstruction class
- *
- * $Id: BarrelDMConstruction.h,v 1.3 2007-07-08 18:50:15 tsulaia Exp $
- */
-
-#ifndef LARGEOBARREL_BARRELDMCONSTRUCTION_H
-#define LARGEOBARREL_BARRELDMCONSTRUCTION_H
-
-// Forward declarations
-class GeoFullPhysVol;
-
-namespace LArGeo {
-
-  /** @class LArGeo::BarrelDMConstruction
-      @brief GeoModel description of dead material in the crack region
-  */
-  class BarrelDMConstruction
-  {
-  public:
-
-    // Constructor;
-    BarrelDMConstruction(bool activateFT = false);
-
-    // Destructor:
-    virtual ~BarrelDMConstruction();
-
-    // Add passive materials to the barrel envelope
-    void create(GeoFullPhysVol* envelope);
-
-  private:
-    // It is illegal to copy/assign a BarrelDMConstruction:
-    BarrelDMConstruction (const BarrelDMConstruction &) = delete;
-    BarrelDMConstruction & operator= (const BarrelDMConstruction &) = delete;
-
-    bool m_activateFT;
-  };
-
-
-
-}  // namespace LArGeo
-
-#endif // LARGEOBARREL_BARRELDMCONSTRUCTION_H
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
index f690f3a7ea02791b250eb0c883e7cacd34d69a9c..884ac1718dcd0994ebe4c7aa96c7c020fc60641a 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
@@ -10,7 +10,7 @@
 #include "LArGeoBarrel/BarrelCryostatConstruction.h"
 #include "LArGeoBarrel/BarrelConstruction.h"
 #include "LArGeoBarrel/BarrelPresamplerConstruction.h"
-#include "LArGeoBarrel/BarrelDMConstruction.h"
+#include "CrackRegionGeoModel/CrackDMConstruction.h"
 
 #include "GeoModelKernel/GeoElement.h"
 #include "GeoModelKernel/GeoMaterial.h"
@@ -1065,8 +1065,8 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope(const VDetectorP
 
   if(rdbAccess->getChildTag("LArBarrelDM",larVersionKey.tag(),larVersionKey.node())!="" && m_fullGeo) {
     // Dead material in barrel
-    BarrelDMConstruction barrelDMConstruction(m_activateFT);
-    barrelDMConstruction.create (m_cryoMotherPhysical);
+    CrackDMConstruction crackDMConstruction(rdbAccess,geoModel,materialManager,m_activateFT);
+    crackDMConstruction.create(m_cryoMotherPhysical);
   }
 
   return m_cryoMotherPhysical;
diff --git a/Projects/AthSimulation/package_filters.txt b/Projects/AthSimulation/package_filters.txt
index abf3eadc179cbca256afaacba94784210519c3c4..c1fa3d45d193a5d515bbca9b32a2d2a570c0fb84 100644
--- a/Projects/AthSimulation/package_filters.txt
+++ b/Projects/AthSimulation/package_filters.txt
@@ -4,6 +4,7 @@
 
 + AsgExternal/Asg_Test
 + AtlasGeometryCommon/BeamPipeGeoModel
++ AtlasGeometryCommon/CrackRegionGeoModel
 + AtlasGeometryCommon/GeoModelEnvelopes
 + AtlasGeometryCommon/SubDetectorEnvelopes
 + AtlasTest/CITest