diff --git a/AtlasGeometryCommon/BeamPipeGeoModel/CMakeLists.txt b/AtlasGeometryCommon/BeamPipeGeoModel/CMakeLists.txt
index 87f8b8aa5b4f7fb06561e67af728cd164db2b29e..f8006b9f70bd80f9ea67406b789a60ba5f87716b 100644
--- a/AtlasGeometryCommon/BeamPipeGeoModel/CMakeLists.txt
+++ b/AtlasGeometryCommon/BeamPipeGeoModel/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( BeamPipeGeoModel )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           PRIVATE
                           Control/SGTools
@@ -20,17 +19,18 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( BeamPipeGeoModelLib
                    src/*.cxx
                    PUBLIC_HEADERS BeamPipeGeoModel
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} GeoModelKernel GeoModelUtilities StoreGateLib SGtests
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities StoreGateLib 
                    PRIVATE_LINK_LIBRARIES SGTools AthenaKernel GaudiKernel )
 
 atlas_add_component( BeamPipeGeoModel
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} GeoModelKernel GeoModelUtilities SGTools StoreGateLib SGtests GaudiKernel BeamPipeGeoModelLib )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities SGTools StoreGateLib GaudiKernel BeamPipeGeoModelLib )
 
diff --git a/AtlasGeometryCommon/BeamPipeGeoModel/src/BeamPipeDetectorFactory.cxx b/AtlasGeometryCommon/BeamPipeGeoModel/src/BeamPipeDetectorFactory.cxx
index ff888b08c639879c83664d7b8df219407061d29f..0838e4a43bcb427a67731d40245e15fd13c48403 100755
--- a/AtlasGeometryCommon/BeamPipeGeoModel/src/BeamPipeDetectorFactory.cxx
+++ b/AtlasGeometryCommon/BeamPipeGeoModel/src/BeamPipeDetectorFactory.cxx
@@ -15,6 +15,8 @@
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoFullPhysVol.h"  
 #include "GeoModelKernel/GeoTransform.h"  
+#include "GeoModelKernel/GeoDefinitions.h"  
+#include "GeoModelKernel/Units.h"  
 
 #include "StoreGate/StoreGateSvc.h"
 
@@ -38,7 +40,7 @@ BeamPipeDetectorFactory::BeamPipeDetectorFactory(StoreGateSvc *detStore,
    m_materialManager(0),
    m_detectorStore(detStore),
    m_access(pAccess),
-   m_centralRegionZMax(1500*CLHEP::mm)
+   m_centralRegionZMax(1500*GeoModelKernelUnits::mm)
 {}
 
 BeamPipeDetectorFactory::~BeamPipeDetectorFactory()
@@ -67,8 +69,8 @@ void BeamPipeDetectorFactory::create(GeoPhysVol *world)
   // It is split into 3 sections. 
   // left, right and central. This is to allow different truth scoring in the different regions.
   
-  m_centralRegionZMax = 1500 * CLHEP::mm; // For backward compatibility in DB.
-  if (bpipeGeneral->size() != 0) m_centralRegionZMax = (*bpipeGeneral)[0]->getDouble("CENTRALZMAX") * CLHEP::mm;
+  m_centralRegionZMax = 1500 * GeoModelKernelUnits::mm; // For backward compatibility in DB.
+  if (bpipeGeneral->size() != 0) m_centralRegionZMax = (*bpipeGeneral)[0]->getDouble("CENTRALZMAX") * GeoModelKernelUnits::mm;
 
   EnvelopeShapes envelopes;
 
@@ -102,16 +104,16 @@ void BeamPipeDetectorFactory::create(GeoPhysVol *world)
   double beamy = 0.0;
   double beamz = 0.0;
   if (bpipePosition->size() != 0) {
-    beamx = (*bpipePosition)[0]->getDouble("POSX") * CLHEP::mm;
-    beamy = (*bpipePosition)[0]->getDouble("POSY") * CLHEP::mm;
-    beamz = (*bpipePosition)[0]->getDouble("POSZ") * CLHEP::mm;
+    beamx = (*bpipePosition)[0]->getDouble("POSX") * GeoModelKernelUnits::mm;
+    beamy = (*bpipePosition)[0]->getDouble("POSY") * GeoModelKernelUnits::mm;
+    beamz = (*bpipePosition)[0]->getDouble("POSZ") * GeoModelKernelUnits::mm;
   }
 
   // Only shift the central section
 
   // Central
   world->add(tag);
-  world->add(new GeoTransform(HepGeom::Translate3D(beamx,beamy,beamz)));
+  world->add(new GeoTransform(GeoTrf::Translate3D(beamx,beamy,beamz)));
   world->add(pvMotherCentral);
   m_detectorManager->addTreeTop(pvMotherCentral);                                                                  //
 
@@ -122,7 +124,7 @@ void BeamPipeDetectorFactory::create(GeoPhysVol *world)
 
   // FwdMinus
   world->add(tag);
-  world->add(new GeoTransform(HepGeom::RotateY3D(180*CLHEP::degree)));
+  world->add(new GeoTransform(GeoTrf::RotateY3D(180*GeoModelKernelUnits::degree)));
   world->add(pvMotherFwdMinus);
   m_detectorManager->addTreeTop(pvMotherFwdMinus);
 
@@ -148,12 +150,12 @@ void BeamPipeDetectorFactory::addSections(GeoPhysVol* parent, int region)
   for (unsigned int itemp=0; itemp<bpipeSections->size(); itemp++)
   {
     std::string material = (*bpipeSections)[itemp]->getString("MATERIAL");
-    double rMin1 = (*bpipeSections)[itemp]->getDouble("RMIN1") * CLHEP::mm;
-    double rMax1 = (*bpipeSections)[itemp]->getDouble("RMAX1") * CLHEP::mm;
-    double rMin2 = (*bpipeSections)[itemp]->getDouble("RMIN2") * CLHEP::mm;
-    double rMax2 = (*bpipeSections)[itemp]->getDouble("RMAX2") * CLHEP::mm;
-    double z = (*bpipeSections)[itemp]->getDouble("Z") * CLHEP::mm;
-    double dZ = (*bpipeSections)[itemp]->getDouble("DZ") * CLHEP::mm;
+    double rMin1 = (*bpipeSections)[itemp]->getDouble("RMIN1") * GeoModelKernelUnits::mm;
+    double rMax1 = (*bpipeSections)[itemp]->getDouble("RMAX1") * GeoModelKernelUnits::mm;
+    double rMin2 = (*bpipeSections)[itemp]->getDouble("RMIN2") * GeoModelKernelUnits::mm;
+    double rMax2 = (*bpipeSections)[itemp]->getDouble("RMAX2") * GeoModelKernelUnits::mm;
+    double z = (*bpipeSections)[itemp]->getDouble("Z") * GeoModelKernelUnits::mm;
+    double dZ = (*bpipeSections)[itemp]->getDouble("DZ") * GeoModelKernelUnits::mm;
     int secNum = (*bpipeSections)[itemp]->getInt("SECNUM");
       
     double zmin = z - dZ;
@@ -204,7 +206,7 @@ void BeamPipeDetectorFactory::addSections(GeoPhysVol* parent, int region)
       shape = new GeoCons(rMin1,rMin2,
 			  rMax1,rMax2,
 			  dZnew,
-			  0*CLHEP::deg,360*CLHEP::deg);
+			  0*GeoModelKernelUnits::deg,360*GeoModelKernelUnits::deg);
       isTube = false;
     }
 
@@ -221,7 +223,7 @@ void BeamPipeDetectorFactory::addSections(GeoPhysVol* parent, int region)
     pvSection->ref();
     
     // Determine if this is a geometry where the first section can act as the mother of the following
-    // sections. The following sections are only added to this if their ave CLHEP::radius is within the CLHEP::radial
+    // sections. The following sections are only added to this if their ave GeoModelKernelUnits::radius is within the GeoModelKernelUnits::radial
     // extent and their ave z is within the z extent. 
     // As soon as one section fails to meet this the latter sections are not considered.
     if(secNum==1) {
@@ -240,7 +242,7 @@ void BeamPipeDetectorFactory::addSections(GeoPhysVol* parent, int region)
 	     
 
     GeoTransform* tfSection = 0;
-    if (znew != 0 && (secNum==1 || !addToFirstSection)) tfSection = new GeoTransform(HepGeom::TranslateZ3D(znew));
+    if (znew != 0 && (secNum==1 || !addToFirstSection)) tfSection = new GeoTransform(GeoTrf::TranslateZ3D(znew));
     GeoNameTag* ntSection = new GeoNameTag(name);
     ntSection->ref();
 
@@ -267,10 +269,10 @@ void BeamPipeDetectorFactory::addSections(GeoPhysVol* parent, int region)
       GeoTransform* tfSectionRot = 0;
       if (isTube) { 
 	// No need for rotation.
-	tfSectionRot = new GeoTransform(HepGeom::TranslateZ3D(-znew));
+	tfSectionRot = new GeoTransform(GeoTrf::TranslateZ3D(-znew));
       } else {
 	// For cone we need to rotate around Y axis.
-	tfSectionRot = new GeoTransform(HepGeom::TranslateZ3D(-znew)*HepGeom::RotateY3D(180*CLHEP::deg));
+	tfSectionRot = new GeoTransform(GeoTrf::TranslateZ3D(-znew)*GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
       }
       parent->add(ntSection);
       parent->add(tfSectionRot);
@@ -303,8 +305,8 @@ BeamPipeDetectorFactory::makeEnvelope(IRDBRecordset_ptr bpipeEnvelope)
   std::vector<EnvelopeEntry> fwdEntry;
 
   for (unsigned int i=0; i<bpipeEnvelope->size(); i++) {
-    double z = (*bpipeEnvelope)[i]->getDouble("Z") * CLHEP::mm;
-    double r = (*bpipeEnvelope)[i]->getDouble("R") * CLHEP::mm;
+    double z = (*bpipeEnvelope)[i]->getDouble("Z") * GeoModelKernelUnits::mm;
+    double r = (*bpipeEnvelope)[i]->getDouble("R") * GeoModelKernelUnits::mm;
     EnvelopeEntry entry(z,r);
     if (z < m_centralRegionZMax) {
       centralEntry.push_back(entry);
@@ -327,7 +329,7 @@ BeamPipeDetectorFactory::makeEnvelope(IRDBRecordset_ptr bpipeEnvelope)
     envelopes.centralShape  = new GeoTube(0, rFwd, m_centralRegionZMax);
   } else {
     // This case probably will never get used and is untested.
-    GeoPcon* pcone = new GeoPcon(0, 360*CLHEP::deg);
+    GeoPcon* pcone = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
 
     pcone->addPlane(-m_centralRegionZMax,0,rFwd);
     for (int i=centralEntry.size()-1; i>=0; i--) {  
@@ -347,12 +349,12 @@ BeamPipeDetectorFactory::makeEnvelope(IRDBRecordset_ptr bpipeEnvelope)
   
   // forward
   {
-    GeoPcon* pcone = new GeoPcon(0, 360*CLHEP::deg);
+    GeoPcon* pcone = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
     pcone->addPlane(m_centralRegionZMax,0,rFwd);
     if (fwdEntry.size() == 0) { 
       // Unlikely case but for completeness
       // we make small fwd region if everything is in central region.
-      pcone->addPlane(m_centralRegionZMax+0.1*CLHEP::mm,0,rFwd);
+      pcone->addPlane(m_centralRegionZMax+0.1*GeoModelKernelUnits::mm,0,rFwd);
     }
     for (unsigned int i=0; i<fwdEntry.size(); i++) {  
       double z = fwdEntry[i].z();
@@ -371,12 +373,12 @@ BeamPipeDetectorFactory::EnvelopeShapes
 BeamPipeDetectorFactory::makeEnvelopeOld(IRDBRecordset_ptr atlasMother)
 {
 
-  double iir = (*atlasMother)[0]->getDouble("IDETIR")*CLHEP::cm;
-  double cir = (*atlasMother)[0]->getDouble("CALOIR")*CLHEP::cm;
-  double mir = (*atlasMother)[0]->getDouble("MUONIR")*CLHEP::cm;
-  double totlen = (*atlasMother)[0]->getDouble("ZMAX")*CLHEP::cm;
-  double ilen = (*atlasMother)[0]->getDouble("IDETZMX")*CLHEP::cm;
-  double clen = (*atlasMother)[0]->getDouble("CALOZMX")*CLHEP::cm;
+  double iir = (*atlasMother)[0]->getDouble("IDETIR")*GeoModelKernelUnits::cm;
+  double cir = (*atlasMother)[0]->getDouble("CALOIR")*GeoModelKernelUnits::cm;
+  double mir = (*atlasMother)[0]->getDouble("MUONIR")*GeoModelKernelUnits::cm;
+  double totlen = (*atlasMother)[0]->getDouble("ZMAX")*GeoModelKernelUnits::cm;
+  double ilen = (*atlasMother)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
+  double clen = (*atlasMother)[0]->getDouble("CALOZMX")*GeoModelKernelUnits::cm;
 
   // Central Section.
   GeoTube * bpipeCentralShape = new GeoTube(0, iir, m_centralRegionZMax);
@@ -386,7 +388,7 @@ BeamPipeDetectorFactory::makeEnvelopeOld(IRDBRecordset_ptr atlasMother)
 
   // Right section (+ve z)
 
-  GeoPcon* bpipeEnvPcone = new GeoPcon(0, 360*CLHEP::deg);
+  GeoPcon* bpipeEnvPcone = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
   bpipeEnvPcone->addPlane(m_centralRegionZMax,0,iir);
   bpipeEnvPcone->addPlane(ilen,0,iir);
   bpipeEnvPcone->addPlane(ilen,0,cir); 
diff --git a/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt b/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
index 5309743d9e32f2c9404d53ea6747ed94ab8997b0..b8b5a6b095be08f9fc03057f32f75abe1f933927 100644
--- a/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
+++ b/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( CavernInfraGeoModel )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           PRIVATE
                           Control/StoreGate
@@ -18,15 +17,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
+find_package( Eigen )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( CavernInfraGeoModel
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities StoreGateLib SGtests GaudiKernel )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities StoreGateLib SGtests GaudiKernel )
 
 # Install files from the package:
 atlas_install_headers( CavernInfraGeoModel )
diff --git a/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory.cxx b/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory.cxx
index 39c25768280b9f56bb45e0a1550f009f94364a5c..e1678ccd3d139c957facc71f14f0cdad3b5897cb 100755
--- a/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory.cxx
+++ b/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory.cxx
@@ -79,20 +79,20 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
  //// -----------------------------------Build SX1------------------------------------------
  
   recordIndex = elementMap["SX1"];
-  double SX1Xpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
-  double SX1Ypos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double SX1Zpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double SX1HalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m;
-  double SX1HalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;
-  double SX1HalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SX1Xpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
+  double SX1Ypos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double SX1Zpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double SX1HalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m;
+  double SX1HalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;
+  double SX1HalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
   
   recordIndex = elementMap["SX1Air"];
-  double SX1AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double SX1AirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m;  
-  double SX1AirHalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;   
-  double SX1AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SX1AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double SX1AirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m;  
+  double SX1AirHalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;   
+  double SX1AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
-  GeoTransform *s1XYZt = new GeoTransform(HepGeom::Translate3D(SX1Xpos,SX1Ypos,SX1Zpos)); //1.7  -8.7
+  GeoTransform *s1XYZt = new GeoTransform(GeoTrf::Translate3D(SX1Xpos,SX1Ypos,SX1Zpos)); //1.7  -8.7
   world->add(s1XYZt);
   GeoBox     *SX1        = new GeoBox(SX1HalfWidth ,SX1HalfHeight, SX1HalfLength); //  11.7, 6.5, 42.3
   GeoLogVol  *lvsx1s     = new GeoLogVol("SX1Steel",SX1,shieldSteel);
@@ -101,7 +101,7 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
   world->add(sx1);
    
 
-  GeoTransform *s1z = new GeoTransform(HepGeom::TranslateY3D(SX1AirYpos));
+  GeoTransform *s1z = new GeoTransform(GeoTrf::TranslateY3D(SX1AirYpos));
   sx1->add(s1z);
   GeoBox     *SX1Air     = new GeoBox( SX1AirHalfWidth, SX1AirHalfHeight, SX1AirHalfLength);
   GeoLogVol  *lvsx1a     = new GeoLogVol("SX1Air",SX1Air,air);
@@ -112,49 +112,49 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
  //// ------------------First: Build cavern with concrete-----------------------------
 
   recordIndex = elementMap["WallACConc"];
-  double WallACConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double WallACConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double WallACConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double WallACConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double WallACConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double WallACConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double WallACConcSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double WallACConcDphi= (*cavernElements)[recordIndex]->getDouble("DPHI"); 
 
   recordIndex = elementMap["BoxConc"];
-  double BoxConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BoxConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BoxConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BoxConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BoxConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BoxConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["VaultConc"];
-  double VaultConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double VaultConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double VaultConcYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double VaultConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double VaultConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double VaultConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double VaultConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double VaultConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double VaultConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double VaultConcSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double VaultConcDphi= (*cavernElements)[recordIndex]->getDouble("DPHI");
 
   recordIndex = elementMap["HallConc"];
-  double HallConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double HallConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double HallConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double HallConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double HallConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double HallConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["BoxConcW"];
-  double BoxConcWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcWYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxConcVleft"];
-  double BoxConcVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcVleftYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxConcVright"];
-  double BoxConcVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcVrightYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["SurfaceFloor"];
-  double SurfaceFloorXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
-  double SurfaceFloorZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
-  double SurfaceFloorHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double SurfaceFloorHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double SurfaceFloorHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SurfaceFloorXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
+  double SurfaceFloorZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
+  double SurfaceFloorHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double SurfaceFloorHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double SurfaceFloorHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
    
   GeoTubs *WallACConcrete      = new GeoTubs(WallACConcMinR, WallACConcMaxR, WallACConcHalfHeight, WallACConcSphi, WallACConcDphi);    
@@ -163,51 +163,51 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
   GeoBox  *HallConcrete        = new GeoBox(HallConcHalfLength, HallConcHalfWidth, HallConcHalfHeight);
   GeoBox  *SurfaceFloor        = new GeoBox(SurfaceFloorHalfLength, SurfaceFloorHalfWidth, SurfaceFloorHalfHeight);
 
-  HepGeom::Transform3D BoxCutWallConc          = HepGeom::TranslateZ3D(BoxConcWZpos)*HepGeom::RotateY3D(BoxConcWYrotate);
-  HepGeom::Transform3D BoxCutVaultLeftConc     = HepGeom::TranslateZ3D(BoxConcVleftZpos)*HepGeom::RotateY3D(BoxConcVleftYrotate);
-  HepGeom::Transform3D BoxCutVaulRightConc     = HepGeom::TranslateZ3D(BoxConcVrightZpos)*HepGeom::RotateY3D(BoxConcVrightYrotate);
+  GeoTrf::Transform3D BoxCutWallConc          = GeoTrf::TranslateZ3D(BoxConcWZpos)*GeoTrf::RotateY3D(BoxConcWYrotate);
+  GeoTrf::Transform3D BoxCutVaultLeftConc     = GeoTrf::TranslateZ3D(BoxConcVleftZpos)*GeoTrf::RotateY3D(BoxConcVleftYrotate);
+  GeoTrf::Transform3D BoxCutVaulRightConc     = GeoTrf::TranslateZ3D(BoxConcVrightZpos)*GeoTrf::RotateY3D(BoxConcVrightYrotate);
 
   recordIndex = elementMap["HoleJN"];
-  double HoleJNrmin = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::mm;
-  double HoleJNrmax = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::mm;
-  double HoleJNdz = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::mm;
+  double HoleJNrmin = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::mm;
+  double HoleJNrmax = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::mm;
+  double HoleJNdz = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::mm;
   GeoTubs *HoleJN              = new GeoTubs(HoleJNrmin,HoleJNrmax,HoleJNdz, 0.,2.*M_PI); // should be 2300mm in radius
 
   recordIndex = elementMap["WallAAir"];
-  double WallAAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallAAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
+  double WallAAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallAAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["WallCAir"];
-  double WallCAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallCAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
+  double WallCAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallCAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
   double WallCAirZrotate = (*cavernElements)[recordIndex]->getDouble("ZROTATE");
 
   //---------------- Cut the vault and side walls----------------------------
-  const GeoShape & CutWallConc   = (*WallACConcrete).subtract((*BoxConc) << HepGeom::Transform3D(BoxCutWallConc)).
-        subtract((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) );
-  const GeoShape & CutVaultConc  = (*VaultConcrete).subtract((*BoxConc) << HepGeom::Transform3D(BoxCutVaultLeftConc)).
-                                                    subtract((*BoxConc) << HepGeom::Transform3D(BoxCutVaulRightConc));
+  const GeoShape & CutWallConc   = (*WallACConcrete).subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutWallConc)).
+        subtract((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) );
+  const GeoShape & CutVaultConc  = (*VaultConcrete).subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutVaultLeftConc)).
+                                                    subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutVaulRightConc));
  
   recordIndex = elementMap["ShaftCut"];
-  double ShaftCutZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double ShaftCutZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double ShaftCutYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double ShaftCutHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double ShaftCutMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double ShaftCutMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double ShaftCutHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double ShaftCutMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double ShaftCutMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["PX14Conc"];
-  double PX14ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX14ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX14ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX14ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX14ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX14ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX14ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX14ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX14ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX14ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["PX16Conc"];
-  double PX16ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX16ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX16ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX16ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX16ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX16ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX16ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX16ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX16ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX16ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   //--------------- Build concrete shafts------------------------------.
   GeoTube     *ShaftCut  = new GeoTube(ShaftCutMinR, ShaftCutMaxR, ShaftCutHalfHeight);
@@ -215,41 +215,41 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
   GeoTube     *PX16Conc  = new GeoTube(PX16ConcMinR, PX16ConcMaxR, PX16ConcHalfHeight);
       
   const GeoShape & ShaftsConc=
-	((*PX14Conc)           << HepGeom::TranslateX3D(PX14ConcXpos)*HepGeom::TranslateY3D(PX14ConcYpos)).
-	add((*PX16Conc)        << HepGeom::TranslateX3D(PX16ConcXpos)*HepGeom::TranslateY3D(PX16ConcYpos)).
-	subtract((*ShaftCut)   << HepGeom::TranslateZ3D(ShaftCutZpos)*HepGeom::RotateY3D(ShaftCutYrotate));
+	((*PX14Conc)           << GeoTrf::TranslateX3D(PX14ConcXpos)*GeoTrf::TranslateY3D(PX14ConcYpos)).
+	add((*PX16Conc)        << GeoTrf::TranslateX3D(PX16ConcXpos)*GeoTrf::TranslateY3D(PX16ConcYpos)).
+	subtract((*ShaftCut)   << GeoTrf::TranslateZ3D(ShaftCutZpos)*GeoTrf::RotateY3D(ShaftCutYrotate));
  
   recordIndex = elementMap["WallCConc"];
-  double WallCConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallCConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallCConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallCConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
   double WallCConcZrotate = (*cavernElements)[recordIndex]->getDouble("ZROTATE");
 
   recordIndex = elementMap["WallAConc"];
-  double WallAConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallAConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallAConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallAConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
 
   recordIndex = elementMap["ShaftsConc"];
-  double ShaftsConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double ShaftsConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
 
   //--------------- Build concrete nose ------------------------------.
   recordIndex =elementMap["BoxConcJN"];
-  double BoxConcJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::mm;
-  double BoxConcJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::mm;
-  double BoxConcJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::mm;
-  double BoxConcJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::mm;
+  double BoxConcJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::mm;
+  double BoxConcJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::mm;
+  double BoxConcJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::mm;
+  double BoxConcJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::mm;
   recordIndex =elementMap["BoxConcExtraJN"];
-  double BoxConcExtraJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::mm;
-  double BoxConcExtraJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::mm;
-  double BoxConcExtraJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::mm;
-  double BoxConcExtraJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::mm;
+  double BoxConcExtraJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::mm;
+  double BoxConcExtraJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::mm;
+  double BoxConcExtraJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::mm;
+  double BoxConcExtraJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::mm;
   double BoxConcExtraJNYpos = (*cavernElements)[recordIndex]->getDouble("YPOS");
   recordIndex =elementMap["StrutConcJN"];
-  double StrutConcJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::mm;
-  double StrutConcJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::mm;
-  double StrutConcJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::mm;
-  double StrutConcJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::mm;
-  double StrutConcJNYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::mm;
-  double StrutConcJNZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::mm;
+  double StrutConcJNDX = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::mm;
+  double StrutConcJNDY = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::mm;
+  double StrutConcJNDZ = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::mm;
+  double StrutConcJNXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::mm;
+  double StrutConcJNYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::mm;
+  double StrutConcJNZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
 
   GeoBox  *BoxConcJNC          = new GeoBox(BoxConcJNDX,BoxConcJNDY,BoxConcJNDZ);
   GeoBox  *BoxConcJNA          = new GeoBox(BoxConcJNDX,BoxConcJNDY,BoxConcJNDZ);
@@ -258,77 +258,77 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
   const GeoBox  *StrutConcJN   = new GeoBox(StrutConcJNDX,StrutConcJNDY,StrutConcJNDZ);
 
   recordIndex = elementMap["CavernAir"];
-  double CavernAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double CavernAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
 
   //----------------Assemble everything--------------------------------.
   const GeoShape & Concrete= (*HallConcrete).
-        add((CutWallConc     << HepGeom::TranslateZ3D(WallCConcZpos)*HepGeom::TranslateX3D(WallCConcXpos)*HepGeom::RotateZ3D(WallCConcZrotate))).
-        add((ShaftsConc      << HepGeom::TranslateZ3D(ShaftsConcZpos))).
-        add((CutVaultConc    << HepGeom::TranslateZ3D(VaultConcZpos)*HepGeom::RotateY3D(VaultConcYrotate))).
-        add((*SurfaceFloor)  << HepGeom::TranslateZ3D(SurfaceFloorZpos)*HepGeom::TranslateX3D(SurfaceFloorXpos)).
-        add((CutWallConc     << HepGeom::TranslateZ3D(WallAConcZpos)*HepGeom::TranslateX3D(WallAConcXpos))).
-
-        add((*BoxConcJNC)    << HepGeom::TranslateX3D(BoxConcJNXpos) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*BoxConcStupidExtraJNC) << HepGeom::TranslateX3D(BoxConcExtraJNXpos) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) * HepGeom::TranslateY3D(-BoxConcExtraJNYpos) ).
-        add((*BoxConcJNA)    << HepGeom::TranslateX3D(-BoxConcJNXpos-15*CLHEP::mm) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*BoxConcStupidExtraJNA) << HepGeom::TranslateX3D(-BoxConcExtraJNXpos-15*CLHEP::mm) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) * HepGeom::TranslateY3D(BoxConcExtraJNYpos) ).
-
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-        add((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * HepGeom::TranslateY3D(-StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) );
-
-//        subtract((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) );
-//        subtract((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) );
+        add((CutWallConc     << GeoTrf::TranslateZ3D(WallCConcZpos)*GeoTrf::TranslateX3D(WallCConcXpos)*GeoTrf::RotateZ3D(WallCConcZrotate))).
+        add((ShaftsConc      << GeoTrf::TranslateZ3D(ShaftsConcZpos))).
+        add((CutVaultConc    << GeoTrf::TranslateZ3D(VaultConcZpos)*GeoTrf::RotateY3D(VaultConcYrotate))).
+        add((*SurfaceFloor)  << GeoTrf::TranslateZ3D(SurfaceFloorZpos)*GeoTrf::TranslateX3D(SurfaceFloorXpos)).
+        add((CutWallConc     << GeoTrf::TranslateZ3D(WallAConcZpos)*GeoTrf::TranslateX3D(WallAConcXpos))).
+
+        add((*BoxConcJNC)    << GeoTrf::TranslateX3D(BoxConcJNXpos) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*BoxConcStupidExtraJNC) << GeoTrf::TranslateX3D(BoxConcExtraJNXpos) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) * GeoTrf::TranslateY3D(-BoxConcExtraJNYpos) ).
+        add((*BoxConcJNA)    << GeoTrf::TranslateX3D(-BoxConcJNXpos-15*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*BoxConcStupidExtraJNA) << GeoTrf::TranslateX3D(-BoxConcExtraJNXpos-15*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) * GeoTrf::TranslateY3D(BoxConcExtraJNYpos) ).
+
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+        add((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5+CavernAirZpos) * GeoTrf::TranslateY3D(-StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) );
+
+//        subtract((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) );
+//        subtract((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) );
 
 	
  //// -----------------------Second: Build cavern with air-------------------------------
 
   // Create variables for Concrete Cavern and get index of the record in cavernElements
    recordIndex = elementMap["WallACAir"];
-  double WallACAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double WallACAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double WallACAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double WallACAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double WallACAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double WallACAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double WallACAirSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double WallACAirDphi= (*cavernElements)[recordIndex]->getDouble("DPHI"); 
  
   recordIndex = elementMap["BoxAir"];
-  double BoxAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BoxAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BoxAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BoxAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BoxAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BoxAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["VaultAir"];
-  double VaultAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double VaultAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double VaultAirYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double VaultAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double VaultAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double VaultAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double VaultAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double VaultAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double VaultAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double VaultAirSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double VaultAirDphi= (*cavernElements)[recordIndex]->getDouble("DPHI");
  
   recordIndex = elementMap["HallAir"];
-  double HallAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double HallAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double HallAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double HallAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double HallAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double HallAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["BaseAir"];
-  double BaseAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
-  double BaseAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BaseAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BaseAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BaseAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
+  double BaseAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BaseAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BaseAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["BoxAirW"];
-  double BoxAirWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirWYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxAirVleft"];
-  double BoxAirVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirVleftYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
  
   recordIndex = elementMap["BoxAirVright"];
-  double BoxAirVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirVrightYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   GeoTubs *WallACAir         = new GeoTubs(WallACAirMinR, WallACAirMaxR, WallACAirHalfHeight, WallACAirSphi, WallACAirDphi);        
@@ -336,86 +336,86 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
   GeoTubs *VaultAir          = new GeoTubs(VaultAirMinR, VaultAirMaxR, VaultAirHalfHeight, VaultAirSphi, VaultAirDphi);      
   GeoBox  *HallAir           = new GeoBox(HallAirHalfLength, HallAirHalfWidth, HallAirHalfHeight);
   GeoBox  *BaseAir           = new GeoBox(BaseAirHalfLength, BaseAirHalfWidth, BaseAirHalfHeight);
-  HepGeom::Transform3D BoxCutWallAir      = HepGeom::TranslateZ3D(BoxAirWZpos)*HepGeom::RotateY3D(BoxAirWYrotate);
-  HepGeom::Transform3D BoxCutVaultLeftAir = HepGeom::TranslateZ3D(BoxAirVleftZpos)*HepGeom::RotateY3D(BoxAirVleftYrotate);
-  HepGeom::Transform3D BoxCutVaulRightAir = HepGeom::TranslateZ3D(BoxAirVrightZpos)*HepGeom::RotateY3D(BoxAirVrightYrotate);
+  GeoTrf::Transform3D BoxCutWallAir      = GeoTrf::TranslateZ3D(BoxAirWZpos)*GeoTrf::RotateY3D(BoxAirWYrotate);
+  GeoTrf::Transform3D BoxCutVaultLeftAir = GeoTrf::TranslateZ3D(BoxAirVleftZpos)*GeoTrf::RotateY3D(BoxAirVleftYrotate);
+  GeoTrf::Transform3D BoxCutVaulRightAir = GeoTrf::TranslateZ3D(BoxAirVrightZpos)*GeoTrf::RotateY3D(BoxAirVrightYrotate);
 
   //------------------Cut the vault and side walls----------------------------
-  const GeoShape & CutWallAir   = (*WallACAir).subtract((*BoxAir) << HepGeom::Transform3D(BoxCutWallAir));
-  const GeoShape & CutVaultAir  = (*VaultAir).subtract((*BoxAir) << HepGeom::Transform3D(BoxCutVaultLeftAir)).
-                                              subtract((*BoxAir) << HepGeom::Transform3D(BoxCutVaulRightAir));
+  const GeoShape & CutWallAir   = (*WallACAir).subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutWallAir));
+  const GeoShape & CutVaultAir  = (*VaultAir).subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutVaultLeftAir)).
+                                              subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutVaulRightAir));
 
   //--------------- Build air shafts------------------------------.
   recordIndex = elementMap["PX14Air"];
-  double PX14AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX14AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX14AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX14AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX14AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX14AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX14AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX14AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX14AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX14AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["PX16Air"];
-  double PX16AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX16AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX16AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX16AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX16AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX16AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX16AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX16AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX16AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX16AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   GeoTube     *PX14Air   = new GeoTube(PX14AirMinR, PX14AirMaxR, PX14AirHalfHeight);  
   GeoTube     *PX16Air   = new GeoTube(PX16AirMinR, PX16AirMaxR, PX16AirHalfHeight);
 
   recordIndex = elementMap["CavShaftsConc"];
-  double CavShaftsYPos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
+  double CavShaftsYPos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
   double CavShaftsXrotate = (*cavernElements)[recordIndex]->getDouble("XROTATE");
   double CavShaftsYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   const GeoShape & ShaftsAir= 
-	  ((*PX14Air)     << HepGeom::TranslateX3D(PX14AirXpos)*HepGeom::TranslateY3D(PX14AirYpos)).
-	  add((*PX16Air)  << HepGeom::TranslateX3D(PX16AirXpos)*HepGeom::TranslateY3D(PX16AirYpos));
+	  ((*PX14Air)     << GeoTrf::TranslateX3D(PX14AirXpos)*GeoTrf::TranslateY3D(PX14AirYpos)).
+	  add((*PX16Air)  << GeoTrf::TranslateX3D(PX16AirXpos)*GeoTrf::TranslateY3D(PX16AirYpos));
  
   //----------------Assemble everything--------------------------------.
   const GeoShape & CavernAir = (*HallAir).
-//      add((*AirJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-	  add(CutWallAir     << HepGeom::TranslateZ3D(WallAAirZpos)*HepGeom::TranslateX3D(WallAAirXpos)).
-	  add(CutWallAir     << HepGeom::TranslateZ3D(WallCAirZpos)*HepGeom::TranslateX3D(WallCAirXpos)*HepGeom::RotateZ3D(WallCAirZrotate)).
-	  add(CutVaultAir    << HepGeom::TranslateZ3D(VaultAirZpos)*HepGeom::RotateY3D(VaultAirYrotate)).
-	  add((*BaseAir)     << HepGeom::TranslateZ3D(BaseAirZpos)).
-
-      subtract((*BoxConcJNC)    << HepGeom::TranslateX3D(BoxConcJNXpos) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*BoxConcStupidExtraJNC) << HepGeom::TranslateX3D(BoxConcExtraJNXpos) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) * HepGeom::TranslateY3D(-BoxConcExtraJNYpos) ).
-      subtract((*BoxConcJNA)    << HepGeom::TranslateX3D(-BoxConcJNXpos-15*CLHEP::mm) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*BoxConcStupidExtraJNA) << HepGeom::TranslateX3D(-BoxConcExtraJNXpos-15*CLHEP::mm) * HepGeom::TranslateZ3D(-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) * HepGeom::TranslateY3D(BoxConcExtraJNYpos) ).
-
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(StrutConcJNXpos) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      subtract((*StrutConcJN)  << HepGeom::TranslateX3D(-StrutConcJNXpos-15.*CLHEP::mm) * HepGeom::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * HepGeom::TranslateY3D(-StrutConcJNYpos) * HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
-      add((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) << HepGeom::TranslateY3D(CavShaftsYPos)*HepGeom::RotateY3D(CavShaftsYrotate)*HepGeom::RotateX3D(CavShaftsXrotate) );
+//      add((*AirJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+	  add(CutWallAir     << GeoTrf::TranslateZ3D(WallAAirZpos)*GeoTrf::TranslateX3D(WallAAirXpos)).
+	  add(CutWallAir     << GeoTrf::TranslateZ3D(WallCAirZpos)*GeoTrf::TranslateX3D(WallCAirXpos)*GeoTrf::RotateZ3D(WallCAirZrotate)).
+	  add(CutVaultAir    << GeoTrf::TranslateZ3D(VaultAirZpos)*GeoTrf::RotateY3D(VaultAirYrotate)).
+	  add((*BaseAir)     << GeoTrf::TranslateZ3D(BaseAirZpos)).
+
+      subtract((*BoxConcJNC)    << GeoTrf::TranslateX3D(BoxConcJNXpos) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*BoxConcStupidExtraJNC) << GeoTrf::TranslateX3D(BoxConcExtraJNXpos) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) * GeoTrf::TranslateY3D(-BoxConcExtraJNYpos) ).
+      subtract((*BoxConcJNA)    << GeoTrf::TranslateX3D(-BoxConcJNXpos-15*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*BoxConcStupidExtraJNA) << GeoTrf::TranslateX3D(-BoxConcExtraJNXpos-15*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) * GeoTrf::TranslateY3D(BoxConcExtraJNYpos) ).
+
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(StrutConcJNXpos) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      subtract((*StrutConcJN)  << GeoTrf::TranslateX3D(-StrutConcJNXpos-15.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-StrutConcJNZpos-WallAAirZpos*0.5) * GeoTrf::TranslateY3D(-StrutConcJNYpos) * GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
+      add((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) << GeoTrf::TranslateY3D(CavShaftsYPos)*GeoTrf::RotateY3D(CavShaftsYrotate)*GeoTrf::RotateX3D(CavShaftsXrotate) );
 
 
   recordIndex = elementMap["ShaftsAir"];
-  double ShaftsAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double ShaftsAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
 
   const GeoShape & AirHall=
-          ((CavernAir     << HepGeom::TranslateZ3D(CavernAirZpos))).
-          add((ShaftsAir  << HepGeom::TranslateZ3D(ShaftsAirZpos)));     //allows for a built-in 2m thick plugs for both PX14 & PX16
+          ((CavernAir     << GeoTrf::TranslateZ3D(CavernAirZpos))).
+          add((ShaftsAir  << GeoTrf::TranslateZ3D(ShaftsAirZpos)));     //allows for a built-in 2m thick plugs for both PX14 & PX16
  
  //// -----------------------Build BedRock for Shafts and Cavern-------------------------------
  
   recordIndex = elementMap["Rock"];
-  double RockHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double RockHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double RockHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double RockXPos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
-  double RockYPos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
+  double RockHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double RockHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double RockHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double RockXPos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
+  double RockYPos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
   
   GeoBox     *Rockbox     = new GeoBox( RockHalfWidth, RockHalfHeight, RockHalfLength); // 300, 50.75, 300
   const GeoShape & BedRock = ((*Rockbox) .
-			      subtract((AirHall) <<HepGeom::TranslateY3D(CavShaftsYPos)*HepGeom::RotateY3D(CavShaftsYrotate)*HepGeom::RotateX3D(CavShaftsXrotate))).
-                  subtract((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) << HepGeom::TranslateY3D(CavShaftsYPos)*HepGeom::RotateY3D(CavShaftsYrotate)*HepGeom::RotateX3D(CavShaftsXrotate) );
+			      subtract((AirHall) <<GeoTrf::TranslateY3D(CavShaftsYPos)*GeoTrf::RotateY3D(CavShaftsYrotate)*GeoTrf::RotateX3D(CavShaftsXrotate))).
+                  subtract((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) << GeoTrf::TranslateY3D(CavShaftsYPos)*GeoTrf::RotateY3D(CavShaftsYrotate)*GeoTrf::RotateX3D(CavShaftsXrotate) );
 
-  GeoTransform *rZt  = new GeoTransform(HepGeom::TranslateY3D(RockYPos)*HepGeom::TranslateX3D(RockXPos));
+  GeoTransform *rZt  = new GeoTransform(GeoTrf::TranslateY3D(RockYPos)*GeoTrf::TranslateX3D(RockXPos));
   world->add(rZt);
   GeoLogVol  *lvr        = new GeoLogVol("BEDROCK",&BedRock,rock);
   GeoPhysVol *bedrock    = new GeoPhysVol(lvr);
@@ -424,10 +424,10 @@ void CavernInfraDetectorFactory::create(GeoPhysVol *world)
 
 
   const GeoShape & CavConcrete = ((Concrete).
-//        add((*HoleJN) << HepGeom::RotateY3D(M_PI*0.5) << HepGeom::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*HepGeom::TranslateY3D(-WallCAirXpos*1.0) ).
+//        add((*HoleJN) << GeoTrf::RotateY3D(M_PI*0.5) << GeoTrf::TranslateZ3D(-0.5*WallAAirZpos+CavernAirZpos)*GeoTrf::TranslateY3D(-WallCAirXpos*1.0) ).
         subtract(AirHall));
   
-  GeoTransform* xfTop = new GeoTransform(HepGeom::TranslateY3D(CavShaftsYPos)*HepGeom::RotateY3D(CavShaftsYrotate)*HepGeom::RotateX3D(CavShaftsXrotate)); 
+  GeoTransform* xfTop = new GeoTransform(GeoTrf::TranslateY3D(CavShaftsYPos)*GeoTrf::RotateY3D(CavShaftsYrotate)*GeoTrf::RotateX3D(CavShaftsXrotate)); 
   bedrock->add(xfTop);
   GeoLogVol  *lvcsc              = new GeoLogVol("CAV_SHAFTS_CONC",&CavConcrete,conc);
   GeoPhysVol *CavShaftsConc      = new GeoPhysVol(lvcsc);
diff --git a/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory01.cxx b/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory01.cxx
index 174be865228b99cf7f8d4a3135047679c4173570..3e5158b2f53251cdf2d84fd88972bad0f36ae5a3 100755
--- a/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory01.cxx
+++ b/AtlasGeometryCommon/CavernInfraGeoModel/src/CavernInfraDetectorFactory01.cxx
@@ -24,10 +24,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoSerialDenominator.h"  
 #include "GeoModelKernel/GeoSerialTransformer.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 
@@ -38,7 +38,7 @@
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include <string>
 #include <map>
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 CavernInfraDetectorFactory01::CavernInfraDetectorFactory01(StoreGateSvc *detStore,
@@ -94,18 +94,18 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
  //// -----------------------------------Build SX1------------------------------------------
  
   recordIndex = elementMap["SX1"];
-  double SX1Xpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
-  double SX1Ypos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double SX1HalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m;
-  double SX1HalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;
-  double SX1HalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SX1Xpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
+  double SX1Ypos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double SX1HalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m;
+  double SX1HalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;
+  double SX1HalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
   
   recordIndex = elementMap["SX1Air"];
-  double SX1AirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m;  
-  double SX1AirHalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;   
-  double SX1AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SX1AirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m;  
+  double SX1AirHalfWidth  = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;   
+  double SX1AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
-  GeoTransform *s1XYZt = new GeoTransform(HepGeom::Translate3D(SX1Ypos,91.75*CLHEP::m, SX1Xpos)); //1.7  -8.7
+  GeoTransform *s1XYZt = new GeoTransform(GeoTrf::Translate3D(SX1Ypos,91.75*GeoModelKernelUnits::m, SX1Xpos)); //1.7  -8.7
   world->add(s1XYZt);
   GeoBox     *SX1        = new GeoBox(SX1HalfWidth ,SX1HalfHeight, SX1HalfLength); //  11.7, 6.5, 42.3
   GeoLogVol  *lvsx1s     = new GeoLogVol("SX1Steel",SX1,shieldSteel);
@@ -113,7 +113,7 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
   world->add(tag);                                                                             
   world->add(sx1);
    
-  GeoTransform *s1z = new GeoTransform(HepGeom::TranslateY3D(-.005*CLHEP::m));
+  GeoTransform *s1z = new GeoTransform(GeoTrf::TranslateY3D(-.005*GeoModelKernelUnits::m));
   sx1->add(s1z);
   GeoBox     *SX1Air     = new GeoBox( SX1AirHalfWidth, SX1AirHalfHeight, SX1AirHalfLength);
   GeoLogVol  *lvsx1a     = new GeoLogVol("SX1Air",SX1Air,air);
@@ -124,49 +124,49 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
  //// ------------------First: Build cavern with concrete-----------------------------
 
   recordIndex = elementMap["WallACConc"];
-  double WallACConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double WallACConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double WallACConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double WallACConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double WallACConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double WallACConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double WallACConcSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double WallACConcDphi= (*cavernElements)[recordIndex]->getDouble("DPHI"); 
 
   recordIndex = elementMap["BoxConc"];
-  double BoxConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BoxConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BoxConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BoxConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BoxConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BoxConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["VaultConc"];
-  double VaultConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double VaultConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double VaultConcYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double VaultConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double VaultConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double VaultConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double VaultConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double VaultConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double VaultConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double VaultConcSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double VaultConcDphi= (*cavernElements)[recordIndex]->getDouble("DPHI");
 
   recordIndex = elementMap["HallConc"];
-  double HallConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double HallConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double HallConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double HallConcHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double HallConcHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double HallConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["BoxConcW"];
-  double BoxConcWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcWYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxConcVleft"];
-  double BoxConcVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcVleftYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxConcVright"];
-  double BoxConcVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxConcVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxConcVrightYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["SurfaceFloor"];
-  double SurfaceFloorXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m;
-  double SurfaceFloorZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
-  double SurfaceFloorHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double SurfaceFloorHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double SurfaceFloorHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double SurfaceFloorXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m;
+  double SurfaceFloorZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
+  double SurfaceFloorHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double SurfaceFloorHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double SurfaceFloorHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
    
   GeoTubs *WallACConcrete      = new GeoTubs(WallACConcMinR, WallACConcMaxR, WallACConcHalfHeight, WallACConcSphi, WallACConcDphi);    
@@ -175,35 +175,35 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
   GeoBox  *HallConcrete        = new GeoBox(HallConcHalfLength, HallConcHalfWidth, HallConcHalfHeight);
   GeoBox  *SurfaceFloor        = new GeoBox(SurfaceFloorHalfLength, SurfaceFloorHalfWidth, SurfaceFloorHalfHeight);
 
-  HepGeom::Transform3D BoxCutWallConc          = HepGeom::TranslateZ3D(BoxConcWZpos)*HepGeom::RotateY3D(BoxConcWYrotate);
-  HepGeom::Transform3D BoxCutVaultLeftConc     = HepGeom::TranslateZ3D(BoxConcVleftZpos)*HepGeom::RotateY3D(BoxConcVleftYrotate);
-  HepGeom::Transform3D BoxCutVaulRightConc     = HepGeom::TranslateZ3D(BoxConcVrightZpos)*HepGeom::RotateY3D(BoxConcVrightYrotate);
+  GeoTrf::Transform3D BoxCutWallConc          = GeoTrf::TranslateZ3D(BoxConcWZpos)*GeoTrf::RotateY3D(BoxConcWYrotate);
+  GeoTrf::Transform3D BoxCutVaultLeftConc     = GeoTrf::TranslateZ3D(BoxConcVleftZpos)*GeoTrf::RotateY3D(BoxConcVleftYrotate);
+  GeoTrf::Transform3D BoxCutVaulRightConc     = GeoTrf::TranslateZ3D(BoxConcVrightZpos)*GeoTrf::RotateY3D(BoxConcVrightYrotate);
 
   //---------------- Cut the vault and side walls----------------------------
-  const GeoShape & CutWallConc   = (*WallACConcrete).subtract((*BoxConc) << HepGeom::Transform3D(BoxCutWallConc));
-  const GeoShape & CutVaultConc  = (*VaultConcrete).subtract((*BoxConc) << HepGeom::Transform3D(BoxCutVaultLeftConc)).
-                                                    subtract((*BoxConc) << HepGeom::Transform3D(BoxCutVaulRightConc));
+  const GeoShape & CutWallConc   = (*WallACConcrete).subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutWallConc));
+  const GeoShape & CutVaultConc  = (*VaultConcrete).subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutVaultLeftConc)).
+                                                    subtract((*BoxConc) << GeoTrf::Transform3D(BoxCutVaulRightConc));
  
   recordIndex = elementMap["ShaftCut"];
-  double ShaftCutZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double ShaftCutZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double ShaftCutYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double ShaftCutHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double ShaftCutMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double ShaftCutMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double ShaftCutHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double ShaftCutMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double ShaftCutMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["PX14Conc"];
-  double PX14ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX14ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX14ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX14ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX14ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX14ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX14ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX14ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX14ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX14ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   recordIndex = elementMap["PX16Conc"];
-  double PX16ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX16ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX16ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX16ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX16ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX16ConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX16ConcYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX16ConcHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX16ConcMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX16ConcMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   //--------------- Build concrete shafts------------------------------.
   GeoTube     *ShaftCut  = new GeoTube(ShaftCutMinR, ShaftCutMaxR, ShaftCutHalfHeight);
@@ -211,75 +211,75 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
   GeoTube     *PX16Conc  = new GeoTube(PX16ConcMinR, PX16ConcMaxR, PX16ConcHalfHeight);
       
   const GeoShape & ShaftsConc=
-	((*PX14Conc)           << HepGeom::TranslateX3D(PX14ConcXpos)*HepGeom::TranslateY3D(PX14ConcYpos)).
-	add((*PX16Conc)        << HepGeom::TranslateX3D(PX16ConcXpos)*HepGeom::TranslateY3D(PX16ConcYpos)).
-	subtract((*ShaftCut)   << HepGeom::TranslateZ3D(ShaftCutZpos)*HepGeom::RotateY3D(ShaftCutYrotate));
+	((*PX14Conc)           << GeoTrf::TranslateX3D(PX14ConcXpos)*GeoTrf::TranslateY3D(PX14ConcYpos)).
+	add((*PX16Conc)        << GeoTrf::TranslateX3D(PX16ConcXpos)*GeoTrf::TranslateY3D(PX16ConcYpos)).
+	subtract((*ShaftCut)   << GeoTrf::TranslateZ3D(ShaftCutZpos)*GeoTrf::RotateY3D(ShaftCutYrotate));
  
   recordIndex = elementMap["WallCConc"];
-  double WallCConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallCConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallCConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallCConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
   double WallCConcZrotate = (*cavernElements)[recordIndex]->getDouble("ZROTATE");
 
   recordIndex = elementMap["WallAConc"];
-  double WallAConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallAConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallAConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallAConcXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
 
   recordIndex = elementMap["ShaftsConc"];
-  double ShaftsConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double ShaftsConcZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
 
   //----------------Assemble everything--------------------------------.
   const GeoShape & Concrete= (*HallConcrete).
-	add((CutWallConc     << HepGeom::TranslateZ3D(WallCConcZpos)*HepGeom::TranslateX3D(WallCConcXpos)*HepGeom::RotateZ3D(WallCConcZrotate))).
-        add((ShaftsConc      << HepGeom::TranslateZ3D(ShaftsConcZpos))).
-	add((CutVaultConc    << HepGeom::TranslateZ3D(VaultConcZpos)*HepGeom::RotateY3D(VaultConcYrotate))).
-        add((*SurfaceFloor)  << HepGeom::TranslateZ3D(SurfaceFloorZpos)*HepGeom::TranslateX3D(SurfaceFloorXpos)).
-    add((CutWallConc     << HepGeom::TranslateZ3D(WallAConcZpos)*HepGeom::TranslateX3D(WallAConcXpos)));
+	add((CutWallConc     << GeoTrf::TranslateZ3D(WallCConcZpos)*GeoTrf::TranslateX3D(WallCConcXpos)*GeoTrf::RotateZ3D(WallCConcZrotate))).
+        add((ShaftsConc      << GeoTrf::TranslateZ3D(ShaftsConcZpos))).
+	add((CutVaultConc    << GeoTrf::TranslateZ3D(VaultConcZpos)*GeoTrf::RotateY3D(VaultConcYrotate))).
+        add((*SurfaceFloor)  << GeoTrf::TranslateZ3D(SurfaceFloorZpos)*GeoTrf::TranslateX3D(SurfaceFloorXpos)).
+    add((CutWallConc     << GeoTrf::TranslateZ3D(WallAConcZpos)*GeoTrf::TranslateX3D(WallAConcXpos)));
 	
  //// -----------------------Second: Build cavern with air-------------------------------
 
   // Create variables for Concrete Cavern and get index of the record in cavernElements
    recordIndex = elementMap["WallACAir"];
-  double WallACAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double WallACAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double WallACAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double WallACAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double WallACAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double WallACAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double WallACAirSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double WallACAirDphi= (*cavernElements)[recordIndex]->getDouble("DPHI"); 
  
   recordIndex = elementMap["BoxAir"];
-  double BoxAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BoxAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BoxAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BoxAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BoxAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BoxAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["VaultAir"];
-  double VaultAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double VaultAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double VaultAirYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
-  double VaultAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double VaultAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double VaultAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double VaultAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double VaultAirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double VaultAirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
   double VaultAirSphi= (*cavernElements)[recordIndex]->getDouble("SPHI");
   double VaultAirDphi= (*cavernElements)[recordIndex]->getDouble("DPHI");
  
   recordIndex = elementMap["HallAir"];
-  double HallAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double HallAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double HallAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double HallAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double HallAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double HallAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["BaseAir"];
-  double BaseAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
-  double BaseAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double BaseAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double BaseAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double BaseAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
+  double BaseAirHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double BaseAirHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double BaseAirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["BoxAirW"];
-  double BoxAirWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirWZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirWYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   recordIndex = elementMap["BoxAirVleft"];
-  double BoxAirVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirVleftZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirVleftYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
  
   recordIndex = elementMap["BoxAirVright"];
-  double BoxAirVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m; 
+  double BoxAirVrightZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m; 
   double BoxAirVrightYrotate = (*cavernElements)[recordIndex]->getDouble("YROTATE");
 
   GeoTubs *WallACAir         = new GeoTubs(WallACAirMinR, WallACAirMaxR, WallACAirHalfHeight, WallACAirSphi, WallACAirDphi);        
@@ -287,78 +287,78 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
   GeoTubs *VaultAir          = new GeoTubs(VaultAirMinR, VaultAirMaxR, VaultAirHalfHeight, VaultAirSphi, VaultAirDphi);      
   GeoBox  *HallAir           = new GeoBox(HallAirHalfLength, HallAirHalfWidth, HallAirHalfHeight);
   GeoBox  *BaseAir           = new GeoBox(BaseAirHalfLength, BaseAirHalfWidth, BaseAirHalfHeight);
-  HepGeom::Transform3D BoxCutWallAir      = HepGeom::TranslateZ3D(BoxAirWZpos)*HepGeom::RotateY3D(BoxAirWYrotate);
-  HepGeom::Transform3D BoxCutVaultLeftAir = HepGeom::TranslateZ3D(BoxAirVleftZpos)*HepGeom::RotateY3D(BoxAirVleftYrotate);
-  HepGeom::Transform3D BoxCutVaulRightAir = HepGeom::TranslateZ3D(BoxAirVrightZpos)*HepGeom::RotateY3D(BoxAirVrightYrotate);
+  GeoTrf::Transform3D BoxCutWallAir      = GeoTrf::TranslateZ3D(BoxAirWZpos)*GeoTrf::RotateY3D(BoxAirWYrotate);
+  GeoTrf::Transform3D BoxCutVaultLeftAir = GeoTrf::TranslateZ3D(BoxAirVleftZpos)*GeoTrf::RotateY3D(BoxAirVleftYrotate);
+  GeoTrf::Transform3D BoxCutVaulRightAir = GeoTrf::TranslateZ3D(BoxAirVrightZpos)*GeoTrf::RotateY3D(BoxAirVrightYrotate);
 
   //------------------Cut the vault and side walls----------------------------
-  const GeoShape & CutWallAir   = (*WallACAir).subtract((*BoxAir) << HepGeom::Transform3D(BoxCutWallAir));
-  const GeoShape & CutVaultAir  = (*VaultAir).subtract((*BoxAir) << HepGeom::Transform3D(BoxCutVaultLeftAir)).
-                                              subtract((*BoxAir) << HepGeom::Transform3D(BoxCutVaulRightAir));
+  const GeoShape & CutWallAir   = (*WallACAir).subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutWallAir));
+  const GeoShape & CutVaultAir  = (*VaultAir).subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutVaultLeftAir)).
+                                              subtract((*BoxAir) << GeoTrf::Transform3D(BoxCutVaulRightAir));
 
   //--------------- Build air shafts------------------------------.
   recordIndex = elementMap["PX14Air"];
-  double PX14AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX14AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX14AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX14AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX14AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX14AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX14AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX14AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX14AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX14AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["PX16Air"];
-  double PX16AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
-  double PX16AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*CLHEP::m;
-  double PX16AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
-  double PX16AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*CLHEP::m;     
-  double PX16AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*CLHEP::m;
+  double PX16AirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
+  double PX16AirYpos = (*cavernElements)[recordIndex]->getDouble("YPOS")*GeoModelKernelUnits::m;
+  double PX16AirHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
+  double PX16AirMinR = (*cavernElements)[recordIndex]->getDouble("MINR")*GeoModelKernelUnits::m;     
+  double PX16AirMaxR = (*cavernElements)[recordIndex]->getDouble("MAXR")*GeoModelKernelUnits::m;
 
   GeoTube     *PX14Air   = new GeoTube(PX14AirMinR, PX14AirMaxR, PX14AirHalfHeight);  
   GeoTube     *PX16Air   = new GeoTube(PX16AirMinR, PX16AirMaxR, PX16AirHalfHeight);
 
   const GeoShape & ShaftsAir= 
-	  ((*PX14Air)     << HepGeom::TranslateX3D(PX14AirXpos)*HepGeom::TranslateY3D(PX14AirYpos)).
-	  add((*PX16Air)  << HepGeom::TranslateX3D(PX16AirXpos)*HepGeom::TranslateY3D(PX16AirYpos));
+	  ((*PX14Air)     << GeoTrf::TranslateX3D(PX14AirXpos)*GeoTrf::TranslateY3D(PX14AirYpos)).
+	  add((*PX16Air)  << GeoTrf::TranslateX3D(PX16AirXpos)*GeoTrf::TranslateY3D(PX16AirYpos));
  
   //----------------Assemble everything--------------------------------.
   recordIndex = elementMap["WallAAir"];
-  double WallAAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallAAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallAAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallAAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
  
   recordIndex = elementMap["WallCAir"];
-  double WallCAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
-  double WallCAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*CLHEP::m; 
+  double WallCAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
+  double WallCAirXpos = (*cavernElements)[recordIndex]->getDouble("XPOS")*GeoModelKernelUnits::m; 
   double WallCAirZrotate = (*cavernElements)[recordIndex]->getDouble("ZROTATE");
 
   const GeoShape & CavernAir = (*HallAir).
-	  add(CutWallAir     << HepGeom::TranslateZ3D(WallAAirZpos)*HepGeom::TranslateX3D(WallAAirXpos)).
-	  add(CutWallAir     << HepGeom::TranslateZ3D(WallCAirZpos)*HepGeom::TranslateX3D(WallCAirXpos)*HepGeom::RotateZ3D(WallCAirZrotate)).
-	  add(CutVaultAir    << HepGeom::TranslateZ3D(VaultAirZpos)*HepGeom::RotateY3D(VaultAirYrotate)).
-	  add((*BaseAir)     << HepGeom::TranslateZ3D(BaseAirZpos));
+	  add(CutWallAir     << GeoTrf::TranslateZ3D(WallAAirZpos)*GeoTrf::TranslateX3D(WallAAirXpos)).
+	  add(CutWallAir     << GeoTrf::TranslateZ3D(WallCAirZpos)*GeoTrf::TranslateX3D(WallCAirXpos)*GeoTrf::RotateZ3D(WallCAirZrotate)).
+	  add(CutVaultAir    << GeoTrf::TranslateZ3D(VaultAirZpos)*GeoTrf::RotateY3D(VaultAirYrotate)).
+	  add((*BaseAir)     << GeoTrf::TranslateZ3D(BaseAirZpos));
  
   recordIndex = elementMap["ShaftsAir"];
-  double ShaftsAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double ShaftsAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
  
   recordIndex = elementMap["CavernAir"];
-  double CavernAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*CLHEP::m;
+  double CavernAirZpos = (*cavernElements)[recordIndex]->getDouble("ZPOS")*GeoModelKernelUnits::m;
 
   const GeoShape & AirHall=
-	  ((CavernAir     << HepGeom::TranslateZ3D(CavernAirZpos))).
-          add((ShaftsAir  << HepGeom::TranslateZ3D(ShaftsAirZpos)));     //allows for a built-in 2m thick plugs for both PX14 & PX16
+	  ((CavernAir     << GeoTrf::TranslateZ3D(CavernAirZpos))).
+          add((ShaftsAir  << GeoTrf::TranslateZ3D(ShaftsAirZpos)));     //allows for a built-in 2m thick plugs for both PX14 & PX16
 
 
  
  //// -----------------------Build BedRock for Shafts and Cavern-------------------------------
  
   recordIndex = elementMap["Rock"];
-  double RockHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*CLHEP::m; 
-  double RockHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*CLHEP::m;  
-  double RockHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*CLHEP::m;
+  double RockHalfLength = (*cavernElements)[recordIndex]->getDouble("HALFLENGTH")*GeoModelKernelUnits::m; 
+  double RockHalfWidth = (*cavernElements)[recordIndex]->getDouble("HALFWIDTH")*GeoModelKernelUnits::m;  
+  double RockHalfHeight = (*cavernElements)[recordIndex]->getDouble("HALFHEIGHT")*GeoModelKernelUnits::m;
 
   
   GeoBox     *Rockbox     = new GeoBox( RockHalfWidth, RockHalfHeight, RockHalfLength); // 300, 50.75, 300
   const GeoShape & BedRock = ((*Rockbox) .
-			      subtract((AirHall) <<HepGeom::TranslateY3D(-34.5*CLHEP::m)*HepGeom::RotateY3D(-1.57)*HepGeom::RotateX3D(-1.57)));
+			      subtract((AirHall) <<GeoTrf::TranslateY3D(-34.5*GeoModelKernelUnits::m)*GeoTrf::RotateY3D(-1.57)*GeoTrf::RotateX3D(-1.57)));
 
-  GeoTransform *rZt  = new GeoTransform(HepGeom::TranslateY3D(34.5*CLHEP::m)*HepGeom::TranslateX3D(-1.7*CLHEP::m));
+  GeoTransform *rZt  = new GeoTransform(GeoTrf::TranslateY3D(34.5*GeoModelKernelUnits::m)*GeoTrf::TranslateX3D(-1.7*GeoModelKernelUnits::m));
   world->add(rZt);
   GeoLogVol  *lvr        = new GeoLogVol("BEDROCK",&BedRock,rock);
   GeoPhysVol *bedrock    = new GeoPhysVol(lvr);
@@ -368,7 +368,7 @@ void CavernInfraDetectorFactory01::create(GeoPhysVol *world)
 
   const GeoShape & CavConcrete = ((Concrete).subtract(AirHall));
   
-  GeoTransform* xfTop = new GeoTransform(HepGeom::TranslateY3D(-34.5*CLHEP::m)*HepGeom::RotateY3D(-1.57)*HepGeom::RotateX3D(-1.57)); 
+  GeoTransform* xfTop = new GeoTransform(GeoTrf::TranslateY3D(-34.5*GeoModelKernelUnits::m)*GeoTrf::RotateY3D(-1.57)*GeoTrf::RotateX3D(-1.57)); 
   bedrock->add(xfTop);
   GeoLogVol  *lvcsc              = new GeoLogVol("CAV_SHAFTS_CONC",&CavConcrete,conc);
   GeoPhysVol *CavShaftsConc      = new GeoPhysVol(lvcsc);
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt b/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt
index 781268782af40f67b1de3922a4038a26f3bf5b3c..6bfb3c8cad77af2b876ea482beab25eea69ed267 100644
--- a/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( GeoModelEnvelopes )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           PRIVATE
                           Control/SGTools
@@ -16,11 +15,13 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           GaudiKernel )
 
+find_package( GeoModel )
+
 # Component(s) in the package:
 atlas_add_component( GeoModelEnvelopes
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES GeoModelKernel GeoModelUtilities SGTools StoreGateLib SGtests GaudiKernel )
+                     LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GeoModelUtilities SGTools StoreGateLib GaudiKernel )
 
 # Install files from the package:
 atlas_install_headers( GeoModelEnvelopes )
diff --git a/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx
index 76a21574318baab7cabb76ffb2b042046266eb55..555b0b924ce845174cd57c443bd437a4f85579fb 100755
--- a/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx
+++ b/AtlasGeometryCommon/GeoModelEnvelopes/src/ForDetEnvelopeFactory.cxx
@@ -11,7 +11,6 @@
 #include "GeoModelKernel/GeoLogVol.h"  
 #include "GeoModelKernel/GeoNameTag.h"  
 #include "GeoModelKernel/GeoPhysVol.h"  
-#include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoShapeShift.h"  
 #include "GeoModelKernel/GeoShapeUnion.h"
 
@@ -45,10 +44,10 @@ void ForDetEnvelopeFactory::create(GeoPhysVol *world)
   const GeoMaterial* air = m_materialManager->getMaterial("std::Air");
 
   // Build boolean shape: union of two tubes
-  const GeoTube* tube1 = new GeoTube(0.,2000.*CLHEP::mm,188750.*CLHEP::mm);
-  GeoTube* tube2 = new GeoTube(0.,2000.*CLHEP::mm,188750.*CLHEP::mm);
-  HepGeom::TranslateZ3D xfRelativeA(211250.*CLHEP::mm);
-  HepGeom::TranslateZ3D xfRelativeC(-211250.*CLHEP::mm);
+  const GeoTube* tube1 = new GeoTube(0.,2000.*GeoModelKernelUnits::mm,188750.*GeoModelKernelUnits::mm);
+  GeoTube* tube2 = new GeoTube(0.,2000.*GeoModelKernelUnits::mm,188750.*GeoModelKernelUnits::mm);
+  GeoTrf::TranslateZ3D xfRelativeA(211250.*GeoModelKernelUnits::mm);
+  GeoTrf::TranslateZ3D xfRelativeC(-211250.*GeoModelKernelUnits::mm);
 
   const GeoShapeShift& envShape1 = (*tube1)<<xfRelativeA;
   const GeoShapeUnion& envShape = envShape1.add((*tube2)<<xfRelativeC);
diff --git a/Calorimeter/CaloDetDescr/CaloDetDescr/ICaloCoordinateTool.h b/Calorimeter/CaloDetDescr/CaloDetDescr/ICaloCoordinateTool.h
index 8d167276d27d0633c418f9b6c6d027210f4d0be8..a8a49c8c6a81cc6d506811e221c3c77e85324f87 100755
--- a/Calorimeter/CaloDetDescr/CaloDetDescr/ICaloCoordinateTool.h
+++ b/Calorimeter/CaloDetDescr/CaloDetDescr/ICaloCoordinateTool.h
@@ -36,7 +36,7 @@
     - the LAr+Tile local coordinate system, which differs for 2
       reasons : 
 
-       the origin is shifted by x = 2298 CLHEP::mm, and 
+       the origin is shifted by x = 2298 mm, and 
        the two calos sit on a rotating table to allow eta scans.
 
        In the local coordinate system, calorimeters have a pointing 
diff --git a/Calorimeter/CaloDetDescr/src/CaloDetectorElements.cxx b/Calorimeter/CaloDetDescr/src/CaloDetectorElements.cxx
index bd559b942e37269e164eb4e70c342b3d558bb1d6..ef80c226e66b70705938cfe58a1d7cd0e0f8c247 100755
--- a/Calorimeter/CaloDetDescr/src/CaloDetectorElements.cxx
+++ b/Calorimeter/CaloDetDescr/src/CaloDetectorElements.cxx
@@ -10,6 +10,7 @@
 
 #include "CaloGeoHelpers/CaloPhiRange.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
 
 namespace {
 
@@ -196,12 +197,12 @@ void EMECDetectorElement::init_description(bool isTestBeam, const CaloElementPos
 // we need to apply the famous ZShift. 
   Amg::Transform3D xfNominal;
   if(m_cell->getEndcapIndex()==0)
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_region->getProjectivityDisplacement()*CLHEP::cm))*xfDef; // Negative EMEC
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_region->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef; // Negative EMEC
   else
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_region->getProjectivityDisplacement()*CLHEP::cm))*xfDef; // Positive EMEC
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_region->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef; // Positive EMEC
 
   if(isTestBeam){
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,3689.5*CLHEP::mm));
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,3689.5*Gaudi::Units::mm));
   }
 
   const Amg::Transform3D &xfAbs = m_region->getAbsoluteTransformAmg();
@@ -333,12 +334,12 @@ void HECDetectorElement::init_description(bool isTestBeam, const CaloElementPosi
   // we need to apply the famous ZShift.
   Amg::Transform3D xfNominal;
   if(m_cell->getEndcapIndex()==0)
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_region->getProjectivityDisplacement()*CLHEP::cm))*xfDef; // Negative HEC
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_region->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef; // Negative HEC
   else
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_region->getProjectivityDisplacement()*CLHEP::cm))*xfDef; // Positive HEC
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_region->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef; // Positive HEC
 
   if(isTestBeam){
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 4277.*CLHEP::mm));
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 4277.*Gaudi::Units::mm));
   }
 
   const Amg::Transform3D &xfAbs = m_region->getAbsoluteTransformAmg();
@@ -465,18 +466,18 @@ void FCALDetectorElement::init_description(bool isTestBeam, const CaloElementPos
 // we need to apply the famous ZShift. 
   Amg::Transform3D xfNominal;
   if(m_module->getEndcapIndex()==FCALModule::POS)
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_module->getProjectivityDisplacement()*CLHEP::cm))*xfDef;
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,-m_module->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef;
   else
-    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_module->getProjectivityDisplacement()*CLHEP::cm))*xfDef;
+    xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0.,m_module->getProjectivityDisplacement()*Gaudi::Units::cm))*xfDef;
 
   if(isTestBeam){
      if(m_module->getModuleIndex() == FCALModule::FCAL1)
-           xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 4668.5*CLHEP::mm));
+           xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 4668.5*Gaudi::Units::mm));
      else if (m_module->getModuleIndex() == FCALModule::FCAL2)
-           xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 5128.3*CLHEP::mm));
+           xfNominal = Amg::Translation3D(Amg::Vector3D(0.,0., 5128.3*Gaudi::Units::mm));
      else {
         std::cout<<"Wrong FCAL module for TB, using FCAL1 !!!"<<std::endl;
-        xfNominal = Amg::Translation3D( Amg::Vector3D(0.,0.,4668.5*CLHEP::mm));
+        xfNominal = Amg::Translation3D( Amg::Vector3D(0.,0.,4668.5*Gaudi::Units::mm));
      }
   }
 
diff --git a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx
index c733109a9b7fa4a62b80ae8789d1452721f568f7..4e597a60acfcead1b0ea4510feb2a094a508de4f 100755
--- a/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx
+++ b/Calorimeter/CaloTrackingGeometry/src/CaloTrackingGeometryBuilder.cxx
@@ -38,6 +38,7 @@
 #include "TrkSurfaces/TrapezoidBounds.h"
 #include "TrkSurfaces/DiscSurface.h"
 #include "TrkSurfaces/PlaneSurface.h"
+#include "GaudiKernel/SystemOfUnits.h"
 #include <memory>
 // CLHEP
 //#include "CLHEP/Geometry/Transform3D.h"
@@ -48,8 +49,8 @@
 //using HepGeom::Vector3D;
 //using CLHEP::Hep3Vector;
 //using CLHEP::HepRotation;
-using CLHEP::mm;
-using CLHEP::radian;
+//using CLHEP::mm;
+//using CLHEP::radian;
 
 // constructor
 Calo::CaloTrackingGeometryBuilder::CaloTrackingGeometryBuilder(const std::string& t, const std::string& n, const IInterface* p) :
@@ -60,7 +61,7 @@ Calo::CaloTrackingGeometryBuilder::CaloTrackingGeometryBuilder(const std::string
   m_lArVolumeBuilder("LAr::LArVolumeBuilder/LArVolumeBuilder"),
   m_tileVolumeBuilder("Tile::TileVolumeBuilder/TileVolumeBuilder"),
   m_caloMaterial(0),
-  m_caloEnvelope(25*mm),
+  m_caloEnvelope(25*Gaudi::Units::mm),
   m_enclosingEnvelopeSvc("AtlasGeometry_EnvelopeDefSvc", n),
   m_caloDefaultRadius(4250.),
   m_caloDefaultHalflengthZ(6500.),
@@ -529,7 +530,7 @@ const Trk::TrackingGeometry* Calo::CaloTrackingGeometryBuilder::trackingGeometry
        Trk::DiscLayer* mbtsPosLayer = new Trk::DiscLayer(mbtsPosZpos,dibo->clone(),
                                                          //mbtsPosLayerSurfArray,
                                                          Trk::HomogeneousLayerMaterial(Trk::MaterialProperties(*m_caloMaterial,1.),1.),
-                                                         1.*mm);
+                                                         1.*Gaudi::Units::mm);
 
        m_mbtsNegLayers=new std::vector<const Trk::Layer*>;
        m_mbtsPosLayers=new std::vector<const Trk::Layer*>;
diff --git a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
index e9955f0047479827d5d0e20dce94be9bf51c0227..12312aeab20416618d415c202c75d5bef52b27e2 100644
--- a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
+++ b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
@@ -493,7 +493,7 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms()
 
      xAOD::MuonContainer::const_iterator muonItr;
      for (muonItr=muons->begin(); muonItr != muons->end(); ++muonItr) {
-         Float_t minptCutJPsi(1.0*CLHEP::GeV);
+         Float_t minptCutJPsi(1.0*GeV);
 	 auto muTrk = (*muonItr)->primaryTrackParticle();
 	 float d0sig;
 	 if (!muTrk) {
diff --git a/DetectorDescription/AGDD/AGDDControl/CMakeLists.txt b/DetectorDescription/AGDD/AGDDControl/CMakeLists.txt
index 8e975adbaac1849c34ff6bfcbd76dfbc2e2fec28..e1c69121a291dfcf371d3a80810ad1b4d9f946d2 100644
--- a/DetectorDescription/AGDD/AGDDControl/CMakeLists.txt
+++ b/DetectorDescription/AGDD/AGDDControl/CMakeLists.txt
@@ -9,25 +9,27 @@ atlas_subdir( AGDDControl )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           DetectorDescription/AGDD/AGDDKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           Control/StoreGate
                           DetectorDescription/AGDD/AGDDModel
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel
                           Tools/PathResolver )
 
 # External dependencies:
 find_package( CLHEP )
 find_package( XercesC )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( AGDDControl
                    src/*.cxx
                    PUBLIC_HEADERS AGDDControl
-                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIR}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps AGDDKernel GeoModelKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AGDDKernel StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES AGDDModel GeoModelUtilities GaudiKernel PathResolver )
 
diff --git a/DetectorDescription/AGDD/AGDDControl/src/AGDD2GeoModelBuilder.cxx b/DetectorDescription/AGDD/AGDDControl/src/AGDD2GeoModelBuilder.cxx
index 2eb7c7f7df8421ee8410b7a6f03e0e6411e625d4..562bcea91cfad4b282b76a5e7fe96082e28cb2a8 100644
--- a/DetectorDescription/AGDD/AGDDControl/src/AGDD2GeoModelBuilder.cxx
+++ b/DetectorDescription/AGDD/AGDDControl/src/AGDD2GeoModelBuilder.cxx
@@ -60,6 +60,8 @@
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include "StoreGate/StoreGateSvc.h"
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/Bootstrap.h"
@@ -234,8 +236,8 @@ void AGDD2GeoModelBuilder::CreateSnake(AGDDSnake* v)
 	CLHEP::HepRotation h;
 	HepGeom::Transform3D ttt1(h,v1);
 	HepGeom::Transform3D ttt2(h,v2);
-	static GeoShape *s1=new GeoShapeShift(box1,ttt1);
-	static GeoShape *s2=new GeoShapeShift(box1,ttt2);
+	static GeoShape *s1=new GeoShapeShift(box1,Amg::CLHEPTransformToEigen(ttt1));
+	static GeoShape *s2=new GeoShapeShift(box1,Amg::CLHEPTransformToEigen(ttt2));
 	
 //	std::cout<<" Snake "<<v->GetName()<<" nr. of Points "<<v->NrOfPoints()<<std::endl;
 	double radius=v->Radius();
@@ -257,7 +259,7 @@ void AGDD2GeoModelBuilder::CreateSnake(AGDDSnake* v)
 	rrr.rotateZ(axis2.phi());
 	rrr.rotateY(angle2);
 	HepGeom::Transform3D ttt(rrr,vt);
-	GeoShape *ssnew=new GeoShapeShift(s1,ttt);
+	GeoShape *ssnew=new GeoShapeShift(s1,Amg::CLHEPTransformToEigen(ttt));
 	
 	solid = new GeoShapeSubtraction(solid,ssnew);
 //	std::cout<<" angles theta, phi "<<axis2.theta()<<" "<<axis2.phi()<<std::endl;
@@ -265,13 +267,13 @@ void AGDD2GeoModelBuilder::CreateSnake(AGDDSnake* v)
 	CLHEP::Hep3Vector vref(0.,0.,-lengthnew/2.);
 	CLHEP::HepRotation r;
 	HepGeom::Transform3D tref(r,vref);
-	solid=new GeoShapeShift(solid,tref);
+	solid=new GeoShapeShift(solid,Amg::CLHEPTransformToEigen(tref));
 	CLHEP::HepRotation r1;
 	r1.rotateY(axis0.theta());
 	r1.rotateZ(axis0.phi());
 	CLHEP::Hep3Vector vtt(v->GetPoint(0).x(),v->GetPoint(0).y(),v->GetPoint(0).z());
 	HepGeom::Transform3D t(r1,vtt);
-	solid=new GeoShapeShift(solid,t);
+	solid=new GeoShapeShift(solid,Amg::CLHEPTransformToEigen(t));
 	
  	for (int i=1;i<v->NrOfPoints()-1;i++)
 	{
@@ -298,25 +300,25 @@ void AGDD2GeoModelBuilder::CreateSnake(AGDDSnake* v)
 		
 		GeoShape* ss=new GeoTubs(0.,radius,lengthnew/2.,0.,4*asin(1.));
 
-	    const CLHEP::Hep3Vector vt1(0.,0.,+lengthnew/2.-delta_l1-2.);
+		const CLHEP::Hep3Vector vt1(0.,0.,+lengthnew/2.-delta_l1-2.);
 		const CLHEP::Hep3Vector vt2(0.,0.,-lengthnew/2.+delta_l2+2.);
-	    CLHEP::HepRotation rrr1,rrr2;
+		CLHEP::HepRotation rrr1,rrr2;
 		
-	    rrr1.rotateY(angle1);
+		rrr1.rotateY(angle1);
 		rrr1.rotateZ(-axis1.phi());
 		rrr2.rotateY(-angle2);
 		rrr2.rotateZ(axis2.phi());
-	    HepGeom::Transform3D ttt1(rrr1,vt1);
+		HepGeom::Transform3D ttt1(rrr1,vt1);
 		HepGeom::Transform3D ttt2(rrr2,vt2);
-	    GeoShape *ssnew1=new GeoShapeShift(s2,ttt1);
+		GeoShape *ssnew1=new GeoShapeShift(s2,Amg::CLHEPTransformToEigen(ttt1));
 		ss = new GeoShapeSubtraction(ss,ssnew1);
 		if (i<(v->NrOfPoints()-2)) 
 		{
-			GeoShape *ssnew2=new GeoShapeShift(s1,ttt2);
-	    	ss = new GeoShapeSubtraction(ss,ssnew2);
+		  GeoShape *ssnew2=new GeoShapeShift(s1,Amg::CLHEPTransformToEigen(ttt2));
+		  ss = new GeoShapeSubtraction(ss,ssnew2);
 		}
 
-		ss=new GeoShapeShift(ss,ttref);
+		ss=new GeoShapeShift(ss,Amg::CLHEPTransformToEigen(ttref));
 		
 	//	std::cout<<" angles: theta "<<axis.theta()<<" phi "<<axis.phi()<<std::endl;
 		CLHEP::HepRotation rr1;
@@ -327,7 +329,7 @@ void AGDD2GeoModelBuilder::CreateSnake(AGDDSnake* v)
 		const CLHEP::Hep3Vector vv(v->GetPoint(i).x(),v->GetPoint(i).y(),v->GetPoint(i).z());
 		HepGeom::Transform3D tt(rr1,vv);
 
-		ss=new GeoShapeShift(ss,tt);
+		ss=new GeoShapeShift(ss,Amg::CLHEPTransformToEigen(tt));
 		solid=new GeoShapeUnion(solid,ss);
 	}
 	v->SetSolid(solid);
@@ -408,7 +410,7 @@ void AGDD2GeoModelBuilder::CreateUnion(AGDDUnion* v)
 //	std::cout<<" volume name "<<vol->GetName()<<std::endl;
 	vol->CreateSolid();
 	GeoShape *sV=(GeoShape*)(vol->GetSolid());
-	sV=new GeoShapeShift(sV,pos->Transform());
+	sV=new GeoShapeShift(sV,Amg::CLHEPTransformToEigen(pos->Transform()));
  	for (int i=1;i<nPos;i++)
  	{
  		AGDDPositioner* pp=v->GetDaughter(i);
@@ -416,7 +418,7 @@ void AGDD2GeoModelBuilder::CreateUnion(AGDDUnion* v)
 //		std::cout<<" \t secondary volume name "<<vv->GetName()<<std::endl;
  		vv->CreateSolid();
  		GeoShape *nsV=(GeoShape*)(vv->GetSolid());
-		nsV=new GeoShapeShift(nsV,pp->Transform());
+		nsV=new GeoShapeShift(nsV,Amg::CLHEPTransformToEigen(pp->Transform()));
  		sV=new GeoShapeUnion(sV,nsV);
  	}
 	v->SetMaterial(vol->GetMaterial());
@@ -430,14 +432,14 @@ void AGDD2GeoModelBuilder::CreateIntersection(AGDDIntersection* v)
 	AGDDVolume *vol=pos->GetVolume();
 	vol->CreateSolid();
 	GeoShape *sV=(GeoShape*)(vol->GetSolid());
-	sV=new GeoShapeShift(sV,pos->Transform());
+	sV=new GeoShapeShift(sV,Amg::CLHEPTransformToEigen(pos->Transform()));
  	for (int i=1;i<nPos;i++)
  	{
  		AGDDPositioner* pp=v->GetDaughter(i);
  		AGDDVolume *vv=pp->GetVolume();
  		vv->CreateSolid();
  		GeoShape *nsV=(GeoShape*)(vv->GetSolid());
-		nsV=new GeoShapeShift(nsV,pp->Transform());
+		nsV=new GeoShapeShift(nsV,Amg::CLHEPTransformToEigen(pp->Transform()));
  		sV=new GeoShapeIntersection(sV,nsV);
  	}
 	v->SetMaterial(vol->GetMaterial());
@@ -450,14 +452,14 @@ void AGDD2GeoModelBuilder::CreateSubtraction(AGDDSubtraction* v)
 	AGDDVolume *vol=pos->GetVolume();
 	vol->CreateSolid();
 	GeoShape *sV=(GeoShape*)(vol->GetSolid());
-	sV=new GeoShapeShift(sV,pos->Transform());
+	sV=new GeoShapeShift(sV,Amg::CLHEPTransformToEigen(pos->Transform()));
  	for (int i=1;i<nPos;i++)
  	{
  		AGDDPositioner* pp=v->GetDaughter(i);
  		AGDDVolume *vv=pp->GetVolume();
  		vv->CreateSolid();
  		GeoShape *nsV=(GeoShape*)(vv->GetSolid());
-		nsV=new GeoShapeShift(nsV,pp->Transform());
+		nsV=new GeoShapeShift(nsV,Amg::CLHEPTransformToEigen(pp->Transform()));
  		sV=new GeoShapeSubtraction(sV,nsV);
  	}
 	v->SetMaterial(vol->GetMaterial());
@@ -542,7 +544,7 @@ void AGDD2GeoModelBuilder::CreateComposition(AGDDComposition *v)
 				// if (isDetElement) std::cout<<"\t\t Detector: "<<volName<<" "<<detFullTag<<std::endl;
 			}
 			HepGeom::Transform3D trf=pos->Transform();
-			GeoTransform *geotrf=new GeoTransform(trf);
+			GeoTransform *geotrf=new GeoTransform(Amg::CLHEPTransformToEigen(trf));
 			void *temp=vol->GetVolume();
 			
 			// GeoFullPhysVol are needed for detectors (corresponding to ReadoutElements)
@@ -627,7 +629,7 @@ void AGDD2GeoModelBuilder::BuildAllVolumes()
 					std::cout<<"AGDDController: mother not set!!"<<std::endl;
 					return;
 				}
-                                GeoTransform *gtrf=new GeoTransform(trf);
+                                GeoTransform *gtrf=new GeoTransform(Amg::CLHEPTransformToEigen(trf));
 				m_mother->add(gtrf);
 				m_mother->add(vvv);
 			}
@@ -672,7 +674,7 @@ void AGDD2GeoModelBuilder::BuildFromSection(std::string s)
 		 	std::cout<<"AGDDController: mother not set!!"<<std::endl;
 			return;
 		   }
-		   GeoTransform *gtrf=new GeoTransform(trf);
+		   GeoTransform *gtrf=new GeoTransform(Amg::CLHEPTransformToEigen(trf));
                    m_mother->add(gtrf);
                    m_mother->add(vvv);
                 }
@@ -701,7 +703,7 @@ void AGDD2GeoModelBuilder::BuildFromSection(std::string s)
 					std::cout<<"AGDDController: mother not set!!"<<std::endl;
 					return;
 				}
-				GeoTransform *gtrf=new GeoTransform(trf);
+				GeoTransform *gtrf=new GeoTransform(Amg::CLHEPTransformToEigen(trf));
 				m_mother->add(gtrf);
 				m_mother->add(vvv);
 			}
@@ -736,7 +738,7 @@ void AGDD2GeoModelBuilder::BuildFromVolume(std::string s)
 				std::cout<<"AGDDController: mother not set!!"<<std::endl;
 				return;
 			}
-			GeoTransform *gtrf=new GeoTransform(trf);
+			GeoTransform *gtrf=new GeoTransform(Amg::CLHEPTransformToEigen(trf));
 			m_mother->add(gtrf);
 			m_mother->add(vvv);
 		}
diff --git a/DetectorDescription/AGDD/AGDDControl/src/AGDDController.cxx b/DetectorDescription/AGDD/AGDDControl/src/AGDDController.cxx
index 0768a24a6c1ca409163a481efb9fc4970066ce59..c771dce1c055ddcfdd3ab33e5234c1b690b5d88a 100644
--- a/DetectorDescription/AGDD/AGDDControl/src/AGDDController.cxx
+++ b/DetectorDescription/AGDD/AGDDControl/src/AGDDController.cxx
@@ -18,7 +18,6 @@
 #include "GeoModelKernel/GeoVDetectorManager.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoVPhysVol.h"
-#include "GeoModelKernel/GeoPVLink.h"
 #include "GeoModelKernel/GeoPVConstLink.h"
 
 #include "StoreGate/StoreGateSvc.h"
diff --git a/DetectorDescription/AGDD/AGDDKernel/AGDDKernel/AGDDDetectorPositioner.h b/DetectorDescription/AGDD/AGDDKernel/AGDDKernel/AGDDDetectorPositioner.h
index d1afb6874fb88fc85a09bfe6c5a46807216bc276..0090c8203ca31730834e0e678abdeb4c53873752 100644
--- a/DetectorDescription/AGDD/AGDDKernel/AGDDKernel/AGDDDetectorPositioner.h
+++ b/DetectorDescription/AGDD/AGDDKernel/AGDDKernel/AGDDDetectorPositioner.h
@@ -5,6 +5,7 @@
 #ifndef AGDDDetectorPositioner_H
 #define AGDDDetectorPositioner_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "CLHEP/Geometry/Transform3D.h"
 #include "CLHEP/Vector/ThreeVector.h"
diff --git a/DetectorDescription/AGDD/AGDDKernel/CMakeLists.txt b/DetectorDescription/AGDD/AGDDKernel/CMakeLists.txt
index eca55dd78598dc5d9b3c3ca8999ab28b2c426caf..3512565a61bac22427a8b65ab6c60bc539e13688 100644
--- a/DetectorDescription/AGDD/AGDDKernel/CMakeLists.txt
+++ b/DetectorDescription/AGDD/AGDDKernel/CMakeLists.txt
@@ -5,18 +5,19 @@
 # Declare the package name:
 atlas_subdir( AGDDKernel )
 
-# Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel )
+                          DetectorDescription/GeoPrimitives )
 
 # External dependencies:
 find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( AGDDKernel
                    src/*.cxx
                    PUBLIC_HEADERS AGDDKernel
-                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
+                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel )
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} )
 
diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py
index 853df4b8f2a57efbcd082d9a3544236197e51e05..e1356826b363ce1e877125e069fa560872022143 100755
--- a/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py
+++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/LArGM.py
@@ -9,7 +9,6 @@ from AthenaCommon.DetFlags      import DetFlags
 if ( DetFlags.detdescr.LAr_on() ):
     from GeoModelSvc.GeoModelSvcConf import GeoModelSvc
     GeoModelSvc = GeoModelSvc()
-
     from LArGeoAlgsNV.LArGeoAlgsNVConf import LArDetectorToolNV
     GeoModelSvc.DetectorTools += [ LArDetectorToolNV() ]
 
diff --git a/DetectorDescription/GeoModel/GeoAdaptors/CMakeLists.txt b/DetectorDescription/GeoModel/GeoAdaptors/CMakeLists.txt
index 7f04caf1688fd0d6660ead6eeb8f5e408fe65d87..74ef724ce07daa5f279a15f1701057035ad0ed86 100644
--- a/DetectorDescription/GeoModel/GeoAdaptors/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/GeoAdaptors/CMakeLists.txt
@@ -12,6 +12,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloSimEvent
                           Control/StoreGate
                           DetectorDescription/Identifier
+			  DetectorDescription/GeoPrimitives
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
                           InnerDetector/InDetSimEvent
diff --git a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc
index 1e523bce887b0371ed681a423ab09ce537aa6a8c..2a6c9edbdd74dc7bbcf462a0c602c5e8da67a6c9 100755
--- a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc
+++ b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc
@@ -10,7 +10,7 @@
 #include "StoreGate/StoreGate.h"
 #include "InDetIdentifier/PixelID.h"
 #include "InDetIdentifier/SCT_ID.h"
-
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 inline void GeoSiHit::init() {
 
@@ -56,7 +56,7 @@ inline HepGeom::Point3D<double> GeoSiHit::getGlobalPosition() const {
   
   if (geoelement) {
 
-    const HepGeom::Point3D<double> globalStartPos = geoelement->transformHit() * HepGeom::Point3D<double>(m_hit->localStartPosition());
+    const HepGeom::Point3D<double> globalStartPos = Amg::EigenTransformToCLHEP(geoelement->transformHit()) * HepGeom::Point3D<double>(m_hit->localStartPosition());
     
     double x=globalStartPos.x();
     double y=globalStartPos.y();
diff --git a/DetectorDescription/GeoModel/GeoModelExamples/CMakeLists.txt b/DetectorDescription/GeoModel/GeoModelExamples/CMakeLists.txt
index 4453e6da32d821f53c6dab1c53e3cdac42fb9453..2c31c9c6e383996795f68a9b9bdea360c72d7fac 100644
--- a/DetectorDescription/GeoModel/GeoModelExamples/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/GeoModelExamples/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( GeoModelExamples )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           PRIVATE
                           Control/StoreGate
@@ -17,19 +16,19 @@ atlas_depends_on_subdirs( PUBLIC
                           GaudiKernel )
 
 # External dependencies:
-find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( GeoModelExamplesLib
                    src/*.cxx
                    PUBLIC_HEADERS GeoModelExamples
-                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel GeoModelUtilities StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} Identifier GaudiKernel )
+                   PRIVATE_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES GeoModelUtilities StoreGateLib
+                   PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} Identifier GaudiKernel )
 
 atlas_add_component( GeoModelExamples
                      src/components/*.cxx
-                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities StoreGateLib SGtests Identifier GaudiKernel GeoModelExamplesLib )
+                     INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities StoreGateLib Identifier GaudiKernel GeoModelExamplesLib )
 
diff --git a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorFactory.cxx b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorFactory.cxx
index b9bea9a06edd7ca222c207c5602d540a98220c2f..ab0496f70daf397e55b06a4e177f0a2f9b7d971b 100755
--- a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorFactory.cxx
+++ b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorFactory.cxx
@@ -5,6 +5,8 @@
 #include "ToyDetectorFactory.h"
 #include "CentralScrutinizer.h"  
 #include "GeoModelInterfaces/AbsMaterialManager.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelKernel/GeoMaterial.h"  
 #include "GeoModelKernel/GeoBox.h"  
 #include "GeoModelKernel/GeoTube.h"  
@@ -16,14 +18,14 @@
 #include "GeoModelKernel/GeoSerialDenominator.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoSerialTransformer.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -65,7 +67,7 @@ void ToyDetectorFactory::create(GeoPhysVol *world)
   //-----------------------------------------------------------------------------------//  
   // Next make the box that describes the shape of the toy volume:                     //  
   //                                                                                   //  
-  const GeoBox      *toyBox    = new GeoBox(800*CLHEP::cm,800*CLHEP::cm, 1000*CLHEP::cm);                   //  
+  const GeoBox      *toyBox    = new GeoBox(800*GeoModelKernelUnits::cm,800*GeoModelKernelUnits::cm, 1000*GeoModelKernelUnits::cm);                   //  
   //                                                                                   //  
   // Bundle this with a material into a logical volume:                                //  
   //                                                                                   //  
@@ -84,7 +86,7 @@ void ToyDetectorFactory::create(GeoPhysVol *world)
   // Daughters                                                                         //  
   //                                                                                   //  
   //                                                                                   //  
-  const GeoTube     *ringTube  = new GeoTube(500*CLHEP::cm, 1000*CLHEP::cm, 5.0*CLHEP::cm);                 //  
+  const GeoTube     *ringTube  = new GeoTube(500*GeoModelKernelUnits::cm, 1000*GeoModelKernelUnits::cm, 5.0*GeoModelKernelUnits::cm);                 //  
   //                                                                                   //  
   // Bundle this with a material into a logical volume:                                //  
   //                                                                                   //  
@@ -96,7 +98,7 @@ void ToyDetectorFactory::create(GeoPhysVol *world)
   toyPhys->add(ringName);                                                              //  
   for (int i=0;i<100;i++) {                                                            //  
     GeoFullPhysVol         *ringPhys = new GeoFullPhysVol(ringLog);                    //  
-    GeoAlignableTransform  *xform    = new GeoAlignableTransform(HepGeom::TranslateZ3D((i-50)*20*CLHEP::cm));  
+    GeoAlignableTransform  *xform    = new GeoAlignableTransform(GeoTrf::TranslateZ3D((i-50)*20*GeoModelKernelUnits::cm));  
     toyPhys->add(xform);                                                               //  
     toyPhys->add(ringPhys);                                                            //  
     m_detectorManager->addCentralScrutinizer(new CentralScrutinizer(ringPhys));          //  
@@ -111,11 +113,11 @@ void ToyDetectorFactory::create(GeoPhysVol *world)
   //  parametrizations in the Toy                                                      //
   //-----------------------------------------------------------------------------------//
 
-  GeoBox       *sPass = new GeoBox(5.0*CLHEP::cm, 30*CLHEP::cm, 30*CLHEP::cm);
+  GeoBox       *sPass = new GeoBox(5.0*GeoModelKernelUnits::cm, 30*GeoModelKernelUnits::cm, 30*GeoModelKernelUnits::cm);
   GeoLogVol    *lPass = new GeoLogVol("Passive", sPass, poly);
   GeoPhysVol   *pPass = new GeoPhysVol(lPass);
 
-  GeoBox       *sIPass = new GeoBox(4*CLHEP::cm, 25*CLHEP::cm, 25*CLHEP::cm);
+  GeoBox       *sIPass = new GeoBox(4*GeoModelKernelUnits::cm, 25*GeoModelKernelUnits::cm, 25*GeoModelKernelUnits::cm);
   GeoLogVol    *lIPass = new GeoLogVol("InnerPassive", sIPass, air);
   GeoPhysVol   *pIPass = new GeoPhysVol(lIPass);
   
@@ -124,11 +126,11 @@ void ToyDetectorFactory::create(GeoPhysVol *world)
   const unsigned int NPLATES=100;
   Variable       i;
   Sin            sin;
-  GENFUNCTION    f = 360*CLHEP::deg/NPLATES*i;
+  GENFUNCTION    f = 360*GeoModelKernelUnits::deg/NPLATES*i;
   GENFUNCTION    g = sin(4*f);
   GENFUNCTION    h = -g;
-  TRANSFUNCTION t1 = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(1100*CLHEP::cm)*Pow(HepGeom::TranslateZ3D(800*CLHEP::cm),g);
-  TRANSFUNCTION t2 = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(1100*CLHEP::cm)*Pow(HepGeom::TranslateZ3D(800*CLHEP::cm),h);
+  TRANSFUNCTION t1 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(1100*GeoModelKernelUnits::cm)*Pow(GeoTrf::TranslateZ3D(800*GeoModelKernelUnits::cm),g);
+  TRANSFUNCTION t2 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(1100*GeoModelKernelUnits::cm)*Pow(GeoTrf::TranslateZ3D(800*GeoModelKernelUnits::cm),h);
 
   //-----------------------------------------------------------------------------------//
   // Inside, by the way, the serial transformer will evaluate the functions:           //
diff --git a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.cxx b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.cxx
index 4459e699f35e6808b94e4b73bfd179597791ebe1..243055152ca2b96f3b2c6dbd00c24c365fd6de0e 100755
--- a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.cxx
+++ b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.cxx
@@ -8,66 +8,76 @@
 #include "GeoModelUtilities/GeoModelExperiment.h"
 #include "GaudiKernel/IService.h"
 #include "GaudiKernel/ISvcLocator.h"
-#include "GaudiKernel/MsgStream.h"
 #include "StoreGate/StoreGateSvc.h"
 
-/**
- ** Constructor(s)
- **/
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/GeoVolumeCursor.h"
+#include <string>
+
 ToyDetectorTool::ToyDetectorTool( const std::string& type, const std::string& name, const IInterface* parent )
-: GeoModelTool( type, name, parent )
+  : GeoModelTool( type, name, parent )
 {
 }
 
-/**
- ** Destructor
- **/
 ToyDetectorTool::~ToyDetectorTool()
 {
-	// This will need to be modified once we register the Toy DetectorNode in
-	// the Transient Detector Store
-	if ( 0 != m_detector ) {
-		delete m_detector;
-		m_detector = 0;
-	}
+  delete m_detector;  
 }
 
-/**
- ** Create the Detector Node corresponding to this tool
- **/
-StatusCode
-ToyDetectorTool::create()
+StatusCode ToyDetectorTool::create()
 { 
-  MsgStream log(msgSvc(), name()); 
-  // 
-  // Locate the top level experiment node 
-  // 
+  ATH_MSG_INFO("ToyDetectorTool::create() ...");
+
+  // Locate the top level experiment
   GeoModelExperiment* theExpt = nullptr;
-  if (StatusCode::SUCCESS != detStore()->retrieve( theExpt, "ATLAS" )) { 
-    log << MSG::ERROR 
-	<< "Could not find GeoModelExperiment ATLAS" 
-	<< endmsg; 
-    return (StatusCode::FAILURE); 
-  } 
+  ATH_CHECK(detStore()->retrieve(theExpt, "ATLAS"));
 
   ToyDetectorFactory theToyFactory(detStore().operator->());
-  if ( 0 == m_detector ) {
-    // Create the ToyDetectorNode instance
+  if(m_detector==nullptr) {
+    // Build geometry
     try {   
       //
       // This strange way of casting is to avoid an
       // utterly brain damaged compiler warning.
       //
-      GeoPhysVol *world=&*theExpt->getPhysVol();
+      GeoPhysVol *world=theExpt->getPhysVol();
       theToyFactory.create(world);
-    } catch (const std::bad_alloc&) {
-      log << MSG::FATAL << "Could not create new ToyDetectorNode!" << endmsg;
+      printVolume(world);
+    } 
+    catch (const std::bad_alloc&) {
+      ATH_MSG_FATAL("Could not Toy Detector Geometry!");
       return StatusCode::FAILURE; 
     }
-    // Register the ToyDetectorNode instance with the Transient Detector Store
+    // Add detector manager to AtlasExperiment and also record it into DetStore
     theExpt->addManager(theToyFactory.getDetectorManager());
-    if (detStore()->record(theToyFactory.getDetectorManager(),theToyFactory.getDetectorManager()->getName())!=StatusCode::SUCCESS) return StatusCode::FAILURE;
-    return StatusCode::SUCCESS;
+    if (detStore()->record(theToyFactory.getDetectorManager(),theToyFactory.getDetectorManager()->getName()).isSuccess()) return StatusCode::SUCCESS;
+    ATH_MSG_FATAL("Failed to record Toy Detector Manager into Detector Store!");
+  }
+  else {
+    ATH_MSG_FATAL("Attempt to build Toy Detector Geometry one more time. The geometry can be built only once!");
   }
   return StatusCode::FAILURE;
 }
+
+void ToyDetectorTool::printVolume(GeoPVConstLink volume)
+{
+  static int level{0};
+  GeoVolumeCursor cursor(volume);
+  while(!cursor.atEnd()) {
+    GeoPVConstLink physChild = cursor.getVolume();
+    GeoTrf::Transform3D position = cursor.getTransform();
+    for(int k{0};k<level;++k) std::cout << "... ";
+    std::cout << cursor.getName() << " " << (cursor.getId().isValid()?std::to_string(cursor.getId()).c_str():"N/A") 
+	      << " Transform:" << "\n";
+    for(int i{0};i<3;++i) {
+      for(int j{0};j<4;++j) {
+      	std::cout << position(i,j) << " ";
+      }
+      std::cout << "\n";
+    }
+    level++;
+    printVolume(physChild);
+    level--;
+    cursor.next();
+  }
+}
diff --git a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.h b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.h
index 0c8605ec0c3677fd5b4a86dbaa7ae13c9927346a..9be8ef68bfe6408e3d8c90d51d870112b22760fe 100755
--- a/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.h
+++ b/DetectorDescription/GeoModel/GeoModelExamples/src/ToyDetectorTool.h
@@ -6,17 +6,17 @@
 #define GEOMODELEXAMPLES_TOYDETECTORTOOL_H
 
 #include "GeoModelUtilities/GeoModelTool.h"
+#include "GeoModelKernel/GeoPVConstLink.h"
 
-class ToyDetectorTool : public GeoModelTool {
+class ToyDetectorTool : public GeoModelTool 
+{
  public:
-
-  // Standard Constructor
   ToyDetectorTool( const std::string& type, const std::string& name, const IInterface* parent );
-  
-  // Standard Destructor
   virtual ~ToyDetectorTool() override final;
   
   virtual StatusCode create() override final;
+ private:
+  void printVolume(GeoPVConstLink volime);
 };
 
 #endif // GEOMODELEXAMPLES_TOYDETECTORTOOL_H
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/CMakeLists.txt b/DetectorDescription/GeoModel/GeoModelKernel/CMakeLists.txt
deleted file mode 100644
index ab6956fee8fabcba56db60f982c6c666ed66ba69..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-################################################################################
-# Package: GeoModelKernel
-################################################################################
-
-# Declare the package name:
-atlas_subdir( GeoModelKernel )
-
-# External dependencies:
-find_package( CLHEP )
-
-# Component(s) in the package:
-atlas_add_library( GeoModelKernel
-                   src/*.cxx
-                   PUBLIC_HEADERS GeoModelKernel
-                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} )
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellBinning.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellBinning.h
deleted file mode 100755
index 966ffdd6db8cc85bd4bc177a67e2821f4d99629c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellBinning.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_CELLBINNING_H
-#define GEOMODELKERNEL_CELLBINNING_H
-
-/**
- * @class CellBinning
- *
- *  @brief A simple class to specify a range, and a number of bins.
- *  The binning is specified as one would specify bins of a histogram.
- *  In addition to the usual start-of-range, end-of-range, and number
- *  of divisions this class also has an index for the first bin number.
- *  In this package the cell binning is used to set up regions of homogenous
- *  granularity (or just "regions").  
- */ 
-
-class CellBinning 
-{
-
-  public:
-  
-  /**
-   * @brief Constructor
-   */
-  CellBinning (double startVal, double endVal, unsigned int nBins, unsigned int firstDivisionNumber = 0);
-
-
-  /**
-   *     @brief Gets the ith bin lower edge
-   */
-  double binLower (unsigned int i) const;
-  
-  /**
-   *	 @brief gets the ith bin upper edge
-   */
-  double binUpper (unsigned int i) const;
-  
-  /**
-   *	 @brief gets the ith bin center
-   */
-  double binCenter (unsigned int i) const;
-  
-  /**
-   *	 @brief Starting value
-   */
-  double getStart () const;
-  
-  /**
-   *	 @brief Ending Value
-   */
-  double getEnd () const;
-  
-  /**
-   *	 @brief Number of Bins
-   */
-  unsigned int getNumDivisions () const;
-  
-  /**
-   *	 @brief gets the bin width
-   */
-  double getDelta () const;
-  
-  /**
-   *	 @brief Number for the first division.  Optional, default=0.
-   */
-  unsigned int getFirstDivisionNumber () const;
-  
-  
- private: 
-  
-  double m_start;
-  double m_end;
-  unsigned int m_numDivisions;
-  double m_delta;
-  unsigned int m_firstDivisionNumber;
-};
-
-inline double CellBinning::binLower (unsigned int i) const
-{
-  return m_start + (i-m_firstDivisionNumber)*m_delta;
-}
-
-inline double CellBinning::binUpper (unsigned int i) const
-{
-  return m_start + (i-m_firstDivisionNumber+1)*m_delta;
-}
-
-inline double CellBinning::binCenter (unsigned int i) const
-{
-  return m_start + (i-m_firstDivisionNumber+0.5)*m_delta;
-}
-
-inline double CellBinning::getStart () const
-{
-  return m_start;
-}
-
-inline double CellBinning::getEnd () const
-{
-  return m_end;
-}
-
-inline unsigned int CellBinning::getNumDivisions () const
-{
-  return m_numDivisions;
-}
-
-inline double CellBinning::getDelta () const
-{
-  return m_delta;
-}
-
-inline unsigned int CellBinning::getFirstDivisionNumber () const
-{
-  return m_firstDivisionNumber;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellPartitioning.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellPartitioning.h
deleted file mode 100644
index 96ef57366da38c940aebe25ae14e8e86c423ace9..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/CellPartitioning.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_CELLPARTITIONING_H
-#define GEOMODELKERNEL_CELLPARTITIONING_H
-#include <vector>
-
-class CellPartitioning
-{
-  public:
-
-    CellPartitioning(unsigned int firstDivisionNumber = 0);
-
-    CellPartitioning(const CellPartitioning& right);
-
-    virtual ~CellPartitioning();
-
-    CellPartitioning& operator=(const CellPartitioning& right);
-
-    void addValue(double xVal);
-
-    double binLower(unsigned int i) const
-    {
-      return m_partition[i-getFirstDivisionNumber()];
-    }
-
-    double binUpper(unsigned int i) const
-    {
-      return m_partition[i-getFirstDivisionNumber()+1];
-    }
-
-    double binCenter(unsigned int i) const
-    {
-      return 0.5*(binUpper(i)+binLower(i));
-    }
-
-    unsigned int getNumDivisions() const
-    {
-      return m_partition.size()-1;
-    }
-
-    unsigned int getFirstDivisionNumber() const
-    {
-      return m_firstDivisionNumber;
-    }
-
-    double getStart() const
-    {
-      return m_partition[0];
-    }
-
-    double getEnd() const
-    {
-      return m_partition[m_partition.size()-1];
-    }
-
-  private:
-
-    std::vector<double> m_partition;
-
-    unsigned int m_firstDivisionNumber;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/ConstLink.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/ConstLink.h
deleted file mode 100755
index 42c097699de07d60bc5155911bcfdd79b2cbb7f3..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/ConstLink.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_CONSTLINK_H
-#define GEOMODELKERNEL_CONSTLINK_H
-
-/**
- * @class ConstLink
- * 
- * @brief Smart links to reference-counted pointers.  Used in this
- *      package for calorimeter cells
- **	Template Smart Pointer Class.  This reference counted
- *	link allocates on demand. It audits the total pointer
- *	count and collects the garbage when nobody's looking.
- */
-
-template <class T>
-class ConstLink 
-{
-  public:
-  
-
-  /**
-   * @brief Constructor
-   */
-  ConstLink();
-  
-  /**
-   * @brief Copy Constructor
-   */
-  ConstLink(const ConstLink< T > &right);
-  
-  /**
-   * @brief Constructor
-   */
-  ConstLink (const T *target);
-  
-  /**
-   * @brief Destructor 
-   */
-  virtual ~ConstLink();
-  
-  /**
-   * @brief Assignment
-   */
-  ConstLink< T > & operator=(const ConstLink< T > &right);
-  
-  /**
-   * @brief Equality
-   */
-  int operator==(const ConstLink< T > &right) const;
-  
-  /**
-   * @brief Inequality
-   */
-  int operator!=(const ConstLink< T > &right) const;
-  
-  
-  /**
-   * @brief Relational operator
-   */
-  int operator<(const ConstLink< T > &right) const;
-  
-  /**
-   * @brief Relational operator
-   */
-  int operator>(const ConstLink< T > &right) const;
-  
-  /**
-   * @brief Relational operator
-   */
-  int operator<=(const ConstLink< T > &right) const;
-  
-  /**
-   * @brief Relational operator
-   */
-  int operator>=(const ConstLink< T > &right) const;
-  
-  
-  
-  /**
-   *     @brief Dereference:  (*t).method();
-   */
-  virtual const T & operator * () const;
-  
-  /**
-   *     @brief Dereference: t->method()
-   */
-  virtual const T * operator -> () const;
-  
-  /**
-   *      @brief Check pointer validity:  if (t) {...}
-   */
-  operator bool () const;
-  
-
-
-  private: 
-  /**
-   * @brief Raw pointer to reference counted object.
-   */ 
-  mutable T *m_ptr;
-};
-
-
-
-template <class T>
-inline ConstLink<T>::ConstLink()
-  :m_ptr(nullptr)
-{
-}
-
-template <class T>
-inline ConstLink<T>::ConstLink(const ConstLink<T> &right)
-  :m_ptr(right.m_ptr)
-{
-  if (m_ptr) m_ptr->ref();
-}
-
-template <class T>
-inline ConstLink<T>::ConstLink (const T *target)
-  :m_ptr(const_cast<T *> (target))
-{
-  if (target) target->ref();
-}
-
-
-template <class T>
-inline ConstLink<T>::~ConstLink()
-{
-  if (m_ptr) m_ptr->unref();
-}
-
-
-template <class T>
-inline ConstLink<T> & ConstLink<T>::operator=(const ConstLink<T> &right)
-{
-  if (this!=&right) {
-    if (m_ptr) m_ptr->unref();
-    m_ptr = right.m_ptr;
-    if (m_ptr) m_ptr->ref();
-  }
-  return *this;
-}
-
-
-template <class T>
-inline int ConstLink<T>::operator==(const ConstLink<T> &right) const
-{
-  return m_ptr==right.m_ptr;
-}
-
-template <class T>
-inline int ConstLink<T>::operator!=(const ConstLink<T> &right) const
-{
-  return m_ptr!=right.m_ptr;
-}
-
-
-template <class T>
-inline int ConstLink<T>::operator<(const ConstLink<T> &right) const
-{
-  return m_ptr<right.m_ptr;
-}
-
-template <class T>
-inline int ConstLink<T>::operator>(const ConstLink<T> &right) const
-{
-  return m_ptr>right.m_ptr;
-}
-
-template <class T>
-inline int ConstLink<T>::operator<=(const ConstLink<T> &right) const
-{
-  return m_ptr<=right.m_ptr;
-}
-
-template <class T>
-inline int ConstLink<T>::operator>=(const ConstLink<T> &right) const
-{
-  return m_ptr>=right.m_ptr;
-}
-
-
-
-template <class T>
-inline const T & ConstLink<T>::operator * () const
-{
-  return *m_ptr;
-}
-
-template <class T>
-inline const T * ConstLink<T>::operator -> () const
-{
-  return m_ptr;
-}
-
-template <class T>
-inline ConstLink<T>::operator bool () const
-{
-  return m_ptr;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAbsPositionInfo.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAbsPositionInfo.h
deleted file mode 100755
index ed6ecb53f09a8c5ec5c428b9fa234b2ae3e56161..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAbsPositionInfo.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOABSPOSITIONINFO_H
-#define GEOMODELKERNEL_GEOABSPOSITIONINFO_H
-
-/**
- * @class GeoAbsPositionInfo
- * 
- * @brief This class represents anything whose default and aligned
- * postions are known and cached.
- */
-
-#include <CLHEP/Geometry/Transform3D.h>
-
-class GeoAbsPositionInfo 
-{
- public:
-  GeoAbsPositionInfo();
-  ~GeoAbsPositionInfo();
-
-  //	Returns the default absolute transform.
-  const HepGeom::Transform3D * getAbsTransform () const;
-
-  //	Returns the default absolute transform.
-  const HepGeom::Transform3D * getDefAbsTransform () const;
-
-  
-  //	Clears the absolute transform.
-  void clearAbsTransform ();
-
-  //	Clears the default absolute transform.
-  void clearDefAbsTransform ();
-
-  //	Sets the absolute transform.
-  void setAbsTransform (const HepGeom::Transform3D &  xform);
-
-  //	Sets the absolute transform.
-  void setDefAbsTransform (const HepGeom::Transform3D &  xform);
-
- private:
-  GeoAbsPositionInfo(const GeoAbsPositionInfo &right);
-  GeoAbsPositionInfo & operator=(const GeoAbsPositionInfo &right);
-
-  //	The absolute transform from the world coord down to this
-  //	positioned object.
-  HepGeom::Transform3D *m_absTransform;
-  
-  //	The default absolute transform from the world coord down
-  //	to this positioned object.
-  HepGeom::Transform3D *m_defAbsTransform;
-};
-
-inline const HepGeom::Transform3D * GeoAbsPositionInfo::getAbsTransform () const
-{
-  return m_absTransform;
-}
-
-inline const HepGeom::Transform3D * GeoAbsPositionInfo::getDefAbsTransform () const
-{
-  return m_defAbsTransform;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAccessVolAndSTAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAccessVolAndSTAction.h
deleted file mode 100755
index f3dd738150ea30ea38fae148113f069cd1887b73..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAccessVolAndSTAction.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOACCESSVOLANDSTACTION_H
-#define GEOMODELKERNEL_GEOACCESSVOLANDSTACTION_H
-
-/**
- *  @class GeoAccessVolAndSTAction
- *
- *  @brief  Accesses volumes and serial transformers, returning the ith volume 
- *    and also its transformation relative to the parent.
- *
- *  Used only by Geo2G4. Hence should not depend on the Alignment Store
- */
-
-#include "GeoModelKernel/GeoNodeAction.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <vector>
-
-class GeoVPhysVol;
-class GeoTransform;
-
-class GeoAccessVolAndSTAction final : public GeoNodeAction
-{
- public:
-  GeoAccessVolAndSTAction(unsigned int index);
-  virtual ~GeoAccessVolAndSTAction() override;
-
-  virtual void handleTransform(const GeoTransform* xform) override;
-  virtual void handlePhysVol(const GeoPhysVol* vol) override;
-  virtual void handleFullPhysVol(const GeoFullPhysVol* vol) override;
-
-  PVConstLink getVolume() const;
-  const HepGeom::Transform3D & getTransform() const;
-  const HepGeom::Transform3D & getDefTransform() const;
-  const std::string & getName() const;
-
-  virtual void handleNameTag(const GeoNameTag *nameTag) override;
-  virtual void handleSerialDenominator(const GeoSerialDenominator* sD) override;
-
-  virtual void handleSerialTransformer(const GeoSerialTransformer* sT) override;
-  const GeoSerialTransformer* getSerialTransformer() const;
-
-  virtual void handleIdentifierTag(const GeoIdentifierTag* idTag) override;
-
-  Query<unsigned int> getId() const;
-
- private:
-  GeoAccessVolAndSTAction(const GeoAccessVolAndSTAction &right);
-  const GeoAccessVolAndSTAction & operator=(const GeoAccessVolAndSTAction &right);
-
-  /// A pointer to the ith physical volume under this one.
-  PVConstLink m_volume;
-
-  /// A pointer to the Serial Transformer
-  const GeoSerialTransformer* m_serialTransformer;
- 
-  /// The transformation and default transformation to the ith volume.
-  HepGeom::Transform3D m_transform;
-  HepGeom::Transform3D m_defTransform;
-
-  unsigned int m_index;
-  unsigned int m_counter;
-
-  /// The name of the volume.  From a nametag or a serial denominator
-  mutable std::string m_name;
-
-  /// The identifier of the volume.  From an identifier tag.
-  mutable Query<unsigned int> m_id;
-
-  /// A pointer to a name tag.  If the volume is named.
-  const GeoNameTag *m_nameTag;
-  const GeoSerialDenominator *m_serialDenominator;
-  const GeoIdentifierTag *m_idTag;
-
-  std::vector<const GeoTransform *>  m_pendingTransformList;
-  unsigned int m_serialDenomPosition;
-};
-
-#endif
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAlignableTransform.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAlignableTransform.h
deleted file mode 100755
index 97cd3fd142f3c0b146d788631218505688916b76..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoAlignableTransform.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOALIGNABLETRANSFORM_H
-#define GEOMODELKERNEL_GEOALIGNABLETRANSFORM_H
-
-#include "GeoModelKernel/GeoTransform.h"
-#include <vector>
-
-class GeoVAlignmentStore;
-
-class GeoAlignableTransform final : public GeoTransform
-{
- public:
-  GeoAlignableTransform(const HepGeom::Transform3D &transform);
-
-  /// Gets the total transform, including the alignment correction
-  virtual HepGeom::Transform3D getTransform(const GeoVAlignmentStore* store=nullptr) const override;
-
-  /// Sets an alignment delta
-  void setDelta(const HepGeom::Transform3D& delta, GeoVAlignmentStore* store=nullptr);
-
-  /// Clears the alignment delta
-  // To Do: This method will become obsolete once we migrate LAr to the Alignment Store.
-  //        At that point thie method should be dropped
-  void clearDelta(GeoVAlignmentStore* store=nullptr);
-
-  /// When a node is added to a parent in the graph, the node
-  /// is always notified.  What happens at that time is up to
-  /// the node.  Most nodes do not need to do anything.
-  /// Some--the alignable transforms in particular--need to
-  /// take some actions, such as adding the parent volume to a list
-  virtual void dockTo(GeoVPhysVol* parent) override;
-
- protected:
-  virtual ~GeoAlignableTransform() override;
-
- private:
-  GeoAlignableTransform(const GeoAlignableTransform &right);
-  GeoAlignableTransform & operator=(const GeoAlignableTransform &right);
-
-  // Pointer to an alignment correction.  Until some
-  // alignment correction is set, this pointer is nullptr and
-  // the memory is unallocated.
-  HepGeom::Transform3D* m_delta;
-
-  // A list of parents who use this alignable target.  They
-  // must all be notified when the alignment changes!
-  std::vector<GeoGraphNode*>  m_parentList;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoBox.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoBox.h
deleted file mode 100755
index b024be9ad71ee38aade79b6114fda765cc655bfb..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoBox.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOBOX_H
-#define GEOMODELKERNEL_GEOBOX_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoBox : public GeoShape
-{
- public:
-  //	Constructor for the BOX.
-  GeoBox (double XHalfLength, double YHalfLength, double ZHalfLength);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-
-  //	Returns the BOX shape type, as a string.
-  virtual const std::string & type () const;
-
-  //	Returns the BOX shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-
-  //	 Executes a GeoShapeAction.
-  virtual void exec (GeoShapeAction *action) const;
-
-  //	For type identification.
-  static const std::string& getClassType ();
-
-  //	For type identification.,
-  static ShapeType getClassTypeID ();
-
-  //	Half length in the x-direction.
-  const double& getXHalfLength () const;
-
-  //	Half-length in the y direction.
-  const double& getYHalfLength () const;
-
-  //	Half-length in the z direction.
-  const double& getZHalfLength () const;
-
- protected:
-  virtual ~GeoBox();
-
-  private:
-  GeoBox(const GeoBox &right);
-  GeoBox & operator=(const GeoBox &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-  double m_xHalfLength;
-  double m_yHalfLength;
-  double m_zHalfLength;
-};
-
-inline const std::string& GeoBox::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoBox::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoBox::getXHalfLength () const
-{
-  return m_xHalfLength;
-}
-
-inline const double& GeoBox::getYHalfLength () const
-{
-  return m_yHalfLength;
-}
-
-inline const double& GeoBox::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoClearAbsPosAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoClearAbsPosAction.h
deleted file mode 100755
index e079a39b20e7519ecfca7016d184b5311cd39738..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoClearAbsPosAction.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
- * @class GeoClearAbsPosAction
- * 
- * @brief Clears absolute postion information from full physical
- *      volume nodes.  This action is initiated from a change in
- *      the alignment of an alignable transformation...although
- *      it may of course be used by other clients, too.
- */
-
-#ifndef GEOMODELKERNEL_GEOCLEARABSPOSACTION_H
-#define GEOMODELKERNEL_GEOCLEARABSPOSACTION_H
-
-#include "GeoModelKernel/GeoNodeAction.h"
-
-class GeoClearAbsPosAction : public GeoNodeAction
-{
- public:
-  GeoClearAbsPosAction();
-  virtual ~GeoClearAbsPosAction();
-
-  //	Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *vol);
-
- private:
-  GeoClearAbsPosAction(const GeoClearAbsPosAction &right);
-  GeoClearAbsPosAction & operator=(const GeoClearAbsPosAction &right);
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCons.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCons.h
deleted file mode 100755
index 052e59d381bf07a077d7b70dc0580a4aeed28510..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCons.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOCONS_H
-#define GEOMODELKERNEL_GEOCONS_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoCons : public GeoShape
-{
- public:
-  GeoCons (double RMin1, double RMin2, double RMax1, double RMax2, double DZ, double SPhi, double DPhi);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-
-  //	Returns the CONS shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the CONS shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Inside radius at -dZ
-  const double& getRMin1 () const;
-  
-  //	Inside radius at +dZ
-  const double& getRMin2 () const;
-  
-  //	Outside radius at -dZ
-  const double& getRMax1 () const;
-  
-  //	Outside radius at +dZ
-  const double& getRMax2 () const;
-  
-  //	Half length in Z direction.
-  const double& getDZ () const;
-  
-  //	Starting angle of the segment in radians
-  const double& getSPhi () const;
-  
-  //	Delta angle of the segment in radians.
-  const double& getDPhi () const;
-  
- protected:
-  virtual ~GeoCons();
-  
- private:
-  GeoCons(const GeoCons &right);
-  GeoCons & operator=(const GeoCons &right);
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_rMin1;
-  double m_rMin2;
-  double m_rMax1;
-  double m_rMax2;
-  double m_dZ;
-  double m_sPhi;
-  double m_dPhi;
-};
-
-inline const std::string& GeoCons::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoCons::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoCons::getRMin1 () const
-{
-  return m_rMin1;
-}
-
-inline const double& GeoCons::getRMin2 () const
-{
-  return m_rMin2;
-}
-
-inline const double& GeoCons::getRMax1 () const
-{
-  return m_rMax1;
-}
-
-inline const double& GeoCons::getRMax2 () const
-{
-  return m_rMax2;
-}
-
-inline const double& GeoCons::getDZ () const
-{
-  return m_dZ;
-}
-
-inline const double& GeoCons::getSPhi () const
-{
-  return m_sPhi;
-}
-
-inline const double& GeoCons::getDPhi () const
-{
-  return m_dPhi;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAction.h
deleted file mode 100755
index 916670735230ace9fbbd258d251b9d2b10e8301e..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAction.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOCOUNTVOLACTION_H
-#define GEOMODELKERNEL_GEOCOUNTVOLACTION_H
-
-#include "GeoModelKernel/GeoNodeAction.h"
-
-class GeoCountVolAction : public GeoNodeAction
-{
- public:
-  GeoCountVolAction ();
-  virtual ~GeoCountVolAction();
-
-  //	Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *);
-  
-  //	Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *);
-  
-  //	Handles a Serial Transformer
-  virtual void handleSerialTransformer (const GeoSerialTransformer  *st);
-
-  //	The volume count.
-  unsigned int getCount () const;
-
- private:
-  GeoCountVolAction(const GeoCountVolAction &right);
-  GeoCountVolAction & operator=(const GeoCountVolAction &right);
-
-  unsigned int m_count;
-};
-
-inline unsigned int GeoCountVolAction::getCount () const
-{
-  return m_count;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAndSTAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAndSTAction.h
deleted file mode 100755
index 7d49c5f1bc191048c85172bc6d5a8ce1c20d8243..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCountVolAndSTAction.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOCOUNTVOLANDSTACTION_H
-#define GEOMODELKERNEL_GEOCOUNTVOLANDSTACTION_H
-
-/**
- * @class: GeoCountVolAndSTAction
- * 
- * @brief An action to count the number of physical volumes
- * and Serial Transformers
- */
-
-#include "GeoModelKernel/GeoNodeAction.h"
-
-class GeoCountVolAndSTAction : public GeoNodeAction
-{
- public:
-  GeoCountVolAndSTAction();
-  virtual ~GeoCountVolAndSTAction();
-
-  virtual void handlePhysVol(const GeoPhysVol*);
-  virtual void handleFullPhysVol(const GeoFullPhysVol*);
-  virtual void handleSerialTransformer(const GeoSerialTransformer*);
-
-  unsigned int getCount() const;
-
- private:
-  GeoCountVolAndSTAction(const GeoCountVolAndSTAction &right);
-  const GeoCountVolAndSTAction & operator=(const GeoCountVolAndSTAction &right);
-
-  unsigned int m_count;
-};
-
-inline unsigned int GeoCountVolAndSTAction::getCount() const
-{
-  return m_count;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCutVolAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCutVolAction.h
deleted file mode 100755
index 4890003655c3c64d6bb2ce5550660bd3388773df..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoCutVolAction.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOCUTVOLACTION_H
-#define GEOMODELKERNEL_GEOCUTVOLACTION_H
-
-/**
- * @class GeoCutVolAction
- *
- * @brief Geo Volume action providing a mechanism for Cutoff implementation  
- *
- * The cutoff is applied to the mother Physical Volume and then it is
- * propagated down to all of child volumes.
- *
- * GeoCutVolAction object navigates the input Physical Volume (PV) tree.
- * For each original PV in the tree it creates and a new PV with
- * the same characteristics - material, LV name, PV name, ID, transform
- * in parents coordinate frame - except for shape. The new PV hierarchy
- * is kept by the GeoCutVolAction internally and can be obtained after
- * the action is done by calling getPV() method.
- *
- * When the cut action is finished users have to use the new PV tree
- * obtained with getPV(). The original PV can be dereferenced and
- * the action object destroyed.
- *
- * In order to implement a cutoff, one needs to provide two input
- * arguments to the constructor of GeoCutVolAction
- *   1. A shape to be cut off the mother volume and all its children
- *   2. A transformation of the cutoff shape with respect to the 
- *      coordinate frame of the mother shape
- *
- * Here is an example of GeoCutVolAction usage:
- *
- * |--------------------------------------------------------------------------|
- * | ... First construct a physical volume *origPhysVol* and add all daughter |
- * |     volumes to it                                                        |
- * |                                                                          |
- * |   GeoCutVolAction action(shape,transform);                               |
- * |   pPhysVol->apply(&action);                                              |
- * |   GeoPhysVol* cutPhysVol = action.getPV();                               |
- * |   pPhysVol->unref();                                                     |
- * |                                                                          |
- * | ... Use *cutPhysVol* afterwards (atach to the upper level volumes)       |
- * |--------------------------------------------------------------------------|
- */
-
-#include "GeoModelKernel/GeoVolumeAction.h"
-#include "GeoModelKernel/GeoShape.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <stack>
-
-class GeoPhysVol;
-
-class GeoCutVolAction : public GeoVolumeAction 
-{
- public:
-  // Constructor parameters:
-  // Shape: the shape to be cut
-  // Transformation: Shape transformation with respect to the mother Physical Volume
-  GeoCutVolAction(const GeoShape& Shape,
-		  const HepGeom::Transform3D& Transform);
-
-  ~GeoCutVolAction();
-
-  virtual void handleVPhysVol (const GeoVPhysVol *);
-  
-  // Get the cutoff result
-  GeoPhysVol* getPV();
-
- private: 
-  GeoPhysVol*               m_physVol;
-
-  const GeoShape&           m_shape;
-  HepGeom::Transform3D      m_transform;
-
-  std::stack<GeoPhysVol*>*  m_copyStack;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoElement.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoElement.h
deleted file mode 100755
index b3abcb9f2b17ab367cd68c1e6cbcc2688164aaa8..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoElement.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOELEMENT_H
-#define GEOMODELKERNEL_GEOELEMENT_H
-
-/**
- * @class GeoElement
- *
- * @brief This class represents chemical elements.  Elements are
- * allocated on the heap and deleted automatically when their reference count 
- * falls to zero.
- */
-
-#include "GeoModelKernel/RCBase.h"
-#include "CLHEP/Units/PhysicalConstants.h"
-#include <string>
-
-class GeoElement : public RCBase
-{
- public:
-  GeoElement (const std::string &Name, const std::string &Symbol, double Z, double A);
-  
-  int operator==(const GeoElement &right) const;
-  int operator!=(const GeoElement &right) const;
-  
-  //	Returns the effective number of nucleons in the element.
-  double getN () const;
-
-  //	The name of the element, e.g. "Carbon".
-  const std::string& getName () const;
-
-  //	The chemical symbol for the element, e.g. C, O, S, Na....
-  const std::string& getSymbol () const;
-
-  //	The atomic number Z for the material.
-  const double& getZ () const;
-
-  //	The average atomic mass for the element.
-  const double& getA () const;
-  
-  //        Tsai formula for the radiation length
-  double getRadTsai () const;
-  
- protected:
-  virtual ~GeoElement();
-  
- private:
-  GeoElement(const GeoElement &right);
-  GeoElement & operator=(const GeoElement &right);
-  
-  std::string m_name;
-  std::string m_symbol;
-
-  double m_z;
-  double m_a;  
-};
-
-inline int GeoElement::operator==(const GeoElement &right) const
-{
-  return
-    m_name ==
-    right.m_name && m_symbol == right.m_symbol && m_z == right.m_z && m_a == right.m_a;
-}
-
-inline int GeoElement::operator!=(const GeoElement &right) const
-{
-  return m_name != right.m_name ||
-    m_symbol != right.m_symbol || m_z != right.m_z || m_a != right.m_a;
-}
-
-inline double GeoElement::getN () const
-{
-  return m_a * (CLHEP::mole / CLHEP::gram);
-}
-
-inline const std::string& GeoElement::getName () const
-{
-  return m_name;
-}
-
-inline const std::string& GeoElement::getSymbol () const
-{
-  return m_symbol;
-}
-
-inline const double& GeoElement::getZ () const
-{
-  return m_z;
-}
-
-inline const double& GeoElement::getA () const
-{
-  return m_a;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoEllipticalTube.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoEllipticalTube.h
deleted file mode 100755
index a374b8e6db7372c8d8c063810c27cbdc97b8acaa..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoEllipticalTube.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOELLIPTICALTUBE_H
-#define GEOMODELKERNEL_GEOELLIPTICALTUBE_H
-
-/**
- * @class: GeoEllipticalTube
- *  
- * @brief This is a tube with elliptical cross section
- * The equation of the surface in x/y is 1.0 = (x/dx)**2 + (y/dy)**2
- */
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoEllipticalTube : public GeoShape
-{
- public:
-  GeoEllipticalTube(double XHalfLength, double YHalfLength, double ZHalfLength); 
-
-  virtual double volume () const;
-
-  virtual const std::string & type () const;
-  virtual ShapeType typeID () const;
-
-  virtual void exec (GeoShapeAction *action) const;
-
-  static const std::string& getClassType ();
-  static ShapeType getClassTypeID ();
-
-  const double& getXHalfLength() const;
-  const double& getYHalfLength() const;
-  const double& getZHalfLength() const;
-
- protected:
-  virtual ~GeoEllipticalTube();
-
- private:
-  
-  GeoEllipticalTube(const GeoEllipticalTube &right);
-  GeoEllipticalTube & operator=(const GeoEllipticalTube &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_xHalfLength;
-  double m_yHalfLength;
-  double m_zHalfLength;
-};
-
-
-inline const std::string& GeoEllipticalTube::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoEllipticalTube::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoEllipticalTube::getXHalfLength() const
-{
-  return m_xHalfLength;
-}
-
-inline const double& GeoEllipticalTube::getYHalfLength() const
-{
-  return m_yHalfLength;
-}
-
-inline const double& GeoEllipticalTube::getZHalfLength() const
-{
-  return m_zHalfLength;
-}
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFacet.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFacet.h
deleted file mode 100755
index a2310520ba5dec24e6d8f8dae89ffdca43d7b2d8..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFacet.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOFACET_H
-#define GEOMODELKERNEL_GEOFACET_H
-
-/**
- * @class: GeoFacet
- *
- * @brief Base class for GeoModel Facets
- * Two implementations exist:
- *   1. GeoTriangularFacet     
- *   2. GeoQuadrangularFacet
- */
-
-#include "GeoModelKernel/RCBase.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include <vector>
-
-typedef CLHEP::Hep3Vector GeoFacetVertex;
-
-// ** Base class
-class GeoFacet : public RCBase
-{
- public:
-  enum GeoFacetVertexType
-  {
-    ABSOLUTE,
-    RELATIVE
-  };
-
-  inline size_t getNumberOfVertices() const;
-  inline GeoFacetVertex getVertex(size_t) const;
-  inline GeoFacetVertexType getVertexType() const;
-
- protected:
-  GeoFacet()
-    : m_nVertices(0),
-      m_vertexType(ABSOLUTE) {};
-  virtual ~GeoFacet(){};
-
-  size_t m_nVertices;
-  std::vector<GeoFacetVertex> m_vertices;
-  GeoFacetVertexType m_vertexType;
-};
-
-// Triangular facet
-class GeoTriangularFacet : public GeoFacet
-{
- public:
-  GeoTriangularFacet(GeoFacetVertex
-		     ,GeoFacetVertex
-		     ,GeoFacetVertex
-		     ,GeoFacetVertexType);
-
-  virtual ~GeoTriangularFacet();
-};
-
-// Quadrangular facet
-class GeoQuadrangularFacet : public GeoFacet
-{
- public:
-  GeoQuadrangularFacet(GeoFacetVertex
-		       ,GeoFacetVertex
-		       ,GeoFacetVertex
-		       ,GeoFacetVertex
-		       ,GeoFacetVertexType);
-
-  virtual ~GeoQuadrangularFacet();
-};
-
-// Inline methods
-inline size_t GeoFacet::getNumberOfVertices() const
-{
-  return m_nVertices;
-}
-
-inline GeoFacetVertex GeoFacet::getVertex(size_t index) const
-{
-  return (index<m_nVertices ? m_vertices[index] : GeoFacetVertex(999999.,999999.,999999.));
-}
-
-inline GeoFacet::GeoFacetVertexType GeoFacet::getVertexType() const
-{
-  return m_vertexType;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFullPhysVol.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFullPhysVol.h
deleted file mode 100755
index 203fe8d83d809193f892486dc74dcceaeffd4ce1..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoFullPhysVol.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOFULLPHYSVOL_H
-#define GEOMODELKERNEL_GEOFULLPHYSVOL_H
-
-#include "GeoModelKernel/GeoVFullPhysVol.h"
-#include <vector>
-#include <string>
-
-class GeoLogVol;
-class GeoVAlignmentStore;
-
-/**
- * @class GeoFullPhysVol
- *
- * @brief This class represent a physical volume whose absolute
- * default and aligned positions are known and held in cache.
- *
- * These pieces should not be part of a subtree which is used as a
- * shared instance. For if it is, then of course the absolute position 
- * of the piece is an absurdity. The run time error will result as 
- * soon as the absolute position is requested.
- *
- * These elements may be declared to readout geometry. See the class 
- * ReadoutElement.
- */
-
-class GeoFullPhysVol final : public GeoVFullPhysVol
-{
- public:
-  GeoFullPhysVol (const GeoLogVol* LogVol);
-
-  /// Adds a Graph Node to the Geometry Graph.
-  void add(GeoGraphNode* graphNode);
-
-  /// Returns the number of child physical volumes.
-  virtual unsigned int getNChildVols() const override;
-
-  /// Returns the ith child volume
-  virtual PVConstLink  getChildVol(unsigned int index) const override;
-
-  /// Returns the transform to the ith volume.
-  virtual HepGeom::Transform3D getXToChildVol(unsigned int index, const GeoVAlignmentStore* store=nullptr) const override;
-  
-  /// Returns the default transform to the ith volume.
-  virtual HepGeom::Transform3D getDefXToChildVol(unsigned int index, const GeoVAlignmentStore* store=nullptr) const override;
-
-  /// Executes a GeoNodeAction.
-  virtual void exec(GeoNodeAction *action) const override;
-
-  /// Returns the name of the child.
-  virtual std::string getNameOfChildVol(unsigned int i) const override;
-
-  /// Returns the id of the child.
-  virtual Query<int> getIdOfChildVol(unsigned int i) const override;
-
-  /// Returns the number of child physical volumes and Serial Transformers.
-  virtual unsigned int getNChildVolAndST() const override;
-
-  GeoFullPhysVol* clone(bool attached = true);
-  const GeoFullPhysVol* cloneOrigin() const;
-  /// The following method breaks consistency of cloned volumes!
-  /// Use it only in Simulation jobs and
-  /// don't call it until geometry has been completely translated to G4
-  void clear(); // drop subtree
-  virtual HepGeom::Transform3D getX    (const GeoVAlignmentStore* store=nullptr) const override;
-  virtual HepGeom::Transform3D getDefX (const GeoVAlignmentStore* store=nullptr) const override;
-  virtual unsigned int getNChildNodes() const override;
-  virtual const GeoGraphNode * const *getChildNode (unsigned int i) const override;
-  virtual const GeoGraphNode * const *findChildNode(const GeoGraphNode *n) const override;
-
-  protected:
-  virtual ~GeoFullPhysVol() override;
-
-  private:
-  GeoFullPhysVol(const GeoFullPhysVol &right);
-  GeoFullPhysVol & operator=(const GeoFullPhysVol &right);
-
-  /// Hold the list of children.
-  std::vector<const GeoGraphNode *> m_daughters;
-  
-  const GeoFullPhysVol* m_cloneOrigin;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGenericTrap.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGenericTrap.h
deleted file mode 100755
index dd2211758d17ecc9bf971c9cc81153c0b26da78c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGenericTrap.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOGENERICTRAP_H
-#define GEOMODELKERNEL_GEOGENERICTRAP_H
-
-#include "GeoModelKernel/GeoShape.h"
-#include <CLHEP/Vector/TwoVector.h>
-#include <vector>
-
-typedef CLHEP::Hep2Vector GeoTwoVector;
-typedef std::vector<GeoTwoVector> GeoGenericTrapVertices;
-
-class GeoGenericTrap : public GeoShape
-{
- public:
-  GeoGenericTrap(double ZHalfLength, const GeoGenericTrapVertices& Vertices);
-
-  virtual double volume() const;
-
-  virtual const std::string& type() const;
-  virtual ShapeType typeID() const;
-
-  static const std::string& getClassType();
-  static ShapeType getClassTypeID();
-
-  virtual void exec(GeoShapeAction *action) const;
-
-  double getZHalfLength() const;
-  const GeoGenericTrapVertices& getVertices() const;
-
- protected:
-  virtual ~GeoGenericTrap();
-
- private:
-  GeoGenericTrap(const GeoGenericTrap &right);
-  GeoGenericTrap& operator=(const GeoGenericTrap &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_zHalfLength;
-  GeoGenericTrapVertices m_vertices;
-};
-
-inline const std::string& GeoGenericTrap::getClassType()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoGenericTrap::getClassTypeID()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGraphNode.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGraphNode.h
deleted file mode 100755
index 2f72979fdad096e36ce0be8c5fd9d88c17301172..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoGraphNode.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOGRAPHNODE_H
-#define GEOMODELKERNEL_GEOGRAPHNODE_H
-
-/**
- * @class GeoGraphNode
- *
- * @brief Represents Nodes that can be assembled together to make
- *      a graph.  Subclasses (for now):
- *
- *      * GeoVTransform
- *           *GeoFixedTransform.     .. for fixed transforms
- *           *GeoVariableTransform  .. for variable transforms.
- *
- *      * GeoVPhysVol
- *           *GeoPhysVol       .. for normal recursive access.
- *           *GeoRAPhysVol  .. for random access
- */
-
-#include "GeoModelKernel/RCBase.h"
-
-class GeoNodeAction;
-class GeoVPhysVol;
-
-class GeoGraphNode : public RCBase
-{
- public:
-  GeoGraphNode ();
-  
-  //	Executes a GeoNodeAction.
-  virtual void exec (GeoNodeAction *action) const;
-  
-  //	When a node is added to a parent in the graph, the node
-  //	is always notified.  What happens at that time is up to
-  //	the node.  Most nodes do not need to do anything.
-  //	Some--the alignable transforms in particular--need to
-  //	take some actions, such as adding the parent volume to a
-  //	list.
-  virtual void dockTo (GeoVPhysVol* );
-  
- protected:
-  virtual ~GeoGraphNode();
-  
- private:
-  GeoGraphNode(const GeoGraphNode &right);
-  GeoGraphNode & operator=(const GeoGraphNode &right);
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoIdentifierTag.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoIdentifierTag.h
deleted file mode 100755
index f7b37647e537581acb829e35e4223344c864fdbe..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoIdentifierTag.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOIDENTIFIERTAG_H
-#define GEOMODELKERNEL_GEOIDENTIFIERTAG_H
-
-/**
- * @class GeoIdentifierTag
- * 
- * @brief This class gives an integral identifer to the following physical volume.
- *
- * Courtesy of Philipp Shieferdecker (LMU Munich).
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-
-class GeoIdentifierTag : public GeoGraphNode
-{
- public:
-  //	Constructor for the identifier tag. Takes an unsigned int
-  GeoIdentifierTag (int id);
-
-  //	Executes a GeoNodeAction.
-  virtual void exec (GeoNodeAction *action) const;
-  
-  //	Specifies the identifier of the next physical volume in
-  //	the node tree.
-  int getIdentifier () const;
-  
- protected:
-  virtual ~GeoIdentifierTag();
-
- private:
-  GeoIdentifierTag(const GeoIdentifierTag &right);
-  GeoIdentifierTag & operator=(const GeoIdentifierTag &right);
-  
-  int m_identifier;  
-};
-
-inline int GeoIdentifierTag::getIdentifier () const
-{
-  return m_identifier;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoLogVol.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoLogVol.h
deleted file mode 100755
index 3c38abd2055d31c5ba040880cfe5e19f345450fb..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoLogVol.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOLOGVOL_H
-#define GEOMODELKERNEL_GEOLOGVOL_H
-
-/**
- * @class GeoLogVol
- * 
- * @brief A Logical Volume, or agglomeration of shape and material.
- * The logical volume increases the reference count of the shape and the material.
- */
-
-#include "GeoModelKernel/GeoShape.h"
-#include "GeoModelKernel/RCBase.h"
-#include "GeoModelKernel/GeoMaterial.h"
-#include <vector>
-
-class GeoLogVol : public RCBase
-{
- public:
-  GeoLogVol (const std::string &Name, const GeoShape *Shape, const GeoMaterial *Material);
-
-  //	Returns the name of the logical volume.
-  const std::string & getName () const;
-  
-  //	Returns the shape of the logical volume.
-  const GeoShape * getShape () const;
-  
-  //	Returns the material of the logical volume.
-  const GeoMaterial * getMaterial () const;
-  
- protected:
-  virtual ~GeoLogVol();
-  
- private:
-  GeoLogVol(const GeoLogVol &right);
-  GeoLogVol & operator=(const GeoLogVol &right);
-  
-  //	The name of the logical volume.
-  std::string m_name;
-
-  //	Material composition of this volume.
-  const GeoMaterial *m_material;
-
-  //	Shape of this volume.
-  const GeoShape *m_shape;
-};
-
-inline const std::string & GeoLogVol::getName () const
-{
-  return m_name;
-}
-
-inline const GeoShape * GeoLogVol::getShape () const
-{
-  return m_shape;
-}
-
-inline const GeoMaterial * GeoLogVol::getMaterial () const
-{
-  return m_material;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoMaterial.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoMaterial.h
deleted file mode 100755
index f4dbd736a11882f985a841806e1d1bf22de611c6..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoMaterial.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOMATERIAL_H
-#define GEOMODELKERNEL_GEOMATERIAL_H
-
-/**
- * @class GeoMaterial
- * 
- * @brief This class represents materials.  A material is a
- *      collection of elements.  In addition it has a density,
- *      radiation length, and interaction length, and can
- *      provide a description of energy lost which is computed
- *      from its composition.
- *
- *      Also noteworthy:
- *
- *      * Materials are allocated on the heap and deleted
- *      automatically when their reference count falls to zero.
- *
- *      * After the constructor is called the elements are added
- *      one-by-one; when the last one is called the material
- *      must be "locked" after the last element is added.
- *
- *      * The materials are assigned an identifier.
- */
-
-#include "GeoModelKernel/RCBase.h"
-#include "GeoModelKernel/GeoElement.h"
-#include <vector>
-
-class GeoMaterial : public RCBase
-{
- public:
-  GeoMaterial (const std::string &Name, double Density);
-  
-  //	Add an element to the material.
-  void add (const GeoElement* element, double fraction = 1.0);
-  
-  //	Add another material to the material (this copies all of
-  //	the element from the other material into this one).
-  //	Fraction is by mass.
-  void add (const GeoMaterial* material, double fraction);
-  
-  //	Lock the material against the addition of other
-  //	materials or elements.
-  void lock ();
-  
-  //	Constant dEdx term.
-  double getDeDxConstant () const;
-  
-  //	I0 term (ionization potential).  From tables. Units:  eV.
-  double getDeDxI0 () const;
-  
-  //	Get dEdx_min.  dEdxConstant*11.528 Paul Avery, CBX-92-39.
-  double getDeDxMin () const;
-  
-  //	Returns the radiation length, computed from the density
-  //	and the list of constituents, and their properties.
-  double getRadLength () const;
-  
-  //	Return the nuclear interaction length, computed from the
-  //	density, the list of constituents, and their properties.
-  double getIntLength () const;
-  
-  unsigned int getNumElements () const;
-  
-  //	Gets the ith element.
-  const GeoElement* getElement (unsigned int i) const;
-  
-  //	Gets the fraction by weight of the ith element
-  double getFraction (int i) const;
-  
-  //	The name of the material.
-  const std::string& getName () const;
-  
-  //	The density of the material.
-  const double& getDensity () const;
-  
-  //	Gives an integral identifier for the material.  For
-  //	convenience.
-  const unsigned int& getID () const;
-  
- protected:
-  virtual ~GeoMaterial();
-  
- private:
-  GeoMaterial(const GeoMaterial &right);
-  GeoMaterial & operator=(const GeoMaterial &right);
-  
-  std::string m_name;
-  double m_density;
-  unsigned int m_iD;
-
-  //	A list of the fractional composition of each material.
-  //	Fraction is by mass.
-  std::vector<double> m_fraction;
-
-  //	The radiation length of the material.
-  double m_radLength;
-  
-  //	The interaction length of the material.
-  double m_intLength;
-
-  //	A static used to assign unique identifiers to new
-  //	materials.
-  static unsigned int s_lastID;
-
-  //	The constant term in the formula governing dE/dx.
-  double m_dedDxConst;
-
-  //	The ionization potential in the formula governing dE/dx.
-  double m_deDxI0;
-
-  //	A flag used to lock the material from further addition
-  //	of elements or other constituents.
-  bool m_locked;
-
-  static const double s_ionizationPotential[93];
-
- private:
-  //	The list of GeoElements composing a GeoMaterial.
-  std::vector<const GeoElement *> m_element;  
-};
-
-inline const std::string& GeoMaterial::getName () const
-{
-  return m_name;
-}
-
-inline const double& GeoMaterial::getDensity () const
-{
-  return m_density;
-}
-
-inline const unsigned int& GeoMaterial::getID () const
-{
-  return m_iD;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNameTag.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNameTag.h
deleted file mode 100755
index 3d378130100dc5caf6b4f65cd3c33b69bbc24d32..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNameTag.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEONAMETAG_H
-#define GEOMODELKERNEL_GEONAMETAG_H
-
-/**
- * @class GeoNameTag
- *
- * @brief This class gives a name to the next physical volume.
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include <string>
-
-class GeoNameTag : public GeoGraphNode
-{
- public:
-  //	Constructor for the name tag.  Takes a base name.
-  GeoNameTag (const std::string &BaseName);
-  
-  //	Executes a GeoNodeAction.
-  virtual void exec (GeoNodeAction *action) const;
-
-  //	Specifies the name of the next physical volume in the
-  //	node tree.
-  const std::string& getName () const;
-  
- protected:
-  virtual ~GeoNameTag();
-  
- private:
-  GeoNameTag(const GeoNameTag &right);
-  GeoNameTag & operator=(const GeoNameTag &right);
-  
-  std::string m_name;
-};
-
-inline const std::string& GeoNameTag::getName () const
-{
-  return m_name;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodeAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodeAction.h
deleted file mode 100755
index db0eaea61a77fdf3e6509900581ffc1ee59b1e27..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodeAction.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEONODEACTION_H
-#define GEOMODELKERNEL_GEONODEACTION_H
-
-/**
- * @class GeoNodeAction
- *
- * @brief This type of action sees the geometry graph in full
- *      detail, including each transformation and property
- *      node.  The function of this graph is to represent a
- *      simpler tree of positioned volumes.  To visit only those
- *      volumes while keeping track of the state (including
- *      relative positioning), use the VolumeAction.
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include "GeoModelKernel/GeoPhysVol.h"
-#include "GeoModelKernel/GeoFullPhysVol.h"
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoIdentifierTag.h"
-#include "GeoModelKernel/GeoSerialDenominator.h"
-#include "GeoModelKernel/GeoSerialIdentifier.h"
-#include "GeoModelKernel/GeoSerialTransformer.h"
-#include "GeoModelKernel/GeoNodePath.h"
-
-class GeoNodeAction 
-{
- public:
-
-  enum Depth
-  { ALL_ANCESTORS = -1, SELF = 0, SELF_AND_CHILDREN = 1 };
-
- public:
-  GeoNodeAction();
-  virtual ~GeoNodeAction();
-  
-  //	Handles a Node.
-  virtual void handleNode (const GeoGraphNode *);
-  
-  //	Handles a Transform.
-  virtual void handleTransform (const GeoTransform *);
-  
-  //	Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *);
-  
-  //	Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *);
-  
-  //	Returns a pointer to the path object.
-  GeoNodePath* getPath ();
-  
-  Query<unsigned int>  getDepthLimit ();
-  
-  //	Cause the action to terminate.
-  void terminate ();
-  
-  //	Determine whether the action should terminate.
-  bool shouldTerminate () const;
-  
-  //	Handles a Name Tag.
-  virtual void handleNameTag (const GeoNameTag *);
-  
-  //	Handles a Serial Denominator.
-  virtual void handleSerialDenominator (const GeoSerialDenominator *);
-  
-  //	Sets a depth limit.
-  void setDepthLimit (unsigned int limit);
-  
-  //	Clears a depth limit, if any.
-  void clearDepthLimit ();
-  
-  //	Handles a Serial Transformer
-  virtual void handleSerialTransformer (const GeoSerialTransformer  *);
-  
-  //	Handles an Identifier Tag.
-  virtual void handleIdentifierTag (const GeoIdentifierTag *);
-  
-  virtual void handleSerialIdentifier(const GeoSerialIdentifier *);
-
- protected:
-  //	Termination flag; causes an abortion of action execution.
-  bool m_terminate;
-
- private:
-  GeoNodeAction(const GeoNodeAction &right);
-  GeoNodeAction & operator=(const GeoNodeAction &right);
-  
-  //	A limit may be placed upon the depth to which the action
-  //	descends.  0 = self.  1 = self and children.
-  Query<unsigned int> m_depth;
-
-  GeoNodePath m_path;  
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodePath.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodePath.h
deleted file mode 100755
index b2cd5f73ed3b5ad2b7b7254a506668efa90c1d78..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoNodePath.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEONODEPATH_H
-#define GEOMODELKERNEL_GEONODEPATH_H
-
-#include "GeoModelKernel/Path.h"
-#include "GeoModelKernel/GeoVPhysVol.h"
-
-typedef Path< GeoVPhysVol  > GeoNodePath;
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVConstLink.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVConstLink.h
deleted file mode 100755
index efb2c0424786bcb8c872c65b1b15a78a336b7695..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVConstLink.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPVCONSTLINK_H
-#define GEOMODELKERNEL_GEOPVCONSTLINK_H
-
-/**
- * @class GeoPVConstLink
- *
- * @brief Smart pointer to physical volume... constant
- */
-
-class GeoVPhysVol;
-
-class GeoPVConstLink 
-{
- public:
-  GeoPVConstLink();
-  GeoPVConstLink(const GeoPVConstLink &right);
-  GeoPVConstLink (const GeoVPhysVol  *addr);
-
-  virtual ~GeoPVConstLink();
-
-  int operator==(const GeoPVConstLink &right) const;
-  int operator!=(const GeoPVConstLink &right) const;
-
-  int operator<(const GeoPVConstLink &right) const;
-  int operator>(const GeoPVConstLink &right) const;
-  int operator<=(const GeoPVConstLink &right) const;
-  int operator>=(const GeoPVConstLink &right) const;
-
-  //	Dereference this smart pointer, like a regular pointer.
-  virtual const GeoVPhysVol & operator * () const;
-
-  //	Allow use of smartPointer->operation().....
-  virtual const GeoVPhysVol * operator -> () const;
-
-  operator bool () const;
-
-  GeoPVConstLink& operator = (const GeoPVConstLink& right);
-
- protected:
-  //	A pointer to the underlying volume
-  GeoVPhysVol *  m_ptr;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVLink.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVLink.h
deleted file mode 100755
index af94674fe9187a6db5948512ad8f9cc1d2b1e6fe..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPVLink.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPVLINK_H
-#define GEOMODELKERNEL_GEOPVLINK_H
-
-/**
- * @class GeoPVConstLink
- *
- * @brief Smart pointer to physical volume... non-constant
- */
-
-#include "GeoModelKernel/GeoPVConstLink.h"
-
-class GeoPVLink : public GeoPVConstLink
-{
- public:
-  GeoPVLink();
-  GeoPVLink(const GeoPVLink &right);
-  GeoPVLink (const GeoVPhysVol  *addr);
-
-  virtual ~GeoPVLink();
-
-  //	Dereference this smart pointer, like a regular pointer.
-  virtual GeoVPhysVol & operator * ();
-  
-  //	Allow use of smartPointer->operation().....
-  virtual GeoVPhysVol * operator -> ();
-  
-  //	Dereference this smart pointer, like a regular pointer.
-  virtual const GeoVPhysVol & operator * () const;
-  
-  //	Allow use of smartPointer->operation().....
-  virtual const GeoVPhysVol * operator -> () const;
-  
-  //	Assignment operator.
-  GeoPVLink& operator = (const GeoPVLink& right);    
-};
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPara.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPara.h
deleted file mode 100755
index 7072aee43ce53ba6fd65af0aac16541152363b96..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPara.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPARA_H
-#define GEOMODELKERNEL_GEOPARA_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoPara : public GeoShape
-{
- public:
-  //	Constructor for the BOX.
-  GeoPara (double XHalfLength, double YHalfLength, double ZHalfLength, double Alpha, double Theta, double Phi);
-  
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the PARA shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the PARA shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Half length in the x-direction.
-  const double& getXHalfLength () const;
-  
-  //	Half-length in the y direction.
-  const double& getYHalfLength () const;
-  
-  //	Half-length in the z direction.
-  const double& getZHalfLength () const;
-  
-  //	Polar (theta) angle.
-  const double& getTheta () const;
-  
-  //	The angle alpha...between the two sides of the top face
-  //	of the parallelapiped.
-  const double& getAlpha () const;
-  
-  //	Azimuthal (phi) angle.
-  const double& getPhi () const;
-  
- protected:
-  virtual ~GeoPara();
-  
- private:
-  GeoPara(const GeoPara &right);
-  GeoPara & operator=(const GeoPara &right);
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_xHalfLength;
-  double m_yHalfLength;
-  double m_zHalfLength;
-  double m_theta;
-  double m_alpha;
-  double m_phi;
-};
-
-inline const std::string& GeoPara::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoPara::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoPara::getXHalfLength () const
-{
-  return m_xHalfLength;
-}
-
-inline const double& GeoPara::getYHalfLength () const
-{
-  return m_yHalfLength;
-}
-
-inline const double& GeoPara::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-inline const double& GeoPara::getTheta () const
-{
-  return m_theta;
-}
-
-inline const double& GeoPara::getAlpha () const
-{
-  return m_alpha;
-}
-
-inline const double& GeoPara::getPhi () const
-{
-  return m_phi;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPcon.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPcon.h
deleted file mode 100755
index c08797c8d8fefca975fd148c8d2089663adbe21a..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPcon.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPCON_H
-#define GEOMODELKERNEL_GEOPCON_H
-
-/**
- * @class GeoPcon
- *
- * @brief This shape represents a polycone.
- * Specify the starting angle and delta angle (subtended angle)
- * of the polycone first, Then add at least two planes with the
- * addPlane( double zPlane, double rInner,  double rOuter) method.
- */
-
-#include "GeoModelKernel/GeoShape.h"
-#include <vector>
-
-class GeoPcon : public GeoShape
-{
- public:
-  //	Constructor for the PCON.  Note that the constructor
-  //	does not fully build this object.  The PCON is not valid
-  //	until at least two polygon planes have been added.
-  GeoPcon (double SPhi, double DPhi);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the PCON shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the PCON shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Add another plane to the polycone  A minimum of two
-  //	planes are required to create a valid polycone.
-  void addPlane (double ZPlane, double RMinPlane, double RMaxPlane);
-  
-  //	Returns the number of planes that have been created for
-  //	the polycone.
-  unsigned int getNPlanes () const;
-  
-  //	True if the polycone has at least two planes.  False
-  //	otherwise.
-  bool isValid () const;
-  
-  //	Get the Z Position of the specified plane.
-  const double & getZPlane (unsigned int i) const;
-  
-  //	Get the RMin of the specified plane.
-  const double & getRMinPlane (unsigned int i) const;
-  
-  //	Get the Z Position of the specified plane.
-  const double & getRMaxPlane (unsigned int i) const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Starting angle of the segment in radians.
-  const double& getSPhi () const;
-  
-  //	Delta angle of the segment in radians.
-  const double& getDPhi () const;
-
- protected:
-  virtual ~GeoPcon();
-  
- private:
-  GeoPcon(const GeoPcon &right);
-  GeoPcon & operator=(const GeoPcon &right);
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_sPhi;
-  double m_dPhi;
-
-  //	Z Position of poly-cone planes.
-  std::vector<double> m_zPlane;
-  
-  //	Minimum radius of poly-cone planes.
-  std::vector<double> m_rMinPlane;
-
-  //	Maximum radius of poly-cone planes.
-  std::vector<double> m_rMaxPlane;
-};
-
-inline unsigned int GeoPcon::getNPlanes () const
-{
-  return m_zPlane.size ();
-}
-
-inline bool GeoPcon::isValid () const
-{
-  return getNPlanes () >= 2;
-}
-
-inline const double & GeoPcon::getZPlane (unsigned int i) const
-{
-  return m_zPlane[i];
-}
-
-inline const double & GeoPcon::getRMinPlane (unsigned int i) const
-{
-  return m_rMinPlane[i];
-}
-
-inline const double & GeoPcon::getRMaxPlane (unsigned int i) const
-{
-  return m_rMaxPlane[i];
-}
-
-inline const std::string& GeoPcon::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoPcon::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoPcon::getSPhi () const
-{
-  return m_sPhi;
-}
-
-inline const double& GeoPcon::getDPhi () const
-{
-  return m_dPhi;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPerfUtils.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPerfUtils.h
deleted file mode 100755
index a3e23d91318f9c3c504ea4e9cd54b27be2aa21e1..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPerfUtils.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPERFUTILS_H
-#define GEOMODELKERNEL_GEOPERFUTILS_H
-
-/**
- * @class GeoPerfUtils
- *
- * @brief This is a collection of performance utilities used to 
- * benchmark the GeoModel.  Currently it includes a routine
- * to fetch the current memory consumption in kilobytes and
- * a routine to fetch the current CPU consumption in jiffies.
- *
- * Joe Boudreau March 2005.
- */
-
-class GeoPerfUtils {
-
- public:
-
-  // Get the current Memory Usage (kbytes);
-  static int getMem();
-
-  // Get the current CPU Usage (jiffies= 1/100th of a second):
-  static int getCpu();
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPgon.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPgon.h
deleted file mode 100755
index 12f22cb28afea3254618d157e9a12df7d5b129ca..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPgon.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPGON_H
-#define GEOMODELKERNEL_GEOPGON_H
-
-#include "GeoModelKernel/GeoShape.h"
-#include <vector>
-
-class GeoPgon : public GeoShape
-{
- public:
-  //	Constructor for the PGON.  Note that the constructor
-  //	does not fully build this object.  The PGON is not valid
-  //	until at least two polygon planes have been added.
-  GeoPgon (double SPhi, double DPhi, unsigned int NSides);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the PGON shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the PGON shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Add another plane to the polygon.  A minimum of two
-  //	planes are required to create a valid polygon.
-  void addPlane (double ZPlane, double RMinPlane, double RMaxPlane);
-  
-  //	Returns the number of planes that have been created for
-  //	the polygon.
-  unsigned int getNPlanes () const;
-  
-  //	True if the polygon has at least two planes.  False
-  //	otherwise.
-  bool isValid () const;
-  
-  //	Get the Z Position of the specified plane.
-  const double & getZPlane (unsigned int i) const;
-  
-  //	Get the RMin of the specified plane.
-  const double & getRMinPlane (unsigned int i) const;
-  
-  //	Get the Z Position of the specified plane.
-  const double & getRMaxPlane (unsigned int i) const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Starting angle of the segment in radians.
-  const double& getSPhi () const;
-  
-  //	Delta angle of the segment in radians.
-  const double& getDPhi () const;
-  
-  //	Number of sides in each polygonal segment.
-  const unsigned int& getNSides () const;
-  
- protected:
-  virtual ~GeoPgon();
-  
- private:
-  GeoPgon(const GeoPgon &right);
-  GeoPgon & operator=(const GeoPgon &right);
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_sPhi;
-  double m_dPhi;
-  unsigned int m_nSides;
-
-  //	Z Position of polygon planes.
-  std::vector<double> m_zPlane;
-
-  //	Minimum radius of polygon planes.
-  std::vector<double> m_rMinPlane;
-
-  //	Maximum radius of polygon planes.
-  std::vector<double> m_rMaxPlane;
-};
-
-inline unsigned int GeoPgon::getNPlanes () const
-{
-  return m_zPlane.size ();
-}
-
-inline bool GeoPgon::isValid () const
-{
-  return m_zPlane.size () >= 2;
-}
-
-inline const double & GeoPgon::getZPlane (unsigned int i) const
-{
-  return m_zPlane[i];
-}
-
-inline const double & GeoPgon::getRMinPlane (unsigned int i) const
-{
-  return m_rMinPlane[i];
-}
-
-inline const double & GeoPgon::getRMaxPlane (unsigned int i) const
-{
-  return m_rMaxPlane[i];
-}
-
-inline const std::string& GeoPgon::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoPgon::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoPgon::getSPhi () const
-{
-  return m_sPhi;
-}
-
-inline const double& GeoPgon::getDPhi () const
-{
-  return m_dPhi;
-}
-
-inline const unsigned int& GeoPgon::getNSides () const
-{
-  return m_nSides;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPhysVol.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPhysVol.h
deleted file mode 100755
index d7124483080660af40304098ecefc6d96c54b24d..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPhysVol.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPHYSVOL_H
-#define GEOMODELKERNEL_GEOPHYSVOL_H
-
-#include "GeoModelKernel/GeoVPhysVol.h"
-
-/**
- * @class GeoPhysVol
- *
- * @brief A GeoPhysVol is a physical volume for normal recursive
- * access only. This means, normally, that it represents a
- * piece of detector that nobody cares about except for
- * tracing engines like GEANT. More specifically:
- *
- * The position of the physical volume is not kept with
- * the physical volume. It can easily be obtained by
- * traversing detector graph (ComputeTransformAction), but
- * it cannot be obtained in constant time. If you need to
- * know the absolute default and/or aligned position of the
- * detector, you need to use a different kind of physical
- * volume called a GeoRAPhysicalVolume, which has a higher
- * memory cost.
- */
-
-class GeoPhysVol : public GeoVPhysVol
-{
- public:
-  GeoPhysVol(const GeoLogVol* LogVol);
-
-  GeoPhysVol(const GeoPhysVol &right) = delete;
-  GeoPhysVol & operator=(const GeoPhysVol &right) = delete;
-
-  void add(GeoGraphNode* graphNode);
-
-  /// Returns the number of child physical volumes.
-  virtual unsigned int getNChildVols() const override final;
-
-  /// Returns the ith child volume
-  virtual PVConstLink  getChildVol(unsigned int index) const override final;
-
-  /// Returns the transform to the ith volume.
-  virtual HepGeom::Transform3D getXToChildVol(unsigned int index
-					      ,const GeoVAlignmentStore* store=nullptr) const override final;
-
-  /// Returns the default transform to the ith volume.
-  virtual HepGeom::Transform3D getDefXToChildVol(unsigned int index
-						 ,const GeoVAlignmentStore* store=nullptr) const override final;
-
-  /// Executes a GeoNodeAction.
-  virtual void exec(GeoNodeAction *action) const override final;
-
-  /// Returns the name of the child.
-  virtual std::string getNameOfChildVol(unsigned int i) const override final;
-
-  /// Returns the id of the child.
-  virtual Query<int> getIdOfChildVol(unsigned int i) const override final;
-
-  /// Returns the number of child physical volumes and Serial Transformers.
-  virtual unsigned int getNChildVolAndST() const override final;
-
-  virtual HepGeom::Transform3D getX    (const GeoVAlignmentStore* store=nullptr) const override final;
-  virtual HepGeom::Transform3D getDefX (const GeoVAlignmentStore* store=nullptr) const override final;
-  virtual unsigned int getNChildNodes() const override final;
-  virtual const GeoGraphNode * const *getChildNode (unsigned int i) const override final;
-  virtual const GeoGraphNode * const *findChildNode(const GeoGraphNode *n) const override final;
-
- protected:
-  virtual ~GeoPhysVol() override;
-
- private:
-  std::vector<const GeoGraphNode*> m_daughters;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedrizeAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedrizeAction.h
deleted file mode 100755
index 79309aa0dabf7214ad069c17a181e22236787032..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedrizeAction.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPOLYHEDRIZEACTION_H
-#define GEOMODELKERNEL_GEOPOLYHEDRIZEACTION_H
-
-/**
- * @class GeoPolyhedrizeAction
- *
- * @brief This action polyhedrizes a shape. This includes, for example, boolean shapes.
- * A polhyedral representation is useful when you want to:
- *   -visualize the shape
- *   -compute the shape's volume
- */
-
-
-#include "GeoModelKernel/GeoShapeAction.h"
-class GeoPolyhedron;
-
-class GeoPolyhedrizeAction : public GeoShapeAction
-{
- public:
-  GeoPolyhedrizeAction();
-  virtual ~GeoPolyhedrizeAction();
-
-  //	Handles a shift shape.
-  virtual void handleShift (const GeoShapeShift *shift);
-  
-  //	Handles a union shape.
-  virtual void handleUnion (const GeoShapeUnion *unio);
-  
-  //	Handles an intersection shape.
-  virtual void handleIntersection (const GeoShapeIntersection *isect);
-  
-  //	Handles a subtraction shape.
-  virtual void handleSubtraction (const GeoShapeSubtraction *subtract);
-  
-  //	Handles a box shape.
-  virtual void handleBox (const GeoBox *box);
-  
-  //	Handles a cons shape.
-  virtual void handleCons (const GeoCons *cons);
-  
-  //	Handles a para shape.
-  virtual void handlePara (const GeoPara *para);
-  
-  //	Handles a pcon shape.
-  virtual void handlePcon (const GeoPcon *pcon);
-  
-  //	Handles a pgon shape.
-  virtual void handlePgon (const GeoPgon *pgon);
-  
-  //	Handles a trap shape.
-  virtual void handleTrap (const GeoTrap *trap);
-  
-  //	Handles a  trd shape.
-  virtual void handleTrd (const GeoTrd *trd);
-  
-  //	Handles a tube shape.
-  virtual void handleTube (const GeoTube *tube);
-  
-  //	Handles a tubs shape.
-  virtual void handleTubs (const GeoTubs *tubs);
-  
-  //	Returns the polyhedral representation of a shape.
-  const GeoPolyhedron * getPolyhedron () const;
-  
-  private:
-  GeoPolyhedrizeAction(const GeoPolyhedrizeAction &right);
-  GeoPolyhedrizeAction & operator=(const GeoPolyhedrizeAction &right);
-
-  //	This polyhedral representation of the shape.
-  GeoPolyhedron *m_polyhedron;
-};
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedron.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedron.h
deleted file mode 100755
index e31293d228b6a10c070389a89f6d30ffa5039eb5..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPolyhedron.h
+++ /dev/null
@@ -1,520 +0,0 @@
-#ifndef GeoPolyhedron_h
-#define GeoPolyhedron_h
-//--------------------------------------------------------------------//
-// JFB:                                                               //
-// GeoPolyhedron was HepPolyhedron, retrofitted to GeoModel           //
-// infrastructure:                                                    //
-//--------------------------------------------------------------------//
-
-
-// ********************************************************************
-// * DISCLAIMER                                                       *
-// *                                                                  *
-// * The following disclaimer summarizes all the specific disclaimers *
-// * of contributors to this software. The specific disclaimers,which *
-// * govern, are listed with their locations in:                      *
-// *   http://cern.ch/geant4/license                                  *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.                                                             *
-// *                                                                  *
-// * This  code  implementation is the  intellectual property  of the *
-// * GEANT4 collaboration.                                            *
-// * By copying,  distributing  or modifying the Program (or any work *
-// * based  on  the Program)  you indicate  your  acceptance of  this *
-// * statement, and all its terms.                                    *
-// ********************************************************************
-//
-//
-//
-// Class Description:
-// GeoPolyhedron is an intermediate class between description of a shape
-// and visualization systems. It is intended to provide some service like:
-//   - polygonization of shapes with triangulization (quadrilaterization)
-//     of complex polygons;
-//   - calculation of normals for faces and vertices;
-//   - finding result of boolean operation on polyhedra;
-//
-// Public constructors:
-//
-//   GeoPolyhedronBox (dx,dy,dz)
-//                                        - create polyhedron for Box;
-//   GeoPolyhedronTrd1 (dx1,dx2,dy,dz)
-//                                        - create polyhedron for G3 Trd1;
-//   GeoPolyhedronTrd2 (dx1,dx2,dy1,dy2,dz)
-//                                        - create polyhedron for G3 Trd2;
-//   GeoPolyhedronTrap (dz,theta,phi, h1,bl1,tl1,alp1, h2,bl2,tl2,alp2)
-//                                        - create polyhedron for G3 Trap;
-//   GeoPolyhedronPara (dx,dy,dz,alpha,theta,phi)
-//                                        - create polyhedron for G3 Para;
-//   GeoPolyhedronTube (rmin,rmax,dz)
-//                                        - create polyhedron for G3 Tube;
-//   GeoPolyhedronTubs (rmin,rmax,dz,phi1,dphi)
-//                                        - create polyhedron for G3 Tubs;
-//   GeoPolyhedronCone (rmin1,rmax1,rmin2,rmax2,dz)
-//                                        - create polyhedron for G3 Cone;
-//   GeoPolyhedronCons (rmin1,rmax1,rmin2,rmax2,dz,phi1,dphi)
-//                                        - create polyhedron for G3 Cons;
-//   GeoPolyhedronPgon (phi,dphi,npdv,nz, z(*),rmin(*),rmax(*))
-//                                        - create polyhedron for G3 Pgon;
-//   GeoPolyhedronPcon (phi,dphi,nz, z(*),rmin(*),rmax(*))
-//                                        - create polyhedron for G3 Pcon;
-//   GeoPolyhedronSphere (rmin,rmax,phi,dphi,the,dthe)
-//                                        - create polyhedron for Sphere;
-//   GeoPolyhedronTorus (rmin,rmax,rtor,phi,dphi)
-//                                        - create polyhedron for Torus;
-// Public functions:
-//
-//   GetNoVertices ()       - returns number of vertices;
-//   GetNoFacets ()         - returns number of faces;
-//   GetNextVertexIndex (index,edgeFlag) - get vertex indeces of the
-//                            quadrilaterals in order;
-//                            returns false when finished each face;
-//   GetVertex (index)      - returns vertex by index;
-//   GetNextVertex (vertex,edgeFlag) - get vertices with edge visibility
-//                            of the quadrilaterals in order;
-//                            returns false when finished each face;
-//   GetNextVertex (vertex,edgeFlag,normal) - get vertices with edge
-//                            visibility and normal of the quadrilaterals
-//                            in order; returns false when finished each face;
-//   GetNextEdgeIndeces (i1,i2,edgeFlag) - get indeces of the next edge;
-//                            returns false for the last edge;
-//   GetNextEdgeIndeces (i1,i2,edgeFlag,iface1,iface2) - get indeces of
-//                            the next edge with indeces of the faces
-//                            to which the edge belongs;
-//                            returns false for the last edge;
-//   GetNextEdge (p1,p2,edgeFlag) - get next edge;
-//                            returns false for the last edge;
-//   GetNextEdge (p1,p2,edgeFlag,iface1,iface2) - get next edge with indeces
-//                            of the faces to which the edge belongs;
-//                            returns false for the last edge;
-//   GetFacet (index,n,nodes,edgeFlags=0,normals=0) - get face by index;
-//   GetNextFacet (n,nodes,edgeFlags=0,normals=0) - get next face with normals
-//                            at the nodes; returns false for the last face;
-//   GetNormal (index)      - get normal of face given by index;
-//   GetUnitNormal (index)  - get unit normal of face given by index;
-//   GetNextNormal (normal) - get normals of each face in order;
-//                            returns false when finished all faces;
-//   GetNextUnitNormal (normal) - get normals of unit length of each face
-//                            in order; returns false when finished all faces;
-//   GetSurfaceArea()       - get surface area of the polyhedron;
-//   GetVolume()            - get volume of the polyhedron;
-//   GetNumberOfRotationSteps()   - get number of steps for whole circle;
-//   SetNumberOfRotationSteps (n) - set number of steps for whole circle;
-//   ResetNumberOfRotationSteps() - reset number of steps for whole circle
-//                            to default value;
-// History:
-//
-// 20.06.96 Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch> - initial version
-//
-// 23.07.96 John Allison
-// - added GetNoVertices, GetNoFacets, GetNextVertex, GetNextNormal
-//
-// 30.09.96 E.Chernyaev
-// - added GetNextVertexIndex, GetVertex by Yasuhide Sawada
-// - added GetNextUnitNormal, GetNextEdgeIndeces, GetNextEdge
-// - improvements: angles now expected in radians
-//                 int -> G4int, double -> G4double  
-// - G4ThreeVector replaced by either G4Point3D or G4Normal3D
-//
-// 15.12.96 E.Chernyaev
-// - private functions G4PolyhedronAlloc, G4PolyhedronPrism renamed
-//   to AllocateMemory and CreatePrism
-// - added private functions GetNumberOfRotationSteps, RotateEdge,
-//   RotateAroundZ, SetReferences
-// - rewritten G4PolyhedronCons;
-// - added G4PolyhedronPara, ...Trap, ...Pgon, ...Pcon, ...Sphere, ...Torus,
-//   so full List of implemented shapes now looks like:
-//   BOX, TRD1, TRD2, TRAP, TUBE, TUBS, CONE, CONS, PARA, PGON, PCON,
-//   SPHERE, TORUS
-//
-// 01.06.97 E.Chernyaev
-// - RotateAroundZ modified and SetSideFacets added to allow Rmin=Rmax
-//   in bodies of revolution
-//
-// 24.06.97 J.Allison
-// - added static private member fNumberOfRotationSteps and static public
-//   functions void SetNumberOfRotationSteps (G4int n) and
-//   void ResetNumberOfRotationSteps ().  Modified
-//   GetNumberOfRotationSteps() appropriately.  Made all three functions
-//   inline (at end of this .hh file).
-//   Usage:
-//    G4Polyhedron::SetNumberOfRotationSteps
-//     (fpView -> GetViewParameters ().GetNoOfSides ());
-//    pPolyhedron = solid.CreatePolyhedron ();
-//    G4Polyhedron::ResetNumberOfRotationSteps ();
-//
-// 19.03.00 E.Chernyaev
-// - added boolean operations (add, subtract, intersect) on polyhedra;
-//
-// 25.05.01 E.Chernyaev
-// - added GetSurfaceArea() and GetVolume();
-//
-#include "CLHEP/Geometry/Point3D.h"
-#include "CLHEP/Geometry/Vector3D.h"
-#include "CLHEP/Geometry/Normal3D.h"
-#include "CLHEP/Geometry/Plane3D.h"
-#include "CLHEP/Vector/Rotation.h"
-
-typedef HepGeom::Point3D<double> HVPoint3D;
-typedef HepGeom::Vector3D<double> HVNormal3D;
-typedef HepGeom::Normal3D<double> HVVector3D;
-typedef HepGeom::Plane3D<double> HVPlane3D;
-typedef CLHEP::HepRotation HVRotation;
-
-#include <iostream>
-
-#ifndef DEFAULT_NUMBER_OF_STEPS
-#define DEFAULT_NUMBER_OF_STEPS 24
-#endif
-
-class GeoFacet
-{
-  friend class GeoPolyhedron;
-  friend std::ostream & operator<< (std::ostream &, const GeoFacet & facet);
-
-private:
-  struct
-  {
-    int v, f;
-  }
-  m_edge[4];
-
-public:
-    GeoFacet (int v1 = 0, int f1 = 0, int v2 = 0, int f2 = 0,
-	      int v3 = 0, int f3 = 0, int v4 = 0, int f4 = 0)
-  {
-    m_edge[0].v = v1;
-    m_edge[0].f = f1;
-    m_edge[1].v = v2;
-    m_edge[1].f = f2;
-    m_edge[2].v = v3;
-    m_edge[2].f = f3;
-    m_edge[3].v = v4;
-    m_edge[3].f = f4;
-  }
-};
-
-class GeoPolyhedron
-{
-  friend std::ostream & operator<< (std::ostream &, const GeoPolyhedron & ph);
-
-private:
-  static int s_fNumberOfRotationSteps;
-
-protected:
-  int m_nvert, m_nface;
-  HVPoint3D *m_pV;
-  GeoFacet *m_pF;
-
-  // Allocate memory for GeoPolyhedron
-  void AllocateMemory (int Nvert, int Nface);
-
-  // Find neighbouring facet
-  int FindNeighbour (int iFace, int iNode, int iOrder) const;
-
-  // Find normal at node
-  HVNormal3D FindNodeNormal (int iFace, int iNode) const;
-
-  // Create GeoPolyhedron for prism with quadrilateral base
-  void CreatePrism ();
-
-  // Generate facets by revolving an edge around Z-axis
-  void RotateEdge (int k1, int k2, double r1, double r2,
-		   int v1, int v2, int vEdge,
-		   bool ifWholeCircle, int ns, int &kface);
-
-  // Set side facets for the case of incomplete rotation
-  void SetSideFacets (int ii[4], int vv[4],
-		      int *kk, double *r, double dphi, int ns, int &kface);
-
-  // Create GeoPolyhedron for body of revolution around Z-axis
-  void RotateAroundZ (int nstep, double phi, double dphi,
-		      int np1, int np2,
-		      const double *z, double *r, int nodeVis, int edgeVis);
-
-  // For each edge set reference to neighbouring facet
-  void SetReferences ();
-
-  // Invert the order on nodes in facets
-  void InvertFacets ();
-
-public:
-  // Constructor
-    GeoPolyhedron (int Nvert = 0, int Nface = 0):m_nvert (Nvert), m_nface (Nface),
-    m_pV (Nvert ? new HVPoint3D[Nvert + 1] : 0),
-    m_pF (Nface ? new GeoFacet[Nface + 1] : 0)
-  {
-  }
-
-  // Copy constructor
-  GeoPolyhedron (const GeoPolyhedron & from);
-
-  // Destructor
-  virtual ~ GeoPolyhedron ()
-  {
-    delete[]m_pV;
-    delete[]m_pF;
-  }
-
-  // Assignment
-  virtual GeoPolyhedron & operator= (const GeoPolyhedron & from);
-
-  // Get number of vertices
-  int GetNoVertices () const
-  {
-    return m_nvert;
-  }
-
-  // Get number of facets
-  int GetNoFacets () const
-  {
-    return m_nface;
-  }
-
-  // Transform the polyhedron
-  GeoPolyhedron & Transform (const HVRotation & rot,
-			     const HVVector3D & trans);
-
-  // Get next vertex index of the quadrilateral
-  bool GetNextVertexIndex (int &index, int &edgeFlag) const;
-
-  // Get vertex by index 
-  HVPoint3D GetVertex (int index) const;
-
-  // Get next vertex + edge visibility of the quadrilateral
-  bool GetNextVertex (HVPoint3D & vertex, int &edgeFlag) const;
-
-  // Get next vertex + edge visibility + normal of the quadrilateral
-  bool GetNextVertex (HVPoint3D & vertex, int &edgeFlag,
-		      HVNormal3D & normal) const;
-
-  // Get indeces of the next edge with indeces of the faces
-  bool GetNextEdgeIndeces (int &i1, int &i2, int &edgeFlag,
-			   int &iface1, int &iface2) const;
-
-  // Get indeces of the next edge
-  bool GetNextEdgeIndeces (int &i1, int &i2, int &edgeFlag) const;
-
-  // Get next edge
-  bool GetNextEdge (HVPoint3D & p1, HVPoint3D & p2, int &edgeFlag) const;
-
-  // Get next edge
-  bool GetNextEdge (HVPoint3D & p1, HVPoint3D & p2, int &edgeFlag,
-		    int &iface1, int &iface2) const;
-
-  // Get face by index
-  void GetFacet (int iFace, int &n, int *iNodes,
-		 int *edgeFlags = 0, int *iFaces = 0) const;
-
-  // Get face by index
-  void GetFacet (int iFace, int &n, HVPoint3D * nodes,
-		 int *edgeFlags = 0, HVNormal3D * normals = 0) const;
-
-  // Get next face with normals at the nodes
-  bool GetNextFacet (int &n, HVPoint3D * nodes,
-		     int *edgeFlags = 0, HVNormal3D * normals = 0) const;
-
-  // Get normal of the face given by index
-  HVNormal3D GetNormal (int iFace) const;
-
-  // Get unit normal of the face given by index
-  HVNormal3D GetUnitNormal (int iFace) const;
-
-  // Get normal of the next face
-  bool GetNextNormal (HVNormal3D & normal) const;
-
-  // Get normal of unit length of the next face 
-  bool GetNextUnitNormal (HVNormal3D & normal) const;
-
-  // Boolean operations 
-  GeoPolyhedron add (const GeoPolyhedron & p) const;
-  GeoPolyhedron subtract (const GeoPolyhedron & p) const;
-  GeoPolyhedron intersect (const GeoPolyhedron & p) const;
-
-  // Get area of the surface of the polyhedron
-  double GetSurfaceArea () const;
-
-  // Get volume of the polyhedron
-  double GetVolume () const;
-
-  // Get number of steps for whole circle
-  static int GetNumberOfRotationSteps ()
-  {
-    return s_fNumberOfRotationSteps;
-  }
-
-  // Set number of steps for whole circle
-  static void SetNumberOfRotationSteps (int n);
-
-  // Reset number of steps for whole circle to default value
-  static void ResetNumberOfRotationSteps ()
-  {
-    s_fNumberOfRotationSteps = DEFAULT_NUMBER_OF_STEPS;
-  }
-
-
-
-};
-
-class GeoPolyhedronTrd2:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronTrd2 (double Dx1, double Dx2,
-		     double Dy1, double Dy2, double Dz);
-    virtual ~ GeoPolyhedronTrd2 ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronTrd1:public GeoPolyhedronTrd2
-{
-public:
-  GeoPolyhedronTrd1 (double Dx1, double Dx2, double Dy, double Dz);
-  virtual ~ GeoPolyhedronTrd1 ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronBox:public GeoPolyhedronTrd2
-{
-public:
-  GeoPolyhedronBox (double Dx, double Dy, double Dz);
-  virtual ~ GeoPolyhedronBox ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronTrap:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronTrap (double Dz, double Theta, double Phi,
-		     double Dy1,
-		     double Dx1, double Dx2, double Alp1,
-		     double Dy2, double Dx3, double Dx4, double Alp2);
-  virtual ~ GeoPolyhedronTrap ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronPara:public GeoPolyhedronTrap
-{
-public:
-  GeoPolyhedronPara (double Dx, double Dy, double Dz,
-		     double Alpha, double Theta, double Phi);
-  virtual ~ GeoPolyhedronPara ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronCons:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronCons (double Rmn1, double Rmx1,
-		     double Rmn2, double Rmx2, double Dz,
-		     double Phi1, double Dphi);
-  virtual ~ GeoPolyhedronCons ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronCone:public GeoPolyhedronCons
-{
-public:
-  GeoPolyhedronCone (double Rmn1, double Rmx1,
-		     double Rmn2, double Rmx2, double Dz);
-  virtual ~ GeoPolyhedronCone ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronTubs:public GeoPolyhedronCons
-{
-public:
-  GeoPolyhedronTubs (double Rmin, double Rmax, double Dz,
-		     double Phi1, double Dphi);
-  virtual ~ GeoPolyhedronTubs ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronTube:public GeoPolyhedronCons
-{
-public:
-  GeoPolyhedronTube (double Rmin, double Rmax, double Dz);
-  virtual ~ GeoPolyhedronTube ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronPgon:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronPgon (double phi, double dphi, int npdv, int nz,
-		     const double *z, const double *rmin, const double *rmax);
-  virtual ~ GeoPolyhedronPgon ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronPcon:public GeoPolyhedronPgon
-{
-public:
-  GeoPolyhedronPcon (double phi, double dphi, int nz,
-		     const double *z, const double *rmin, const double *rmax);
-  virtual ~ GeoPolyhedronPcon ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronSphere:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronSphere (double rmin, double rmax,
-		       double phi, double dphi, double the, double dthe);
-  virtual ~ GeoPolyhedronSphere ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-class GeoPolyhedronTorus:public GeoPolyhedron
-{
-public:
-  GeoPolyhedronTorus (double rmin, double rmax, double rtor,
-		      double phi, double dphi);
-  virtual ~ GeoPolyhedronTorus ();
-  virtual GeoPolyhedron & operator = (const GeoPolyhedron & from)
-  {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPrintGraphAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPrintGraphAction.h
deleted file mode 100755
index bed2e982748e4513673ad6eae636e7cf7a4c759c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoPrintGraphAction.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOPRINTGRAPHACTION_H
-#define GEOMODELKERNEL_GEOPRINTGRAPHACTION_H
-
-/**
- * @class GeoPrintGraphAction
- * 
- * @brief This action prints the node tree.  It can be configured
- * to print a message on the following types of nodes:
- *      * Transforms
- *      * Physical Volumes and Full Physical Volumes
- *      * SerialDenominators
- *      * SerialTransforms 
- *      * IdentifierTag
- */
-
-#include "GeoModelKernel/GeoNodeAction.h"
-#include <iostream>
-
-class GeoPrintGraphAction : public GeoNodeAction
-{
-  enum Type { TRANSFORM,
-	      VOLUME,
-	      NAMETAG,
-	      IDENTIFIERTAG};
- public:
-  GeoPrintGraphAction (std::ostream &o);
-  virtual ~GeoPrintGraphAction();
-
-  //	Handles a Transform.
-  virtual void handleTransform (const GeoTransform *xform);
-  
-  //	Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *vol);
-  
-  //	Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *vol);
-  
-  //	Handles a Name Tag.
-  virtual void handleNameTag (const GeoNameTag *nameTag);
-  
-  //	Handles a Serial Denominator.
-  virtual void handleSerialDenominator (const GeoSerialDenominator *sD);
-  
-  //	Handles a Serial Transformer
-  virtual void handleSerialTransformer (const GeoSerialTransformer  *sT);
-  
-  //	Handles an Identifier Tag.
-  virtual void handleIdentifierTag (const GeoIdentifierTag *idTag);
-  
-  //	Sets the notification state.  Default: everything on.
-  void setNotification (Type type, bool state);
-  
- private:
-  GeoPrintGraphAction(const GeoPrintGraphAction &right);
-  GeoPrintGraphAction & operator=(const GeoPrintGraphAction &right);
-  
-  //	Indent the print.
-  void indent ();
-  
-  //	A pointer to a name tag.  If the volume is named.
-  const GeoNameTag *m_nameTag;
-
-  //	A pointer to a serial denominator.  If one exists.
-  const GeoSerialDenominator *m_serialDenominator;
-
-  //	A pointer to an identifier tag.  If the volume is
-  //	identified.
-  const GeoIdentifierTag *m_idTag;
-
-  //	List of Pending Transformations.
-  std::vector<const GeoTransform *>  m_pendingTransformList;
-
-  //	On/off flag for transforms.
-  bool m_transformState;
-
-  //	On/off flag for physical volumes.
-  bool m_volumeState;
-
-  //	On/off flag for name tags.
-  bool m_nametagState;
-
-  //	On/off flag for serial denominators.
-  bool m_serialDenominatorState;
-  
-  //	On/off flag for serial transformers.
-  bool m_serialTransformerState;
-
-  //	On/off flag for identifier tags.
-  bool m_identifierState;
-
-  std::ostream &m_o;
-
-  //	Flag for indent (intially 0)
-  mutable bool m_indented;
-};
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialDenominator.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialDenominator.h
deleted file mode 100755
index 6e85abef4c7e5a3b0fcd16104a59e768869b336e..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialDenominator.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSERIALDENOMINATOR_H
-#define GEOMODELKERNEL_GEOSERIALDENOMINATOR_H
-
-/**
- * @class GeoSerialDenominator
- * 
- * @brief This class generates a name for all physical volumes
- * following it.  The name is a prefix string followed by a
- * serial number that starts at zero.  The naming scheme
- * applies to all following sibling physical volumes.  The
- * naming is reset only when a GeoNameTag or another Geo
- * SerialDenominator is found.
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include <string>
-
-class GeoSerialDenominator : public GeoGraphNode
-{
- public:
-  GeoSerialDenominator (const std::string &BaseName);
-  
-  //	Executes a GeoNodeAction.
-  virtual void exec (GeoNodeAction *action) const;
-  
-  //	Specifies the name of the next physical volume in the
-  //	node tree.
-  const std::string& getBaseName () const;
-
- protected:
-  virtual ~GeoSerialDenominator();
-  
- private:
-  GeoSerialDenominator(const GeoSerialDenominator &right);
-  GeoSerialDenominator & operator=(const GeoSerialDenominator &right);
-  
-  std::string m_baseName;
-  
-};
-
-inline const std::string& GeoSerialDenominator::getBaseName () const
-{
-  return m_baseName;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialIdentifier.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialIdentifier.h
deleted file mode 100755
index 63a06d4756bfa93ae0a9e049049e9f963a5eea08..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialIdentifier.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSERIALIDENTIFIER_H
-#define GEOMODELKERNEL_GEOSERIALIDENTIFIER_H
-
-/**
- * @class GeoSerialIdentifier
- *
- * @brief Like a GeoSerialDenominator.  Identifies volumes, including virtual volumes.
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-
-class GeoSerialIdentifier : public GeoGraphNode  
-{
- public:
-  GeoSerialIdentifier(int baseId);
-
-  virtual void exec(GeoNodeAction *action) const;
-
-  inline int getBaseId() const;
-  
- protected:
-  virtual ~GeoSerialIdentifier();
-
- private:
-  GeoSerialIdentifier(const GeoSerialIdentifier &right);
-  const GeoSerialIdentifier & operator=(const GeoSerialIdentifier &right);
-
-  int  m_baseId;
-};
-
-inline int GeoSerialIdentifier::getBaseId() const
-{
-  return m_baseId;
-}
-
-#endif
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialTransformer.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialTransformer.h
deleted file mode 100755
index b937e7456f308f74283b356be332d739d16968dd..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSerialTransformer.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSERIALTRANSFORMER_H
-#define GEOMODELKERNEL_GEOSERIALTRANSFORMER_H
-
-/**
- * @class GeoSerialTransformer
- * 
- * @brief This class takes a physical volume and places it
- * according to a transformation field, N times.
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include "GeoModelKernel/GeoVPhysVol.h"
-#include "GeoModelKernel/GeoXF.h"
-
-class GeoSerialTransformer : public GeoGraphNode
-{
- public:
-  GeoSerialTransformer (const GeoVPhysVol *volume, const GeoXF::Function *func, unsigned int copies);
-
-  //	Executes a GeoNodeAction.
-  virtual void exec (GeoNodeAction *action) const;
-
-  //	Returns the transformation field itself.
-  const GeoXF::Function * getFunction () const;
-
-  // Returns the volume:
-  PVConstLink getVolume () const
-  {
-    return m_physVol;
-  }
-
-  // Returns the number of copies:
-  unsigned int getNCopies () const
-  {
-    return m_nCopies;
-  }
-
-  // Returns the transformation to the ith copy:
-  HepGeom::Transform3D getTransform (int i) const
-  {
-    return (*m_function) (i);
-  }
-
- protected:
-  virtual ~GeoSerialTransformer();
-
- private:
-  GeoSerialTransformer(const GeoSerialTransformer &right);
-  GeoSerialTransformer & operator=(const GeoSerialTransformer &right);
-
-  //	Number of copies of a physical volume to generate.
-  unsigned int m_nCopies;
-
-  //	Recipe for the transformation; specifically, a
-  //	Transform-valued m_function of a single variable.
-  const GeoXF::Function *m_function;
-
-  //	The physical volume to be multiply placed.
-  const GeoVPhysVol *m_physVol;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShape.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShape.h
deleted file mode 100755
index d9679c1260eb5c6bb16f6928904cf750f55a657e..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShape.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPE_H
-#define GEOMODELKERNEL_GEOSHAPE_H
-
-/**
- * @class GeoShape
- *
- * @brief This class describes a Shape. Shapes will be able to do the following things:
- *          * Identify themselves.
- *          * Compute their volume.
- *          * Combine themselves using Boolean operations with other shapes.
- *      The type identification works as follows:
- *           if (myShape->typeId()==GeoBox::classTypeId()) {
- *             .....
- *           }
- *	This avoids the need for dynamic casting with these
- *	classes.
- *
- *	Also noteworthy: Shapes are allocated on the heap and
- *	deleted automatically when their reference count falls
- *	to zero.
- */
-
-#include "GeoModelKernel/RCBase.h"
-#include <CLHEP/Geometry/Transform3D.h>
-#include <string>
-
-typedef unsigned int ShapeType;
-class GeoShapeIntersection;
-class GeoShapeUnion;
-class GeoShapeSubtraction;
-class GeoShapeShift;
-class GeoShapeAction;
-
-class GeoShape : public RCBase
-{
- public:
-  // Constructor for shape.  Must provide the name, a string to identify this shape.
-  GeoShape ();
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const = 0;
-
-  //	Boolean OR operation for shapes
-  const GeoShapeUnion & add (const GeoShape& shape) const;
-  
-  //	Subtraction operation for shapes.
-  const GeoShapeSubtraction & subtract (const GeoShape& shape) const;
-  
-  //	Intersection of shapes.
-  const GeoShapeIntersection & intersect (const GeoShape& shape) const;
-  
-  //	Shift shapes, for boolean operations.
-  const GeoShapeShift & operator << (const HepGeom::Transform3D &shift) const;
-  
-  //	Returns the shape type, as a string.
-  virtual const std::string & type () const = 0;
-  
-  //	Returns the shape type, as an coded integer.
-  virtual ShapeType typeID () const = 0;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const = 0;
-  
- protected:
-  virtual ~GeoShape();
-
- private:
-  GeoShape(const GeoShape &right);
-  GeoShape & operator=(const GeoShape &right);
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeAction.h
deleted file mode 100755
index 813ccff7ad3aef58d0880a814f3b454a10396192..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeAction.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPEACTION_H
-#define GEOMODELKERNEL_GEOSHAPEACTION_H
-
-/**
- * @class GeoShapeAction
- *
- * @brief This class is a visitor for shapes.  It allows a
- *	navigation of the boolean expression tree for shapes, in
- *	order to accomplish actions such as volume computation.
- *	This is essentially an internal class.
- */
-
-#include "GeoModelKernel/Query.h"
-#include "GeoModelKernel/GeoShapePath.h"
-
-class GeoShape;
-class GeoShapeIntersection;
-class GeoShapeUnion;
-class GeoShapeSubtraction;
-class GeoShapeShift;
-class GeoBox;
-class GeoCons;
-class GeoPcon;
-class GeoPgon;
-class GeoTrap;
-class GeoTrd;
-class GeoPara;
-class GeoTubs;
-class GeoTube;
-class GeoEllipticalTube;
-class GeoTorus;
-
-class LArCustomShape;
-
-class GeoSimplePolygonBrep;
-class GeoTessellatedSolid;
-
-class GeoGenericTrap;
-
-class GeoShapeAction 
-{
- public:
-  GeoShapeAction();
-  virtual ~GeoShapeAction();
-
-  Query<unsigned int>  getDepthLimit ();
-
-  //	Sets a depth limit.
-  void setDepthLimit (unsigned int limit);
-
-  //	Clears a depth limit, if any.
-  void clearDepthLimit ();
-
-  //	Cause the action to terminate.
-  void terminate ();
-
-  //	Determine whether the action should terminate.
-  bool shouldTerminate () const;
-
-  //	Handles a shape.
-  virtual void handleShape (const GeoShape *);
-
-  //	Handles a shift shape.
-  virtual void handleShift (const GeoShapeShift *shift);
-
-  //	Handles a union shape.
-  virtual void handleUnion (const GeoShapeUnion *unio);
-
-  //	Handles an intersection shape.
-  virtual void handleIntersection (const GeoShapeIntersection *isect);
-
-  //	Handles a subtraction shape.
-  virtual void handleSubtraction (const GeoShapeSubtraction *subtract);
-
-  //	Handles a box shape.
-  virtual void handleBox (const GeoBox *box);
-
-  //	Handles a cons shape.
-  virtual void handleCons (const GeoCons *cons);
-
-  //	Handles a para shape.
-  virtual void handlePara (const GeoPara *para);
-
-  //	Handles a pcon shape.
-  virtual void handlePcon (const GeoPcon *pcon);
-
-  //	Handles a pgon shape.
-  virtual void handlePgon (const GeoPgon *pgon);
-
-  //	Handles a trap shape.
-  virtual void handleTrap (const GeoTrap *trap);
-
-  //	Handles a  trd shape.
-  virtual void handleTrd (const GeoTrd *trd);
-
-  //	Handles a tube shape.
-  virtual void handleTube (const GeoTube *tube);
-
-  //	Handles a tubs shape.
-  virtual void handleTubs (const GeoTubs *tubs);
-
-  //	Returns a pointer to the path object.
-  GeoShapePath * getPath ();
-
-  virtual void handleLArCustom (const LArCustomShape *);
-  virtual void handleSimplePolygonBrep (const GeoSimplePolygonBrep *);
-  virtual void handleTessellatedSolid (const GeoTessellatedSolid *);
-  virtual void handleEllipticalTube (const GeoEllipticalTube *);
-  virtual void handleTorus (const GeoTorus *);
-  virtual void handleGenericTrap (const GeoGenericTrap *);
-
- private:
-  GeoShapeAction(const GeoShapeAction &right);
-  GeoShapeAction & operator=(const GeoShapeAction &right);
-
-  //	A limit may be placed upon the depth to which the action
-  //	descends.  0 = self.  1 = self and children.
-  Query<unsigned int> m_depth;
-  
-  //	Termination flag; causes an abortion of action execution.
-  bool m_terminate;
-  GeoShapePath m_path;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h
deleted file mode 100755
index 26fcd708f88af80f7f651ad79b9bf4cf3ace0c6d..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPEINTERSECTION_H
-#define GEOMODELKERNEL_GEOSHAPEINTERSECTION_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoShapeIntersection : public GeoShape
-{
- public:
-  //	Constructor taking two shape operands.
-  GeoShapeIntersection (const GeoShape* A, const GeoShape* B);
-  
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-
-  //	Returns the AND shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the AND shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Returns the first operand being ANDed
-  const GeoShape* getOpA () const;
-  
-  //	Returns the second operand being ANDed.
-  const GeoShape* getOpB () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
- protected:
-  virtual ~GeoShapeIntersection();
-  
- private:
-  GeoShapeIntersection(const GeoShapeIntersection &right);
-  GeoShapeIntersection & operator=(const GeoShapeIntersection &right);
-  
-  //	The first shape operand in the AND operation.
-  const GeoShape* m_opA;
-
-  //	The second shape operand in the AND operation.
-  const GeoShape* m_opB;
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-};
-
-inline const std::string& GeoShapeIntersection::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoShapeIntersection::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapePath.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapePath.h
deleted file mode 100755
index 865b0ac6ca81a02aff19a9217a0c829dd46a2e01..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapePath.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPEPATH_H
-#define GEOMODELKERNEL_GEOSHAPEPATH_H
-
-#include "GeoModelKernel/GeoShape.h"
-#include "GeoModelKernel/Path.h"
-
-typedef Path< GeoShape  > GeoShapePath;
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeShift.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeShift.h
deleted file mode 100755
index d228140c5f3442e2f3f9b5c80067d4a613a1d1c1..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeShift.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPESHIFT_H
-#define GEOMODELKERNEL_GEOSHAPESHIFT_H
-
-#include "GeoModelKernel/GeoShape.h"
-#include "CLHEP/Geometry/Transform3D.h"
-
-class GeoShapeShift : public GeoShape
-{
- public:
-  GeoShapeShift (const GeoShape* A, const HepGeom::Transform3D &X);
-  
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the OR shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the OR shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Returns the first operand being ORed
-  const GeoShape* getOp () const;
-  
-  //	Returns the shift of this shape.
-  const HepGeom::Transform3D & getX () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-
- protected:
-  virtual ~GeoShapeShift();
-  
- private:
-  GeoShapeShift(const GeoShapeShift &right);
-  GeoShapeShift & operator=(const GeoShapeShift &right);
-  
-  //	The shape operand in the NOT operation.
-  const GeoShape* m_op;
-
-  //	Gives the amount by which the volume is shifted.
-  HepGeom::Transform3D m_shift;
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-};
-
-inline const std::string& GeoShapeShift::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoShapeShift::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h
deleted file mode 100755
index 45646a344b96ec221b9bc0b0b9dea88e8d622c38..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPESUBTRACTION_H
-#define GEOMODELKERNEL_GEOSHAPESUBTRACTION_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoShapeSubtraction : public GeoShape
-{
- public:
-  GeoShapeSubtraction (const GeoShape* A, const GeoShape* B);
-  
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the NOT shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the NOT shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Returns the first operand in the subtraction
-  const GeoShape* getOpA () const;
-  
-  //	Returns the second operand in the subtraction
-  const GeoShape* getOpB () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
- protected:
-  virtual ~GeoShapeSubtraction();
-  
- private:
-  GeoShapeSubtraction(const GeoShapeSubtraction &right);
-  GeoShapeSubtraction & operator=(const GeoShapeSubtraction &right);
-  
-  //	The shape operand in the Subtraction operation
-  const GeoShape* m_opA;
-
-  //	The shape operand in the Subtraction operation
-  const GeoShape* m_opB;
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-};
-
-inline const std::string& GeoShapeSubtraction::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoShapeSubtraction::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h
deleted file mode 100755
index a1f33324dad2c1fa4bae72d9c0b4cac1abb86e77..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSHAPEUNION_H
-#define GEOMODELKERNEL_GEOSHAPEUNION_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoShapeUnion : public GeoShape
-{
- public:
-  GeoShapeUnion (const GeoShape* A, const GeoShape* B);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the OR shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the OR shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Returns the first operand being ORed
-  const GeoShape* getOpA () const;
-  
-  //	Returns the second operand being ORed.
-  const GeoShape* getOpB () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
- protected:
-  virtual ~GeoShapeUnion();
-  
- private:
-  GeoShapeUnion(const GeoShapeUnion &right);
-  GeoShapeUnion & operator=(const GeoShapeUnion &right);
-  
-  //	The first shape operand in the OR operation.
-  const GeoShape* m_opA;
-
-  //	The second shape operand in the OR operation.
-  const GeoShape* m_opB;
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-};
-
-inline const std::string& GeoShapeUnion::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoShapeUnion::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSimplePolygonBrep.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSimplePolygonBrep.h
deleted file mode 100755
index 288a47ddd6c4bcb072542484eced7c403ffcba65..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoSimplePolygonBrep.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSIMPLEPOLYGONBREP_H
-#define GEOMODELKERNEL_GEOSIMPLEPOLYGONBREP_H
-
-/**
- * @class: GeoSimplePolygonBrep
- *
- * @brief This shape represents a BREP solid consisting
- *      of two equivalent polygonial faces perpendicular to Z axis.
- *      The polygones are described by array of (x,y) vertices,
- *      The solid is considered valid if the number of polygon vertices >=3 
- *
- *      Constructor parameter is a half length along Z axis
- */
-
-#include <vector>
-#include "GeoModelKernel/GeoShape.h"
-
-
-class GeoSimplePolygonBrep : public GeoShape
-{
- public:
-  GeoSimplePolygonBrep(double dz);
-
-  virtual double volume() const;
-
-  virtual const std::string& type() const;
-  virtual ShapeType typeID() const;
-
-  void addVertex(double XVertex, double YVertex);
-  unsigned int getNVertices() const;
-
-  bool isValid () const;
-
-  const double & getXVertex(unsigned int i) const;
-  const double & getYVertex(unsigned int i) const;
-
-  virtual void exec(GeoShapeAction *action) const;
-
-  static const std::string& getClassType();
-  static ShapeType getClassTypeID();
-
-  const double& getDZ() const;
-
- protected:
-  virtual ~GeoSimplePolygonBrep();
-
- private:
-  GeoSimplePolygonBrep(const GeoSimplePolygonBrep &right);
-  GeoSimplePolygonBrep & operator=(const GeoSimplePolygonBrep &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_dZ;
-  std::vector<double> m_xVertices;
-  std::vector<double> m_yVertices;
-};
-
-inline unsigned int GeoSimplePolygonBrep::getNVertices() const
-{
-  return m_xVertices.size();
-}
-
-inline bool GeoSimplePolygonBrep::isValid() const
-{
-  return getNVertices()>=3;
-}
-
-inline const double& GeoSimplePolygonBrep::getXVertex(unsigned int i) const
-{
-  return m_xVertices[i];
-}
-
-inline const double& GeoSimplePolygonBrep::getYVertex(unsigned int i) const
-{
-  return m_yVertices[i];
-}
-
-inline const std::string& GeoSimplePolygonBrep::getClassType()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoSimplePolygonBrep::getClassTypeID()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoSimplePolygonBrep::getDZ() const
-{
-  return m_dZ;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTessellatedSolid.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTessellatedSolid.h
deleted file mode 100755
index 3774c3a9736ada999c8d9e087e17b23fa14b0bfd..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTessellatedSolid.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTESSELLATEDSOLID_H
-#define GEOMODELKERNEL_GEOTESSELLATEDSOLID_H
-
-#include "GeoModelKernel/GeoShape.h"
-#include "GeoModelKernel/GeoFacet.h"
-
-class GeoTessellatedSolid : public GeoShape
-{
- public:
-  GeoTessellatedSolid();
-
-  virtual double volume() const;
-
-  virtual const std::string& type() const;
-  virtual ShapeType typeID() const;
-
-  static const std::string& getClassType();
-  static ShapeType getClassTypeID();
-
-  virtual void exec(GeoShapeAction *action) const;
-
-  void addFacet(GeoFacet*);
-  GeoFacet* getFacet(size_t) const;
-  size_t getNumberOfFacets() const;
-
- protected:
-  virtual ~GeoTessellatedSolid();
-
- private:
-  GeoTessellatedSolid(const GeoTessellatedSolid &right);
-  GeoTessellatedSolid& operator=(const GeoTessellatedSolid &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  std::vector<GeoFacet*> m_facets;
-};
-
-inline const std::string& GeoTessellatedSolid::getClassType()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTessellatedSolid::getClassTypeID()
-{
-  return s_classTypeID;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTorus.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTorus.h
deleted file mode 100755
index 74f03650f3803771621887b51b031d9521d6cb2c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTorus.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTORUS_H
-#define GEOMODELKERNEL_GEOTORUS_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-
-class GeoTorus : public GeoShape  
-{
- public:
-  GeoTorus (double Rmin, double Rmax, double Rtor, double SPhi, double DPhi);
-
-  virtual double volume () const;
-
-  virtual const std::string & type () const;
-  virtual ShapeType typeID () const;
-
-  static const std::string& getClassType ();
-  static ShapeType getClassTypeID ();
-
-  virtual void exec (GeoShapeAction *action) const;
-
-  const double& getRMin () const;
-  const double& getRMax () const;
-  const double& getRTor () const;
-  const double& getSPhi () const;
-  const double& getDPhi () const;
-
- protected:
-  virtual ~GeoTorus();
-
- private:
-  GeoTorus(const GeoTorus &right);
-  GeoTorus & operator=(const GeoTorus &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_rMin;
-  double m_rMax;
-  double m_rTor;
-  double m_sPhi;
-  double m_dPhi;
-};
-
-inline const std::string& GeoTorus::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTorus::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoTorus::getRMin () const
-{
-  return m_rMin;
-}
-
-inline const double& GeoTorus::getRMax () const
-{
-  return m_rMax;
-}
-
-inline const double& GeoTorus::getRTor () const
-{
-  return m_rTor;
-}
-
-inline const double& GeoTorus::getSPhi () const
-{
-  return m_sPhi;
-}
-
-inline const double& GeoTorus::getDPhi () const
-{
-  return m_dPhi;
-}
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTransform.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTransform.h
deleted file mode 100755
index bb8f120d9eadaa5df26b4056eb0a7314fe76c977..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTransform.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTRANSFORM_H
-#define GEOMODELKERNEL_GEOTRANSFORM_H 
-
-/**
- * @class GeoTransform
- *
- * @brief A basic geometrical (Euclidean) transform.  Can return a HepGeom::Transform3D.
- * Reference counted.  There is no (mis)alignment present in this class.  For a transform
- * that can be  (mis)aligned, see GeoAlignableTransform
- * 
- */
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include "CLHEP/Geometry/Transform3D.h"
-
-class GeoVAlignmentStore;
-
-class GeoTransform : public GeoGraphNode
-{
- public:
-  GeoTransform(const HepGeom::Transform3D& transform);
-
-  GeoTransform(const GeoTransform &right) = delete;
-  GeoTransform & operator=(const GeoTransform &right) = delete;
-
-  /// Gets the total transformation.
-  virtual HepGeom::Transform3D getTransform(const GeoVAlignmentStore* store=nullptr) const;
-
-  /// Gets the default transformation (no alignment correction)
-  HepGeom::Transform3D getDefTransform(const GeoVAlignmentStore* store=nullptr) const;
-
-  ///	Executes a GeoNodeAction.
-  virtual void exec(GeoNodeAction *action) const override final;
-  
- protected:
-  virtual ~GeoTransform() override;
-
- private:
-  // The Euclidean (Rigid Body) transform.
-  HepGeom::Transform3D m_transform;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrap.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrap.h
deleted file mode 100755
index 2f47b45bbed0140cfa7829d7be9dd12f640c5b20..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrap.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTRAP_H
-#define GEOMODELKERNEL_GEOTRAP_H
-
-/**
- * @class GeoTrap
- *
- * @brief This shape represents a very general trapezoid
- */
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoTrap : public GeoShape
-{
- public:
-  GeoTrap (double ZHalfLength, double Theta, double Phi, double Dydzn, double Dxdyndzn, double Dxdypdzn, double Angleydzn, double Dydzp, double Dxdyndzp, double Dxdypdzp, double Angleydzp);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the TRAP shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the TRAP shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Z half length.
-  const double& getZHalfLength () const;
-  
-  //	Polar (theta) angle.
-  const double& getTheta () const;
-  
-  //	Azimuthal (phi) angle.
-  const double& getPhi () const;
-  
-  //	Y half length at -z.
-  const double& getDydzn () const;
-  
-  //	X half length at -z, -y.
-  const double& getDxdyndzn () const;
-  
-  //	X half length at -z, +y
-  const double& getDxdypdzn () const;
-  
-  const double& getAngleydzn () const;
-  
-  //	Y half length at +z.
-  const double& getDydzp () const;
-  
-  //	X half length at +z, -y
-  const double& getDxdyndzp () const;
-  
-  //	X half length at +z, +y
-  const double& getDxdypdzp () const;
-  
-  const double& getAngleydzp () const;
-  
- protected:
-  virtual ~GeoTrap();
-
- private:
-  GeoTrap(const GeoTrap &right);
-  GeoTrap & operator=(const GeoTrap &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_zHalfLength;
-  double m_theta;
-  double m_phi;
-  double m_dydzn;
-  double m_dxdyndzn;
-  double m_dxdypdzn;
-  double m_angleydzn;
-  double m_dydzp;
-  double m_dxdyndzp;
-  double m_dxdypdzp;
-  double m_angleydzp;
-
-};
-
-inline const std::string& GeoTrap::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTrap::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoTrap::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-inline const double& GeoTrap::getTheta () const
-{
-  return m_theta;
-}
-
-inline const double& GeoTrap::getPhi () const
-{
-  return m_phi;
-}
-
-inline const double& GeoTrap::getDydzn () const
-{
-  return m_dydzn;
-}
-
-inline const double& GeoTrap::getDxdyndzn () const
-{
-  return m_dxdyndzn;
-}
-
-inline const double& GeoTrap::getDxdypdzn () const
-{
-  return m_dxdypdzn;
-}
-
-inline const double& GeoTrap::getAngleydzn () const
-{
-  return m_angleydzn;
-}
-
-inline const double& GeoTrap::getDydzp () const
-{
-  return m_dydzp;
-}
-
-inline const double& GeoTrap::getDxdyndzp () const
-{
-  return m_dxdyndzp;
-}
-
-inline const double& GeoTrap::getDxdypdzp () const
-{
-  return m_dxdypdzp;
-}
-
-inline const double& GeoTrap::getAngleydzp () const
-{
-  return m_angleydzp;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTraversalState.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTraversalState.h
deleted file mode 100755
index 276611c7a099ca84e9621d6487e8106957738870..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTraversalState.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTRAVERSALSTATE_H
-#define GEOMODELKERNEL_GEOTRAVERSALSTATE_H
-
-/**
- * @class GeoTraversalState
- *
- * @brief This incorporates a traversal state, including the following information:
- *	* The absolute transform from the place where the action started.
- *	* The default absolute transform from the place where the action started.
- *	* The path to the node.
- *	* The depth
- */
- 
-#include "GeoModelKernel/GeoNodePath.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <stack>
-#include <string>
-
-class GeoTraversalState 
-{
- public:
-  GeoTraversalState ();
-  virtual ~GeoTraversalState();
-
-  //	Gets the transformation of the current node with respect
-  //	to its parent.
-  const HepGeom::Transform3D & getTransform () const;
-  
-  //	Gets the name of the current node.
-  const std::string & getName () const;
-  
-  //	Gets the default transformation of the current node with
-  //	respect to its parent.
-  const HepGeom::Transform3D & getDefTransform () const;
-  
-  //	Gets the absolute name of the current node.
-  const std::string & getAbsoluteName () const;
-  
-  //	Gets the default absolute transformation to the current
-  //	node.
-  const HepGeom::Transform3D & getDefAbsoluteTransform () const;
-
-  //	Gets the absolute transformation to the current node.
-  const HepGeom::Transform3D & getAbsoluteTransform () const;
-  
-  //	Sets the transform for the current node.
-  void setTransform (const HepGeom::Transform3D &transform);
-  
-  //	Sets the name for the current node.
-  void setName (const std::string &name);
-  
-  //	Sets the default absolute transform for the current node.
-  void setDefTransform (const HepGeom::Transform3D &transform);
-  
-  //	Goes to the next level.  Pushes the last absolute
-  //	transform onto the stack so that it can be retreived
-  //	when going back to the previous level.
-  void nextLevel (const GeoVPhysVol* pv);
-  
-  //	Goes to the previous level.  Pops the last absolute
-  //	transform onto the stack, restoring the absolute
-  //	transform to that of the previous level.
-  void previousLevel ();
-  
-  //	Returns the path.
-  const GeoNodePath * getPath () const;
-  
-  //	Sets the identifier for the current node.
-  void setId (const Query<int> &id);
-  
-  //	Gets the id of the current node.
-  const Query<int> getId () const;
-
- private:
-  GeoTraversalState(const GeoTraversalState &right);
-  GeoTraversalState & operator=(const GeoTraversalState &right);
-
-  //	A list of tranformations for all nodes visited at all
-  //	previous levels of traversal.
-  std::stack<HepGeom::Transform3D> m_absTransformList;
-  
-  //	A list of default tranformations for all nodes visited
-  //	at all previous levels of traversal.
-  std::stack<HepGeom::Transform3D> m_defAbsTransformList;
-  
-  //	List of volume names.
-  std::stack<std::string> m_absNameList;
-  
-  //	The absolute transform for the present volume.
-  HepGeom::Transform3D m_absTransform;
-  
-  //	The default absolute transform.
-  HepGeom::Transform3D m_defAbsTransform;
-  
-  //	The absolute name.
-  std::string m_absName;
-  
-  //	The transform from parent to current.
-  HepGeom::Transform3D m_transform;
-  
-  //	The default transform from parent to current.
-  HepGeom::Transform3D m_defTransform;
-  
-  //	The relative name.
-  std::string m_name;
-  
-  //	And identifier for this volume.
-  Query<int> m_id;
-  
-  //	The path from the point at which the action started, to
-  //	the current node.
-  GeoNodePath m_path;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrd.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrd.h
deleted file mode 100755
index 6bfa31c4ec152729652fdba21ea32bea9de1ebb4..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTrd.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTRD_H
-#define GEOMODELKERNEL_GEOTRD_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoTrd : public GeoShape
-{
- public:
-  GeoTrd (double XHalfLength1, double XHalfLength2, double YHalfLength1, double YHalfLength2, double ZHalfLength);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the TRD shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the TRD shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Half length in the x-direction at -dz.
-  const double& getXHalfLength1 () const;
-  
-  //	Half length in the x-direction at +dz
-  const double& getXHalfLength2 () const;
-  
-  //	Half-length in the y direction at +dz.
-  const double& getYHalfLength1 () const;
-  
-  //	Half-length in the y direction at -dz
-  const double& getYHalfLength2 () const;
-  
-  //	Half-length in the z direction.
-  const double& getZHalfLength () const;
-
- protected:
-  virtual ~GeoTrd();
-
- private:
-  GeoTrd(const GeoTrd &right);
-  GeoTrd & operator=(const GeoTrd &right);
-  
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_xHalfLength1;
-  double m_xHalfLength2;
-  double m_yHalfLength1;
-  double m_yHalfLength2;
-  double m_zHalfLength;
-
-};
-
-inline const std::string& GeoTrd::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTrd::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoTrd::getXHalfLength1 () const
-{
-  return m_xHalfLength1;
-}
-
-inline const double& GeoTrd::getXHalfLength2 () const
-{
-  return m_xHalfLength2;
-}
-
-inline const double& GeoTrd::getYHalfLength1 () const
-{
-  return m_yHalfLength1;
-}
-
-inline const double& GeoTrd::getYHalfLength2 () const
-{
-  return m_yHalfLength2;
-}
-
-inline const double& GeoTrd::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTube.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTube.h
deleted file mode 100755
index 4354cfd4baa437c229ee25ac76cad45709231568..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTube.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTUBE_H
-#define GEOMODELKERNEL_GEOTUBE_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoTube : public GeoShape
-{
- public:
-  GeoTube (double RMin, double RMax, double ZHalfLength);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-  
-  //	Returns the TUBE shape type, as a string.
-  virtual const std::string & type () const;
-  
-  //	Returns the TUBE shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-  
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-  
-  //	For type identification.
-  static const std::string& getClassType ();
-  
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-  
-  //	Minimum (inner) tube radius.
-  const double& getRMin () const;
-  
-  //	Maximum (outer) tube radius.
-  const double& getRMax () const;
-  
-  //	Tube half-length in the z direction.
-  const double& getZHalfLength () const;
-  
- protected:
-  //## Destructor (generated)
-  virtual ~GeoTube();
-  
- private:
-  GeoTube(const GeoTube &right);
-  GeoTube & operator=(const GeoTube &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_rMin;
-  double m_rMax;
-  double m_zHalfLength;
-
-};
-
-inline const std::string& GeoTube::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTube::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoTube::getRMin () const
-{
-  return m_rMin;
-}
-
-inline const double& GeoTube::getRMax () const
-{
-  return m_rMax;
-}
-
-inline const double& GeoTube::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTubs.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTubs.h
deleted file mode 100755
index 68f8399fb5b2ed27cee402f3d3fc8520238cf1d6..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoTubs.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOTUBS_H
-#define GEOMODELKERNEL_GEOTUBS_H
-
-#include "GeoModelKernel/GeoShape.h"
-
-class GeoTubs : public GeoShape
-{
- public:
-  GeoTubs (double RMin, double RMax, double ZHalfLength, double SPhi, double DPhi);
-
-  //	Returns the volume of the shape, for mass inventory
-  virtual double volume () const;
-
-  //	Returns the TUBS shape type, as a string.
-  virtual const std::string & type () const;
-
-  //	Returns the TUBS shape type, as a coded integer.
-  virtual ShapeType typeID () const;
-
-  //	Executes a GeoShapeAction
-  virtual void exec (GeoShapeAction *action) const;
-
-  //	For type identification.
-  static const std::string& getClassType ();
-
-  //	For type identification.
-  static ShapeType getClassTypeID ();
-
-  //	Minimum (inner) tube section radius.
-  const double& getRMin () const;
-
-  //	Maximum (outer) tube section radius.
-  const double& getRMax () const;
-
-  //	Tube section half-length in the z direction.
-  const double& getZHalfLength () const;
-
-  //	Starting angle of the tube section in radians.
-  const double& getSPhi () const;
-
-  //	Delta angle of the tube section in radians.
-  const double& getDPhi () const;
-
- protected:
-  virtual ~GeoTubs();
-
- private:
-  GeoTubs(const GeoTubs &right);
-  GeoTubs & operator=(const GeoTubs &right);
-
-  static const std::string s_classType;
-  static const ShapeType s_classTypeID;
-
-  double m_rMin;
-  double m_rMax;
-  double m_zHalfLength;
-  double m_sPhi;
-  double m_dPhi;
-
-};
-
-inline const std::string& GeoTubs::getClassType ()
-{
-  return s_classType;
-}
-
-inline ShapeType GeoTubs::getClassTypeID ()
-{
-  return s_classTypeID;
-}
-
-inline const double& GeoTubs::getRMin () const
-{
-  return m_rMin;
-}
-
-inline const double& GeoTubs::getRMax () const
-{
-  return m_rMax;
-}
-
-inline const double& GeoTubs::getZHalfLength () const
-{
-  return m_zHalfLength;
-}
-
-inline const double& GeoTubs::getSPhi () const
-{
-  return m_sPhi;
-}
-
-inline const double& GeoTubs::getDPhi () const
-{
-  return m_dPhi;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVAlignmentStore.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVAlignmentStore.h
deleted file mode 100755
index f561eb284af4d3c9ca63cb56780752b212227488..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVAlignmentStore.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVALIGNMENTSTORE_H
-#define GEOMODELKERNEL_GEOVALIGNMENTSTORE_H
-
-/**
- * @class GeoVAlignmentStore
- *
- * @brief Abstract base class for GeoModel alignment stores
- * The interface allows to store/retrieve transformations that serve as:
- *   1. Delta-s of Alignable Transforms
- *   2. Abs positions of Full Physical Volumes
- *   3. Def Abs positions of Full Physical Volumes
- */
-
-class GeoAlignableTransform;
-class GeoVFullPhysVol;
-namespace HepGeom {
-  class Transform3D;
-}
-
-class GeoVAlignmentStore
-{
- public:
-  GeoVAlignmentStore() {}
-  virtual ~GeoVAlignmentStore() {}
-  
-  virtual void setDelta(const GeoAlignableTransform*, const HepGeom::Transform3D&) = 0;
-  virtual const HepGeom::Transform3D* getDelta(const GeoAlignableTransform*) const = 0;
-
-  virtual void setAbsPosition(const GeoVFullPhysVol*, const HepGeom::Transform3D&) = 0;
-  virtual const HepGeom::Transform3D* getAbsPosition(const GeoVFullPhysVol*) const = 0;
-
-  virtual void setDefAbsPosition(const GeoVFullPhysVol*, const HepGeom::Transform3D&) = 0;
-  virtual const HepGeom::Transform3D* getDefAbsPosition(const GeoVFullPhysVol*) const = 0;
-
-};
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorElement.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorElement.h
deleted file mode 100755
index 4bfb10d7e742e35a449201d88d9cec99b4dbf80c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorElement.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVDETECTORELEMENT_H
-#define GEOMODELKERNEL_GEOVDETECTORELEMENT_H
-
-/**
- * @class GeoVDetectorElement
- *
- * @brief A GeoVDetectorElement is a piece of readout geometry.
- *	This is an abstract base class for readout objects which
- *	have a distinct association to a piece of physical
- *	geometry and whose position we track by specifying a
- *	Euclidean transformation w.r.t global coordinates. level
- *	that one can keep track of with Euclidean
- *	transformations.  Examples:
- *
- *	* silicon wafers (not strips or pixels!)
- *	* calorimeter modules (not cells!)
- */
-
-#include "GeoModelKernel/GeoVFullPhysVol.h"
-class Identifier;
-
-class GeoVDetectorElement 
-{
- public:
-  GeoVDetectorElement (const GeoVFullPhysVol* fullPhysVol);
-  virtual ~GeoVDetectorElement();
-
-  //	Returns a pointer to a physical volume which is
-  //	associated with this detector element.
-  const GeoVFullPhysVol* getMaterialGeom () const;
-
- private:
-  GeoVDetectorElement(const GeoVDetectorElement &right);
-  GeoVDetectorElement & operator=(const GeoVDetectorElement &right);
-
- private:
-  const GeoVFullPhysVol *m_materialGeom;
-
-};
-
-inline const GeoVFullPhysVol* GeoVDetectorElement::getMaterialGeom () const
-{
-  return m_materialGeom;
-}
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorFactory.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorFactory.h
deleted file mode 100755
index 55e508910360b24f67c7bf3af8a1930c4c5a8608..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorFactory.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVDETECTORFACTORY_H
-#define GEOMODELKERNEL_GEOVDETECTORFACTORY_H
-
-/**
- * @class: GeoVDetectorFactory
- *
- * @brief Abstact Base Class for a detector factory.  The detector
- *	factory builds the geometry and creates a GeoDetector
- *	Manager, which one may thereafter query for all raw
- *	geometry, and all readout geometry.
- */
-
-#include "GeoModelKernel/GeoVPhysVol.h"
-
-class GeoPhysVol;
-class GeoVDetectorManager;
-
-class GeoVDetectorFactory 
-{
- public:
-  GeoVDetectorFactory();
-  virtual ~GeoVDetectorFactory();
-
-  //	Create the system.
-  virtual void create (GeoPhysVol* world) = 0;
-
-  //	Access to the Detector Manager.  When implementing this
-  //	method, please use the covariant return type mechanism.
-  virtual const GeoVDetectorManager* getDetectorManager () const = 0;
-
- private:
-  GeoVDetectorFactory(const GeoVDetectorFactory &right);
-  GeoVDetectorFactory & operator=(const GeoVDetectorFactory &right);
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorManager.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorManager.h
deleted file mode 100755
index 0526ce30954ac4461f82b74f2043f1245928c1f4..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVDetectorManager.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVDETECTORMANAGER_H
-#define GEOMODELKERNEL_GEOVDETECTORMANAGER_H
-
-/**
- * @class GeoVDetectorManager
- *
- * @brief This class is the Manager for each detector. It has two
- *	required query mechanism:  one for "tree tops" (These
- *	are top level pieces of raw geometry; there may be one
- *	or more of these), and another one for detector
- *	elements, which represent readout units.
- *
- *	Subsystems engineers should override this.  They may in
- *	addition add their own query mechanisms to their
- *	interface.
- *	They may in fact add anything else they require to their
- *	interface.
- */
-
-#include "GeoModelKernel/GeoVPhysVol.h"
-
-class GeoVDetectorElement;
-
-class GeoVDetectorManager 
-{
- public:
-  GeoVDetectorManager();
-  virtual ~GeoVDetectorManager();
-
-  //	Returns the number of Tree Tops (Top Level Physicsl
-  //	Volumes)
-  virtual unsigned int getNumTreeTops () const = 0;
-
-  //	Access to the Tree Top
-  virtual PVConstLink getTreeTop (unsigned int i) const = 0;
-  
-  const std::string & getName() const;
-  void                setName(const std::string & name);
-
- private:
-  GeoVDetectorManager(const GeoVDetectorManager &right);
-  GeoVDetectorManager & operator=(const GeoVDetectorManager &right);
-
-  std::string m_name;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVFullPhysVol.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVFullPhysVol.h
deleted file mode 100755
index 193e52a545356595feb76cc27594df3ba0558c9b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVFullPhysVol.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVFULLPHYSVOL_H
-#define GEOMODELKERNEL_GEOVFULLPHYSVOL_H
-
-#include "GeoModelKernel/GeoVPhysVol.h"
-#include "GeoModelKernel/GeoAbsPositionInfo.h"
-
-class GeoVAlignmentStore;
-
-// To Do: consider dropping it from the class hierarchy?
-class GeoVFullPhysVol : public GeoVPhysVol 
-{
- public:
-  GeoVFullPhysVol(const GeoLogVol* logVol);
-
-  GeoVFullPhysVol(const GeoVFullPhysVol &right) = delete;
-  GeoVFullPhysVol & operator=(const GeoVFullPhysVol &right) = delete;
-
-  /// Returns the absolute transform of the volume.
-  const HepGeom::Transform3D& getAbsoluteTransform(GeoVAlignmentStore* store=nullptr) const;
-
-  /// Clears the position information.  This can be used if
-  /// the cache is determined to be invalid.  The usual client
-  /// is one of the parents, upon changing its own position.
-  /// There is little need for casual users to call this.
-  void clearPositionInfo() const;
-
-  /// Returns the default absolute transform of the volume.
-  const HepGeom::Transform3D& getDefAbsoluteTransform(GeoVAlignmentStore* store=nullptr) const;
-
-  /// Returns the absolute name of this node.
-  const std::string& getAbsoluteName();
-
-  /// Returns the identification bits.
-  unsigned int getId() const;
-
- protected:
-  virtual ~GeoVFullPhysVol() override;
-
- private:
-  /// The absolute name of this volume.
-  std::string m_absName;
-
-  /// An identifier. This is locally cached in a full physical volume.
-  mutable Query<int> *m_id;
-
-  /// Information on the where this volume is, by default and after alignment corrections.      
-  mutable GeoAbsPositionInfo *m_absPosInfo;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVPhysVol.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVPhysVol.h
deleted file mode 100755
index 63170791260c4818a3c1c2c1dfd0e03fbc6f4ccc..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVPhysVol.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVPHYSVOL_H
-#define GEOMODELKERNEL_GEOVPHYSVOL_H
-
-#include "GeoModelKernel/GeoPVLink.h"
-#define SMARTLINKS
-#ifdef  SMARTLINKS
-typedef GeoPVLink PVLink;
-typedef GeoPVConstLink PVConstLink;
-#else
-class GeoVPhysVol;
-typedef GeoVPhysVol *PVLink;
-typedef const GeoVPhysVol *PVConstLink;
-#endif
-#include "CLHEP/Geometry/Transform3D.h"
-#include "GeoModelKernel/Query.h"
-#include <string>
-
-#include "GeoModelKernel/GeoLogVol.h"
-#include "GeoModelKernel/GeoGraphNode.h"
-
-class GeoVolumeAction;
-class GeoVAlignmentStore;
-
-class GeoVPhysVol : public GeoGraphNode
-{
- public:
-  GeoVPhysVol(const GeoLogVol* LogVol);
-  
-  GeoVPhysVol(const GeoVPhysVol &right) = delete;
-  GeoVPhysVol & operator=(const GeoVPhysVol &right) = delete;
-
-  /// Returns true if the physical volume is accessed by more than one parent.
-  /// Should check this before trusting the parent pointer.
-  bool isShared() const;
-
-  /// Returns the index of a specific daughter volume.  The Query class can be used
-  /// just like an unsigned int, but it provides and isValid() method to determine
-  /// whether it is valid and throws an exception if an invalid value is blithely used.
-  Query<unsigned int> indexOf(PVConstLink daughter) const;
-
-  /// Gets the parent, if the parent is unique, and otherwise returns a nullptr pointer.
-  PVConstLink getParent() const;
-
-  /// Returns the logical volume.
-  const GeoLogVol* getLogVol() const;
-
-  /// Returns the number of child physical volumes.
-  virtual unsigned int getNChildVols() const = 0;
-
-  /// Returns the ith child volume
-  virtual PVConstLink  getChildVol(unsigned int index) const = 0;
-
-  /// Returns the transform to the ith volume.
-  virtual HepGeom::Transform3D getXToChildVol(unsigned int index, const GeoVAlignmentStore* store=nullptr) const = 0;
-
-  /// Returns the default transform to the ith volume.
-  virtual HepGeom::Transform3D getDefXToChildVol(unsigned int index, const GeoVAlignmentStore* store=nullptr) const = 0;
-
-  /// Returns the name of the child.
-  virtual std::string getNameOfChildVol(unsigned int i) const = 0;
-
-  /// Applies an action to the volume. The volume executes the action and the applies
-  /// it to the children, either from the top down or the bottom up, depending upon
-  /// the configuration of the action.
-  void apply(GeoVolumeAction* action) const;
-
-  /// When a node is added to a parent in the graph, the node is always notified.
-  /// What happens at that time is up to the node.  Most nodes do not need to do
-  /// anything. Some--the alignable transforms in particular--need to take some
-  /// take some actions, such as adding the parent volume to a list.
-  virtual void dockTo(GeoVPhysVol* parent);
-
-  /// Returns the id of the child.
-  virtual Query<int> getIdOfChildVol(unsigned int i) const = 0;
-
-  /// Returns the number of child physical volumes and Serial Transformers.
-  virtual unsigned int getNChildVolAndST() const = 0;
-
-  virtual HepGeom::Transform3D getX    (const GeoVAlignmentStore* store=nullptr) const = 0;
-  virtual HepGeom::Transform3D getDefX (const GeoVAlignmentStore* store=nullptr) const = 0;
-  virtual unsigned int getNChildNodes() const=0;
-  virtual const GeoGraphNode * const *getChildNode (unsigned int i) const=0;
-  virtual const GeoGraphNode * const *findChildNode(const GeoGraphNode *n) const=0;
-
- protected:
-  virtual ~GeoVPhysVol();
-
- private:
-  /// If one parent           ...pointer=PARENT;
-  /// If no parent            ...pointer=nullptr.
-  /// If more than one parent ...pointer=this;
-  const GeoVPhysVol* m_parentPtr;
-  
-  const GeoLogVol *m_logVol;
-};
-
-inline bool GeoVPhysVol::isShared () const
-{
-  return m_parentPtr == this;
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeAction.h
deleted file mode 100755
index 9a8f387cb5562c1be87199aea6c0fba94c8b95b8..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeAction.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVOLUMEACTION_H
-#define GEOMODELKERNEL_GEOVOLUMEACTION_H
-
-/**
- * @class GeoVolumeAction
- *
- * @brief This type of action sees and traverses a simpler tree of
- *	positioned volumes.  It does not descend into
- *	transformations or other properties, but simply
- *	accumulates their effect into an internal state that can
- *	be accessed during traversal.  That state includes, for
- *	example, the position relative to the parent.
- */
-
-#include "GeoModelKernel/GeoTraversalState.h"
-
-class GeoVolumeAction 
-{
- public:
-  enum Type
-  { TOP_DOWN, BOTTOM_UP };
-
- public:
-  GeoVolumeAction (Type type = TOP_DOWN);
-  virtual ~GeoVolumeAction();
-
-  //	Callback method. Overriden by users.
-  virtual void handleVPhysVol (const GeoVPhysVol *);
-
-  //	Cause the action to terminate.
-  void terminate ();
-
-  //	Determine whether the action should terminate.
-  bool shouldTerminate () const;
-  
-  //	Returns the traversal state.  From this one can get
-  //	placement information about the volume, even if it is a
-  //	shared instance.
-  const GeoTraversalState* getState () const;
-  
-  //	Returns the traversal state, as above.  Non const type.
-  GeoTraversalState* getState ();
-  
-  //	Returns the type: GeoVolumeAction::TOP_DOWN or GeoVolume
-  //	Action::BOTTOM_UP.
-  GeoVolumeAction::Type getType () const;
-  
- private:
-  GeoVolumeAction(const GeoVolumeAction &right);
-  GeoVolumeAction & operator=(const GeoVolumeAction &right);
-  
-  //	This type specifies that the action should be carried
-  //	out from the bottom up or from the top down.
-  Type m_type;
-
-  //	Termination flag; causes an abortion of action execution.
-  bool m_terminate;
-
-  GeoTraversalState m_traversalState;
-  
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeCursor.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeCursor.h
deleted file mode 100755
index de845a1e8bda0dfbf812b2aaacc7464325033456..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoVolumeCursor.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOVOLUMECURSOR_H
-#define GEOMODELKERNEL_GEOVOLUMECURSOR_H
-
-#include "GeoModelKernel/GeoNodeAction.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <vector>
-
-class GeoVAlignmentStore;
-
-class GeoVolumeCursor final : public GeoNodeAction
-{
- public:
-  GeoVolumeCursor (PVConstLink parent, GeoVAlignmentStore* store=nullptr);
-  virtual ~GeoVolumeCursor() override;
- 
-  GeoVolumeCursor(const GeoVolumeCursor &right) = delete;
-  GeoVolumeCursor & operator=(const GeoVolumeCursor &right) = delete;
-
-  /// Advance
-  void next();
-
-  /// Check if we are at the last volume.
-  bool atEnd() const;
-
-  /// Returns the selected physical volume or nullptr if not found.
-  PVConstLink getVolume () const;
-
-  /// Returns the transformation to the volume.
-  HepGeom::Transform3D getTransform () const;
-  
-  /// Returns the default ransformation to the volume.
-  HepGeom::Transform3D getDefTransform () const;
-
-  /// Returns the name of the volume.  From nametag or serial denominator.
-  std::string getName () const;
-      
-  /// Returns the id of the volume.  From the identifier.
-  Query<int> getId () const;
-
-  bool hasAlignableTransform() const;
-
- private:
-  /// Handles a Transform.
-  virtual void handleTransform (const GeoTransform *xform) override;
-
-  /// Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *vol) override;
-
-  /// Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *vol) override;
-
-  /// Handles a Name Tag.
-  virtual void handleNameTag (const GeoNameTag *nameTag) override;
-
-  /// Handles a Serial Denominator.
-  virtual void handleSerialDenominator (const GeoSerialDenominator *sD) override;
-
-  /// Handles a Serial Transformer
-  virtual void handleSerialTransformer (const GeoSerialTransformer  *sT) override;
-
-  /// Handles an Identifier Tag.
-  virtual void handleIdentifierTag (const GeoIdentifierTag *idTag) override;
-
-  /// Handles a Serial Identifier.
-  virtual void handleSerialIdentifier(const GeoSerialIdentifier *sI) override;
-
-  /// Ressucitate (undo terminate)
-  void resuscitate();
-
-
-  PVConstLink                           m_parent;
-  PVConstLink                           m_volume;
-  HepGeom::Transform3D                  m_transform;
-  HepGeom::Transform3D                  m_defTransform;
-  
-  unsigned int                          m_majorIndex;
-  unsigned int                          m_minorIndex;
-  unsigned int                          m_minorLimit;
-  const GeoSerialTransformer           *m_serialTransformer;
-  
-  const GeoNameTag                     *m_nameTag;
-  const GeoSerialDenominator           *m_serialDenominator;
-  const GeoIdentifierTag               *m_idTag;
-  std::vector<const GeoTransform *>     m_pendingTransformList;
-  unsigned int                          m_serialDenomPosition;
-  const GeoSerialIdentifier            *m_serialIdentifier;
-  unsigned int                          m_serialIdentPosition;
-  unsigned int                          m_volCount;
-  
-  bool                                  m_hasAlignTrans;
-
-  GeoVAlignmentStore                   *m_alignStore;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXF.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXF.h
deleted file mode 100755
index 87ff911c0fd65f46b5ce7863a47d58d989f42ff3..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXF.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-//------------------------GeoTransformFunction--------------------------//
-//                                                                      //
-//  GeoTransformFunction, base class for function objects which         //
-//  evaluate to a HepTransform.                                         //
-//                                                                      //
-//----------------------------------------------------------------------//
-#ifndef GEOMODELKERNEL_GEOTRANSFORMFUNCTION_H
-#define GEOMODELKERNEL_GEOTRANSFORMFUNCTION_H
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Argument.hh"
-#include "CLHEP/Geometry/Transform3D.h"
-//-----------------------------------------------------------------------//
-// Exact return type of arithmentic operations.  To the user, the return //
-// type is TRANsFUNCTION, or const GeoXF::Function &.                    //
-//-----------------------------------------------------------------------//
-
-namespace GeoXF
-{
-
-  class Product;
-  class PreMult;
-  class PostMult;
-  class Pow;
-
-
-  class Function
-  {
-
-  public:
-
-    // Default Constructor
-    Function ();
-
-    // Destructor
-    virtual ~ Function ();
-
-    // Function value:  N-dimensional functions must override these:
-    virtual unsigned int dimensionality () const;	//returns 1;
-
-    // Function value
-    virtual HepGeom::Transform3D operator         () (double argument) const = 0;
-    virtual HepGeom::Transform3D operator         () (const Genfun::
-						Argument & argument) const =
-      0;
-
-    // Every function must override this:
-    virtual Function *clone () const = 0;
-
-    // Copy constructor
-      Function (const Function & right);
-
-  private:
-
-    // Assignment operator
-    const Function & operator = (const Function & right);
-
-  };
-
-
-
-
-
-
-  class Pow:public Function
-  {
-
-  public:
-
-    Pow (const HepGeom::Transform3D &, Genfun::GENFUNCTION f);
-
-      virtual ~ Pow ();
-
-    virtual HepGeom::Transform3D operator         () (double argument) const;
-    virtual HepGeom::Transform3D operator         () (const Genfun::
-						Argument & argument) const;
-
-    // Every function must override this:
-    Pow *clone () const;
-
-    // Copy constructor:
-      Pow (const Pow & right);
-
-  private:
-
-    // Assignment operator
-    const Pow & operator = (const Pow & right);
-
-    const HepGeom::Transform3D m_xf;
-    const Genfun::AbsFunction * m_function;
-
-  };
-
-
-
-
-
-  Product operator * (const Function & op1, const Function & op2);
-  PreMult operator * (const HepGeom::Transform3D & xf, const Function & op2);
-  PostMult operator * (const Function & op2, const HepGeom::Transform3D & xf);
-
-
-  // Internally used class:: Product:
-
-  class Product:public Function
-  {
-
-  public:
-
-
-    Product (const Function * arg1, const Function * arg2);
-
-      virtual ~ Product ();
-
-    virtual unsigned int dimensionality () const;
-
-    virtual HepGeom::Transform3D operator         () (double argument) const;
-    virtual HepGeom::Transform3D operator         () (const Genfun::
-						Argument & argument) const;
-
-    // Every function must override this:
-    virtual Product *clone () const;
-
-    // Copy constructor:
-      Product (const Product & right);
-
-    Product& operator= (const Product & right) = delete;
-
-  private:
-
-    const Function *m_arg1;
-    const Function *m_arg2;
-
-  };
-
-  // Internally used class:: PreMult :
-
-  class PreMult:public Function
-  {
-
-  public:
-
-
-    PreMult (const HepGeom::Transform3D & arg1, const Function * arg2);
-
-      virtual ~ PreMult ();
-
-    virtual unsigned int dimensionality () const;
-
-    virtual HepGeom::Transform3D operator         () (double argument) const;
-    virtual HepGeom::Transform3D operator         () (const Genfun::
-						Argument & argument) const;
-
-    // Every function must override this:
-    virtual PreMult *clone () const;
-
-    // Copy constructor:
-    PreMult (const PreMult & right);
-
-    PreMult& operator= (const PreMult & right) = delete;
-
-  private:
-
-    const HepGeom::Transform3D m_arg1;
-    const Function *m_arg2;
-
-  };
-
-  // Internally used class:: PostMult :
-
-  class PostMult:public Function
-  {
-
-  public:
-
-
-    PostMult (const Function * arg1, const HepGeom::Transform3D & arg2);
-
-      virtual ~ PostMult ();
-
-    virtual unsigned int dimensionality () const;
-
-    virtual HepGeom::Transform3D operator         () (double argument) const;
-    virtual HepGeom::Transform3D operator         () (const Genfun::
-						Argument & argument) const;
-
-    // Every function must override this:
-    virtual PostMult *clone () const;
-
-    // Copy constructor:
-      PostMult (const PostMult & right);
-
-    PostMult& operator= (const PostMult & right) = delete;
-
-  private:
-
-    const Function *m_arg1;
-    const HepGeom::Transform3D m_arg2;
-
-  };
-
-  typedef const Function & TRANSFUNCTION;
-
-
-
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeometryMap.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeometryMap.h
deleted file mode 100755
index 4f13d91e210c0293a37f19baf8f84068ce0a33fa..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeometryMap.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOMETRYMAP_H
-#define GEOMODELKERNEL_GEOMETRYMAP_H
-#include <string>
-#include "GeoModelKernel/GeoVPhysVol.h"
-
-class GeometryMap {
-  
- public:
-
-  // constructor
-  GeometryMap();
-  
-  // Destructor;
-  ~GeometryMap();
-
-  GeometryMap (const GeometryMap&) = delete;
-  GeometryMap& operator= (const GeometryMap&) = delete;
-
-  // Add a name to the list of designated volumes:  Can use wildcards.
-  void add(const std::string & name);
-  
-  // Create the map; this will maintain a list of all volumes matching
-  // the expressions under the given physical volume.
-  void finalize(PVConstLink pv);
-
-  
-  // For iteration:
-  typedef std::vector<PVConstLink>::const_iterator Iterator;
-
-  Iterator begin() const;
-  Iterator end() const;
-
- private:
-
-  class Clockwork;
-  Clockwork *m_c;
-  
-};
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Path.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Path.h
deleted file mode 100755
index c9604266ef0218e0b95abc8f81d749a6f2a6313a..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Path.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_PATH_H
-#define GEOMODELKERNEL_PATH_H
-
-/**
- * @class Path
- * 
- * @brief Represents a path from one point in the general tree, to the present point.
- */
-
-#include <vector>
-#include <cstdlib>
-
-template <class T>
-class Path 
-{
- public:
-  Path();
-  Path(const Path< T > &right);
-  ~Path();
-
-  Path< T > & operator=(const Path< T > &right);
-
-  //	Pops the last node from the stack.
-  const T * pop ();
-  
-  //	Pushes another node on to the tail of the path.
-  void push (const T *node);
-
-  //	Returns the length of the path.
-  unsigned int getLength () const;
-
-  //	Returns the ith Item.
-  const T * getItem (unsigned int i) const;
-
-  //	Gets the head of the path.
-  const T * getHead () const;
-
-  //	Gets the tail of the path.
-  const T * getTail () const;
- 
-  private:
-  //	A list of physical volumes betwee the head of the path
-  //	and the tail of the path.
-  std::vector<const T *> m_nodeList;
-
-};
-
-template <class T>
-inline Path<T>::Path()
-{
-  m_nodeList.reserve(2);
-}
-
-template <class T>
-inline Path<T>::Path(const Path<T> &right)
-  : m_nodeList(right.m_nodeList)
-{
-}
-
-template <class T>
-inline Path<T>::~Path()
-{
-}
-
-template <class T>
-inline Path<T> & Path<T>::operator=(const Path<T> &right)
-{
-  if (this != &right)
-    {
-      m_nodeList = right.m_nodeList;
-    }
-  return *this;
-}
-
-template <class T>
-inline const T * Path<T>::pop ()
-{
-  if (m_nodeList.size () == 0)
-    {
-      return nullptr;
-    }
-  else
-    {
-      const T *gvp = m_nodeList.back ();
-      m_nodeList.pop_back ();
-      return gvp;
-    }
-}
-
-template <class T>
-inline void Path<T>::push (const T *node)
-{
-  m_nodeList.push_back (node);
-}
-
-template <class T>
-inline unsigned int Path<T>::getLength () const
-{
-  return m_nodeList.size ();
-}
-
-template <class T>
-inline const T * Path<T>::getItem (unsigned int i) const
-{
-  if (m_nodeList.size () == 0)
-	{
-      return nullptr;
-    }
-  else
-    {
-      return m_nodeList[i];
-    }
-}
-
-template <class T>
-inline const T * Path<T>::getHead () const
-{
-  if (m_nodeList.size () == 0)
-    {
-      return nullptr;
-    }
-  else
-    {
-      return m_nodeList.front ();
-    }
-}
-
-template <class T>
-inline const T * Path<T>::getTail () const
-{
-  if (m_nodeList.size () == 0)
-    {
-      return nullptr;
-    }
-  else
-    {
-      return m_nodeList.back ();
-    }
-}
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Query.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Query.h
deleted file mode 100755
index 34487da8bef6d2ee206ce475ddade78152b9c0d3..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/Query.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_QUERY_H
-#define GEOMODELKERNEL_QUERY_H
-
-/**
- * @class Query
- *
- * @brief  This class can be used to return the result of a query      
- * that can fail.  Objects of this class can convert themselves to the       
- * result type T.  Client code can check for a valid result; if it doesn't,  
- * and the result is valid, no problem.   But if the result is invalid you   
- * will print an error message and terminate.                                
- *
- * Joe Boudreau
- * based on Barton & Nackman's "Scientific and Engineering C++"              
- */
-
-#include <stdexcept>
-template < class T > class Query
-{
-
-public:
-
-  // Constructor: 
-  inline Query (const T &);
-
-  // Default constructor: 
-  inline Query ();
-
-  // Convert to "T"  
-  inline operator         T () const;
-
-  // Test Validity 
-  inline bool isValid () const;
-
-private:
-
-  bool m_failed;
-  T m_instance;
-
-};
-
-
-template < class T > inline Query < T >::Query (const T & t):
-m_failed (false),
-m_instance (t)
-{
-}
-
-template < class T > inline Query < T >::Query ():
-m_failed (true),
-m_instance (T())
-{
-}
-
-template < class T > inline Query < T >::operator         T () const
-{
-  if (m_failed)
-    throw std::range_error ("Failed query");
-  return m_instance;
-}
-
-template < class T > inline bool Query < T >::isValid () const
-{
-  return !m_failed;
-}
-
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/RCBase.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/RCBase.h
deleted file mode 100755
index 0dfd0b5a9ac1c235b8422a7287fb9fc133395d7f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/RCBase.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
- * @class RCBase
- *
- * @brief This is a base class for objects whose memory is managed
- *	through reference counting.  Reference-counted objects
- *	can only be created using
- *	operator new, the cannot be created on the stack.
- *
- *	The methods ref() and unref() can be called to increase
- *	and decrease the reference count of an object.  When
- *	the reference count decreases to zero, the object deletes
- *	itself
- */
-
-#ifndef GEOMODELKERNEL_RCBASE_H
-#define GEOMODELKERNEL_RCBASE_H
-
-#include <atomic>
-
-class RCBase 
-{
- public:
-  RCBase();
-
-  //	Increase the reference count
-  void ref () const;
-
-  //	Decreases the reference count.  When the reference count
-  //	falls to zero, the object deletes itself.
-  void unref () const;
-
-  //	Return the reference count.
-  unsigned int refCount () const;
-
- protected:
-  virtual ~RCBase();
-
- private:
-  RCBase(const RCBase &right);
-  RCBase & operator=(const RCBase &right);
-
-  //	The reference count
-  mutable std::atomic<unsigned> m_count;
-
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TemplateVolAction.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TemplateVolAction.h
deleted file mode 100755
index 788d81d98583a1610d57aa28707171ed866036bd..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TemplateVolAction.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_TEMPLATEVOLACTION_H
-#define GEOMODELKERNEL_TEMPLATEVOLACTION_H
-
-/**
- * @class TemplateVolAction
- * 
- * @brief An example that does nothing, for people to copy and fill in
- */
-
-#include "GeoModelKernel/GeoVolumeAction.h"
-
-class TemplateVolAction : public GeoVolumeAction
-{
- public:
-  TemplateVolAction();
-  ~TemplateVolAction();
-
-  //	Callback method. Overriden by users.
-  virtual void handleVPhysVol (const GeoVPhysVol *);
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TinyHepTransform.h b/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TinyHepTransform.h
deleted file mode 100755
index f09623d874febea227a2d5dd7e7922284f68bece..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/TinyHepTransform.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef _TINYHEPTRANSFORM_H_
-#define _TINYHEPTRANSFORM_H_
-//-------------------------------------------------------------------------//
-//                                                                         //
-// Tiny HepTransforms  Joe Boudreau September 2003                         //
-//                                                                         //
-// These are essentially alternate representations of HepGeom::Transform3D       //
-// that are designed for memory optimization.                              //
-//                                                                         //
-// This header file includes the following classes:                        //
-//                                                                         //
-// tiny::HepTranslate3D                                                    //
-// tiny::HepTranslateX3D                                                   //
-// tiny::HepTranslateY3D                                                   //
-// tiny::HepTranslateZ3D                                                   //
-// tiny::HepRotate3D                                                       //
-// tiny::HepRotateX3D                                                      //
-// tiny::HepRotateY3D                                                      //
-// tiny::HepRotateZ3D                                                      //
-// tiny::HepReflect3D                                                      //
-// tiny::HepReflectX3D                                                     //
-// tiny::HepReflectY3D                                                     //
-// tiny::HepReflectZ3D                                                     //
-// tiny::HepScale3D                                                        //
-// tiny::HepScale3XD                                                       //
-// tiny::HepScale3YD                                                       //
-// tiny::HepScale3ZD                                                       //
-//                                                                         //
-// tiny::HepGeom::Transform3D                                                    //
-// tiny::HepProperTransform3D                                              //
-//                                                                         //
-// The "Input classes" all contain constructors with the same signature    //
-// as their CLHEP counterparts.  However, they do not store more info      //
-// than what they need; for example, HepTranslateZ3D stores just one       //
-// floating point number. However it can cast itself to a HepGeom::Transform3D   //
-// and so can be used exactly as a regular HepGeom::Transform3D.  (Sometimes     //
-// you will need explicit casts in order to coax this behaviour).          //
-//                                                                         //
-// The "output classes" can be assigned the value of the HepGeom::Transform3D    //
-// but store it in a memory-optimized way.  Six floats for a proper        //
-// transform and nine floats for a transform with scaling.  In case        //
-// an improper CLHEP Transform is assigned to a tiny transform, a run      //
-// time error will occur.                                                  //
-//                                                                         //
-//-------------------------------------------------------------------------//
-
-#include "CLHEP/Geometry/Point3D.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include <iostream> 
-#include <stdexcept>
-
-namespace tiny { 
-
-  class Transform {
-
-  public:
-    
-    virtual operator ::HepGeom::Transform3D() const = 0;
-
-  };
-
-  
-  class HepReflectX3D: public Transform {
-
-  public:
-
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepReflectX3D();
-    }
-
-  };
-
-  class HepReflectY3D: public Transform {
-
-  public:
-
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepReflectY3D();
-    }
-
-  };
-
-  class HepReflectZ3D: public Transform {
-
-  public:
-
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepReflectZ3D();
-    }
-
-  };
-
-  class HepTranslateX3D: public Transform {
-
-  public:
-
-    inline HepTranslateX3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepTranslateX3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepTranslateY3D: public Transform {
-
-  public:
-
-    inline HepTranslateY3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepTranslateY3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepTranslateZ3D: public Transform {
-
-  public:
-
-    inline HepTranslateZ3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepTranslateZ3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepScaleX3D: public Transform {
-
-  public:
-
-    inline HepScaleX3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepScaleX3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepScaleY3D: public Transform {
-
-  public:
-
-    inline HepScaleY3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepScaleY3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepScaleZ3D: public Transform {
-
-  public:
-
-    inline HepScaleZ3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepScaleZ3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepRotateX3D: public Transform {
-
-  public:
-
-    inline HepRotateX3D(double a):
-      _a(a) {}
-    
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepRotateX3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepRotateY3D: public Transform {
-
-  public:
-
-    inline HepRotateY3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepRotateY3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-  class HepRotateZ3D: public Transform {
-
-  public:
-
-    inline HepRotateZ3D(double a):
-      _a(a) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepRotateZ3D(_a);
-    }
-
-  private:
-
-    float _a;
-
-  };
-
-
-
-  class HepRotate3D: public Transform {
-
-  public:
-
-    inline HepRotate3D(const CLHEP::HepRotation &m) {
-      double angle;
-      CLHEP::Hep3Vector axis;
-      m.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      ax=axis.x(); ay = axis.y(); az=axis.z();
-      
-    }
-
-    inline HepRotate3D(double a, const HepGeom::Vector3D<double> & v) {
-      CLHEP::Hep3Vector axis=v;
-      axis.setMag(a);
-      ax=axis.x(); ay=axis.y(); az=axis.z();
-    }
-
-    inline HepRotate3D(double a, 
-		       const HepGeom::Point3D<double> & p1,
-		       const HepGeom::Point3D<double> & p2) {
-      ::HepRotate3D tmp(a, p1, p2);
-      const CLHEP::HepRotation & m = tmp.getRotation();
-      double angle;
-      CLHEP::Hep3Vector axis;
-      m.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      ax=axis.x(); ay = axis.y(); az=axis.z();
-    }
-
-    inline HepRotate3D(const HepGeom::Point3D<double> & fr1, 
-		       const HepGeom::Point3D<double> & fr2,
-		       const HepGeom::Point3D<double> & to1,
-		       const HepGeom::Point3D<double> & to2) {
-      ::HepRotate3D tmp(fr1, fr2, to1, to2);
-      const CLHEP::HepRotation & m = tmp.getRotation();
-      double angle;
-      CLHEP::Hep3Vector axis;
-      m.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      ax=axis.x(); ay = axis.y(); az=axis.z();
-    }
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepRotate3D(sqrt(ax*ax+ay*ay+az*az), HepGeom::Vector3D<double> (ax,ay,az));
-    }
-
-  private:
-
-    float ax, ay, az;
-
-  };
-
-  class HepTranslate3D: public Transform {
-
-  public:
-    inline HepTranslate3D (const CLHEP::Hep3Vector & v):
-    ax(v.x()),ay(v.y()), az(v.z()){}
-
-    inline HepTranslate3D (double dx, double dy, double dz):
-      ax(dx),ay(dy),az(dz) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepTranslate3D(ax,ay,az);
-    }
-
-  private:
-    float ax, ay, az;
-  };
-
-  class HepScale3D: public Transform {
-
-  public:
-
-    inline HepScale3D (double s):
-    ax(s),ay(s), az(s){}
-
-    inline HepScale3D (double sx, double sy, double sz):
-      ax(sx),ay(sy),az(sz) {}
-    
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepScale3D(ax,ay,az);
-    }
-
-  private:
-    float ax, ay, az;
-  };
-
-  class HepReflect3D: public Transform {
-
-  public:
-    
-    inline HepReflect3D(double a, double b, double c, double d) {
-      double mag = sqrt(a*a+b*b+c*c);
-      d  = d/mag;
-      ax = d*a/mag; 
-      ay = d*b/mag;
-      az = d*c/mag;
- 
-    }
-
-    inline HepReflect3D(const HepGeom::Normal3D<double> & normal,
-			const HepGeom::Point3D<double> & point) {
-      HepGeom::Normal3D<double> nNorm=normal;
-      nNorm.setMag(1.0);
-      double d = nNorm*point;
-      nNorm.setMag(d);
-    }
-
-    virtual operator ::HepGeom::Transform3D() const {
-      double mag = sqrt(ax*ax+ay*ay+az*az);
-      return ::HepReflect3D(ax/mag,ay/mag,az/mag ,mag);
-    }
-
-  private:
-    float ax, ay, az;
-  };
-
-
-  class HepProperTransform3D: public Transform {
-
-  public:
-    
-    inline HepProperTransform3D():
-      tx(0),ty(0), tz(0), rx(0), ry(0), rz(0) {}
-
-
-    inline HepProperTransform3D(const ::HepGeom::Transform3D & source) {
-      HepGeom::Scale3D     scale;
-      HepGeom::Rotate3D    rotate;
-      HepGeom::Translate3D translate;
-      
-      source.getDecomposition(scale, rotate, translate);
-      const double EPS=5E-5;
-      if (fabs(scale.xx()-1.0)>EPS || fabs(scale.yy()-1.0)>EPS || fabs(scale.zz()-1.0)>EPS) {
-
-	throw std::range_error("tiny::HepProperTransform3D detects an improper transformation (scaling or reflection)");
-      }
-      
-      double angle;
-      CLHEP::HepRotation rotation( HepRep3x3(rotate.xx(), rotate.xy(), rotate.xz(),
-						    rotate.yx(), rotate.yy(), rotate.yz(),
-						    rotate.zx(), rotate.zy(), rotate.zz()));
-      CLHEP::Hep3Vector axis;
-      rotation.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      rx=axis.x(); ry = axis.y(); rz=axis.z();      
-      
-      tx = translate.dx();
-      ty = translate.dy();
-      tz = translate.dz();
-
-    }
-
-    inline const HepProperTransform3D & operator = (const ::HepGeom::Transform3D & source) {
-      HepGeom::Scale3D     scale;
-      HepGeom::Rotate3D    rotate;
-      HepGeom::Translate3D translate;
-      
-      source.getDecomposition(scale, rotate, translate);
-      const double EPS=5E-5;
-      if (fabs(scale.xx()-1.0)>EPS || fabs(scale.yy()-1.0)>EPS || fabs(scale.zz()-1.0)>EPS) {
-	throw std::range_error("tiny::HepProperTransform3D detects an improper transformation (scaling or reflection)");
-      }
-      
-      double angle;
-      CLHEP::HepRotation rotation( HepRep3x3(rotate.xx(), rotate.xy(), rotate.xz(),
-						    rotate.yx(), rotate.yy(), rotate.yz(),
-						    rotate.zx(), rotate.zy(), rotate.zz()));
-      CLHEP::Hep3Vector axis;
-      rotation.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      rx=axis.x(); ry = axis.y(); rz=axis.z();      
-      
-      tx = translate.dx();
-      ty = translate.dy();
-      tz = translate.dz();
-      return *this;
-    }
-  
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepGeom::Transform3D(CLHEP::CLHEP::HepRotation(CLHEP::Hep3Vector(rx,ry,rz),sqrt(rx*rx+ry*ry+rz*rz)),
-			      CLHEP::Hep3Vector(tx,ty,tz));
-    }
-
-  private:
-    
-    float tx, ty, tz;
-    float rx, ry, rz;
-
-  };
-
-
-  class HepGeom::Transform3D: public Transform {
-
-  public:
-    
-    inline HepGeom::Transform3D():
-      tx(0),ty(0), tz(0), rx(0), ry(0), rz(0), sx(0), sy(0), sz(0) {}
-
-
-    inline HepGeom::Transform3D(const ::HepGeom::Transform3D & source) {
-      HepGeom::Scale3D     scale;
-      HepGeom::Rotate3D    rotate;
-      HepGeom::Translate3D translate;
-      
-      source.getDecomposition(scale, rotate, translate);
-      
-      double angle;
-      CLHEP::HepRotation rotation( HepRep3x3(rotate.xx(), rotate.xy(), rotate.xz(),
-						    rotate.yx(), rotate.yy(), rotate.yz(),
-						    rotate.zx(), rotate.zy(), rotate.zz()));
-      CLHEP::Hep3Vector axis;
-      rotation.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      rx=axis.x(); ry = axis.y(); rz=axis.z();      
-      
-      tx = translate.dx();
-      ty = translate.dy();
-      tz = translate.dz();
-      
-      sx = scale.xx();
-      sy = scale.yy();
-      sz = scale.zz();
-
-    }
-
-    inline const HepGeom::Transform3D & operator = (const ::HepGeom::Transform3D & source) {
-      HepGeom::Scale3D     scale;
-      HepGeom::Rotate3D    rotate;
-      HepGeom::Translate3D translate;
-      
-      source.getDecomposition(scale, rotate, translate);
-      
-      double angle;
-      CLHEP::HepRotation rotation( HepRep3x3(rotate.xx(), rotate.xy(), rotate.xz(),
-						    rotate.yx(), rotate.yy(), rotate.yz(),
-						    rotate.zx(), rotate.zy(), rotate.zz()));
-      CLHEP::Hep3Vector axis;
-      rotation.getAngleAxis(angle, axis);
-      axis.setMag(angle);
-      rx=axis.x(); ry = axis.y(); rz=axis.z();      
-      
-      tx = translate.dx();
-      ty = translate.dy();
-      tz = translate.dz();
-
-      sx = scale.xx();
-      sy = scale.yy();
-      sz = scale.zz();
-
-      return *this;
-    }
-  
-    virtual operator ::HepGeom::Transform3D() const {
-      return ::HepGeom::Transform3D(CLHEP::CLHEP::HepRotation(CLHEP::Hep3Vector(rx,ry,rz),sqrt(rx*rx+ry*ry+rz*rz)),
-			      CLHEP::Hep3Vector(tx,ty,tz))*HepGeom::Scale3D(sx,sy,sz);
-    }
-
-  private:
-    
-    float tx, ty, tz;
-    float rx, ry, rz;
-    float sx, sy, sz;
-  };
-
-}
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/doc/packagedoc.h b/DetectorDescription/GeoModel/GeoModelKernel/doc/packagedoc.h
deleted file mode 100644
index e7b866ef33c6744996982ed2b1835bb5f409af77..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/doc/packagedoc.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
-
-
-@page GeoModelKernel_page 
-
-The package contains kernel classes of the GeoModel toolkit: physical and logical volumes,
-shapes, transformations, parameterized volumes, volume identifiers, actions.
-
---------------------------------
-  REQUIREMENTS 
---------------------------------
-
-
-*/
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/BooleanProcessor.src b/DetectorDescription/GeoModel/GeoModelKernel/src/BooleanProcessor.src
deleted file mode 100755
index 1e6107984976018ac679bb9649e6934fcebaf45a..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/BooleanProcessor.src
+++ /dev/null
@@ -1,2109 +0,0 @@
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor                            Date:    10.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Internal class for executing boolean operations           *
- *           on Polyhedra                                              *
- *                                                                     *
- * G.Barrand, 27/03/2001 :                                             *
- *   triangulateContour : the pnext logic does not work. The           *
- *   push_backs in the edge list reshuffle the addresses !             *
- *   Problem detected on Windows.                                      *
- *                                                                     *
- ***********************************************************************/
-#define ExtNode          Geo_ExtNode
-#define ExtEdge          Geo_ExtEdge
-#define ExtFace          Geo_ExtFace
-#define FaceList         Geo_FaceList
-#define ExtPolyhedron    Geo_ExtPolyhedron
-#define BooleanProcessor Geo_BooleanProcessor
-
-
-#define INITIAL_SIZE 200
-#define CRAZY_POINT  HVPoint3D(-10.e+6, -10.e+6, -10.e+6)
-#define GRANULARITY  (10.e+5)
-
-#define SWAP(A,B) w = A; A = B; B = w
-
-#define OP_UNION         0    // Operations
-#define OP_INTERSECTION  1
-#define OP_SUBTRACTION   2
-
-#define OUT_OF_PLANE     0    // Face vs face statuses
-#define ON_PLANE         1
-#define INTERSECTION     2
-#define EDGE             3
-#define NON_PLANAR_FACE  4
-
-#define UNKNOWN_FACE     0    // Face statuses 
-#define ORIGINAL_FACE   -1
-#define NEW_FACE        -2
-#define UNSUITABLE_FACE -3
-#define DEFECTIVE_FACE  -4
-
-
-// ---------------------------------------------------- Extended node ---
-class ExtNode {
- public:
-  HVPoint3D v;
-  int        s;
-
- public: 
-  ExtNode():s(0) {} //G.Barrand
-  ExtNode(HVPoint3D vertex, int status=0) : v(vertex), s(status) {}
-  ~ExtNode() {}
-
-  ExtNode(const ExtNode & node) : v(node.v), s(node.s) {}
-
-  ExtNode & operator=(const ExtNode & node)
-  {
-    if (this != &node) {
-      v = node.v;
-      s = node.s;
-    }
-    return *this;
-  }
-};
-
-// ---------------------------------------------------- Extended edge ---
-class ExtEdge {
- public:
-  int       i1, i2;           // end points
-  int       iface1;           // native face
-  int       iface2;           // neighbouring face
-  int       ivis;             // visibility: +1 (visible), -1 (invisible)
-  int       inext;            // index of next edge 
-
- public:
-  ExtEdge(int k1=0, int k2=0, int kface1=0, int kface2=0, int kvis=0) :
-    i1(k1), i2(k2), iface1(kface1), iface2(kface2), ivis(kvis), inext(0) {}
-
-  ~ExtEdge() {};
-
-  ExtEdge(const ExtEdge & edge) :
-    i1(edge.i1), i2(edge.i2), iface1(edge.iface1), iface2(edge.iface2),
-    ivis(edge.ivis), inext(edge.inext) {}
-
-  ExtEdge & operator=(const ExtEdge & edge) {
-    i1     = edge.i1;
-    i2     = edge.i2;
-    iface1 = edge.iface1;
-    iface2 = edge.iface2;
-    ivis   = edge.ivis;
-    inext  = edge.inext;
-    return *this;
-  }
-
-  void invert() {
-    int w;
-    SWAP(i1, i2);
-  }
-};
-
-// ---------------------------------------------------- Extended face ---
-class ExtFace {
- public:
-  int        iedges[4];        // indices of original edges
-  HVPlane3D plane;            // face plane
-  double     rmin[3], rmax[3]; // bounding box
-  int        iold;             // head of the list of the original edges
-  int        inew;             // head of the list of the new edges
-  int        iprev;            // index of previous face 
-  int        inext;            // index of next face 
-
- public:
-  ExtFace(int iedge=0) : iold(iedge), inew(0), iprev(0), inext(0) 
-  {
-     int i;
-     for (i=0; i<4; i++) { iedges[i] = 0; }
-     for (i=0; i<3; i++) { rmin[i] = 0.; rmax[i] = 0.; }
-  }
-  ~ExtFace() {}
-
-  ExtFace(const ExtFace & face) :
-    plane(face.plane), iold(face.iold), inew(face.inew),
-    iprev(face.iprev), inext(face.inext)
-  { 
-    int i;
-    for (i=0; i<4; i++) { iedges[i] = face.iedges[i]; }
-    for (i=0; i<3; i++) { rmin[i] = face.rmin[i]; rmax[i] = face.rmax[i]; }
-  }
-
-  ExtFace & operator=(const ExtFace & face) {
-    int i;
-    for (i=0; i<4; i++) { iedges[i] = face.iedges[i]; }
-    plane  = face.plane;
-    for (i=0; i<3; i++) { rmin[i] = face.rmin[i]; rmax[i] = face.rmax[i]; }
-    iold   = face.iold;
-    inew   = face.inew;
-    iprev  = face.iprev;
-    inext  = face.inext;
-    return *this;
-  }
-
-  void invert();
-};
-
-// ---------------------------------------------------- Global arrays ---
-static std::vector<ExtNode> nodes;        // vector of nodes
-static std::vector<ExtEdge> edges;        // vector of edges
-static std::vector<ExtFace> faces;        // vector of faces
-
-// ---------------------------------------------------- List of faces ---
-class FaceList {
- private:
-  int m_ihead;
-  int m_ilast;
-
- public:
-  FaceList() : m_ihead(0), m_ilast(0) {}
-  ~FaceList() {}
-
-  void clean() { m_ihead = 0; m_ilast = 0; }  
-  int front()  { return m_ihead; }
-
-  void push_back(int i) {
-    if (m_ilast == 0) { m_ihead = i; } else { faces[m_ilast].inext = i; } 
-    faces[i].iprev = m_ilast;
-    faces[i].inext = 0;
-    m_ilast = i;
-  }
-
-  void remove(int i) {
-    if (m_ihead == i) {
-      m_ihead = faces[i].inext;
-    }else{
-      faces[faces[i].iprev].inext = faces[i].inext;
-    }
-    if (m_ilast == i) {
-      m_ilast = faces[i].iprev; 
-    }else{
-      faces[faces[i].inext].iprev = faces[i].iprev;
-    }
-    faces[i].iprev = 0;
-    faces[i].inext = 0;
-  }
-};
-
-// --------------------- Polyhedron with extended access to
-//                       its members from the BooleanProcessor class ---
-class ExtPolyhedron : public GeoPolyhedron {
-  friend class BooleanProcessor;
-  virtual GeoPolyhedron& operator = (const GeoPolyhedron& from) {
-    return GeoPolyhedron::operator = (from);
-  }
-};
-
-// ----------------------------------------- Boolean processor class ---
-class BooleanProcessor {
- private:
-  int             m_processor_error;   // is set in case of error
-  int             m_operation;  // 0 (union), 1 (intersection), 2 (subtraction)
-  int             m_ifaces1, m_ifaces2;  // lists of faces
-  int             m_iout1,   m_iout2;    // lists of faces with status "out"
-  double          m_rmin[3], m_rmax[3];  // intersection of bounding boxes
-  double          m_del;               // precision (tolerance)   
-
-  FaceList        m_result_faces;      // list of accepted faces
-  FaceList        m_suitable_faces;    // list of suitable faces
-  FaceList        m_unsuitable_faces;  // list of unsuitable faces
-  FaceList        m_unknown_faces;     // list of unknown faces
-
-  std::vector<int>     m_external_contours; // heads of external contours
-  std::vector<int>     m_internal_contours; // heads of internal contours
-
- private:
-  void   takePolyhedron(const GeoPolyhedron & p, double, double, double);
-  double findMinMax();
-  void   selectOutsideFaces(int & ifaces, int & iout);
-  int    testFaceVsPlane(ExtEdge & edge); 
-  void   renumberNodes(int & i1, int & i2, int & i3, int & i4);
-  int    testEdgeVsEdge(ExtEdge & edge1, ExtEdge & edge2); 
-  void   removeJunkNodes() { while(nodes.back().s != 0) nodes.pop_back(); }
-  void   divideEdge(int & i1, int & i2);
-  void   insertEdge(const ExtEdge & edge);
-  void   caseII(ExtEdge & edge1, ExtEdge & edge2);
-  void   caseIE(ExtEdge & edge1, ExtEdge & edge2);
-  void   caseEE(ExtEdge & edge1, ExtEdge & edge2);
-  void   testFaceVsFace(int iface1, int iface2); 
-  void   invertNewEdges(int iface);
-  void   checkDoubleEdges(int iface);
-  void   assembleFace(int what, int iface);
-  void   assembleNewFaces(int what, int ihead);
-  void   initiateLists();
-  void   assemblePolyhedra();
-  void   findABC(double x1, double y1, double x2, double y2,
-		 double &a, double &b, double &c) const;
-  int    checkDirection(double *x, double *y) const;
-  int    checkIntersection(int ix, int iy, int i1, int i2) const;
-  void   mergeContours(int ix, int iy, int kext, int kint);
-  int    checkTriangle(int iedge1, int iedge2, int ix, int iy) const;
-  void   triangulateContour(int ix, int iy, int ihead);
-  void   modifyReference(int iface, int i1, int i2, int iref);
-  void   triangulateFace(int iface);
-  GeoPolyhedron createPolyhedron();
-
- public:
-  BooleanProcessor(): m_processor_error(0), m_operation(0), m_ifaces1(0), m_ifaces2(0), m_iout1(0), m_iout2(0), m_del(0.)
-  {
-     int i;
-     for (i=0; i<3; i++) { m_rmin[i] = 0.; m_rmax[i] = 0.; }
-  }
-  ~BooleanProcessor() {}
-
-  GeoPolyhedron execute(int op,
-			const GeoPolyhedron &a,
-			const GeoPolyhedron &b);
-
-  void draw();
-  void draw_edge(int, int);
-  void draw_contour(int, int, int);
-  void draw_faces(int, int, int);
-};
-
-inline void ExtFace::invert()
-/***********************************************************************
- *                                                                     *
- * Name: ExtFace::invert()                           Date:    28.02.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Invert face                                               *
- *                                                                     *
- ***********************************************************************/
-{
-  int iEprev, iEcur, iEnext;
-
-  iEprev = 0; iEcur = iold;
-  while (iEcur > 0) {
-    edges[iEcur].invert();
-    iEnext = edges[iEcur].inext;
-    edges[iEcur].inext = iEprev;
-    iEprev = iEcur;
-    iEcur  = iEnext;
-  }
-  if (iold > 0) iold = iEprev;
-
-  iEprev = 0; iEcur = inew;
-  while (iEcur > 0) {
-    edges[iEcur].invert();
-    iEnext = edges[iEcur].inext;
-    edges[iEcur].inext = iEprev;
-    iEprev = iEcur;
-    iEcur  = iEnext;
-  }
-  if (inew > 0) inew = iEprev;
-
-  plane = HVPlane3D(-plane.a(),-plane.b(),-plane.c(), -plane.d());
-}
-
-void BooleanProcessor::takePolyhedron(const GeoPolyhedron & p,
-                                      double dx, double dy, double dz)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::takePolyhedron            Date:    16.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Transfer Polyhedron to internal representation            *
- *                                                                     *
- ***********************************************************************/
-{
-  int i, k, nnode, iNodes[5], iVis[4], iFaces[4];
-  int dnode = nodes.size() - 1;
-  int dface = faces.size() - 1;
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Warray-bounds"
-#endif
-
-  //   S E T   N O D E S
-
-  //  for (i=1; i <= p.GetNoVertices(); i++) {  
-  //    nodes.push_back(ExtNode(p.GetVertex(i)));
-  //  }
-
-  HVPoint3D ppp;	
-  for (i=1; i <= p.GetNoVertices(); i++) {  
-    ppp = p.GetVertex(i);
-    ppp+= HVPoint3D(dx,dy,dz);
-    nodes.push_back(ExtNode(ppp));
-  }
-
-  //   S E T   F A C E S
-
-  for (int iface=1; iface <= p.GetNoFacets(); iface++) {
-    faces.push_back(ExtFace(edges.size()));
-
-    //   S E T   F A C E   N O D E S
-
-    p.GetFacet(iface, nnode, iNodes, iVis, iFaces);
-    for (i=0; i<nnode; i++) {
-      if (iNodes[i] < 1 || iNodes[i] > p.GetNoVertices()) m_processor_error = 1;
-      if (iFaces[i] < 1 || iFaces[i] > p.GetNoFacets())   m_processor_error = 1;
-      iNodes[i] += dnode;
-      iFaces[i] += dface;
-    }
-
-    //   S E T   E D G E S
-
-    iNodes[nnode] = iNodes[0];
-    faces.back().iedges[3] = 0;
-    for (i=0; i<nnode; i++) {
-      faces.back().iedges[i] = edges.size();
-      edges.push_back(ExtEdge(iNodes[i], iNodes[i+1],
-			      iface+dface, iFaces[i], iVis[i]));
-      edges.back().inext     = edges.size();
-    }
-    edges.back().inext = 0;
-
-    //   S E T   F A C E   M I N - M A X
-
-    for (i=0; i<3; i++) {
-      faces.back().rmin[i] = nodes[iNodes[0]].v[i];
-      faces.back().rmax[i] = nodes[iNodes[0]].v[i];
-    }
-    for (i=1; i<nnode; i++) {
-      for (k=0; k<3; k++) {
-	if (faces.back().rmin[k] > nodes[iNodes[i]].v[k])
-	    faces.back().rmin[k] = nodes[iNodes[i]].v[k];
-	if (faces.back().rmax[k] < nodes[iNodes[i]].v[k])
-	    faces.back().rmax[k] = nodes[iNodes[i]].v[k];
-      }
-    }
-
-    //   S E T   F A C E   P L A N E
-
-    HVNormal3D n = (nodes[iNodes[2]].v-nodes[iNodes[0]].v).cross
-                    (nodes[iNodes[3]].v-nodes[iNodes[1]].v);
-    HVPoint3D  point(0,0,0);
-    
-    for (i=0; i<nnode; i++) { point += nodes[iNodes[i]].v; }
-    point *= (1./nnode);
-    HVNormal3D nunit = n/n.mag();
-    faces.back().plane = HVPlane3D(nunit, point);
-
-    //   S E T   R E F E R E N C E   T O   T H E   N E X T   F A C E
-
-    faces.back().inext = faces.size(); 
-  }
-  faces.back().inext = 0; 
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
-}
-
-double BooleanProcessor::findMinMax()
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::findMinMax                Date:    16.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find min-max (bounding) boxes for polyhedra               *
- *                                                                     *
- ***********************************************************************/
-{
-  if (m_ifaces1 == 0 || m_ifaces2 == 0) return 0;
-
-  int    i, iface;
-  double rmin1[3], rmax1[3];
-  double rmin2[3], rmax2[3];
-
-  //   F I N D   B O U N D I N G   B O X E S
-
-  for (i=0; i<3; i++) {
-    rmin1[i] = faces[m_ifaces1].rmin[i];
-    rmax1[i] = faces[m_ifaces1].rmax[i];
-    rmin2[i] = faces[m_ifaces2].rmin[i];
-    rmax2[i] = faces[m_ifaces2].rmax[i];
-  }
-
-  iface = faces[m_ifaces1].inext;
-  while(iface > 0) {
-    for (i=0; i<3; i++) {
-      if (rmin1[i] > faces[iface].rmin[i]) rmin1[i] = faces[iface].rmin[i];
-      if (rmax1[i] < faces[iface].rmax[i]) rmax1[i] = faces[iface].rmax[i];
-    }
-    iface = faces[iface].inext;
-  }
-
-  iface = faces[m_ifaces2].inext;
-  while(iface > 0) {
-    for (i=0; i<3; i++) {
-      if (rmin2[i] > faces[iface].rmin[i]) rmin2[i] = faces[iface].rmin[i];
-      if (rmax2[i] < faces[iface].rmax[i]) rmax2[i] = faces[iface].rmax[i];
-    }
-    iface = faces[iface].inext;
-  }
-
-  //   F I N D   I N T E R S E C T I O N   O F   B O U N D I N G   B O X E S
-
-  for (i=0; i<3; i++) {
-    m_rmin[i] = (rmin1[i] > rmin2[i]) ? rmin1[i] : rmin2[i]; 
-    m_rmax[i] = (rmax1[i] < rmax2[i]) ? rmax1[i] : rmax2[i]; 
-  }
-
-  //   F I N D   T O L E R A N C E
-
-  double del1 = 0;
-  double del2 = 0;
-  for (i=0; i<3; i++) {
-    if ((rmax1[i]-rmin1[i]) > del1) del1 = rmax1[i]-rmin1[i]; 
-    if ((rmax2[i]-rmin2[i]) > del2) del2 = rmax2[i]-rmin2[i]; 
-  }
-  return ((del1 < del2) ? del1 : del2) * (1./GRANULARITY);
-}
-
-void BooleanProcessor::selectOutsideFaces(int & ifaces, int & iout)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::selectOutsideFaces        Date:    10.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Preselection of outside faces                             *
- *                                                                     *
- ***********************************************************************/
-{
-  int i, outflag, iface = ifaces, *prev;
-  HVPoint3D mmbox[8] = {  HVPoint3D(m_rmin[0],m_rmin[1],m_rmin[2]),
-			  HVPoint3D(m_rmax[0],m_rmin[1],m_rmin[2]),
-			  HVPoint3D(m_rmin[0],m_rmax[1],m_rmin[2]),
-			  HVPoint3D(m_rmax[0],m_rmax[1],m_rmin[2]),
-			  HVPoint3D(m_rmin[0],m_rmin[1],m_rmax[2]),
-			  HVPoint3D(m_rmax[0],m_rmin[1],m_rmax[2]),
-			  HVPoint3D(m_rmin[0],m_rmax[1],m_rmax[2]),
-			  HVPoint3D(m_rmax[0],m_rmax[1],m_rmax[2]) };
-  prev = &ifaces;
-  while (iface > 0) {
-
-    //   B O U N D I N G   B O X   vs  B O U N D I N G   B O X 
-
-    outflag = 0;
-    for (i=0; i<3; i++) {
-      if (faces[iface].rmin[i] > m_rmax[i] + m_del) { outflag = 1; break; }
-      if (faces[iface].rmax[i] < m_rmin[i] - m_del) { outflag = 1; break; }
-    }
-
-    //   B O U N D I N G   B O X   vs  P L A N E
-
-    if (outflag == 0) {
-      int npos = 0, nneg = 0;
-      double d;
-      for (i=0; i<8; i++) { 
-
-	const HVVector3D & nm = faces[iface].plane.normal();
-	double          dz = fabs(faces[iface].plane.d());
-        d                  = mmbox[i].dot(nm)-dz;
-	//	d = faces[iface].plane.distance(mmbox[i]);
-	if (d > +m_del) npos++;
-	if (d < -m_del) nneg++;
-      }
-      if (npos == 8 || nneg == 8) outflag = 1;
-    }
-
-    //   U P D A T E   L I S T S
-
-    if (outflag == 1) {
-      *prev = faces[iface].inext;
-      faces[iface].inext = iout;
-      iout = iface;
-    }else{
-      prev = &faces[iface].inext;
-    }
-    iface = *prev;
-  }
-}
-
-int BooleanProcessor::testFaceVsPlane(ExtEdge & edge)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::testFaceVsPlane           Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find result of intersection of face by plane              *
- *                                                                     *
- ***********************************************************************/
-{
-  int        iface = edge.iface1;
-  HVPlane3D  plane = faces[edge.iface2].plane;
-  int        i, nnode, npos = 0, nneg = 0, nzer = 0;
-  double     dd[5];
-
-  //   F I N D   D I S T A N C E S
-
-  nnode = (faces[iface].iedges[3] == 0) ? 3 : 4;
-  for (i=0; i<nnode; i++) {
-
-
-    const HVVector3D & nm = plane.normal();
-    double          dz = fabs(plane.d());
-    dd[i]              = nodes[edges[faces[iface].iedges[i]].i1].v.dot(nm)-dz;
-    //    dd[i] = plane.distance(nodes[edges[faces[iface].iedges[i]].i1].v);
-
-    if (dd[i] > m_del) {
-      npos++; 
-    }else if (dd[i] < -m_del) {
-      nneg++;
-    }else{
-      nzer++; dd[i] = 0;
-    }  
-  }
-
-  //   S O M E   S I M P L E   C A S E S  ( N O   I N T E R S E C T I O N )
-
-  if (npos == nnode || nneg == nnode)   return OUT_OF_PLANE;
-  if (nzer == 1     && nneg == 0)       return OUT_OF_PLANE;
-  if (nzer == 1     && npos == 0)       return OUT_OF_PLANE;
-  if (nzer == nnode)                    return ON_PLANE;
-  if (nzer == 3)                        return NON_PLANAR_FACE;
-
-  //   F I N D   I N T E R S E C T I O N
-
-  int       ie1(0), ie2(0), s1(0), s2(0), status, nint = 0; 
-  enum      { PLUS_MINUS, MINUS_PLUS, ZERO_ZERO, ZERO_PLUS, ZERO_MINUS };
-
-  dd[nnode] = dd[0];
-  for (i=0; i<nnode; i++) {
-    if (dd[i] > 0) {
-      if (dd[i+1] >= 0) continue;
-      status = PLUS_MINUS;
-    }else if (dd[i] < 0) {
-      if (dd[i+1] <= 0) continue;
-      status = MINUS_PLUS;
-    }else{   
-      status = ZERO_ZERO;
-      if (dd[i+1] > 0) status = ZERO_PLUS;
-      if (dd[i+1] < 0) status = ZERO_MINUS;
-    }
-    switch (nint) {
-    case 0:
-      ie1 = i; s1 = status; nint++; break;
-    case 1:
-      ie2 = i; s2 = status; nint++; break;
-    default:
-      return NON_PLANAR_FACE;
-    }
-  }
-  if (nint != 2)                        return NON_PLANAR_FACE;
-
-  //   F O R M   I N T E R S E C T I O N   S E G M E N T
-
-  if (s1 != ZERO_ZERO && s2 != ZERO_ZERO) {
-    if (s1 == s2)                       return NON_PLANAR_FACE;
-    int     iedge, i1(0), i2(0), ii[2];
-    double  d1(0.), d2(0.), dd ;
-    ii[0] = ie1; ii[1] = ie2;
-    for (i=0; i<2; i++) {
-      iedge = faces[iface].iedges[ii[i]];
-      while (iedge > 0) {
-	i1 = edges[iedge].i1;
-	i2 = edges[iedge].i2;
-
-
-	const HVVector3D & nm1 = plane.normal();
-	double          dz1 = fabs(plane.d());
-	d1              = nodes[i1].v.dot(nm1)-dz1;
-
-	const HVVector3D & nm2 = plane.normal();
-	double          dz2 = fabs(plane.d());
-	d2              = nodes[i2].v.dot(nm2)-dz2;
-
-	//	d1 = plane.distance(nodes[i1].v);
-	//      d2 = plane.distance(nodes[i2].v);
-	if (d1 > m_del) {
-	  if (d2 < -m_del) { ii[i] = nodes.size(); break; } // +-
-	}else if (d1 < -m_del) {
-	  if (d2 >  m_del) { ii[i] = nodes.size(); break; } // -+
-	}else{ 
-	  ii[i] = i1; break;                              // 0+ or 0-
-	}
-	iedge = edges[iedge].inext;
-      }
-      if (ii[i] == (int) nodes.size()) {
-	dd = d2-d1; d1 = d1/dd; d2 = d2/dd;
-	nodes.push_back(ExtNode(((float)d2)*nodes[i1].v-((float)d1)*nodes[i2].v, iedge));
-      }  
-    }
-    edge.inext = 0;
-    if (s1 == MINUS_PLUS || s1 == ZERO_PLUS) {
-      edge.i1 = ii[1];
-      edge.i2 = ii[0];
-    }else{
-      edge.i1 = ii[0];
-      edge.i2 = ii[1];
-    }
-    return INTERSECTION;
-  }else{
-    if (npos == nneg)                   return NON_PLANAR_FACE;
-    edge.inext = (s1 == ZERO_ZERO) ? ie1+1 : ie2+1;
-    if (s1 == ZERO_PLUS || s2 == ZERO_MINUS) {
-      edge.i1 = edges[faces[iface].iedges[ie2]].i1;
-      edge.i2 = edges[faces[iface].iedges[ie1]].i1;
-    }else{
-      edge.i1 = edges[faces[iface].iedges[ie1]].i1;
-      edge.i2 = edges[faces[iface].iedges[ie2]].i1;
-    }
-    return EDGE;
-  }
-}
-
-void BooleanProcessor::renumberNodes(int & i1, int & i2, int & i3, int & i4)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::renumberNodes             Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Renumber nodes and remove last temporary node.            *
- *           Remark: In principal this routine can be replaced just    *
- *           with i1 = i2;                                             *
- *           Removal of temporary nodes provides additional control    *
- *           on number of nodes, that is very useful for debugging.    *
- *                                                                     *
- ***********************************************************************/
-{
-  if (i1 == i2) return;
-  if (nodes[i1].s == 0 || nodes.back().s == 0) { i1 = i2; return; }
-
-  int ilast = nodes.size()-1;
-  if (i1 == ilast) { i1 = i2; nodes.pop_back(); return; }
-  if (i2 == ilast) { i2 = i1; }
-  if (i3 == ilast) { i3 = i1; }
-  if (i4 == ilast) { i4 = i1; }
-  nodes[i1] = nodes.back(); i1 = i2; nodes.pop_back();
-}
-
-int BooleanProcessor::testEdgeVsEdge(ExtEdge & edge1, ExtEdge & edge2)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::testEdgeVsEdge            Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find common part of two edges                             *
- *                                                                     *
- ***********************************************************************/
-{
-  int    i, ii = 0;
-  double d, dd = 0.;
-
-  for (i=0; i<3; i++) {
-    d = nodes[edge1.i1].v[i]-nodes[edge1.i2].v[i];
-    if (d < 0.) d = -d; 
-    if (d > dd) { dd = d; ii = i; }
-  }
-  double t1 = nodes[edge1.i1].v[ii];
-  double t2 = nodes[edge1.i2].v[ii];
-  double t3 = nodes[edge2.i1].v[ii];
-  double t4 = nodes[edge2.i2].v[ii];
-  if (t2-t1 < 0.) { t1 = -t1; t2 = -t2; t3 = -t3; t4 = -t4; }
- 
-  if (t3 <= t1+m_del || t4 >= t2-m_del) return 0;
-  if (t3 > t2+m_del) {
-    renumberNodes(edge2.i1, edge1.i2, edge1.i1, edge2.i2);
-  }else if (t3 < t2-m_del) {
-    renumberNodes(edge1.i2, edge2.i1, edge1.i1, edge2.i2);
-  }
-  if (t4 < t1-m_del) {
-    renumberNodes(edge2.i2, edge1.i1, edge1.i2, edge2.i1);
-  }else if (t4 > t1+m_del) {
-    renumberNodes(edge1.i1, edge2.i2, edge1.i2, edge2.i1);
-  }
-  return 1;
-}
-
-void BooleanProcessor::divideEdge(int & i1, int & i2)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::divideEdge                Date:    24.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Unify the nodes and divide edge on two parts by the node. *
- *                                                                     *
- ***********************************************************************/
-{
-  int iedges[2];
-  iedges[0] = nodes[i1].s;
-  iedges[1] = nodes[i2].s;
-
-  //   U N I F Y   N O D E S
-  
-  if      (i1 < i2) { i2 = i1; }
-  else if (i1 > i2) { i1 = i2; }
-  else              { iedges[1] = 0; }  
-  if (iedges[0] == iedges[1]) return;
-
-  int ie1, ie2, inode = i1;
-  nodes[inode].s = 0;
-  for (int i=0; i<2; i++) {
-
-    //   F I N D   C O R R E S P O N D I N G   E D G E
-
-    if ((ie1 = iedges[i]) == 0) continue;
-    ie2 = faces[edges[ie1].iface2].iedges[0];
-    while (ie2 > 0) {
-      if (edges[ie2].i1 == edges[ie1].i2 &&
-	  edges[ie2].i2 == edges[ie1].i1) break;
-      ie2 = edges[ie2].inext;
-    }
-
-    //   D I V I D E   E D G E S
-    
-    edges.push_back(edges[ie1]);
-    edges[ie1].inext = edges.size() - 1;
-    edges[ie1].i2    = inode;
-    edges.back().i1  = inode;
-    
-    edges.push_back(edges[ie2]);
-    edges[ie2].inext = edges.size() - 1;
-    edges[ie2].i2    = inode;
-    edges.back().i1  = inode;
-  } 
-}
-
-void BooleanProcessor::insertEdge(const ExtEdge & edge)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::insertEdge                Date:    24.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Insert edge to the list of new edges                      *
- *                                                                     *
- ***********************************************************************/
-{
-  int iface = edge.iface1;
-  edges.push_back(edge);
-  edges.back().inext = faces[iface].inew;
-  faces[iface].inew  = edges.size() - 1;
-}
-
-void BooleanProcessor::caseII(ExtEdge & edge1, ExtEdge & edge2)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::caseII                    Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Intersection/Intersection case                            *
- *                                                                     *
- ***********************************************************************/
-{
-  divideEdge(edge1.i1, edge2.i2);
-  divideEdge(edge1.i2, edge2.i1);
-  edge1.ivis = 1;
-  edge2.ivis = 1;
-  insertEdge(edge1);
-  insertEdge(edge2);
-}
-
-void BooleanProcessor::caseIE(ExtEdge &, ExtEdge &)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::caseIE                    Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Intersection/Edge-touch case                              *
- *                                                                     *
- ***********************************************************************/
-{
-  m_processor_error = 1;
-  std::cout
-    << "BooleanProcessor::caseIE : unimplemented case"
-    << std::endl;
-}
-
-void BooleanProcessor::caseEE(ExtEdge & , ExtEdge & )
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::caseEE                    Date:    19.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Edge-touch/Edge-touch case                                *
- *                                                                     *
- ***********************************************************************/
-{
-  m_processor_error = 1;
-  std::cout
-    << "BooleanProcessor::caseEE : unimplemented case"
-    << std::endl;
-}
-
-void BooleanProcessor::testFaceVsFace(int iface1, int iface2)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::testFaceVsFace            Date:    11.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find result (an edge) of intersection of two faces        *
- *                                                                     *
- ***********************************************************************/
-{
-  ExtEdge edge1, edge2;
-  int     irep1, irep2;
-
-  //   M I N - M A X
-
-  for (int i=0; i<3; i++) {
-    if (faces[iface1].rmin[i] > faces[iface2].rmax[i] + m_del) return;
-    if (faces[iface1].rmax[i] < faces[iface2].rmin[i] - m_del) return;
-  }
-
-  //   F A C E - 1   vs   P L A N E - 2
-
-  edge1.iface1 = iface1;
-  edge1.iface2 = iface2;
-  irep1        = testFaceVsPlane(edge1); 
-  if (irep1 == OUT_OF_PLANE || irep1 == ON_PLANE) {
-    removeJunkNodes();
-    return;
-  }
-
-  //   F A C E - 2   vs   P L A N E - 1
-
-  edge2.iface1 = iface2;
-  edge2.iface2 = iface1;
-  irep2        = testFaceVsPlane(edge2); 
-  if (irep2 == OUT_OF_PLANE || irep2 == ON_PLANE) {
-    removeJunkNodes();
-    return;
-  }
-
-  //   C H E C K   F O R   N O N P L A N A R   F A C E 
-
-  if (irep1 == NON_PLANAR_FACE || irep2 == NON_PLANAR_FACE) {
-    removeJunkNodes();
-    return;
-  }
-
-  //   F I N D   I N T E R S E C T I O N   P A R T
-
-  if (testEdgeVsEdge(edge1, edge2) == 0) return;
-
-  //   C O N S I D E R   D I F F E R E N T   C A S E S  
-
-  if (irep1 == INTERSECTION && irep2 == INTERSECTION) caseII(edge1, edge2);
-  if (irep1 == INTERSECTION && irep2 == EDGE)         caseIE(edge1, edge2);
-  if (irep1 == EDGE         && irep2 == INTERSECTION) caseIE(edge2, edge1);
-  if (irep1 == EDGE         && irep2 == EDGE)         caseEE(edge1, edge2);
-  removeJunkNodes();
-
-}
-
-void BooleanProcessor::invertNewEdges(int iface)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::invertNewEdges            Date:    04.02.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Invert direction of new edges                             *
- *                                                                     *
- ***********************************************************************/
-{
-  int iedge = faces[iface].inew;
-  while (iedge > 0) {
-    edges[iedge].invert();
-    iedge = edges[iedge].inext;
-  }
-}
-
-void BooleanProcessor::checkDoubleEdges(int)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::checkDoubleEdges          Date:    04.02.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Eliminate duplication of edges                            *
- *                                                                     *
- ***********************************************************************/
-{
-
-}
-
-void BooleanProcessor::assembleFace(int what, int iface)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::assembleFace              Date:    19.02.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Assemble face                                             *
- *                                                                     *
- ***********************************************************************/
-{
-  //   A S S E M B L E   N E W   F A C E 
-
-  int ihead;      // head of the list of edges for new face
-  int icur;       // current edge in the list - last edge inserted to the list
-  int *ilink;     // pointer to the current link 
-  int ifirst;     // first node of a contour
-  int *i;         // pointer to the index of the current edge in a loop
-  int ioldflag=0; // is set if an edge from iold has been taken
-
-#define INSERT_EDGE_TO_THE_LIST(A) \
-*ilink = A; ilink = &edges[A].inext; *ilink = 0
-
-  ilink = &ihead;
-  for(;;) {
-    if (faces[iface].inew == 0) break;
-
-    //   S T A R T   N E W   C O N T O U R
-
-    icur   = faces[iface].inew;
-    faces[iface].inew = edges[icur].inext;
-    INSERT_EDGE_TO_THE_LIST(icur);
-    ifirst = edges[icur].i1; 
-    
-    //   C O N S T R U C T   T H E   C O N T O U R
-
-    for (;;) {
-      i = &faces[iface].inew;
-      while(*i > 0) {
-	if (edges[*i].i1 == edges[icur].i2) break;
-	i = &edges[*i].inext;
-      }
-      if (*i == 0) {
-	i = &faces[iface].iold;
-	while(*i > 0) {
-	  if (edges[*i].i1 == edges[icur].i2) ioldflag = 1;
-	  if (edges[*i].i1 == edges[icur].i2) break;
-	  i = &edges[*i].inext;
-	}
-      }
-      if (*i > 0) {
-	icur = *i;
-	*i = edges[icur].inext;
-	INSERT_EDGE_TO_THE_LIST(icur);
-	if (edges[icur].i2 == ifirst) { break; } else { continue; }
-      }else{
-	m_processor_error = 1;
-	std::cerr
-	  << "BooleanProcessor::assembleFace(" << iface << ") : "
-	  << "could not find next edge of the contour"
-	  << std::endl;
-	faces[iface].inew = DEFECTIVE_FACE;
-	return;
-      }
-    }
-  }
-
-  //   C H E C K   O R I G I N A L   C O N T O U R
-
-  int iedge;
-  iedge = faces[iface].iold;
-  if (what == 0 && ioldflag == 0 && iedge > 0) {
-    for (;;) {
-      if (edges[iedge].inext > 0) {
-	if (edges[iedge].i2 == edges[edges[iedge].inext].i1) {
-	  iedge = edges[iedge].inext;
-	}else{
-	  break;
-	}
-      }else{
-	if (edges[iedge].i2 == edges[faces[iface].iold].i1) {
-	  edges[iedge].inext = ihead;   // set new face
-	  return;
-	}else{
-	  break;
-	}
-      }
-    }
-  }
-
-  //   M A R K   U N S U I T A B L E   N E I G H B O U R I N G   F A C E S
-
-  int iface2;
-  iedge = faces[iface].iold;
-  while(iedge > 0) {
-    iface2 = edges[iedge].iface2;
-    if (faces[iface2].inew == 0) faces[iface2].inew = UNSUITABLE_FACE;
-    iedge = edges[iedge].inext;
-  }
-  faces[iface].iold = ihead;            // set new face
-}
-
-void BooleanProcessor::assembleNewFaces(int what, int ihead)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::assembleNewFaces          Date:    30.01.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Assemble internal or external parts of faces              *
- *                                                                     *
- ***********************************************************************/
-{
-  int iface = ihead;
-  while(iface > 0) {
-    if (faces[iface].inew > 0) {
-      if (what != 0) invertNewEdges(iface);
-      checkDoubleEdges(iface);
-      assembleFace(what, iface);
-      faces[iface].inew =
-	(faces[iface].iold == 0) ? UNSUITABLE_FACE : NEW_FACE;
-    }
-    iface = faces[iface].inext;
-  }
-}
-
-void BooleanProcessor::initiateLists()
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::initiateLists             Date:    28.02.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Initiate lists of faces.                                  *
- *                                                                     *
- ***********************************************************************/
-{
-  int i, iface;
-
-  //   R E S E T   L I S T S   O F   F A C E S
-
-  m_result_faces.clean();
-  m_suitable_faces.clean();
-  m_unsuitable_faces.clean();
-  m_unknown_faces.clean();
-
-  //   I N I T I A T E   T H E   L I S T S
-
-  iface = m_iout1;
-  while (iface > 0) {
-    i     = iface;
-    iface = faces[i].inext;
-    if (m_operation == OP_INTERSECTION) {
-      m_unsuitable_faces.push_back(i);
-      faces[i].inew = UNSUITABLE_FACE;
-    }else{
-      m_suitable_faces.push_back(i);
-      faces[i].inew = ORIGINAL_FACE;
-    }
-  }
-  iface = m_iout2;
-  while (iface > 0) {
-    i     = iface;
-    iface = faces[i].inext;
-    if (m_operation == OP_UNION) {
-      m_suitable_faces.push_back(i);
-      faces[i].inew = ORIGINAL_FACE;
-    }else{
-      m_unsuitable_faces.push_back(i);
-      faces[i].inew = UNSUITABLE_FACE;
-    }
-  }
-  iface = m_ifaces1;
-  while (iface > 0) {
-    i     = iface;
-    iface = faces[i].inext;
-    switch(faces[i].inew) {
-    case UNKNOWN_FACE:
-      m_unknown_faces.push_back(i);
-      break;
-    case ORIGINAL_FACE: case NEW_FACE:
-      m_suitable_faces.push_back(i);
-      break;
-    case UNSUITABLE_FACE:
-      m_unsuitable_faces.push_back(i);
-      break;
-    default:
-      faces[i].iprev = 0;
-      faces[i].inext = 0;
-      break;
-    }
-  }
-  iface = m_ifaces2;
-  while (iface > 0) {
-    i     = iface;
-    iface = faces[i].inext;
-    if (m_operation == OP_SUBTRACTION) faces[i].invert();
-    switch(faces[i].inew) {
-    case UNKNOWN_FACE:
-      m_unknown_faces.push_back(i);
-      break;
-    case ORIGINAL_FACE: case NEW_FACE:
-      m_suitable_faces.push_back(i);
-      break;
-    case UNSUITABLE_FACE:
-      m_unsuitable_faces.push_back(i);
-      break;
-    default:
-      faces[i].iprev = 0;
-      faces[i].inext = 0;
-      break;
-    }
-  }
-  m_ifaces1 = m_ifaces2 = m_iout1 = m_iout2 = 0;
-}
-
-void BooleanProcessor::assemblePolyhedra()
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::assemblePolyhedra()       Date:    10.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Collect suitable faces and remove unsuitable ones.        *
- *                                                                     *
- ***********************************************************************/
-{
-  int i, iedge, iface;
-
-  //   L O O P   A L O N G   S U I T A B L E   F A C E S
-
-  iface = m_suitable_faces.front();
-  while(iface > 0) {
-    i = iface;
-    iedge = faces[i].iold;
-    while(iedge > 0) {
-      iface = edges[iedge].iface2;
-      if (faces[iface].inew == UNKNOWN_FACE) {
-	m_unknown_faces.remove(iface);
-	m_suitable_faces.push_back(iface);
-	faces[iface].inew = ORIGINAL_FACE;
-      }
-      iedge = edges[iedge].inext;
-    }
-    iface = faces[i].inext;
-    m_suitable_faces.remove(i);
-    m_result_faces.push_back(i);
-  }
-  if (m_unknown_faces.front() == 0) return;
-
-  //   L O O P   A L O N G   U N S U I T A B L E   F A C E S
-
-  iface = m_unsuitable_faces.front();
-  while(iface > 0) {
-    i = iface;
-    iedge = faces[i].iold;
-    while(iedge > 0) {
-      iface = edges[iedge].iface2;
-      if (faces[iface].inew == UNKNOWN_FACE) {
-	m_unknown_faces.remove(iface);
-	m_unsuitable_faces.push_back(iface);
-	faces[iface].inew = UNSUITABLE_FACE;
-      }
-      iedge = edges[iedge].inext;
-    }
-    iface = faces[i].inext;
-    m_unsuitable_faces.remove(i);
-  }
-
-  /* From S.Ponce
-   At last, there is a problem in the assemblePolyhedra method. At least, I
-  think it is there. The problem deals with boolean operations on solids,
-  when one of the two contains entirely the other one. It has no sense for
-  intersection and union but still has sense for subtraction. In this
-  case, faces from the inner solid are stored in the m_unknown_faces
-  FaceList. And an error occurs in the execute method. This may be correct
-  for intersection and union but in the case of subtraction, one should do
-  that in assemblePolyhedra :
-  */
-  //   Unknown faces are actually suitable face !!!
-   iface = m_unknown_faces.front();
-   while(iface > 0) {
-     i = iface;
-     faces[i].inew = ORIGINAL_FACE;
-     iface = faces[i].inext;
-     m_unknown_faces.remove(i);
-     m_result_faces.push_back(i);
-   }
-  /*
-   Otherwise, the inner hole that the second solid was building in the
-  first one does not exist. I'm not very clear on what to do for unions
-  and intersections. I think this kind of situation should be detected and
-  one of the solid should simply be ignored.
-  */
-
-}
-
-inline void
-BooleanProcessor::findABC(double x1, double y1, double x2, double y2,
-			  double &a, double &b, double &c) const
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::findABC                   Date:    07.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find line equation Ax+By+C=0                              *
- *                                                                     *
- ***********************************************************************/
-{
-  a  = y1 - y2;
-  b  = x2 - x1;
-  double inv_w  = 1 / (fabs(a)+fabs(b));
-  a *= inv_w;
-  b *= inv_w;
-  c  = -(a*x2 + b*y2);
-}
-
-int BooleanProcessor::checkDirection(double *x, double *y) const
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::checkDirection            Date:    06.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Check direction of line 1-4                               *
- *                                                                     *
- ***********************************************************************/
-{
-  double a1, b1, c1, a2, b2, c2, d1, d2;
-
-  //   T E S T   L I N E   1 - 4   V S   E X T E R N A L   C O N T O U R
-
-  findABC(x[0], y[0], x[1], y[1], a1, b1, c1);
-  findABC(x[1], y[1], x[2], y[2], a2, b2, c2);
-  d1 = a1*x[4] + b1*y[4] + c1;
-  d2 = a2*x[4] + b2*y[4] + c2;
-  if (d1 <= m_del && d2 <= m_del)            return 1;
-  if (! (d1 > m_del && d2 > m_del)) {
-    if ( a1*x[2] + b1*y[2] + c1 >= -m_del) return 1;
-  }
-
-  //   T E S T   L I N E   1 - 4   V S   I N T E R N A L   C O N T O U R
-  
-  findABC(x[3], y[3], x[4], y[4], a1, b1, c1);
-  findABC(x[4], y[4], x[5], y[5], a2, b2, c2);
-  d1 = a1*x[1] + b1*y[1] + c1;
-  d2 = a2*x[1] + b2*y[1] + c2;
-  if (d1 <= m_del && d2 <= m_del)            return 1;
-  if (!(d1 > m_del && d2 > m_del)) {
-    if ( a1*x[5] + b1*y[5] + c1 >= -m_del) return 1;
-  }
-  return 0;
-}
-
-int BooleanProcessor::checkIntersection(int ix, int iy, int i1, int i2) const
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::checkDirection            Date:    06.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Check line i1-i2 on intersection with contours            *
- *                                                                     *
- ***********************************************************************/
-{
-  //  F I N D   L I N E   E Q U A T I O N
-
-  double x1, y1, x2, y2, a1, b1, c1;
-  x1 = nodes[i1].v[ix];
-  y1 = nodes[i1].v[iy];
-  x2 = nodes[i2].v[ix];
-  y2 = nodes[i2].v[iy];
-  findABC(x1, y1, x2, y2, a1, b1, c1);
-
-  //  L O O P   A L O N G   E X T E R N A L   C O N T O U R S
-
-  int icontour, iedge, k1, k2;
-  double x3, y3, x4, y4, a2, b2, c2, d1, d2;
-  for(icontour=0; icontour<(int) m_external_contours.size(); icontour++) {
-    iedge = m_external_contours[icontour];
-    while(iedge > 0) {
-      k1 = edges[iedge].i1;
-      k2 = edges[iedge].i2;
-      iedge = edges[iedge].inext;
-      if (k1 == i1 || k2 == i1) continue;
-      if (k1 == i2 || k2 == i2) continue;
-      x3 = nodes[k1].v[ix];
-      y3 = nodes[k1].v[iy];
-      x4 = nodes[k2].v[ix];
-      y4 = nodes[k2].v[iy];
-      d1 = a1*x3 + b1*y3 + c1;
-      d2 = a1*x4 + b1*y4 + c1;
-      if (d1 >  m_del && d2 >  m_del) continue;
-      if (d1 < -m_del && d2 < -m_del) continue;
-
-      findABC(x3, y3, x4, y4, a2, b2, c2);
-      d1 = a2*x1 + b2*y1 + c2;
-      d2 = a2*x2 + b2*y2 + c2;
-      if (d1 >  m_del && d2 >  m_del) continue;
-      if (d1 < -m_del && d2 < -m_del) continue;
-      return 1;
-    }
-  }
-
-  //  L O O P   A L O N G   E X T E R N A L   C O N T O U R S
-
-  for(icontour=0; icontour<(int) m_internal_contours.size(); icontour++) {
-    iedge = m_internal_contours[icontour];
-    while(iedge > 0) {
-      k1 = edges[iedge].i1;
-      k2 = edges[iedge].i2;
-      iedge = edges[iedge].inext;
-      if (k1 == i1 || k2 == i1) continue;
-      if (k1 == i2 || k2 == i2) continue;
-      x3 = nodes[k1].v[ix];
-      y3 = nodes[k1].v[iy];
-      x4 = nodes[k2].v[ix];
-      y4 = nodes[k2].v[iy];
-      d1 = a1*x3 + b1*y3 + c1;
-      d2 = a1*x4 + b1*y4 + c1;
-      if (d1 >  m_del && d2 >  m_del) continue;
-      if (d1 < -m_del && d2 < -m_del) continue;
-
-      findABC(x3, y3, x4, y4, a2, b2, c2);
-      d1 = a2*x1 + b2*y1 + c2;
-      d2 = a2*x2 + b2*y2 + c2;
-      if (d1 >  m_del && d2 >  m_del) continue;
-      if (d1 < -m_del && d2 < -m_del) continue;
-      return 1;
-    }
-  }
-  return 0;
-}
-
-void BooleanProcessor::mergeContours(int ix, int iy, int kext, int kint)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::mergeContours             Date:    06.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Attemp to merge internal contour with external one        *
- *                                                                     *
- ***********************************************************************/
-{
-  int    i1ext, i2ext, i1int, i2int, i, k[6];
-  double x[6], y[6];
-
-  //   L O O P   A L O N G   E X T E R N A L   C O N T O U R
-
-  i1ext = m_external_contours[kext];
-  while (i1ext > 0) {
-    i2ext = edges[i1ext].inext;
-    if (i2ext == 0) i2ext = m_external_contours[kext];
-    k[0] = edges[i1ext].i1;
-    k[1] = edges[i1ext].i2;
-    k[2] = edges[i2ext].i2; 
-    for (i=0; i<3; i++) {
-      x[i] = nodes[k[i]].v[ix];
-      y[i] = nodes[k[i]].v[iy];
-    }
-
-    //   L O O P   A L O N G   I N T E R N A L   C O N T O U R
-
-    i1int = m_internal_contours[kint];
-    while (i1int > 0) {
-      i2int = edges[i1int].inext;
-      if (i2int == 0) i2int = m_internal_contours[kint];
-      k[3] = edges[i1int].i1;
-      k[4] = edges[i1int].i2;
-      k[5] = edges[i2int].i2; 
-      for (i=3; i<6; i++) {
-	x[i] = nodes[k[i]].v[ix];
-	y[i] = nodes[k[i]].v[iy];
-      }
-
-      //   T E S T   L I N E   K1 - K4
-      //   I F   O K   T H E N   M E R G E   C O N T O U R S
-
-      if (checkDirection(x, y) == 0) {
-	if (checkIntersection(ix, iy, k[1], k[4]) == 0) {
-	  i = i1int;
-	  for(;;) {
-	    if (edges[i].inext == 0) {
-	      edges[i].inext = m_internal_contours[kint];
-	      m_internal_contours[kint] = 0;
-	      break;
-	    }else{
-	      i = edges[i].inext;
-	    }
-	  }
-	  i = edges[i1int].iface1;
-	  edges.push_back(ExtEdge(k[1], k[4], i, -(edges.size()+1), -1));
-	  edges.back().inext = i2int;
-	  edges.push_back(ExtEdge(k[4], k[1], i, -(edges.size()-1), -1));
-	  edges.back().inext = edges[i1ext].inext;
-	  edges[i1ext].inext = edges.size()-2;
-	  edges[i1int].inext = edges.size()-1;
-	  return;
-	}
-      }
-      i1int = edges[i1int].inext;
-    }
-    i1ext = edges[i1ext].inext;
-  }
-}
-
-int
-BooleanProcessor::checkTriangle(int iedge1, int iedge2, int ix, int iy) const
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::checkTriangle             Date:    08.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Check triangle for correctness                            *
- *                                                                     *
- ***********************************************************************/
-{
-  int    k[3];
-  double x[3], y[3];
-  double a1, b1, c1;
-
-  k[0] = edges[iedge1].i1;
-  k[1] = edges[iedge1].i2;
-  k[2] = edges[iedge2].i2;
-  for (int i=0; i<3; i++) {
-    x[i] = nodes[k[i]].v[ix];
-    y[i] = nodes[k[i]].v[iy];
-  }
-
-  //  C H E C K   P R I N C I P A L   C O R R E C T N E S S  
-    
-  findABC(x[2], y[2], x[0], y[0], a1, b1, c1);
-  if (a1*x[1]+b1*y[1]+c1 <= 0.1*m_del) return 1;
-
-  //   C H E C K   T H A T   T H E R E   I S   N O   P O I N T S   I N S I D E
-
-  int    inode, iedge;
-  double a2, b2, c2, a3, b3, c3;
-
-  findABC(x[0], y[0], x[1], y[1], a2, b2, c2);
-  findABC(x[1], y[1], x[2], y[2], a3, b3, c3);
-  iedge = iedge2;
-  for (;;) {
-    iedge = edges[iedge].inext;
-    if (edges[iedge].inext == iedge1) return 0;
-    inode = edges[iedge].i2;
-    if (inode == k[0])                continue;
-    if (inode == k[1])                continue;
-    if (inode == k[2])                continue;
-    x[1]  = nodes[inode].v[ix];
-    y[1]  = nodes[inode].v[iy];
-    if (a1*x[1]+b1*y[1]+c1 < -0.1*m_del)    continue;
-    if (a2*x[1]+b2*y[1]+c2 < -0.1*m_del)    continue;
-    if (a3*x[1]+b3*y[1]+c3 < -0.1*m_del)    continue;
-    return 1;
-  }
-}
-
-void BooleanProcessor::triangulateContour(int ix, int iy, int ihead)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::triangulateContour        Date:    06.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Triangulate external contour                              *
- *                                                                     *
- ***********************************************************************/
-{
-   
-  //std::cout << "Next Countour" << std::endl;
-  //int draw_flag = 0;
-  //if (draw_flag) draw_contour(5, 3, ihead);
-    
-  //   C L O S E   C O N T O U R
-  //GB : we do not want to use the pnext logic, the 
-  //GB : below push_backs in edge list reshuffle 
-  //GB : the addresses (crash on WIN32).
-  /*GB
-  int *pnext, nnode = 0;
-  pnext = &ihead;
-  for (;;) {
-    if (*pnext > 0) {
-      pnext = &edges[*pnext].inext;
-      nnode++; 
-    }else{
-      *pnext = ihead;
-      break;
-    }
-  }
-  GB*/
-  int nnode = 1;
-  int ipnext = ihead;
-  for (;;) {
-    if (edges[ipnext].inext > 0) {
-      ipnext = edges[ipnext].inext;
-      nnode++; 
-    }else{
-      edges[ipnext].inext = ihead;
-      break;
-    }
-  }
-
-  //   L O O P   A L O N G   C O N T O U R  
-  int iedge1, iedge2, iedge3, istart = 0;
-  for (;;) {
-    //GB iedge1 = *pnext;
-    iedge1 = edges[ipnext].inext;
-    iedge2 = edges[iedge1].inext;
-    if (istart == 0) {
-      istart = iedge1;
-      if (nnode <= 3) {
-	iedge3 = edges[iedge2].inext;
-	edges[iedge1].iface1 = faces.size();
-	edges[iedge2].iface1 = faces.size();
-	edges[iedge3].iface1 = faces.size();
-	edges[iedge3].inext = 0;
-	faces.push_back(ExtFace());
-	faces.back().iold = iedge1;
-	faces.back().inew = ORIGINAL_FACE;
-
-  //if (draw_flag) draw_contour(4, 2, iedge1);
-
-	break;
-      }
-    }else if (istart == iedge1) {
-      m_processor_error = 1;
-      std::cerr
-	<< "BooleanProcessor::triangulateContour : "
-	<< "could not generate a triangle (infinite loop)"
-	<< std::endl;
-      break;
-    }
-
-    //   C H E C K   C O R E C T N E S S   O F   T H E   T R I A N G L E
-
-    if (checkTriangle(iedge1,iedge2,ix,iy) != 0) {
-      //GB pnext  = &edges[*pnext].inext;
-      ipnext  = edges[ipnext].inext; //GB
-      continue; 
-    }
-
-    //   M O D I F Y   C O N T O U R  
-    
-    int i1 = edges[iedge1].i1;
-    int i3 = edges[iedge2].i2;
-    int iface1 = edges[iedge1].iface1;
-    int iface2 = faces.size();
-
-    //GB *pnext = edges.size();
-    edges[ipnext].inext = edges.size(); //GB
-    edges.push_back(ExtEdge(i1, i3, iface1, -(edges.size()+1), -1));
-    edges.back().inext = edges[iedge2].inext;
-
-    //   A D D   N E W   T R I A N G L E   T O   T H E   L I S T
-
-    edges[iedge2].inext = edges.size();
-    edges.push_back(ExtEdge(i3, i1, iface2, -(edges.size()-1), -1));
-    faces.push_back(ExtFace());
-    faces.back().iold   = iedge1;
-    faces.back().inew   = ORIGINAL_FACE;
-    edges[iedge1].iface1 = iface2;
-    edges[iedge2].iface1 = iface2;
-    //GB pnext  = &edges[*pnext].inext;
-    ipnext  = edges[ipnext].inext; //GB
-    istart = 0;
-    nnode--; 
-
-  //if (draw_flag)  draw_contour(4, 2, iedge1);
-
-  }
-}
-
-void BooleanProcessor::modifyReference(int iface, int i1, int i2, int iref)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::modifyReference           Date:    13.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Modify reference to the neighbouring face                 *
- *                                                                     *
- ***********************************************************************/
-{
-  int iedge = faces[iface].iold;
-  while (iedge > 0) {
-    if (edges[iedge].i1 == i2 && edges[iedge].i2 == i1) {
-      edges[iedge].iface2 = iref;
-      return;
-    }
-    iedge = edges[iedge].inext;
-  }
-  m_processor_error = 1;
-  std::cerr
-    << "BooleanProcessor::modifyReference : could not find the edge, "
-    << "iface=" << iface << ", i1,i2=" << i1 << "," << i2 << ", iref=" << iref
-    << std::endl;
-}
-
-void BooleanProcessor::triangulateFace(int iface)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::triangulateFace           Date:    02.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Triangulation of an extended face                         *
- *                                                                     *
- ***********************************************************************/
-{
-
-  //   F I N D   M A X   C O M P O N E N T   O F   T H E   N O R M A L
-  //   S E T  IX, IY, IZ
-
-  HVNormal3D normal = faces[iface].plane.normal();
-  int ix, iy, iz = 0;
-  if (ffabs(normal[1]) > ffabs(normal[iz])) iz = 1;
-  if (ffabs(normal[2]) > ffabs(normal[iz])) iz = 2;
-  if (normal[iz] > 0) {
-    ix = (iz+1)%3; iy = (ix+1)%3;
-  }else{
-    iy = (iz+1)%3; ix = (iy+1)%3;
-  }
-
-  //   F I L L   L I S T S   O F   C O N T O U R S
-
-  m_external_contours.clear();
-  m_internal_contours.clear();
-  double z;
-  int    i1, i2, ifirst, iedge, icontour = faces[iface].iold;
-  while (icontour > 0) { 
-    iedge  = icontour;
-    ifirst = edges[iedge].i1;
-    z      = 0.0;
-    for(;;) {
-      if (iedge > 0) { 
-	i1 = edges[iedge].i1;
-	i2 = edges[iedge].i2;
-	z += nodes[i1].v[ix]*nodes[i2].v[iy]-nodes[i2].v[ix]*nodes[i1].v[iy];
-	if (ifirst != i2) {
-	  iedge = edges[iedge].inext;
-	  continue;
-	}else{
-	  if (z > m_del*m_del) {
-	    m_external_contours.push_back(icontour);
-	  }else if (z < -m_del*m_del) {
-	    m_internal_contours.push_back(icontour);
-	  }else{  
-	    m_processor_error = 1;
-	    std::cerr
-	      << "BooleanProcessor::triangulateFace : too small contour"
-	      << std::endl;
-	  }
-	  icontour = edges[iedge].inext;
-	  edges[iedge].inext = 0;
-	  break;
-	}
-      }else{
-	m_processor_error = 1;
-	std::cerr
-	  << "BooleanProcessor::triangulateFace : broken contour"
-	  << std::endl;
-	icontour = 0;
-	break;
-      }
-    }
-  }
-
-  //   G E T   R I D   O F   I N T E R N A L   C O N T O U R S
-
-  int kint, kext;
-  for (kint=0; kint < (int) m_internal_contours.size(); kint++) {
-    for (kext=0; kext < (int) m_external_contours.size(); kext++) {
-      mergeContours(ix, iy, kext, kint); 
-      if (m_internal_contours[kint] == 0) break;
-    }
-    if (kext == (int) m_external_contours.size()) {
-      m_processor_error = 1;
-      std::cerr
-	<< "BooleanProcessor::triangulateFace : "
-	<< "could not merge internal contour " << kint 
-	<< std::endl;
-    }      
-  }
-
-  //   T R I A N G U L A T E   C O N T O U R S
-
-  int nface = faces.size();
-  for (kext=0; kext < (int) m_external_contours.size(); kext++) {
-    triangulateContour(ix, iy, m_external_contours[kext]);
-  }
-  faces[iface].inew = UNSUITABLE_FACE;
-
-  //   M O D I F Y   R E F E R E N C E S
-
-  for (iface=nface; iface<(int) faces.size(); iface++) {
-    iedge = faces[iface].iold;
-    while (iedge > 0) {
-      if (edges[iedge].iface1 != iface) {
-	m_processor_error = 1;
-	std::cerr
-	  << "BooleanProcessor::triangulateFace : wrong reference to itself, "
-	  << "iface=" << iface << ", iface1=" << edges[iedge].iface1
-	  << std::endl;
-      }else if (edges[iedge].iface2 > 0) {
-	modifyReference(edges[iedge].iface2,
-			edges[iedge].i1, edges[iedge].i2, iface);
-      }else if (edges[iedge].iface2 < 0) {
-	edges[iedge].iface2 = edges[-edges[iedge].iface2].iface1;
-      }
-      iedge = edges[iedge].inext;
-    }
-  }
-}
-
-GeoPolyhedron BooleanProcessor::createPolyhedron()
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::createPolyhedron()        Date:    14.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Create GeoPolyhedron.                                     *
- *                                                                     *
- ***********************************************************************/
-{
-  unsigned int i, iedge, nnode = 0, nface = 0;
-
-  //   R E N U M E R A T E   N O D E S   A N D   F A C E S
-
-  for (i=1; i<nodes.size(); i++) nodes[i].s = 0;
-
-  for (i=1; i<faces.size(); i++) {
-    if (faces[i].inew == ORIGINAL_FACE) {
-      faces[i].inew = ++nface;
-      iedge = faces[i].iold;
-      while (iedge > 0) {
-	nodes[edges[iedge].i1].s = 1;
-	iedge = edges[iedge].inext;
-      }
-    }else{
-      faces[i].inew = 0;
-    }
-  } 
-
-  for (i=1; i<nodes.size(); i++) {
-    if (nodes[i].s == 1) nodes[i].s = ++nnode;
-  }
-
-  //   A L L O C A T E   M E M O R Y
-
-  ExtPolyhedron polyhedron;
-  if (nface == 0) return polyhedron;
-  polyhedron.AllocateMemory(nnode, nface);
-
-  //   S E T   N O D E S
-
-  for (i=1; i<nodes.size(); i++) {
-    if (nodes[i].s != 0)  polyhedron.m_pV[nodes[i].s] = nodes[i].v;
-  }
-
-  //   S E T   F A C E S
-
-  int k, v[4], f[4];
-  for (i=1; i<faces.size(); i++) {
-    if (faces[i].inew == 0) continue;
-    v[3] = f[3] = k = 0;
-    v[2] = f[2] = 0;
-    v[1] = f[1] = 0;
-    v[0] = f[0] = 0;			
-    iedge = faces[i].iold;
-    while (iedge > 0) {
-      if (k > 3) {
-	std::cerr
-	  << "BooleanProcessor::createPolyhedron : too many edges"
-	  << std::endl;
-	break;
-      }
-      v[k]  = nodes[edges[iedge].i1].s;
-      if (edges[iedge].ivis < 0) v[k] = -v[k];
-      f[k]  = faces[edges[iedge].iface2].inew;
-      iedge = edges[iedge].inext;
-      k++;
-    }
-    if (k < 3) {
-      std::cerr
-	<< "BooleanProcessor::createPolyhedron : "
-	<< "face has only " << k << " edges"
-	<< std::endl;
-    }
-    polyhedron.m_pF[faces[i].inew] =
-      GeoFacet(v[0],f[0], v[1],f[1], v[2],f[2], v[3],f[3]);
-  }
-  return polyhedron;
-}
-
-GeoPolyhedron BooleanProcessor::execute(int op,
-					const GeoPolyhedron & a,
-					const GeoPolyhedron & b)
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::execute                   Date:    10.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Execute boolean operation.                                *
- *                                                                     *
- ***********************************************************************/
-{
-  static int ishift = 0;
-  static double shift[8][3] = {
-    {  31,  23,  17},
-    { -31, -23, -17},
-    { -23,  17,  31},
-    {  23, -17, -31},
-    { -17, -31,  23},
-    {  17,  31, -23},
-    {  31, -23,  17},
-    { -31,  23, -17}
-  }; 	  
-
-  //   I N I T I A T E   P R O C E S S O R
-
-  m_processor_error = 0;
-  m_operation = op;
-  nodes.clear(); nodes.push_back(CRAZY_POINT);
-  edges.clear(); edges.push_back(ExtEdge());
-  faces.clear(); faces.push_back(ExtFace());
-
-  //   T A K E   P O L Y H E D R A
-
-  m_ifaces1 = faces.size(); takePolyhedron(a,0,0,0);
-  m_ifaces2 = faces.size(); takePolyhedron(b,0,0,0);
-
-  if (m_processor_error) {             // corrapted polyhedron
-    std::cerr
-      << "BooleanProcessor: corrapted input polyhedron"
-      << std::endl;
-    return GeoPolyhedron();
-  }
-  if (m_ifaces1 == m_ifaces2) {          // a is empty
-    switch (m_operation) {
-    case OP_UNION:
-      return b;
-    case OP_INTERSECTION:
-      std::cerr 
-	<< "BooleanProcessor: intersection with empty polyhedron"
-	<< std::endl;
-      return GeoPolyhedron();
-    case OP_SUBTRACTION:
-      std::cerr
-	<< "BooleanProcessor: subtraction from empty polyhedron"
-	<< std::endl;
-      return GeoPolyhedron();
-    }
-  }
-  if (m_ifaces2 == (int) faces.size()) {     // b is empty
-    switch (m_operation) {
-    case OP_UNION:
-      return a;
-    case OP_INTERSECTION:
-      std::cerr
-	<< "BooleanProcessor: intersection with empty polyhedron"
-	<< std::endl;
-      return GeoPolyhedron();
-    case OP_SUBTRACTION:
-      return a;
-    }
-  }
-
-  //   S E T   I N I T I A L   M I N - M A X   A N D   T O L E R A N C E
-
-  m_del = findMinMax();
-
-  //   W O R K A R O U N D   T O   A V O I D   I E   A N D   E E
-  	
-  double ddxx = m_del*shift[ishift][0];
-  double ddyy = m_del*shift[ishift][1];
-  double ddzz = m_del*shift[ishift][2];
-  ishift++; if (ishift == 8) ishift = 0;
-
-  m_operation = op;
-  nodes.clear(); nodes.push_back(CRAZY_POINT);
-  edges.clear(); edges.push_back(ExtEdge());
-  faces.clear(); faces.push_back(ExtFace());
-
-  m_ifaces1 = faces.size(); takePolyhedron(a,0,0,0);
-  m_ifaces2 = faces.size(); takePolyhedron(b,ddxx,ddyy,ddzz);
-
-  m_del = findMinMax();
-
-  //   P R E S E L E C T   O U T S I D E   F A C E S
-
-  //G.Barrand : from LHCb/S.Ponce ; do not start again :
-  int ifa1, ifa2;
-  m_iout1 = m_iout2 = 0;
-  //G.Barrand for(;;) {
-  //G.Barrand ifa1 = m_iout1;
-  //G.Barrand ifa2 = m_iout2;
-  selectOutsideFaces(m_ifaces1, m_iout1);
-  selectOutsideFaces(m_ifaces2, m_iout2);
-  //if (m_iout1 == ifa1 && m_iout2 == ifa2) break;
-  findMinMax();
-  //G.Barrand }
-
-#define PROCESSOR_ERROR \
-std::cerr << "BooleanProcessor: boolean operation failed" << std::endl;\
-return a;
-
-  //   F I N D   N E W   E D G E S
-
-  if (m_ifaces1 != 0 && m_ifaces2 != 0 ) {
-    ifa1 = m_ifaces1;
-    while (ifa1 > 0) {
-      ifa2 = m_ifaces2;
-      while (ifa2 > 0) {
-	testFaceVsFace(ifa1, ifa2);
-	ifa2 = faces[ifa2].inext;
-      }
-      ifa1 = faces[ifa1].inext;
-    }
-  }
-  if (m_processor_error) { PROCESSOR_ERROR }
-
-  //   C O N S T R U C T   N E W   F A C E S
-
-  assembleNewFaces((m_operation == OP_INTERSECTION) ? 1 : 0, m_ifaces1);
-  if (m_processor_error) { PROCESSOR_ERROR }
-  assembleNewFaces((m_operation == OP_UNION) ? 0 : 1, m_ifaces2);
-  if (m_processor_error) { PROCESSOR_ERROR }
-
-  //   A S S E M B L E   S U I T A B L E   F A C E S
-
-  initiateLists();
-  assemblePolyhedra();
-  if (m_unknown_faces.front() != 0) {
-    m_processor_error = 1;
-    std::cerr
-     << "BooleanProcessor::execute : unknown faces !!!"
-     << std::endl;
-  }
-  if (m_processor_error) { PROCESSOR_ERROR }
-
-  //   T R I A N G U L A T E   A C C E P T E D   F A C E S 
-
-  ifa1 = m_result_faces.front();
-  while (ifa1 > 0) {
-    ifa2 = ifa1;
-    ifa1 = faces[ifa2].inext;
-    if (faces[ifa2].inew == NEW_FACE) triangulateFace(ifa2);
-    if (m_processor_error) { PROCESSOR_ERROR }
-  }
-
-  //   C R E A T E   P O L Y H E D R O N
-
-  return createPolyhedron();
-}
-
-
-//#include <cfortran.h>
-//#include <higz.h>
-//#include "zbuf.h"
-//void BooleanProcessor::draw()
-/***********************************************************************
- *                                                                     *
- * Name: BooleanProcessor::draw                      Date:    10.12.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Draw                                                      *
- *                                                                     *
- ***********************************************************************/
-/*
-{
-  int II;
-  int   icol, i1, i2, iedge, iface, ilist[4];
-  float p1[3], p2[3];
-
-  ilist[0] = m_ifaces1;
-  ilist[1] = m_ifaces2;
-  ilist[2] = m_iout1;
-  ilist[3] = m_iout2;
-
-  for (int i=0; i<4; i++) { 
-
-    if (i == 0) cout << "========= Ifaces_1" << endl;
-    if (i == 1) cout << "========= Ifaces_2" << endl;
-    if (i == 2) cout << "========= Iout_1" << endl;
-    if (i == 3) cout << "========= Iout_2" << endl;
-
-    icol = i+1;
-    iface = ilist[i];
-    while (iface > 0) {
-
-      cout << "iface = " << iface << endl;
-      cout << "--- iold" << endl;
-
-      iedge = faces[iface].iold;
-      icol = 2;
-
-      while (iedge > 0) {
-
-	cout << "  iegde = " << iedge
-	     << " i1,i2 =" << edges[iedge].i1 << "," << edges[iedge].i2
-	     << " iface1,iface2 = "
-	     << edges[iedge].iface1 << "," << edges[iedge].iface2
-	     << endl;
-
-	i1 = edges[iedge].i1;
-	p1[0] = nodes[i1].v[0];
-	p1[1] = nodes[i1].v[1];
-	p1[2] = nodes[i1].v[2];
-	IHWTON(p1,p1);
-	i2 = edges[iedge].i2;
-	p2[0] = nodes[i2].v[0];
-	p2[1] = nodes[i2].v[1];
-	p2[2] = nodes[i2].v[2];
-	IHWTON(p2,p2);
-//        icol =  (edges[iedge].ivis > 0) ? 1 : 2;
-	IHZLIN(icol,p1[0],p1[1],p1[2], p2[0],p2[1],p2[2]);
-	iedge = edges[iedge].inext;
-      }
-      
-      cout << "--- inew" << endl;
-
-      iedge = faces[iface].inew;
-      icol = 3;
-
-      while (iedge > 0) {
-
-	cout << "  iegde = " << iedge
-	     << " i1,i2 =" << edges[iedge].i1 << "," << edges[iedge].i2
-	     << " iface1,iface2 = "
-	     << edges[iedge].iface1 << "," << edges[iedge].iface2
-	     << endl;
-
-	i1 = edges[iedge].i1;
-	p1[0] = nodes[i1].v[0];
-	p1[1] = nodes[i1].v[1];
-	p1[2] = nodes[i1].v[2];
-	IHWTON(p1,p1);
-	i2 = edges[iedge].i2;
-	p2[0] = nodes[i2].v[0];
-	p2[1] = nodes[i2].v[1];
-	p2[2] = nodes[i2].v[2];
-	IHWTON(p2,p2);
-//        icol =  (edges[iedge].ivis > 0) ? 1 : 2;
-	IHZLIN(icol,p1[0],p1[1],p1[2], p2[0],p2[1],p2[2]);
-	iedge = edges[iedge].inext;
-      }
-      iface = faces[iface].inext;
-
-      IHZTOX(0,100,100);
-      ixupdwi(0);
-      cin >> II;
-      ixclrwi();
-      IHZCLE(0);
-
-
-    }
-  }
-}
-*/
-
-/*
-//--------------------------------------------------------------------
-void
-BooleanProcessor::draw_edge(int icol, int iedge) {
-  int   i1, i2;
-  float p1[3], p2[3];
-
-  i1 = edges[iedge].i1;
-  p1[0] = nodes[i1].v[0];
-  p1[1] = nodes[i1].v[1];
-  p1[2] = nodes[i1].v[2];
-  IHWTON(p1,p1);
-  i2 = edges[iedge].i2;
-  p2[0] = nodes[i2].v[0];
-  p2[1] = nodes[i2].v[1];
-  p2[2] = nodes[i2].v[2];
-  IHWTON(p2,p2);
-  IHZLIN(icol,p1[0],p1[1],p1[2], p2[0],p2[1],p2[2]);
-}
-
-//--------------------------------------------------------------------
-void
-BooleanProcessor::draw_contour(int i1col, int i2col, int ihead) {
-  int iedge, icol;
-  iedge = ihead;
-  while (iedge > 0) {
-    icol = (edges[iedge].ivis > 0) ? i1col : i2col;
-    draw_edge(icol, iedge);
-    iedge = edges[iedge].inext;
-  }
-
-  IHZTOX(0,100,100);
-  ixupdwi(0);
-
-  int i; 
-  std::cin >> i; 
-}
-*/
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/CellBinning.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/CellBinning.cxx
deleted file mode 100755
index b146f30ddc6184e2fe1acdc75bc51703c733b816..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/CellBinning.cxx
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/CellBinning.h"
-
-CellBinning::CellBinning (double startVal, double endVal, unsigned int nBins, unsigned int firstDivisionNumber)
-  :m_start(startVal),m_end(endVal),m_numDivisions(nBins),m_delta((endVal-startVal)/m_numDivisions),m_firstDivisionNumber(firstDivisionNumber)
-{
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/CellPartitioning.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/CellPartitioning.cxx
deleted file mode 100644
index f2f2fe999de845b4c7bc28bd80d948139364981c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/CellPartitioning.cxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/CellPartitioning.h"
-
-CellPartitioning::CellPartitioning(unsigned int firstDivisionNumber):
-  m_firstDivisionNumber(firstDivisionNumber)
-{
-}
-
-CellPartitioning::CellPartitioning(const CellPartitioning& right):
-  m_partition(right.m_partition),
-  m_firstDivisionNumber(right.m_firstDivisionNumber)
-{
-}
-
-CellPartitioning::~CellPartitioning()
-{
-}
-
-CellPartitioning& CellPartitioning::operator=(const CellPartitioning& right)
-{
-  if (this!=&right) {
-    m_partition=right.m_partition;
-    m_firstDivisionNumber = right.m_firstDivisionNumber;
-  }
-  return *this;
-}
-
-void CellPartitioning::addValue(double xVal)
-{
-  m_partition.push_back(xVal);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAbsPositionInfo.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAbsPositionInfo.cxx
deleted file mode 100755
index ef9273c213876b81a84a920cb1119a173c943a88..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAbsPositionInfo.cxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoAbsPositionInfo.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <memory>
-
-GeoAbsPositionInfo::GeoAbsPositionInfo()
-  : m_absTransform(nullptr),
-    m_defAbsTransform(nullptr)
-{
-}
-
-GeoAbsPositionInfo::~GeoAbsPositionInfo()
-{
-  delete m_absTransform;
-  delete m_defAbsTransform;
-}
-
-void GeoAbsPositionInfo::clearAbsTransform ()
-{
-  delete m_absTransform;
-  m_absTransform = nullptr;
-}
-
-void GeoAbsPositionInfo::clearDefAbsTransform ()
-{
-  delete m_defAbsTransform;
-  m_defAbsTransform = nullptr;
-}
-
-void GeoAbsPositionInfo::setAbsTransform (const HepGeom::Transform3D &  xform)
-{
-  if (m_absTransform)
-    {
-      (*m_absTransform) = xform;
-    }
-  else
-    {
-      m_absTransform = new HepGeom::Transform3D (xform);
-    }
-}
-
-void GeoAbsPositionInfo::setDefAbsTransform (const HepGeom::Transform3D &  xform)
-{
-  if (m_defAbsTransform)
-    {
-      (*m_defAbsTransform) = xform;
-    }
-  else
-    {
-      m_defAbsTransform = new HepGeom::Transform3D (xform);
-    }
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolAndSTAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolAndSTAction.cxx
deleted file mode 100755
index 10e05babdf017aa0178b51aff7611d45338ec80f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolAndSTAction.cxx
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoAccessVolAndSTAction.h"
-
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoSerialDenominator.h"
-#include <string>
-
-GeoAccessVolAndSTAction::GeoAccessVolAndSTAction(unsigned int index)
-  : m_volume(0)
-  , m_serialTransformer(0)
-  , m_index(index)
-  , m_counter(0)
-  , m_nameTag(0)
-  , m_serialDenominator(0)
-  , m_idTag(0)
-  , m_serialDenomPosition(0)
-{
-  setDepthLimit(1);
-}
-
-GeoAccessVolAndSTAction::~GeoAccessVolAndSTAction()
-{
-}
-
-void GeoAccessVolAndSTAction::handleTransform(const GeoTransform *xform)
-{
-  m_pendingTransformList.push_back (xform);
-}
-
-void GeoAccessVolAndSTAction::handlePhysVol(const GeoPhysVol *vol)
-{
-  // Return if we have not got any children     
-  if(getPath()->getLength()-1 == 0)
-    return;
-
-  // Otherwise check if the index equals the counter:     
-  if(m_index == m_counter) {
-    m_volume = vol;
-    m_serialTransformer = 0;
-    unsigned int listSize = m_pendingTransformList.size();
-
-    if(listSize == 0) {
-      // do nothing.... 
-    }
-    else if(listSize == 1) {
-      m_transform = m_pendingTransformList[0]->getTransform(nullptr);
-      m_defTransform = m_pendingTransformList[0]->getDefTransform(nullptr);
-    }
-    else {
-      for(unsigned int t=0; t<m_pendingTransformList.size(); t++) {
-	m_transform = m_transform * m_pendingTransformList[t]->getTransform(nullptr);
-	m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(nullptr);
-      }
-    }
-    terminate ();
-  }
-  else {
-    m_idTag   = 0;
-    m_nameTag = 0;
-    m_pendingTransformList.erase(m_pendingTransformList.begin(),
-				 m_pendingTransformList.end());
-  }
-
-  m_counter++;
-}
-
-void GeoAccessVolAndSTAction::handleFullPhysVol(const GeoFullPhysVol *vol)
-{
-  // Return if we have not got any children     
-  if(getPath()->getLength()-1 == 0)
-    return;
-
-  // Otherwise check if the index equals the counter:     
-  if(m_index == m_counter)
-  {
-    m_volume = vol;
-    m_serialTransformer = 0;
-
-    unsigned int listSize = m_pendingTransformList.size();
-    if(listSize == 0) {
-      // do nothing.... 
-    }
-    else if(listSize == 1) {
-      m_transform = m_pendingTransformList[0]->getTransform(nullptr);
-      m_defTransform = m_pendingTransformList[0]->getDefTransform(nullptr);
-    }
-    else {
-      for(unsigned int t = 0; t < m_pendingTransformList.size (); t++) {
-	m_transform = m_transform * m_pendingTransformList[t]->getTransform(nullptr);
-	m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(nullptr);
-      }
-    }
-    terminate();
-  }
-  else {
-    m_pendingTransformList.erase (m_pendingTransformList.begin(),
-				  m_pendingTransformList.end()); 
-    m_nameTag = 0;
-    m_idTag   = 0;
-  }
-  
-  m_counter++;
-}
-
-PVConstLink GeoAccessVolAndSTAction::getVolume() const
-{
-  return m_volume;
-}
-
-const HepGeom::Transform3D & GeoAccessVolAndSTAction::getTransform() const
-{
-  return m_transform;
-}
-
-const HepGeom::Transform3D & GeoAccessVolAndSTAction::getDefTransform() const
-{
-  return m_defTransform;
-}
-
-const std::string & GeoAccessVolAndSTAction::getName() const
-{
-  if(m_name.empty()) {
-    if(m_nameTag) {
-      m_name = m_nameTag->getName();
-    }
-    else if(m_serialDenominator) {
-      m_name = m_serialDenominator->getBaseName() + std::to_string(m_index-m_serialDenomPosition);
-    }
-    else {
-      m_name = "ANON";
-    }
-  }
-  return m_name;
-}
-
-void GeoAccessVolAndSTAction::handleNameTag(const GeoNameTag *nameTag)
-{
-  m_nameTag = nameTag;
-  m_serialDenominator = 0;
-  m_serialDenomPosition = 0;
-}
-
-void GeoAccessVolAndSTAction::handleSerialDenominator(const GeoSerialDenominator *sD)
-{
-  m_serialDenominator = sD;
-  m_serialDenomPosition = m_counter;
-}
-
-void GeoAccessVolAndSTAction::handleSerialTransformer(const GeoSerialTransformer  *sT)
-{
-  m_pendingTransformList.erase(m_pendingTransformList.begin(),
-			      m_pendingTransformList.end());
-
-  if(m_index == m_counter) {
-    m_volume = 0;
-    m_serialTransformer = sT;
-    terminate();
-  }
-  else {
-    m_idTag   = 0;
-    m_nameTag = 0;
-    m_counter++;
-  }
-}
-
-const GeoSerialTransformer* GeoAccessVolAndSTAction::getSerialTransformer() const
-{
-  return m_serialTransformer;
-}
-
-void GeoAccessVolAndSTAction::handleIdentifierTag(const GeoIdentifierTag *idTag)
-{
-  m_idTag = idTag;
-}
-
-Query<unsigned int> GeoAccessVolAndSTAction::getId() const
-{
-  if(m_idTag) {
-    return Query<unsigned int>(m_idTag->getIdentifier());
-  }
-  else {
-    return Query<unsigned int>();
-  }
-}
-
-
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.cxx
deleted file mode 100755
index 8fc6e79ca68952d68b85e85033c5a7660a93745c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.cxx
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoAccessVolumeAction.h"
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoSerialDenominator.h"
-#include "GeoModelKernel/GeoSerialIdentifier.h"
-#include <string>
-
-GeoAccessVolumeAction::GeoAccessVolumeAction(unsigned int Index, const GeoVAlignmentStore* store)
-  : m_index(Index)
-  , m_counter(0)
-  , m_nameTag(nullptr)
-  , m_serialDenominator(nullptr)
-  , m_idTag(nullptr)
-  , m_serialDenomPosition(0)
-  , m_serialIdentifier(nullptr)
-  , m_serialIdentPosition(0)
-  , m_alignStore(store)
-{
-  setDepthLimit (1);
-  m_pendingTransformList.reserve(1);
-}
-
-GeoAccessVolumeAction::~GeoAccessVolumeAction()
-{
-}
-
-void GeoAccessVolumeAction::handleTransform (const GeoTransform *xform)
-{
-  m_pendingTransformList.push_back (xform);
-}
-
-void GeoAccessVolumeAction::handlePhysVol (const GeoPhysVol *vol)
-{
-  //      
-  // Return if we have not got to any children:     
-  //     
-  if(getPath()->getLength()-1 == 0)
-    return;
-  //     
-  // Otherwise check if the index equals the counter:     
-  //     
-  if(m_index == m_counter) {
-    m_volume = vol;
-    unsigned int listSize = m_pendingTransformList.size ();
-    if(listSize == 0) {
-      // do nothing.... 
-    }
-    else if(listSize == 1) {
-      m_transform = m_pendingTransformList[0]->getTransform(m_alignStore);
-      m_defTransform = m_pendingTransformList[0]->getDefTransform(m_alignStore);
-    }
-    else {
-      for(unsigned int t = 0; t < m_pendingTransformList.size (); t++) {
-	m_transform = m_transform * m_pendingTransformList[t]->getTransform(m_alignStore);
-	m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-      }
-    }
-    terminate();
-  }
-  else {
-    m_idTag   = nullptr;
-    m_nameTag = nullptr;
-    m_pendingTransformList.erase (m_pendingTransformList.begin (),
-				  m_pendingTransformList.end ());
-  }
-  //     
-  // Increment the counter:     
-  //     
-  m_counter++;
-}
-
-void GeoAccessVolumeAction::handleFullPhysVol (const GeoFullPhysVol *vol)
-{
-  //      
-  // Return if we have not got to any children:     
-  //     
-  if(getPath()->getLength()-1 == 0)
-    return;
-  //     
-  // Otherwise check if the index equals the counter:     
-  //     
-  if(m_index == m_counter) {
-    m_volume = vol;
-    unsigned int listSize = m_pendingTransformList.size ();
-    if(listSize == 0) {
-      // do nothing.... 
-    }
-    else if(listSize == 1) {
-      m_transform = m_pendingTransformList[0]->getTransform(m_alignStore);
-      m_defTransform = m_pendingTransformList[0]->getDefTransform(m_alignStore);
-    }
-    else {
-      for(unsigned int t = 0; t < m_pendingTransformList.size (); t++) {
-	m_transform = m_transform * m_pendingTransformList[t]->getTransform(m_alignStore);
-	m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-      }
-    }
-    terminate();
-  }
-  else {
-    m_pendingTransformList.erase (m_pendingTransformList.begin (),
-				  m_pendingTransformList.end ()); 
-    m_nameTag = nullptr;
-    m_idTag   = nullptr;
-  }
-  //     
-  // Increment the counter:     
-  //     
-  m_counter++;
-}
-
-PVConstLink GeoAccessVolumeAction::getVolume () const
-{
-  return m_volume;
-}
-
-const HepGeom::Transform3D & GeoAccessVolumeAction::getTransform () const
-{
-  return m_transform;
-}
-
-const HepGeom::Transform3D & GeoAccessVolumeAction::getDefTransform () const
-{
-  return m_defTransform;
-}
-
-const std::string & GeoAccessVolumeAction::getName () const
-{
-  if(m_name.empty()) {
-    if(m_nameTag) {
-      m_name = m_nameTag->getName();
-    }
-    else if(m_serialDenominator) {
-      m_name = m_serialDenominator->getBaseName() + std::to_string(m_index-m_serialDenomPosition);
-    }
-    else {
-      m_name = "ANON";
-    }
-  }
-  return m_name;
-}
-
-void GeoAccessVolumeAction::handleNameTag (const GeoNameTag *nameTag)
-{
-  m_nameTag = nameTag;
-  m_serialDenominator = nullptr;
-  m_serialDenomPosition = 0;
-}
-
-void GeoAccessVolumeAction::handleSerialDenominator (const GeoSerialDenominator *sD)
-{
-  m_serialDenominator = sD;
-  m_serialDenomPosition = m_counter;
-}
-
-void GeoAccessVolumeAction::handleSerialTransformer (const GeoSerialTransformer  *sT)
-{
-  //     
-  // Otherwise check if the index equals the counter:     
-  //     
-  if(m_index < m_counter + sT->getNCopies()) {
-    unsigned int copy = m_index - m_counter;
-    m_volume = sT->getVolume();
-    for(unsigned int t = 0; t < m_pendingTransformList.size (); t++) {
-      m_transform = m_transform * m_pendingTransformList[t]->getTransform(m_alignStore);
-      m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-    }
-    m_transform    = m_transform    * sT->getTransform (copy);
-    m_defTransform = m_defTransform * sT->getTransform (copy);
-    m_counter += (copy + 1);
-    terminate ();
-  }
-  else {
-    m_idTag   = nullptr;
-    m_nameTag = nullptr;
-    m_pendingTransformList.erase(m_pendingTransformList.begin (),
-				 m_pendingTransformList.end ());
-    m_counter += sT->getNCopies();
-  }
-}
-
-void GeoAccessVolumeAction::handleIdentifierTag (const GeoIdentifierTag *idTag)
-{
-  m_idTag = idTag;
-  m_serialIdentifier = nullptr;
-  m_serialIdentPosition = 0;
-}
-
-Query<int> GeoAccessVolumeAction::getId () const
-{
-  Query<int> id;
-  if(m_idTag) {
-    id = Query<int>(m_idTag->getIdentifier());
-  }
-  else if(m_serialIdentifier) {
-    id = Query<int>(m_index - m_serialIdentPosition + m_serialIdentifier->getBaseId());
-  }
-  return id;
-}
-
-void GeoAccessVolumeAction::handleSerialIdentifier(const GeoSerialIdentifier *sI)
-{
-  m_serialIdentifier = sI;
-  m_serialIdentPosition = m_counter;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.h b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.h
deleted file mode 100755
index 935329d2a3ad97f41a934ac4f9c0d9ce401a0b76..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAccessVolumeAction.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GeoAccessVolumeAction_h
-#define GeoAccessVolumeAction_h 1
-
-#include "GeoModelKernel/GeoNodeAction.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include <vector>
-
-class GeoVPhysVol;
-class GeoTransform;
-class GeoVAlignmentStore;
-
-/**
- * @class GeoAccessVolumeAction
- *
- * @brief Accesses volumes, returning the ith volume and also its transformation relative to the parent.
- */
-
-class GeoAccessVolumeAction final : public GeoNodeAction
-{
- public:
-
-  GeoAccessVolumeAction (unsigned int Index, const GeoVAlignmentStore* store);
-  virtual ~GeoAccessVolumeAction() override;
-
-  /// Handles a Transform.
-  virtual void handleTransform (const GeoTransform *xform) override;
-
-  /// Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *vol) override;
-
-  /// Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *vol) override;
-
-  /// Returns the selected physical volume or nullptr if not found.
-  PVConstLink getVolume () const;
-
-  /// Returns the transformation to the volume.
-  const HepGeom::Transform3D & getTransform () const;
-
-  /// Returns the default ransformation to the volume.
-  const HepGeom::Transform3D & getDefTransform () const;
-
-  /// Returns the name of the volume.  From nametag or serial denominator.
-  const std::string & getName () const;
-
-  /// Handles a Name Tag.
-  virtual void handleNameTag (const GeoNameTag *nameTag) override;
-
-  /// Handles a Serial Denominator.
-  virtual void handleSerialDenominator (const GeoSerialDenominator *sD) override;
-
-  /// Handles a Serial Transformer
-  virtual void handleSerialTransformer (const GeoSerialTransformer  *sT) override;
-
-  /// Handles an Identifier Tag.
-  virtual void handleIdentifierTag (const GeoIdentifierTag *idTag) override;
-
-  /// Returns the id of the volume.  From the identifier.
-  Query<int> getId () const;
-
-  /// Handles an Serial Identifier
-  virtual void handleSerialIdentifier(const GeoSerialIdentifier *sI) override;
-
- private:
-
-  GeoAccessVolumeAction(const GeoAccessVolumeAction &right);
-  GeoAccessVolumeAction & operator=(const GeoAccessVolumeAction &right);
-
-  /// Returns a pointer to the ith physical volume under this one.
-  PVConstLink m_volume;
-
-  /// The transformation to the ith volume.
-  HepGeom::Transform3D m_transform;
-
-  /// The default transformation to the ith volume.
-  HepGeom::Transform3D m_defTransform;
-
-  /// The volume which we are interested in seeking.
-  unsigned int m_index;
-
-  /// The volume which we are interested in seeking.
-  unsigned int m_counter;
-
-  /// The name of the volume.  From a nametag or a serial denominator.
-  mutable std::string m_name;
-
-  /// The identifier of the volume.  From an identifier tag.
-  mutable Query<int> m_id;
-
-  /// A pointer to a name tag.  If the volume is named.
-  const GeoNameTag *m_nameTag;
-
-  /// A pointer to a serial denominator.  If one exists.
-  const GeoSerialDenominator *m_serialDenominator;
-
-  /// A pointer to an identifier tag.  If the volume is identified.
-  const GeoIdentifierTag *m_idTag;
-
-  /// List of Pending Transformations.
-  std::vector<const GeoTransform *>  m_pendingTransformList;
-
-  /// Position of the serial denominator.  Used to assign a numeric suffix to the name, eg BaseName+99
-  unsigned int m_serialDenomPosition;
-
-  const GeoSerialIdentifier *m_serialIdentifier;
-  unsigned int m_serialIdentPosition;
-  const GeoVAlignmentStore* m_alignStore;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAlignableTransform.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAlignableTransform.cxx
deleted file mode 100755
index ee1313c6521ee00ffffa4ae5ab9d16e7378fe3c0..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoAlignableTransform.cxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoAlignableTransform.h"
-#include "GeoModelKernel/GeoClearAbsPosAction.h"
-#include "GeoModelKernel/GeoVAlignmentStore.h"
-#include "GeoSelClearAbsPosAction.h"
-#include <set>
-
-GeoAlignableTransform::GeoAlignableTransform (const HepGeom::Transform3D& transform)
-  : GeoTransform(transform)
-  , m_delta (nullptr)
-{
-}
-
-GeoAlignableTransform::~GeoAlignableTransform()
-{
-  delete m_delta;
-}
-
-HepGeom::Transform3D GeoAlignableTransform::getTransform(const GeoVAlignmentStore* store) const
-{
-  const HepGeom::Transform3D* delta = (store==nullptr ? m_delta : store->getDelta(this));
-  return GeoTransform::getTransform(nullptr) * (delta==nullptr ? HepGeom::Transform3D() : *delta);
-}
-
-void GeoAlignableTransform::setDelta (const HepGeom::Transform3D& delta, GeoVAlignmentStore* store)
-{
-  if(store==nullptr) {
-    if(m_delta && (*m_delta == delta)) return;
-    
-    if(m_delta) {
-      (*m_delta) = delta;
-    }
-    else {
-      m_delta = new HepGeom::Transform3D(delta);
-    }
-
-    std::set<GeoGraphNode*> uniqueParents;
-    for(GeoGraphNode* parent : m_parentList) {
-      if(uniqueParents.find(parent)==uniqueParents.end()) {
-	GeoSelClearAbsPosAction cc(this);
-	parent->exec(&cc);
-	uniqueParents.insert(parent);
-      }
-    }
-  } // if(store==nullptr)
-  else {
-    store->setDelta(this,delta);
-  }
-}
-
-void GeoAlignableTransform::clearDelta(GeoVAlignmentStore* store)
-{
-  // Does not make sence to clear deltas inside Alignment Store
-  if(store!=nullptr) return;
-
-  delete m_delta;
-  m_delta = nullptr;
-  
-  std::set<GeoGraphNode*> uniqueParents;
-  for(GeoGraphNode* parent : m_parentList) {
-    if(uniqueParents.find(parent)==uniqueParents.end()) {
-      GeoSelClearAbsPosAction cc(this);
-      parent->exec (&cc);
-      uniqueParents.insert(parent);
-    }
-  }
-}
-
-void GeoAlignableTransform::dockTo(GeoVPhysVol* parent)
-{
-  m_parentList.push_back (parent);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoBox.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoBox.cxx
deleted file mode 100755
index 0c24a98defbefd063ed4d20f017b4b65c1df9240..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoBox.cxx
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoBox.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoBox::s_classType = "Box";
-const ShapeType GeoBox::s_classTypeID = 0x10;
-
-GeoBox::GeoBox (double XHalfLength, double YHalfLength, double ZHalfLength)
-  : m_xHalfLength (XHalfLength)
-  , m_yHalfLength (YHalfLength)
-  , m_zHalfLength (ZHalfLength)
-{
-}
-
-GeoBox::~GeoBox()
-{
-}
-
-double GeoBox::volume () const
-{
-  return 8.0 * m_xHalfLength * m_yHalfLength * m_zHalfLength;
-}
-
-const std::string & GeoBox::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoBox::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoBox::exec (GeoShapeAction *action) const
-{
-  action->handleBox(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoClearAbsPosAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoClearAbsPosAction.cxx
deleted file mode 100755
index 7383e12e342f6524a8a40629729f1e311935457a..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoClearAbsPosAction.cxx
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoClearAbsPosAction.h"
-
-GeoClearAbsPosAction::GeoClearAbsPosAction()
-{
-}
-
-GeoClearAbsPosAction::~GeoClearAbsPosAction()
-{
-}
-
-void GeoClearAbsPosAction::handleFullPhysVol (const GeoFullPhysVol *vol)
-{
-  vol->clearPositionInfo ();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCons.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCons.cxx
deleted file mode 100755
index 1082bfb271db4c122e57bf9ccd78e320976d51d4..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCons.cxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoCons.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoCons::s_classType = "Cons";
-const ShapeType GeoCons::s_classTypeID = 0x11;
-
-GeoCons::GeoCons (double RMin1, double RMin2, double RMax1, double RMax2, double DZ, double SPhi, double DPhi)
-  : m_rMin1 (RMin1)
-  , m_rMin2 (RMin2)
-  , m_rMax1 (RMax1)
-  , m_rMax2 (RMax2)
-  , m_dZ (DZ)
-  , m_sPhi (SPhi)
-  , m_dPhi (DPhi)
-{
-}
-
-GeoCons::~GeoCons()
-{
-}
-
-double GeoCons::volume () const
-{
-  return (m_dPhi * (1./3)) * m_dZ * (m_rMax1 * m_rMax1 + m_rMax2 * m_rMax2 + m_rMax1 * m_rMax2
-                                 - m_rMin1 * m_rMin1 - m_rMin2 * m_rMin2 -
-                                 m_rMin1 * m_rMin2);
-}
-
-const std::string & GeoCons::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoCons::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoCons::exec (GeoShapeAction *action) const
-{
-  action->handleCons(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAction.cxx
deleted file mode 100755
index 1299bf0457591241698d5beae9416f3d6a4a9497..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAction.cxx
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoCountVolAction.h"
-
-GeoCountVolAction::GeoCountVolAction ()
- : m_count (0)
-{
-  setDepthLimit (1);
-}
-
-GeoCountVolAction::~GeoCountVolAction()
-{
-}
-
-void GeoCountVolAction::handlePhysVol (const GeoPhysVol *)
-{
-  //    
-  // Do not count the top volume, this action counts only children!   
-  //   
-  if (getPath ()->getLength () > 1)
-    m_count++;
-}
-
-void GeoCountVolAction::handleFullPhysVol (const GeoFullPhysVol *)
-{
-  //   
-  // Do not count the top volume, this action counts only children!   
-  //   
-  if (getPath ()->getLength () > 1)
-    m_count++;
-}
-
-void GeoCountVolAction::handleSerialTransformer (const GeoSerialTransformer  *st)
-{
-  m_count += st->getNCopies ();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAndSTAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAndSTAction.cxx
deleted file mode 100755
index 1bc7b55b01357eeb45cd8c2ee34e1c44e4f0c73f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCountVolAndSTAction.cxx
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoCountVolAndSTAction.h"
-
-GeoCountVolAndSTAction::GeoCountVolAndSTAction()
-  :m_count (0)
-{
-  setDepthLimit (1);
-}
-
-GeoCountVolAndSTAction::~GeoCountVolAndSTAction()
-{
-}
-
-void GeoCountVolAndSTAction::handlePhysVol(const GeoPhysVol*)
-{
-  //    
-  // Do not count the top volume, this action counts only children!   
-  //   
-  if (getPath ()->getLength () > 1)
-    m_count++;
-}
-
-void GeoCountVolAndSTAction::handleFullPhysVol(const GeoFullPhysVol*)
-{
-  //   
-  // Do not count the top volume, this action counts only children!   
-  //   
-  if (getPath ()->getLength () > 1)
-    m_count++;
-}
-
-void GeoCountVolAndSTAction::handleSerialTransformer(const GeoSerialTransformer *)
-{
-  m_count ++;
-}
-
-
-
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCutVolAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCutVolAction.cxx
deleted file mode 100755
index 4382b6e6ff5ac3220a90816a41af75b0272f4cad..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoCutVolAction.cxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoCutVolAction.h"
-#include "GeoModelKernel/GeoPhysVol.h"
-#include "GeoModelKernel/GeoIdentifierTag.h"
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoShapeShift.h"
-#include "GeoModelKernel/GeoShapeSubtraction.h"
-
-GeoCutVolAction::GeoCutVolAction(const GeoShape& Shape,
-				 const HepGeom::Transform3D& Transform)
-  : GeoVolumeAction (GeoVolumeAction::TOP_DOWN)
-  , m_physVol(0)
-  , m_shape(Shape)
-  , m_transform(Transform)
-  , m_copyStack(new std::stack<GeoPhysVol*>)
-{
-}
-
-GeoCutVolAction::~GeoCutVolAction()
-{
-  while(m_copyStack->size()>0)
-    m_copyStack->pop();
-  delete m_copyStack;
-}
-
-void GeoCutVolAction::handleVPhysVol(const GeoVPhysVol *pv)
-{
-  // Determine path length: 
-  // 0  - for the starting PV
-  // 1  - for the first level daughters etc.
-  unsigned int pathLen = this->getState()->getPath()->getLength();
-
-  // Get Logical Volume details
-  const GeoLogVol* lvOriginal = pv->getLogVol();
-  const std::string& lvNameOriginal = lvOriginal->getName();
-  const GeoMaterial* lvMatOriginal = lvOriginal->getMaterial();
-  const GeoShape* lvShapeOriginal = lvOriginal->getShape();
-
-  if(pathLen==0)
-  {
-    // We are at the first PV. Create the resulting PV
-    const GeoShape& cutShape = (*lvShapeOriginal).subtract(m_shape << m_transform);
-    GeoLogVol* lvNew = new GeoLogVol(lvNameOriginal,&cutShape,lvMatOriginal);
-
-    m_physVol = new GeoPhysVol(lvNew);
-
-    // Save the new PV in the copy stack
-    m_copyStack->push(m_physVol);
-  }
-  else
-  {
-    // determine the parent PV in the copy tree
-    while(m_copyStack->size()>pathLen)
-      m_copyStack->pop();
-    GeoPhysVol* copyParent = m_copyStack->top();
-
-    // Calculate cut transform to the reference frame of current PV
-    HepGeom::Transform3D cutTransform = (this->getState()->getAbsoluteTransform()).inverse()*m_transform;
-
-    // Construct new PV
-    const GeoShape& cutShape = (*lvShapeOriginal).subtract(m_shape << cutTransform);
-    GeoLogVol* lvNew = new GeoLogVol(lvNameOriginal,&cutShape,lvMatOriginal);
-    GeoPhysVol* pvNew = new GeoPhysVol(lvNew);
-
-    // Get its characteristics (name, id, transform to parent)
-    std::string pvName = this->getState()->getName();
-    if(pvName != "")
-      copyParent->add(new GeoNameTag(pvName));
-
-    const Query<int> pvId = this->getState()->getId();
-    if(pvId.isValid())
-      copyParent->add(new GeoIdentifierTag(pvId));
-
-    copyParent->add(new GeoTransform(this->getState()->getTransform()));
-    copyParent->add(pvNew);
-
-    // Save new PV in the copy stack
-    m_copyStack->push(pvNew);
-  }
-}
-
-GeoPhysVol* GeoCutVolAction::getPV()
-{
-  return m_physVol;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoElement.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoElement.cxx
deleted file mode 100755
index 6f50aa3699c723dfc413ca40f8e35808db442785..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoElement.cxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoElement.h"
-#include "CLHEP/Units/PhysicalConstants.h"
-#include <cmath>
-
-GeoElement::GeoElement (const std::string &Name, const std::string &Symbol, double Z, double A)
-  : m_name (Name)
-  , m_symbol (Symbol)
-  , m_z (Z)
-  , m_a (A)
-{
-}
-
-GeoElement::~GeoElement()
-{
-}
-
-
-double GeoElement::getRadTsai() const
-{
-  // Compute Coulomb correction factor (Phys Rev. D50 3-1 (1994) page 1254)
-  const double k1 = 0.0083, k2 = 0.20206, k3 = 0.0020, k4 = 0.0369;
-  double az2 = (CLHEP::fine_structure_const*m_z)*(CLHEP::fine_structure_const*m_z);
-  double az4 = az2 * az2;
-
-  double coulomb = (k1*az4 + k2 + 1./(1.+az2))*az2 - (k3*az4 + k4)*az4;
-
-  //  Compute Tsai's Expression for the Radiation Length (Phys Rev. D50 3-1 (1994) page 1254)
-  const double Lrad_light[]  = {5.31,  4.79,  4.74,  4.71};
-  const double Lprad_light[] = {6.144, 5.621, 5.805, 5.924};
-
-  const double logZ3 = std::log(m_z) * (1./3);
-
-  double Lrad, Lprad;
-  int iz = (int)(m_z+0.5) - 1 ;
-  if (iz<=3) {
-    Lrad = Lrad_light[iz];  
-    Lprad = Lprad_light[iz]; 
-  } else { 
-    Lrad = std::log(184.15) - logZ3; 
-    Lprad = std::log(1194.) - 2*logZ3;
-  }
-
-  double radTsai = 4*CLHEP::alpha_rcl2*m_z*(m_z*(Lrad-coulomb) + Lprad);
-  return radTsai;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoEllipticalTube.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoEllipticalTube.cxx
deleted file mode 100755
index d0848e1111b67561cdefd7ad37205c3c2429c5fe..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoEllipticalTube.cxx
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <cmath>
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-#include "GeoModelKernel/GeoEllipticalTube.h"
-const std::string GeoEllipticalTube::s_classType = "EllipticalTube";
-const ShapeType GeoEllipticalTube::s_classTypeID = 0x22;
-
-
-GeoEllipticalTube::GeoEllipticalTube(double XHalfLength, double YHalfLength, double ZHalfLength)
-  : m_xHalfLength(XHalfLength)
-  , m_yHalfLength(YHalfLength)
-  , m_zHalfLength(ZHalfLength)
-{
-}
-
-
-GeoEllipticalTube::~GeoEllipticalTube()
-{
-}
-
-double GeoEllipticalTube::volume () const
-{
-#ifndef M_PI
-  double M_PI = acos (-1.0);
-#endif
-  return 2 * M_PI * m_xHalfLength * m_yHalfLength * m_zHalfLength;
-}
-
-const std::string & GeoEllipticalTube::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoEllipticalTube::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoEllipticalTube::exec (GeoShapeAction *action) const
-{
-  action->handleEllipticalTube(this);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFacet.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFacet.cxx
deleted file mode 100644
index 697edf3c99253cc4196caf39c5f748d0a86cad3a..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFacet.cxx
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoFacet.h"
-
-// ___________________ Triangular Facet ________________________
-GeoTriangularFacet::GeoTriangularFacet(GeoFacetVertex v0
-				       ,GeoFacetVertex v1
-				       ,GeoFacetVertex v2
-				       ,GeoFacetVertexType type) 
-  : GeoFacet()
-{
-  m_nVertices = 3;
-  m_vertexType = type;
-  m_vertices.reserve(3);
-  m_vertices[0] = v0;
-  m_vertices[1] = v1;
-  m_vertices[2] = v2;
-}
-
-
-GeoTriangularFacet::~GeoTriangularFacet()
-{
-}
-
-// ___________________ Triangular Facet ________________________
-GeoQuadrangularFacet::GeoQuadrangularFacet(GeoFacetVertex v0
-					   ,GeoFacetVertex v1
-					   ,GeoFacetVertex v2
-					   ,GeoFacetVertex v3
-					   ,GeoFacetVertexType type) 
-  : GeoFacet()
-{
-  m_nVertices = 4;
-  m_vertexType = type;
-  m_vertices.reserve(4);
-  m_vertices[0] = v0;
-  m_vertices[1] = v1;
-  m_vertices[2] = v2;
-  m_vertices[3] = v3;
-}
-
-
-GeoQuadrangularFacet::~GeoQuadrangularFacet()
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFullPhysVol.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFullPhysVol.cxx
deleted file mode 100755
index 57c6160ae618d14644a39933996596607ec7c66d..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoFullPhysVol.cxx
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoFullPhysVol.h"
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-#include "GeoModelKernel/GeoCountVolAction.h"
-#include "GeoModelKernel/GeoCountVolAndSTAction.h"
-#include "GeoAccessVolumeAction.h"
-#include <algorithm>
-
-GeoFullPhysVol::GeoFullPhysVol (const GeoLogVol* LogVol)
-  : GeoVFullPhysVol(LogVol)
-  , m_cloneOrigin(nullptr)
-{
-}
-
-GeoFullPhysVol::~GeoFullPhysVol()
-{
-  for(const GeoGraphNode* daughter : m_daughters) daughter->unref();
-  if(m_cloneOrigin && m_cloneOrigin!=this) m_cloneOrigin->unref();
-}
-
-void GeoFullPhysVol::add(GeoGraphNode* graphNode)
-{
-  if(m_cloneOrigin) throw std::runtime_error("Attempt to modify contents of a cloned FPV");
-
-  m_daughters.push_back(graphNode);
-  graphNode->ref();
-  graphNode->dockTo(this);
-}
-
-unsigned int GeoFullPhysVol::getNChildVols() const
-{
-  GeoCountVolAction cv;
-  exec(&cv);
-  return cv.getCount();
-}
-
-PVConstLink GeoFullPhysVol::getChildVol(unsigned int index) const
-{
-  GeoAccessVolumeAction av(index,nullptr);
-  exec(&av);
-  return av.getVolume();
-}
-
-HepGeom::Transform3D GeoFullPhysVol::getXToChildVol(unsigned int index, const GeoVAlignmentStore* store) const
-{
-  GeoAccessVolumeAction av(index,store);
-  exec(&av);
-  return av.getTransform();
-}
-
-HepGeom::Transform3D GeoFullPhysVol::getDefXToChildVol(unsigned int index, const GeoVAlignmentStore* store) const
-{
-  GeoAccessVolumeAction av(index,store);
-  exec(&av);
-  return av.getDefTransform();
-}
-
-void GeoFullPhysVol::exec(GeoNodeAction *action) const
-{
-  //        
-  // Put this node on the head of the path:   bb 
-  //    
-  action->getPath()->push(this);
-  if(action->getDepthLimit().isValid()
-     && action->getPath()->getLength()-1 > action->getDepthLimit()) {
-    action->getPath()->pop();
-    return;
-  }
-  //    
-  // Perform the action on this node:    
-  //    
-  action->handleFullPhysVol(this);
-  if(action->shouldTerminate()) {
-    action->getPath()->pop();
-    return;
-  }
-
-  //    
-  // Pass this on to the children.    
-  //    
-  if(action->getDepthLimit().isValid()
-     && action->getPath()->getLength() > action->getDepthLimit()) {
-  }
-  else {
-    for(size_t c = 0; c<m_daughters.size(); c++) {
-      m_daughters[c]->exec(action);
-      if(action->shouldTerminate()) {
-	action->getPath()->pop();
-	return;
-      }
-    }
-  }
-
-  //    
-  // Take this node back off the head of the path:    
-  //    
-  action->getPath()->pop();
-}
-
-std::string GeoFullPhysVol::getNameOfChildVol(unsigned int i) const
-{
-  GeoAccessVolumeAction av(i,nullptr);
-  exec(&av);
-  return av.getName();
-}
-
-Query<int> GeoFullPhysVol::getIdOfChildVol(unsigned int i) const
-{
-  GeoAccessVolumeAction av(i,nullptr);
-  exec(&av);
-  return av.getId ();
-}
-
-unsigned int GeoFullPhysVol::getNChildVolAndST() const
-{
-  GeoCountVolAndSTAction cv;
-  exec(&cv);
-  return cv.getCount();
-}
-
-/// Meaning of the input parameter 'attached'
-/// TRUE: all cloned volumes are meant to stay identical to their clone origin for the lifetime
-///       further changes are permitted neither in the origin nor in the clone results
-///
-/// FALSE: use this value if you expect further changes in either clone origing or its clone results
-///        which don't need to be syncronized. The clone origin and its clone are identical ONLY by
-///        the time of cloning, further identity is not guaranteed
-GeoFullPhysVol* GeoFullPhysVol::clone(bool attached)
-{
-  GeoFullPhysVol* clone = new GeoFullPhysVol(this->getLogVol());
-  for(unsigned int ind = 0; ind < this->m_daughters.size(); ind++) {
-    GeoGraphNode* daughter =(GeoGraphNode*) m_daughters[ind];
-    clone->add(daughter);
-  }
-
-  if(attached) {
-    if(this->m_cloneOrigin==0) {
-      this->m_cloneOrigin = this;
-    }
-    clone->m_cloneOrigin = this->m_cloneOrigin;
-    this->m_cloneOrigin->ref();
-  }
-
-  return clone;
-}
-
-const GeoFullPhysVol* GeoFullPhysVol::cloneOrigin() const
-{
-  return m_cloneOrigin;
-}
-
-/// Breaks the consistency of cloned volumes!
-/// Use it only in Simulation jobs and
-/// Don't call it until geometry has been completely translated to G4
-void GeoFullPhysVol::clear()
-{
-  for(size_t i=0; i<m_daughters.size(); i++)
-    m_daughters[i]->unref();
-  m_daughters.clear();
-}
-
-HepGeom::Transform3D GeoFullPhysVol::getX(const GeoVAlignmentStore* store) const {
-  //
-  // Check we are not shared:
-  //
-  if (isShared()) throw std::runtime_error("Transform requested from shared volume");
-  HepGeom::Transform3D xform;
-  //
-  // Get the address of the first graph node, from the parent:
-  //
-  const GeoGraphNode * const * fence =  getParent()->getChildNode(0);
-  const GeoGraphNode * const * node1 =  getParent()->findChildNode(this);
-  
-  for(const GeoGraphNode * const * current = node1 - 1; current>=fence; current--) {
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoVPhysVol *>(*current)) break;              //
-    //-------------------------------------------------------------------//
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoSerialTransformer *>(*current)) break;     //
-    //-------------------------------------------------------------------//
-
-    const GeoTransform *xf = dynamic_cast<const GeoTransform *> (*current);
-    
-    //-------------------------------------------------------------------//
-    // If this happens, accumulate into transform                        //
-    if (xf) xform  = xf->getTransform(store)*xform;                      //
-    //-------------------------------------------------------------------//
-  }
-  return xform;  
-}
-
-HepGeom::Transform3D GeoFullPhysVol::getDefX(const GeoVAlignmentStore* store) const {
-  //
-  // Check we are not shared:
-  //
-  if (isShared()) throw std::runtime_error("Transform requested from shared volume");
-  HepGeom::Transform3D xform;
-  //
-  // Get the address of the first graph node, from the parent:
-  //
-  const GeoGraphNode * const * fence =  getParent()->getChildNode(0);
-  const GeoGraphNode * const * node1 =  getParent()->findChildNode(this);
-  
-  for(const GeoGraphNode * const * current = node1 - 1; current>=fence; current--) {
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoVPhysVol *>(*current)) break;              //
-    //-------------------------------------------------------------------//
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoSerialTransformer *>(*current)) break;     //
-    //-------------------------------------------------------------------//
-
-    const GeoTransform *xf = dynamic_cast<const GeoTransform *> (*current);
-    
-    //-------------------------------------------------------------------//
-    // If this happens, accumulate into transform                        //
-    if (xf) xform  = xf->getDefTransform(store)*xform;                   //
-    //-------------------------------------------------------------------//
-  }
-  return xform;
-  
-}
-
-unsigned int GeoFullPhysVol::getNChildNodes() const 
-{
-  return m_daughters.size();
-}
-
-const GeoGraphNode * const * GeoFullPhysVol::getChildNode(unsigned int i) const 
-{
-  return &(m_daughters[i]);
-}
-const GeoGraphNode * const * GeoFullPhysVol::findChildNode(const GeoGraphNode * n) const 
-{
-  std::vector<const GeoGraphNode *>::const_iterator i = std::find(m_daughters.begin(),m_daughters.end(),n);
-  if (i==m_daughters.end()) {
-    return nullptr;
-  }
-  else {
-    return &*i;
-  }
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGenericTrap.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGenericTrap.cxx
deleted file mode 100644
index 260cf3513eb5b1ff0b4f59f9d09666151b21af3e..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGenericTrap.cxx
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoGenericTrap.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoGenericTrap::s_classType = "GenericTrap";
-const ShapeType GeoGenericTrap::s_classTypeID = 0x23;
-
-GeoGenericTrap::GeoGenericTrap(double ZHalfLength, const GeoGenericTrapVertices& Vertices)
-  : m_zHalfLength(ZHalfLength)
-  , m_vertices(Vertices)
-{
-}
-
-GeoGenericTrap::~GeoGenericTrap()
-{
-}
-
-double GeoGenericTrap::volume() const
-{
-  // -- ToDo
-  return 0.;
-}
-
-const std::string& GeoGenericTrap::type() const
-{
-  return s_classType;
-}
-
-ShapeType GeoGenericTrap::typeID() const
-{
-  return s_classTypeID;
-}
-
-void GeoGenericTrap::exec(GeoShapeAction *action) const
-{
-  action->handleGenericTrap(this);
-}
-
-double GeoGenericTrap::getZHalfLength() const
-{
-  return m_zHalfLength;
-}
-
-const GeoGenericTrapVertices& GeoGenericTrap::getVertices() const
-{
-  return m_vertices;
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGraphNode.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGraphNode.cxx
deleted file mode 100755
index 49ab96dec4b489d53e169b619534ee66e98eb741..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoGraphNode.cxx
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoGraphNode.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoGraphNode::GeoGraphNode ()
-{
-}
-
-GeoGraphNode::~GeoGraphNode()
-{
-}
-
-void GeoGraphNode::exec (GeoNodeAction *action) const
-{
-  action->handleNode (this);
-}
-
-void GeoGraphNode::dockTo (GeoVPhysVol* )
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoIdentifierTag.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoIdentifierTag.cxx
deleted file mode 100755
index fe6a9bf5fd6f958e503a3ab74625e40e53048cab..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoIdentifierTag.cxx
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoIdentifierTag.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoIdentifierTag::GeoIdentifierTag (int id)
-  : m_identifier(id)
-{
-}
-
-GeoIdentifierTag::~GeoIdentifierTag()
-{
-}
-
-void GeoIdentifierTag::exec (GeoNodeAction *action) const
-{
-  action->handleIdentifierTag (this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoLogVol.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoLogVol.cxx
deleted file mode 100755
index 4827936b28de423678f7cfb5ea6815fc52b61fab..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoLogVol.cxx
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoLogVol.h"
-
-GeoLogVol::GeoLogVol (const std::string &Name, const GeoShape *Shape, const GeoMaterial *Material)
-  : m_name (Name)
-  , m_material (Material)
-  , m_shape (Shape)
-{
-  m_material->ref ();
-  m_shape->ref ();
-}
-
-GeoLogVol::~GeoLogVol()
-{
-  m_material->unref ();
-  m_shape->unref ();
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoMaterial.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoMaterial.cxx
deleted file mode 100755
index 3fbfe9cb191ebe66b8993342982e427879c4241c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoMaterial.cxx
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/PhysicalConstants.h"
-#include <stdexcept>
-#include <cmath>
-#include <numeric>
-#include <cfloat>
-#include <iostream>
-#include <algorithm>
-#include <iterator>
-
-// These constants are the ionization potentials, indexed by atomic     
-// number.  They have been obtained from      
-//     
-// http://physics.nist.gov/PhysRefData/XrayMassCoef/tab1.html     
-//     
-// Which is the reference of the particle data book. Approximate      
-// semiempirical formulae are not accurate enough, so we take the     
-// tabular values. These are in electron-volts.     
-
-
-const double
-  GeoMaterial::s_ionizationPotential[93] = {
-  0.0 *
-    CLHEP::eV,
-  19.2 *
-    CLHEP::eV,
-  41.8 *
-    CLHEP::eV,
-  40.0 *
-    CLHEP::eV,
-  63.7 *
-    CLHEP::eV,
-  76.0 *
-    CLHEP::eV,
-  78.0 *
-    CLHEP::eV,
-  82.0 *
-    CLHEP::eV,
-  95.0 *
-    CLHEP::eV,
-  115.0 *
-    CLHEP::eV,
-  137.0 *
-    CLHEP::eV,
-  149.0 *
-    CLHEP::eV,
-  156.0 *
-    CLHEP::eV,
-  166.0 *
-    CLHEP::eV,
-  173.0 *
-    CLHEP::eV,
-  173.0 *
-    CLHEP::eV,
-  180.0 *
-    CLHEP::eV,
-  174.0 *
-    CLHEP::eV,
-  188.0 *
-    CLHEP::eV,
-  190.0 *
-    CLHEP::eV,
-  191.0 *
-    CLHEP::eV,
-  216.0 *
-    CLHEP::eV,
-  233.0 *
-    CLHEP::eV,
-  245.0 *
-    CLHEP::eV,
-  257.0 *
-    CLHEP::eV,
-  272.0 *
-    CLHEP::eV,
-  286.0 *
-    CLHEP::eV,
-  297.0 *
-    CLHEP::eV,
-  311.0 *
-    CLHEP::eV,
-  322.0 *
-    CLHEP::eV,
-  330.0 *
-    CLHEP::eV,
-  334.0 *
-    CLHEP::eV,
-  350.0 *
-    CLHEP::eV,
-  347.0 *
-    CLHEP::eV,
-  348.0 *
-    CLHEP::eV,
-  343.0 *
-    CLHEP::eV,
-  352.0 *
-    CLHEP::eV,
-  363.0 *
-    CLHEP::eV,
-  366.0 *
-    CLHEP::eV,
-  379.0 *
-    CLHEP::eV,
-  393.0 *
-    CLHEP::eV,
-  417.0 *
-    CLHEP::eV,
-  424.0 *
-    CLHEP::eV,
-  428.0 *
-    CLHEP::eV,
-  441.0 *
-    CLHEP::eV,
-  449.0 *
-    CLHEP::eV,
-  470.0 *
-    CLHEP::eV,
-  470.0 *
-    CLHEP::eV,
-  469.0 *
-    CLHEP::eV,
-  488.0 *
-    CLHEP::eV,
-  488.0 *
-    CLHEP::eV,
-  487.0 *
-    CLHEP::eV,
-  485.0 *
-    CLHEP::eV,
-  491.0 *
-    CLHEP::eV,
-  482.0 *
-    CLHEP::eV,
-  488.0 *
-    CLHEP::eV,
-  491.0 *
-    CLHEP::eV,
-  501.0 *
-    CLHEP::eV,
-  523.0 *
-    CLHEP::eV,
-  535.0 *
-    CLHEP::eV,
-  546.0 *
-    CLHEP::eV,
-  560.0 *
-    CLHEP::eV,
-  574.0 *
-    CLHEP::eV,
-  580.0 *
-    CLHEP::eV,
-  591.0 *
-    CLHEP::eV,
-  614.0 *
-    CLHEP::eV,
-  628.0 *
-    CLHEP::eV,
-  650.0 *
-    CLHEP::eV,
-  658.0 *
-    CLHEP::eV,
-  674.0 *
-    CLHEP::eV,
-  684.0 *
-    CLHEP::eV,
-  694.0 *
-    CLHEP::eV,
-  705.0 *
-    CLHEP::eV,
-  718.0 *
-    CLHEP::eV,
-  727.0 *
-    CLHEP::eV,
-  736.0 *
-    CLHEP::eV,
-  746.0 *
-    CLHEP::eV,
-  757.0 *
-    CLHEP::eV,
-  790.0 *
-    CLHEP::eV,
-  790.0 *
-    CLHEP::eV,
-  800.0 *
-    CLHEP::eV,
-  810.0 *
-    CLHEP::eV,
-  823.0 *
-    CLHEP::eV,
-  823.0 *
-    CLHEP::eV,
-  830.0 *
-    CLHEP::eV,
-  825.0 *
-    CLHEP::eV,
-  794.0 *
-    CLHEP::eV,
-  827.0 *
-    CLHEP::eV,
-  826.0 *
-    CLHEP::eV,
-  841.0 *
-    CLHEP::eV,
-  847.0 *
-    CLHEP::eV,
-  878.0 *
-    CLHEP::eV,
-  890.0 *
-  CLHEP::eV
-};
-
-unsigned int GeoMaterial::s_lastID = 0;
-
-GeoMaterial::GeoMaterial (const std::string &Name, double Density)
-   : m_name(Name)
-   , m_density(Density)
-   , m_iD(s_lastID++)
-   , m_radLength(0)
-   , m_intLength(0)
-   , m_dedDxConst(0)
-   , m_deDxI0(0)
-   , m_locked(false)
-{
-}
-
-GeoMaterial::~GeoMaterial()
-{
-  for (size_t i = 0; i < m_element.size (); i++)
-    {
-      m_element[i]->unref ();
-    }
-}
-
-void GeoMaterial::add (const GeoElement* element, double fraction)
-{
-  // You can only add materials until you call "lock"...     
-  if (!m_locked)
-    {
-      std::vector <const GeoElement *>::iterator e = std::find(m_element.begin(),m_element.end(),element);
-      if (e==m_element.end()) {
-	m_element.push_back (element);
-	m_fraction.push_back (fraction);
-	element->ref ();
-      }
-      else {
-	int n = e-m_element.begin();
-	m_fraction[n]+=fraction;
-      }
-    }
-  else
-    {
-      throw std::out_of_range ("Element added after material locked");
-    }
-}
-
-void GeoMaterial::add (const GeoMaterial* material, double fraction)
-{
-  if (!m_locked)
-    {
-      for (size_t e = 0; e < material->getNumElements (); e++)
-	{
-	  add(material->m_element[e],fraction * material->m_fraction[e]);
-	}
-    }
-  else
-    {
-      throw std::out_of_range ("Material added after material locked");
-    }
-}
-
-void GeoMaterial::lock ()
-{
-  if(m_locked) return;
-
-  m_locked = true;
-
-  // -------------------------------------------//     
-  // Now compute some quantities:               //     
-  // Source of these calculations is:           //     
-  //                                            //     
-  // For DeDx constants and X0:  PDG.           //     
-  // For Lambda0:                G4.            //     
-  //                                            //     
-  // For energy loss                            //     
-  //                                            //     
-  const double C0 = 0.00307 * CLHEP::cm3 / CLHEP::gram;	//     
-  //                                            //     
-  // For nuclear absorption length.             //     
-  const double lambda0 = 35 * CLHEP::gram / CLHEP::cm2;	//     
-  //                                            //     
-  //--------------------------------------------//     
-
-  if (getNumElements () == 0)
-    {
-      throw std::out_of_range ("Attempt to lock a material with no elements");
-      return;
-    }
-
-
-  //--------------------------------------------//     
-  //                                            //     
-  // -------------------------------------------//     
-
-  double dEDxConstant = 0, dEDxI0 = 0, NILinv = 0.0, radInv = 0.0;
-
-  { // ===============Renormalization================================
-    double wSum=std::accumulate(m_fraction.begin(),m_fraction.end(),0.0);
-    if (fabs(wSum-1.0)>0.00001) { 
-      std::cerr << "Warning in material " 
-		<< m_name 
-		<< ". Mass fractions sum to "      
-	        << wSum << "; renormalizing to 1.0" << std::endl;
-    }
-    double inv_wSum = 1. / wSum;
-    for (size_t e=0;e<getNumElements();e++) {m_fraction[e]*=inv_wSum;}
-  } // ==============================================================
-
-  const double inv_lambda0 = 1. / lambda0;
-  for (size_t e = 0; e < getNumElements (); e++)
-    {
-      double w = getFraction (e);	// Weight fraction.     
-      double Z = m_element[e]->getZ ();	// Atomic number     
-      double A = m_element[e]->getA ();	// Atomic mass.     
-      double N = m_element[e]->getN ();	// Number of nucleons.     
-      double dovera = m_density ? m_density / A : 0; // don't crash if both are 0
-      double n = m_fraction[e] * CLHEP::Avogadro * dovera;	// Number density.
-      int iZ = (int) (m_element[e]->getZ () + 0.5) - 1;	// Atomic number index     
-
-      dEDxConstant += w * C0 * dovera * Z;
-      // Make sure we don't overflow the table:
-      // the `Ether' special `element' has Z set to 500.
-      if (iZ >= 0 && iZ < (std::end(s_ionizationPotential)-std::begin(s_ionizationPotential)))
-        dEDxI0 += w * s_ionizationPotential[iZ];
-      NILinv += n * pow (N, 2.0 / 3.0) * CLHEP::amu * inv_lambda0;
-
-      double nAtomsPerVolume = A ? CLHEP::Avogadro*m_density*m_fraction[e]/A : 0.;
-      radInv += (nAtomsPerVolume*m_element[e]->getRadTsai());
-    }
-  m_dedDxConst = dEDxConstant;
-  m_deDxI0    = dEDxI0 ;
-  m_intLength = NILinv ? 1.0 / NILinv : 0;
-  m_radLength = radInv ? 1.0 / radInv : 0;
-}
-
-double GeoMaterial::getDeDxConstant () const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_dedDxConst;
-}
-
-double GeoMaterial::getDeDxI0 () const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_deDxI0;
-}
-
-double GeoMaterial::getDeDxMin () const
-{
-  //------------------------------------------------------------//     
-  static const double ConstToMin = 11.528;	//     
-  //------------------------------------------------------------//     
-
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-
-  // -----------------------------------------------------------//     
-  // See:  Paul Avery's notes on track fitting, CBX 92-39.      //     
-  // Good for typical materials                                 //     
-  // -----------------------------------------------------------//     
-
-  return m_dedDxConst * ConstToMin;
-
-}
-
-double GeoMaterial::getRadLength () const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_radLength;
-}
-
-double GeoMaterial::getIntLength () const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_intLength;
-}
-
-unsigned int GeoMaterial::getNumElements () const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_element.size ();
-}
-
-const GeoElement* GeoMaterial::getElement (unsigned int i) const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_element[i];
-}
-
-double GeoMaterial::getFraction (int i) const
-{
-  if (!m_locked)
-    throw std::out_of_range ("Material accessed before lock");
-  return m_fraction[i];
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNameTag.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNameTag.cxx
deleted file mode 100755
index 1dc26acea3e08f7c0bcc7516015291edb90dcdfc..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNameTag.cxx
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoNameTag::GeoNameTag (const std::string &BaseName)
- : m_name (BaseName)
-{
-}
-
-
-GeoNameTag::~GeoNameTag()
-{
-}
-
-void GeoNameTag::exec (GeoNodeAction *action) const
-{
-  action->handleNameTag (this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNodeAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNodeAction.cxx
deleted file mode 100755
index e4164026dad22e33deee9fa3d5a12bdc3ae80285..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoNodeAction.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoNodeAction::GeoNodeAction()
- : m_terminate (false)
-{
-}
-
-GeoNodeAction::~GeoNodeAction()
-{
-}
-
-void GeoNodeAction::handleNode (const GeoGraphNode *)
-{
-  // Do nothing...    
-}
-
-void GeoNodeAction::handleTransform (const GeoTransform *)
-{
-  // Do nothing...    
-}
-
-void GeoNodeAction::handlePhysVol (const GeoPhysVol *)
-{
-}
-
-void GeoNodeAction::handleFullPhysVol (const GeoFullPhysVol *)
-{
-}
-
-GeoNodePath* GeoNodeAction::getPath ()
-{
-  return &m_path;
-}
-
-Query<unsigned int>  GeoNodeAction::getDepthLimit ()
-{
-  return m_depth;
-}
-
-void GeoNodeAction::terminate ()
-{
-  m_terminate = true;
-}
-
-bool GeoNodeAction::shouldTerminate () const
-{
-  return m_terminate;
-}
-
-void GeoNodeAction::handleNameTag (const GeoNameTag *)
-{
-}
-
-void GeoNodeAction::handleSerialDenominator (const GeoSerialDenominator *)
-{
-}
-
-void GeoNodeAction::setDepthLimit (unsigned int limit)
-{
-  m_depth = limit;
-}
-
-void GeoNodeAction::clearDepthLimit ()
-{
-  m_depth = Query < unsigned int >();
-}
-
-void GeoNodeAction::handleSerialTransformer (const GeoSerialTransformer  *)
-{
-}
-
-void GeoNodeAction::handleIdentifierTag (const GeoIdentifierTag *)
-{
-}
-
-void GeoNodeAction::handleSerialIdentifier(const GeoSerialIdentifier *)
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVConstLink.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVConstLink.cxx
deleted file mode 100755
index e65e17fa92431293c34cdd05501928f758b63358..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVConstLink.cxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPVConstLink.h"
-
-GeoPVConstLink::GeoPVConstLink()
- : m_ptr (0)
-{
-}
-
-GeoPVConstLink::GeoPVConstLink(const GeoPVConstLink &right)
-  : m_ptr (right.m_ptr)
-{
-}
-
-GeoPVConstLink::GeoPVConstLink (const GeoVPhysVol  *addr)
-  : m_ptr (const_cast < GeoVPhysVol * >(addr))
-{
-}
-
-GeoPVConstLink::~GeoPVConstLink()
-{
-}
-
-
-int GeoPVConstLink::operator==(const GeoPVConstLink &right) const
-{
-  return m_ptr == right.m_ptr;
-}
-
-int GeoPVConstLink::operator!=(const GeoPVConstLink &right) const
-{
-  return m_ptr != right.m_ptr;
-}
-
-int GeoPVConstLink::operator<(const GeoPVConstLink &right) const
-{
-  return m_ptr < right.m_ptr;
-}
-
-int GeoPVConstLink::operator>(const GeoPVConstLink &right) const
-{
-  return m_ptr > right.m_ptr;
-}
-
-int GeoPVConstLink::operator<=(const GeoPVConstLink &right) const
-{
-  return m_ptr <= right.m_ptr;
-}
-
-int GeoPVConstLink::operator>=(const GeoPVConstLink &right) const
-{
-  return m_ptr >= right.m_ptr;
-}
-
-const GeoVPhysVol & GeoPVConstLink::operator * () const
-{
-  return *m_ptr;
-}
-
-const GeoVPhysVol * GeoPVConstLink::operator -> () const
-{
-  return m_ptr;
-}
-
-GeoPVConstLink::operator bool () const
-{
-  return m_ptr;
-}
-
-GeoPVConstLink& GeoPVConstLink::operator = (const GeoPVConstLink& right)
-{
-  if (this != &right)
-    {
-      m_ptr = right.m_ptr;
-    }
-  return *this;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVLink.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVLink.cxx
deleted file mode 100755
index 7bb581cddf7e716fffdf3f2a87f1bf535025f24d..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPVLink.cxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPVLink.h"
-
-GeoPVLink::GeoPVLink()
- : GeoPVConstLink (0)
-{
-}
-
-GeoPVLink::GeoPVLink(const GeoPVLink &right)
-  : GeoPVConstLink (right)
-{
-}
-
-GeoPVLink::GeoPVLink (const GeoVPhysVol  *addr)
-  : GeoPVConstLink (addr)
-{
-}
-
-GeoPVLink::~GeoPVLink()
-{
-}
-
-GeoVPhysVol & GeoPVLink::operator * ()
-{
-  return *m_ptr;
-}
-
-GeoVPhysVol * GeoPVLink::operator -> ()
-{
-  return m_ptr;
-}
-
-const GeoVPhysVol & GeoPVLink::operator * () const
-{
-  return *m_ptr;
-}
-
-const GeoVPhysVol * GeoPVLink::operator -> () const
-{
-  return m_ptr;
-}
-
-GeoPVLink& GeoPVLink::operator = (const GeoPVLink& right)
-{
-  if (&right != this)
-    {
-      m_ptr = right.m_ptr;
-    }
-  return *this;
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPara.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPara.cxx
deleted file mode 100755
index 6ecaada7fbbc8c838a11c6fd65bf714e2719eb26..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPara.cxx
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-//## begin module%1.5%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.5%.codegen_version
-
-//## begin module%3CD26D7503D0.cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%3CD26D7503D0.cm
-
-//## begin module%3CD26D7503D0.cp preserve=no
-//## end module%3CD26D7503D0.cp
-
-//## Module: GeoPara%3CD26D7503D0; Pseudo Package body
-//## Source file: /home/atlas/GEO/GeoModelKernel/GeoPara.cxx
-
-//## begin module%3CD26D7503D0.additionalIncludes preserve=no
-//## end module%3CD26D7503D0.additionalIncludes
-
-//## begin module%3CD26D7503D0.includes preserve=yes
-#include <cmath>
-#include "CLHEP/Geometry/Vector3D.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-//## end module%3CD26D7503D0.includes
-
-// GeoPara
-#include "GeoModelKernel/GeoPara.h"
-//## begin module%3CD26D7503D0.additionalDeclarations preserve=yes
-//## end module%3CD26D7503D0.additionalDeclarations
-
-
-// Class GeoPara 
-
-//## begin GeoPara::s_classType%3CD26D7503D1.attr preserve=no  public: static const std::string {U} "Para"
-const std::string GeoPara::s_classType = "Para";
-//## end GeoPara::s_classType%3CD26D7503D1.attr
-
-//## begin GeoPara::s_classTypeID%3CD26D7503D2.attr preserve=no  public: static const ShapeType {U} 0x12
-const ShapeType GeoPara::s_classTypeID = 0x12;
-//## end GeoPara::s_classTypeID%3CD26D7503D2.attr
-
-GeoPara::GeoPara (double XHalfLength, double YHalfLength, double ZHalfLength, double Alpha, double Theta, double Phi)
-  //## begin GeoPara::GeoPara%3CD5A8D5005A.hasinit preserve=no
-  //## end GeoPara::GeoPara%3CD5A8D5005A.hasinit
-  //## begin GeoPara::GeoPara%3CD5A8D5005A.initialization preserve=yes
-  :
-m_xHalfLength (XHalfLength),
-m_yHalfLength (YHalfLength),
-m_zHalfLength (ZHalfLength),
-m_theta (Theta),
-m_alpha (Alpha),
-m_phi (Phi)
-  //## end GeoPara::GeoPara%3CD5A8D5005A.initialization
-{
-  //## begin GeoPara::GeoPara%3CD5A8D5005A.body preserve=yes
-  //## end GeoPara::GeoPara%3CD5A8D5005A.body
-}
-
-
-GeoPara::~GeoPara()
-{
-  //## begin GeoPara::~GeoPara%3CD26D7503D0_dest.body preserve=yes
-  //## end GeoPara::~GeoPara%3CD26D7503D0_dest.body
-}
-
-
-
-//## Other Operations (implementation)
-double GeoPara::volume () const
-{
-  //## begin GeoPara::volume%3CD2A6DB00FC.body preserve=yes
-  HepGeom::Vector3D<double>
-    v0 (1, 0, 0),
-    v1 (sin (m_alpha), cos (m_alpha), 0),
-    v2 (sin (m_theta) * cos (m_phi), sin (m_theta) * sin (m_phi), cos (m_theta));
-  double factor = (v0.cross (v1).dot (v2));
-
-  return 8.0 * factor * m_xHalfLength * m_yHalfLength * m_zHalfLength;
-  //## end GeoPara::volume%3CD2A6DB00FC.body
-}
-
-const std::string & GeoPara::type () const
-{
-  //## begin GeoPara::type%3CD2A83C0208.body preserve=yes
-  return s_classType;
-  //## end GeoPara::type%3CD2A83C0208.body
-}
-
-ShapeType GeoPara::typeID () const
-{
-  //## begin GeoPara::typeID%3CD2A83C0226.body preserve=yes
-  return s_classTypeID;
-  //## end GeoPara::typeID%3CD2A83C0226.body
-}
-
-void GeoPara::exec (GeoShapeAction *action) const
-{
-  //## begin GeoPara::exec%3DB96A3602F5.body preserve=yes
-	action->handlePara(this);
-  //## end GeoPara::exec%3DB96A3602F5.body
-}
-
-// Additional Declarations
-  //## begin GeoPara%3CD26D7503D0.declarations preserve=yes
-  //## end GeoPara%3CD26D7503D0.declarations
-
-//## begin module%3CD26D7503D0.epilog preserve=yes
-//## end module%3CD26D7503D0.epilog
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPcon.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPcon.cxx
deleted file mode 100755
index a7407b86c71b0855b93d08a1e94c330a6a52bca0..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPcon.cxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPcon.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include <cmath>
-#include <stdexcept>
-
-const std::string GeoPcon::s_classType = "Pcon";
-const ShapeType GeoPcon::s_classTypeID = 0x13;
-
-GeoPcon::GeoPcon (double SPhi, double DPhi)
-  : m_sPhi (SPhi)
-  , m_dPhi (DPhi)
-{
-}
-
-GeoPcon::~GeoPcon()
-{
-}
-
-double GeoPcon::volume () const
-{
-  if (!isValid ())
-    throw std::runtime_error ("Volume requested for incomplete polycone");
-  double v = 0;
-  for (size_t s = 0; s < getNPlanes () - 1; s++)
-    {
-      double fDz = fabs (getZPlane (s + 1) - getZPlane (s)) / 2.0;
-      double fRmin1 = getRMinPlane (s + 1);
-      double fRmin2 = getRMinPlane (s);
-      double fRmax1 = getRMaxPlane (s + 1);
-      double fRmax2 = getRMaxPlane (s);
-      v +=
-	(m_dPhi * (1./3)) * fDz * (fRmax1 * fRmax1 + fRmax2 * fRmax2 +
-                                   fRmax1 * fRmax2 - fRmin1 * fRmin1 -
-                                   fRmin2 * fRmin2 - fRmin1 * fRmin2);
-    }
-  return v;
-}
-
-const std::string & GeoPcon::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoPcon::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoPcon::addPlane (double ZPlane, double RMinPlane, double RMaxPlane)
-{
-  m_zPlane.push_back (ZPlane);
-  m_rMinPlane.push_back (RMinPlane);
-  m_rMaxPlane.push_back (RMaxPlane);
-}
-
-void GeoPcon::exec (GeoShapeAction *action) const
-{
-  action->handlePcon(this);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPerfUtils.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPerfUtils.cxx
deleted file mode 100755
index 57405a2ddd4cad35317ecf829c51dc48dcc5e589..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPerfUtils.cxx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPerfUtils.h"
-#include <unistd.h>
-#include <sys/types.h>
-#include <sstream>
-#include <fstream>
-int GeoPerfUtils::getMem() {
-  int memSize = 0;
-  {
-    pid_t pid = getpid();
-    std::ostringstream procstream;
-    procstream << "/proc/" << pid << "/status";
-    std::ifstream memfile(procstream.str().c_str());
-    
-
-    std::string line;
-    while ((memfile >> line)) {
-      if (line=="VmSize:") {
-	memfile >> line;
-	std::istringstream istream(line);
-	istream >> memSize;
-      }
-    }
-  }
-  return memSize;
-}
-
-int GeoPerfUtils::getCpu() {
-
-    pid_t pid = getpid();
-    std::ostringstream procstream;
-    procstream << "/proc/" << pid << "/stat";
-    std::ifstream memfile(procstream.str().c_str());
-
-    int nblancks=0;
-    int uTime = 0;
-    int sTime = 0;
-
-    char line[256];
-    while ((memfile >> line)) {
-        nblancks++;
-
-        if (nblancks==13) {
-            memfile >> line;
-            std::istringstream istream(line);
-            istream >> uTime;
-
-            memfile >> line;
-            std::istringstream istream1(line);
-            istream1 >> sTime;
-
-            return uTime+sTime;
-        }
-    }    
-    return 0;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPgon.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPgon.cxx
deleted file mode 100755
index 63d07db06c21560053fc2478f5a4d583535d8ccc..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPgon.cxx
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPgon.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include <cmath>
-#include <stdexcept>
-
-const std::string GeoPgon::s_classType = "Pgon";
-const ShapeType GeoPgon::s_classTypeID = 0x14;
-
-GeoPgon::GeoPgon (double SPhi, double DPhi, unsigned int NSides)
-  : m_sPhi (SPhi)
-  , m_dPhi (DPhi)
-  , m_nSides (NSides)
-{
-}
-
-GeoPgon::~GeoPgon()
-{
-}
-
-double GeoPgon::volume () const
-{
-  if (!isValid ())
-    throw std::runtime_error ("Volume requested for incomplete polygon");
-  double v = 0;
-  int sides = getNSides ();
-  double alpha = m_dPhi/sides;
-  double sinAlpha = sin(alpha);
-  
-  for (size_t s = 0; s < getNPlanes () - 1; s++) {
-    double z2 = getZPlane (s);
-    double z1 = getZPlane (s + 1);
-    double fRmin1 = getRMinPlane (s + 1);
-    double fRmin2 = getRMinPlane (s);
-    double fRmax1 = getRMaxPlane (s + 1);
-    double fRmax2 = getRMaxPlane (s);
-
-    double b1 = (fRmax1 - fRmax2)/(z1 - z2);
-    double b2 = (fRmin1 - fRmin2)/(z1 - z2);
-
-    double a1 = fRmax2  - b1 * z2;
-    double a2 = fRmin2  - b2 * z2;
-
-    //v+=fabs((a1*a1-a2*a2)*(z1-z2) + (a1*b1-a2*b2)*(z1*z1-z2*z2) + (b1*b1-b2*b2)*(z1*z1*z1-z2*z2*z2)/3.);
-    // Equivalent which should be less sensitive to numerical precision errors:
-    v += fabs(z1 - z2) * ((a1 - a2) * (a1 + a2)  + 
-			  (a1*b1 - a2*b2) * (z1 + z2) +
-			  (b1 - b2) * (b1 + b2) * (z1*z1+z2*z2+z1*z2)*(1./3));  
-  } 
-  v *=  0.5 * sides * sinAlpha;
-  return v;
-}
-
-const std::string & GeoPgon::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoPgon::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoPgon::addPlane (double ZPlane, double RMinPlane, double RMaxPlane)
-{
-  m_zPlane.push_back (ZPlane);
-  m_rMinPlane.push_back (RMinPlane);
-  m_rMaxPlane.push_back (RMaxPlane);
-}
-
-void GeoPgon::exec (GeoShapeAction *action) const
-{
-  action->handlePgon(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPhysVol.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPhysVol.cxx
deleted file mode 100755
index 5dd2f79ad20ff988696fcc7cd795c3dfd350100b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPhysVol.cxx
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPhysVol.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoCountVolAction.h"
-#include "GeoModelKernel/GeoCountVolAndSTAction.h"
-#include "GeoAccessVolumeAction.h"
-#include <algorithm>
-
-GeoPhysVol::GeoPhysVol(const GeoLogVol* LogVol)
-  : GeoVPhysVol(LogVol)
-{
-}
-
-
-GeoPhysVol::~GeoPhysVol()
-{
-  for(const GeoGraphNode* daughter : m_daughters) daughter->unref();
-}
-
-void GeoPhysVol::add(GeoGraphNode* graphNode)
-{
-  m_daughters.push_back(graphNode);
-  graphNode->ref();
-  graphNode->dockTo(this);
-}
-
-unsigned int GeoPhysVol::getNChildVols() const
-{
-  GeoCountVolAction cv;
-  exec(&cv);
-  return cv.getCount ();
-}
-
-PVConstLink GeoPhysVol::getChildVol(unsigned int index) const
-{
-  GeoAccessVolumeAction av(index,nullptr);
-  exec(&av);
-  return av.getVolume();
-}
-
-HepGeom::Transform3D GeoPhysVol::getXToChildVol(unsigned int index
-						,const GeoVAlignmentStore* store) const
-{
-  GeoAccessVolumeAction av(index,store);
-  exec(&av);
-  return av.getTransform();
-}
-
-HepGeom::Transform3D GeoPhysVol::getDefXToChildVol(unsigned int index
-						   ,const GeoVAlignmentStore* store) const
-{
-  GeoAccessVolumeAction av(index,store);
-  exec(&av);
-  return av.getDefTransform();
-}
-
-void GeoPhysVol::exec(GeoNodeAction *action) const
-{
-  //    
-  // Put this node on the head of the path:    
-  //    
-  action->getPath()->push(this);
-  if(action->getDepthLimit().isValid()
-     && action->getPath()->getLength() - 1 > action->getDepthLimit()) {
-    action->getPath ()->pop ();
-    return;
-  }
-  //    
-  // Perform the action on this node:    
-  //    
-  action->handlePhysVol(this);
-  if(action->shouldTerminate()) {
-    action->getPath()->pop();
-    return;
-  }
-  //    
-  // Pass this on to the children.    
-  //    
-  if(action->getDepthLimit().isValid()
-     && action->getPath()->getLength() > action->getDepthLimit()) {
-  }
-  else {
-    for(size_t c = 0; c < m_daughters.size (); c++) {
-      m_daughters[c]->exec(action);
-      if(action->shouldTerminate()) {
-	action->getPath()->pop();
-	return;
-      }
-    }
-  }
-  //    
-  // Take this node back off the head of the path:    
-  //    
-  action->getPath()->pop();
-}
-
-std::string GeoPhysVol::getNameOfChildVol(unsigned int i) const
-{
-  GeoAccessVolumeAction av(i,nullptr);
-  exec(&av);
-  return av.getName();
-}
-
-Query<int> GeoPhysVol::getIdOfChildVol(unsigned int i) const
-{
-  GeoAccessVolumeAction	av(i,nullptr);
-  exec(&av);
-  return av.getId();
-}
-
-unsigned int GeoPhysVol::getNChildVolAndST() const
-{
-  GeoCountVolAndSTAction cv;
-  exec(&cv);
-  return cv.getCount();
-}
-
-HepGeom::Transform3D GeoPhysVol::getX(const GeoVAlignmentStore* store) const {
-  //
-  // Check we are not shared:
-  //
-  if (isShared()) throw std::runtime_error("Transform requested from shared volume");
-  HepGeom::Transform3D xform;
-  //
-  // Get the address of the first graph node, from the parent:
-  //
-  const GeoGraphNode * const * fence =  getParent()->getChildNode(0);
-  const GeoGraphNode * const * node1 =  getParent()->findChildNode(this);
-  
-  for(const GeoGraphNode * const * current = node1 - 1; current>=fence; current--) {
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if(dynamic_cast<const GeoVPhysVol *>(*current)) break;               //
-    //-------------------------------------------------------------------//
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if(dynamic_cast<const GeoSerialTransformer *>(*current)) break;      //
-    //-------------------------------------------------------------------//
-
-    const GeoTransform *xf = dynamic_cast<const GeoTransform *> (*current);
-    
-    //-------------------------------------------------------------------//
-    // If this happens, accumulate into transform                        //
-    if (xf) xform  = xf->getTransform(store)*xform;                      //
-    //-------------------------------------------------------------------//
-  }
-  return xform;  
-}
-
-HepGeom::Transform3D GeoPhysVol::getDefX(const GeoVAlignmentStore* store) const {
-  //
-  // Check we are not shared:
-  //
-  if (isShared()) throw std::runtime_error("Transform requested from shared volume");
-  HepGeom::Transform3D xform;
-  //
-  // Get the address of the first graph node, from the parent:
-  //
-  const GeoGraphNode * const * fence =  getParent()->getChildNode(0);
-  const GeoGraphNode * const * node1 =  getParent()->findChildNode(this);
-  
-  for(const GeoGraphNode * const * current = node1 - 1; current>=fence; current--) {
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoVPhysVol *>(*current)) break;              //
-    //-------------------------------------------------------------------//
-
-    // If this happens, we are done, compute & return--------------------//
-    //                                                                   //
-    if (dynamic_cast<const GeoSerialTransformer *>(*current)) break;     //
-    //-------------------------------------------------------------------//
-
-    const GeoTransform *xf = dynamic_cast<const GeoTransform *> (*current);
-    
-    //-------------------------------------------------------------------//
-    // If this happens, accumulate into transform                        //
-    if (xf) xform  = xf->getDefTransform(store)*xform;                   //
-    //-------------------------------------------------------------------//
-  }
-  return xform;  
-}
-
-unsigned int GeoPhysVol::getNChildNodes() const 
-{
-  return m_daughters.size();
-}
-
-const GeoGraphNode * const * GeoPhysVol::getChildNode(unsigned int i) const 
-{
-  return &(m_daughters[i]);
-}
-
-const GeoGraphNode * const * GeoPhysVol::findChildNode(const GeoGraphNode * n) const 
-{
-  std::vector<const GeoGraphNode *>::const_iterator i = std::find(m_daughters.begin(),m_daughters.end(),n);
-  if (i==m_daughters.end()) {
-    return nullptr;
-  }
-  else {
-    return &*i;
-  }
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedrizeAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedrizeAction.cxx
deleted file mode 100755
index 68c4b207e7523004e9a25d8eb5d59f2d90f26d6f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedrizeAction.cxx
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include "GeoModelKernel/GeoShapeShift.h"
-#include "GeoModelKernel/GeoShapeIntersection.h"
-#include "GeoModelKernel/GeoShapeUnion.h"
-#include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "GeoModelKernel/GeoBox.h"
-#include "GeoModelKernel/GeoCons.h"
-#include "GeoModelKernel/GeoPcon.h"
-#include "GeoModelKernel/GeoPgon.h"
-#include "GeoModelKernel/GeoTrap.h"
-#include "GeoModelKernel/GeoTrd.h"
-#include "GeoModelKernel/GeoTube.h"
-#include "GeoModelKernel/GeoTubs.h"
-#include "GeoModelKernel/GeoPara.h"
-
-GeoPolyhedrizeAction::GeoPolyhedrizeAction()
-  : m_polyhedron(nullptr)
-{
-  setDepthLimit(0);
-}
-
-GeoPolyhedrizeAction::~GeoPolyhedrizeAction()
-{
-  delete m_polyhedron;
-}
-
-void GeoPolyhedrizeAction::handleShift (const GeoShapeShift *shift)
-{
-  shift->getOp()->exec(this); 
-  m_polyhedron->Transform (shift->getX().getRotation (), shift->getX().getTranslation());
-}
-
-void GeoPolyhedrizeAction::handleUnion (const GeoShapeUnion *unio)
-{
-  GeoPolyhedrizeAction auxA,auxB;
-  unio->getOpA()->exec(&auxA);
-  unio->getOpB()->exec(&auxB);
-  m_polyhedron = new GeoPolyhedron(auxA.getPolyhedron()->add(*auxB.getPolyhedron()));
-}
-
-void GeoPolyhedrizeAction::handleIntersection (const GeoShapeIntersection *isect)
-{
-  GeoPolyhedrizeAction auxA,auxB;
-  isect->getOpA()->exec(&auxA);
-  isect->getOpB()->exec(&auxB);
-  m_polyhedron=new GeoPolyhedron(auxA.getPolyhedron()->intersect(*auxB.getPolyhedron()));
-}
-
-void GeoPolyhedrizeAction::handleSubtraction (const GeoShapeSubtraction *subtract)
-{
-  GeoPolyhedrizeAction auxA,auxB;
-  subtract->getOpA()->exec(&auxA);
-  subtract->getOpB()->exec(&auxB);
-  m_polyhedron=new GeoPolyhedron(auxA.getPolyhedron()->subtract(*auxB.getPolyhedron()));
-}
-
-void GeoPolyhedrizeAction::handleBox (const GeoBox *box)
-{
-  m_polyhedron=new GeoPolyhedronBox (box->getXHalfLength(),
-				     box->getYHalfLength(),
-				     box->getZHalfLength());
-}
-
-void GeoPolyhedrizeAction::handleCons (const GeoCons *cons)
-{
-  m_polyhedron = new GeoPolyhedronCons (cons->getRMin1(), 
-					cons->getRMax1(), 
-					cons->getRMin2(), 
-					cons->getRMax2(), 
-					cons->getDZ(),
-					cons->getSPhi(), 
-					cons->getDPhi());
-}
-
-void GeoPolyhedrizeAction::handlePara (const GeoPara *para)
-{
-  m_polyhedron=new GeoPolyhedronPara(para->getXHalfLength(),
-				     para->getYHalfLength(),
-				     para->getZHalfLength(),
-				     para->getAlpha(),
-				     para->getTheta(),
-				     para->getPhi());
-}
-
-void GeoPolyhedrizeAction::handlePcon (const GeoPcon *pcon)
-{
-  double *z = new double[pcon->getNPlanes ()];
-  double *rmn = new double[pcon->getNPlanes ()];
-  double *rmx = new double[pcon->getNPlanes ()];
-
-  for (unsigned int s = 0; s < pcon->getNPlanes (); s++)
-    {
-      z[s] = pcon->getZPlane (s);
-      rmn[s] = pcon->getRMinPlane (s);
-      rmx[s] = pcon->getRMaxPlane (s);
-    }
-  m_polyhedron = new GeoPolyhedronPcon (pcon->getSPhi(), pcon->getDPhi(), pcon->getNPlanes (), z, rmn, rmx);
-
-  delete[]z;
-  delete[]rmn;
-  delete[]rmx;
-}
-
-void GeoPolyhedrizeAction::handlePgon (const GeoPgon *pgon)
-{
-  double *z   = new double[pgon->getNPlanes ()];
-  double *rmn = new double[pgon->getNPlanes ()];
-  double *rmx = new double[pgon->getNPlanes ()];
-
-  for (unsigned int s = 0; s < pgon->getNPlanes (); s++)
-    {
-      z[s]   = pgon->getZPlane (s);
-      rmn[s] = pgon->getRMinPlane (s);
-      rmx[s] = pgon->getRMaxPlane (s);
-    }
-  m_polyhedron = new GeoPolyhedronPgon (pgon->getSPhi(), pgon->getDPhi(), pgon->getNSides(), pgon->getNPlanes (), z, rmn, rmx);
-
-  delete[]z;
-  delete[]rmn;
-  delete[]rmx;
-}
-
-void GeoPolyhedrizeAction::handleTrap (const GeoTrap *trap)
-{
-  m_polyhedron = new GeoPolyhedronTrap (trap->getZHalfLength(),
-					trap->getTheta(),
-					trap->getPhi(),
-					trap->getDydzn(),
-					trap->getDxdyndzn(),
-					trap->getDxdypdzn(), 0,
-					trap->getDydzp(), 
-					trap->getDxdyndzp(), 
-					trap->getDxdypdzp(),0);
-}
-
-void GeoPolyhedrizeAction::handleTrd (const GeoTrd *trd)
-{
-  m_polyhedron = new GeoPolyhedronTrd2 (trd->getXHalfLength1(),
-					trd->getXHalfLength2(),
-					trd->getYHalfLength1(),
-					trd->getYHalfLength2(),
-					trd->getZHalfLength());
-}
-
-void GeoPolyhedrizeAction::handleTube (const GeoTube *tube)
-{
-  m_polyhedron = new GeoPolyhedronTube (tube->getRMin(),
-					tube->getRMax(),
-					tube->getZHalfLength());
-}
-
-void GeoPolyhedrizeAction::handleTubs (const GeoTubs *tubs)
-{
-  m_polyhedron= new GeoPolyhedronTubs (tubs->getRMin(), 
-				       tubs->getRMax(), 
-				       tubs->getZHalfLength(),
-				       tubs->getSPhi(),
-				       tubs->getDPhi());
-}
-
-const GeoPolyhedron * GeoPolyhedrizeAction::getPolyhedron () const
-{
-  return m_polyhedron;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedron.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedron.cxx
deleted file mode 100755
index 9a3deb083a40da4d1fa1b8bf12e5531b65138cae..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPolyhedron.cxx
+++ /dev/null
@@ -1,2171 +0,0 @@
-
-#include "GeoModelKernel/GeoPolyhedron.h"
-
-#include <iostream>
-#include <vector>
-
-#define perMillion 0.000001
-#define deg (M_PI/180.0)
-
-#include <float.h>		//G.Barrand : to have DBL_EPSILON on Windows.
-
-// G.Barrand : introduce iabs to avoid a mess with cmath and some compiler.
-inline int
-iabs (int a)
-{
-  return a < 0 ? -a : a;
-}
-inline float
-ffabs (float a)
-{
-  return a < 0.0f ? -a : a;
-}
-
-//--------------------------------------------------------------------//
-// JFB:                                                               //
-// GeoPolyhedron was GeoPolyhedron, retrofitted to GeoModel           //
-// infrastructure:                                                    //
-//--------------------------------------------------------------------//
-
-//
-// ********************************************************************
-// * DISCLAIMER                                                       *
-// *                                                                  *
-// * The following disclaimer summarizes all the specific disclaimers *
-// * of contributors to this software. The specific disclaimers,which *
-// * govern, are listed with their locations in:                      *
-// *   http://cern.ch/geant4/license                                  *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.                                                             *
-// *                                                                  *
-// * This  code  implementation is the  intellectual property  of the *
-// * GEANT4 collaboration.                                            *
-// * By copying,  distributing  or modifying the Program (or any work *
-// * based  on  the Program)  you indicate  your  acceptance of  this *
-// * statement, and all its terms.                                    *
-// ********************************************************************
-//
-//
-// 
-//
-// G4 Polyhedron library
-//
-// History:
-// 23.07.96 E.Chernyaev <Evgueni.Tcherniaev@cern.ch> - initial version
-//
-// 30.09.96 E.Chernyaev
-// - added GetNextVertexIndex, GetVertex by Yasuhide Sawada
-// - added GetNextUnitNormal, GetNextEdgeIndeces, GetNextEdge
-//
-// 15.12.96 E.Chernyaev
-// - added GetNumberOfRotationSteps, RotateEdge, RotateAroundZ, SetReferences
-// - rewritten G4PolyhedronCons;
-// - added G4PolyhedronPara, ...Trap, ...Pgon, ...Pcon, ...Sphere, ...Torus
-//
-// 01.06.97 E.Chernyaev
-// - modified RotateAroundZ, added SetSideFacets
-//
-// 19.03.00 E.Chernyaev
-// - implemented boolean operations (add, subtract, intersect) on polyhedra;
-//
-// 25.05.01 E.Chernyaev
-// - added GetSurfaceArea() and GetVolume();
-//
-
-
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron operator <<                   Date:    09.05.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Print contents of G4 polyhedron                           *
- *                                                                     *
- ***********************************************************************/
-std::ostream & operator<< (std::ostream & ostr, const GeoFacet & facet)
-{
-  for (int k = 0; k < 4; k++)
-    {
-      ostr << " " << facet.m_edge[k].v << "/" << facet.m_edge[k].f;
-    }
-  return ostr;
-}
-
-std::ostream & operator<< (std::ostream & ostr, const GeoPolyhedron & ph)
-{
-  ostr << std::endl;
-  ostr << "Nverteces=" << ph.m_nvert << ", Nfacets=" << ph.m_nface << std::endl;
-  int i;
-  for (i = 1; i <= ph.m_nvert; i++)
-    {
-      ostr << "xyz(" << i << ")="
-        << ph.m_pV[i][0] << ' ' << ph.m_pV[i][1] << ' ' << ph.m_pV[i][2]
-	<< std::endl;
-    }
-  for (i = 1; i <= ph.m_nface; i++)
-    {
-      ostr << "face(" << i << ")=" << ph.m_pF[i] << std::endl;
-    }
-  return ostr;
-}
-
-GeoPolyhedron::GeoPolyhedron (const GeoPolyhedron & from)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron copy constructor             Date:    23.07.96  *
- * Author: E.Chernyaev (IHEP/Protvino)              Revised:           *
- *                                                                     *
- ***********************************************************************/
-{
-  if (from.m_nvert > 0 && from.m_nface > 0)
-    {
-      m_nvert = from.m_nvert;
-      m_nface = from.m_nface;
-      m_pV = new HVPoint3D[m_nvert + 1];
-      m_pF = new GeoFacet[m_nface + 1];
-      int i;
-      for (i = 0; i <= m_nvert; i++)
-	m_pV[i] = from.m_pV[i];
-      for (i = 0; i <= m_nface; i++)
-	m_pF[i] = from.m_pF[i];
-    }
-  else
-    {
-      m_nvert = 0;
-      m_nface = 0;
-      m_pV = 0;
-      m_pF = 0;
-    }
-}
-
-GeoPolyhedron & GeoPolyhedron::operator= (const GeoPolyhedron & from)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron operator =                   Date:    23.07.96  *
- * Author: E.Chernyaev (IHEP/Protvino)              Revised:           *
- *                                                                     *
- * Function: Copy contents of one GEANT4 polyhedron to another         *
- *                                                                     *
- ***********************************************************************/
-{
-  if (this == &from)
-    return *this;
-  delete[]m_pV;
-  delete[]m_pF;
-  if (from.m_nvert > 0 && from.m_nface > 0)
-    {
-      m_nvert = from.m_nvert;
-      m_nface = from.m_nface;
-      m_pV = new HVPoint3D[m_nvert + 1];
-      m_pF = new GeoFacet[m_nface + 1];
-      int
-	i;
-      for (i = 1; i <= m_nvert; i++)
-	m_pV[i] = from.m_pV[i];
-      for (i = 1; i <= m_nface; i++)
-	m_pF[i] = from.m_pF[i];
-    }
-  else
-    {
-      m_nvert = 0;
-      m_nface = 0;
-      m_pV = 0;
-      m_pF = 0;
-    }
-  return *this;
-}
-
-int
-GeoPolyhedron::FindNeighbour (int iFace, int iNode, int iOrder) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::FindNeighbour                Date:    22.11.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find neighbouring face                                    *
- *                                                                     *
- ***********************************************************************/
-{
-  int i;
-  for (i = 0; i < 4; i++)
-    {
-      if (iNode == iabs (m_pF[iFace].m_edge[i].v))
-	break;
-    }
-  if (i == 4)
-    {
-      std::cerr
-	<< "GeoPolyhedron::FindNeighbour: face " << iFace
-	<< " has no node " << iNode << std::endl;
-      return 0;
-    }
-  if (iOrder < 0)
-    {
-      if (--i < 0)
-	i = 3;
-      if (m_pF[iFace].m_edge[i].v == 0)
-	i = 2;
-    }
-  return (m_pF[iFace].m_edge[i].v > 0) ? 0 : m_pF[iFace].m_edge[i].f;
-}
-
-HVNormal3D GeoPolyhedron::FindNodeNormal (int iFace, int iNode) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::FindNodeNormal               Date:    22.11.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Find normal at given node                                 *
- *                                                                     *
- ***********************************************************************/
-{
-  HVNormal3D
-    normal =
-    GetUnitNormal (iFace);
-  int
-    k =
-    iFace,
-    iOrder =
-    1,
-    n =
-    1;
-
-  for (;;)
-    {
-      k = FindNeighbour (k, iNode, iOrder);
-      if (k == iFace)
-	break;
-      if (k > 0)
-	{
-	  n++;
-	  normal += GetUnitNormal (k);
-	}
-      else
-	{
-	  if (iOrder < 0)
-	    break;
-	  k = iFace;
-	  iOrder = -iOrder;
-	}
-    }
-  normal.setMag (1.0);
-  return normal;
-}
-
-void
-GeoPolyhedron::SetNumberOfRotationSteps (int n)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::SetNumberOfRotationSteps     Date:    24.06.97 *
- * Author: J.Allison (Manchester University)         Revised:          *
- *                                                                     *
- * Function: Set number of steps for whole circle                      *
- *                                                                     *
- ***********************************************************************/
-{
-  const int nMin = 3;
-  if (n < nMin)
-    {
-      std::cerr
-	<< "GeoPolyhedron::SetNumberOfRotationSteps: attempt to set the\n"
-	<< "number of steps per circle < " << nMin << "; forced to " << nMin
-	<< std::endl;
-      s_fNumberOfRotationSteps = nMin;
-    }
-  else
-    {
-      s_fNumberOfRotationSteps = n;
-    }
-}
-
-void
-GeoPolyhedron::AllocateMemory (int Nvert, int Nface)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::AllocateMemory               Date:    19.06.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Allocate memory for GEANT4 polyhedron                     *
- *                                                                     *
- * Input: Nvert - number of nodes                                      *
- *        Nface - number of faces                                      *
- *                                                                     *
- ***********************************************************************/
-{
-  m_nvert = Nvert;
-  m_nface = Nface;
-  m_pV = new HVPoint3D[m_nvert + 1];
-  m_pF = new GeoFacet[m_nface + 1];
-}
-
-void
-GeoPolyhedron::CreatePrism ()
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::CreatePrism                  Date:    15.07.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Set facets for a prism                                    *
- *                                                                     *
- ***********************************************************************/
-{
-  enum
-  { DUMMY, BOTTOM, LEFT, BACK, RIGHT, FRONT, TOP };
-
-  m_pF[1] = GeoFacet (1, LEFT, 4, BACK, 3, RIGHT, 2, FRONT);
-  m_pF[2] = GeoFacet (5, TOP, 8, BACK, 4, BOTTOM, 1, FRONT);
-  m_pF[3] = GeoFacet (8, TOP, 7, RIGHT, 3, BOTTOM, 4, LEFT);
-  m_pF[4] = GeoFacet (7, TOP, 6, FRONT, 2, BOTTOM, 3, BACK);
-  m_pF[5] = GeoFacet (6, TOP, 5, LEFT, 1, BOTTOM, 2, RIGHT);
-  m_pF[6] = GeoFacet (5, FRONT, 6, RIGHT, 7, BACK, 8, LEFT);
-}
-
-void
-GeoPolyhedron::RotateEdge (int k1, int k2, double r1, double r2,
-			   int v1, int v2, int vEdge,
-			   bool ifWholeCircle, int ns, int &kface)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::RotateEdge                   Date:    05.12.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Create set of facets by rotation of an edge around Z-axis *
- *                                                                     *
- * Input: k1, k2 - end vertices of the edge                            *
- *        r1, r2 - radiuses of the end vertices                        *
- *        v1, v2 - visibility of edges produced by rotation of the end *
- *                 vertices                                            *
- *        vEdge  - visibility of the edge                              *
- *        ifWholeCircle - is true in case of whole circle rotation     *
- *        ns     - number of discrete steps                            *
- *        r[]    - r-coordinates                                       *
- *        kface  - current free cell in the m_pF array                 *
- *                                                                     *
- ***********************************************************************/
-{
-  if (r1 == 0. && r2 == 0)
-    return;
-
-  int i;
-  int i1 = k1;
-  int i2 = k2;
-  int ii1 = ifWholeCircle ? i1 : i1 + ns;
-  int ii2 = ifWholeCircle ? i2 : i2 + ns;
-  int vv = ifWholeCircle ? vEdge : 1;
-
-  if (ns == 1)
-    {
-      if (r1 == 0.)
-	{
-	  m_pF[kface++] = GeoFacet (i1, 0, v2 * i2, 0, (i2 + 1), 0);
-	}
-      else if (r2 == 0.)
-	{
-	  m_pF[kface++] = GeoFacet (i1, 0, i2, 0, v1 * (i1 + 1), 0);
-	}
-      else
-	{
-	  m_pF[kface++] =
-	    GeoFacet (i1, 0, v2 * i2, 0, (i2 + 1), 0, v1 * (i1 + 1), 0);
-	}
-    }
-  else
-    {
-      if (r1 == 0.)
-	{
-	  m_pF[kface++] =
-	    GeoFacet (vv * i1, 0, v2 * i2, 0, vEdge * (i2 + 1), 0);
-	  for (i2++, i = 1; i < ns - 1; i2++, i++)
-	    {
-	      m_pF[kface++] =
-		GeoFacet (vEdge * i1, 0, v2 * i2, 0, vEdge * (i2 + 1), 0);
-	    }
-	  m_pF[kface++] = GeoFacet (vEdge * i1, 0, v2 * i2, 0, vv * ii2, 0);
-	}
-      else if (r2 == 0.)
-	{
-	  m_pF[kface++] =
-	    GeoFacet (vv * i1, 0, vEdge * i2, 0, v1 * (i1 + 1), 0);
-	  for (i1++, i = 1; i < ns - 1; i1++, i++)
-	    {
-	      m_pF[kface++] =
-		GeoFacet (vEdge * i1, 0, vEdge * i2, 0, v1 * (i1 + 1), 0);
-	    }
-	  m_pF[kface++] = GeoFacet (vEdge * i1, 0, vv * i2, 0, v1 * ii1, 0);
-	}
-      else
-	{
-	  m_pF[kface++] =
-	    GeoFacet (vv * i1, 0, v2 * i2, 0, vEdge * (i2 + 1), 0,
-		      v1 * (i1 + 1), 0);
-	  for (i1++, i2++, i = 1; i < ns - 1; i1++, i2++, i++)
-	    {
-	      m_pF[kface++] =
-		GeoFacet (vEdge * i1, 0, v2 * i2, 0, vEdge * (i2 + 1), 0,
-			  v1 * (i1 + 1), 0);
-	    }
-	  m_pF[kface++] =
-	    GeoFacet (vEdge * i1, 0, v2 * i2, 0, vv * ii2, 0, v1 * ii1, 0);
-	}
-    }
-}
-
-void
-GeoPolyhedron::SetSideFacets (int ii[4], int vv[4],
-			      int *kk, double *r,
-			      double dphi, int ns, int &kface)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::SetSideFacets                Date:    20.05.97 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Set side facets for the case of incomplete rotation       *
- *                                                                     *
- * Input: ii[4] - indeces of original verteces                         *
- *        vv[4] - visibility of edges                                  *
- *        kk[]  - indeces of nodes                                     *
- *        r[]   - radiuses                                             *
- *        dphi  - delta phi                                            *
- *        ns     - number of discrete steps                            *
- *        kface  - current free cell in the pF array                   *
- *                                                                     *
- ***********************************************************************/
-{
-  int k1, k2, k3, k4;
-  if (fabs (dphi - M_PI) < perMillion)
-    {				// half a circle
-      for (int i = 0; i < 4; i++)
-	{
-	  k1 = ii[i];
-	  k2 = (i == 3) ? ii[0] : ii[i + 1];
-	  if (r[k1] == 0. && r[k2] == 0.)
-	    vv[i] = -1;
-	}
-    }
-
-  if (ii[1] == ii[2])
-    {
-      k1 = kk[ii[0]];
-      k2 = kk[ii[2]];
-      k3 = kk[ii[3]];
-      m_pF[kface++] = GeoFacet (vv[0] * k1, 0, vv[2] * k2, 0, vv[3] * k3, 0);
-      if (r[ii[0]] != 0.)
-	k1 += ns;
-      if (r[ii[2]] != 0.)
-	k2 += ns;
-      if (r[ii[3]] != 0.)
-	k3 += ns;
-      m_pF[kface++] = GeoFacet (vv[2] * k3, 0, vv[0] * k2, 0, vv[3] * k1, 0);
-    }
-  else if (kk[ii[0]] == kk[ii[1]])
-    {
-      k1 = kk[ii[0]];
-      k2 = kk[ii[2]];
-      k3 = kk[ii[3]];
-      m_pF[kface++] = GeoFacet (vv[1] * k1, 0, vv[2] * k2, 0, vv[3] * k3, 0);
-      if (r[ii[0]] != 0.)
-	k1 += ns;
-      if (r[ii[2]] != 0.)
-	k2 += ns;
-      if (r[ii[3]] != 0.)
-	k3 += ns;
-      m_pF[kface++] = GeoFacet (vv[2] * k3, 0, vv[1] * k2, 0, vv[3] * k1, 0);
-    }
-  else if (kk[ii[2]] == kk[ii[3]])
-    {
-      k1 = kk[ii[0]];
-      k2 = kk[ii[1]];
-      k3 = kk[ii[2]];
-      m_pF[kface++] = GeoFacet (vv[0] * k1, 0, vv[1] * k2, 0, vv[3] * k3, 0);
-      if (r[ii[0]] != 0.)
-	k1 += ns;
-      if (r[ii[1]] != 0.)
-	k2 += ns;
-      if (r[ii[2]] != 0.)
-	k3 += ns;
-      m_pF[kface++] = GeoFacet (vv[1] * k3, 0, vv[0] * k2, 0, vv[3] * k1, 0);
-    }
-  else
-    {
-      k1 = kk[ii[0]];
-      k2 = kk[ii[1]];
-      k3 = kk[ii[2]];
-      k4 = kk[ii[3]];
-      m_pF[kface++] =
-	GeoFacet (vv[0] * k1, 0, vv[1] * k2, 0, vv[2] * k3, 0, vv[3] * k4, 0);
-      if (r[ii[0]] != 0.)
-	k1 += ns;
-      if (r[ii[1]] != 0.)
-	k2 += ns;
-      if (r[ii[2]] != 0.)
-	k3 += ns;
-      if (r[ii[3]] != 0.)
-	k4 += ns;
-      m_pF[kface++] =
-	GeoFacet (vv[2] * k4, 0, vv[1] * k3, 0, vv[0] * k2, 0, vv[3] * k1, 0);
-    }
-}
-
-void
-GeoPolyhedron::RotateAroundZ (int nstep, double phi, double dphi,
-			      int np1, int np2,
-			      const double *z, double *r,
-			      int nodeVis, int edgeVis)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::RotateAroundZ                Date:    27.11.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Create GeoPolyhedron for a solid produced by rotation of  *
- *           two polylines around Z-axis                               *
- *                                                                     *
- * Input: nstep - number of discrete steps, if 0 then default          *
- *        phi   - starting phi angle                                   *
- *        dphi  - delta phi                                            *
- *        np1   - number of points in external polyline                *
- *                (must be negative in case of closed polyline)        *
- *        np2   - number of points in internal polyline (may be 1)     *
- *        z[]   - z-coordinates (+z >>> -z for both polylines)         *
- *        r[]   - r-coordinates                                        *
- *        nodeVis - how to Draw edges joing consecutive positions of   *
- *                  node during rotation                               *
- *        edgeVis - how to Draw edges                                  *
- *                                                                     *
- ***********************************************************************/
-{
-  static double wholeCircle = 2 * M_PI;
-
-  //   S E T   R O T A T I O N   P A R A M E T E R S
-
-  bool ifWholeCircle = (fabs (dphi - wholeCircle) < perMillion) ?
-    true : false;
-  double delPhi = ifWholeCircle ? wholeCircle : dphi;
-  int nSphi = (nstep > 0) ?
-    nstep : int (delPhi * GetNumberOfRotationSteps () / wholeCircle + .5);
-  if (nSphi == 0)
-    nSphi = 1;
-  int nVphi = ifWholeCircle ? nSphi : nSphi + 1;
-  bool ifClosed = np1 > 0 ? false : true;
-
-  //   C O U N T   V E R T E C E S
-
-  int absNp1 = iabs (np1);
-  int absNp2 = iabs (np2);
-  int i1beg = 0;
-  int i1end = absNp1 - 1;
-  int i2beg = absNp1;
-  int i2end = absNp1 + absNp2 - 1;
-  int i, j, k;
-
-  for (i = i1beg; i <= i2end; i++)
-    {
-      if (fabs (r[i]) < perMillion)
-	r[i] = 0.;
-    }
-
-  j = 0;			// external nodes
-  for (i = i1beg; i <= i1end; i++)
-    {
-      j += (r[i] == 0.) ? 1 : nVphi;
-    }
-
-  bool ifSide1 = false;		// internal nodes
-  bool ifSide2 = false;
-
-  if (r[i2beg] != r[i1beg] || z[i2beg] != z[i1beg])
-    {
-      j += (r[i2beg] == 0.) ? 1 : nVphi;
-      ifSide1 = true;
-    }
-
-  for (i = i2beg + 1; i < i2end; i++)
-    {
-      j += (r[i] == 0.) ? 1 : nVphi;
-    }
-
-  if (r[i2end] != r[i1end] || z[i2end] != z[i1end])
-    {
-      if (absNp2 > 1)
-	j += (r[i2end] == 0.) ? 1 : nVphi;
-      ifSide2 = true;
-    }
-
-  //   C O U N T   F A C E S
-
-  k = ifClosed ? absNp1 * nSphi : (absNp1 - 1) * nSphi;	// external faces
-
-  if (absNp2 > 1)
-    {				// internal faces
-      for (i = i2beg; i < i2end; i++)
-	{
-	  if (r[i] > 0. || r[i + 1] > 0.)
-	    k += nSphi;
-	}
-
-      if (ifClosed)
-	{
-	  if (r[i2end] > 0. || r[i2beg] > 0.)
-	    k += nSphi;
-	}
-    }
-
-  if (!ifClosed)
-    {				// side faces
-      if (ifSide1 && (r[i1beg] > 0. || r[i2beg] > 0.))
-	k += nSphi;
-      if (ifSide2 && (r[i1end] > 0. || r[i2end] > 0.))
-	k += nSphi;
-    }
-
-  if (!ifWholeCircle)
-    {				// phi_side faces
-      k += ifClosed ? 2 * absNp1 : 2 * (absNp1 - 1);
-    }
-
-  //   A L L O C A T E   M E M O R Y
-
-  AllocateMemory (j, k);
-
-  //   G E N E R A T E   V E R T E C E S
-
-  int *kk;
-  kk = new int[absNp1 + absNp2];
-
-  k = 1;
-  for (i = i1beg; i <= i1end; i++)
-    {
-      kk[i] = k;
-      if (r[i] == 0.)
-	{
-	  m_pV[k++] = HVPoint3D (0, 0, z[i]);
-	}
-      else
-	{
-	  k += nVphi;
-	}
-    }
-
-  i = i2beg;
-  if (ifSide1)
-    {
-      kk[i] = k;
-      if (r[i] == 0.)
-	{
-	  m_pV[k++] = HVPoint3D (0, 0, z[i]);
-	}
-      else
-	{
-	  k += nVphi;
-	}
-    }
-  else
-    {
-      kk[i] = kk[i1beg];
-    }
-
-  for (i = i2beg + 1; i < i2end; i++)
-    {
-      kk[i] = k;
-      if (r[i] == 0.)
-	{
-	  m_pV[k++] = HVPoint3D (0, 0, z[i]);
-	}
-      else
-	{
-	  k += nVphi;
-	}
-    }
-
-  if (absNp2 > 1)
-    {
-      i = i2end;
-      if (ifSide2)
-	{
-	  kk[i] = k;
-	  if (r[i] == 0.)
-	    m_pV[k] = HVPoint3D (0, 0, z[i]);
-	}
-      else
-	{
-	  kk[i] = kk[i1end];
-	}
-    }
-
-  double cosPhi, sinPhi;
-
-  double fac = delPhi / nSphi;
-  for (j = 0; j < nVphi; j++)
-    {
-      cosPhi = cos (phi + j * fac);
-      sinPhi = sin (phi + j * fac);
-      for (i = i1beg; i <= i2end; i++)
-	{
-	  if (r[i] != 0.)
-	    m_pV[kk[i] + j] = HVPoint3D (r[i] * cosPhi, r[i] * sinPhi, z[i]);
-	}
-    }
-
-  //   G E N E R A T E   E X T E R N A L   F A C E S
-
-  int v1, v2;
-
-  k = 1;
-  v2 = ifClosed ? nodeVis : 1;
-  for (i = i1beg; i < i1end; i++)
-    {
-      v1 = v2;
-      if (!ifClosed && i == i1end - 1)
-	{
-	  v2 = 1;
-	}
-      else
-	{
-	  v2 = (r[i] == r[i + 1] && r[i + 1] == r[i + 2]) ? -1 : nodeVis;
-	}
-      RotateEdge (kk[i], kk[i + 1], r[i], r[i + 1], v1, v2,
-		  edgeVis, ifWholeCircle, nSphi, k);
-    }
-  if (ifClosed)
-    {
-      RotateEdge (kk[i1end], kk[i1beg], r[i1end], r[i1beg], nodeVis, nodeVis,
-		  edgeVis, ifWholeCircle, nSphi, k);
-    }
-
-  //   G E N E R A T E   I N T E R N A L   F A C E S
-
-  if (absNp2 > 1)
-    {
-      v2 = ifClosed ? nodeVis : 1;
-      for (i = i2beg; i < i2end; i++)
-	{
-	  v1 = v2;
-	  if (!ifClosed && i == i2end - 1)
-	    {
-	      v2 = 1;
-	    }
-	  else
-	    {
-	      v2 = (r[i] == r[i + 1] && r[i + 1] == r[i + 2]) ? -1 : nodeVis;
-	    }
-	  RotateEdge (kk[i + 1], kk[i], r[i + 1], r[i], v2, v1,
-		      edgeVis, ifWholeCircle, nSphi, k);
-	}
-      if (ifClosed)
-	{
-	  RotateEdge (kk[i2beg], kk[i2end], r[i2beg], r[i2end], nodeVis,
-		      nodeVis, edgeVis, ifWholeCircle, nSphi, k);
-	}
-    }
-
-  //   G E N E R A T E   S I D E   F A C E S
-
-  if (!ifClosed)
-    {
-      if (ifSide1)
-	{
-	  RotateEdge (kk[i2beg], kk[i1beg], r[i2beg], r[i1beg], 1, 1,
-		      -1, ifWholeCircle, nSphi, k);
-	}
-      if (ifSide2)
-	{
-	  RotateEdge (kk[i1end], kk[i2end], r[i1end], r[i2end], 1, 1,
-		      -1, ifWholeCircle, nSphi, k);
-	}
-    }
-
-  //   G E N E R A T E   S I D E   F A C E S  for the case of incomplete circle
-
-  if (!ifWholeCircle)
-    {
-
-      int ii[4], vv[4];
-
-      if (ifClosed)
-	{
-	  for (i = i1beg; i <= i1end; i++)
-	    {
-	      ii[0] = i;
-	      ii[3] = (i == i1end) ? i1beg : i + 1;
-	      ii[1] = (absNp2 == 1) ? i2beg : ii[0] + absNp1;
-	      ii[2] = (absNp2 == 1) ? i2beg : ii[3] + absNp1;
-	      vv[0] = -1;
-	      vv[1] = 1;
-	      vv[2] = -1;
-	      vv[3] = 1;
-	      SetSideFacets (ii, vv, kk, r, dphi, nSphi, k);
-	    }
-	}
-      else
-	{
-	  for (i = i1beg; i < i1end; i++)
-	    {
-	      ii[0] = i;
-	      ii[3] = i + 1;
-	      ii[1] = (absNp2 == 1) ? i2beg : ii[0] + absNp1;
-	      ii[2] = (absNp2 == 1) ? i2beg : ii[3] + absNp1;
-	      vv[0] = (i == i1beg) ? 1 : -1;
-	      vv[1] = 1;
-	      vv[2] = (i == i1end - 1) ? 1 : -1;
-	      vv[3] = 1;
-	      SetSideFacets (ii, vv, kk, r, dphi, nSphi, k);
-	    }
-	}
-    }
-
-  delete[]kk;
-
-  if (k - 1 != m_nface)
-    {
-      std::cerr
-	<< "Polyhedron::RotateAroundZ: number of generated faces ("
-	<< k - 1 << ") is not equal to the number of allocated faces ("
-	<< m_nface << ")" << std::endl;
-    }
-}
-
-void
-GeoPolyhedron::SetReferences ()
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::SetReferences                Date:    04.12.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: For each edge set reference to neighbouring facet         *
- *                                                                     *
- ***********************************************************************/
-{
-  if (m_nface <= 0)
-    return;
-
-  struct edgeListMember
-  {
-    edgeListMember *next;
-    int v2;
-    int iface;
-    int iedge;
-  }
-   *edgeList, *freeList, **headList;
-
-
-  //   A L L O C A T E   A N D   I N I T I A T E   L I S T S
-
-  edgeList = new edgeListMember[2 * m_nface];
-  headList = new edgeListMember *[m_nvert];
-
-  int i;
-  for (i = 0; i < m_nvert; i++)
-    {
-      headList[i] = 0;
-    }
-  freeList = edgeList;
-  for (i = 0; i < 2 * m_nface - 1; i++)
-    {
-      edgeList[i].next = &edgeList[i + 1];
-    }
-  edgeList[2 * m_nface - 1].next = 0;
-
-  //   L O O P   A L O N G   E D G E S
-
-  int iface, iedge, nedge, i1, i2, k1, k2;
-  edgeListMember *prev, *cur;
-
-  for (iface = 1; iface <= m_nface; iface++)
-    {
-      nedge = (m_pF[iface].m_edge[3].v == 0) ? 3 : 4;
-      for (iedge = 0; iedge < nedge; iedge++)
-	{
-	  i1 = iedge;
-	  i2 = (iedge < nedge - 1) ? iedge + 1 : 0;
-	  i1 = iabs (m_pF[iface].m_edge[i1].v);
-	  i2 = iabs (m_pF[iface].m_edge[i2].v);
-	  k1 = (i1 < i2) ? i1 : i2;	// k1 = ::min(i1,i2);
-	  k2 = (i1 > i2) ? i1 : i2;	// k2 = ::max(i1,i2);
-
-	  // check head of the List corresponding to k1
-	  cur = headList[k1];
-	  if (cur == 0)
-	    {
-	      headList[k1] = freeList;
-	      freeList = freeList->next;
-	      cur = headList[k1];
-	      cur->next = 0;
-	      cur->v2 = k2;
-	      cur->iface = iface;
-	      cur->iedge = iedge;
-	      continue;
-	    }
-
-	  if (cur->v2 == k2)
-	    {
-	      headList[k1] = cur->next;
-	      cur->next = freeList;
-	      freeList = cur;
-	      m_pF[iface].m_edge[iedge].f = cur->iface;
-	      m_pF[cur->iface].m_edge[cur->iedge].f = iface;
-	      i1 = (m_pF[iface].m_edge[iedge].v < 0) ? -1 : 1;
-	      i2 = (m_pF[cur->iface].m_edge[cur->iedge].v < 0) ? -1 : 1;
-	      if (i1 != i2)
-		{
-		  std::cerr
-		    << "Polyhedron::SetReferences: different edge visibility "
-		    << iface << "/" << iedge << "/"
-		    << m_pF[iface].m_edge[iedge].v << " and "
-		    << cur->iface << "/" << cur->iedge << "/"
-		    << m_pF[cur->iface].m_edge[cur->iedge].v << std::endl;
-		}
-	      continue;
-	    }
-
-	  // check List itself
-	  for (;;)
-	    {
-	      prev = cur;
-	      cur = prev->next;
-	      if (cur == 0)
-		{
-		  prev->next = freeList;
-		  freeList = freeList->next;
-		  cur = prev->next;
-		  cur->next = 0;
-		  cur->v2 = k2;
-		  cur->iface = iface;
-		  cur->iedge = iedge;
-		  break;
-		}
-
-	      if (cur->v2 == k2)
-		{
-		  prev->next = cur->next;
-		  cur->next = freeList;
-		  freeList = cur;
-		  m_pF[iface].m_edge[iedge].f = cur->iface;
-		  m_pF[cur->iface].m_edge[cur->iedge].f = iface;
-		  i1 = (m_pF[iface].m_edge[iedge].v < 0) ? -1 : 1;
-		  i2 = (m_pF[cur->iface].m_edge[cur->iedge].v < 0) ? -1 : 1;
-		  if (i1 != i2)
-		    {
-		      std::cerr
-			<<
-			"Polyhedron::SetReferences: different edge visibility "
-			<< iface << "/" << iedge << "/" << m_pF[iface].
-			m_edge[iedge].v << " and " << cur->iface << "/" << cur->
-			iedge << "/" << m_pF[cur->iface].m_edge[cur->iedge].
-			v << std::endl;
-		    }
-		  break;
-		}
-	    }
-	}
-    }
-
-  //  C H E C K   T H A T   A L L   L I S T S   A R E   E M P T Y
-
-  for (i = 0; i < m_nvert; i++)
-    {
-      if (headList[i] != 0)
-	{
-	  std::cerr
-	    << "Polyhedron::SetReferences: List " << i << " is not empty"
-	    << std::endl;
-	}
-    }
-
-  //   F R E E   M E M O R Y
-
-  delete[]edgeList;
-  delete[]headList;
-}
-
-void
-GeoPolyhedron::InvertFacets ()
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::InvertFacets                Date:    01.12.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Invert the order of the nodes in the facets               *
- *                                                                     *
- ***********************************************************************/
-{
-  if (m_nface <= 0)
-    return;
-  int i, k, nnode, v[4]={0}, f[4]={0};
-  for (i = 1; i <= m_nface; i++)
-    {
-      nnode = (m_pF[i].m_edge[3].v == 0) ? 3 : 4;
-      for (k = 0; k < nnode; k++)
-	{
-	  v[k] = (k + 1 == nnode) ? m_pF[i].m_edge[0].v : m_pF[i].m_edge[k + 1].v;
-	  if (v[k] * m_pF[i].m_edge[k].v < 0)
-	    v[k] = -v[k];
-	  f[k] = m_pF[i].m_edge[k].f;
-	}
-      for (k = 0; k < nnode; k++)
-	{
-	  m_pF[i].m_edge[nnode - 1 - k].v = v[k];
-	  m_pF[i].m_edge[nnode - 1 - k].f = f[k];
-	}
-    }
-}
-
-GeoPolyhedron & GeoPolyhedron::Transform (const HVRotation & rotation,
-					  const HVVector3D & translation)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::Transform                    Date:    01.12.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Make transformation of the polyhedron                     *
- *                                                                     *
- ***********************************************************************/
-{
-  if (m_nvert > 0)
-    {
-      for (int i = 1; i <= m_nvert; i++)
-	{
-	  m_pV[i] = rotation * m_pV[i] + translation;
-	}
-
-      //  C H E C K   D E T E R M I N A N T   A N D
-      //  I N V E R T   F A C E T S   I F   I T   I S   N E G A T I V E
-
-      HVVector3D x = rotation * HVVector3D (1, 0, 0);
-      HVVector3D y = rotation * HVVector3D (0, 1, 0);
-      HVVector3D z = rotation * HVVector3D (0, 0, 1);
-      if ((x.cross (y)).dot (z) < 0)
-	InvertFacets ();
-    }
-  return *this;
-}
-
-bool GeoPolyhedron::GetNextVertexIndex (int &index, int &edgeFlag) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextVertexIndex          Date:    03.09.96  *
- * Author: Yasuhide Sawada                          Revised:           *
- *                                                                     *
- * Function:                                                           *
- *                                                                     *
- ***********************************************************************/
-{
-  static int
-    iFace =
-    1;
-  static int
-    iQVertex =
-    0;
-  int
-    vIndex =
-    m_pF[iFace].
-    m_edge[iQVertex].
-    v;
-
-  edgeFlag = (vIndex > 0) ? 1 : 0;
-  index = iabs (vIndex);
-
-  if (iQVertex >= 3 || m_pF[iFace].m_edge[iQVertex + 1].v == 0)
-    {
-      iQVertex = 0;
-      if (++iFace > m_nface)
-	iFace = 1;
-      return false;		// Last Edge
-    }
-  else
-    {
-      ++iQVertex;
-      return true;		// not Last Edge
-    }
-}
-
-HVPoint3D GeoPolyhedron::GetVertex (int index) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetVertex                   Date:    03.09.96  *
- * Author: Yasuhide Sawada                          Revised: 17.11.99  *
- *                                                                     *
- * Function: Get vertex of the index.                                  *
- *                                                                     *
- ***********************************************************************/
-{
-  if (index <= 0 || index > m_nvert)
-    {
-      std::cerr
-	<< "GeoPolyhedron::GetVertex: irrelevant index " << index
-	<< std::endl;
-      return HVPoint3D ();
-    }
-  return m_pV[index];
-}
-
-bool
-GeoPolyhedron::GetNextVertex (HVPoint3D & vertex, int &edgeFlag) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextVertex               Date:    22.07.96  *
- * Author: John Allison                             Revised:           *
- *                                                                     *
- * Function: Get vertices of the quadrilaterals in order for each      *
- *           face in face order.  Returns false when finished each     *
- *           face.                                                     *
- *                                                                     *
- ***********************************************************************/
-{
-  int index;
-  bool rep = GetNextVertexIndex (index, edgeFlag);
-  vertex = m_pV[index];
-  return rep;
-}
-
-bool
-  GeoPolyhedron::GetNextVertex (HVPoint3D & vertex, int &edgeFlag,
-				HVNormal3D & normal) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextVertex               Date:    26.11.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get vertices with normals of the quadrilaterals in order  *
- *           for each face in face order.                              *
- *           Returns false when finished each face.                    *
- *                                                                     *
- ***********************************************************************/
-{
-  static int iFace = 1;
-  static int iNode = 0;
-
-  if (m_nface == 0)
-    return false;		// empty polyhedron
-
-  int k = m_pF[iFace].m_edge[iNode].v;
-  if (k > 0)
-    {
-      edgeFlag = 1;
-    }
-  else
-    {
-      edgeFlag = -1;
-      k = -k;
-    }
-  vertex = m_pV[k];
-  normal = FindNodeNormal (iFace, k);
-  if (iNode >= 3 || m_pF[iFace].m_edge[iNode + 1].v == 0)
-    {
-      iNode = 0;
-      if (++iFace > m_nface)
-	iFace = 1;
-      return false;		// last node
-    }
-  else
-    {
-      ++iNode;
-      return true;		// not last node
-    }
-}
-
-bool
-  GeoPolyhedron::GetNextEdgeIndeces (int &i1, int &i2, int &edgeFlag,
-				     int &iface1, int &iface2) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextEdgeIndeces          Date:    30.09.96  *
- * Author: E.Chernyaev                              Revised: 17.11.99  *
- *                                                                     *
- * Function: Get indeces of the next edge together with indeces of     *
- *           of the faces which share the edge.                        *
- *           Returns false when the last edge.                         *
- *                                                                     *
- ***********************************************************************/
-{
-  static int iFace = 1;
-  static int iQVertex = 0;
-  static int iOrder = 1;
-  int k1, k2, kflag, kface1, kface2;
-
-  if (iFace == 1 && iQVertex == 0)
-    {
-      k2 = m_pF[m_nface].m_edge[0].v;
-      k1 = m_pF[m_nface].m_edge[3].v;
-      if (k1 == 0)
-	k1 = m_pF[m_nface].m_edge[2].v;
-      if (iabs (k1) > iabs (k2))
-	iOrder = -1;
-    }
-
-  do
-    {
-      k1 = m_pF[iFace].m_edge[iQVertex].v;
-      kflag = k1;
-      k1 = iabs (k1);
-      kface1 = iFace;
-      kface2 = m_pF[iFace].m_edge[iQVertex].f;
-      if (iQVertex >= 3 || m_pF[iFace].m_edge[iQVertex + 1].v == 0)
-	{
-	  iQVertex = 0;
-	  k2 = iabs (m_pF[iFace].m_edge[iQVertex].v);
-	  iFace++;
-	}
-      else
-	{
-	  iQVertex++;
-	  k2 = iabs (m_pF[iFace].m_edge[iQVertex].v);
-	}
-    }
-  while (iOrder * k1 > iOrder * k2);
-
-  i1 = k1;
-  i2 = k2;
-  edgeFlag = (kflag > 0) ? 1 : 0;
-  iface1 = kface1;
-  iface2 = kface2;
-
-  if (iFace > m_nface)
-    {
-      iFace = 1;
-      iOrder = 1;
-      return false;
-    }
-  else
-    {
-      return true;
-    }
-}
-
-bool
-GeoPolyhedron::GetNextEdgeIndeces (int &i1, int &i2, int &edgeFlag) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextEdgeIndeces          Date:    17.11.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get indeces of the next edge.                             *
- *           Returns false when the last edge.                         *
- *                                                                     *
- ***********************************************************************/
-{
-  int kface1, kface2;
-  return GetNextEdgeIndeces (i1, i2, edgeFlag, kface1, kface2);
-}
-
-bool
-  GeoPolyhedron::GetNextEdge (HVPoint3D & p1,
-			      HVPoint3D & p2, int &edgeFlag) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextEdge                 Date:    30.09.96  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get next edge.                                            *
- *           Returns false when the last edge.                         *
- *                                                                     *
- ***********************************************************************/
-{
-  int i1, i2;
-  bool rep = GetNextEdgeIndeces (i1, i2, edgeFlag);
-  p1 = m_pV[i1];
-  p2 = m_pV[i2];
-  return rep;
-}
-
-bool
-  GeoPolyhedron::GetNextEdge (HVPoint3D & p1, HVPoint3D & p2,
-			      int &edgeFlag, int &iface1, int &iface2) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextEdge                 Date:    17.11.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get next edge with indeces of the faces which share       *
- *           the edge.                                                 *
- *           Returns false when the last edge.                         *
- *                                                                     *
- ***********************************************************************/
-{
-  int i1, i2;
-  bool rep = GetNextEdgeIndeces (i1, i2, edgeFlag, iface1, iface2);
-  p1 = m_pV[i1];
-  p2 = m_pV[i2];
-  return rep;
-}
-
-void
-GeoPolyhedron::GetFacet (int iFace, int &n, int *iNodes,
-			 int *edgeFlags, int *iFaces) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetFacet                    Date:    15.12.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get face by index                                         *
- *                                                                     *
- ***********************************************************************/
-{
-  if (iFace < 1 || iFace > m_nface)
-    {
-      std::cerr
-	<< "GeoPolyhedron::GetFacet: irrelevant index " << iFace << std::endl;
-      n = 0;
-    }
-  else
-    {
-      int i, k;
-      for (i = 0; i < 4; i++)
-	{
-	  k = m_pF[iFace].m_edge[i].v;
-	  if (k == 0)
-	    break;
-	  if (iFaces != 0)
-	    iFaces[i] = m_pF[iFace].m_edge[i].f;
-	  if (k > 0)
-	    {
-	      iNodes[i] = k;
-	      if (edgeFlags != 0)
-		edgeFlags[i] = 1;
-	    }
-	  else
-	    {
-	      iNodes[i] = -k;
-	      if (edgeFlags != 0)
-		edgeFlags[i] = -1;
-	    }
-	}
-      n = i;
-    }
-}
-
-void
-GeoPolyhedron::GetFacet (int index, int &n, HVPoint3D * nodes,
-			 int *edgeFlags, HVNormal3D * normals) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetFacet                    Date:    17.11.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get face by index                                         *
- *                                                                     *
- ***********************************************************************/
-{
-  int iNodes[4];
-  GetFacet (index, n, iNodes, edgeFlags);
-  if (n != 0)
-    {
-      for (int i = 0; i < 4; i++)
-	{
-	  nodes[i] = m_pV[iNodes[i]];
-	  if (normals != 0)
-	    normals[i] = FindNodeNormal (index, iNodes[i]);
-	}
-    }
-}
-
-bool
-  GeoPolyhedron::GetNextFacet (int &n, HVPoint3D * nodes,
-			       int *edgeFlags, HVNormal3D * normals) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextFacet                Date:    19.11.99  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get next face with normals of unit length at the nodes.   *
- *           Returns false when finished all faces.                    *
- *                                                                     *
- ***********************************************************************/
-{
-  static int iFace = 1;
-
-  if (edgeFlags == 0)
-    {
-      GetFacet (iFace, n, nodes);
-    }
-  else if (normals == 0)
-    {
-      GetFacet (iFace, n, nodes, edgeFlags);
-    }
-  else
-    {
-      GetFacet (iFace, n, nodes, edgeFlags, normals);
-    }
-
-  if (++iFace > m_nface)
-    {
-      iFace = 1;
-      return false;
-    }
-  else
-    {
-      return true;
-    }
-}
-
-HVNormal3D GeoPolyhedron::GetNormal (int iFace) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNormal                    Date:    19.11.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Get normal of the face given by index                     *
- *                                                                     *
- ***********************************************************************/
-{
-  if (iFace < 1 || iFace > m_nface)
-    {
-      std::cerr
-	<< "GeoPolyhedron::GetNormal: irrelevant index " << iFace
-	<< std::endl;
-      return HVNormal3D ();
-    }
-
-  int
-    i0 =
-    iabs (m_pF[iFace].m_edge[0].v);
-  int
-    i1 =
-    iabs (m_pF[iFace].m_edge[1].v);
-  int
-    i2 =
-    iabs (m_pF[iFace].m_edge[2].v);
-  int
-    i3 =
-    iabs (m_pF[iFace].m_edge[3].v);
-  if (i3 == 0)
-    i3 = i0;
-  return (m_pV[i2] - m_pV[i0]).cross (m_pV[i3] - m_pV[i1]);
-}
-
-HVNormal3D GeoPolyhedron::GetUnitNormal (int iFace) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNormal                    Date:    19.11.99 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Get unit normal of the face given by index                *
- *                                                                     *
- ***********************************************************************/
-{
-  if (iFace < 1 || iFace > m_nface)
-    {
-      std::cerr
-	<< "GeoPolyhedron::GetUnitNormal: irrelevant index " << iFace
-	<< std::endl;
-      return HVNormal3D ();
-    }
-
-  int
-    i0 =
-    iabs (m_pF[iFace].m_edge[0].v);
-  int
-    i1 =
-    iabs (m_pF[iFace].m_edge[1].v);
-  int
-    i2 =
-    iabs (m_pF[iFace].m_edge[2].v);
-  int
-    i3 =
-    iabs (m_pF[iFace].m_edge[3].v);
-  if (i3 == 0)
-    i3 = i0;
-  HVNormal3D
-    nm = (m_pV[i2] - m_pV[i0]).
-    cross (m_pV[i3] - m_pV[i1]);
-  nm.setMag (1.0);
-  return nm;
-}
-
-bool GeoPolyhedron::GetNextNormal (HVNormal3D & normal) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextNormal               Date:    22.07.96  *
- * Author: John Allison                             Revised: 19.11.99  *
- *                                                                     *
- * Function: Get normals of each face in face order.  Returns false    *
- *           when finished all faces.                                  *
- *                                                                     *
- ***********************************************************************/
-{
-  static int
-    iFace =
-    1;
-  normal = GetNormal (iFace);
-  if (++iFace > m_nface)
-    {
-      iFace = 1;
-      return false;
-    }
-  else
-    {
-      return true;
-    }
-}
-
-bool GeoPolyhedron::GetNextUnitNormal (HVNormal3D & normal) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetNextUnitNormal           Date:    16.09.96  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Get normals of unit length of each face in face order.    *
- *           Returns false when finished all faces.                    *
- *                                                                     *
- ***********************************************************************/
-{
-  bool
-    rep =
-    GetNextNormal (normal);
-  normal.setMag (1.0);
-  return rep;
-}
-
-double
-GeoPolyhedron::GetSurfaceArea () const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetSurfaceArea              Date:    25.05.01  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Returns area of the surface of the polyhedron.            *
- *                                                                     *
- ***********************************************************************/
-{
-  double s = 0.;
-  for (int iFace = 1; iFace <= m_nface; iFace++)
-    {
-      int i0 = iabs (m_pF[iFace].m_edge[0].v);
-      int i1 = iabs (m_pF[iFace].m_edge[1].v);
-      int i2 = iabs (m_pF[iFace].m_edge[2].v);
-      int i3 = iabs (m_pF[iFace].m_edge[3].v);
-      if (i3 == 0)
-	i3 = i0;
-      s += ((m_pV[i2] - m_pV[i0]).cross (m_pV[i3] - m_pV[i1])).mag ();
-    }
-  return s / 2.;
-}
-
-double
-GeoPolyhedron::GetVolume () const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::GetVolume                   Date:    25.05.01  *
- * Author: E.Chernyaev                              Revised:           *
- *                                                                     *
- * Function: Returns volume of the polyhedron.                         *
- *                                                                     *
- ***********************************************************************/
-{
-  double v = 0.;
-  for (int iFace = 1; iFace <= m_nface; iFace++)
-    {
-      int i0 = iabs (m_pF[iFace].m_edge[0].v);
-      int i1 = iabs (m_pF[iFace].m_edge[1].v);
-      int i2 = iabs (m_pF[iFace].m_edge[2].v);
-      int i3 = iabs (m_pF[iFace].m_edge[3].v);
-      HVPoint3D g;
-      if (i3 == 0)
-	{
-	  i3 = i0;
-	  g = (m_pV[i0] + m_pV[i1] + m_pV[i2]) * (1.0f / 3.0f);
-	}
-      else
-	{
-	  g = (m_pV[i0] + m_pV[i1] + m_pV[i2] + m_pV[i3]) * 0.25f;
-	}
-      v += ((m_pV[i2] - m_pV[i0]).cross (m_pV[i3] - m_pV[i1])).dot (g);
-    }
-  return v * (1./6);
-}
-
-GeoPolyhedronTrd2::GeoPolyhedronTrd2 (double Dx1, double Dx2,
-				      double Dy1, double Dy2, double Dz)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronTrd2                           Date:    22.07.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Create GEANT4 TRD2-trapezoid                              *
- *                                                                     *
- * Input: Dx1 - half-length along X at -Dz           8----7            *
- *        Dx2 - half-length along X ay +Dz        5----6  !            *
- *        Dy1 - half-length along Y ay -Dz        !  4-!--3            *
- *        Dy2 - half-length along Y ay +Dz        1----2               *
- *        Dz  - half-length along Z                                    *
- *                                                                     *
- ***********************************************************************/
-{
-  AllocateMemory (8, 6);
-
-  m_pV[1] = HVPoint3D (-Dx1, -Dy1, -Dz);
-  m_pV[2] = HVPoint3D (Dx1, -Dy1, -Dz);
-  m_pV[3] = HVPoint3D (Dx1, Dy1, -Dz);
-  m_pV[4] = HVPoint3D (-Dx1, Dy1, -Dz);
-  m_pV[5] = HVPoint3D (-Dx2, -Dy2, Dz);
-  m_pV[6] = HVPoint3D (Dx2, -Dy2, Dz);
-  m_pV[7] = HVPoint3D (Dx2, Dy2, Dz);
-  m_pV[8] = HVPoint3D (-Dx2, Dy2, Dz);
-
-  CreatePrism ();
-}
-
-GeoPolyhedronTrd2::~GeoPolyhedronTrd2 ()
-{
-}
-
-GeoPolyhedronTrd1::GeoPolyhedronTrd1 (double Dx1, double Dx2,
-				      double Dy, double Dz):
-GeoPolyhedronTrd2 (Dx1, Dx2, Dy, Dy, Dz)
-{
-}
-
-GeoPolyhedronTrd1::~GeoPolyhedronTrd1 ()
-{
-}
-
-GeoPolyhedronBox::GeoPolyhedronBox (double Dx, double Dy, double Dz):
-GeoPolyhedronTrd2 (Dx, Dx, Dy, Dy, Dz)
-{
-}
-
-GeoPolyhedronBox::~GeoPolyhedronBox ()
-{
-}
-
-GeoPolyhedronTrap::GeoPolyhedronTrap (double Dz,
-				      double Theta,
-				      double Phi,
-				      double Dy1,
-				      double Dx1,
-				      double Dx2,
-				      double Alp1,
-				      double Dy2,
-				      double Dx3, double Dx4, double Alp2)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronTrap                           Date:    20.11.96 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Create GEANT4 TRAP-trapezoid                              *
- *                                                                     *
- * Input: DZ   - half-length in Z                                      *
- *        Theta,Phi - polar angles of the line joining centres of the  *
- *                    faces at Z=-Dz and Z=+Dz                         *
- *        Dy1  - half-length in Y of the face at Z=-Dz                 *
- *        Dx1  - half-length in X of low edge of the face at Z=-Dz     *
- *        Dx2  - half-length in X of top edge of the face at Z=-Dz     *
- *        Alp1 - angle between Y-axis and the median joining top and   *
- *               low edges of the face at Z=-Dz                        *
- *        Dy2  - half-length in Y of the face at Z=+Dz                 *
- *        Dx3  - half-length in X of low edge of the face at Z=+Dz     *
- *        Dx4  - half-length in X of top edge of the face at Z=+Dz     *
- *        Alp2 - angle between Y-axis and the median joining top and   *
- *               low edges of the face at Z=+Dz                        *
- *                                                                     *
- ***********************************************************************/
-{
-  double DzTthetaCphi = Dz * tan (Theta) * cos (Phi);
-  double DzTthetaSphi = Dz * tan (Theta) * sin (Phi);
-  double Dy1Talp1 = Dy1 * tan (Alp1);
-  double Dy2Talp2 = Dy2 * tan (Alp2);
-
-  AllocateMemory (8, 6);
-
-  m_pV[1] =
-    HVPoint3D (-DzTthetaCphi - Dy1Talp1 - Dx1, -DzTthetaSphi - Dy1, -Dz);
-  m_pV[2] =
-    HVPoint3D (-DzTthetaCphi - Dy1Talp1 + Dx1, -DzTthetaSphi - Dy1, -Dz);
-  m_pV[3] =
-    HVPoint3D (-DzTthetaCphi + Dy1Talp1 + Dx2, -DzTthetaSphi + Dy1, -Dz);
-  m_pV[4] =
-    HVPoint3D (-DzTthetaCphi + Dy1Talp1 - Dx2, -DzTthetaSphi + Dy1, -Dz);
-  m_pV[5] = HVPoint3D (DzTthetaCphi - Dy2Talp2 - Dx3, DzTthetaSphi - Dy2, Dz);
-  m_pV[6] = HVPoint3D (DzTthetaCphi - Dy2Talp2 + Dx3, DzTthetaSphi - Dy2, Dz);
-  m_pV[7] = HVPoint3D (DzTthetaCphi + Dy2Talp2 + Dx4, DzTthetaSphi + Dy2, Dz);
-  m_pV[8] = HVPoint3D (DzTthetaCphi + Dy2Talp2 - Dx4, DzTthetaSphi + Dy2, Dz);
-
-  CreatePrism ();
-}
-
-GeoPolyhedronTrap::~GeoPolyhedronTrap ()
-{
-}
-
-GeoPolyhedronPara::GeoPolyhedronPara (double Dx, double Dy, double Dz,
-				      double Alpha, double Theta, double Phi):
-GeoPolyhedronTrap (Dz, Theta, Phi, Dy, Dx, Dx, Alpha, Dy, Dx, Dx, Alpha)
-{
-}
-
-GeoPolyhedronPara::~GeoPolyhedronPara ()
-{
-}
-
-GeoPolyhedronCons::GeoPolyhedronCons (double Rmn1,
-				      double Rmx1,
-				      double Rmn2,
-				      double Rmx2,
-				      double Dz, double Phi1, double Dphi)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronCons::GeoPolyhedronCons        Date:    15.12.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised: 15.12.96 *
- *                                                                     *
- * Function: Constructor for CONS, TUBS, CONE, TUBE                    *
- *                                                                     *
- * Input: Rmn1, Rmx1 - inside and outside radiuses at -Dz              *
- *        Rmn2, Rmx2 - inside and outside radiuses at +Dz              *
- *        Dz         - half length in Z                                *
- *        Phi1       - starting angle of the segment                   *
- *        Dphi       - segment range                                   *
- *                                                                     *
- ***********************************************************************/
-{
-  static double wholeCircle = 2 * M_PI;
-
-  //   C H E C K   I N P U T   P A R A M E T E R S
-
-  int k = 0;
-  if (Rmn1 < 0. || Rmx1 < 0. || Rmn2 < 0. || Rmx2 < 0.)
-    k = 1;
-  if (Rmn1 > Rmx1 || Rmn2 > Rmx2)
-    k = 1;
-  if (Rmn1 == Rmx1 && Rmn2 == Rmx2)
-    k = 1;
-
-  if (Dz <= 0.)
-    k += 2;
-
-  double phi1, phi2, dphi;
-  if (Dphi < 0.)
-    {
-      phi2 = Phi1;
-      phi1 = phi2 - Dphi;
-    }
-  else if (Dphi == 0.)
-    {
-      phi1 = Phi1;
-      phi2 = phi1 + wholeCircle;
-    }
-  else
-    {
-      phi1 = Phi1;
-      phi2 = phi1 + Dphi;
-    }
-  dphi = phi2 - phi1;
-  if (fabs (dphi - wholeCircle) < perMillion)
-    dphi = wholeCircle;
-  if (dphi > wholeCircle)
-    k += 4;
-
-  if (k != 0)
-    {
-      std::cerr << "GeoPolyhedronCone(s)/Tube(s): error in input parameters";
-      if ((k & 1) != 0)
-	std::cerr << " (radiuses)";
-      if ((k & 2) != 0)
-	std::cerr << " (half-length)";
-      if ((k & 4) != 0)
-	std::cerr << " (angles)";
-      std::cerr << std::endl;
-      std::cerr << " Rmn1=" << Rmn1 << " Rmx1=" << Rmx1;
-      std::cerr << " Rmn2=" << Rmn2 << " Rmx2=" << Rmx2;
-      std::cerr << " Dz=" << Dz << " Phi1=" << Phi1 << " Dphi=" << Dphi
-	<< std::endl;
-      return;
-    }
-
-  //   P R E P A R E   T W O   P O L Y L I N E S
-
-  double zz[4], rr[4];
-  zz[0] = Dz;
-  zz[1] = -Dz;
-  zz[2] = Dz;
-  zz[3] = -Dz;
-  rr[0] = Rmx2;
-  rr[1] = Rmx1;
-  rr[2] = Rmn2;
-  rr[3] = Rmn1;
-
-  //   R O T A T E    P O L Y L I N E S
-
-  RotateAroundZ (0, phi1, dphi, 2, 2, zz, rr, -1, -1);
-  SetReferences ();
-}
-
-GeoPolyhedronCons::~GeoPolyhedronCons ()
-{
-}
-
-GeoPolyhedronCone::GeoPolyhedronCone (double Rmn1, double Rmx1,
-				      double Rmn2, double Rmx2, double Dz):
-GeoPolyhedronCons (Rmn1, Rmx1, Rmn2, Rmx2, Dz, 0 * deg, 360 * deg)
-{
-}
-
-GeoPolyhedronCone::~GeoPolyhedronCone ()
-{
-}
-
-GeoPolyhedronTubs::GeoPolyhedronTubs (double Rmin, double Rmax,
-				      double Dz, double Phi1, double Dphi):
-GeoPolyhedronCons (Rmin, Rmax, Rmin, Rmax, Dz, Phi1, Dphi)
-{
-}
-
-GeoPolyhedronTubs::~GeoPolyhedronTubs ()
-{
-}
-
-GeoPolyhedronTube::GeoPolyhedronTube (double Rmin, double Rmax, double Dz):
-GeoPolyhedronCons (Rmin, Rmax, Rmin, Rmax, Dz, 0 * deg, 360 * deg)
-{
-}
-
-GeoPolyhedronTube::~GeoPolyhedronTube ()
-{
-}
-
-GeoPolyhedronPgon::GeoPolyhedronPgon (double phi,
-				      double dphi,
-				      int npdv,
-				      int nz,
-				      const double *z,
-				      const double *rmin, const double *rmax)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronPgon                           Date:    09.12.96 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Constructor of polyhedron for PGON, PCON                  *
- *                                                                     *
- * Input: phi  - initial phi                                           *
- *        dphi - delta phi                                             *
- *        npdv - number of steps along phi                             *
- *        nz   - number of z-planes (at least two)                     *
- *        z[]  - z coordinates of the slices                           *
- *        rmin[] - smaller r at the slices                             *
- *        rmax[] - bigger  r at the slices                             *
- *                                                                     *
- ***********************************************************************/
-{
-  //   C H E C K   I N P U T   P A R A M E T E R S
-
-  if (dphi <= 0. || dphi > 2 * M_PI)
-    {
-      std::cerr
-	<< "GeoPolyhedronPgon/Pcon: wrong delta phi = " << dphi << std::endl;
-      return;
-    }
-
-  if (nz < 2)
-    {
-      std::cerr
-	<< "GeoPolyhedronPgon/Pcon: number of z-planes less than two = " << nz
-	<< std::endl;
-      return;
-    }
-
-  if (npdv < 0)
-    {
-      std::cerr
-	<< "GeoPolyhedronPgon/Pcon: error in number of phi-steps =" << npdv
-	<< std::endl;
-      return;
-    }
-
-  int i;
-  for (i = 0; i < nz; i++)
-    {
-      if (rmin[i] < 0. || rmax[i] < 0. || rmin[i] > rmax[i])
-	{
-	  std::cerr
-	    << "GeoPolyhedronPgon: error in radiuses rmin[" << i << "]="
-	    << rmin[i] << " rmax[" << i << "]=" << rmax[i] << std::endl;
-	  return;
-	}
-    }
-
-  //   P R E P A R E   T W O   P O L Y L I N E S
-
-  double *zz, *rr;
-  zz = new double[2 * nz];
-  rr = new double[2 * nz];
-
-  if (z[0] > z[nz - 1])
-    {
-      for (i = 0; i < nz; i++)
-	{
-	  zz[i] = z[i];
-	  rr[i] = rmax[i];
-	  zz[i + nz] = z[i];
-	  rr[i + nz] = rmin[i];
-	}
-    }
-  else
-    {
-      for (i = 0; i < nz; i++)
-	{
-	  zz[i] = z[nz - i - 1];
-	  rr[i] = rmax[nz - i - 1];
-	  zz[i + nz] = z[nz - i - 1];
-	  rr[i + nz] = rmin[nz - i - 1];
-	}
-    }
-
-  //   R O T A T E    P O L Y L I N E S
-
-  RotateAroundZ (npdv, phi, dphi, nz, nz, zz, rr, -1, (npdv == 0) ? -1 : 1);
-  SetReferences ();
-
-  delete[]zz;
-  delete[]rr;
-}
-
-GeoPolyhedronPgon::~GeoPolyhedronPgon ()
-{
-}
-
-GeoPolyhedronPcon::GeoPolyhedronPcon (double phi, double dphi, int nz,
-				      const double *z,
-				      const double *rmin, const double *rmax):
-GeoPolyhedronPgon (phi, dphi, 0, nz, z, rmin, rmax)
-{
-}
-
-GeoPolyhedronPcon::~GeoPolyhedronPcon ()
-{
-}
-
-GeoPolyhedronSphere::GeoPolyhedronSphere (double rmin, double rmax,
-					  double phi, double dphi,
-					  double the, double dthe)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronSphere                         Date:    11.12.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Constructor of polyhedron for SPHERE                      *
- *                                                                     *
- * Input: rmin - internal radius                                       *
- *        rmax - external radius                                       *
- *        phi  - initial phi                                           *
- *        dphi - delta phi                                             *
- *        the  - initial theta                                         *
- *        dthe - delta theta                                           *
- *                                                                     *
- ***********************************************************************/
-{
-  //   C H E C K   I N P U T   P A R A M E T E R S
-
-  if (dphi <= 0. || dphi > 2 * M_PI)
-    {
-      std::cerr
-	<< "GeoPolyhedronSphere: wrong delta phi = " << dphi << std::endl;
-      return;
-    }
-
-  if (the < 0. || the > M_PI)
-    {
-      std::cerr << "GeoPolyhedronSphere: wrong theta = " << the << std::endl;
-      return;
-    }
-
-  if (dthe <= 0. || dthe > M_PI)
-    {
-      std::cerr
-	<< "GeoPolyhedronSphere: wrong delta theta = " << dthe << std::endl;
-      return;
-    }
-
-  if ((the + dthe >= M_PI) && (the + dthe < M_PI + 2 * DBL_EPSILON))
-    dthe = M_PI - the;		//G.Barrand : coming from LHCb/S.Ponce.
-
-  if (the + dthe > M_PI)
-    {
-      std::cerr
-	<< "GeoPolyhedronSphere: wrong theta + delta theta = "
-	<< the << " " << dthe << std::endl;
-      return;
-    }
-
-  if (rmin < 0. || rmin >= rmax)
-    {
-      std::cerr
-	<< "GeoPolyhedronSphere: error in radiuses"
-	<< " rmin=" << rmin << " rmax=" << rmax << std::endl;
-      return;
-    }
-
-  //   P R E P A R E   T W O   P O L Y L I N E S
-
-  int ns = (GetNumberOfRotationSteps () + 1) / 2;
-  int np1 = int (dthe * ns * M_1_PI + .5) + 1;
-  if (np1 <= 1)
-    np1 = 2;
-  int np2 = rmin < perMillion ? 1 : np1;
-
-  double *zz, *rr;
-  zz = new double[np1 + np2];
-  rr = new double[np1 + np2];
-
-  double a = dthe / (np1 - 1);
-  double cosa, sina;
-  for (int i = 0; i < np1; i++)
-    {
-      cosa = cos (the + i * a);
-      sina = sin (the + i * a);
-      zz[i] = rmax * cosa;
-      rr[i] = rmax * sina;
-      if (np2 > 1)
-	{
-	  zz[i + np1] = rmin * cosa;
-	  rr[i + np1] = rmin * sina;
-	}
-    }
-  if (np2 == 1)
-    {
-      zz[np1] = 0.;
-      rr[np1] = 0.;
-    }
-
-  //   R O T A T E    P O L Y L I N E S
-
-  RotateAroundZ (0, phi, dphi, np1, np2, zz, rr, -1, -1);
-  SetReferences ();
-
-  delete[]zz;
-  delete[]rr;
-}
-
-GeoPolyhedronSphere::~GeoPolyhedronSphere ()
-{
-}
-
-GeoPolyhedronTorus::GeoPolyhedronTorus (double rmin,
-					double rmax,
-					double rtor, double phi, double dphi)
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedronTorus                          Date:    11.12.96 *
- * Author: E.Chernyaev (IHEP/Protvino)               Revised:          *
- *                                                                     *
- * Function: Constructor of polyhedron for TORUS                       *
- *                                                                     *
- * Input: rmin - internal radius                                       *
- *        rmax - external radius                                       *
- *        rtor - radius of torus                                       *
- *        phi  - initial phi                                           *
- *        dphi - delta phi                                             *
- *                                                                     *
- ***********************************************************************/
-{
-  //   C H E C K   I N P U T   P A R A M E T E R S
-
-  if (dphi <= 0. || dphi > 2 * M_PI)
-    {
-      std::cerr
-	<< "GeoPolyhedronTorus: wrong delta phi = " << dphi << std::endl;
-      return;
-    }
-
-  if (rmin < 0. || rmin >= rmax || rmax >= rtor)
-    {
-      std::cerr
-	<< "GeoPolyhedronTorus: error in radiuses"
-	<< " rmin=" << rmin << " rmax=" << rmax << " rtorus=" << rtor
-	<< std::endl;
-      return;
-    }
-
-  //   P R E P A R E   T W O   P O L Y L I N E S
-
-  int np1 = GetNumberOfRotationSteps ();
-  int np2 = rmin < perMillion ? 1 : np1;
-
-  std::vector<double> rr (np1+np2, 0);
-  std::vector<double> zz (np1+np2, 0);
-
-  double a = 2 * M_PI / np1;
-  double cosa, sina;
-  for (int i = 0; i < np1; i++)
-    {
-      cosa = cos (i * a);
-      sina = sin (i * a);
-      zz[i] = rmax * cosa;
-      rr[i] = rtor + rmax * sina;
-      if (np2 > 1)
-	{
-	  zz[i + np1] = rmin * cosa;
-	  rr[i + np1] = rtor + rmin * sina;
-	}
-    }
-  if (np2 == 1)
-    {
-      zz[np1] = 0.;
-      rr[np1] = rtor;
-      np2 = -1;
-    }
-
-  //   R O T A T E    P O L Y L I N E S
-
-  RotateAroundZ (0, phi, dphi, -np1, -np2, zz.data(), rr.data(), -1, -1);
-  SetReferences ();
-}
-
-GeoPolyhedronTorus::~GeoPolyhedronTorus ()
-{
-}
-
-int
-  GeoPolyhedron::s_fNumberOfRotationSteps =
-  DEFAULT_NUMBER_OF_STEPS;
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::s_fNumberOfRotationSteps     Date:    24.06.97 *
- * Author: J.Allison (Manchester University)         Revised:          *
- *                                                                     *
- * Function: Number of steps for whole circle                          *
- *                                                                     *
- ***********************************************************************/
-
-#include "BooleanProcessor.src"
-static
-  Geo_BooleanProcessor
-  processor;
-
-GeoPolyhedron GeoPolyhedron::add (const GeoPolyhedron & p) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::add                          Date:    19.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Boolean "union" of two polyhedra                          *
- *                                                                     *
- ***********************************************************************/
-{
-  return processor.execute (OP_UNION, *this, p);
-}
-
-GeoPolyhedron GeoPolyhedron::intersect (const GeoPolyhedron & p) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::intersect                    Date:    19.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Boolean "intersection" of two polyhedra                   *
- *                                                                     *
- ***********************************************************************/
-{
-  return processor.execute (OP_INTERSECTION, *this, p);
-}
-
-GeoPolyhedron GeoPolyhedron::subtract (const GeoPolyhedron & p) const
-/***********************************************************************
- *                                                                     *
- * Name: GeoPolyhedron::add                          Date:    19.03.00 *
- * Author: E.Chernyaev                               Revised:          *
- *                                                                     *
- * Function: Boolean "subtraction" of "p" from "this"                  *
- *                                                                     *
- ***********************************************************************/
-{
-  return processor.execute (OP_SUBTRACTION, *this, p);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPrintGraphAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPrintGraphAction.cxx
deleted file mode 100755
index 7ff1252d7cb02c341205e925ef52920108ee6759..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoPrintGraphAction.cxx
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoPrintGraphAction.h"
-
-GeoPrintGraphAction::GeoPrintGraphAction (std::ostream &o)
-  : m_nameTag(nullptr)
-  , m_serialDenominator(nullptr)
-  , m_idTag(nullptr)
-  , m_transformState(true)
-  , m_volumeState(true)
-  , m_nametagState(true)
-  , m_serialDenominatorState(true)
-  , m_serialTransformerState(true)
-  , m_identifierState(true)
-  , m_o(o)
-  , m_indented(false)
-{
-}
-
-GeoPrintGraphAction::~GeoPrintGraphAction()
-{
-}
-
-void GeoPrintGraphAction::handleTransform (const GeoTransform *xform)
-{
-  m_pendingTransformList.push_back(xform);
-  if (m_transformState) {
-    indent();
-    m_o << "TRANSFORM+";
-  }
-}
-
-void GeoPrintGraphAction::handlePhysVol (const GeoPhysVol *vol)
-{
-  if (m_volumeState) {
-    indent();
-    m_o << "VOLUME(" << vol->getLogVol()->getName() <<")" << std::endl;
-  }
-  m_pendingTransformList.erase(m_pendingTransformList.begin(),m_pendingTransformList.end());
-  m_indented=false;
-}
-
-void GeoPrintGraphAction::handleFullPhysVol (const GeoFullPhysVol *vol)
-{
-  if (m_volumeState) {
-    indent();
-    m_o << "VOLUME(" << vol->getLogVol()->getName() <<")" << std::endl;
-  }
-  m_pendingTransformList.erase(m_pendingTransformList.begin(),m_pendingTransformList.end());
-  m_indented=false;
-}
-
-void GeoPrintGraphAction::handleNameTag (const GeoNameTag *nameTag)
-{
-  if (m_nametagState) {
-    indent();
-    m_o << "NAMETAG: " << nameTag->getName() << "+";
-  }
-}
-
-void GeoPrintGraphAction::handleSerialDenominator (const GeoSerialDenominator *sD)
-{
-  if (m_nametagState) {
-    indent();
-    m_o << "SERIAL DENOMINATOR:: " << sD->getBaseName() << "+";
-  }
-}
-
-void GeoPrintGraphAction::handleSerialTransformer (const GeoSerialTransformer  *sT)
-{
-  if (m_volumeState) {
-    indent();
-    m_o << sT->getNCopies() << " PARAMETERIZED VOLUMES(" << sT->getVolume()->getLogVol()->getName() << ")" << std::endl;
-  }
-  m_pendingTransformList.erase(m_pendingTransformList.begin(),m_pendingTransformList.end());
-  m_indented=false;
-}
-
-void GeoPrintGraphAction::handleIdentifierTag (const GeoIdentifierTag *idTag)
-{
-  if (m_identifierState) {
-    indent();
-    m_o << "NAME: " << idTag->getIdentifier() << "+";
-  }
-}
-
-void GeoPrintGraphAction::setNotification (Type type, bool state)
-{
-  if (type==TRANSFORM) {
-    m_transformState=state;
-  }
-  else if (type==VOLUME) {
-    m_volumeState=state; 
-  }
-  else if (type==NAMETAG) {
-    m_nametagState=state;
-  }
-  else if (type==IDENTIFIERTAG) {
-    m_identifierState=state;
-  }
-}
-
-void GeoPrintGraphAction::indent ()
-{
-  if (!m_indented) {
-    m_indented=true;
-    for (size_t i=0;i<getPath()->getLength(); i++) {
-      m_o << "   ";
-    }
-  }
-}
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.cxx
deleted file mode 100755
index a1c32a6155e5614f1521547ec0f5c6af671b5e78..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.cxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoSelClearAbsPosAction.h"
-#include "GeoModelKernel/GeoClearAbsPosAction.h"
-#include "GeoModelKernel/GeoAlignableTransform.h"
-#include <sstream>
-
-GeoSelClearAbsPosAction::GeoSelClearAbsPosAction(const GeoAlignableTransform* alignTrans)
-  : m_alignTrans(alignTrans)
-  , m_needToClearCache(false)
-{
-  setDepthLimit(1);
-}
-
-GeoSelClearAbsPosAction::~GeoSelClearAbsPosAction()
-{
-}
-
-void GeoSelClearAbsPosAction::handleTransform(const GeoTransform *xform)
-{
-  if(xform==m_alignTrans)
-    m_needToClearCache = true;
-}
-
-void GeoSelClearAbsPosAction::handlePhysVol(const GeoPhysVol *vol)
-{
-  if(getPath()->getLength()>1 && m_needToClearCache) {
-    GeoClearAbsPosAction cc;
-    vol->exec(&cc);
-    m_needToClearCache = false;
-  }
-}
-
-void GeoSelClearAbsPosAction::handleFullPhysVol(const GeoFullPhysVol *vol)
-{
-  if(getPath()->getLength()>1 && m_needToClearCache) {
-    GeoClearAbsPosAction cc;
-    vol->exec(&cc);
-    m_needToClearCache = false;
-  }
-}
-
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.h b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.h
deleted file mode 100755
index 251dae80515d01ee8f32028760292c12f6f3ead2..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSelClearAbsPosAction.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef GEOMODELKERNEL_GEOSELCLEARABSPOSACTION_H
-#define GEOMODELKERNEL_GEOSELCLEARABSPOSACTION_H
-
-/**
- * @class GeoSelClearAbsPosAction
- *
- * @brief This action class has been introduced in order to speed up GeoAlignableTransform::setDelta(),
- * which is heavily used by alignment callbacks.
- *
- * The action takes a pointer to GeoAlignableTransform
- * and clears position caches only for those daughters of given
- * physical volume, which are affected by this alignable transform.
- */
-
-#include "GeoModelKernel/GeoNodeAction.h"
-
-class GeoAlignableTransform;
-
-class GeoSelClearAbsPosAction:public GeoNodeAction
-{
- public:
-  GeoSelClearAbsPosAction(const GeoAlignableTransform* alignTrans);
-  virtual ~GeoSelClearAbsPosAction();
-
- private:
-
-  // Handles a Transform.
-  virtual void handleTransform (const GeoTransform *xform);
-  
-  // Handles a physical volume.
-  virtual void handlePhysVol (const GeoPhysVol *vol);
-  
-  // Handles a physical volume.
-  virtual void handleFullPhysVol (const GeoFullPhysVol *vol);
-  
- private:
-  GeoSelClearAbsPosAction(const GeoSelClearAbsPosAction &right);
-  GeoSelClearAbsPosAction & operator=(const GeoSelClearAbsPosAction &right);
-  
-  const GeoAlignableTransform* m_alignTrans;
-  bool m_needToClearCache;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialDenominator.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialDenominator.cxx
deleted file mode 100755
index af65ced105dc4ac2cf349be0a52df970cb544240..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialDenominator.cxx
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoSerialDenominator.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoSerialDenominator::GeoSerialDenominator (const std::string &BaseName)
-  : m_baseName (BaseName)
-{
-}
-
-GeoSerialDenominator::~GeoSerialDenominator()
-{
-}
-
-void GeoSerialDenominator::exec (GeoNodeAction *action) const
-{
-  action->handleSerialDenominator (this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialIdentifier.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialIdentifier.cxx
deleted file mode 100755
index c5984b9620f2e85ac4b9929a5ebf8d9d6082609e..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialIdentifier.cxx
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoSerialIdentifier.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoSerialIdentifier::GeoSerialIdentifier(int BaseId)
-  : m_baseId (BaseId)
-{
-}
-
-
-GeoSerialIdentifier::~GeoSerialIdentifier()
-{
-}
-
-
-
-void GeoSerialIdentifier::exec(GeoNodeAction *action) const
-{
-  action->handleSerialIdentifier (this);
-}
-
-
-
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialTransformer.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialTransformer.cxx
deleted file mode 100755
index f97e6dc12fd762b06c35fd7d782275c203eda631..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSerialTransformer.cxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoSerialTransformer.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoSerialTransformer::GeoSerialTransformer (const GeoVPhysVol *volume, const GeoXF::Function *func, unsigned int copies)
-  : m_nCopies (copies)
-  , m_function (func->clone ())
-  , m_physVol (volume)
-{
-  m_physVol->ref ();
-}
-
-GeoSerialTransformer::~GeoSerialTransformer()
-{
-  m_physVol->unref ();
-  delete m_function;
-}
-
-void GeoSerialTransformer::exec (GeoNodeAction *action) const
-{
-  action->handleSerialTransformer (this);
-}
-
-const GeoXF::Function * GeoSerialTransformer::getFunction () const
-{
-  return m_function;
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShape.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShape.cxx
deleted file mode 100755
index a23693b307443110b723133c04154b4cd1dbcecd..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShape.cxx
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShape.h"
-#include "GeoModelKernel/GeoShapeIntersection.h"
-#include "GeoModelKernel/GeoShapeUnion.h"
-#include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "GeoModelKernel/GeoShapeShift.h"
-
-GeoShape::GeoShape ()
-{
-}
-
-GeoShape::~GeoShape()
-{
-}
-
-const GeoShapeUnion & GeoShape::add (const GeoShape& shape) const
-{
-  GeoShapeUnion *unionNode = new GeoShapeUnion (this, &shape);
-  return *unionNode;
-}
-
-const GeoShapeSubtraction & GeoShape::subtract (const GeoShape& shape) const
-{
-  GeoShapeSubtraction *subNode = new GeoShapeSubtraction (this, &shape);
-  return *subNode;
-}
-
-const GeoShapeIntersection & GeoShape::intersect (const GeoShape& shape) const
-{
-  GeoShapeIntersection *intNode = new GeoShapeIntersection (this, &shape);
-  return *intNode;
-}
-
-const GeoShapeShift & GeoShape::operator << (const HepGeom::Transform3D &shift) const
-{
-  GeoShapeShift *shiftNode = new GeoShapeShift (this, shift);
-  return *shiftNode;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeAction.cxx
deleted file mode 100755
index ebe7978a91561a7e605ccab1e46491cc9f263cbe..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeAction.cxx
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShapeAction.h"
-
-#include "GeoModelKernel/GeoShapeShift.h"
-#include "GeoModelKernel/GeoShapeIntersection.h"
-#include "GeoModelKernel/GeoShapeUnion.h"
-#include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "GeoModelKernel/GeoBox.h"
-#include "GeoModelKernel/GeoCons.h"
-#include "GeoModelKernel/GeoPcon.h"
-#include "GeoModelKernel/GeoPgon.h"
-#include "GeoModelKernel/GeoTrap.h"
-#include "GeoModelKernel/GeoTrd.h"
-#include "GeoModelKernel/GeoTube.h"
-#include "GeoModelKernel/GeoTubs.h"
-#include "GeoModelKernel/GeoPara.h"
-
-#include "GeoModelKernel/GeoSimplePolygonBrep.h"
-#include "GeoModelKernel/GeoTessellatedSolid.h"
-#include "GeoModelKernel/GeoEllipticalTube.h"
-#include "GeoModelKernel/GeoTorus.h"
-#include "GeoModelKernel/GeoGenericTrap.h"
-
-
-GeoShapeAction::GeoShapeAction()
-  : m_terminate(false)
-{
-}
-
-GeoShapeAction::~GeoShapeAction()
-{
-}
-
-Query<unsigned int>  GeoShapeAction::getDepthLimit ()
-{
-  return m_depth;
-}
-
-void GeoShapeAction::setDepthLimit (unsigned int limit)
-{
-  m_depth=limit;
-}
-
-void GeoShapeAction::clearDepthLimit ()
-{
-  m_depth=Query<unsigned int> ();
-}
-
-void GeoShapeAction::terminate ()
-{
-  m_terminate=true;
-}
-
-bool GeoShapeAction::shouldTerminate () const
-{
-  return m_terminate;
-}
-
-void GeoShapeAction::handleShape (const GeoShape *)
-{
-}
-
-void GeoShapeAction::handleShift (const GeoShapeShift *shift)
-{
-  handleShape(shift);
-}
-
-void GeoShapeAction::handleUnion (const GeoShapeUnion *unio)
-{
-  handleShape(unio);
-}
-
-void GeoShapeAction::handleIntersection (const GeoShapeIntersection *isect)
-{
-  handleShape(isect);
-}
-
-void GeoShapeAction::handleSubtraction (const GeoShapeSubtraction *subtract)
-{
-  handleShape(subtract);
-}
-
-void GeoShapeAction::handleBox (const GeoBox *box)
-{
-  handleShape(box);
-}
-
-void GeoShapeAction::handleCons (const GeoCons *cons)
-{
-  handleShape(cons);
-}
-
-void GeoShapeAction::handlePara (const GeoPara *para)
-{
-  handleShape(para);
-}
-
-void GeoShapeAction::handlePcon (const GeoPcon *pcon)
-{
-  handleShape(pcon);
-}
-
-void GeoShapeAction::handlePgon (const GeoPgon *pgon)
-{
-  handleShape(pgon);
-}
-
-void GeoShapeAction::handleTrap (const GeoTrap *trap)
-{
-  handleShape(trap);
-}
-
-void GeoShapeAction::handleTrd (const GeoTrd *trd)
-{
-  handleShape(trd);
-}
-
-void GeoShapeAction::handleTube (const GeoTube *tube)
-{
-  handleShape(tube);
-}
-
-void GeoShapeAction::handleTubs (const GeoTubs *tubs)
-{
-  handleShape(tubs);
-}
-
-GeoShapePath * GeoShapeAction::getPath ()
-{
-  return &m_path;
-}
-
-void GeoShapeAction::handleLArCustom (const LArCustomShape *lar)
-{
-  handleShape( (GeoShape *) lar);
-}
-
-void GeoShapeAction::handleSimplePolygonBrep (const GeoSimplePolygonBrep* brep)
-{
-  handleShape(brep);
-}
-
-void GeoShapeAction::handleTessellatedSolid (const GeoTessellatedSolid* tessellated)
-{
-  handleShape(tessellated);
-}
-
-void GeoShapeAction::handleEllipticalTube (const GeoEllipticalTube * elltube)
-{
-  handleShape(elltube);
-}
-
-void GeoShapeAction::handleTorus (const GeoTorus * torus)
-{
-  handleShape(torus);
-}
-
-void GeoShapeAction::handleGenericTrap (const GeoGenericTrap * gentrap)
-{
-  handleShape(gentrap);
-}
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeIntersection.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeIntersection.cxx
deleted file mode 100755
index f7f32cbb9ab287de800acdd621ef21791c84365b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeIntersection.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShapeIntersection.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include <stdexcept>
-
-const std::string GeoShapeIntersection::s_classType = "Intersection";
-const ShapeType GeoShapeIntersection::s_classTypeID = 0x00;
-
-GeoShapeIntersection::GeoShapeIntersection (const GeoShape* A, const GeoShape* B)
-  : m_opA (A)
-  , m_opB (B)
-{
-  m_opA->ref ();
-  m_opB->ref ();
-}
-
-GeoShapeIntersection::~GeoShapeIntersection()
-{
-  m_opA->unref ();
-  m_opB->unref ();
-}
-
-double GeoShapeIntersection::volume () const
-{
-  GeoPolyhedrizeAction a;
-  exec(&a);
-  const GeoPolyhedron *poly = a.getPolyhedron();
-  double vol = poly->GetVolume ();
-  return vol;
-}
-
-const std::string & GeoShapeIntersection::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoShapeIntersection::typeID () const
-{
-  return s_classTypeID;
-}
-
-const GeoShape* GeoShapeIntersection::getOpA () const
-{
-  return m_opA;
-}
-
-const GeoShape* GeoShapeIntersection::getOpB () const
-{
-  return m_opB;
-}
-
-void GeoShapeIntersection::exec (GeoShapeAction *action) const
-{
-  action->getPath ()->push (this);
-  action->handleIntersection (this);
-  if (action->shouldTerminate ())
-    {
-      action->getPath ()->pop ();
-      return;
-    }
-  
-  if (action->getDepthLimit ().isValid ()
-      && action->getPath ()->getLength () > action->getDepthLimit ())
-    {
-    }
-
-  else 
-	{
-    m_opA->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-	}
-    m_opB->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-    }
-  }
-  action->getPath()->pop();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeShift.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeShift.cxx
deleted file mode 100755
index 7c0f6ba47da529f79445a2e0ef82eb09d8f73bd8..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeShift.cxx
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShapeShift.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoShapeShift::s_classType = "Shift";
-const ShapeType GeoShapeShift::s_classTypeID = 0x03;
-
-GeoShapeShift::GeoShapeShift (const GeoShape* A, const HepGeom::Transform3D &X)
-  : m_op (A)
-  , m_shift (X)
-{
-  m_op->ref ();
-}
-
-GeoShapeShift::~GeoShapeShift()
-{
-  m_op->unref ();
-}
-
-double GeoShapeShift::volume () const
-{
-  return m_op->volume ();
-}
-
-const std::string & GeoShapeShift::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoShapeShift::typeID () const
-{
-  return s_classTypeID;
-}
-
-const GeoShape* GeoShapeShift::getOp () const
-{
-  return m_op;
-}
-
-const HepGeom::Transform3D & GeoShapeShift::getX () const
-{
-  return m_shift;
-}
-
-void GeoShapeShift::exec (GeoShapeAction *action) const
-{
-  action->getPath ()->push (this);
-  action->handleShift (this);
-  if (action->shouldTerminate ())
-    {
-      action->getPath ()->pop ();
-      return;
-    }
-  
-  if (action->getDepthLimit ().isValid ()
-      && action->getPath ()->getLength () > action->getDepthLimit ())
-    {
-    }
-
-  else 
-	{
-    m_op->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-	}
-  }
-  action->getPath()->pop();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeSubtraction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeSubtraction.cxx
deleted file mode 100755
index 632b4df52400f1d48836162e29ce935a574df890..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeSubtraction.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include <stdexcept>
-
-const std::string GeoShapeSubtraction::s_classType = "Subtraction";
-const ShapeType GeoShapeSubtraction::s_classTypeID = 0x02;
-
-GeoShapeSubtraction::GeoShapeSubtraction (const GeoShape* A, const GeoShape* B)
-  : m_opA (A)
-  , m_opB (B)
-{
-  m_opA->ref ();
-  m_opB->ref ();
-}
-
-GeoShapeSubtraction::~GeoShapeSubtraction()
-{
-  m_opA->unref ();
-  m_opB->unref ();
-}
-
-double GeoShapeSubtraction::volume () const
-{
-  GeoPolyhedrizeAction a;
-  exec(&a);
-  const GeoPolyhedron *poly = a.getPolyhedron();
-  double vol = poly->GetVolume ();
-  return vol;
-}
-
-const std::string & GeoShapeSubtraction::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoShapeSubtraction::typeID () const
-{
-  return s_classTypeID;
-}
-
-const GeoShape* GeoShapeSubtraction::getOpA () const
-{
-  return m_opA;
-}
-
-const GeoShape* GeoShapeSubtraction::getOpB () const
-{
-  return m_opB;
-}
-
-void GeoShapeSubtraction::exec (GeoShapeAction *action) const
-{
-  action->getPath ()->push (this);
-  action->handleSubtraction (this);
-  if (action->shouldTerminate ())
-    {
-      action->getPath ()->pop ();
-      return;
-    }
-  
-  if (action->getDepthLimit ().isValid ()
-      && action->getPath ()->getLength () > action->getDepthLimit ())
-    {
-    }
-
-  else 
-	{
-    m_opA->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-	}
-    m_opB->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-    }
-  }
-  action->getPath()->pop();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeUnion.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeUnion.cxx
deleted file mode 100755
index 7d2a4acf8c9fcb5220b3459ae536a97c21b4d2a6..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoShapeUnion.cxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoShapeUnion.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include <stdexcept>
-
-const std::string GeoShapeUnion::s_classType = "Union";
-const ShapeType GeoShapeUnion::s_classTypeID = 0x01;
-
-GeoShapeUnion::GeoShapeUnion (const GeoShape* A, const GeoShape* B)
-  : m_opA (A)
-  , m_opB (B)
-{
-  m_opA->ref ();
-  m_opB->ref ();
-}
-
-GeoShapeUnion::~GeoShapeUnion()
-{
-  m_opA->unref ();
-  m_opB->unref ();
-}
-
-double GeoShapeUnion::volume () const
-{
-  GeoPolyhedrizeAction a;
-  exec (&a);
-  const GeoPolyhedron *poly = a.getPolyhedron ();
-  double vol = poly->GetVolume ();
-  return vol;
-}
-
-const std::string & GeoShapeUnion::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoShapeUnion::typeID () const
-{
-  return s_classTypeID;
-}
-
-const GeoShape* GeoShapeUnion::getOpA () const
-{
-  return m_opA;
-}
-
-const GeoShape* GeoShapeUnion::getOpB () const
-{
-  return m_opB;
-}
-
-void GeoShapeUnion::exec (GeoShapeAction *action) const
-{
-  action->getPath ()->push (this);
-  action->handleUnion (this);
-  if (action->shouldTerminate ())
-    {
-      action->getPath ()->pop ();
-      return;
-    }
-  
-  if (action->getDepthLimit ().isValid ()
-      && action->getPath ()->getLength () > action->getDepthLimit ())
-    {
-    }
-
-  else 
-	{
-    m_opA->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-	}
-    m_opB->exec(action);
-    if (action->shouldTerminate ())
-	{
-      action->getPath ()->pop ();
-      return;
-    }
-  }
-  action->getPath()->pop();
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSimplePolygonBrep.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSimplePolygonBrep.cxx
deleted file mode 100755
index 3d6971dee7ab6e5442b631e53ce8f269a40e6cb8..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoSimplePolygonBrep.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoSimplePolygonBrep.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include "PolygonTriangulator.h"//For volume.
-#include <cmath>
-#include <stdexcept>
-
-const std::string GeoSimplePolygonBrep::s_classType = "SimplePolygonBrep";
-const ShapeType GeoSimplePolygonBrep::s_classTypeID = 0x20;
-
-GeoSimplePolygonBrep::GeoSimplePolygonBrep(double dz)
-   : m_dZ(dz)
-{
-}
-
-GeoSimplePolygonBrep::~GeoSimplePolygonBrep()
-{
-}
-
-double GeoSimplePolygonBrep::volume () const
-{
-  if (!isValid())
-    throw std::runtime_error ("Volume requested for incomplete simple polygon brep");
-
-  //Todo: Cache the polygon area so we wont have to do this every time.
-  PolygonTriangulator pt(m_xVertices,m_yVertices);
-
-  double area(0);//Fixme: Should be cached!
-
-  double x1, x2, x3, y1, y2, y3;
-  PolygonTriangulator::Triangles::const_iterator it, itE = pt.triangles()->end();
-  for (it = pt.triangles()->begin(); it!=itE; ++it) {
-    x1 = m_xVertices.at(it->at(0)-1);
-    x2 = m_xVertices.at(it->at(1)-1);
-    x3 = m_xVertices.at(it->at(2)-1);
-    y1 = m_yVertices.at(it->at(0)-1);
-    y2 = m_yVertices.at(it->at(1)-1);
-    y3 = m_yVertices.at(it->at(2)-1);
-    area += fabs ( -x2*y1 + x3*y1 + x1 * y2 - x3 * y2 - x1*y3 + x2*y3 );//This is actually twice the area of the triangle we are adding
-  }
-
-  return area * m_dZ;//area is thus twice the area, but dZ is only half the depth, so the two factors of two cancel out.
-}
-
-const std::string & GeoSimplePolygonBrep::type() const
-{
-  return s_classType;
-}
-
-ShapeType GeoSimplePolygonBrep::typeID() const
-{
-  return s_classTypeID;
-}
-
-void GeoSimplePolygonBrep::addVertex(double XVertex, double YVertex)
-{
-  m_xVertices.push_back(XVertex);
-  m_yVertices.push_back(YVertex);
-}
-
-void GeoSimplePolygonBrep::exec(GeoShapeAction *action) const
-{
-  action->handleSimplePolygonBrep(this);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTessellatedSolid.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTessellatedSolid.cxx
deleted file mode 100644
index 318eea22d823f2c465ced5d923c5c8422481958f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTessellatedSolid.cxx
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTessellatedSolid.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoTessellatedSolid::s_classType = "TessellatedSolid";
-const ShapeType GeoTessellatedSolid::s_classTypeID = 0x21;
-
-GeoTessellatedSolid::GeoTessellatedSolid()
-{
-}
-
-GeoTessellatedSolid::~GeoTessellatedSolid()
-{
-  for(size_t i=0; i<m_facets.size(); ++i)
-    m_facets[i]->unref();
-}
-
-double GeoTessellatedSolid::volume() const
-{
-  // -- ToDo
-  return 0.;
-}
-
-const std::string& GeoTessellatedSolid::type() const
-{
-  return s_classType;
-}
-
-ShapeType GeoTessellatedSolid::typeID() const
-{
-  return s_classTypeID;
-}
-
-void GeoTessellatedSolid::exec(GeoShapeAction *action) const
-{
-  action->handleTessellatedSolid(this);
-}
-
-void GeoTessellatedSolid::addFacet(GeoFacet* facet)
-{
-  facet->ref();
-  m_facets.push_back(facet);
-}
-  
-GeoFacet* GeoTessellatedSolid::getFacet(size_t index) const
-{
-  return (index<m_facets.size() ? m_facets[index] : 0);
-}
-
-size_t GeoTessellatedSolid::getNumberOfFacets() const
-{
-  return m_facets.size();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTorus.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTorus.cxx
deleted file mode 100755
index 0adb87aa4c543af95fccbc11c7c99d57a055346b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTorus.cxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTorus.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoTorus::s_classType = "Torus";
-const ShapeType GeoTorus::s_classTypeID = 0x24;
-
-GeoTorus::GeoTorus (double Rmin, double Rmax, double Rtor, double SPhi, double DPhi)
-   : m_rMin (Rmin)
-   , m_rMax (Rmax)
-   , m_rTor(Rtor)
-   , m_sPhi (SPhi)
-   , m_dPhi (DPhi)
-{
-}
-
-
-GeoTorus::~GeoTorus()
-{
-}
-
-//## Other Operations (implementation)
-double GeoTorus::volume () const
-{
-  return 8.0;
-}
-
-const std::string & GeoTorus::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoTorus::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoTorus::exec (GeoShapeAction *action) const
-{
-  action->handleTorus(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTransform.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTransform.cxx
deleted file mode 100755
index db85aad747d862f796a09aa95ae544c6690ccb9b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTransform.cxx
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoNodeAction.h"
-
-GeoTransform::GeoTransform (const HepGeom::Transform3D& transform)
-  : m_transform(transform)
-{
-}
-
-GeoTransform::~GeoTransform()
-{
-}
-
-HepGeom::Transform3D GeoTransform::getTransform(const GeoVAlignmentStore* /*store*/) const
-{
-  return m_transform;
-}
-
-HepGeom::Transform3D GeoTransform::getDefTransform(const GeoVAlignmentStore* /*store*/) const
-{
-  return m_transform;
-}
-
-void GeoTransform::exec(GeoNodeAction *action) const
-{
-  action->handleTransform(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrap.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrap.cxx
deleted file mode 100755
index 19c0b8eef192badb730151ed35c5fc268be12c01..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrap.cxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTrap.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-
-const std::string GeoTrap::s_classType = "Trap";
-const ShapeType GeoTrap::s_classTypeID = 0x15;
-
-GeoTrap::GeoTrap (double ZHalfLength, double Theta, double Phi, double Dydzn, double Dxdyndzn, double Dxdypdzn, double Angleydzn, double Dydzp, double Dxdyndzp, double Dxdypdzp, double Angleydzp)
-  : m_zHalfLength (ZHalfLength)
-  , m_theta (Theta)
-  , m_phi (Phi)
-  , m_dydzn (Dydzn)
-  , m_dxdyndzn (Dxdyndzn)
-  , m_dxdypdzn (Dxdypdzn)
-  , m_angleydzn (Angleydzn)
-  , m_dydzp (Dydzp)
-  , m_dxdyndzp (Dxdyndzp)
-  , m_dxdypdzp (Dxdypdzp)
-  , m_angleydzp (Angleydzp)
-{
-}
-
-GeoTrap::~GeoTrap()
-{
-}
-
-double GeoTrap::volume () const
-{
-  double fDz = m_zHalfLength;
-  double fDy1 = m_dydzn;		              
-  double pDx1 = m_dxdyndzn;	              
-  double pDx2 = m_dxdypdzn;	              
-  double fDy2 = m_dydzp;		              
-  double pDx3 = m_dxdyndzp;	              
-  double pDx4 = m_dxdypdzp;	                  
-
-
-  double fDx1 = 0.5 * (pDx1 + pDx2);
-  double fDx2 = 0.5 * (pDx3 + pDx4);
-
-  return 4.0 * ((fDx1 + fDx2) * (fDy1 + fDy2) * (fDz * 0.5) +
-		(fDx2 - fDx1) * (fDy2 - fDy1) * (fDz * (1./6)));
-}
-
-const std::string & GeoTrap::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoTrap::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoTrap::exec (GeoShapeAction *action) const
-{
-  action->handleTrap(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTraversalState.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTraversalState.cxx
deleted file mode 100755
index 59e37fe35c6c842cc0327f45e1ce1abdf0163522..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTraversalState.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTraversalState.h"
-
-GeoTraversalState::GeoTraversalState ()
-{
-}
-
-GeoTraversalState::~GeoTraversalState()
-{
-}
-
-const HepGeom::Transform3D & GeoTraversalState::getTransform () const
-{
-  return m_transform;
-}
-
-const std::string & GeoTraversalState::getName () const
-{
-  return m_name;
-}
-
-const HepGeom::Transform3D & GeoTraversalState::getDefTransform () const
-{
-  return m_defTransform;
-}
-
-const std::string & GeoTraversalState::getAbsoluteName () const
-{
-  return m_absName;
-}
-
-const HepGeom::Transform3D & GeoTraversalState::getDefAbsoluteTransform () const
-{
-  return m_defAbsTransform;
-}
-
-const HepGeom::Transform3D & GeoTraversalState::getAbsoluteTransform () const
-{
-  return m_absTransform;
-}
-
-void GeoTraversalState::setTransform (const HepGeom::Transform3D &transform)
-{
-  m_transform = transform;
-  m_absTransform = m_absTransformList.top () * transform;
-}
-
-void GeoTraversalState::setName (const std::string &name)
-{
-  m_name = name;
-  m_absName = m_absNameList.top () + "/" + name;
-}
-
-void GeoTraversalState::setDefTransform (const HepGeom::Transform3D &transform)
-{
-  m_defTransform = transform;
-  m_defAbsTransform = m_defAbsTransformList.top () * transform;
-}
-
-void GeoTraversalState::nextLevel (const GeoVPhysVol* pv)
-{
-  m_absNameList.push (m_absName);
-  m_absTransformList.push (m_absTransform);
-  m_defAbsTransformList.push (m_defAbsTransform);
-
-  m_path.push(pv);
-  //      
-  // Reinitialize to identity.     
-  //     
-
-  m_absTransform = m_defAbsTransform = m_transform = m_defTransform =
-    HepGeom::Transform3D ();
-}
-
-void GeoTraversalState::previousLevel ()
-{
-  m_absTransform = m_absTransformList.top ();
-  m_defAbsTransform = m_defAbsTransformList.top ();
-  m_absTransformList.pop ();
-  m_defAbsTransformList.pop ();
-  m_absNameList.pop ();
-  m_path.pop();
-  m_transform = m_defTransform = HepGeom::Transform3D ();
-}
-
-const GeoNodePath * GeoTraversalState::getPath () const
-{
-  return &m_path;
-}
-
-void GeoTraversalState::setId (const Query<int> &id)
-{
-  m_id=id;
-}
-
-const Query<int> GeoTraversalState::getId () const
-{
-  return m_id;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrd.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrd.cxx
deleted file mode 100755
index 9e174d30906512ff3685b8a83576bd8dc0fb0473..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTrd.cxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTrd.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-
-const std::string GeoTrd::s_classType = "Trd";
-const ShapeType GeoTrd::s_classTypeID = 0x16;
-
-GeoTrd::GeoTrd (double XHalfLength1, double XHalfLength2, double YHalfLength1, double YHalfLength2, double ZHalfLength)
-  : m_xHalfLength1 (XHalfLength1)
-  , m_xHalfLength2 (XHalfLength2)
-  , m_yHalfLength1 (YHalfLength1)
-  , m_yHalfLength2 (YHalfLength2)
-  , m_zHalfLength (ZHalfLength)
-{
-}
-
-GeoTrd::~GeoTrd()
-{
-}
-
-double GeoTrd::volume () const
-{
-  double fDz = m_zHalfLength;
-  double fDy1 = m_yHalfLength1;
-  double fDx1 = m_xHalfLength1;
-  double fDx2 = m_xHalfLength2;
-  double fDy2 = m_yHalfLength2;
-  return 4.0 * ((fDx1 + fDx2) * (fDy1 + fDy2) * (fDz * 0.5) +
-		(fDx2 - fDx1) * (fDy2 - fDy1) * (fDz * (1./6)));
-}
-
-const std::string & GeoTrd::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoTrd::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoTrd::exec (GeoShapeAction *action) const
-{
-  action->handleTrd(this);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTube.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTube.cxx
deleted file mode 100755
index cdf3c826e2c353088343e6b1703e98cde97b5b6c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTube.cxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTube.h"
-#include "GeoModelKernel/GeoPolyhedrizeAction.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include <cmath>
-
-const std::string GeoTube::s_classType = "Tube";
-const ShapeType GeoTube::s_classTypeID = 0x17;
-
-GeoTube::GeoTube (double RMin, double RMax, double ZHalfLength)
-  : m_rMin (RMin)
-  , m_rMax (RMax)
-  , m_zHalfLength (ZHalfLength)
-{
-}
-
-GeoTube::~GeoTube()
-{
-}
-
-double GeoTube::volume () const
-{
-#ifndef M_PI
-  double M_PI = acos (-1.0);
-#endif
-  return 2 * M_PI * (m_rMax * m_rMax - m_rMin * m_rMin) * m_zHalfLength;
-}
-
-const std::string & GeoTube::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoTube::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoTube::exec (GeoShapeAction *action) const
-{
-  action->handleTube(this);
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTubs.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTubs.cxx
deleted file mode 100755
index 52323fb0db5b156b52eb16d757952ffe9c90efe2..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoTubs.cxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoTubs.h"
-#include "GeoModelKernel/GeoShapeAction.h"
-#include "GeoModelKernel/GeoPolyhedron.h"
-
-const std::string GeoTubs::s_classType = "Tubs";
-const ShapeType GeoTubs::s_classTypeID = 0x18;
-
-GeoTubs::GeoTubs (double RMin, double RMax, double ZHalfLength, double SPhi, double DPhi)
-  : m_rMin (RMin)
-  , m_rMax (RMax)
-  , m_zHalfLength (ZHalfLength)
-  , m_sPhi (SPhi)
-  , m_dPhi (DPhi)
-{
-}
-
-GeoTubs::~GeoTubs()
-{
-}
-
-double GeoTubs::volume () const
-{
-  return m_dPhi * (m_rMax * m_rMax - m_rMin * m_rMin) * m_zHalfLength;
-}
-
-const std::string & GeoTubs::type () const
-{
-  return s_classType;
-}
-
-ShapeType GeoTubs::typeID () const
-{
-  return s_classTypeID;
-}
-
-void GeoTubs::exec (GeoShapeAction *action) const
-{
-  action->handleTubs(this);
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorElement.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorElement.cxx
deleted file mode 100755
index dead35549118972298320bfbaa36f332114fd73c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorElement.cxx
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVDetectorElement.h"
-
-GeoVDetectorElement::GeoVDetectorElement (const GeoVFullPhysVol* fullPhysVol)
-  : m_materialGeom(fullPhysVol)
-{
-}
-
-GeoVDetectorElement::~GeoVDetectorElement()
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorFactory.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorFactory.cxx
deleted file mode 100755
index 25daefa33e6648875eab75b928d3063cb5d89b5c..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorFactory.cxx
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVDetectorFactory.h"
-#include "GeoModelKernel/GeoVDetectorManager.h"
-#include "GeoModelKernel/GeoPhysVol.h"
-
-GeoVDetectorFactory::GeoVDetectorFactory()
-{
-}
-
-GeoVDetectorFactory::~GeoVDetectorFactory()
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorManager.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorManager.cxx
deleted file mode 100755
index c5b8370f51f351d5c763898d7c849521773754df..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVDetectorManager.cxx
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVDetectorManager.h"
-#include "GeoModelKernel/GeoVDetectorElement.h"
-
-GeoVDetectorManager::GeoVDetectorManager()
-{
-}
-
-GeoVDetectorManager::~GeoVDetectorManager()
-{
-}
-
-void GeoVDetectorManager::setName(const std::string & name) 
-{
-  m_name=name;
-}
-
-const std::string & GeoVDetectorManager::getName() const 
-{
-  return m_name;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVFullPhysVol.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVFullPhysVol.cxx
deleted file mode 100755
index 45767884ecfc1bd12de9938b768639aaeb5aa833..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVFullPhysVol.cxx
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVFullPhysVol.h"
-#include "GeoModelKernel/GeoVAlignmentStore.h"
-#include <string>
-
-GeoVFullPhysVol::GeoVFullPhysVol(const GeoLogVol* logVol)
-  : GeoVPhysVol(logVol)
-  , m_id(nullptr)
-  , m_absPosInfo(nullptr)
-{
-}
-
-GeoVFullPhysVol::~GeoVFullPhysVol()
-{
-  delete m_absPosInfo;
-  delete m_id;
-}
-
-const HepGeom::Transform3D & GeoVFullPhysVol::getAbsoluteTransform(GeoVAlignmentStore* store) const
-{
-  //------------------------------------------------------------------------------------------------//     
-  //                                                                                                //     
-  // Get ready for something to go wrong:                                                           //     
-  //                                                                                                //     
-  static std::string errorMessage("Full Physical Volume errroneously placed in a shared portion of a detector description graph.\nName of shared volume:  ");
-  //                                                                                                //     
-  //------------------------------------------------------------------------------------------------//     
-  if(isShared()) throw std::runtime_error(errorMessage);
-
-  if(store==nullptr && !m_absPosInfo) m_absPosInfo = new GeoAbsPositionInfo();
-
-  //
-  // Check the cache first. If not empty, then return the cached value
-  //
-  if(store==nullptr){
-    if(m_absPosInfo->getAbsTransform()) return *m_absPosInfo->getAbsTransform();
-  }
-  else {
-    const HepGeom::Transform3D* storedPos = store->getAbsPosition(this);
-    if(storedPos!=nullptr) return *storedPos;
-  }
-
-  // The cache is empty. Compute the absolute position from the top of the tree down to here, and cache it 
-  PVConstLink child(this), parent(getParent());
-  HepGeom::Transform3D tProd;
-
-  while (parent) {
-#ifdef HOSED
-    int index = parent->indexOf (child);
-    HepGeom::Transform3D transform = parent->getXToChildVol(index,store);
-#else
-    HepGeom::Transform3D transform = child->getX(store);
-#endif
-    tProd = transform * tProd;
-    child = parent;
-    if(child->isShared()) {
-      throw std::runtime_error(errorMessage);
-    }
-    else {
-      parent = child->getParent();
-    }
-  }
-
-  if(store==nullptr) {
-    m_absPosInfo->setAbsTransform(tProd);
-    return *m_absPosInfo->getAbsTransform();
-  }
-  else {
-    store->setAbsPosition(this,tProd);
-    const HepGeom::Transform3D* storedPosition = store->getAbsPosition(this);
-    return *storedPosition;
-  }
-}
-
-void GeoVFullPhysVol::clearPositionInfo() const
-{
-  delete m_absPosInfo;
-  m_absPosInfo = nullptr;
-}
-
-const HepGeom::Transform3D& GeoVFullPhysVol::getDefAbsoluteTransform(GeoVAlignmentStore* store) const
-{
-  //------------------------------------------------------------------------------------------------//     
-  //                                                                                                //     
-  // Get ready for something to go wrong:                                                           //     
-  //                                                                                                //     
-  static std::string errorMessage("Full Physical Volume errroneously placed in a shared portion of a detector description graph.\nName of shared volume:  ");
-  //                                                                                                //     
-  //------------------------------------------------------------------------------------------------//     
-  if(isShared()) throw std::runtime_error(errorMessage);
-
-  if(store==nullptr && !m_absPosInfo) m_absPosInfo = new GeoAbsPositionInfo();
-
-  //
-  // Check the cache first. If not empty, then return the cached value
-  //
-  if(store==nullptr){
-    if(m_absPosInfo->getDefAbsTransform()) return *m_absPosInfo->getDefAbsTransform();
-  }
-  else {
-    const HepGeom::Transform3D* storedPos = store->getDefAbsPosition(this);
-    if(storedPos!=nullptr) return *storedPos;
-  }
-
-  // The cache is empty. Compute the absolute position from the top of the tree down to here, and cache it 
-  PVConstLink child(this), parent(getParent());
-  HepGeom::Transform3D tProd;
-
-  while (parent) {
-#ifdef HOSED
-    int index = parent->indexOf (child);
-    HepGeom::Transform3D transform = parent->getDefXToChildVol(index,store);
-#else
-    HepGeom::Transform3D transform = child->getDefX(store);
-#endif
-    tProd = transform * tProd;
-    child = parent;
-    if(child->isShared()) {
-      throw std::runtime_error(errorMessage);
-    }
-    else {
-      parent = child->getParent();
-    }
-  }
-
-  if(store==nullptr) {
-    m_absPosInfo->setDefAbsTransform(tProd);
-    return *m_absPosInfo->getDefAbsTransform();
-  }
-  else {
-    store->setDefAbsPosition(this,tProd);
-    const HepGeom::Transform3D* storedPosition = store->getDefAbsPosition(this);
-    return *storedPosition;
-  }
-}
-
-const std::string &  GeoVFullPhysVol::getAbsoluteName ()
-{
-  //------------------------------------------------------------------------------------------------//     
-  //                                                                                                //     
-  // Get ready for something to go wrong:                                                           //     
-  //                                                                                                //     
-  static std::string errorMessage("Full Physical Volume errroneously placed in a shared portion of a detector description graph.\nName of shared volume:  ");
-  //                                                                                                //     
-  //------------------------------------------------------------------------------------------------//     
-
-  if(m_absName == "") {
-    if(isShared()) throw std::runtime_error(errorMessage);
-
-    //
-    // Check the cache.  If it is empty, compute the absolute position from the
-    // top of the tree down to here, and update the cache
-    //
-    PVConstLink child(this), parent(getParent());
-    std::string tProd;
-
-    while (parent) {
-      int index = parent->indexOf (child);
-      std::string name = parent->getNameOfChildVol (index);
-
-      tProd = tProd + "/" + name;
-      child = parent;
-      if (child->isShared ()) {
-        throw std::runtime_error(errorMessage);
-      }
-      else {
-        parent = child->getParent ();
-      }
-    }
-    m_absName = tProd;
-  }
-
-  return m_absName;
-}
-
-unsigned int GeoVFullPhysVol::getId () const
-{
-  //------------------------------------------------------------------------------------------------//     
-  //                                                                                                //     
-  // Get ready for something to go wrong:                                                           //     
-  //                                                                                                //     
-  static std::string errorMessage("Full Physical Volume errroneously placed in a shared portion of a detector description graph.\nName of shared volume:  ");
-  //                                                                                                //     
-  //------------------------------------------------------------------------------------------------//     
-
-  if(m_id==nullptr) {
-    if(isShared()) throw std::runtime_error(errorMessage);
-
-    //     
-    // Check the cache.  If it is empty, compute the absolute position from the     
-    // top of the tree down to here, and update the cache     
-    //     
-    PVConstLink child = this, parent = nullptr;
-    if(child->isShared()) {
-      throw std::runtime_error(errorMessage);
-    }	
-    else {
-      parent = child->getParent();
-    }
-
-    int index = parent->indexOf(child);
-    m_id = new Query<int>(parent->getIdOfChildVol(index));
-  }
-  return *m_id;
-}
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVPhysVol.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVPhysVol.cxx
deleted file mode 100755
index 616f90ab2c2a353d6b8f0f87cbd931b94dde0306..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVPhysVol.cxx
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVPhysVol.h"
-#include "GeoModelKernel/GeoVolumeAction.h"
-#include "GeoAccessVolumeAction.h"
-#include <stdexcept>
-#include <string>
-
-GeoVPhysVol::GeoVPhysVol(const GeoLogVol* LogVol)
-  : m_parentPtr(nullptr)
-  , m_logVol(LogVol)
-{
-  if(m_logVol) m_logVol->ref();
-}
-
-GeoVPhysVol::~GeoVPhysVol()
-{
-  if(m_logVol) m_logVol->unref();
-}
-
-Query<unsigned int> GeoVPhysVol::indexOf(PVConstLink daughter) const
-{
-  unsigned int nChildVols{getNChildVols()};
-  for(unsigned int i=0; i<nChildVols; i++) { // To Do: replace this with Volume Iterator!
-    if(getChildVol(i) == daughter) return i;
-  }
-  return Query<unsigned int >();
-}
-
-PVConstLink GeoVPhysVol::getParent() const
-{
-  if(m_parentPtr != this) return m_parentPtr;
-  return nullptr;
-}
-
-const GeoLogVol* GeoVPhysVol::getLogVol() const
-{
-  return m_logVol;
-}
-
-void GeoVPhysVol::apply(GeoVolumeAction *action) const
-{
-  int nVols(0);
-  switch(action->getType()) {
-  case GeoVolumeAction::TOP_DOWN:
-    action->handleVPhysVol(this);
-    if(action->shouldTerminate()) return;
-
-    action->getState()->nextLevel(this);
-    nVols = getNChildVols();
-    for(int d = 0; d < nVols; d++) {
-      GeoAccessVolumeAction av(d,nullptr);
-      exec (&av);
-
-      action->getState()->setTransform(av.getTransform());
-      action->getState()->setDefTransform(av.getDefTransform());
-      action->getState()->setId(av.getId());
-      action->getState()->setName(av.getName());
-
-      av.getVolume()->apply(action);
-      if(action->shouldTerminate()) break;
-    }
-    action->getState()->previousLevel();
-    break;
-  case GeoVolumeAction::BOTTOM_UP:
-    action->getState()->nextLevel(this);
-    nVols = getNChildVols();
-    for(int d = 0; d < nVols; d++) {
-      GeoAccessVolumeAction av(d,nullptr);
-      exec(&av);
-
-      action->getState()->setTransform(av.getTransform());
-      action->getState()->setDefTransform(av.getDefTransform());
-      action->getState()->setId(av.getId());
-      action->getState()->setName(av.getName());
-
-      av.getVolume()->apply(action);
-      if(action->shouldTerminate()) break;
-    }
-    action->getState()->previousLevel();
-
-    action->handleVPhysVol(this);
-    if(action->shouldTerminate()) return;  // To Do: do I need this?
-    break;
-  default:
-    throw std::runtime_error("GeoVPhysVol::apply(). Unsupported GeoVolumeAction type " + std::to_string((unsigned)action->getType()));
-  }
-}
-
-void GeoVPhysVol::dockTo(GeoVPhysVol* parent)
-{
-  if(m_parentPtr) {
-    m_parentPtr = this;
-  }
-  else {
-    m_parentPtr = parent;
-  }
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeAction.cxx
deleted file mode 100755
index 5dbf90ff2ce428000a758d013f10d4fa5071c55b..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeAction.cxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVolumeAction.h"
-
-GeoVolumeAction::GeoVolumeAction (Type type)
-  : m_type(type)
-  , m_terminate(false)
-{
-}
-
-GeoVolumeAction::~GeoVolumeAction()
-{
-}
-
-void GeoVolumeAction::handleVPhysVol (const GeoVPhysVol *)
-{
-}
-
-void GeoVolumeAction::terminate ()
-{
-  m_terminate = true;
-}
-
-bool GeoVolumeAction::shouldTerminate () const
-{
-  return m_terminate;
-}
-
-const GeoTraversalState* GeoVolumeAction::getState () const
-{
-  return &m_traversalState;
-}
-
-GeoTraversalState* GeoVolumeAction::getState ()
-{
-  return &m_traversalState;
-}
-
-GeoVolumeAction::Type GeoVolumeAction::getType () const
-{
-  return m_type;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeCursor.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeCursor.cxx
deleted file mode 100755
index d4035b11b4090c712a90891d08e24af8d3b917b5..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoVolumeCursor.cxx
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoVolumeCursor.h"
-#include "GeoModelKernel/GeoNameTag.h"
-#include "GeoModelKernel/GeoSerialDenominator.h"
-#include "GeoModelKernel/GeoSerialIdentifier.h"
-#include "GeoModelKernel/GeoAlignableTransform.h"
-#include <string>
-
-GeoVolumeCursor::GeoVolumeCursor (PVConstLink parent, GeoVAlignmentStore* store)
-  : m_parent(parent)
-  , m_majorIndex(0)
-  , m_minorIndex(0)
-  , m_minorLimit(0)
-  , m_serialTransformer(nullptr)
-  , m_nameTag(nullptr)
-  , m_serialDenominator(nullptr)
-  , m_idTag(nullptr)
-  , m_serialDenomPosition(0)
-  , m_serialIdentifier(nullptr)
-  , m_serialIdentPosition(0)
-  , m_volCount(0)
-  , m_hasAlignTrans(false)
-  , m_alignStore(store)
-{
-  setDepthLimit(0);
-  next();
-}
-
-GeoVolumeCursor::~GeoVolumeCursor()
-{
-}
-
-void GeoVolumeCursor::next() {
-  resuscitate();
-  
-  if (m_minorLimit) { // We are doing a serial transformer
-    m_minorIndex++;
-    if (m_minorIndex==m_minorLimit) {  
-      m_minorIndex=0;
-      m_minorLimit=0;
-      m_majorIndex++;
-      next();
-    }
-    else {
-      m_volCount++;
-    }              
-  }
-  else {           // We are not doing a serial transformer
-    m_idTag             = nullptr;
-    m_nameTag           = nullptr;
-    m_serialTransformer = nullptr;
-    m_pendingTransformList.erase (m_pendingTransformList.begin (),
-				  m_pendingTransformList.end ());
-    m_hasAlignTrans = false;
-    m_volume=nullptr;
-    
-    int N = m_parent->getNChildNodes();
-    if(N==0) return;
-    const GeoGraphNode * const *node  = m_parent->getChildNode(m_majorIndex);
-    const GeoGraphNode * const *back  = m_parent->getChildNode(N-1);
-    const GeoGraphNode * const *end   = back+1;
-    while (node!=end) {
-      (*node)->exec(this);
-      if (m_minorLimit) { // We have stepped into ST
-      }
-      else {            // We have not stepped into ST.
-	node++;
-	m_majorIndex++;
-      }
-      if (m_terminate) {
-	m_volCount++;
-	break;
-      }
-    }
-  }
-}
-
-void GeoVolumeCursor::resuscitate() {
-  m_terminate = false;
-}
-
-bool GeoVolumeCursor::atEnd() const {
-  return !m_volume;
-}
-
-void GeoVolumeCursor::handleTransform (const GeoTransform *xform)
-{
-  m_pendingTransformList.push_back (xform);
-  if(dynamic_cast<const GeoAlignableTransform*>(xform))
-    m_hasAlignTrans = true;
-}
-
-void GeoVolumeCursor::handlePhysVol (const GeoPhysVol *vol)
-{
-
-  m_volume = vol;
-  unsigned int listSize = m_pendingTransformList.size ();
-  if (listSize == 0) {
-    m_transform    = HepGeom::Transform3D();
-    m_defTransform = HepGeom::Transform3D();
-  }
-  else {
-    m_transform = m_pendingTransformList[0]->getTransform(m_alignStore);
-    m_defTransform = m_pendingTransformList[0]->getDefTransform(m_alignStore);
-    for (unsigned int t = 1; t < m_pendingTransformList.size (); t++) {
-      m_transform    = m_transform    * m_pendingTransformList[t]->getTransform(m_alignStore);
-      m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-    }
-  }
-  terminate ();
-}
-
-void GeoVolumeCursor::handleFullPhysVol (const GeoFullPhysVol *vol)
-{
-  m_volume = vol;
-  unsigned int listSize = m_pendingTransformList.size ();
-  if (listSize == 0) {
-    m_transform    = HepGeom::Transform3D();
-    m_defTransform = HepGeom::Transform3D();
-  }
-  else {
-    m_transform = m_pendingTransformList[0]->getTransform(m_alignStore);
-    m_defTransform = m_pendingTransformList[0]->getDefTransform(m_alignStore);
-    for (unsigned int t = 1; t < m_pendingTransformList.size (); t++) {
-      m_transform    = m_transform    * m_pendingTransformList[t]->getTransform(m_alignStore);
-      m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-    }
-  }
-  terminate ();
-}
-
-void GeoVolumeCursor::handleSerialTransformer (const GeoSerialTransformer  *sT)
-{
-  
-  m_minorLimit = sT->getNCopies();
-  m_minorIndex = 0;
-  m_serialTransformer = sT;
-  m_volume = sT->getVolume();
-  
-  unsigned int listSize = m_pendingTransformList.size ();
-  if (listSize == 0) {
-    m_transform    = HepGeom::Transform3D();
-    m_defTransform = HepGeom::Transform3D();
-  }
-  else {
-    m_transform = m_pendingTransformList[0]->getTransform(m_alignStore);
-    m_defTransform = m_pendingTransformList[0]->getDefTransform(m_alignStore);
-    for (unsigned int t = 1; t < m_pendingTransformList.size (); t++) {
-      m_transform    = m_transform    * m_pendingTransformList[t]->getTransform(m_alignStore);
-      m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(m_alignStore);
-    }
-  }
-  terminate ();
-}
-
-void GeoVolumeCursor::handleNameTag (const GeoNameTag *nameTag)
-{
-  m_nameTag = nameTag;
-  m_serialDenominator = nullptr;
-  m_serialDenomPosition = 0;
-}
-
-void GeoVolumeCursor::handleSerialDenominator (const GeoSerialDenominator *sD)
-{
-  m_serialDenominator = sD;
-  m_serialDenomPosition = m_volCount;
-}
-
-
-void GeoVolumeCursor::handleIdentifierTag (const GeoIdentifierTag *idTag)
-{
-  m_idTag = idTag;
-  m_serialIdentifier = nullptr;
-  m_serialIdentPosition = m_volCount;
-}
-
-void GeoVolumeCursor::handleSerialIdentifier(const GeoSerialIdentifier *sI)
-{
-  m_serialIdentifier = sI;
-  m_serialIdentPosition =m_volCount;
-}
-
-PVConstLink GeoVolumeCursor::getVolume () const
-{
-  return m_volume;
-}
-
-HepGeom::Transform3D GeoVolumeCursor::getTransform () const
-{
-  if (m_minorLimit) {
-    return m_transform*m_serialTransformer->getTransform(m_minorIndex);
-  }
-  else {
-    return m_transform;
-  }
-}
-
-HepGeom::Transform3D GeoVolumeCursor::getDefTransform () const
-{
-  if (m_minorLimit) {
-    return m_transform*m_serialTransformer->getTransform(m_minorIndex);
-  }
-  else {
-    return m_defTransform;
-  }
-}
-
-std::string  GeoVolumeCursor::getName () const
-{
-  std::string name;
-  if(m_nameTag) {
-    name = m_nameTag->getName();
-  }
-  else if(m_serialDenominator) {
-    name = m_serialDenominator->getBaseName() + std::to_string((int)(m_volCount-m_serialDenomPosition-1));
-  }
-  else {
-    name = "ANON";
-  }
-  return name;
-}
-
-Query<int> GeoVolumeCursor::getId () const
-{
-  Query<int> id;
-  if (m_idTag) {
-    id = Query<int> (m_idTag->getIdentifier ());
-  }
-  else if (m_serialIdentifier) {
-    id = Query<int> (m_volCount - m_serialIdentPosition - 1 + m_serialIdentifier->getBaseId());
-  }
-  return id;
-}
-
-bool GeoVolumeCursor::hasAlignableTransform() const
-{
-  return m_hasAlignTrans;
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoXF.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeoXF.cxx
deleted file mode 100755
index aec472376e591c2f189f5115ee8b4bc55a815e64..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoXF.cxx
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeoXF.h"
-#include <stdexcept>
-namespace GeoXF
-{
-
-
-
-  //------------------------------------------------------------------//
-  //                                                                  //
-  //  Implementation of Function                                      //
-  //                                                                  //
-  //------------------------------------------------------------------//
-
-  Function::Function ()
-  {
-  }
-
-  Function::~Function ()
-  {
-  }
-
-  Product operator * (const Function & a, const Function & b)
-  {
-    return Product (&a, &b);
-  }
-
-  PreMult operator * (const HepGeom::Transform3D & xf, const Function & b)
-  {
-    return PreMult (xf, &b);
-  }
-
-  PostMult operator * (const Function & a, const HepGeom::Transform3D & xf)
-  {
-    return PostMult (&a, xf);
-  }
-
-  unsigned int Function::dimensionality () const
-  {
-    return 1;
-  }
-
-  //------------------------------------------------------------------//
-  //                                                                  //
-  //  Implementation of Product                                       //
-  //                                                                  //
-  //------------------------------------------------------------------//
-
-  Product::Product (const Function * arg1,
-		    const Function * arg2):m_arg1 (arg1->clone ()),
-    m_arg2 (arg2->clone ())
-  {
-    if (arg1->dimensionality () != arg2->dimensionality ())
-      {
-	throw std::
-	  runtime_error ("Warning:  dimension mismatch in GeoXF::Product");
-      }
-  }
-
-
-  // Every function must override this:
-  Product *Product::clone () const
-  {
-    return new Product (*this);
-  }
-
-  // Copy constructor:
-  Product::Product (const Product & right):Function (),
-    m_arg1 (right.m_arg1->clone ()), m_arg2 (right.m_arg2->clone ())
-  {
-  }
-
-
-  Product::~Product ()
-  {
-    delete m_arg1;
-    delete m_arg2;
-  }
-
-  unsigned int Product::dimensionality () const
-  {
-    return m_arg1->dimensionality ();
-  }
-
-  HepGeom::Transform3D Product::operator        () (double x) const
-  {
-    return (*m_arg1) (x) * (*m_arg2) (x);
-  }
-
-  HepGeom::Transform3D Product::operator        () (const Genfun::Argument & x) const
-  {
-    return (*m_arg1) (x) * (*m_arg2) (x);
-  }
-
-
-
-  //------------------------------------------------------------------//
-  //                                                                  //
-  //  Implementation of PreMult                                       //
-  //                                                                  //
-  //------------------------------------------------------------------//
-
-  PreMult::PreMult (const HepGeom::Transform3D & arg1,
-		    const Function * arg2):m_arg1 (arg1),
-    m_arg2 (arg2->clone ())
-  {
-  }
-
-
-  // Every function must override this:
-  PreMult *PreMult::clone () const
-  {
-    return new PreMult (*this);
-  }
-
-  // Copy constructor:
-  PreMult::PreMult (const PreMult & right):Function (), m_arg1 (right.m_arg1),
-    m_arg2 (right.m_arg2->clone ())
-  {
-  }
-
-
-  PreMult::~PreMult ()
-  {
-    delete m_arg2;
-  }
-
-  unsigned int PreMult::dimensionality () const
-  {
-    return m_arg2->dimensionality ();
-  }
-
-  HepGeom::Transform3D PreMult::operator        () (double x) const
-  {
-    return m_arg1 * (*m_arg2) (x);
-  }
-
-  HepGeom::Transform3D PreMult::operator        () (const Genfun::Argument & x) const
-  {
-    return m_arg1 * (*m_arg2) (x);
-  }
-
-
-  //------------------------------------------------------------------//
-  //                                                                  //
-  //  Implementation of PostMult                                      //
-  //                                                                  //
-  //------------------------------------------------------------------//
-
-  PostMult::PostMult (const Function * arg1,
-		      const HepGeom::Transform3D & arg2):m_arg1 (arg1->clone ()),
-    m_arg2 (arg2)
-  {
-  }
-
-
-  // Every function must override this:
-  PostMult *PostMult::clone () const
-  {
-    return new PostMult (*this);
-  }
-
-  // Copy constructor:
-  PostMult::PostMult (const PostMult & right):Function (),
-    m_arg1 (right.m_arg1->clone ()), m_arg2 (right.m_arg2)
-  {
-  }
-
-
-  PostMult::~PostMult ()
-  {
-    delete m_arg1;
-  }
-
-  unsigned int PostMult::dimensionality () const
-  {
-    return m_arg1->dimensionality ();
-  }
-
-  HepGeom::Transform3D PostMult::operator        () (double x) const
-  {
-    return (*m_arg1) (x) * m_arg2;
-  }
-
-  HepGeom::Transform3D PostMult::operator        () (const Genfun::Argument & x) const
-  {
-    return (*m_arg1) (x) * m_arg2;
-  }
-
-
-  Pow::Pow (const HepGeom::Transform3D & xform, Genfun::GENFUNCTION f):m_xf (xform),
-    m_function (f.clone ())
-  {
-  }
-
-  Pow::~Pow ()
-  {
-    delete m_function;
-  }
-
-  HepGeom::Transform3D Pow::operator        () (double x) const
-  {
-    //
-    // Get the translation part and the rotation part:
-    //
-    CLHEP::HepRotation rotate = m_xf.getRotation ();
-    CLHEP::Hep3Vector translate = m_xf.getTranslation ();
-    CLHEP::HepAxisAngle aa = rotate.axisAngle ();
-    //
-    // Evaluate the function
-    //
-    double nTimes = (*m_function) (x);
-    //
-    // Modify:
-    //
-      translate *= nTimes;
-      aa.setDelta (aa.delta () * nTimes);
-    //
-    // Now compose these and return a result:
-    //
-      return HepGeom::Translate3D (translate) * HepGeom::Rotate3D (aa.delta (),
-						       aa.axis ());
-  }
-
-  HepGeom::Transform3D Pow::operator        () (const Genfun::Argument & argument) const
-  {
-    return operator        () (argument[0]);
-  }
-
-  Pow *Pow::clone () const
-  {
-    return new Pow (*this);
-  }
-
-  Pow::Pow (const Pow & right):Function (), m_xf (right.m_xf),
-    m_function (right.m_function->clone ())
-  {
-  }
-
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeometryMap.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/GeometryMap.cxx
deleted file mode 100755
index 5b0e9418eacb69fb47a4755da146a1131ef637a0..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeometryMap.cxx
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/GeometryMap.h"
-#include "GeoModelKernel/GeoVolumeCursor.h"
-#include <map>
-#include <sys/types.h>
-#include <regex.h>
-// '^to\w*re$'   
-class GeometryMap::Clockwork {
-
-public:
-
-  Clockwork():lV(0){}
-  
-  std::vector<std::string>                geometryRegex;
-  std::vector<regex_t *>                  geometryPreg;
-  std::vector<std::vector<std::string> >  pathList;
-  std::vector<PVConstLink>                physicalVolumes;
-  unsigned int                            lV;
-
-  void finalize(unsigned int i, PVConstLink v);
-};
-
-
-GeometryMap::GeometryMap():
-  m_c(new Clockwork()) {
-}
-
-
-GeometryMap::~GeometryMap() {
-  delete m_c;
-}
-
-void GeometryMap::add(const std::string & Path) {
-  std::vector <std::string> pathList;
-
-  std::string path=Path;
-  // First look for the character "/":
-  size_t pos = 0;
-  while (1) {
-    size_t end = path.find('/',pos);
-    if (end==path.npos) break;
-
-    std::string sub0(path,pos,end-pos);
-    pathList.push_back(sub0);
-    std::string sub1(path,end+1,path.npos-end-1);
-    path=sub1;
-    pos=0;
-  }
-  // Then look for wild cards:
-  m_c->pathList.push_back(pathList);
-
-  std::string regex="^";
-  //size_t pos=0;
-  while (1) {
-    size_t end = path.find('*',pos);
-    std::string sub(path,pos,end-pos);
-    regex+=sub;
-    if (end==path.npos) break;
-    regex+=".*";
-    pos=end+1;
-    if (pos==path.npos) break;
-  }
-  regex+="$";
-  m_c->geometryRegex.push_back(regex);
-  regex_t *preg = new regex_t;
-  regcomp(preg,regex.c_str(),REG_EXTENDED);
-  m_c->geometryPreg.push_back(preg);
-
-}
-
-void GeometryMap::finalize( PVConstLink v) {
-
-  for (size_t i=0;i<m_c->pathList.size();i++) {
-    m_c->lV=0;
-    m_c->finalize(i,v);
-  }
-}
-
-
-void GeometryMap::Clockwork::finalize(unsigned int i, PVConstLink v) {
-
-  static const size_t NMATCH=11;     
-  regmatch_t pmatch[NMATCH];          
-
-  // Something has gone wrong...
-  if (lV>pathList[i].size()) {
-    return;
-  }
-  if (lV==pathList[i].size()) {
-    std::string name = v->getLogVol()->getName();
-    if (regexec((geometryPreg[i]),name.c_str(), NMATCH, pmatch, 0)==0) {
-      physicalVolumes.push_back(v);
-    }
-  }
-  else {
-    GeoVolumeCursor x(v,nullptr);
-    while (!x.atEnd()) {
-      lV++;
-      finalize(i, x.getVolume());
-      lV--;
-      x.next();
-    }
-  }
-}
-
-
-   
-    
-
-
-GeometryMap::Iterator GeometryMap::begin() const {
-  return m_c->physicalVolumes.begin();
-}
-
-GeometryMap::Iterator GeometryMap::end() const {
-  return m_c->physicalVolumes.end();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.cxx
deleted file mode 100755
index 724440107804382567cb57f5f18eb23e86646066..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.cxx
+++ /dev/null
@@ -1,2112 +0,0 @@
-#include "PolygonTriangulator.h"
-
-///////////////////////////////////////////////////////////////////////
-//                                                                   //
-// Class: PolygonTriangulator                                        //
-//                                                                   //
-// Description: Triangulates any (non-complex) 2D polygon.           //
-//                                                                   //
-// Author: Thomas Kittelmann (Thomas.Kittelmann@cern.ch), March 2007 //
-//                                                                   //
-// Notes:                                                            //
-//                                                                   //
-//     Actual algorithms are adapted from                            //
-//     http://www.mema.ucl.ac.be/~wu/Poly2Tri/poly2tri.html          //
-//     (see copyright notice below)                                  //
-//                                                                   //
-//     Main changes performed for the present incarnation are        //
-//     interface & namespace changes, indentation, small             //
-//     performance tweaks and removal of unused features.            //
-//     Most importantly, got rid of static and globals so the class  //
-//     can be reliably used more than once per process. Also, the    //
-//     output triangles are sorted to preserve "handedness".         //
-//                                                                   //
-///////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-/////////////// Copyright file from poly2tri webpage follows: /////////////////
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-//
-// Poly2Tri:Fast and Robust Simple Polygon triangulation with/without holes
-//                         by Sweep Line Algorithm
-//                                Liang, Wu
-//         http://www.mema.ucl.ac.be/~wu/Poly2Tri/poly2tri.html
-//         Copyright (C) 2003, 2004, 2005, ALL RIGHTS RESERVED.
-//
-// ---------------------------------------------------------------------
-// wu@mema.ucl.ac.be                           wuliang@femagsoft.com
-// Centre for Sys. Eng. & App. Mech.           FEMAGSoft S.A.
-// Universite Cathalique de Louvain            4, Avenue Albert Einstein
-// Batiment Euler, Avenue Georges Lemaitre, 4  B-1348 Louvain-la-Neuve
-// B-1348, Louvain-la-Neuve                    Belgium
-// Belgium
-// ---------------------------------------------------------------------
-//
-// This program is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
-// TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-//
-// This program may be freely redistributed under the condition that all
-// the copyright notices in all source files ( including the copyright
-// notice printed when the `-h' switch is selected) are not removed.Both
-// the binary and source codes may not be sold or included in any comme-
-// rcial products without a license from the corresponding author(s) &
-// entities.
-//
-// 1) Arbitrary precision floating-point arithmetic and fast robust geo-
-//    metric predicates (predicates.cc) is copyrighted by
-//    Jonathan Shewchuk (http://www.cs.berkeley.edu/~jrs) and you may get
-//    the source code from http://www.cs.cmu.edu/~quake/robust.html
-//
-// 2) The shell script mps2eps is copyrighted by Jon Edvardsson
-//    (http://www.ida.liu.se/~pelab/members/index.php4/?12) and you may
-//    get the copy from http://www.ida.liu.se/~joned/download/mps2eps/
-//
-// 3) All other source codes and exmaples files distributed in Poly2Tri
-//    are copyrighted by Liang, Wu (http://www.mema.ucl.ac.be/~wu) and
-//    FEMAGSoft S.A.
-//
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-#include <algorithm>
-#include <cmath>
-#include <cstdlib>
-#include <map>
-#include <limits>
-#include <list>
-#include <queue>
-#include <set>
-#include <iostream>
-#include <stack>
-#include <assert.h>
-
-namespace internal_poltrig {
-
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  //////////////////////////////////// Defs.h ////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-
-  //-------------------------------------------------------------------------/
-  //Copyright (C) 2003, 2004, 2005, ALL RIGHTS RESERVED.
-  //Centre for Sys. Eng. & App. Mech.           FEMAGSoft S.A.
-  //Universite Cathalique de Louvain            4, Avenue Albert Einstein
-  //Batiment Euler, Avenue Georges Lemaitre, 4  B-1348 Louvain-la-Neuve
-  //B-1348, Louvain-la-Neuve                    Belgium
-  //Belgium
-  //-------------------------------------------------------------------------/
-  //Name:         defs.h
-  //Purpose:      some definition for mesh generation
-  //Author:       Wu Liang
-  //Created:      03/2000
-  //-------------------------------------------------------------------------/
-
-
-#define sqr(t)  (t)*(t)
-
-  //const double    PI=3.141592653589793238462643383279502884197169399375105820974944592308;
-  enum  Type      { UNKNOWN, INPUT, INSERT, START, END, MERGE, SPLIT, REGULAR_UP, REGULAR_DOWN};
-
-  class   Pointbase;
-  class   Linebase;
-
-  template <class T, class KeyType>      class    SplayTree;
-  typedef std::map<unsigned int, Pointbase*>           PointbaseMap;
-  typedef std::map<unsigned int, Linebase*>            LineMap;
-  typedef std::priority_queue<Pointbase>               PQueue;
-  typedef SplayTree<Linebase*, double>            EdgeBST;
-  typedef std::list<unsigned int>                      Monopoly;
-  typedef std::list<Monopoly>                          Monopolys;
-  typedef std::vector<unsigned int>                    Triangle;
-  typedef std::list<Triangle>                          Triangles;
-  typedef std::map<unsigned int, std::set<unsigned int> >   AdjEdgeMap;
-
-
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  //////////////////////////////// predicates.cc /////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-
-  /*****************************************************************************/
-  /*                                                                           */
-  /*  Routines for Arbitrary Precision Floating-point Arithmetic               */
-  /*  and Fast Robust Geometric Predicates                                     */
-  /*  (predicates.cc)                                                           */
-  /*                                                                           */
-  /*  May 18, 1996                                                             */
-  /*                                                                           */
-  /*  Placed in the public domain by                                           */
-  /*  Jonathan Richard Shewchuk                                                */
-  /*  School of Computer Science                                               */
-  /*  Carnegie Mellon University                                               */
-  /*  5000 Forbes Avenue                                                       */
-  /*  Pittsburgh, Pennsylvania  15213-3891                                     */
-  /*  jrs@cs.cmu.edu                                                           */
-  /*                                                                           */
-  /*  This file contains C implementation of algorithms for exact addition     */
-  /*    and multiplication of floating-point numbers, and predicates for       */
-  /*    robustly performing the orientation and incircle tests used in         */
-  /*    computational geometry.  The algorithms and underlying theory are      */
-  /*    described in Jonathan Richard Shewchuk.  "Adaptive Precision Floating- */
-  /*    Point Arithmetic and Fast Robust Geometric Predicates."  Technical     */
-  /*    Report CMU-CS-96-140, School of Computer Science, Carnegie Mellon      */
-  /*    University, Pittsburgh, Pennsylvania, May 1996.  (Submitted to         */
-  /*    Discrete & Computational Geometry.)                                    */
-  /*                                                                           */
-  /*  This file, the paper listed above, and other information are available   */
-  /*    from the Web page http://www.cs.cmu.edu/~quake/robust.html .           */
-  /*                                                                           */
-  /*****************************************************************************/
-
-  /*****************************************************************************/
-  /*                                                                           */
-  /*  Using this code:                                                         */
-  /*                                                                           */
-  /*  First, read the short or long version of the paper (from the Web page    */
-  /*    above).                                                                */
-  /*                                                                           */
-  /*  Be sure to call exactinit() once, before calling any of the arithmetic   */
-  /*    functions or geometric predicates.  Also be sure to turn on the        */
-  /*    optimizer when compiling this file.                                    */
-  /*                                                                           */
-  /*                                                                           */
-  /*  Several geometric predicates are defined.  Their parameters are all      */
-  /*    points.  Each point is an array of two or three floating-point         */
-  /*    numbers.  The geometric predicates, described in the papers, are       */
-  /*                                                                           */
-  /*    orient2d(pa, pb, pc)                                                   */
-  /*    orient2dfast(pa, pb, pc)                                               */
-  /*    orient3d(pa, pb, pc, pd)                                               */
-  /*    orient3dfast(pa, pb, pc, pd)                                           */
-  /*    incircle(pa, pb, pc, pd)                                               */
-  /*    incirclefast(pa, pb, pc, pd)                                           */
-  /*    insphere(pa, pb, pc, pd, pe)                                           */
-  /*    inspherefast(pa, pb, pc, pd, pe)                                       */
-  /*                                                                           */
-  /*  Those with suffix "fast" are approximate, non-robust versions.  Those    */
-  /*    without the suffix are adaptive precision, robust versions.  There     */
-  /*    are also versions with the suffices "exact" and "slow", which are      */
-  /*    non-adaptive, exact arithmetic versions, which I use only for timings  */
-  /*    in my arithmetic papers.                                               */
-  /*                                                                           */
-  /*                                                                           */
-  /*  An expansion is represented by an array of floating-point numbers,       */
-  /*    sorted from smallest to largest magnitude (possibly with interspersed  */
-  /*    zeros).  The length of each expansion is stored as a separate integer, */
-  /*    and each arithmetic function returns an integer which is the length    */
-  /*    of the expansion it created.                                           */
-  /*                                                                           */
-  /*  Several arithmetic functions are defined.  Their parameters are          */
-  /*                                                                           */
-  /*    e, f           Input expansions                                        */
-  /*    elen, flen     Lengths of input expansions (must be >= 1)              */
-  /*    h              Output expansion                                        */
-  /*    b              Input scalar                                            */
-  /*                                                                           */
-  /*  The arithmetic functions are                                             */
-  /*                                                                           */
-  /*    grow_expansion(elen, e, b, h)                                          */
-  /*    grow_expansion_zeroelim(elen, e, b, h)                                 */
-  /*    expansion_sum(elen, e, flen, f, h)                                     */
-  /*    expansion_sum_zeroelim1(elen, e, flen, f, h)                           */
-  /*    expansion_sum_zeroelim2(elen, e, flen, f, h)                           */
-  /*    fast_expansion_sum(elen, e, flen, f, h)                                */
-  /*    fast_expansion_sum_zeroelim(elen, e, flen, f, h)                       */
-  /*    linear_expansion_sum(elen, e, flen, f, h)                              */
-  /*    linear_expansion_sum_zeroelim(elen, e, flen, f, h)                     */
-  /*    scale_expansion(elen, e, b, h)                                         */
-  /*    scale_expansion_zeroelim(elen, e, b, h)                                */
-  /*    compress(elen, e, h)                                                   */
-  /*                                                                           */
-  /*  All of these are described in the long version of the paper; some are    */
-  /*    described in the short version.  All return an integer that is the     */
-  /*    length of h.  Those with suffix _zeroelim perform zero elimination,    */
-  /*    and are recommended over their counterparts.  The procedure            */
-  /*    fast_expansion_sum_zeroelim() (or linear_expansion_sum_zeroelim() on   */
-  /*    processors that do not use the round-to-even tiebreaking rule) is      */
-  /*    recommended over expansion_sum_zeroelim().  Each procedure has a       */
-  /*    little note next to it (in the code below) that tells you whether or   */
-  /*    not the output expansion may be the same array as one of the input     */
-  /*    expansions.                                                            */
-  /*                                                                           */
-  /*                                                                           */
-  /*  If you look around below, you'll also find macros for a bunch of         */
-  /*    simple unrolled arithmetic operations, and procedures for printing     */
-  /*    expansions (commented out because they don't work with all C           */
-  /*    compilers) and for generating rand floating-point numbers whose      */
-  /*    significand bits are all rand.  Most of the macros have undocumented */
-  /*    requirements that certain of their parameters should not be the same   */
-  /*    variable; for safety, better to make sure all the parameters are       */
-  /*    distinct variables.  Feel free to send email to jrs@cs.cmu.edu if you  */
-  /*    have questions.                                                        */
-  /*                                                                           */
-  /*****************************************************************************/
-
-  /* On some machines, the exact arithmetic routines might be defeated by the  */
-  /*   use of internal extended precision floating-point registers.  Sometimes */
-  /*   this problem can be fixed by defining certain values to be volatile,    */
-  /*   thus forcing them to be stored to memory and rounded off.  This isn't   */
-  /*   a great solution, though, as it slows the arithmetic down.              */
-  /*                                                                           */
-  /* To try this out, write "#define INEXACT volatile" below.  Normally,       */
-  /*   however, INEXACT should be defined to be nothing.  ("#define INEXACT".) */
-
-#define INEXACT                          /* Nothing */
-  /* #define INEXACT volatile */
-
-#define REAL double                      /* float or double */
-
-  /* Which of the following two methods of finding the absolute values is      */
-  /*   fastest is compiler-dependent.  A few compilers can inline and optimize */
-  /*   the fabs() call; but most will incur the overhead of a function call,   */
-  /*   which is disastrously slow.  A faster way on IEEE machines might be to  */
-  /*   mask the appropriate bit, but that's difficult to do in C.              */
-
-#define Absolute(a)  ((a) >= 0.0 ? (a) : -(a))
-  /* #define Absolute(a)  fabs(a) */
-
-  /* Many of the operations are broken up into two pieces, a main part that    */
-  /*   performs an approximate operation, and a "tail" that computes the       */
-  /*   roundoff error of that operation.                                       */
-  /*                                                                           */
-  /* The operations Fast_Two_Sum(), Fast_Two_Diff(), Two_Sum(), Two_Diff(),    */
-  /*   Split(), and Two_Product() are all implemented as described in the      */
-  /*   reference.  Each of these macros requires certain variables to be       */
-  /*   defined in the calling routine.  The variables `bvirt', `c', `abig',    */
-  /*   `_i', `_j', `_k', `_l', `_m', and `_n' are declared `INEXACT' because   */
-  /*   they store the result of an operation that may incur roundoff error.    */
-  /*   The input parameter `x' (or the highest numbered `x_' parameter) must   */
-  /*   also be declared `INEXACT'.                                             */
-
-#define Fast_Two_Sum_Tail(a, b, x, y) \
-  bvirt = x - a; \
-  y = b - bvirt
-
-#define Fast_Two_Sum(a, b, x, y) \
-  x = (REAL) (a + b); \
-  Fast_Two_Sum_Tail(a, b, x, y)
-
-#define Two_Sum_Tail(a, b, x, y) \
-  bvirt = (REAL) (x - a); \
-  avirt = x - bvirt; \
-  bround = b - bvirt; \
-  around = a - avirt; \
-  y = around + bround
-
-#define Two_Sum(a, b, x, y) \
-  x = (REAL) (a + b); \
-  Two_Sum_Tail(a, b, x, y)
-
-#define Two_Diff_Tail(a, b, x, y) \
-  bvirt = (REAL) (a - x); \
-  avirt = x + bvirt; \
-  bround = bvirt - b; \
-  around = a - avirt; \
-  y = around + bround
-
-#define Two_Diff(a, b, x, y) \
-  x = (REAL) (a - b); \
-  Two_Diff_Tail(a, b, x, y)
-
-
-  //  c = (REAL) (splitter * a);
-
-#define Split(a, ahi, alo) \
-  c = (REAL) (1.0 * a); \
-  abig = (REAL) (c - a); \
-  ahi = c - abig; \
-  alo = a - ahi
-
-#define Two_Product_Tail(a, b, x, y) \
-  Split(a, ahi, alo); \
-  Split(b, bhi, blo); \
-  err1 = x - (ahi * bhi); \
-  err2 = err1 - (alo * bhi); \
-  err3 = err2 - (ahi * blo); \
-  y = (alo * blo) - err3
-
-#define Two_Product(a, b, x, y) \
-  x = (REAL) (a * b); \
-  Two_Product_Tail(a, b, x, y)
-
-  /* Macros for summing expansions of various fixed lengths.  These are all    */
-  /*   unrolled versions of Expansion_Sum().                                   */
-
-#define Two_One_Diff(a1, a0, b, x2, x1, x0) \
-  Two_Diff(a0, b , i, x0); \
-  Two_Sum( a1, i, x2, x1)
-
-#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0) \
-  Two_One_Diff(a1, a0, b0, j, zero, x0); \
-  Two_One_Diff(j, zero, b1, x3, x2, x1)
-
-
-  //TK: weird globals, never initialised. Just replaced with 1.0 everywhere...
-  //   REAL splitter(1);     /* = 2^ceiling(p / 2) + 1.  Used to split floats in half. */
-  /* A set of coefficients used to calculate maximum roundoff errors.          */
-  //   REAL resulterrbound;
-  //    REAL ccwerrboundA, ccwerrboundB, ccwerrboundC;
-  //   REAL o3derrboundA, o3derrboundB, o3derrboundC;
-  //   REAL iccerrboundA, iccerrboundB, iccerrboundC;
-  //   REAL isperrboundA, isperrboundB, isperrboundC;
-
-  /*****************************************************************************/
-  /*                                                                           */
-  /*  fast_expansion_sum_zeroelim()   Sum two expansions, eliminating zero     */
-  /*                                  components from the output expansion.    */
-  /*                                                                           */
-  /*  Sets h = e + f.  See the long version of my paper for details.           */
-  /*                                                                           */
-  /*  If round-to-even is used (as with IEEE 754), maintains the strongly      */
-  /*  nonoverlapping property.  (That is, if e is strongly nonoverlapping, h   */
-  /*  will be also.)  Does NOT maintain the nonoverlapping or nonadjacent      */
-  /*  properties.                                                              */
-  /*                                                                           */
-  /*****************************************************************************/
-
-  int fast_expansion_sum_zeroelim(const int& elen, REAL* e, const int& flen, REAL* f, REAL* h)
-    /* h cannot be e or f. */
-  {
-    REAL Q;
-    INEXACT REAL Qnew;
-    INEXACT REAL hh;
-    INEXACT REAL bvirt;
-    REAL avirt, bround, around;
-    int eindex, findex, hindex;
-    REAL enow, fnow;
-
-    enow = e[0];
-    fnow = f[0];
-    eindex = findex = 0;
-    if ((fnow > enow) == (fnow > -enow)) {
-      Q = enow;
-      enow = e[++eindex];
-    } else {
-      Q = fnow;
-      fnow = f[++findex];
-    }
-    hindex = 0;
-    if ((eindex < elen) && (findex < flen)) {
-      if ((fnow > enow) == (fnow > -enow)) {
-	Fast_Two_Sum(enow, Q, Qnew, hh);
-	enow = e[++eindex];
-      } else {
-	Fast_Two_Sum(fnow, Q, Qnew, hh);
-	fnow = f[++findex];
-      }
-      Q = Qnew;
-      if (hh != 0.0) {
-	h[hindex++] = hh;
-      }
-      while ((eindex < elen) && (findex < flen)) {
-	if ((fnow > enow) == (fnow > -enow)) {
-	  Two_Sum(Q, enow, Qnew, hh);
-	  enow = e[++eindex];
-	} else {
-	  Two_Sum(Q, fnow, Qnew, hh);
-	  fnow = f[++findex];
-	}
-	Q = Qnew;
-	if (hh != 0.0) {
-	  h[hindex++] = hh;
-	}
-      }
-    }
-    while (eindex < elen) {
-      Two_Sum(Q, enow, Qnew, hh);
-      enow = e[++eindex];
-      Q = Qnew;
-      if (hh != 0.0) {
-	h[hindex++] = hh;
-      }
-    }
-    while (findex < flen) {
-      Two_Sum(Q, fnow, Qnew, hh);
-      fnow = f[++findex];
-      Q = Qnew;
-      if (hh != 0.0) {
-	h[hindex++] = hh;
-      }
-    }
-    if ((Q != 0.0) || (hindex == 0)) {
-      h[hindex++] = Q;
-    }
-    return hindex;
-  }
-
-
-  /*****************************************************************************/
-  /*                                                                           */
-  /*  estimate()   Produce a one-word estimate of an expansion's value.        */
-  /*                                                                           */
-  /*  See either version of my paper for details.                              */
-  /*                                                                           */
-  /*****************************************************************************/
-
-  REAL estimate(const int& elen, REAL* e)
-  {
-    REAL Q;
-    int eindex;
-
-    Q = e[0];
-    for (eindex = 1; eindex < elen; ++eindex) {
-      Q += e[eindex];
-    }
-    return Q;
-  }
-
-  /*****************************************************************************/
-  /*                                                                           */
-  /*  orient2dfast()   Approximate 2D orientation test.  Nonrobust.            */
-  /*  orient2dexact()   Exact 2D orientation test.  Robust.                    */
-  /*  orient2dslow()   Another exact 2D orientation test.  Robust.             */
-  /*  orient2d()   Adaptive exact 2D orientation test.  Robust.                */
-  /*                                                                           */
-  /*               Return a positive value if the points pa, pb, and pc occur  */
-  /*               in counterclockwise order; a negative value if they occur   */
-  /*               in clockwise order; and zero if they are collinear.  The    */
-  /*               result is also a rough approximation of twice the signed    */
-  /*               area of the triangle defined by the three points.           */
-  /*                                                                           */
-  /*  Only the first and last routine should be used; the middle two are for   */
-  /*  timings.                                                                 */
-  /*                                                                           */
-  /*  The last three use exact arithmetic to ensure a correct answer.  The     */
-  /*  result returned is the determinant of a matrix.  In orient2d() only,     */
-  /*  this determinant is computed adaptively, in the sense that exact         */
-  /*  arithmetic is used only to the degree it is needed to ensure that the    */
-  /*  returned value has the correct sign.  Hence, orient2d() is usually quite */
-  /*  fast, but will run more slowly when the input points are collinear or    */
-  /*  nearly so.                                                               */
-  /*                                                                           */
-  /*****************************************************************************/
-
-  REAL orient2dadapt(REAL* pa, REAL* pb, REAL* pc, const REAL& detsum)
-  {
-    INEXACT REAL acx, acy, bcx, bcy;
-    REAL acxtail, acytail, bcxtail, bcytail;
-    INEXACT REAL detleft, detright;
-    REAL detlefttail, detrighttail;
-    REAL det, errbound;
-    REAL B[4], C1[8], C2[12], D[16];
-    INEXACT REAL B3;
-    int C1length, C2length, Dlength;
-    REAL u[4];
-    INEXACT REAL u3;
-    INEXACT REAL s1, t1;
-    REAL s0, t0;
-
-    INEXACT REAL bvirt;
-    REAL avirt, bround, around;
-    INEXACT REAL c;
-    INEXACT REAL abig;
-    REAL ahi, alo, bhi, blo;
-    REAL err1, err2, err3;
-    INEXACT REAL i, j;
-    REAL zero;
-
-    acx = (REAL) (pa[0] - pc[0]);
-    bcx = (REAL) (pb[0] - pc[0]);
-    acy = (REAL) (pa[1] - pc[1]);
-    bcy = (REAL) (pb[1] - pc[1]);
-
-    Two_Product(acx, bcy, detleft, detlefttail);
-    Two_Product(acy, bcx, detright, detrighttail);
-
-    Two_Two_Diff(detleft, detlefttail, detright, detrighttail,
-		 B3, B[2], B[1], B[0]);
-    B[3] = B3;
-
-    det = estimate(4, B);
-    //    errbound = ccwerrboundB * detsum;
-    errbound = detsum;
-    if ((det >= errbound) || (-det >= errbound)) {
-      return det;
-    }
-
-    Two_Diff_Tail(pa[0], pc[0], acx, acxtail);
-    Two_Diff_Tail(pb[0], pc[0], bcx, bcxtail);
-    Two_Diff_Tail(pa[1], pc[1], acy, acytail);
-    Two_Diff_Tail(pb[1], pc[1], bcy, bcytail);
-
-    if ((acxtail == 0.0) && (acytail == 0.0)
-	&& (bcxtail == 0.0) && (bcytail == 0.0)) {
-      return det;
-    }
-
-    //    errbound = ccwerrboundC * detsum + resulterrbound * Absolute(det);
-    errbound = detsum + Absolute(det);
-    det += (acx * bcytail + bcy * acxtail)
-      - (acy * bcxtail + bcx * acytail);
-    if ((det >= errbound) || (-det >= errbound)) {
-      return det;
-    }
-
-    Two_Product(acxtail, bcy, s1, s0);
-    Two_Product(acytail, bcx, t1, t0);
-    Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
-    u[3] = u3;
-    C1length = fast_expansion_sum_zeroelim(4, B, 4, u, C1);
-
-    Two_Product(acx, bcytail, s1, s0);
-    Two_Product(acy, bcxtail, t1, t0);
-    Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
-    u[3] = u3;
-    C2length = fast_expansion_sum_zeroelim(C1length, C1, 4, u, C2);
-
-    Two_Product(acxtail, bcytail, s1, s0);
-    Two_Product(acytail, bcxtail, t1, t0);
-    Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
-    u[3] = u3;
-    Dlength = fast_expansion_sum_zeroelim(C2length, C2, 4, u, D);
-
-    return(D[Dlength - 1]);
-  }
-
-  REAL orient2d(REAL* pa, REAL* pb, REAL* pc)
-  {
-    REAL detleft, detright, det;
-    REAL detsum, errbound;
-
-    detleft = (pa[0] - pc[0]) * (pb[1] - pc[1]);
-    detright = (pa[1] - pc[1]) * (pb[0] - pc[0]);
-    det = detleft - detright;
-
-    if (detleft > 0.0) {
-      if (detright <= 0.0) {
-	return det;
-      } else {
-	detsum = detleft + detright;
-      }
-    } else if (detleft < 0.0) {
-      if (detright >= 0.0) {
-	return det;
-      } else {
-	detsum = -detleft - detright;
-      }
-    } else {
-      return det;
-    }
-
-    //    errbound = ccwerrboundA * detsum;
-    errbound = detsum;
-    if ((det >= errbound) || (-det >= errbound)) {
-      return det;
-    }
-
-    return orient2dadapt(pa, pb, pc, detsum);
-  }
-
-
-  ////////////////////////////////////////////////
-
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  //////////////////////////////////// splay.h ///////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-
-  //-------------------------------------------------------------------------/
-  //Copyright (C) 2003, 2004, 2005, ALL RIGHTS RESERVED.
-  //Centre for Sys. Eng. & App. Mech.           FEMAGSoft S.A.
-  //Universite Cathalique de Louvain            4, Avenue Albert Einstein
-  //Batiment Euler, Avenue Georges Lemaitre, 4  B-1348 Louvain-la-Neuve
-  //B-1348, Louvain-la-Neuve                    Belgium
-  //Belgium
-  //-------------------------------------------------------------------------/
-  //
-  //Name:         splay.h (self-adjusting balanced binary search tree)
-  //Purpose:      declaration and implentation of splay tree class for fast
-  //              binary searching
-  //Author:       Liang, Wu (wu@mema.ucl.ac.be, wuliang@femagsoft.com)
-  //Created:      03/2002
-  //Modified:     2003, 2004, 2005
-  //-------------------------------------------------------------------------/
-
-  template <class T, class KeyType>
-  class SplayTree;
-
-  template <class T, class KeyType>
-  class BTreeNode
-  {
-  public:
-    friend class SplayTree<T, KeyType>;
-    BTreeNode( ) : m_data(), m_left( nullptr ), m_right( nullptr ), m_visited(false) { }
-    BTreeNode( const T & data, BTreeNode *lt, BTreeNode *rt )
-      : m_data(data),m_left( lt ), m_right( rt ), m_visited(false) { }
-
-    T& data()                     { return m_data; }
-    BTreeNode* Left()             { return m_left; }
-    BTreeNode* Right()            { return m_right; }
-    void SetVisited(const bool& visited) { m_visited=visited; }
-    bool GetVisited()             { return m_visited; }
-    KeyType keyValue()            { return m_data->keyValue(); }
-
-  private:
-    T          m_data;
-    BTreeNode *m_left;
-    BTreeNode *m_right;
-    bool      m_visited;
-
-  };
-
-
-  template <class T, class KeyType>
-  class SplayTree
-  {
-  public:
-    explicit SplayTree( ):m_root(nullptr),m_size(0) { }
-    SplayTree( const SplayTree & rhs );
-    ~SplayTree( );
-
-    void MakeEmpty( );
-    bool IsEmpty( ) const;
-    long int Size() { return m_size; }
-    BTreeNode<T, KeyType>* Root() { 
-      // cppcheck false positive:
-      // cppcheck-suppress CastIntegerToAddressAtReturn
-      return m_root;
-    }
-
-    void Find( const KeyType& keys, BTreeNode<T, KeyType>* & res);
-    void FindMin( BTreeNode<T, KeyType>* &min );
-    void FindMax( BTreeNode<T, KeyType>* &max );
-    // We only use this function for polygon Triangulation to find the direct
-    // left edge of an event vertex;
-    void FindMaxSmallerThan( const KeyType& keys, BTreeNode<T, KeyType>* &res);
-
-    void Insert( const T & x );
-    void Delete( const KeyType& keys);
-    void Delete( const KeyType& keys, BTreeNode<T, KeyType>* &res);
-    void DeleteMin(BTreeNode<T, KeyType>* &min);
-    void DeleteMax(BTreeNode<T, KeyType>* &max);
-
-    const SplayTree & operator=( const SplayTree & rhs );
-    void PreOrder( void(*Visit)(BTreeNode<T,KeyType> *u) )
-    { PreOrder(Visit, m_root); }
-    void InOrder( void(*Visit)(BTreeNode<T,KeyType> *u) )
-    { InOrder(Visit, m_root); }
-
-    void InOrder( void(*Visit)(BTreeNode<T,KeyType>*u, double y), double y)
-    { InOrder(Visit, m_root, y); }
-
-    void PostOrder( void(*Visit)(BTreeNode<T,KeyType> *u) )
-    { PostOrder(Visit, m_root); }
-
-    int Height( ) const { return Height(m_root); }  //height of m_root
-    int Height(BTreeNode<T, KeyType> *t) const;    //Height of subtree t;
-    BTreeNode<T, KeyType>* Left(BTreeNode<T, KeyType> *node) { return node->m_left; }
-    BTreeNode<T, KeyType>* Right(BTreeNode<T, KeyType> *node) { return node->m_right; }
-
-  private:
-    BTreeNode<T, KeyType> *m_root;
-    long int              m_size;
-
-    void reclaimMemory( BTreeNode<T, KeyType> * t ) const;
-    BTreeNode<T, KeyType> * clone( BTreeNode<T, KeyType> *t ) const;
-
-    //Transverse
-    void PreOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t);
-    void InOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t);
-    void PostOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t);
-
-    void InOrder( void(*Visit)(BTreeNode<T, KeyType>*, double y),
-		  BTreeNode<T, KeyType> *t, double y);
-
-
-
-    // Tree manipulations
-    void rotateWithLeftChild( BTreeNode<T, KeyType> * & k2 ) const;
-    void rotateWithRightChild( BTreeNode<T, KeyType> * & k1 ) const;
-    void splay( const KeyType& keys, BTreeNode<T, KeyType> * & t ) const;
-  };
-
-  //----------------------------------------------------------------------
-  //Constructor;
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  SplayTree<T, KeyType>::SplayTree( const SplayTree<T, KeyType> & rhs )
-  {
-    *this = rhs;
-  }
-
-  //-----------------------------------------------------------------------
-  //Destructor.
-  //-----------------------------------------------------------------------
-  template <class T, class KeyType>
-  SplayTree<T, KeyType>::~SplayTree( )
-  {
-    MakeEmpty( );
-  }
-
-  //------------------------------------------------------------------------
-  //Insert x into the tree.
-  //------------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::Insert( const T & x )
-  {
-
-    BTreeNode<T, KeyType> *newNode= new BTreeNode<T, KeyType>;
-    newNode->m_data=x;
-
-    if( m_root == nullptr )
-      {
-	newNode->m_left = newNode->m_right = nullptr;
-	m_root = newNode; ++m_size;
-      }
-    else
-      {
-	KeyType keys=x->keyValue();
-	splay( keys, m_root );
-	KeyType rootk=m_root->keyValue();
-	if( keys < rootk )
-	  {
-	    newNode->m_left = m_root->m_left;
-	    newNode->m_right = m_root;
-	    m_root->m_left = nullptr;
-	    m_root = newNode;
-	    ++m_size;
-	  }
-        else if( keys > rootk )
-	  {
-
-	    newNode->m_right = m_root->m_right;
-	    newNode->m_left = m_root;
-	    m_root->m_right = nullptr;
-	    m_root = newNode;
-	    ++m_size;
-	  }
-        else
-	  {
-	    //slight incresed the keyvalue to avoid duplicated keys
-	    x->increaseKeyValue(1.0e-10);
-	    Insert(x);
-	    delete newNode;
-	  }
-      }
-  }
-
-  //---------------------------------------------------------------------
-  //Remove the node with the keys from the tree, and retrieve the result
-  //---------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::Delete( const KeyType& keys, BTreeNode<T, KeyType>* &res)
-  {
-    BTreeNode<T, KeyType> *newTree;
-
-    splay( keys, m_root );
-    if( m_root->keyValue() != keys ) { res=nullptr; return; } // Item not found; do nothing
-
-    res = m_root;
-
-    if( m_root->m_left == nullptr )
-      newTree = m_root->m_right;
-    else
-      {
-	// Find the maximum in the m_left subtree
-	// Splay it to the m_root; and then attach m_right child
-	newTree = m_root->m_left;
-	splay( keys, newTree );
-	newTree->m_right = m_root->m_right;
-      }
-
-    m_root = newTree;
-    m_size--;
-  }
-
-  //---------------------------------------------------------------------
-  //Remove the node with the keys from the tree.
-  //---------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::Delete( const KeyType& keys)
-  {
-    BTreeNode<T, KeyType> *newTree;
-
-    splay( keys, m_root );
-    KeyType rootk=m_root->keyValue();
-    if( rootk != keys ) { return; } // Item not found; do nothing
-
-    if( m_root->m_left == nullptr ) newTree = m_root->m_right;
-    else
-      {
-	// Find the maximum in the m_left subtree
-	// Splay it to the m_root; and then attach m_right child
-	newTree = m_root->m_left;
-	splay( keys, newTree );
-	newTree->m_right = m_root->m_right;
-      }
-
-    delete m_root;
-    m_root = newTree;
-    m_size--;
-  }
-
-
-
-  //---------------------------------------------------------------------
-  //Find and Delete the node with min keys from the tree;
-  //---------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::DeleteMin(BTreeNode<T, KeyType>* &min)
-  {
-    if( IsEmpty( ) )  { min=nullptr; return; }
-
-    double keys=-1.0e30;
-    splay( keys, m_root );
-
-    min = m_root;
-
-    BTreeNode<T, KeyType> *newTree;
-    if( m_root->m_left == nullptr ) newTree = m_root->m_right;
-    else
-      {
-	newTree = m_root->m_left;
-	splay( keys, newTree );
-	newTree->m_right = m_root->m_right;
-      }
-
-    m_size--;
-    m_root = newTree;
-
-  }
-
-  //----------------------------------------------------------------------
-  //Find and Delete the node with max keys from the tree;
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::DeleteMax(BTreeNode<T, KeyType>* &max)
-  {
-    if( IsEmpty( ) )  { max=nullptr; return; }
-
-    double keys=1.0e30;
-    splay( keys, m_root );
-
-    max = m_root;
-
-    BTreeNode<T, KeyType> *newTree;
-    if( m_root->m_left == nullptr ) newTree = m_root->m_right;
-    else
-      {
-	newTree = m_root->m_left;
-	splay( keys, newTree );
-	newTree->m_right = m_root->m_right;
-      }
-    m_size--;
-    m_root = newTree;
-  }
-
-
-  //----------------------------------------------------------------------
-  //Find the smallest item in the tree, but won't delete it from the tree.
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::FindMin(BTreeNode<T, KeyType>* & min )
-  {
-    if( IsEmpty( ) )  { min=nullptr; return; }
-    BTreeNode<T, KeyType> *ptr = m_root;
-
-    while( ptr->m_left != nullptr ) ptr = ptr->m_left;
-    splay( ptr->keyValue(), m_root );
-    min = ptr;
-  }
-
-  //----------------------------------------------------------------------
-  //Find the largest item in the tree. but won't delete it from the tree.
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::FindMax(BTreeNode<T, KeyType>* & max)
-  {
-    if( IsEmpty( ) )   { max=nullptr; return; }
-
-    BTreeNode<T, KeyType> *ptr = m_root;
-    while( ptr->m_right != nullptr ) ptr = ptr->m_right;
-    splay( ptr->keyValue(), m_root );
-    max =  ptr;
-  }
-
-  //--------------------------------------------------------------------
-  //Find the node with the keys in the tree.
-  //res==nullptr if it donesn't exist in the tree;
-  //--------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::Find( const KeyType& keys, BTreeNode<T, KeyType>* & res)
-  {
-    if( IsEmpty( ) ) { res=nullptr; return; }
-    splay( keys, m_root );
-    if( m_root->keyValue() != keys ) { res=nullptr; return; }
-    else res = m_root;
-  }
-
-  //--------------------------------------------------------------------
-  //Find the maximum node smaller than or equal to the given key.
-  //This function specially designed for polygon Triangulation to
-  //find the direct left edge at event vertex;
-  //--------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::FindMaxSmallerThan( const KeyType& keys, BTreeNode<T, KeyType>* &res)
-  {
-    if( IsEmpty( ) ) { res=nullptr; return; }
-    splay( keys, m_root );
-
-    if( m_root->data()->keyValue() < keys) res=m_root;
-    else if(m_root->m_left)
-      {
-	res=m_root->m_left;
-	while(res->m_right) res=res->m_right;
-      }
-    else
-      {
-	assert(false);
-      }
-  }
-
-  //--------------------------------------------------------------------
-  //Make the tree logically empty.
-  //--------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::MakeEmpty( )
-  {
-    BTreeNode<T, KeyType>* ptr;
-    while( !IsEmpty( ) )
-      {
-	DeleteMax(ptr);
-	delete ptr;
-      }
-  }
-
-  //---------------------------------------------------------------------
-  //Test if the tree is logically empty.
-  //---------------------------------------------------------------------
-  template <class T, class KeyType>
-  bool SplayTree<T, KeyType>::IsEmpty( ) const
-  {
-    return m_root == nullptr;
-  }
-
-  //----------------------------------------------------------------------
-  //copy overload operator.
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  const SplayTree<T, KeyType> & SplayTree<T, KeyType>::operator=( const SplayTree<T, KeyType> & rhs )
-  {
-    if( this != &rhs )
-      {
-	MakeEmpty( );
-	m_root = clone( rhs.m_root );
-      }
-
-    return *this;
-  }
-
-  //-----------------------------------------------------------------------
-  //Internal method to perform a top-down splay.
-  //x is the key of target node to splay around.
-  //t is the m_root of the subtree to splay.
-  //-----------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::splay( const KeyType& keys, BTreeNode<T, KeyType> * & t ) const
-  {
-    BTreeNode<T, KeyType> *leftTreeMax, *rightTreeMin;
-    //    static BTreeNode<T, KeyType> header;
-    BTreeNode<T, KeyType> header;//TK: Removed static keyword. Rather a bit slower than thread problems...
-
-    header.m_left = header.m_right = nullptr;
-    leftTreeMax = rightTreeMin = &header;
-
-    for( ; ; )
-      {
-	KeyType rkey=t->keyValue();
-	if( keys < rkey )
-	  {
-	    if(t->m_left == nullptr) break;
-	    if( keys < t->m_left->keyValue() ) rotateWithLeftChild( t );
-	    if( t->m_left == nullptr ) break;
-
-	    // Link Right
-	    rightTreeMin->m_left = t;
-	    rightTreeMin = t;
-	    t = t->m_left;
-	  }
-	else if( keys > rkey )
-	  {
-	    if( t->m_right == nullptr ) break;
-	    if( keys > t->m_right->keyValue() ) rotateWithRightChild( t );
-	    if( t->m_right == nullptr ) break;
-
-	    // Link Left
-	    leftTreeMax->m_right = t;
-	    leftTreeMax = t;
-	    t = t->m_right;
-	  }
-	else  break;
-      }
-
-    leftTreeMax->m_right = t->m_left;
-    rightTreeMin->m_left = t->m_right;
-    t->m_left = header.m_right;
-    t->m_right = header.m_left;
-
-  }
-
-  //--------------------------------------------------------------------
-  //Rotate binary tree node with m_left child.
-  //--------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::rotateWithLeftChild( BTreeNode<T, KeyType> * & k2 ) const
-  {
-    BTreeNode<T, KeyType> *k1 = k2->m_left;
-    k2->m_left = k1->m_right;
-    k1->m_right = k2;
-    k2 = k1;
-  }
-
-  //---------------------------------------------------------------------
-  //Rotate binary tree node with m_right child.
-  //---------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::rotateWithRightChild( BTreeNode<T, KeyType> * & k1 ) const
-  {
-    BTreeNode<T, KeyType> *k2 = k1->m_right;
-    k1->m_right = k2->m_left;
-    k2->m_left = k1;
-    k1 = k2;
-  }
-
-  //----------------------------------------------------------------------
-  //Internal method to reclaim internal nodes in subtree t.
-  //WARNING: This is prone to running out of stack space.
-  //----------------------------------------------------------------------
-  template <class T, class KeyType>
-  void SplayTree<T, KeyType>::reclaimMemory( BTreeNode<T, KeyType> * t ) const
-  {
-    if( t != t->m_left )
-      {
-	reclaimMemory( t->m_left );
-	reclaimMemory( t->m_right );
-	delete t;
-      }
-  }
-
-  //-----------------------------------------------------------------------
-  //Internal method to clone subtree.
-  //WARNING: This is prone to running out of stack space.
-  //-----------------------------------------------------------------------
-  template <class T, class KeyType>
-  BTreeNode<T, KeyType> * SplayTree<T, KeyType>::clone( BTreeNode<T, KeyType> * t ) const
-  {
-    if( t == t->m_left )  // Cannot test against nullptrNode!!!
-      return nullptr;
-    else
-      return new BTreeNode<T, KeyType>( t->m_data, clone( t->m_left ), clone( t->m_right ) );
-  }
-
-  //-----------------------------------------------------------------------
-  //Tranverse the tree by pre-order method;
-  //-----------------------------------------------------------------------
-  template<class T, class KeyType>
-  void SplayTree<T, KeyType>::PreOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t)
-  {
-    if(t!=nullptr)
-      {
-	Visit(t);
-	PreOrder(Visit,t->m_left);
-	PreOrder(Visit,t->m_right);
-      }
-
-  }
-
-  //-----------------------------------------------------------------------
-  //Tranverse the tree by in-order method;
-  //-----------------------------------------------------------------------
-  template<class T, class KeyType>
-  void SplayTree<T, KeyType>::InOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t)
-  {
-    if(t!=nullptr)
-      {
-        InOrder(Visit,t->m_left);
-        Visit(t);
-        InOrder(Visit,t->m_right);
-      }
-  }
-
-
-  //-----------------------------------------------------------------------
-  //Tranverse the tree by in-order method;
-  //-----------------------------------------------------------------------
-  template<class T, class KeyType>
-  void SplayTree<T, KeyType>::InOrder( void(*Visit)(BTreeNode<T, KeyType>*u, double y)
-				       , BTreeNode<T, KeyType> *t, double y)
-  {
-    if(t!=nullptr)
-      {
-        InOrder(Visit,t->m_left, y);
-        Visit(t, y);
-        InOrder(Visit,t->m_right, y);
-      }
-  }
-
-
-
-  //-----------------------------------------------------------------------
-  //Tranverse the tree by post-order method;
-  //-----------------------------------------------------------------------
-  template<class T, class KeyType>
-  void SplayTree<T, KeyType>::PostOrder( void(*Visit)(BTreeNode<T, KeyType> *u), BTreeNode<T, KeyType> *t)
-  {
-    if(t!=nullptr)
-      {
-        PostOrder(Visit,t->m_left);
-        PostOrder(Visit,t->m_right);
-        Visit(t);
-      }
-  }
-
-  //-----------------------------------------------------------------------
-  //return the height of subtree
-  //-----------------------------------------------------------------------
-  template<class T, class KeyType>
-  int SplayTree<T, KeyType>::Height(BTreeNode<T, KeyType> *subtree) const
-  {
-    if(subtree==nullptr) return 0;
-    int lh=Height(subtree->m_left);
-    int rh=Height(subtree->m_right);
-
-    return (lh>rh)?(++lh):(++rh);
-  }
-
-
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////// geometry.h //////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-
-  //-------------------------------------------------------------------------/
-  //Copyright (C) 2003, 2004, 2005, ALL RIGHTS RESERVED.
-  //Centre for Sys. Eng. & App. Mech.           FEMAGSoft S.A.
-  //Universite Cathalique de Louvain            4, Avenue Albert Einstein
-  //Batiment Euler, Avenue Georges Lemaitre, 4  B-1348 Louvain-la-Neuve
-  //B-1348, Louvain-la-Neuve                    Belgium
-  //Belgium
-  //-------------------------------------------------------------------------/
-  //
-  //Name:         geometry.h (all geometry primitives related polygon triang-
-  //              ulation by sweep line algorithm)
-  //Author:       Liang, Wu (wu@mema.ucl.ac.be, wuliang@femagsoft.com)
-  //Created:      03/2001
-  //Modified:     10/2005. Modified and simplified only for polygon triangul-
-  //              ation purpose.
-  //-------------------------------------------------------------------------/
-
-
-  //base class for points;
-  class Pointbase
-  {
-  public:
-    //constructors and destructor
-    Pointbase(): id(0), x(0.), y(0.), type(UNKNOWN), left(false){}
-    Pointbase(const Pointbase& pb);
-
-    Pointbase(const double& xx, const double& yy)
-      :id(0), x(xx), y(yy), type(UNKNOWN), left(false) { }
-
-    Pointbase(const int& idd, const double& xx, const double& yy)
-      :id(idd), x(xx), y(yy), type(UNKNOWN), left(false) { }
-
-    Pointbase(const double& xx, const double& yy, const Type& ttype)
-      :id(0), x(xx), y(yy), type(ttype), left(false) { }
-
-    Pointbase(const int& idd, const double& xx, const double& yy, const Type& ttype)
-      :id(idd),x(xx), y(yy), type(ttype), left(false) { }
-
-    //operator overloading
-    friend  bool operator==(const Pointbase&, const Pointbase&);
-    friend  bool operator>(const Pointbase&, const Pointbase&);
-    friend  bool operator<(const Pointbase&, const Pointbase&);
-    friend  bool operator!=(const Pointbase&, const Pointbase&);
-
-    //public data
-    unsigned int    id;              //id of point;
-    double          x, y;            //coordinates;
-    Type            type;            //type of points;
-    bool            left;            //left chain or not;
-
-    Pointbase & operator= ( const Pointbase & pb )
-    {
-      if (this != &pb) {
-        this->id=pb.id;
-        this->x=pb.x;
-        this->y=pb.y;
-        this->type=pb.type;
-        this->left=pb.left;
-      }
-      return *this;
-    }
-  };
-
-  //base class for polygon boundary
-  //Linebase class is a directed line segment with start/end point
-  class Linebase
-  {
-  public:
-    //constructors and destructor
-    Linebase();
-    Linebase(Pointbase* ep1, Pointbase* ep2, const Type& type,long int & l_id);
-    Linebase(const Linebase& line);
-    ~Linebase() {};
-
-    unsigned int id() const { return m_id; }
-
-    //two end points
-    Pointbase*   endPoint(const int& i) const { return m_endp[i]; }
-    Type         type() const { return m_type; }
-    double       keyValue() const { return m_key; }
-    void         setKeyValue(const double& y);
-    //slightly increased the key to avoid duplicated key for searching tree.
-    void         increaseKeyValue(const double& diff) { m_key+=diff; }
-    //reverse a directed line segment; reversable only for inserted diagonals
-    void         reverse();
-
-    //set and return helper of a directed line segment;
-    void         setHelper(const unsigned int& i) { m_helper=i; }
-    unsigned int helper() { return m_helper; }
-
-  protected:
-    unsigned int m_id;           //id of a line segment;
-    Pointbase*   m_endp[2];      //two end points;
-
-    Type         m_type;         //type of a line segement, input/insert
-    double       m_key;          //key of a line segment for splay tree searching
-    unsigned int m_helper;       //helper of a line segemnt
-  public:
-    Linebase & operator= ( const Linebase & line )
-    {
-      if (this != &line) {
-        this->m_id=line.m_id;
-        this->m_endp[0]=line.m_endp[0];
-        this->m_endp[1]=line.m_endp[1];
-        this->m_type=line.m_type;
-        this->m_key=line.m_key;
-        this->m_helper=line.m_helper;
-      }
-      return *this;
-    }
-  };
-
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////// geometry.cc //////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////////////////////
-
-  //-------------------------------------------------------------------------/
-  //Copyright (C) 2003, 2004, 2005, ALL RIGHTS RESERVED.
-  //Centre for Sys. Eng. & App. Mech.           FEMAGSoft S.A.
-  //Universite Cathalique de Louvain            4, Avenue Albert Einstein
-  //Batiment Euler, Avenue Georges Lemaitre, 4  B-1348 Louvain-la-Neuve
-  //B-1348, Louvain-la-Neuve                    Belgium
-  //Belgium
-  //-------------------------------------------------------------------------/
-  //
-  //Name:         geometry.cc (all geometry primitive implementations related
-  //              to polygon triangulation by sweep line algorithm)
-  //Author:       Liang, Wu (wu@mema.ucl.ac.be, wuliang@femagsoft.com)
-  //Created:      03/2001
-  //Modified:     10/2005. Modified and simplified only for polygon triangul-
-  //              ation purpose.
-  //-------------------------------------------------------------------------/
-
-
-  //Jonathan schewchuk's exact arithmetic code, see predicates.cc for detais;
-  extern double orient2d(double* pa, double* pb, double* pc);
-
-  //----------------------------------------------------------------------------
-  //square of the distance of two points;
-  //----------------------------------------------------------------------------
-  double dist_sqr(const Pointbase& sp, const Pointbase& ep)
-  {
-    return sqr(sp.x-ep.x)+sqr(sp.y-ep.y);
-  }
-
-  //----------------------------------------------------------------------------
-  //square of the distance of two points;
-  //----------------------------------------------------------------------------
-  double dist_sqr(double *pa, double *pb)
-  {
-    return sqr(pa[0]-pb[0])+sqr(pa[1]-pb[1]);
-  }
-
-  void UpdateKey(BTreeNode<Linebase*,double>* node, double y)
-  {
-    node->data()->setKeyValue(y);
-  }
-
-  //----------------------------------------------------------------------------
-  //copy constructor
-  //----------------------------------------------------------------------------
-  Pointbase::Pointbase(const Pointbase& pb)
-  {
-    this->id=pb.id;
-    this->x=pb.x;
-    this->y=pb.y;
-    this->type=pb.type;
-    this->left=pb.left;
-  }
-
-  //----------------------------------------------------------------------------
-  //operator ( ==, >, < and != ) overloading for pointbase class
-  //----------------------------------------------------------------------------
-  bool operator==(const Pointbase& pa, const Pointbase& pb)
-  {
-    return (pa.x==pb.x && pa.y==pb.y);
-  }
-
-  //----------------------------------------------------------------------------
-  bool operator>(const Pointbase& pa, const Pointbase& pb)
-  {
-    return( (pa.y > pb.y) || ( (pa.y==pb.y) && (pa.x < pb.x)) );
-  }
-
-  //----------------------------------------------------------------------------
-  bool operator<(const Pointbase& pa, const Pointbase& pb)
-  {
-    return( (pa.y < pb.y) || ( (pa.y==pb.y) && (pa.x > pb.x)) );
-  }
-
-  //----------------------------------------------------------------------------
-  bool operator!=(const Pointbase& pa, const Pointbase& pb)
-  {
-    return !(pa.x==pb.x && pa.y==pb.y);
-  }
-
-  //----------------------------------------------------------------------------
-  //Linebase construct
-  //----------------------------------------------------------------------------
-  Linebase::Linebase():m_type(UNKNOWN),m_key(0.),m_helper(0)
-  {
-    for(int i=0; i<2; ++i) m_endp[i]=0;
-    m_id=0;
-  }
-
-  //-----------------------------------------------------------------------------
-  //Linebase construct
-  //-----------------------------------------------------------------------------
-  Linebase::Linebase(Pointbase* sp, Pointbase* ep, const Type& type, long int & l_id):m_type(type),m_key(0.),m_helper(0)
-  {
-    m_endp[0]=sp;
-    m_endp[1]=ep;
-    m_id=++l_id;
-  }
-
-  //----------------------------------------------------------------------------
-  //copy constructor
-  //----------------------------------------------------------------------------
-  Linebase::Linebase(const Linebase& line)
-  {
-    this->m_id=line.m_id;
-    this->m_endp[0]=line.m_endp[0];
-    this->m_endp[1]=line.m_endp[1];
-    this->m_type=line.m_type;
-    this->m_key=line.m_key;
-    this->m_helper=line.m_helper;
-  }
-
-
-  //----------------------------------------------------------------------------
-  //reverse a directed line segment, reverseable only for insert diagonals
-  //----------------------------------------------------------------------------
-  void Linebase::reverse()
-  {
-    assert(m_type==INSERT);
-    Pointbase* tmp=m_endp[0];
-    m_endp[0]=m_endp[1];
-    m_endp[1]=tmp;
-  }
-
-  void Linebase::setKeyValue(const double& y)
-  {
-    if( m_endp[1]->y==m_endp[0]->y )
-      m_key=m_endp[0]->x < m_endp[1]->x ? m_endp[0]->x:m_endp[1]->x;
-    else    m_key=( y - m_endp[0]->y ) * ( m_endp[1]->x - m_endp[0]->x ) / (m_endp[1]->y - m_endp[0]->y ) + m_endp[0]->x;
-  }
-
-}//end namespace internal_poltrig
-
-class PolygonTriangulator::Polygon
-{
-public:
-  //constructor and destructor
-  Polygon(const std::vector<double>& x,const std::vector<double>& y);
-  ~Polygon();
-
-  // main member function for polygon triangulation;
-  void         partition2Monotone();
-  void         searchMonotones();
-  void         triangulation();
-
-  //return all triangles
-  const Triangles*    triangles() { return &m_triangles; }
-
-  internal_poltrig::PointbaseMap& points()    { return m_points; }
-  internal_poltrig::LineMap&      edges()     { return m_edges; }
-
-  //private member functions.
-private:
-  long int m_l_id;//previous a global, but that gives mem. crashes. Must be reinitted for every polygon.
-
-  void set_contour (const std::vector<double>& x,const std::vector<double>& y);
-  void         initializate();
-
-  //prev or next point/edge id for a given ith point/edge;
-  unsigned int prev(const unsigned int& i);
-  unsigned int next(const unsigned int& i);
-
-  //handle event vertext according to vertex type;
-  void         handleStartVertex(const unsigned int& );
-  void         handleEndVertex(const unsigned int& );
-  void         handleSplitVertex(const unsigned int& );
-  void         handleMergeVertex(const unsigned int& );
-  void         handleRegularVertexUp(const unsigned int& );
-  void         handleRegularVertexDown(const unsigned int& );
-
-  //add diagonal between two vertices;
-  void         addDiagonal(const unsigned int&  i, const unsigned int&  j);
-
-
-  //angle ABC for three given points, for monotone polygon searching purpose;
-  double       angleCosb(double *A, double *B, double *C);
-  //find the next edge, for monotone polygon searching purpose;
-  unsigned int selectNextEdge(internal_poltrig::Linebase* edge);
-
-  //triangulate a monotone polygon piece;
-  void         triangulateMonotone(internal_poltrig::Monopoly& mpoly);
-
-  //private data memebers
-  internal_poltrig::PQueue      m_qpoints;                            //priority queue for event points
-  internal_poltrig::EdgeBST     m_edgebst;                            //edge binary searching tree (splaytree)
-  internal_poltrig::Monopolys   m_mpolys;                             //all monotone polygon piece list;
-  Triangles   m_triangles;                          //all triangle list;
-
-  //data for monotone piece searching purpose;
-  internal_poltrig::AdjEdgeMap  m_startAdjEdgeMap;                    //all edges starting from given points (map)
-  internal_poltrig::LineMap     m_diagonals;                          //added diagonals to partition polygon to
-  //monotont pieces, not all diagonals of
-
-  void init_vertices_and_lines();
-  unsigned int            m_ncontours;   //number of contours
-  std::vector<unsigned int>    m_nVertices;   //
-  internal_poltrig::PointbaseMap            m_points;      //all vertices
-  internal_poltrig::LineMap                 m_edges;       //all edges
-  double                  m_xmin,m_xmax, m_ymin,m_ymax; //boundary box for polygon
-
-};
-
-
-void PolygonTriangulator::Polygon::init_vertices_and_lines()
-{
-  int sid,eid;
-  int num=0;
-
-  internal_poltrig::Type type;
-
-  for(unsigned j=0; j<m_ncontours; ++j)
-    {
-      for(unsigned i=1; i<=m_nVertices[j]; ++i)//fixme: 0-based?
-	{
-          sid=num+i;
-          eid=(i==m_nVertices[j])?num+1:num+i+1;
-	  type = internal_poltrig::INPUT;
-          internal_poltrig::Linebase* line=new internal_poltrig::Linebase(m_points[sid], m_points[eid], type,m_l_id);
-	  m_edges[m_l_id]=line;
-        }
-      num+=m_nVertices[j];
-    }
-
-  int sum=0;
-  for(unsigned int i=0; i<m_ncontours; ++i)
-    {
-      sum+= m_nVertices[i];
-      m_nVertices[i]=sum;
-    }
-
-}
-
-
-//----------------------------------------------------------------------------
-//get input
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::set_contour(const std::vector<double>& x,const std::vector<double>& y)
-{
-  assert(x.size()==y.size());
-
-  m_nVertices.push_back( x.size() );
-  unsigned int i = m_points.size()+1/*1*/;//fixme: get rid of the +1 ?
-  double xx,yy;
-  internal_poltrig::Type type;
-  for (unsigned int j = 0; j < m_nVertices[m_ncontours]; ++j, ++i)
-    {
-      xx=x.at(j);
-      yy=y.at(j);
-      type=internal_poltrig::INPUT;
-      internal_poltrig::Pointbase* point=new internal_poltrig::Pointbase(i,xx,yy,type);
-      if(xx > m_xmax ) m_xmax=xx;
-      if(xx < m_xmin ) m_xmin=xx;
-      if(yy > m_ymax ) m_ymax=yy;
-      if(yy < m_ymin ) m_ymin=yy;
-      m_points[i]=point;
-    }
-
-  ++m_ncontours;
-
-}
-
-
-
-
-//----------------------------------------------------------------------------
-//polygon class constructor
-//----------------------------------------------------------------------------
-PolygonTriangulator::Polygon::Polygon(const std::vector<double>& x,const std::vector<double>& y)
-{
-  m_l_id = 0;
-  m_ncontours=0;
-
-  m_xmin = m_ymin = std::numeric_limits<double>::infinity();
-  m_xmax = m_ymax = - std::numeric_limits<double>::infinity();
-
-
-  set_contour(x,y);
-  init_vertices_and_lines();
-  initializate();
-}
-
-//----------------------------------------------------------------------------
-//polygon destructor
-//----------------------------------------------------------------------------
-PolygonTriangulator::Polygon::~Polygon()
-{
-  //clear all dynamic allocated memory
-  internal_poltrig::PointbaseMap::iterator itp=m_points.begin();
-  for(; itp!=m_points.end(); ++itp)
-    {
-      delete itp->second;
-    }
-
-  internal_poltrig::LineMap::iterator itl=m_edges.begin();
-  for(; itl!=m_edges.end(); ++itl)
-    {
-      delete itl->second;
-    }
-
-}
-
-//----------------------------------------------------------------------------
-//return the previous point (or edge) id for a given ith point (or edge);
-//----------------------------------------------------------------------------
-unsigned int PolygonTriangulator::Polygon::prev(const unsigned int&  i)
-{
-  unsigned int j(0),prevLoop(0),currentLoop(0);
-
-  while ( i > m_nVertices[currentLoop] )
-    {
-      prevLoop=currentLoop;
-      ++currentLoop;
-    }
-
-  if( i==1 || (i==m_nVertices[prevLoop]+1) ) j=m_nVertices[currentLoop];
-  else if( i <= m_nVertices[currentLoop] ) j=i-1;
-
-  return j;
-}
-
-//----------------------------------------------------------------------------
-//return the next point (or edge) id for a given ith point (or edge);
-//----------------------------------------------------------------------------
-unsigned int PolygonTriangulator::Polygon::next(const unsigned int&  i)
-{
-  unsigned int j(0),prevLoop(0),currentLoop(0);
-
-  while ( i > m_nVertices[currentLoop] )
-    {
-      prevLoop=currentLoop;
-      ++currentLoop;
-    }
-
-  if( i < m_nVertices[currentLoop] ) j=i+1;
-  else if ( i==m_nVertices[currentLoop] )
-    {
-      if( currentLoop==0) j=1;
-      else j=m_nVertices[prevLoop]+1;
-    }
-
-  return j;
-}
-
-//----------------------------------------------------------------------------
-//polygon initialization;
-//to find types of all polygon vertices;
-//create a priority queue for all vertices;
-//construct an edge set for each vertex (the set holds all edges starting from
-//the vertex, only for loop searching purpose).
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::initializate()
-{
-  internal_poltrig::PointbaseMap::iterator it=m_points.begin();
-  for(; it!=m_points.end(); ++it)
-    {
-      int id=it->first;
-      int idp=prev(id);
-      int idn=next(id);
-      internal_poltrig::Pointbase p=*m_points[id], pnext=*m_points[idn], pprev=*m_points[idp];
-
-      if( p > pnext && pprev > p )
-	m_points[id]->type=internal_poltrig::REGULAR_DOWN;
-      else if (p > pprev && pnext > p)
-	m_points[id]->type=internal_poltrig::REGULAR_UP;
-      else
-	{
-	  double pa[2], pb[2], pc[2];
-
-	  pa[0]=m_points[idp]->x;
-	  pa[1]=m_points[idp]->y;
-
-	  pb[0]=m_points[id]->x;
-	  pb[1]=m_points[id]->y;
-
-	  pc[0]=m_points[idn]->x;
-	  pc[1]=m_points[idn]->y;
-
-	  double area=internal_poltrig::orient2d(pa,pb,pc);
-
-	  if( pprev > p && pnext > p ) m_points[id]->type=(area >0) ? internal_poltrig::END: internal_poltrig::MERGE ;
-	  if( pprev < p && pnext < p ) m_points[id]->type=(area >0) ? internal_poltrig::START : internal_poltrig::SPLIT;
-
-	}
-
-      m_qpoints.push(*(it->second));
-
-      m_startAdjEdgeMap[id].insert(id);
-
-    }
-}
-
-//----------------------------------------------------------------------------
-//Add a diagonal from point id i to j
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::addDiagonal(const unsigned int&  i, const unsigned int&  j)
-{
-  internal_poltrig::Type type=internal_poltrig::INSERT;
-  internal_poltrig::Linebase* diag=new internal_poltrig::Linebase(m_points[i], m_points[j], type,m_l_id);
-  m_edges[diag->id()]=diag;
-
-  m_startAdjEdgeMap[i].insert(diag->id());
-  m_startAdjEdgeMap[j].insert(diag->id());
-
-  m_diagonals[diag->id()]=diag;
-
-}
-
-//----------------------------------------------------------------------------
-//Handle start vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleStartVertex(const unsigned int&  i)
-{
-  double y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  m_edges[i]->setHelper(i);
-  m_edges[i]->setKeyValue(y);
-  m_edgebst.Insert(m_edges[i]);
-
-}
-
-//----------------------------------------------------------------------------
-//Handle end vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleEndVertex(const unsigned int&  i)
-{
-  double y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  unsigned int previ=prev(i);
-  internal_poltrig::Linebase* edge=m_edges[previ];
-  unsigned int helper=m_edges[previ]->helper();
-
-
-  if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
-  m_edgebst.Delete(edge->keyValue());
-
-}
-
-//----------------------------------------------------------------------------
-//Handle split vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleSplitVertex(const unsigned int&  i)
-{
-  double x=m_points[i]->x, y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>*  leftnode;
-  m_edgebst.FindMaxSmallerThan(x, leftnode);
-  internal_poltrig::Linebase* leftedge=leftnode->data();
-
-  unsigned int helper=leftedge->helper();
-  addDiagonal(i, helper);
-
-  leftedge->setHelper(i);
-  m_edges[i]->setHelper(i);
-  m_edges[i]->setKeyValue(y);
-  m_edgebst.Insert(m_edges[i]);
-}
-
-//----------------------------------------------------------------------------
-//Handle merge vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleMergeVertex(const unsigned int&  i)
-{
-  double x=m_points[i]->x, y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  unsigned int previ=prev(i);
-  unsigned int helper=m_edges[previ]->helper();
-  if (m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
-  m_edgebst.Delete(m_edges[previ]->keyValue());
-
-  internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>*  leftnode;
-  m_edgebst.FindMaxSmallerThan(x, leftnode);
-  internal_poltrig::Linebase* leftedge=leftnode->data();
-
-  helper=leftedge->helper();
-  if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
-
-  leftedge->setHelper(i);
-}
-
-//----------------------------------------------------------------------------
-//Handle regular down vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleRegularVertexDown(const unsigned int&  i)
-{
-  double y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  unsigned int previ=prev(i);
-  unsigned int helper=m_edges[previ]->helper();
-  if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
-
-  m_edgebst.Delete(m_edges[previ]->keyValue());
-  m_edges[i]->setHelper(i);
-  m_edges[i]->setKeyValue(y);
-  m_edgebst.Insert(m_edges[i]);
-
-}
-
-//----------------------------------------------------------------------------
-////Handle regular up vertex
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::handleRegularVertexUp(const unsigned int&  i)
-{
-  double x=m_points[i]->x, y=m_points[i]->y;
-  m_edgebst.InOrder(internal_poltrig::UpdateKey, y);
-
-  internal_poltrig::BTreeNode<internal_poltrig::Linebase*, double>*  leftnode;
-  m_edgebst.FindMaxSmallerThan(x, leftnode);
-
-  internal_poltrig::Linebase* leftedge=leftnode->data();
-
-  unsigned int helper=leftedge->helper();
-  if(m_points[helper]->type==internal_poltrig::MERGE) addDiagonal(i, helper);
-  leftedge->setHelper(i);
-
-}
-
-//----------------------------------------------------------------------------
-//partition polygon to monotone polygon pieces
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::partition2Monotone()
-{
-
-  if(m_qpoints.top().type!=internal_poltrig::START)
-    {
-      std::cout<<"Please check your input polygon:\n1)orientations?\n2)duplicated points?\n";
-      exit(1);
-    }
-
-  while(!m_qpoints.empty())
-    {
-      internal_poltrig::Pointbase vertex=m_qpoints.top();
-      m_qpoints.pop();
-      unsigned int id=vertex.id;
-
-      switch(vertex.type)
-	{
-	case internal_poltrig::START:        handleStartVertex(id);       break;
-	case internal_poltrig::END:          handleEndVertex(id);         break;
-	case internal_poltrig::MERGE:        handleMergeVertex(id);       break;
-	case internal_poltrig::SPLIT:        handleSplitVertex(id);       break;
-	case internal_poltrig::REGULAR_UP:   handleRegularVertexUp(id);   break;
-	case internal_poltrig::REGULAR_DOWN: handleRegularVertexDown(id); break;
-	default:
-	  std::cout<<"No duplicated points please!\n";
-	  exit(1); break;
-	}
-    }
-}
-
-
-//----------------------------------------------------------------------------
-//two Auxiliary functions to find monotone polygon pieces
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-//calculate angle B for A, B, C three given points
-//----------------------------------------------------------------------------
-double PolygonTriangulator::Polygon::angleCosb(double *pa, double *pb, double *pc)
-{
-  double dxab = pa[0] - pb[0];
-  double dyab = pa[1] - pb[1];
-
-  double dxcb = pc[0] - pb[0];
-  double dycb = pc[1] - pb[1];
-
-  double dxab2 = dxab * dxab;
-  double dyab2 = dyab * dyab;
-  double dxcb2 = dxcb * dxcb;
-  double dycb2 = dycb * dycb;
-  double ab = dxab2 + dyab2;
-  double cb = dxcb2 + dycb2;
-
-  double cosb = dxab * dxcb + dyab * dycb;
-  double denom = sqrt( ab * cb);
-
-  cosb/=denom;
-
-  return cosb;
-}
-
-//----------------------------------------------------------------------------
-//for any given edge, find the next edge we should choose when searching for
-//monotone polygon pieces;
-//----------------------------------------------------------------------------
-unsigned int PolygonTriangulator::Polygon::selectNextEdge(internal_poltrig::Linebase* edge)
-{
-
-  unsigned int eid= edge->endPoint(1)->id;
-  std::set<unsigned int> edges=m_startAdjEdgeMap[eid];
-  assert(!edges.empty());
-
-  unsigned int nexte=0;
-  if( edges.size() == 1 )  nexte=*(edges.begin());
-  else if( edges.size() > 1 )
-    {
-      unsigned int nexte_ccw(0), nexte_cw(0);
-      double max=-2.0,min=2.0;
-
-
-      std::set<unsigned int>::iterator it=edges.begin();
-      for(; it!=edges.end(); ++it)
-	{
-	  if(*it==edge->id()) continue;
-	  double A[2], B[2], C[2];
-	  A[0]=edge->endPoint(0)->x;        A[1]=edge->endPoint(0)->y;
-	  B[0]=edge->endPoint(1)->x;        B[1]=edge->endPoint(1)->y;
-
-	  if(edge->endPoint(1)!=m_edges[*it]->endPoint(0)) m_edges[*it]->reverse();
-	  C[0]=m_edges[*it]->endPoint(1)->x; C[1]=m_edges[*it]->endPoint(1)->y;
-
-	  double area=internal_poltrig::orient2d(A, B, C);
-	  double cosb=angleCosb(A, B, C);
-
-	  if( area > 0 && max < cosb ) { nexte_ccw=*it; max=cosb; }
-	  else if( min > cosb ) { nexte_cw=*it; min=cosb; }
-	}
-
-      nexte = (nexte_ccw!=0) ? nexte_ccw : nexte_cw;
-    }
-
-  return nexte;
-}
-
-//----------------------------------------------------------------------------
-//searching all monotone pieces;
-//----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::searchMonotones()
-{
-  int loop=0;
-
-  internal_poltrig::LineMap edges=m_edges;
-
-  while( edges.size() > m_diagonals.size() )
-    {
-      ++loop;
-      internal_poltrig::Monopoly poly;
-      internal_poltrig::LineMap::iterator it=edges.begin();
-      internal_poltrig::Pointbase* startp=it->second->endPoint(0);
-      internal_poltrig::Pointbase* endp=0;
-      internal_poltrig::Linebase*  next=it->second;
-
-      poly.push_back(startp->id);
-
-      for(;;)
-	{
-	  endp=next->endPoint(1);
-	  if(next->type()!=internal_poltrig::INSERT)
-	    {
-	      edges.erase(next->id());
-	      m_startAdjEdgeMap[next->endPoint(0)->id].erase(next->id());
-	    }
-	  if(endp==startp) break;
-	  poly.push_back(endp->id);
-
-	  unsigned int nexte=selectNextEdge(next);
-
-	  if(nexte==0)
-	    {
-	      std::cout<<"Please check your input polygon:\n";
-	      std::cout<<"1)orientations?\n2)with duplicated points?\n3)is a simple one?\n";
-	      exit(1);
-	    }
-	  //assert( nexte > 0);
-	  next=edges[nexte];
-	  if(next->endPoint(0) !=endp ) next->reverse();
-	}
-
-      m_mpolys.push_back(poly);
-    }
-}
-
-
-//----------------------------------------------------------------------------
-//triangulate a monotone polygon;
-//----------------------------------------------------------------------------
-void  PolygonTriangulator::Polygon::triangulateMonotone(internal_poltrig::Monopoly& mpoly)
-{
-  internal_poltrig::PQueue qvertex;
-  internal_poltrig::Monopoly::iterator it=mpoly.begin(), itnext;
-  for(; itnext=it, it!=mpoly.end(); ++it)
-    {
-      ++itnext;
-      if(itnext==mpoly.end()) itnext=mpoly.begin();
-      internal_poltrig::Pointbase point=*m_points[*it], pointnext=*m_points[*itnext];
-      point.left=(point > pointnext)? true:false;
-      qvertex.push(point);
-    }
-
-  std::stack<internal_poltrig::Pointbase> spoint;
-  for(int i=0; i<2; ++i) { spoint.push(qvertex.top()); qvertex.pop(); }
-
-  while ( qvertex.size() > 1 )
-    {
-      internal_poltrig::Pointbase topQueuePoint=qvertex.top();
-      internal_poltrig::Pointbase topStackPoint=spoint.top();
-
-      if(topQueuePoint.left!=topStackPoint.left)
-	{
-	  while ( spoint.size()  > 1 )
-	    {
-	      internal_poltrig::Pointbase p1=spoint.top();
-	      spoint.pop();
-	      internal_poltrig::Pointbase p2=spoint.top();
-	      Triangle v(3);
-	      v[0]=topQueuePoint.id;
-	      v[1]=p1.id;
-	      v[2]=p2.id;
-	      sort(v.begin(),v.end());//TK
-	      m_triangles.push_back(v);
-
-	    }
-	  spoint.pop();
-	  spoint.push(topStackPoint);
-	  spoint.push(topQueuePoint);
-	}
-      else
-	{
-	  while( spoint.size() > 1 )
-	    {
-	      internal_poltrig::Pointbase stack1Point=spoint.top();
-	      spoint.pop();
-	      internal_poltrig::Pointbase stack2Point=spoint.top();
-	      spoint.push(stack1Point);
-	      double pa[2], pb[2], pc[2];
-	      pa[0]=topQueuePoint.x; pa[1]=topQueuePoint.y;
-	      pb[0]=stack2Point.x;   pb[1]=stack2Point.y;
-	      pc[0]=stack1Point.x;   pc[1]=stack1Point.y;
-
-	      double area=internal_poltrig::orient2d(pa,pb,pc);
-	      bool   left=stack1Point.left;
-	      if( (area > 0 && left) || (area < 0 && !left ) )
-	    	{
-		  Triangle v(3);
-		  v[0]=topQueuePoint.id;
-		  v[1]=stack2Point.id;
-		  v[2]=stack1Point.id;
-		  sort(v.begin(),v.end());//TK
-		  m_triangles.push_back(v);
-		  spoint.pop();
-	    	} else break;
-	    }
-
-	  spoint.push(topQueuePoint);
-
-	}
-
-      qvertex.pop();
-
-    }
-
-  internal_poltrig::Pointbase lastQueuePoint=qvertex.top();
-  while( spoint.size() !=1 )
-    {
-      internal_poltrig::Pointbase topPoint=spoint.top();
-      spoint.pop();
-      internal_poltrig::Pointbase top2Point=spoint.top();
-
-      Triangle v(3);
-      v[0]=lastQueuePoint.id;
-      v[1]=topPoint.id;
-      v[2]=top2Point.id;
-      sort(v.begin(),v.end());//TK
-      m_triangles.push_back(v);
-    }
-}
-
-//----------------------------------------------------------------------------
-//main triangulation function;
-////----------------------------------------------------------------------------
-void PolygonTriangulator::Polygon::triangulation()
-{
-  partition2Monotone();
-  searchMonotones();
-  internal_poltrig::Monopolys::iterator it=m_mpolys.begin();
-  for(; it!=m_mpolys.end(); ++it)
-    triangulateMonotone(*it);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-
-PolygonTriangulator::PolygonTriangulator(const std::vector<double>& polygon_xcoords,
-					 const std::vector<double>& polygon_ycoords)
-  : m_polygon(new Polygon(polygon_xcoords,polygon_ycoords))
-{
-  m_polygon->triangulation();
-}
-
-PolygonTriangulator::~PolygonTriangulator() { delete m_polygon; }
-
-const PolygonTriangulator::Triangles* PolygonTriangulator::triangles() const
-{
-  return m_polygon->triangles();
-}
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.h b/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.h
deleted file mode 100644
index 558acef0608e2e77a345a003da63f91654d9f0a2..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/PolygonTriangulator.h
+++ /dev/null
@@ -1,62 +0,0 @@
-
-///////////////////////////////////////////////////////////////////////
-//                                                                   //
-// Class: PolygonTriangulator                                        //
-//                                                                   //
-// Description: Triangulates any (non-complex) 2D polygon.           //
-//                                                                   //
-// Author: Thomas Kittelmann (Thomas.Kittelmann@cern.ch), March 2007 //
-//                                                                   //
-// Notes:                                                            //
-//                                                                   //
-//     Actual algorithms are adapted from                            //
-//     http://www.mema.ucl.ac.be/~wu/Poly2Tri/poly2tri.html          //
-//     (see copyright notice in .src file)                           //
-//                                                                   //
-//     Main changes performed for the present incarnation are        //
-//     interface & namespace changes, indentation, small             //
-//     performance tweaks and removal of unused features.            //
-//     Most importantly, got rid of static and globals so the class  //
-//     can be reliably used more than once per process. Also, the    //
-//     output triangles are sorted to preserve "handedness".         //
-//                                                                   //
-///////////////////////////////////////////////////////////////////////
-
-
-#ifndef POLYGONTRIANGULATOR_H
-#define POLYGONTRIANGULATOR_H
-
-#include <vector>
-#include <list>
-
-class PolygonTriangulator {
-public:
-
-  typedef std::vector<unsigned> Triangle;
-  typedef std::list<Triangle> Triangles;
-
-  //When constructed it automatically performs the triangulation.
-  PolygonTriangulator(const std::vector<double>& polygon_xcoords,
-		      const std::vector<double>& polygon_ycoords);
-
-
-  // Access the result with this
-  const Triangles* triangles() const;
-
-  // Output "handedness" (clockwise or anticlockwise order) is the
-  // same for all of the triangles as it were for the input points.
-
-  //NB: If triangles().size()==0, something went wrong.
-
-  ~PolygonTriangulator();
-
-private:
-  // Copying/assignment not legal:
-  PolygonTriangulator( const PolygonTriangulator & );
-  PolygonTriangulator & operator= ( const PolygonTriangulator & );
-
-  class Polygon;
-  Polygon * m_polygon;
-};
-
-#endif
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/RCBase.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/RCBase.cxx
deleted file mode 100755
index 19f1e4c55606c8e3886ad317c66834ee9db8d0b0..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/RCBase.cxx
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/RCBase.h"
-#include <exception>
-
-RCBase::RCBase()
-  : m_count(0)
-{
-}
-
-RCBase::~RCBase()
-{
-}
-
-void RCBase::ref () const
-{
-  m_count++;
-}
-
-void RCBase::unref () const
-{
-  if (m_count.load()>0) {
-    m_count--;
-    if (m_count.load()==0)
-      delete this;
-  }
-}
-
-unsigned int RCBase::refCount () const
-{
-  return m_count.load();
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/TemplateVolAction.cxx b/DetectorDescription/GeoModel/GeoModelKernel/src/TemplateVolAction.cxx
deleted file mode 100755
index e1dccfb1776c8dea10877a8c4fbc562d8864a16f..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/TemplateVolAction.cxx
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "GeoModelKernel/TemplateVolAction.h"
-
-TemplateVolAction::TemplateVolAction()
- : GeoVolumeAction (GeoVolumeAction::TOP_DOWN)
-{
-}
-
-TemplateVolAction::~TemplateVolAction()
-{
-}
-
-void TemplateVolAction::handleVPhysVol (const GeoVPhysVol *)
-{
-}
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/qt.pro b/DetectorDescription/GeoModel/GeoModelKernel/src/qt.pro
deleted file mode 100644
index f34caee1ce27fd2a401d668e8f321e30bcac6192..0000000000000000000000000000000000000000
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/qt.pro
+++ /dev/null
@@ -1,34 +0,0 @@
-######################################################################
-# Automatically generated by qmake (2.01a) Thu Sep 18 19:41:36 2008
-######################################################################
-
-TEMPLATE = lib dll
-TARGET = GeoModelKernel
-DEPENDPATH += .
-INCLUDEPATH += . .. /usr/local/include
-
-DESTDIR= .
-CONFIG += build_all debug c++11
-
-# Input
-HEADERS +=            ../GeoModelKernel/*.h 
-
-SOURCES +=            *.cxx
-
-INSTALLS += target
-target.path=/usr/local/lib
-
-headers.path=/usr/local/include/GeoModelKernel
-headers.files= ../GeoModelKernel/*.h 
-INSTALLS += headers
-
-mac {
-  INCLUDEPATH += . .. 
-}
-
-unix {
-  QMAKE_CXXFLAGS += -std=c++11
-  INCLUDEPATH += . .. 
-}
-
-
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/CMakeLists.txt b/DetectorDescription/GeoModel/GeoModelSvc/CMakeLists.txt
index b79da15a4c597cb344877a9ca6c8f139b69776e3..2ae87919c5dad2126b8211c032be1c05b1b2f262 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/GeoModelSvc/CMakeLists.txt
@@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           Event/EventInfo
                           Event/EventInfoMgt
@@ -24,14 +23,17 @@ atlas_depends_on_subdirs( PRIVATE
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
 
+
+find_package( GeoModel )
+
 # Component(s) in the package:
 atlas_add_component( GeoModelSvc
                      src/GeoModelSvc.cxx
                      src/GeoDbTagSvc.cxx
                      src/RDBMaterialManager.cxx
                      src/components/GeoModelSvc_entries.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps CxxUtils AthenaKernel SGTools StoreGateLib SGtests GeoModelKernel GeoModelUtilities EventInfo GaudiKernel )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps CxxUtils AthenaKernel SGTools StoreGateLib SGtests GeoModelUtilities EventInfo GaudiKernel )
 
 # Install files from the package:
 atlas_install_headers( GeoModelSvc )
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
index 9a2d25af76b21d0e1c5bee0ace27501f8a3791a3..87e010c774e9ff512bad3e28299a6f7a01c24f5c 100755
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
@@ -6,6 +6,8 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h" 
+#include "GeoModelKernel/GeoVolumeCursor.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelUtilities/GeoModelExperiment.h"
 #include "GeoModelSvc.h"
 #include "RDBMaterialManager.h"
@@ -313,7 +315,7 @@ StatusCode GeoModelSvc::geoInit()
 
   // Build the world node from which everything else will be suspended
   const GeoMaterial* air = theMaterialManager->getMaterial("std::Air");  
-  const GeoBox* worldBox = new GeoBox(1000*CLHEP::cm,1000*CLHEP::cm, 1000*CLHEP::cm); 
+  const GeoBox* worldBox = new GeoBox(1000*GeoModelKernelUnits::cm,1000*GeoModelKernelUnits::cm, 1000*GeoModelKernelUnits::cm); 
   const GeoLogVol* worldLog = new GeoLogVol("WorldLog", worldBox, air);
   GeoPhysVol *worldPhys=new GeoPhysVol(worldLog);
   
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
index a54fc8f44ff7890fa55d5f4b0e90ba850ae724fa..027f82af668a3f0df861e7aa8f3d2314c0b43250 100755
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
@@ -5,7 +5,7 @@
 #ifndef GEOMODELSVC_GEOMODELSVC_H
 #define GEOMODELSVC_GEOMODELSVC_H
 
-#include "GeoModelKernel/Query.h"
+#include "GeoModelKernel/GeoPVConstLink.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelInterfaces/IGeoDbTagSvc.h"
 #include "GeoModelInterfaces/IGeoModelTool.h"
@@ -16,6 +16,7 @@
 #include "AthenaBaseComps/AthService.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "EventInfoMgt/ITagInfoMgr.h"
+#include <fstream>
 
 class ISvcLocator;
 
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
index 9082962a454e794cac27b794d15d2fe6ee82ee4c..ba8282f9c873f7a57455bf1790f8665faeb50ea2 100755
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
@@ -8,6 +8,7 @@
 
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoElement.h"
+#include "GeoModelKernel/Units.h"
 
 #include "StoreGate/StoreGate.h"
 #include "StoreGate/DataHandle.h"
@@ -67,7 +68,7 @@ int printElement ( GeoElement* &p_element)
 	
   std::cout << " ***** CheckElement(): Print the Element:  " << name << std::endl; 
   std::cout << " ***** The Element: name,		symbol, 	A, 	Z " << std::endl; 
-  std::cout << " *****             "<<name <<"		"<<symbol <<"		"<< a * (CLHEP::mole / CLHEP::gram) <<"	"<< z <<"	"  << std::endl; 
+  std::cout << " *****             "<<name <<"		"<<symbol <<"		"<< a * (GeoModelKernelUnits::mole / GeoModelKernelUnits::gram) <<"	"<< z <<"	"  << std::endl; 
 	
   return 1;
 }
@@ -81,7 +82,7 @@ int printElement ( const GeoElement* &p_element)
 	
   std::cout << " ***** PrintElement(): Print the Element:  " << name << std::endl; 
   std::cout << " ***** The Element: name,		symbol, 	A, 	Z " << std::endl; 
-  std::cout << " *****             "<<name <<"		"<<symbol <<"		"<< a * (CLHEP::mole / CLHEP::gram) <<"	"<< z <<"	"  << std::endl; 
+  std::cout << " *****             "<<name <<"		"<<symbol <<"		"<< a * (GeoModelKernelUnits::mole / GeoModelKernelUnits::gram) <<"	"<< z <<"	"  << std::endl; 
 	
   return 1;
 }
@@ -89,7 +90,7 @@ int printElement ( const GeoElement* &p_element)
 int printMaterial ( GeoMaterial* &p_material)
 {
   std::string name = p_material->getName();
-  double density = p_material->getDensity() * (CLHEP::cm3 / CLHEP::gram);
+  double density = p_material->getDensity() * (GeoModelKernelUnits::cm3 / GeoModelKernelUnits::gram);
 
   std::cout << " ***** PrintMaterial(): Print the Material:  " << name << std::endl; 
   std::cout << " ***** The Material: name,	density	" << std::endl; 
@@ -101,7 +102,7 @@ int printMaterial ( GeoMaterial* &p_material)
 int printFullMaterial ( GeoMaterial* &p_material)
 {
   std::string name = p_material->getName();
-  double density = p_material->getDensity() * (CLHEP::cm3 / CLHEP::gram);
+  double density = p_material->getDensity() * (GeoModelKernelUnits::cm3 / GeoModelKernelUnits::gram);
 	
   std::cout << " ***** PrintFullMaterial(): Print the Material:  " << name << std::endl; 
   std::cout << " ***** The Material: name, 	density" << std::endl; 
@@ -588,7 +589,7 @@ GeoMaterial* RDBMaterialManager::getMaterial(const std::string & name) {
   if (ind == tmp_materials->size()) 
       return NULL;
 
-  pmaterial = new GeoMaterial( material_name,material_density * (CLHEP::gram / CLHEP::cm3));
+  pmaterial = new GeoMaterial( material_name,material_density * (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3));
 
 
   bool firstComponent = true;
@@ -802,7 +803,7 @@ const GeoMaterial*  RDBMaterialManager:: getMaterial(const std::string &name) co
   if (ind == tmp_materials->size()) 
       return NULL;
 
-  pmaterial = new GeoMaterial( material_name,material_density * (CLHEP::gram / CLHEP::cm3));
+  pmaterial = new GeoMaterial( material_name,material_density * (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3));
 
   bool firstComponent = true;
   bool hasSubMaterial = false;
@@ -903,7 +904,7 @@ const GeoElement *RDBMaterialManager::getElement(const std::string & name) const
 	  element_a = rec->getDouble("A");
 	  element_z = rec->getDouble("Z");
                 	
-	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(CLHEP::gram/CLHEP::mole));
+	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(GeoModelKernelUnits::gram/GeoModelKernelUnits::mole));
 
 	  // a table to keep the memory allocation, and easy for delete 
 	  pelement->ref();
@@ -946,7 +947,7 @@ const GeoElement *RDBMaterialManager::getElement(unsigned int atomicNumber) cons
 	  element_a = rec->getDouble("A");
 	  element_z = rec->getDouble("Z");
                 	
-	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(CLHEP::gram/CLHEP::mole));
+	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(GeoModelKernelUnits::gram/GeoModelKernelUnits::mole));
 
 	  // a table to keep the memory allocation, and easy for delete 
 	  pelement->ref();
@@ -996,7 +997,7 @@ GeoElement *RDBMaterialManager::getElement(const std::string & name)  {
 	  element_a = rec->getDouble("A");
 	  element_z = rec->getDouble("Z");
                 	
-	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(CLHEP::gram/CLHEP::mole));
+	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(GeoModelKernelUnits::gram/GeoModelKernelUnits::mole));
 
 	  // a table to keep the memory allocation, and easy for delete 
 	  pelement->ref();
@@ -1038,7 +1039,7 @@ GeoElement *RDBMaterialManager::getElement(unsigned int atomicNumber) {
 	  element_a = rec->getDouble("A");
 	  element_z = rec->getDouble("Z");
                 	
-	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(CLHEP::gram/CLHEP::mole));
+	  pelement = new GeoElement( element_name , element_symbol  ,element_z , element_a *(GeoModelKernelUnits::gram/GeoModelKernelUnits::mole));
 
 	  // a table to keep the memory allocation, and easy for delete 
 	  pelement->ref();
@@ -1107,13 +1108,13 @@ std::ostream &  RDBMaterialManager::printAll(std::ostream & o) const
   std::vector<GeoElement *>::const_iterator e;
   for (e=m_elementVector.begin();e!= m_elementVector.end();e++) 
     {
-      o << (*e)->getSymbol() << '\t' << (*e)->getZ() <<  '\t' << (*e)->getA() * (CLHEP::mole / CLHEP::gram) << '\t' << (*e)->getName() << std::endl; 
+      o << (*e)->getSymbol() << '\t' << (*e)->getZ() <<  '\t' << (*e)->getA() * (GeoModelKernelUnits::mole / GeoModelKernelUnits::gram) << '\t' << (*e)->getName() << std::endl; 
     }
   std::map<std::string, GeoMaterial *>::const_iterator m;
   	
   for (m=m_materialMap.begin();m!=m_materialMap.end();m++) 
     {
-      o << "Material: " << (*m).first <<  " Density " << (*m).second->getDensity() * (CLHEP::cm3 / CLHEP::gram)  << std::endl;
+      o << "Material: " << (*m).first <<  " Density " << (*m).second->getDensity() * (GeoModelKernelUnits::cm3 / GeoModelKernelUnits::gram)  << std::endl;
       for (size_t i = 0; i< (*m).second->getNumElements();i++) 
 	{
 	  o <<" ***** ***** "<< int ((*m).second->getFraction(i)*100) << "% \t"  << (*m).second->getElement(i)->getName() << std::endl;
diff --git a/DetectorDescription/GeoModel/GeoModelUtilities/CMakeLists.txt b/DetectorDescription/GeoModel/GeoModelUtilities/CMakeLists.txt
index af571f9f7145a7a70eeadcc86fd1f3eb3b4b6606..e0d3a273ec4cf8e87c1954cb406a341ed0028229 100644
--- a/DetectorDescription/GeoModel/GeoModelUtilities/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/GeoModelUtilities/CMakeLists.txt
@@ -11,21 +11,20 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           GaudiKernel )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
+find_package( Eigen )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( GeoModelUtilities
                    src/*.cxx
                    PUBLIC_HEADERS GeoModelUtilities
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps GeoModelKernel
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps SGTools 
                    PRIVATE_LINK_LIBRARIES GaudiKernel )
 
diff --git a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoAlignmentStore.h b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoAlignmentStore.h
index 57ea209176f5459656e252696c5afce66eee74ac..2c5b88144cd89cfd076f955a8806656814750b59 100755
--- a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoAlignmentStore.h
+++ b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoAlignmentStore.h
@@ -6,10 +6,10 @@
 #define GEOMODELUTILITIES_GEOALIGNMENTSTORE_H
 
 #include "GeoModelKernel/GeoVAlignmentStore.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelUtilities/TransformMap.h"
 #include "AthenaKernel/CLASS_DEF.h"
 #include "AthenaKernel/CondCont.h"
-#include "CLHEP/Geometry/Transform3D.h"
 #include <stdexcept>
 
 class GeoAlignmentStore : public GeoVAlignmentStore
@@ -18,20 +18,20 @@ class GeoAlignmentStore : public GeoVAlignmentStore
   GeoAlignmentStore() {}
   virtual ~GeoAlignmentStore() override {}
 
-  virtual void setDelta(const GeoAlignableTransform*, const HepGeom::Transform3D&) override;
-  virtual const HepGeom::Transform3D* getDelta(const GeoAlignableTransform*) const override;
+  virtual void setDelta(const GeoAlignableTransform*, const GeoTrf::Transform3D&) override;
+  virtual const GeoTrf::Transform3D* getDelta(const GeoAlignableTransform*) const override;
 
-  virtual void setAbsPosition(const GeoVFullPhysVol*, const HepGeom::Transform3D&) override;
-  virtual const HepGeom::Transform3D* getAbsPosition(const GeoVFullPhysVol*) const override;
+  virtual void setAbsPosition(const GeoVFullPhysVol*, const GeoTrf::Transform3D&) override;
+  virtual const GeoTrf::Transform3D* getAbsPosition(const GeoVFullPhysVol*) const override;
 
-  virtual void setDefAbsPosition(const GeoVFullPhysVol*, const HepGeom::Transform3D&) override;
-  virtual const HepGeom::Transform3D* getDefAbsPosition(const GeoVFullPhysVol*) const override;
+  virtual void setDefAbsPosition(const GeoVFullPhysVol*, const GeoTrf::Transform3D&) override;
+  virtual const GeoTrf::Transform3D* getDefAbsPosition(const GeoVFullPhysVol*) const override;
 
 
  private:
-  TransformMap<GeoAlignableTransform,HepGeom::Transform3D> m_deltas;
-  TransformMap<GeoVFullPhysVol,HepGeom::Transform3D> m_absPositions;
-  TransformMap<GeoVFullPhysVol,HepGeom::Transform3D> m_defAbsPositions;
+  TransformMap<GeoAlignableTransform,GeoTrf::Transform3D> m_deltas;
+  TransformMap<GeoVFullPhysVol,GeoTrf::Transform3D> m_absPositions;
+  TransformMap<GeoVFullPhysVol,GeoTrf::Transform3D> m_defAbsPositions;
 };
 
 CLASS_DEF(GeoAlignmentStore, 135648236, 1)
diff --git a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoDBUtils.h b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoDBUtils.h
index 8420072fe32e989ff2d59c8bbfe9315f1f488ca6..ce79227f837669a4239694b0d8bb4216db1972c0 100755
--- a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoDBUtils.h
+++ b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoDBUtils.h
@@ -8,7 +8,9 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include <string>
-#include "CLHEP/Geometry/Transform3D.h" 
+#include "GeoModelKernel/GeoDefinitions.h" 
+#include "GeoModelKernel/Units.h" 
+
 
 class GeoDBUtils {
 
@@ -24,16 +26,16 @@ class GeoDBUtils {
     return NULL;
   }
   
-  inline static HepGeom::Transform3D getTransform (const IRDBRecord *currentRec) {
-    double x             = currentRec->getDouble("TRANSX")*CLHEP::mm;
-    double y             = currentRec->getDouble("TRANSY")*CLHEP::mm;
-    double z             = currentRec->getDouble("TRANSZ")*CLHEP::mm;
-    double theta         = currentRec->getDouble("THETA")*CLHEP::rad;
-    double phi           = currentRec->getDouble("PHI")*CLHEP::rad;
-    double rotationAngle = currentRec->getDouble("ROTATIONANGLE")*CLHEP::rad;
+  inline static GeoTrf::Transform3D getTransform (const IRDBRecord *currentRec) {
+    double x             = currentRec->getDouble("TRANSX")*GeoModelKernelUnits::mm;
+    double y             = currentRec->getDouble("TRANSY")*GeoModelKernelUnits::mm;
+    double z             = currentRec->getDouble("TRANSZ")*GeoModelKernelUnits::mm;
+    double theta         = currentRec->getDouble("THETA")*GeoModelKernelUnits::rad;
+    double phi           = currentRec->getDouble("PHI")*GeoModelKernelUnits::rad;
+    double rotationAngle = currentRec->getDouble("ROTATIONANGLE")*GeoModelKernelUnits::rad;
     
-    CLHEP::Hep3Vector axis(sin(theta)*cos(phi), sin(theta)*sin(phi),cos(theta));
-    return HepGeom::Translate3D(x,y,z)*HepGeom::Rotate3D(rotationAngle,axis);
+    GeoTrf::Vector3D axis(sin(theta)*cos(phi), sin(theta)*sin(phi),cos(theta));
+    return GeoTrf::Translate3D(x,y,z)*GeoTrf::Rotate3D(rotationAngle,axis);
   } 
 
 };
diff --git a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoExtendedMaterial.h b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoExtendedMaterial.h
index 50754634e7e6c72aad64524ba6fa3a16cf2a965b..1bd84a6a1930a9413c85531810ef9585c6738cf7 100755
--- a/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoExtendedMaterial.h
+++ b/DetectorDescription/GeoModel/GeoModelUtilities/GeoModelUtilities/GeoExtendedMaterial.h
@@ -6,7 +6,7 @@
 #define GeoExtendedMaterial_h 1
 
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoModelKernel/Units.h"
 
 #include "GeoModelUtilities/GeoMaterialPropertiesTable.h"
 
@@ -18,8 +18,8 @@ class GeoExtendedMaterial : public GeoMaterial
   GeoExtendedMaterial(const std::string &Name,
 		      double Density,
 		      GeoMaterialState State = stateUndefined,
-		      double Temperature = CLHEP::STP_Temperature,
-		      double Pressure  = CLHEP::STP_Pressure);
+		      double Temperature = GeoModelKernelUnits::STP_Temperature,
+		      double Pressure  = GeoModelKernelUnits::STP_Pressure);
   
   virtual ~GeoExtendedMaterial();
   
diff --git a/DetectorDescription/GeoModel/GeoModelUtilities/src/GeoAlignmentStore.cxx b/DetectorDescription/GeoModel/GeoModelUtilities/src/GeoAlignmentStore.cxx
index adb7ad825861469c6a30c2069ad5cf3e9efc9f95..6e25227815e0a0cb2d8cec2f8a4af777fd0d0776 100644
--- a/DetectorDescription/GeoModel/GeoModelUtilities/src/GeoAlignmentStore.cxx
+++ b/DetectorDescription/GeoModel/GeoModelUtilities/src/GeoAlignmentStore.cxx
@@ -4,33 +4,33 @@
 
 #include "GeoModelUtilities/GeoAlignmentStore.h"
 
-void GeoAlignmentStore::setDelta(const GeoAlignableTransform* axf, const HepGeom::Transform3D& xf)
+void GeoAlignmentStore::setDelta(const GeoAlignableTransform* axf, const GeoTrf::Transform3D& xf)
 {
   if(!m_deltas.setTransform(axf,xf))
     throw ExcAlignmentStore("Attempted to overwrite Delta in the Alignment Store");    
 }
 
-const HepGeom::Transform3D* GeoAlignmentStore::getDelta(const GeoAlignableTransform* axf) const
+const GeoTrf::Transform3D* GeoAlignmentStore::getDelta(const GeoAlignableTransform* axf) const
 {
   return m_deltas.getTransform(axf);
 }
 
-void GeoAlignmentStore::setAbsPosition(const GeoVFullPhysVol* fpv, const HepGeom::Transform3D& xf) 
+void GeoAlignmentStore::setAbsPosition(const GeoVFullPhysVol* fpv, const GeoTrf::Transform3D& xf) 
 {
   m_absPositions.setTransform(fpv,xf);
 }
  
-const HepGeom::Transform3D* GeoAlignmentStore::getAbsPosition(const GeoVFullPhysVol* fpv) const 
+const GeoTrf::Transform3D* GeoAlignmentStore::getAbsPosition(const GeoVFullPhysVol* fpv) const 
 {
   return m_absPositions.getTransform(fpv);
 }
 
-void GeoAlignmentStore::setDefAbsPosition(const GeoVFullPhysVol* fpv, const HepGeom::Transform3D& xf) 
+void GeoAlignmentStore::setDefAbsPosition(const GeoVFullPhysVol* fpv, const GeoTrf::Transform3D& xf) 
 {
   m_defAbsPositions.setTransform(fpv,xf);
 }
 
-const HepGeom::Transform3D* GeoAlignmentStore::getDefAbsPosition(const GeoVFullPhysVol* fpv) const 
+const GeoTrf::Transform3D* GeoAlignmentStore::getDefAbsPosition(const GeoVFullPhysVol* fpv) const 
 {
   return m_defAbsPositions.getTransform(fpv);
 }
diff --git a/DetectorDescription/GeoModel/GeoSpecialShapes/CMakeLists.txt b/DetectorDescription/GeoModel/GeoSpecialShapes/CMakeLists.txt
index c8d260fdff39672901c1152850c4334521ad7d89..8411eee2fe6579b4e7f1edd93998dd7fa23906da 100644
--- a/DetectorDescription/GeoModel/GeoSpecialShapes/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/GeoSpecialShapes/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( GeoSpecialShapes )
 atlas_depends_on_subdirs( PUBLIC
                           Control/SGTools
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           Control/AthenaKernel
                           Control/CxxUtils
@@ -24,6 +23,7 @@ find_package( CLHEP )
 find_package( GSL )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
 find_package( ROOT COMPONENTS Matrix Core Tree MathCore Hist RIO pthread MathMore Minuit Minuit2 Physics HistPainter Rint )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( GeoSpecialShapes
@@ -33,18 +33,18 @@ atlas_add_library( GeoSpecialShapes
                    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} SGTools GeoModelKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} SGTools StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} ${GSL_LIBRARIES} AthenaKernel CxxUtils GeoModelUtilities GaudiKernel )
 
 atlas_add_dictionary( LArGeoCheckerDict
                       GeoSpecialShapes/LArGeoCheckerDict.h
                       GeoSpecialShapes/selection.xml
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} ${GSL_LIBRARIES} ${CLHEP_LIBRARIES} SGTools StoreGateLib SGtests GeoModelKernel AthenaKernel CxxUtils GeoModelUtilities GaudiKernel GeoSpecialShapes )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} ${GSL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} SGTools StoreGateLib SGtests AthenaKernel CxxUtils GeoModelUtilities GaudiKernel GeoSpecialShapes )
 
 atlas_add_dictionary( LArWheelEnums
                       GeoSpecialShapes/LArWheelCalculatorEnums.h
                       GeoSpecialShapes/selectionEnums.xml
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} ${GSL_LIBRARIES} ${CLHEP_LIBRARIES} SGTools StoreGateLib SGtests GeoModelKernel AthenaKernel CxxUtils GeoModelUtilities GaudiKernel GeoSpecialShapes )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} ${GSL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} SGTools StoreGateLib SGtests AthenaKernel CxxUtils GeoModelUtilities GaudiKernel GeoSpecialShapes )
 
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/CMakeLists.txt b/ForwardDetectors/AFP/AFP_GeoModel/CMakeLists.txt
index fb580b2f694ea713919f93a3102128ec7f69292e..cff22ddfd0bed4ed79e8f838bc17ca2d2479f5c5 100644
--- a/ForwardDetectors/AFP/AFP_GeoModel/CMakeLists.txt
+++ b/ForwardDetectors/AFP/AFP_GeoModel/CMakeLists.txt
@@ -8,29 +8,31 @@ atlas_subdir( AFP_GeoModel )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           ForwardDetectors/AFP/AFP_Geometry
                           PRIVATE
                           Control/StoreGate
                           Database/AthenaPOOL/AthenaPoolUtilities
                           DetectorDescription/GeoModel/GeoModelInterfaces
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel )
 
 # External dependencies:
 find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( AFP_GeoModelLib
                    src/*.cxx
                    PUBLIC_HEADERS AFP_GeoModel
-                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
+                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES AthenaKernel GeoModelKernel GeoModelUtilities AFP_Geometry StoreGateLib SGtests
+                   LINK_LIBRARIES AthenaKernel ${GEOMODEL_LIBRARIES} GeoModelUtilities AFP_Geometry StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaPoolUtilities GaudiKernel )
 
 atlas_add_component( AFP_GeoModel
                      src/components/*.cxx
-                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities AFP_Geometry StoreGateLib SGtests AthenaPoolUtilities GaudiKernel AFP_GeoModelLib )
+                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities AFP_Geometry StoreGateLib SGtests AthenaPoolUtilities GaudiKernel AFP_GeoModelLib )
 
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelFactory.cxx b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelFactory.cxx
index fba5b202f2b1af4386af87156d7521ef81c6253e..682fd3512575b1bda215d95f2f1ebfed1ab7d60a 100755
--- a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelFactory.cxx
+++ b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelFactory.cxx
@@ -25,6 +25,8 @@
 #include "GeoModelUtilities/GeoBorderSurfaceContainer.h"
 #include "AFP_Geometry/AFP_Geometry.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include <iostream>
 #include <fstream>
 
@@ -245,7 +247,7 @@ void AFP_GeoModelFactory::create(GeoPhysVol *world)
     const GeoLogVol* pLogLongEnv = new GeoLogVol("AFP00_LogLongHamburgPipeEnv", pBoxLongEnv, m_MapMaterials[std::string("OpticalVacuum")]);
     GeoOpticalPhysVol* pPhysLongEnv   = new GeoOpticalPhysVol(pLogLongEnv);
     sprintf(szLabel,"AFP00_LongHamburgPipeEnv");
-    world->add(new GeoTransform(TransEnvInWorld));
+    world->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransEnvInWorld)));
     world->add(new GeoNameTag(szLabel));
     world->add(pPhysLongEnv);
     m_detectorManager->addTreeTop(pPhysLongEnv);
@@ -270,7 +272,7 @@ void AFP_GeoModelFactory::create(GeoPhysVol *world)
     const GeoLogVol* pLogShortEnv = new GeoLogVol("AFP01_LogShortHamburgPipeEnv", pBoxShortEnv, m_MapMaterials[std::string("std::Vacuum")]);
     GeoPhysVol* pPhysShortEnv   = new GeoPhysVol(pLogShortEnv);
     sprintf(szLabel,"AFP01_ShortHamburgPipeEnv");
-    world->add(new GeoTransform(TransEnvInWorld));
+    world->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransEnvInWorld)));
     world->add(new GeoNameTag(szLabel));
     world->add(pPhysShortEnv);
     m_detectorManager->addTreeTop(pPhysShortEnv);
@@ -290,7 +292,7 @@ void AFP_GeoModelFactory::create(GeoPhysVol *world)
     const GeoLogVol* pLogShortEnv1 = new GeoLogVol("AFP02_LogShortHamburgPipeEnv", pBoxShortEnv1, m_MapMaterials[std::string("std::Vacuum")]);
     GeoPhysVol* pPhysShortEnv1   = new GeoPhysVol(pLogShortEnv1);
     sprintf(szLabel,"AFP02_ShortHamburgPipeEnv");
-    world->add(new GeoTransform(TransEnvInWorld));
+    world->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransEnvInWorld)));
     world->add(new GeoNameTag(szLabel));
     world->add(pPhysShortEnv1);
     m_detectorManager->addTreeTop(pPhysShortEnv1);
@@ -310,7 +312,7 @@ void AFP_GeoModelFactory::create(GeoPhysVol *world)
     const GeoLogVol* pLogLongEnv1 = new GeoLogVol("AFP03_LogLongHamburgPipeEnv", pBoxLongEnv1, m_MapMaterials[std::string("OpticalVacuum")]);
     GeoOpticalPhysVol* pPhysLongEnv1   = new GeoOpticalPhysVol(pLogLongEnv1);
     sprintf(szLabel,"AFP03_LongHamburgPipeEnv");
-    world->add(new GeoTransform(TransEnvInWorld));
+    world->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransEnvInWorld)));
     world->add(new GeoNameTag(szLabel));
     world->add(pPhysLongEnv1);
     m_detectorManager->addTreeTop(pPhysLongEnv1);
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelHP.cxx b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelHP.cxx
index 41b181021684a856440a04470eb3db9cd8caccf5..8ca2d8b4e90ab0b577a77c4a21ab132dc5e4657e 100644
--- a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelHP.cxx
+++ b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelHP.cxx
@@ -19,6 +19,7 @@
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "CLHEP/GenericFunctions/AbsFunction.hh"
 #include "CLHEP/GenericFunctions/Variable.hh"
 #include "CLHEP/GenericFunctions/Sin.hh"
@@ -26,6 +27,8 @@
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include <iostream>
 #include <fstream>
 #include <string>
@@ -51,7 +54,7 @@ void AFP_GeoModelFactory::AddShortHamburgPipe(GeoPhysVol* pPhysMotherVol, const
 
 	sprintf(szLabel,"%s_ShortHamburgPipe",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg))));
 	pPhysMotherVol->add(hamburgPipeSPhys);
 }
 
@@ -66,7 +69,7 @@ void AFP_GeoModelFactory::AddLongHamburgPipe(GeoPhysVol* pPhysMotherVol, const c
 
 	sprintf(szLabel,"%s_LongHamburgPipe",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg))));
 	pPhysMotherVol->add(hamburgPipeSPhys);
 }
 
@@ -79,13 +82,13 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongHamburgPipe()
 	// Common box with round corners
 	const GeoBox* halftubeFull = new GeoBox(35*CLHEP::mm+0.5*thickness,50*CLHEP::mm+thickness,420*CLHEP::mm);
 	const GeoBox* halftubeIn0 = new GeoBox(35*CLHEP::mm,50*CLHEP::mm,420*CLHEP::mm-thickness);
-	HepGeom::Transform3D moveHTubeIn = HepGeom::Translate3D(-thickness,0,0);
+	GeoTrf::Transform3D moveHTubeIn = GeoTrf::Translate3D(-thickness,0,0);
 	const GeoShapeShift& halftubeIn = (*halftubeIn0)<<moveHTubeIn;
 	GeoShapeSubtraction* halftube0 = new GeoShapeSubtraction(halftubeFull,&halftubeIn);
 	const GeoTubs* cornerCutterH10 = new GeoTubs(18.05*CLHEP::mm+thickness, 35*CLHEP::mm, 420.1*CLHEP::mm, 0*CLHEP::deg, 90*CLHEP::deg);
 	const GeoTubs* cornerCutterH20 = new GeoTubs(18.05*CLHEP::mm+thickness, 35*CLHEP::mm, 420.1*CLHEP::mm, 270*CLHEP::deg, 90*CLHEP::deg);
-	HepGeom::Transform3D moveCutterH1 = HepGeom::Translate3D(17*CLHEP::mm, 32*CLHEP::mm, 0);
-	HepGeom::Transform3D moveCutterH2 = HepGeom::Translate3D(17*CLHEP::mm, -32*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutterH1 = GeoTrf::Translate3D(17*CLHEP::mm, 32*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutterH2 = GeoTrf::Translate3D(17*CLHEP::mm, -32*CLHEP::mm, 0);
 	const GeoShapeShift& cornerCutterH1 = (*cornerCutterH10)<<moveCutterH1;
 	const GeoShapeShift& cornerCutterH2 = (*cornerCutterH20)<<moveCutterH2;
 	GeoShapeSubtraction* halftube01 = new GeoShapeSubtraction(new GeoShapeSubtraction(halftube0, &cornerCutterH2), &cornerCutterH1);
@@ -94,18 +97,18 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongHamburgPipe()
 	const GeoShapeShift& cornerAddH1 = (*cornerAddH10)<<moveCutterH1;
 	const GeoShapeShift& cornerAddH2 = (*cornerAddH20)<<moveCutterH2;
 	GeoShapeSubtraction* halftube02 = new GeoShapeSubtraction(new GeoShapeSubtraction(halftube01, &cornerAddH2), &cornerAddH1);
-	HepGeom::Transform3D moveHTube = HepGeom::Translate3D(35*CLHEP::mm+2*thickness2,0,0);
+	GeoTrf::Transform3D moveHTube = GeoTrf::Translate3D(35*CLHEP::mm+2*thickness2,0,0);
 	const GeoShapeShift& halftube = (*halftube02)<<moveHTube;
 
 	// Plane covering the middle part (detector housing)
 	const GeoBox* plane0 = new GeoBox(0.5*thickness2, 50*CLHEP::mm+thickness, 350*CLHEP::mm);
-	HepGeom::Transform3D movePlane = HepGeom::Translate3D(0.5*thickness2,0,0);
+	GeoTrf::Transform3D movePlane = GeoTrf::Translate3D(0.5*thickness2,0,0);
 	const GeoShapeShift& plane = (*plane0)<<movePlane;
 
 	// Floor thinning
 	const GeoTrd* floor0 = new GeoTrd(360*CLHEP::mm, 360*CLHEP::mm, 8*CLHEP::mm, 20*CLHEP::mm, 0.5*(thickness2-0.3*CLHEP::mm));
-	HepGeom::Transform3D rotateFloor = HepGeom::RotateY3D(90*CLHEP::deg);
-	HepGeom::Transform3D moveFloor = HepGeom::Translate3D(0.5*thickness2+0.3*CLHEP::mm,0,0);
+	GeoTrf::Transform3D rotateFloor = GeoTrf::RotateY3D(90*CLHEP::deg);
+	GeoTrf::Transform3D moveFloor = GeoTrf::Translate3D(0.5*thickness2+0.3*CLHEP::mm,0,0);
 	const GeoShapeShift& floor = (*floor0)<<rotateFloor<<moveFloor;
 
 	// Thin window
@@ -113,32 +116,32 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongHamburgPipe()
         const GeoTrd* window20 = new GeoTrd(11*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 11*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 26*CLHEP::mm, 14*CLHEP::mm, 0.5*(thickness-HBPTHINWINDOWTHICKNESS));
 	const GeoBox* windowCutSide0 = new GeoBox(11.1*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 6*CLHEP::mm, 0.5*(thickness-0.25*CLHEP::mm)+0.1*CLHEP::mm);
 	const GeoBox* windowCutCorner0 = new GeoBox(35*CLHEP::mm, 20*CLHEP::mm, 0.5*(thickness-0.25*CLHEP::mm)+0.1*CLHEP::mm);
-	HepGeom::Transform3D moveCutSide = HepGeom::Translate3D(0,HBPWINDOWCUTYSIGN*20*CLHEP::mm,0);
+	GeoTrf::Transform3D moveCutSide = GeoTrf::Translate3D(0,HBPWINDOWCUTYSIGN*20*CLHEP::mm,0);
 	const GeoShapeShift& windowCutSide = (*windowCutSide0)<<moveCutSide;
-	HepGeom::Transform3D moveCutCorner = HepGeom::Translate3D(11*CLHEP::mm-0.5*(thickness2-0.3*CLHEP::mm)+0.5*sqrt(2)*20*CLHEP::mm,HBPWINDOWCUTYSIGN*(2*CLHEP::mm+0.5*sqrt(2)*20*CLHEP::mm),0);
-	HepGeom::Transform3D rotateCutCorner = HepGeom::RotateZ3D(HBPWINDOWCUTYSIGN*-45*CLHEP::deg);
+	GeoTrf::Transform3D moveCutCorner = GeoTrf::Translate3D(11*CLHEP::mm-0.5*(thickness2-0.3*CLHEP::mm)+0.5*sqrt(2)*20*CLHEP::mm,HBPWINDOWCUTYSIGN*(2*CLHEP::mm+0.5*sqrt(2)*20*CLHEP::mm),0);
+	GeoTrf::Transform3D rotateCutCorner = GeoTrf::RotateZ3D(HBPWINDOWCUTYSIGN*-45*CLHEP::deg);
 	const GeoShapeShift& windowCutCorner = (*windowCutCorner0)<<rotateCutCorner<<moveCutCorner;
 	const GeoShapeSubtraction& window11 = window10->subtract(windowCutCorner);
 	const GeoShapeSubtraction* window12 = new GeoShapeSubtraction(&window11, &windowCutSide);
 	const GeoShapeSubtraction& window21 = window20->subtract(windowCutCorner);
 	const GeoShapeSubtraction* window22 = new GeoShapeSubtraction(&window21, &windowCutSide);
-        HepGeom::Transform3D moveWindow1 = HepGeom::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, 350*CLHEP::mm+0.5*thickness+HBPTHINWINDOWTHICKNESS);
-        HepGeom::Transform3D moveWindow2 = HepGeom::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, -350*CLHEP::mm-0.5*thickness-HBPTHINWINDOWTHICKNESS);
+        GeoTrf::Transform3D moveWindow1 = GeoTrf::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, 350*CLHEP::mm+0.5*thickness+HBPTHINWINDOWTHICKNESS);
+        GeoTrf::Transform3D moveWindow2 = GeoTrf::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, -350*CLHEP::mm-0.5*thickness-HBPTHINWINDOWTHICKNESS);
 	const GeoShapeShift& window1 = (*window12)<<moveWindow1;
 	const GeoShapeShift& window2 = (*window22)<<moveWindow2;
 
 	// Boxes with round corners on ends
 	const GeoBox* endsFull0 = new GeoBox(25.85*CLHEP::mm, 50*CLHEP::mm+thickness, 35*CLHEP::mm);
 	const GeoBox* endsIn0 = new GeoBox(25.85*CLHEP::mm-0.5*thickness, 50*CLHEP::mm, 35*CLHEP::mm-thickness);
-	HepGeom::Transform3D moveEndIn = HepGeom::Translate3D(thickness,0,0);
+	GeoTrf::Transform3D moveEndIn = GeoTrf::Translate3D(thickness,0,0);
 	const GeoShapeShift& endsIn = (*endsIn0)<<moveEndIn;
 	GeoShapeSubtraction* ends0 = new GeoShapeSubtraction(endsFull0,&endsIn);
 	const GeoTubs* cornerCutter10 = new GeoTubs(9*CLHEP::mm+thickness, 20*CLHEP::mm, 35.1*CLHEP::mm, 90*CLHEP::deg, 90*CLHEP::deg);
 	const GeoTubs* cornerCutter20 = new GeoTubs(9*CLHEP::mm+thickness, 20*CLHEP::mm, 35.1*CLHEP::mm, 180*CLHEP::deg, 90*CLHEP::deg);
-	HepGeom::Transform3D moveCutter1 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, 41*CLHEP::mm, 0);
-	HepGeom::Transform3D moveCutter2 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, -(41*CLHEP::mm), 0);
-	HepGeom::Transform3D moveAdd1 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness), 41*CLHEP::mm, 0);
-	HepGeom::Transform3D moveAdd2 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness), -(41*CLHEP::mm), 0);
+	GeoTrf::Transform3D moveCutter1 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, 41*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutter2 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, -(41*CLHEP::mm), 0);
+	GeoTrf::Transform3D moveAdd1 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness), 41*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveAdd2 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness), -(41*CLHEP::mm), 0);
 	const GeoShapeShift& cornerCutter1 = (*cornerCutter10)<<moveCutter1;
 	const GeoShapeShift& cornerCutter2 = (*cornerCutter20)<<moveCutter2;
 	GeoShapeSubtraction* ends01 = new GeoShapeSubtraction(new GeoShapeSubtraction(ends0, &cornerCutter2), &cornerCutter1);
@@ -147,16 +150,16 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongHamburgPipe()
 	const GeoShapeShift& cornerAdd1 = (*cornerAdd10)<<moveAdd1;
 	const GeoShapeShift& cornerAdd2 = (*cornerAdd20)<<moveAdd2;
 	GeoShapeSubtraction* ends = new GeoShapeSubtraction(new GeoShapeSubtraction(ends01, &cornerAdd2), &cornerAdd1);
-	HepGeom::Transform3D moveEnd1 = HepGeom::Translate3D(-25.9*CLHEP::mm+thickness2, 0, 385.1*CLHEP::mm);
-	HepGeom::Transform3D rotateEnd2 = HepGeom::RotateX3D(180*CLHEP::deg);
+	GeoTrf::Transform3D moveEnd1 = GeoTrf::Translate3D(-25.9*CLHEP::mm+thickness2, 0, 385.1*CLHEP::mm);
+	GeoTrf::Transform3D rotateEnd2 = GeoTrf::RotateX3D(180*CLHEP::deg);
 	const GeoShapeShift& end1 = (*ends)<<moveEnd1;
 	const GeoShapeShift& end2 = (*ends)<<moveEnd1<<rotateEnd2;
 
 	// Holes for the beam pipe
 	const GeoTube* hole10 = new GeoTube(0, 40*CLHEP::mm-0.1*CLHEP::mm, 0.55*thickness);
 	const GeoTube* hole20 = new GeoTube(0, 40*CLHEP::mm-0.1*CLHEP::mm, 0.55*thickness);
-	HepGeom::Transform3D moveHole1 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, 420*CLHEP::mm-0.5*thickness);
-	HepGeom::Transform3D moveHole2 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, -(420*CLHEP::mm-0.5*thickness));
+	GeoTrf::Transform3D moveHole1 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, 420*CLHEP::mm-0.5*thickness);
+	GeoTrf::Transform3D moveHole2 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, -(420*CLHEP::mm-0.5*thickness));
 	const GeoShapeShift& hole1 = (*hole10)<<moveHole1;
 	const GeoShapeShift& hole2 = (*hole20)<<moveHole2;
 
@@ -164,8 +167,8 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongHamburgPipe()
 	// Beam pipe in and out
 	const GeoTube* tube10 = new GeoTube(40*CLHEP::mm, 40*CLHEP::mm+thickness, 75*CLHEP::mm);
 	const GeoTube* tube20 = new GeoTube(40*CLHEP::mm, 40*CLHEP::mm+thickness, 75*CLHEP::mm);
-	HepGeom::Transform3D moveTube1 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, 495.05*CLHEP::mm);
-	HepGeom::Transform3D moveTube2 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, -495.05*CLHEP::mm);
+	GeoTrf::Transform3D moveTube1 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, 495.05*CLHEP::mm);
+	GeoTrf::Transform3D moveTube2 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, -495.05*CLHEP::mm);
 	const GeoShapeShift& tube1 = (*tube10)<<moveTube1;
 	const GeoShapeShift& tube2 = (*tube20)<<moveTube2;
 
@@ -193,13 +196,13 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
 	// Common box with round corners
 	const GeoBox* halftubeSFull = new GeoBox(35*CLHEP::mm+0.5*thickness,50*CLHEP::mm+thickness,120*CLHEP::mm);
 	const GeoBox* halftubeSIn0 = new GeoBox(35*CLHEP::mm,50*CLHEP::mm,120*CLHEP::mm-thickness);
-	HepGeom::Transform3D moveHSTubeIn = HepGeom::Translate3D(-thickness,0,0);
+	GeoTrf::Transform3D moveHSTubeIn = GeoTrf::Translate3D(-thickness,0,0);
 	const GeoShapeShift& halftubeSIn = (*halftubeSIn0)<<moveHSTubeIn;
 	GeoShapeSubtraction* halftubeS0 = new GeoShapeSubtraction(halftubeSFull,&halftubeSIn);
 	const GeoTubs* cornerCutterHS10 = new GeoTubs(18.05*CLHEP::mm+thickness, 35*CLHEP::mm, 120.1*CLHEP::mm, 0*CLHEP::deg, 90*CLHEP::deg);
 	const GeoTubs* cornerCutterHS20 = new GeoTubs(18.05*CLHEP::mm+thickness, 35*CLHEP::mm, 120.1*CLHEP::mm, 270*CLHEP::deg, 90*CLHEP::deg);
-	HepGeom::Transform3D moveCutterHS1 = HepGeom::Translate3D(17*CLHEP::mm, 32*CLHEP::mm, 0);
-	HepGeom::Transform3D moveCutterHS2 = HepGeom::Translate3D(17*CLHEP::mm, -32*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutterHS1 = GeoTrf::Translate3D(17*CLHEP::mm, 32*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutterHS2 = GeoTrf::Translate3D(17*CLHEP::mm, -32*CLHEP::mm, 0);
 	const GeoShapeShift& cornerCutterHS1 = (*cornerCutterHS10)<<moveCutterHS1;
 	const GeoShapeShift& cornerCutterHS2 = (*cornerCutterHS20)<<moveCutterHS2;
 	GeoShapeSubtraction* halftubeS01 = new GeoShapeSubtraction(new GeoShapeSubtraction(halftubeS0, &cornerCutterHS2), &cornerCutterHS1);
@@ -208,18 +211,18 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
 	const GeoShapeShift& cornerAddHS1 = (*cornerAddHS10)<<moveCutterHS1;
 	const GeoShapeShift& cornerAddHS2 = (*cornerAddHS20)<<moveCutterHS2;
 	GeoShapeSubtraction* halftubeS02 = new GeoShapeSubtraction(new GeoShapeSubtraction(halftubeS01, &cornerAddHS2), &cornerAddHS1);
-	HepGeom::Transform3D moveHSTube = HepGeom::Translate3D(35*CLHEP::mm+2*thickness2,0,0);
+	GeoTrf::Transform3D moveHSTube = GeoTrf::Translate3D(35*CLHEP::mm+2*thickness2,0,0);
 	const GeoShapeShift& halftubeS = (*halftubeS02)<<moveHSTube;
 
 	// Plane covering the middle part (detector housing)
 	const GeoBox* planeS0 = new GeoBox(0.5*thickness2, 50*CLHEP::mm+thickness, 50*CLHEP::mm);
-	HepGeom::Transform3D movePlaneS = HepGeom::Translate3D(0.5*thickness2,0,0);
+	GeoTrf::Transform3D movePlaneS = GeoTrf::Translate3D(0.5*thickness2,0,0);
 	const GeoShapeShift& planeS = (*planeS0)<<movePlaneS;
 
 	// Floor thinning
 	const GeoTrd* floor0 = new GeoTrd(60*CLHEP::mm, 60*CLHEP::mm, 8*CLHEP::mm, 20*CLHEP::mm, 0.5*(thickness2-0.3*CLHEP::mm));
-	HepGeom::Transform3D rotateFloor = HepGeom::RotateY3D(90*CLHEP::deg);
-	HepGeom::Transform3D moveFloor = HepGeom::Translate3D(0.5*thickness2+0.3*CLHEP::mm,0,0);
+	GeoTrf::Transform3D rotateFloor = GeoTrf::RotateY3D(90*CLHEP::deg);
+	GeoTrf::Transform3D moveFloor = GeoTrf::Translate3D(0.5*thickness2+0.3*CLHEP::mm,0,0);
 	const GeoShapeShift& floor = (*floor0)<<rotateFloor<<moveFloor;
 
 	// Thin window
@@ -227,17 +230,17 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
         const GeoTrd* window20 = new GeoTrd(11*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 11*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 26*CLHEP::mm, 14*CLHEP::mm, 0.5*(thickness-HBPTHINWINDOWTHICKNESS));
 	const GeoBox* windowCutSide0 = new GeoBox(11.1*CLHEP::mm+0.5*(thickness2-0.3*CLHEP::mm), 6*CLHEP::mm, 0.5*(thickness-0.25*CLHEP::mm)+0.1*CLHEP::mm);
 	const GeoBox* windowCutCorner0 = new GeoBox(35*CLHEP::mm, 20*CLHEP::mm, 0.5*(thickness-0.25*CLHEP::mm)+0.1*CLHEP::mm);
-	HepGeom::Transform3D moveCutSide = HepGeom::Translate3D(0,HBPWINDOWCUTYSIGN*20*CLHEP::mm,0);
+	GeoTrf::Transform3D moveCutSide = GeoTrf::Translate3D(0,HBPWINDOWCUTYSIGN*20*CLHEP::mm,0);
 	const GeoShapeShift& windowCutSide = (*windowCutSide0)<<moveCutSide;
-	HepGeom::Transform3D moveCutCorner = HepGeom::Translate3D(11*CLHEP::mm-0.5*(thickness2-0.3*CLHEP::mm)+0.5*sqrt(2)*20*CLHEP::mm,HBPWINDOWCUTYSIGN*(2*CLHEP::mm+0.5*sqrt(2)*20*CLHEP::mm),0);
-	HepGeom::Transform3D rotateCutCorner = HepGeom::RotateZ3D(HBPWINDOWCUTYSIGN*-45*CLHEP::deg);
+	GeoTrf::Transform3D moveCutCorner = GeoTrf::Translate3D(11*CLHEP::mm-0.5*(thickness2-0.3*CLHEP::mm)+0.5*sqrt(2)*20*CLHEP::mm,HBPWINDOWCUTYSIGN*(2*CLHEP::mm+0.5*sqrt(2)*20*CLHEP::mm),0);
+	GeoTrf::Transform3D rotateCutCorner = GeoTrf::RotateZ3D(HBPWINDOWCUTYSIGN*-45*CLHEP::deg);
 	const GeoShapeShift& windowCutCorner = (*windowCutCorner0)<<rotateCutCorner<<moveCutCorner;
 	const GeoShapeSubtraction& window11 = window10->subtract(windowCutCorner);
 	const GeoShapeSubtraction* window12 = new GeoShapeSubtraction(&window11, &windowCutSide);
 	const GeoShapeSubtraction& window21 = window20->subtract(windowCutCorner);
 	const GeoShapeSubtraction* window22 = new GeoShapeSubtraction(&window21, &windowCutSide);
-        HepGeom::Transform3D moveWindow1 = HepGeom::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, 50*CLHEP::mm+0.5*thickness+HBPTHINWINDOWTHICKNESS);
-        HepGeom::Transform3D moveWindow2 = HepGeom::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, -50*CLHEP::mm-0.5*thickness-HBPTHINWINDOWTHICKNESS);
+        GeoTrf::Transform3D moveWindow1 = GeoTrf::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, 50*CLHEP::mm+0.5*thickness+HBPTHINWINDOWTHICKNESS);
+        GeoTrf::Transform3D moveWindow2 = GeoTrf::Translate3D(-11*CLHEP::mm+0.5*(thickness2+0.3*CLHEP::mm), HBPWINDOWCUTYSIGN*6*CLHEP::mm, -50*CLHEP::mm-0.5*thickness-HBPTHINWINDOWTHICKNESS);
 	const GeoShapeShift& window1 = (*window12)<<moveWindow1;
 	const GeoShapeShift& window2 = (*window22)<<moveWindow2;
 
@@ -245,15 +248,15 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
 	// Boxes with round corners on ends
 	const GeoBox* endsSFull0 = new GeoBox(25.85*CLHEP::mm, 50*CLHEP::mm+thickness, 35*CLHEP::mm);
 	const GeoBox* endsSIn0 = new GeoBox(25.85*CLHEP::mm-0.5*thickness, 50*CLHEP::mm, 35*CLHEP::mm-thickness);
-	HepGeom::Transform3D moveEndSIn = HepGeom::Translate3D(thickness,0,0);
+	GeoTrf::Transform3D moveEndSIn = GeoTrf::Translate3D(thickness,0,0);
 	const GeoShapeShift& endsSIn = (*endsSIn0)<<moveEndSIn;
 	GeoShapeSubtraction* endsS0 = new GeoShapeSubtraction(endsSFull0,&endsSIn);
 	const GeoTubs* cornerCutterS10 = new GeoTubs(9*CLHEP::mm+thickness, 20*CLHEP::mm, 35.1*CLHEP::mm, 90*CLHEP::deg, 90*CLHEP::deg);
 	const GeoTubs* cornerCutterS20 = new GeoTubs(9*CLHEP::mm+thickness, 20*CLHEP::mm, 35.1*CLHEP::mm, 180*CLHEP::deg, 90*CLHEP::deg);
-	HepGeom::Transform3D moveCutterS1 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, 41*CLHEP::mm, 0);
-	HepGeom::Transform3D moveCutterS2 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, -(41*CLHEP::mm), 0);
-	HepGeom::Transform3D moveAddS1 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness), 41*CLHEP::mm, 0);
-	HepGeom::Transform3D moveAddS2 = HepGeom::Translate3D(-(16.85*CLHEP::mm-thickness), -(41*CLHEP::mm), 0);
+	GeoTrf::Transform3D moveCutterS1 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, 41*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveCutterS2 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness)*CLHEP::mm, -(41*CLHEP::mm), 0);
+	GeoTrf::Transform3D moveAddS1 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness), 41*CLHEP::mm, 0);
+	GeoTrf::Transform3D moveAddS2 = GeoTrf::Translate3D(-(16.85*CLHEP::mm-thickness), -(41*CLHEP::mm), 0);
 	const GeoShapeShift& cornerCutterS1 = (*cornerCutterS10)<<moveCutterS1;
 	const GeoShapeShift& cornerCutterS2 = (*cornerCutterS20)<<moveCutterS2;
 	GeoShapeSubtraction* endsS01 = new GeoShapeSubtraction(new GeoShapeSubtraction(endsS0, &cornerCutterS2), &cornerCutterS1);
@@ -262,16 +265,16 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
 	const GeoShapeShift& cornerAddS1 = (*cornerAddS10)<<moveAddS1;
 	const GeoShapeShift& cornerAddS2 = (*cornerAddS20)<<moveAddS2;
 	GeoShapeSubtraction* endsS = new GeoShapeSubtraction(new GeoShapeSubtraction(endsS01, &cornerAddS2), &cornerAddS1);
-	HepGeom::Transform3D moveEndS1 = HepGeom::Translate3D(-25.9*CLHEP::mm+thickness2, 0, 85.1*CLHEP::mm);
-	HepGeom::Transform3D rotateEndS2 = HepGeom::RotateX3D(180*CLHEP::deg);
+	GeoTrf::Transform3D moveEndS1 = GeoTrf::Translate3D(-25.9*CLHEP::mm+thickness2, 0, 85.1*CLHEP::mm);
+	GeoTrf::Transform3D rotateEndS2 = GeoTrf::RotateX3D(180*CLHEP::deg);
 	const GeoShapeShift& endS1 = (*endsS)<<moveEndS1;
 	const GeoShapeShift& endS2 = (*endsS)<<moveEndS1<<rotateEndS2;
 
 	// Holes for the beam pipe
 	const GeoTube* holeS10 = new GeoTube(0, 40*CLHEP::mm-0.05*CLHEP::mm, 0.55*thickness);
 	const GeoTube* holeS20 = new GeoTube(0, 40*CLHEP::mm-0.05*CLHEP::mm, 0.55*thickness);
-	HepGeom::Transform3D moveholeS1 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, 120*CLHEP::mm-0.5*thickness);
-	HepGeom::Transform3D moveholeS2 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, -(120*CLHEP::mm-0.5*thickness));
+	GeoTrf::Transform3D moveholeS1 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, 120*CLHEP::mm-0.5*thickness);
+	GeoTrf::Transform3D moveholeS2 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, -(120*CLHEP::mm-0.5*thickness));
 	const GeoShapeShift& holeS1 = (*holeS10)<<moveholeS1;
 	const GeoShapeShift& holeS2 = (*holeS20)<<moveholeS2;
 
@@ -279,8 +282,8 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortHamburgPipe()
 	// Beam pipe in and out
 	const GeoTube* tubeS10 = new GeoTube(40*CLHEP::mm, 40*CLHEP::mm+thickness, 75*CLHEP::mm);
 	const GeoTube* tubeS20 = new GeoTube(40*CLHEP::mm, 40*CLHEP::mm+thickness, 75*CLHEP::mm);
-	HepGeom::Transform3D movetubeS1 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, 195.05*CLHEP::mm);
-	HepGeom::Transform3D movetubeS2 = HepGeom::Translate3D(15*CLHEP::mm+2*thickness2, 0, -195.05*CLHEP::mm);
+	GeoTrf::Transform3D movetubeS1 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, 195.05*CLHEP::mm);
+	GeoTrf::Transform3D movetubeS2 = GeoTrf::Translate3D(15*CLHEP::mm+2*thickness2, 0, -195.05*CLHEP::mm);
 	const GeoShapeShift& tubeS1 = (*tubeS10)<<movetubeS1;
 	const GeoShapeShift& tubeS2 = (*tubeS20)<<movetubeS2;
 
@@ -303,12 +306,12 @@ GeoShape* AFP_GeoModelFactory::GetSolidShortWindowPlates()
 {
     double plateXHalfLength = 0.5*52/sin(m_CfgParams.hbpcfg.windowPlateAngle*CLHEP::deg)*CLHEP::mm;
     const GeoBox* windowPlate = new GeoBox(plateXHalfLength, 53*CLHEP::mm, 0.5*m_CfgParams.hbpcfg.windowPlateThickness*CLHEP::mm);
-    HepGeom::Transform3D moveXPlate1 = HepGeom::Translate3D(-plateXHalfLength, 0, 0);
-    HepGeom::Transform3D moveZPlate1 = HepGeom::Translate3D(0, 0, 75*CLHEP::mm);
-    HepGeom::Transform3D rotatePlate1 = HepGeom::RotateY3D((90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
-    HepGeom::Transform3D moveXPlate2 = HepGeom::Translate3D(-plateXHalfLength, 0, 0);
-    HepGeom::Transform3D moveZPlate2 = HepGeom::Translate3D(0, 0, -75*CLHEP::mm);
-    HepGeom::Transform3D rotatePlate2 = HepGeom::RotateY3D(-(90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
+    GeoTrf::Transform3D moveXPlate1 = GeoTrf::Translate3D(-plateXHalfLength, 0, 0);
+    GeoTrf::Transform3D moveZPlate1 = GeoTrf::Translate3D(0, 0, 75*CLHEP::mm);
+    GeoTrf::Transform3D rotatePlate1 = GeoTrf::RotateY3D((90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
+    GeoTrf::Transform3D moveXPlate2 = GeoTrf::Translate3D(-plateXHalfLength, 0, 0);
+    GeoTrf::Transform3D moveZPlate2 = GeoTrf::Translate3D(0, 0, -75*CLHEP::mm);
+    GeoTrf::Transform3D rotatePlate2 = GeoTrf::RotateY3D(-(90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
     const GeoShapeShift& windowPlate1 = (*windowPlate)<<moveXPlate1<<rotatePlate1<<moveZPlate1;
     const GeoShapeShift& windowPlate2 = (*windowPlate)<<moveXPlate2<<rotatePlate2<<moveZPlate2;
 
@@ -319,12 +322,12 @@ GeoShape* AFP_GeoModelFactory::GetSolidLongWindowPlates()
 {
     double plateXHalfLength = 0.5*52/sin(m_CfgParams.hbpcfg.windowPlateAngle*CLHEP::deg)*CLHEP::mm;
     const GeoBox* windowPlate = new GeoBox(plateXHalfLength, 53*CLHEP::mm, 0.5*m_CfgParams.hbpcfg.windowPlateThickness*CLHEP::mm);
-    HepGeom::Transform3D moveXPlate1 = HepGeom::Translate3D(-plateXHalfLength, 0, 0);
-    HepGeom::Transform3D moveZPlate1 = HepGeom::Translate3D(0, 0, 350*CLHEP::mm);
-    HepGeom::Transform3D rotatePlate1 = HepGeom::RotateY3D((90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
-    HepGeom::Transform3D moveXPlate2 = HepGeom::Translate3D(-plateXHalfLength, 0, 0);
-    HepGeom::Transform3D moveZPlate2 = HepGeom::Translate3D(0, 0, -350*CLHEP::mm);
-    HepGeom::Transform3D rotatePlate2 = HepGeom::RotateY3D(-(90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
+    GeoTrf::Transform3D moveXPlate1 = GeoTrf::Translate3D(-plateXHalfLength, 0, 0);
+    GeoTrf::Transform3D moveZPlate1 = GeoTrf::Translate3D(0, 0, 350*CLHEP::mm);
+    GeoTrf::Transform3D rotatePlate1 = GeoTrf::RotateY3D((90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
+    GeoTrf::Transform3D moveXPlate2 = GeoTrf::Translate3D(-plateXHalfLength, 0, 0);
+    GeoTrf::Transform3D moveZPlate2 = GeoTrf::Translate3D(0, 0, -350*CLHEP::mm);
+    GeoTrf::Transform3D rotatePlate2 = GeoTrf::RotateY3D(-(90-m_CfgParams.hbpcfg.windowPlateAngle)*CLHEP::deg);
     const GeoShapeShift& windowPlate1 = (*windowPlate)<<moveXPlate1<<rotatePlate1<<moveZPlate1;
     const GeoShapeShift& windowPlate2 = (*windowPlate)<<moveXPlate2<<rotatePlate2<<moveZPlate2;
 
@@ -342,7 +345,7 @@ void AFP_GeoModelFactory::AddShortWindowPlates(GeoPhysVol* pPhysMotherVol, const
 
         sprintf(szLabel,"%s_ShortWindowPlates",pszStationName);
         pPhysMotherVol->add(new GeoNameTag(szLabel));
-        pPhysMotherVol->add(new GeoTransform(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg)));
+        pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg))));
         pPhysMotherVol->add(windowPlatesSPhys);
 }
 
@@ -357,6 +360,6 @@ void AFP_GeoModelFactory::AddLongWindowPlates(GeoPhysVol* pPhysMotherVol, const
 
         sprintf(szLabel,"%s_LongWindowPlates",pszStationName);
         pPhysMotherVol->add(new GeoNameTag(szLabel));
-        pPhysMotherVol->add(new GeoTransform(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg)));
+        pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume*HepGeom::RotateZ3D((DETXSIDE==+1)? -180*CLHEP::deg:0.0*CLHEP::deg))));
         pPhysMotherVol->add(windowPlatesPhys);
 }
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelRP.cxx b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelRP.cxx
index 7d57f120c87686fbcf2fc1c650c5f7af050704ca..eec0dff0d6acdaabb29b3ea14616a0061a10848e 100644
--- a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelRP.cxx
+++ b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelRP.cxx
@@ -26,6 +26,7 @@
 #include "CLHEP/GenericFunctions/Cos.hh"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 #include <iostream>
 #include <fstream>
@@ -65,7 +66,6 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	char szLabel[32];
 	double fLength,fRMin,fRMax;
 	GeoShapeShift* pMoveCut;
-	HepGeom::Transform3D TransCut;
 	GeoShape* pSolCut;
 
 	//HepGeom::Transform3D TransRPot=TransInMotherVolume*HepGeom::TranslateX3D(-(0.5*RPOT_MAINTUBUS_LENGTH+RPOT_FLOOR_WNDTHICKNESS));
@@ -82,7 +82,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	sprintf(szLabel,"%s_RPMainTubus",pszStationName);
 	GeoFullPhysVol* pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 	//Main tubus - floor (bottom) part ---------------------------------------------------------------------------
@@ -97,7 +97,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	sprintf(szLabel,"%s_RPMainTubusFloorPart",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 	//--upper mass
@@ -113,7 +113,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	sprintf(szLabel,"%s_LogRPMainTubusUMass",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 	//-lower mass
@@ -128,7 +128,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	sprintf(szLabel,"%s_LogRPMainTubusLMass",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::TranslateX3D(0.5*fLength+0.5*fMainTubusSteelPartLength)*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 //	//cut volume 1
@@ -200,7 +200,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	double fTrdHYLength1=0.5*RPOT_FLOOR_WNDWIDTH-RPOT_FLOOR_WNDTHICKNESS*tan(RPOT_FLOOR_WNDFACET);
 	double fTrdHZLength=0.5*(RPOT_FLOOR_THICKNESS-RPOT_FLOOR_WNDTHICKNESS);
 	pSolCut=new GeoTrd(fTrdHXLength1,fTrdHXLength2,fTrdHYLength1,fTrdHYLength2,fTrdHZLength);
-	TransCut=HepGeom::TranslateZ3D(0.5*fLength-fTrdHZLength);
+	GeoTrf::Transform3D TransCut=GeoTrf::TranslateZ3D(0.5*fLength-fTrdHZLength);
 	pMoveCut=new GeoShapeShift(pSolCut, TransCut);
 	GeoShapeSubtraction* pSolFloor=new GeoShapeSubtraction(pSolTubus, pMoveCut);
 
@@ -209,7 +209,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	sprintf(szLabel,"%s_RPFloorTubus",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::TranslateX3D(0.5*fMainTubusSteelPartLength+RPOT_MAINTUBUS_FLOORPARTLENGTH+0.5*RPOT_FLOOR_THICKNESS)*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::TranslateX3D(0.5*fMainTubusSteelPartLength+RPOT_MAINTUBUS_FLOORPARTLENGTH+0.5*RPOT_FLOOR_THICKNESS)*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 	//Flange tubus -------------------------------------------------------------------------------------------------
@@ -223,7 +223,7 @@ void AFP_GeoModelFactory::AddRomanPot(GeoPhysVol* pPhysMotherVol, const char* ps
 	pPhysTubus=new GeoFullPhysVol(pLogTubus);
 	sprintf(szLabel,"%s_RPFlangeTubus",pszStationName);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(TransRPot*HepGeom::TranslateX3D(-0.5*fMainTubusSteelPartLength-0.5*RPOT_FLANGE_THICKNESS)*HepGeom::RotateY3D(90*CLHEP::deg)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPot*HepGeom::TranslateX3D(-0.5*fMainTubusSteelPartLength-0.5*RPOT_FLANGE_THICKNESS)*HepGeom::RotateY3D(90*CLHEP::deg))));
 	pPhysMotherVol->add(pPhysTubus);
 
 
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelSID.cxx b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelSID.cxx
index af9d123d3250f818e5ce1778ba6290057d2b257c..46fd4fbdc5cf58a69b75b5a8802fc32bc753e297 100644
--- a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelSID.cxx
+++ b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelSID.cxx
@@ -18,12 +18,14 @@
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "CLHEP/GenericFunctions/AbsFunction.hh"
 #include "CLHEP/GenericFunctions/Variable.hh"
 #include "CLHEP/GenericFunctions/Sin.hh"
 #include "CLHEP/GenericFunctions/Cos.hh"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 #include <iostream>
 #include <fstream>
@@ -70,7 +72,7 @@ void AFP_GeoModelFactory::AddSiDetector(GeoPhysVol* pPhysMotherVol, const char*
 	GeoFullPhysVol* pPhysSIDVacuumSensor=new GeoFullPhysVol(pLogSIDVacuumSensor);
 	sprintf(szLabel,"%s_SIDVacuumSensor[%i]",pszStationName,nSpecVacSensorID);
 	pPhysMotherVol->add(new GeoNameTag(szLabel));
-	pPhysMotherVol->add(new GeoTransform(m_pGeometry->GetSIDTransform(ESTT_VACUUMSENSOR,pszStationName,nSpecVacSensorID)));
+	pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(m_pGeometry->GetSIDTransform(ESTT_VACUUMSENSOR,pszStationName,nSpecVacSensorID))));
 	pPhysMotherVol->add(pPhysSIDVacuumSensor);
 
 	//add global vacuum sensitive volume (ID=11)
@@ -94,7 +96,7 @@ void AFP_GeoModelFactory::AddSiDetector(GeoPhysVol* pPhysMotherVol, const char*
 		sprintf(szLabel,"%s_SIDPlate[%i]",pszStationName,i);
 		pPhysMotherVol->add(new GeoNameTag(szLabel));
 		//pPhysMotherVol->add(new GeoTransform(PlateTotTrans));
-		pPhysMotherVol->add(new GeoTransform(m_pGeometry->GetSIDTransform(ESTT_PLATE,pszStationName,i)));
+		pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(m_pGeometry->GetSIDTransform(ESTT_PLATE,pszStationName,i))));
 		pPhysMotherVol->add(pPhysSIDPlate);
 		//m_pDetectorManager->addTreeTop(pPhysSIDPlate);
 			
@@ -119,7 +121,7 @@ void AFP_GeoModelFactory::AddSiDetector(GeoPhysVol* pPhysMotherVol, const char*
 		sprintf(szLabel,"%s_SIDSensor[%i]",pszStationName,i);
 		pPhysMotherVol->add(new GeoNameTag(szLabel));
 		//pPhysMotherVol->add(new GeoTransform(TransSID));
-		pPhysMotherVol->add(new GeoTransform(m_pGeometry->GetSIDTransform(ESTT_SENSOR,pszStationName,i)));
+		pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(m_pGeometry->GetSIDTransform(ESTT_SENSOR,pszStationName,i))));
 		pPhysMotherVol->add(pPhysSID);
 		//m_MapSIDTransToLocal[std::string(pszStationName)][i]=m_pGeometry->GetSIDTransform(ESTT_SENSORLOCAL,pszStationName,i);
 
@@ -133,7 +135,7 @@ void AFP_GeoModelFactory::AddSiDetector(GeoPhysVol* pPhysMotherVol, const char*
 			pPhysMotherVol->add(new GeoNameTag(szLabel));
 			//pPhysMotherVol->add(new GeoTransform(TotTransform*HepGeom::Translate3D(fxm,0.0*CLHEP::mm,i*NOMINALSIDSPACING/cos(falpha))*HepGeom::RotateY3D(falpha)));
 			//pPhysMotherVol->add(new GeoTransform(HepGeom::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+((GeoBox*)m_MapShapes["Sensor"])->getXHalfLength()), 0.0*CLHEP::mm, -pMainPlate->getZHalfLength()-0.5*SID_VACUUMSENSORTHICKNESS)));
-			pPhysMotherVol->add(new GeoTransform(m_pGeometry->GetSIDTransform(ESTT_VACUUMSENSOR,pszStationName,i)));
+			pPhysMotherVol->add(new GeoTransform(Amg::CLHEPTransformToEigen(m_pGeometry->GetSIDTransform(ESTT_VACUUMSENSOR,pszStationName,i))));
 			pPhysMotherVol->add(pPhysSIDVacuumSensor);
 		}
 	}
@@ -141,22 +143,22 @@ void AFP_GeoModelFactory::AddSiDetector(GeoPhysVol* pPhysMotherVol, const char*
 
 GeoShape* AFP_GeoModelFactory::CreateSolidSIDSupport()
 {
-	double fdelta=0.01*CLHEP::mm;
-
-	// main plate + edge
-	GeoBox* pMainBlock=new GeoBox(0.5*75.6*CLHEP::mm,0.5*(80-2*3.25)*CLHEP::mm,0.5*SID_PLATETHICKNESS);
-	GeoBox* pEdge=new GeoBox(0.5*(94-75.6+10)*CLHEP::mm,0.5*(108-14)*CLHEP::mm, 0.5*SID_PLATETHICKNESS);
-    HepGeom::Transform3D TransEdge=HepGeom::Translate3D(DETXSIDE*(pMainBlock->getXHalfLength()+pEdge->getXHalfLength()),pEdge->getYHalfLength()-pMainBlock->getYHalfLength(), 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveEdge=new GeoShapeShift(pEdge, TransEdge);
-	GeoShapeUnion* pSupport1=new GeoShapeUnion(pMainBlock,pMoveEdge);
-
-	// cut sensitive area
-	GeoBox* pSensorCut=new GeoBox(0.5*(21.0+10)*CLHEP::mm, 0.5*(22+10.0)*CLHEP::mm, 0.5*SID_PLATETHICKNESS+fdelta);
-    HepGeom::Transform3D TransSensorCut=HepGeom::Translate3D(DETXSIDE*(-pMainBlock->getXHalfLength()+pSensorCut->getXHalfLength()-fdelta), 0.0*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveSensorCut=new GeoShapeShift(pSensorCut, TransSensorCut);
-	GeoShapeSubtraction* pSupport2=new GeoShapeSubtraction(pSupport1, pMoveSensorCut);
-
-	return pSupport2;
+  double fdelta=0.01*CLHEP::mm;
+  
+  // main plate + edge
+  GeoBox* pMainBlock=new GeoBox(0.5*75.6*CLHEP::mm,0.5*(80-2*3.25)*CLHEP::mm,0.5*SID_PLATETHICKNESS);
+  GeoBox* pEdge=new GeoBox(0.5*(94-75.6+10)*CLHEP::mm,0.5*(108-14)*CLHEP::mm, 0.5*SID_PLATETHICKNESS);
+  GeoTrf::Transform3D TransEdge=GeoTrf::Translate3D(DETXSIDE*(pMainBlock->getXHalfLength()+pEdge->getXHalfLength()),pEdge->getYHalfLength()-pMainBlock->getYHalfLength(), 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveEdge=new GeoShapeShift(pEdge,TransEdge);
+  GeoShapeUnion* pSupport1=new GeoShapeUnion(pMainBlock,pMoveEdge);
+  
+  // cut sensitive area
+  GeoBox* pSensorCut=new GeoBox(0.5*(21.0+10)*CLHEP::mm, 0.5*(22+10.0)*CLHEP::mm, 0.5*SID_PLATETHICKNESS+fdelta);
+  GeoTrf::Transform3D TransSensorCut=GeoTrf::Translate3D(DETXSIDE*(-pMainBlock->getXHalfLength()+pSensorCut->getXHalfLength()-fdelta), 0.0*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveSensorCut=new GeoShapeShift(pSensorCut, TransSensorCut);
+  GeoShapeSubtraction* pSupport2=new GeoShapeSubtraction(pSupport1, pMoveSensorCut);
+  
+  return pSupport2;
 }
 
 GeoShape* AFP_GeoModelFactory::CreateSolidSIDPlate()
@@ -165,35 +167,35 @@ GeoShape* AFP_GeoModelFactory::CreateSolidSIDPlate()
 
     double fSensorHolderWidth=0.3*CLHEP::mm;
     double fSensorHolderPlateWidth=0.0*CLHEP::mm;//0.3*CLHEP::mm; //thin plate under sensor
-	double fPlateThickness=m_CfgParams.sidcfg.fSupportThickness;
-
-	//main plate including cover + edge
-	GeoBox* pMainPlate=new GeoBox(0.5*SID_MAINPLATEXDIM, 0.5*SID_MAINPLATEYDIM, 0.5*fPlateThickness);
-	GeoBox* pEdge=new GeoBox(0.5*(94*CLHEP::mm-SID_MAINPLATEXDIM),0.5*108*CLHEP::mm, 0.5*fPlateThickness);
-    HepGeom::Transform3D TransEdge=HepGeom::Translate3D(DETXSIDE*(pMainPlate->getXHalfLength()+pEdge->getXHalfLength()),0.0*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveEdge=new GeoShapeShift(pEdge, TransEdge);
-	GeoShapeUnion* pDetPlate1=new GeoShapeUnion(pMainPlate,pMoveEdge);
-
-	//cut sensitive area
-	GeoBox* pSensorCut=new GeoBox(0.5*21.0*CLHEP::mm, 0.5*22.0*CLHEP::mm,pMainPlate->getZHalfLength()-0.5*fSensorHolderWidth);
-	HepGeom::Transform3D TransSensorCut=HepGeom::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSensorCut->getXHalfLength()-fdelta),0.0*CLHEP::mm, -pMainPlate->getZHalfLength()+pSensorCut->getZHalfLength()-fdelta);
-	GeoShapeShift* pMoveSensorCut=new GeoShapeShift(pSensorCut, TransSensorCut);
-	GeoShapeSubtraction* pDetPlate2=new GeoShapeSubtraction(pDetPlate1, pMoveSensorCut);
-
+    double fPlateThickness=m_CfgParams.sidcfg.fSupportThickness;
+    
+    //main plate including cover + edge
+    GeoBox* pMainPlate=new GeoBox(0.5*SID_MAINPLATEXDIM, 0.5*SID_MAINPLATEYDIM, 0.5*fPlateThickness);
+    GeoBox* pEdge=new GeoBox(0.5*(94*CLHEP::mm-SID_MAINPLATEXDIM),0.5*108*CLHEP::mm, 0.5*fPlateThickness);
+    GeoTrf::Transform3D TransEdge=GeoTrf::Translate3D(DETXSIDE*(pMainPlate->getXHalfLength()+pEdge->getXHalfLength()),0.0*CLHEP::mm, 0.0*CLHEP::mm);
+    GeoShapeShift* pMoveEdge=new GeoShapeShift(pEdge, TransEdge);
+    GeoShapeUnion* pDetPlate1=new GeoShapeUnion(pMainPlate,pMoveEdge);
+    
+    //cut sensitive area
+    GeoBox* pSensorCut=new GeoBox(0.5*21.0*CLHEP::mm, 0.5*22.0*CLHEP::mm,pMainPlate->getZHalfLength()-0.5*fSensorHolderWidth);
+    GeoTrf::Transform3D TransSensorCut=GeoTrf::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSensorCut->getXHalfLength()-fdelta),0.0*CLHEP::mm, -pMainPlate->getZHalfLength()+pSensorCut->getZHalfLength()-fdelta);
+    GeoShapeShift* pMoveSensorCut=new GeoShapeShift(pSensorCut, TransSensorCut);
+    GeoShapeSubtraction* pDetPlate2=new GeoShapeSubtraction(pDetPlate1, pMoveSensorCut);
+    
     GeoBox* pSensorCut2=new GeoBox(0.5*18*CLHEP::mm+fdelta,0.5*16*CLHEP::mm,0.5*(fSensorHolderWidth-fSensorHolderPlateWidth)+fdelta);
-    HepGeom::Transform3D TransSensorCut2=HepGeom::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSensorCut2->getXHalfLength()-fdelta),0.0*CLHEP::mm, pMainPlate->getZHalfLength()-pSensorCut2->getZHalfLength()-fSensorHolderPlateWidth+fdelta);
-	GeoShapeShift* pMoveSensorCut2=new GeoShapeShift(pSensorCut2, TransSensorCut2);
-	GeoShapeSubtraction* pDetPlate3=new GeoShapeSubtraction(pDetPlate2, pMoveSensorCut2);
+    GeoTrf::Transform3D TransSensorCut2=GeoTrf::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSensorCut2->getXHalfLength()-fdelta),0.0*CLHEP::mm, pMainPlate->getZHalfLength()-pSensorCut2->getZHalfLength()-fSensorHolderPlateWidth+fdelta);
+    GeoShapeShift* pMoveSensorCut2=new GeoShapeShift(pSensorCut2, TransSensorCut2);
+    GeoShapeSubtraction* pDetPlate3=new GeoShapeSubtraction(pDetPlate2, pMoveSensorCut2);
 
-	//cut side edges
-	GeoBox* pSideEdge=new GeoBox(0.5*27.5*CLHEP::mm, 0.5*12.5*CLHEP::mm, 0.5*2*CLHEP::mm);
-	HepGeom::Transform3D TransSideEdgeUp=HepGeom::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSideEdge->getXHalfLength()-fdelta),pMainPlate->getYHalfLength()-pSideEdge->getYHalfLength()+fdelta,-pMainPlate->getZHalfLength()+pSideEdge->getZHalfLength()-fdelta);
-	GeoShapeShift* pMoveSideEdgeUp=new GeoShapeShift(pSideEdge,TransSideEdgeUp);
-	GeoShapeSubtraction* pDetPlate4=new GeoShapeSubtraction(pDetPlate3, pMoveSideEdgeUp);
+    //cut side edges
+    GeoBox* pSideEdge=new GeoBox(0.5*27.5*CLHEP::mm, 0.5*12.5*CLHEP::mm, 0.5*2*CLHEP::mm);
+    GeoTrf::Transform3D TransSideEdgeUp=GeoTrf::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSideEdge->getXHalfLength()-fdelta),pMainPlate->getYHalfLength()-pSideEdge->getYHalfLength()+fdelta,-pMainPlate->getZHalfLength()+pSideEdge->getZHalfLength()-fdelta);
+    GeoShapeShift* pMoveSideEdgeUp=new GeoShapeShift(pSideEdge,TransSideEdgeUp);
+    GeoShapeSubtraction* pDetPlate4=new GeoShapeSubtraction(pDetPlate3, pMoveSideEdgeUp);
 
-	HepGeom::Transform3D TransSideEdgeDown=HepGeom::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSideEdge->getXHalfLength()-fdelta),-pMainPlate->getYHalfLength()+pSideEdge->getYHalfLength()-fdelta,-pMainPlate->getZHalfLength()+pSideEdge->getZHalfLength()-fdelta);
-	GeoShapeShift* pMoveSideEdgeDown=new GeoShapeShift(pSideEdge,TransSideEdgeDown);
-	GeoShapeSubtraction* pDetPlate5=new GeoShapeSubtraction(pDetPlate4, pMoveSideEdgeDown);
+    GeoTrf::Transform3D TransSideEdgeDown=GeoTrf::Translate3D(DETXSIDE*(-pMainPlate->getXHalfLength()+pSideEdge->getXHalfLength()-fdelta),-pMainPlate->getYHalfLength()+pSideEdge->getYHalfLength()-fdelta,-pMainPlate->getZHalfLength()+pSideEdge->getZHalfLength()-fdelta);
+    GeoShapeShift* pMoveSideEdgeDown=new GeoShapeShift(pSideEdge,TransSideEdgeDown);
+    GeoShapeSubtraction* pDetPlate5=new GeoShapeSubtraction(pDetPlate4, pMoveSideEdgeDown);
 
 	//m_MapShapes["MainPlate"]=pMainPlate;
 	//m_MapShapes["EdgePlate"]=pEdge;
@@ -205,65 +207,65 @@ GeoShape* AFP_GeoModelFactory::CreateSolidSIDPlate()
 GeoShape* AFP_GeoModelFactory::CreateSolidSIDCooling()
 {
 	// Symmetric part
-	GeoBox* pCoolingCh1=new GeoBox(0.5*22*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D DownLeft1=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh1->getXHalfLength()+2.)*CLHEP::mm, (13.+4.+2.+2.)*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveDownLeft1=new GeoShapeShift(pCoolingCh1, DownLeft1);
-	
-	GeoBox* pCoolingCh11=new GeoBox(0.5*25.*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D DownLeft2=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh11->getXHalfLength()+2.)*CLHEP::mm, (13.+2.)*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveDownLeft2=new GeoShapeShift(pCoolingCh11, DownLeft2);	
-	GeoShapeUnion* pCoolingChU1=new GeoShapeUnion(pMoveDownLeft1,pMoveDownLeft2);	
-	
-	GeoBox* pCoolingCh2=new GeoBox(0.5*4*CLHEP::mm, 0.5*(4+2+4)*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D DownLeft3=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh2->getXHalfLength()+2.)*CLHEP::mm, (13.+pCoolingCh2->getYHalfLength())*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveDownLeft3=new GeoShapeShift(pCoolingCh2, DownLeft3);	
-	GeoShapeUnion* pCoolingChU2=new GeoShapeUnion(pCoolingChU1,pMoveDownLeft3);
+  GeoBox* pCoolingCh1=new GeoBox(0.5*22*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D DownLeft1=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh1->getXHalfLength()+2.)*CLHEP::mm, (13.+4.+2.+2.)*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveDownLeft1=new GeoShapeShift(pCoolingCh1, DownLeft1);
 	
-	double alpha1=-CLHEP::pi*15.5/180.;
-	GeoBox* pCoolingCh3=new GeoBox(0.5*39./std::cos(alpha1)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);	
-	HepGeom::Transform3D MidLeft=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh3->getXHalfLength()+23.)*CLHEP::mm, 26.25*CLHEP::mm, 0.0*CLHEP::mm)*HepGeom::RotateZ3D(alpha1);
-	GeoShapeShift* pMoveMidLeft=new GeoShapeShift(pCoolingCh3, MidLeft);	
-	GeoShapeUnion* pCoolingChU3=new GeoShapeUnion(pCoolingChU2,pMoveMidLeft);
+  GeoBox* pCoolingCh11=new GeoBox(0.5*25.*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D DownLeft2=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh11->getXHalfLength()+2.)*CLHEP::mm, (13.+2.)*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveDownLeft2=new GeoShapeShift(pCoolingCh11, DownLeft2);	
+  GeoShapeUnion* pCoolingChU1=new GeoShapeUnion(pMoveDownLeft1,pMoveDownLeft2);	
+  
+  GeoBox* pCoolingCh2=new GeoBox(0.5*4*CLHEP::mm, 0.5*(4+2+4)*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D DownLeft3=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh2->getXHalfLength()+2.)*CLHEP::mm, (13.+pCoolingCh2->getYHalfLength())*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveDownLeft3=new GeoShapeShift(pCoolingCh2, DownLeft3);	
+  GeoShapeUnion* pCoolingChU2=new GeoShapeUnion(pCoolingChU1,pMoveDownLeft3);
+  
+  double alpha1=-CLHEP::pi*15.5/180.;
+  GeoBox* pCoolingCh3=new GeoBox(0.5*39./std::cos(alpha1)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);	
+  GeoTrf::Transform3D MidLeft=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh3->getXHalfLength()+23.)*CLHEP::mm, 26.25*CLHEP::mm, 0.0*CLHEP::mm)*GeoTrf::RotateZ3D(alpha1);
+  GeoShapeShift* pMoveMidLeft=new GeoShapeShift(pCoolingCh3, MidLeft);	
+  GeoShapeUnion* pCoolingChU3=new GeoShapeUnion(pCoolingChU2,pMoveMidLeft);
 	
-	GeoBox* pCoolingCh4=new GeoBox(0.5*(18+14)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D UpLeft=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh4->getXHalfLength()+62.)*CLHEP::mm, 31.5*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveUpLeft=new GeoShapeShift(pCoolingCh4, UpLeft);	
-	GeoShapeUnion* pCoolingChU4=new GeoShapeUnion(pCoolingChU3,pMoveUpLeft);
-	
-	HepGeom::RotateX3D Rot=HepGeom::RotateX3D(CLHEP::pi);
-	GeoShapeShift* pRot=new GeoShapeShift(pCoolingChU4, Rot);		
-	GeoShapeUnion* pCoolingChU5=new GeoShapeUnion(pCoolingChU4,pRot);
-	
-    GeoBox* pCoolingCh5=new GeoBox(0.5*(25.99)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-    HepGeom::Transform3D Center1=HepGeom::Translate3D(DETXSIDE*(-37.8+25.)*CLHEP::mm, 0.0*CLHEP::mm, 0.0*CLHEP::mm)*HepGeom::RotateZ3D(-CLHEP::pi/2.);
-	GeoShapeShift* pMoveCenter1=new GeoShapeShift(pCoolingCh5, Center1);	
-	GeoShapeUnion* pCoolingChU6=new GeoShapeUnion(pCoolingChU5,pMoveCenter1);
-	
-	// Asymmetric (central) part
-	GeoBox* pCoolingCh6=new GeoBox(0.5*(48.2)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D Center2=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh6->getXHalfLength()+45.8)*CLHEP::mm, -12.*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveCenter2=new GeoShapeShift(pCoolingCh6, Center2);	
-	GeoShapeUnion* pCoolingChU7=new GeoShapeUnion(pCoolingChU6,pMoveCenter2);
-
-    GeoBox* pCoolingCh7=new GeoBox(0.5*(18.6)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-    HepGeom::Transform3D Center3=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh7->getXHalfLength()+31.4)*CLHEP::mm, -6.*CLHEP::mm, 0.0*CLHEP::mm)*HepGeom::RotateZ3D(+CLHEP::pi/4.01);
-	GeoShapeShift* pMoveCenter3=new GeoShapeShift(pCoolingCh7, Center3);	
-	GeoShapeUnion* pCoolingChU8=new GeoShapeUnion(pCoolingChU7,pMoveCenter3);
-
-	GeoBox* pCoolingCh8=new GeoBox(0.5*(8.6)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
-	HepGeom::Transform3D Center4=HepGeom::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh8->getXHalfLength()+27.)*CLHEP::mm, 0.0*CLHEP::mm, 0.0*CLHEP::mm);
-	GeoShapeShift* pMoveCenter4=new GeoShapeShift(pCoolingCh8, Center4);	
-	GeoShapeUnion* pCoolingChU9=new GeoShapeUnion(pCoolingChU8,pMoveCenter4);
-	
-	return  pCoolingChU9;
+  GeoBox* pCoolingCh4=new GeoBox(0.5*(18+14)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D UpLeft=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh4->getXHalfLength()+62.)*CLHEP::mm, 31.5*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveUpLeft=new GeoShapeShift(pCoolingCh4, UpLeft);	
+  GeoShapeUnion* pCoolingChU4=new GeoShapeUnion(pCoolingChU3,pMoveUpLeft);
+  
+  GeoTrf::RotateX3D Rot=GeoTrf::RotateX3D(CLHEP::pi);
+  GeoShapeShift* pRot=new GeoShapeShift(pCoolingChU4, Rot);		
+  GeoShapeUnion* pCoolingChU5=new GeoShapeUnion(pCoolingChU4,pRot);
+  
+  GeoBox* pCoolingCh5=new GeoBox(0.5*(25.99)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D Center1=GeoTrf::Translate3D(DETXSIDE*(-37.8+25.)*CLHEP::mm, 0.0*CLHEP::mm, 0.0*CLHEP::mm)*GeoTrf::RotateZ3D(-CLHEP::pi/2.);
+  GeoShapeShift* pMoveCenter1=new GeoShapeShift(pCoolingCh5, Center1);	
+  GeoShapeUnion* pCoolingChU6=new GeoShapeUnion(pCoolingChU5,pMoveCenter1);
+  
+  // Asymmetric (central) part
+  GeoBox* pCoolingCh6=new GeoBox(0.5*(48.2)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D Center2=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh6->getXHalfLength()+45.8)*CLHEP::mm, -12.*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveCenter2=new GeoShapeShift(pCoolingCh6, Center2);	
+  GeoShapeUnion* pCoolingChU7=new GeoShapeUnion(pCoolingChU6,pMoveCenter2);
+  
+  GeoBox* pCoolingCh7=new GeoBox(0.5*(18.6)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D Center3=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh7->getXHalfLength()+31.4)*CLHEP::mm, -6.*CLHEP::mm, 0.0*CLHEP::mm)*GeoTrf::RotateZ3D(+CLHEP::pi/4.01);
+  GeoShapeShift* pMoveCenter3=new GeoShapeShift(pCoolingCh7, Center3);	
+  GeoShapeUnion* pCoolingChU8=new GeoShapeUnion(pCoolingChU7,pMoveCenter3);
+  
+  GeoBox* pCoolingCh8=new GeoBox(0.5*(8.6)*CLHEP::mm, 0.5*4*CLHEP::mm, 0.5*4*CLHEP::mm);
+  GeoTrf::Transform3D Center4=GeoTrf::Translate3D(DETXSIDE*(-75.6/2.+pCoolingCh8->getXHalfLength()+27.)*CLHEP::mm, 0.0*CLHEP::mm, 0.0*CLHEP::mm);
+  GeoShapeShift* pMoveCenter4=new GeoShapeShift(pCoolingCh8, Center4);	
+  GeoShapeUnion* pCoolingChU9=new GeoShapeUnion(pCoolingChU8,pMoveCenter4);
+  
+  return  pCoolingChU9;
 }
 
 
 GeoShape* AFP_GeoModelFactory::CreateSolidSIDVacuumLayer()
 {
-	// sensitive layer of vacuum (very thin)
-	GeoBox* pVacuumSensor=new GeoBox(0.5*180.0*CLHEP::mm,0.5*160.0*CLHEP::mm,0.5*SID_VACUUMSENSORTHICKNESS);
-
-	return pVacuumSensor;
+  // sensitive layer of vacuum (very thin)
+  GeoBox* pVacuumSensor=new GeoBox(0.5*180.0*CLHEP::mm,0.5*160.0*CLHEP::mm,0.5*SID_VACUUMSENSORTHICKNESS);
+  
+  return pVacuumSensor;
 }
 
diff --git a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelTD.cxx b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelTD.cxx
index f260c07cfdd7a350bbf346733e4e36b71314cb55..974d5d13f8958fe15eec6bd3f00890e2bd2fd40e 100644
--- a/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelTD.cxx
+++ b/ForwardDetectors/AFP/AFP_GeoModel/src/AFP_GeoModelTD.cxx
@@ -26,6 +26,8 @@
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelUtilities/GeoModelTool.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelUtilities/GeoOpticalPhysVol.h"
 #include "GeoModelUtilities/GeoOpticalSurface.h"
@@ -199,7 +201,6 @@ void AFP_GeoModelFactory::AddSepRadLBar(const char* pszStationName, const int nQ
     double fd,falpha;
     const double fslimcut=TD_SLIMCUT;
     CLHEP::Hep3Vector vecCutShift;
-    CLHEP::HepRotation Rot;
     GeoBox* pSolAux;
     char szLabel[64];
     //G4LogicalBorderSurface* pSurface; --TODO
@@ -230,11 +231,11 @@ void AFP_GeoModelFactory::AddSepRadLBar(const char* pszStationName, const int nQ
     GeoShape* pSolVertBar=NULL;
     if(LQBarDims.bIs45degElbow){
         fd=LQBarDims.fVertBarXDim/sin(45.0*CLHEP::deg); //cut box dim
-        Rot=CLHEP::HepRotation(); Rot.rotateZ(45.0*CLHEP::deg);
-        vecCutShift=HepGeom::Vector3D<double>(0.5*LQBarDims.fVertBarXDim,0.5*fVertAirYDim,0.0*CLHEP::mm);
+	GeoTrf::RotateZ3D Rot(45.0*CLHEP::deg);
+	GeoTrf::Translation3D vecCutShift(0.5*LQBarDims.fVertBarXDim,0.5*fVertAirYDim,0.0*CLHEP::mm);
         pSolAux=new GeoBox(0.5*fd+fslimcut,0.5*fd+fslimcut,0.5*LQBarDims.fLBarZDim+fslimcut);
 
-        HepGeom::Transform3D TransCutWnd=HepGeom::Transform3D(Rot,vecCutShift);
+        GeoTrf::Transform3D TransCutWnd = vecCutShift*Rot;
         GeoShapeShift* pMoveCutWnd=new GeoShapeShift(pSolAux, TransCutWnd);
         GeoShapeSubtraction* pSolVertBar2=new GeoShapeSubtraction(pSolVertBar1, pMoveCutWnd);
         //G4SubtractionSolid* pSolVertBar2=new G4SubtractionSolid("SolVertBar2",pSolVertBar1,pSolAux,pRot,vecCutShift);
@@ -250,7 +251,7 @@ void AFP_GeoModelFactory::AddSepRadLBar(const char* pszStationName, const int nQ
     GeoOpticalPhysVol* pPhysVertBar=new GeoOpticalPhysVol(pLogVertBar);
     sprintf(szLabel,"%s_Q%i_VertBar[%i]",pszStationName,nQuarticID,nLQBarID);
     pPhysMotherVolume->add(new GeoNameTag(szLabel));
-    pPhysMotherVolume->add(new GeoTransform(LQBarTotTransform));
+    pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(LQBarTotTransform)));
     pPhysMotherVolume->add(pPhysVertBar);
     sprintf(szLabel,"%s_Q%i_VertAirLightGuideSurface[%i]",pszStationName,nQuarticID,nLQBarID);
     bsContainer->push_back(GeoBorderSurface(szLabel, pPhysVertBar, pPhysMotherVolume, m_pReflectionOptSurface));
@@ -272,10 +273,10 @@ void AFP_GeoModelFactory::AddSepRadLBar(const char* pszStationName, const int nQ
         HepGeom::Vector3D<double> vecX=vecA4+vecA5;
         vecCutShift=CLHEP::Hep3Vector(0.0*CLHEP::mm,-0.5*LQBarDims.fRadiatorLength,0.5*LQBarDims.fLBarZDim)+CLHEP::Hep3Vector(vecX);
 
-        Rot=CLHEP::HepRotation(); Rot.rotateX(-(90.0*CLHEP::deg-falpha));
+	GeoTrf::RotateX3D Rot(-(90.0*CLHEP::deg-falpha));
         pSolAux=new GeoBox(0.5*LQBarDims.fVertBarXDim+fslimcut,0.5*fd+fslimcut,0.5*fd+fslimcut);
 
-        HepGeom::Transform3D TransCutWnd=HepGeom::Transform3D(Rot,vecCutShift);
+        GeoTrf::Transform3D TransCutWnd=GeoTrf::Translation3D(vecCutShift.x(),vecCutShift.y(),vecCutShift.z())*Rot;
         GeoShapeShift* pMoveCutWnd=new GeoShapeShift(pSolAux, TransCutWnd);
         GeoShapeSubtraction* pSolRadiator2=new GeoShapeSubtraction(pSolRadiator1, pMoveCutWnd);
         //G4SubtractionSolid* pSolRadiator2=new G4SubtractionSolid("SolRadiator2",pSolRadiator1,pSolAux,pRot,vecCutShift);
@@ -299,7 +300,7 @@ void AFP_GeoModelFactory::AddSepRadLBar(const char* pszStationName, const int nQ
     GeoPhysVol* pPhysRadiator=new GeoPhysVol(pLogRadiator);
     sprintf(szLabel,"%s_Q%i_Radiator[%i]",pszStationName,nQuarticID,nLQBarID);
     pPhysMotherVolume->add(new GeoNameTag(szLabel));
-    pPhysMotherVolume->add(new GeoTransform(LQBarTotTransform*TransRadiator2VertBar));
+    pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(LQBarTotTransform*TransRadiator2VertBar)));
     pPhysMotherVolume->add(pPhysRadiator);
     sprintf(szLabel,"%s_Q%i_RadiatorSurface[%i]",pszStationName,nQuarticID,nLQBarID);
     bsContainer->push_back(GeoBorderSurface(szLabel, pPhysVertBar, pPhysMotherVolume, m_pOpticalSurface));
@@ -369,11 +370,11 @@ void AFP_GeoModelFactory::AddHorizontalArm(const char* pszStationName, const int
         HepGeom::Vector3D<double> vecA2=+0.5*fd*sqrt(2.0)*(HepGeom::RotateZ3D(+(45.0*CLHEP::deg-falpha))*HepGeom::Vector3D<double>(1.0,0.0,0.0)).unit();
         HepGeom::Vector3D<double> vecX=vecA1+vecA2;
         CLHEP::Hep3Vector vecCutShift=CLHEP::Hep3Vector(bAddSepPart? 0.5*fTaperPartXDim:0.5*LQBarDims.fHorzBarXDim,0.5*LQBarDims.fHorzBarYDim,0.0)+CLHEP::Hep3Vector(vecX);
-        CLHEP::HepRotation Rot=CLHEP::HepRotation(); Rot.rotateZ(falpha);
+	GeoTrf::RotateZ3D Rot(falpha);
 
         GeoBox* pSolAux=new GeoBox(0.5*fd,0.5*fd,0.5*LQBarDims.fLBarZDim+fslimcut);
 
-        HepGeom::Transform3D TransCutWnd=HepGeom::Transform3D(Rot,vecCutShift);
+        GeoTrf::Transform3D TransCutWnd = GeoTrf::Translation3D(vecCutShift.x(),vecCutShift.y(),vecCutShift.z())*Rot;
         GeoShapeShift* pMoveCutWnd=new GeoShapeShift(pSolAux, TransCutWnd);
         pSolHorzBar=new GeoShapeSubtraction(pSolHorzBar1, pMoveCutWnd);
         //pSolHorzBar=new G4SubtractionSolid("SolHorzBarWithTaper",pSolHorzBar1,pSolAux,pRot,vecCutShift);
@@ -395,7 +396,7 @@ void AFP_GeoModelFactory::AddHorizontalArm(const char* pszStationName, const int
         pPhysHorzBar=new GeoOpticalPhysVol(pLogHorzBar);
         sprintf(szLabel,"%s_Q%i_HorzBarTaper[%i]",pszStationName, nQuarticID, nLQBarID);
         pPhysMotherVolume->add(new GeoNameTag(szLabel));
-        pPhysMotherVolume->add(new GeoTransform(TransInMotherVolume));
+        pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume)));
         pPhysMotherVolume->add(pPhysHorzBar);
         sprintf(szLabel,"%s_Q%i_HorzTaperAirGuideSurface[%i]",pszStationName,nQuarticID,nLQBarID);
         bsContainer->push_back(GeoBorderSurface(szLabel, pPhysHorzBar, pPhysMotherVolume, (LQBarDims.eTaperMaterial==EM_VACUUM)? m_pReflectionOptSurface:m_pOpticalSurface));
@@ -411,7 +412,7 @@ void AFP_GeoModelFactory::AddHorizontalArm(const char* pszStationName, const int
         pPhysHorzBar=new GeoOpticalPhysVol(pLogHorzBar);
         sprintf(szLabel,"%s_Q%i_HorzBar[%i]",pszStationName, nQuarticID, nLQBarID);
         pPhysMotherVolume->add(new GeoNameTag(szLabel));
-        pPhysMotherVolume->add(new GeoTransform(TransInMotherVolume));
+        pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume)));
         pPhysMotherVolume->add(pPhysHorzBar);
         sprintf(szLabel,"%s_Q%i_HorzAirGuideSurface[%i]",pszStationName,nQuarticID,nLQBarID);
         bsContainer->push_back(GeoBorderSurface(szLabel, pPhysHorzBar, pPhysMotherVolume, m_pReflectionOptSurface));
@@ -429,7 +430,7 @@ void AFP_GeoModelFactory::AddHorizontalArm(const char* pszStationName, const int
         pPhysHorzBar=new GeoOpticalPhysVol(pLogHorzBar);
         sprintf(szLabel,"%s_Q%i_HorzBar[%i]",pszStationName, nQuarticID, nLQBarID);
         pPhysMotherVolume->add(new GeoNameTag(szLabel));
-        pPhysMotherVolume->add(new GeoTransform(TransInMotherVolume));
+        pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransInMotherVolume)));
         pPhysMotherVolume->add(pPhysHorzBar);
         if(LQBarDims.eType==ELBT_HYBRID || LQBarDims.eType==ELBT_HYBRIDMETALELBOW)
         {
@@ -468,7 +469,7 @@ void AFP_GeoModelFactory::AddSensor(const char* pszStationName, const int nQuart
         //sprintf(szLabel,"%s_Q%i_TDSensor[%i]",pszStationName,nQuarticID,nRowsCnt*i+j);
         sprintf(szLabel,"%s_Q%i_TDSensor[%i][%02i]",pszStationName,nQuarticID,nLQBarID,(m_CfgParams.tdcfg.nColsCnt>1)? nLQBarID:i);
         pPhysMotherVolume->add(new GeoNameTag(szLabel));
-        pPhysMotherVolume->add(new GeoTransform(TotTransform));
+        pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TotTransform)));
         pPhysMotherVolume->add(pPhysSensor);
         //TotTransform=TransInMotherVolume*HepGeom::TranslateZ3D(fFirstSensorZPos+i*fSensorLength);
         //sprintf(szLabel,"%s_Q%i_LogSensor[%i][%02i]",pszStationName,nQuarticID,nLQBarID,(m_LBarDimensions.nNumOfLBars>1)? nLQBarID:i);
diff --git a/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_ConfigParams.h b/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_ConfigParams.h
index b9bcb4b9303d5af68d12e9fb4fd392ae5ab35bcc..6ee1da52a210ac3e6fad09eedc4dfddb61b26175 100644
--- a/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_ConfigParams.h
+++ b/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_ConfigParams.h
@@ -10,8 +10,8 @@
 #include <vector>
 #include <string>
 
+#include "CLHEP/Geometry/Transform3D.h"
 #include "AFP_Geometry/AFP_constants.h"
-#include "GeoModelKernel/GeoTransform.h"
 
 enum eLQBarType { ELBT_UNDEFINED=0, ELBT_REGULAR=1, ELBT_METALELBOW=2, ELBT_AIRGUIDE=3, ELBT_HYBRID=4, ELBT_HYBRIDMETALELBOW=5, ELBT_ONEARM=6, ELBT_ONEARMAIRGUIDE=7, ELBT_MIKELBAR=8 };
 enum eSkinReflectivityMode { ESRM_SINGLE=1, ESRM_SPECTRAL1=2 };
diff --git a/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_Geometry.h b/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_Geometry.h
index 7069f519e0638ea5feff1037b81ea37e020c3965..22dafcf98a05c95318dc451cd5797ac4794072e8 100644
--- a/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_Geometry.h
+++ b/ForwardDetectors/AFP/AFP_Geometry/AFP_Geometry/AFP_Geometry.h
@@ -10,7 +10,6 @@
 #include "AFP_Geometry/AFP_ConfigParams.h"
 
 #include "CLHEP/Geometry/Point3D.h"
-#include "GeoModelKernel/GeoTransform.h"
 #include "AthenaKernel/CLASS_DEF.h"
 
 #include <list>
diff --git a/ForwardDetectors/AFP/AFP_Geometry/CMakeLists.txt b/ForwardDetectors/AFP/AFP_Geometry/CMakeLists.txt
index de155c59036042f10d2bdbbece3d013498f4ae9a..557ff779a12a09c1817c0bbae73808ab7a6a5ef8 100644
--- a/ForwardDetectors/AFP/AFP_Geometry/CMakeLists.txt
+++ b/ForwardDetectors/AFP/AFP_Geometry/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( AFP_Geometry )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           Control/StoreGate
                           GaudiKernel
@@ -23,6 +22,6 @@ atlas_add_library( AFP_Geometry
                    PUBLIC_HEADERS AFP_Geometry
                    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES AthenaKernel GaudiKernel PathResolver )
 
diff --git a/ForwardDetectors/ALFA/ALFA_GeoModel/CMakeLists.txt b/ForwardDetectors/ALFA/ALFA_GeoModel/CMakeLists.txt
index c0c2769378a0326dc50adc486f235bbf86058b3f..92f6f3c1654d6fce58ad41453d940d332334f44a 100644
--- a/ForwardDetectors/ALFA/ALFA_GeoModel/CMakeLists.txt
+++ b/ForwardDetectors/ALFA/ALFA_GeoModel/CMakeLists.txt
@@ -11,8 +11,8 @@ atlas_depends_on_subdirs( PUBLIC
                           Database/AthenaPOOL/AthenaPoolUtilities
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           ForwardDetectors/ALFA/ALFA_Geometry
                           PRIVATE
                           Control/StoreGate
@@ -21,13 +21,14 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( ALFA_GeoModel
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaKernel AthenaPoolUtilities GeoModelKernel GeoModelUtilities ALFA_Geometry StoreGateLib SGtests GaudiKernel )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel AthenaPoolUtilities GeoModelUtilities ALFA_Geometry StoreGateLib SGtests GaudiKernel )
 
 # Install files from the package:
 atlas_install_headers( ALFA_GeoModel )
diff --git a/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorFactory.cxx b/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorFactory.cxx
index d24ad6e620f8ace10c014d88e79b21160338ff44..e2c6f1d75ef3a32d3fa1c16961a65a30228ec912 100755
--- a/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorFactory.cxx
+++ b/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorFactory.cxx
@@ -14,6 +14,7 @@
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoLogVol.h"  
 #include "GeoModelKernel/GeoNameTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include "GeoModelKernel/GeoPhysVol.h" 
 #include "GeoModelKernel/GeoFullPhysVol.h"
@@ -21,6 +22,8 @@
 #include "GeoModelUtilities/StoredAlignX.h"
 #include "GeoModelUtilities/StoredPhysVol.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include "StoreGate/StoreGateSvc.h"
 #include "GaudiKernel/MsgStream.h"
 #include "AthenaKernel/getMessageSvc.h"
@@ -392,15 +395,15 @@ void ALFA_DetectorFactory::CreateAxes(GeoPhysVol* pMotherVolume)
 	GeoFullPhysVol* pPhysBoxZ=new GeoFullPhysVol(pLogBoxZ);
 	
 	pMotherVolume->add(new GeoNameTag("BoxX"));
-	pMotherVolume->add(new GeoTransform(HepGeom::Translate3D(0, 0, 0)));
+	pMotherVolume->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 	pMotherVolume->add(pPhysBoxX);
 	
 	pMotherVolume->add(new GeoNameTag("BoxY"));
-	pMotherVolume->add(new GeoTransform(HepGeom::Translate3D(0, 0, 0)));
+	pMotherVolume->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 	pMotherVolume->add(pPhysBoxY);
 	
 	pMotherVolume->add(new GeoNameTag("BoxZ"));
-	pMotherVolume->add(new GeoTransform(HepGeom::Translate3D(0, 0, 0)));
+	pMotherVolume->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 	pMotherVolume->add(pPhysBoxZ);
 	
 	//helper box
@@ -416,7 +419,6 @@ void ALFA_DetectorFactory::CreateAxes(GeoPhysVol* pMotherVolume)
 void ALFA_DetectorFactory::AddBeamPipeInStation(GeoFullPhysVol* pPhysStation, const char* pszStationLabel)
 {
 	char szLabel[32];
-	HepGeom::Transform3D TransTube;
 
 	double fzs=2*ALFASTATIONHSIZEZ;
 	double fzd=INNERDETZSPACE;
@@ -429,15 +431,13 @@ void ALFA_DetectorFactory::AddBeamPipeInStation(GeoFullPhysVol* pPhysStation, co
 	GeoFullPhysVol* pPhysTube=new GeoFullPhysVol(pLogTube);
 
 	sprintf(szLabel,"%s_IBP01",pszStationLabel);
-	TransTube=HepGeom::TranslateZ3D(fZPos);
 	pPhysStation->add(new GeoNameTag(szLabel));
-	pPhysStation->add(new GeoTransform(TransTube));
+	pPhysStation->add(new GeoTransform(GeoTrf::TranslateZ3D(fZPos)));
 	pPhysStation->add(pPhysTube);
 
 	sprintf(szLabel,"%s_IBP02",pszStationLabel);
-	TransTube=HepGeom::TranslateZ3D(-fZPos);
 	pPhysStation->add(new GeoNameTag(szLabel));
-	pPhysStation->add(new GeoTransform(TransTube));
+	pPhysStation->add(new GeoTransform(GeoTrf::TranslateZ3D(-fZPos)));
 	pPhysStation->add(pPhysTube);
 }
 
@@ -455,7 +455,7 @@ void ALFA_DetectorFactory::AddGlobalVacuumSensorInStation(GeoFullPhysVol *pPhysS
 	GeoLogVol* pLogGVS=new GeoLogVol(szLabel,pSolGVS,m_MapMaterials[string("std::Vacuum")]);
 	GeoFullPhysVol* pPhysGVS=new GeoFullPhysVol(pLogGVS);
 
-	HepGeom::Transform3D TransGVS=HepGeom::TranslateZ3D(fZOffset);
+	GeoTrf::TranslateZ3D TransGVS(fZOffset);
 	pPhysStation->add(new GeoNameTag(szLabel));
 	pPhysStation->add(new GeoTransform(TransGVS));
 	pPhysStation->add(pPhysGVS);
@@ -483,7 +483,7 @@ void ALFA_DetectorFactory::ConstructAlfaStations(map<eAStationName,ALFAPHYSVOLUM
 	pPhysAlfaBox=new GeoFullPhysVol(pLogAlfaBox);
 	//TransAlfaBox=HepGeom::Translate3D(AStationParams.IdealMainPoint[0], AStationParams.IdealMainPoint[1], AStationParams.IdealMainPoint[2]);
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(AStationParams.ASTransformInATLAS));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(AStationParams.ASTransformInATLAS)));
 	pWorld->add(pPhysAlfaBox);
 	m_pDetectorManager->addTreeTop(pPhysAlfaBox);
 	if(m_Config.bAddIBP) AddBeamPipeInStation(pPhysAlfaBox,AStationParams.szLabel);
@@ -501,7 +501,7 @@ void ALFA_DetectorFactory::ConstructAlfaStations(map<eAStationName,ALFAPHYSVOLUM
 	pPhysAlfaBox=new GeoFullPhysVol(pLogAlfaBox);
 	//TransAlfaBox=HepGeom::Translate3D(AStationParams.IdealMainPoint[0], AStationParams.IdealMainPoint[1], AStationParams.IdealMainPoint[2]);
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(AStationParams.ASTransformInATLAS));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(AStationParams.ASTransformInATLAS)));
 	pWorld->add(pPhysAlfaBox);
 	m_pDetectorManager->addTreeTop(pPhysAlfaBox);
 	if(m_Config.bAddIBP) AddBeamPipeInStation(pPhysAlfaBox,AStationParams.szLabel);
@@ -519,7 +519,7 @@ void ALFA_DetectorFactory::ConstructAlfaStations(map<eAStationName,ALFAPHYSVOLUM
 	pPhysAlfaBox=new GeoFullPhysVol(pLogAlfaBox);
 	//TransAlfaBox=HepGeom::Translate3D(AStationParams.IdealMainPoint[0], AStationParams.IdealMainPoint[1], AStationParams.IdealMainPoint[2]);
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(AStationParams.ASTransformInATLAS));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(AStationParams.ASTransformInATLAS)));
 	pWorld->add(pPhysAlfaBox);
 	m_pDetectorManager->addTreeTop(pPhysAlfaBox);
 	if(m_Config.bAddIBP) AddBeamPipeInStation(pPhysAlfaBox,AStationParams.szLabel);
@@ -537,7 +537,7 @@ void ALFA_DetectorFactory::ConstructAlfaStations(map<eAStationName,ALFAPHYSVOLUM
 	pPhysAlfaBox=new GeoFullPhysVol(pLogAlfaBox);
 	//TransAlfaBox=HepGeom::Translate3D(AStationParams.IdealMainPoint[0], AStationParams.IdealMainPoint[1], AStationParams.IdealMainPoint[2]);
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(AStationParams.ASTransformInATLAS));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(AStationParams.ASTransformInATLAS)));
 	pWorld->add(pPhysAlfaBox);
 	m_pDetectorManager->addTreeTop(pPhysAlfaBox);
 	if(m_Config.bAddIBP) AddBeamPipeInStation(pPhysAlfaBox,AStationParams.szLabel);
@@ -572,11 +572,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]+ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH);
 	TransTube=HepGeom::TranslateZ3D(ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe01: hlength="<<ALFAEDGEBEAMPIPEHLENGTH<<", z="<<AStationParams01.IdealMainPoint[2]+ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH<<endmsg;
@@ -595,11 +595,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-fInnerTubeHLength);
 	TransTube=HepGeom::TranslateZ3D(-ALFASTATIONHSIZEZ-fInnerTubeHLength)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe02: hlength="<<fInnerTubeHLength<<", z="<<AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-fInnerTubeHLength<<endmsg;
@@ -616,11 +616,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH);
 	TransTube=HepGeom::TranslateZ3D(-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe03: hlength="<<ALFAEDGEBEAMPIPEHLENGTH<<", z="<<AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH<<endmsg;
@@ -637,11 +637,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]+ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH);
 	TransTube=HepGeom::TranslateZ3D(+ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe04: hlength="<<ALFAEDGEBEAMPIPEHLENGTH<<", z="<<AStationParams01.IdealMainPoint[2]+ALFASTATIONHSIZEZ+ALFAEDGEBEAMPIPEHLENGTH<<endmsg;
@@ -660,11 +660,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-fInnerTubeHLength);
 	TransTube=HepGeom::TranslateZ3D(-ALFASTATIONHSIZEZ-fInnerTubeHLength)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe02: hlength="<<fInnerTubeHLength<<", z="<<AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-fInnerTubeHLength<<endmsg;
@@ -681,11 +681,11 @@ void ALFA_DetectorFactory::ConstructBeampipe(GeoPhysVol* pWorld)
 	//TransTube=HepGeom::Translate3D(0.0*CLHEP::mm, 0.0*CLHEP::mm, AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH);
 	TransTube=HepGeom::TranslateZ3D(-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH)*AStationParams01.ASTransformInATLAS;
 	pWorld->add(new GeoNameTag(szLabel));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube);
 	m_pDetectorManager->addTreeTop(pPhysTube);
 	pWorld->add(new GeoNameTag(szLabel2));
-	pWorld->add(new GeoTransform(TransTube));
+	pWorld->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransTube)));
 	pWorld->add(pPhysTube2);
 	m_pDetectorManager->addTreeTop(pPhysTube2);
 	LogStream<<MSG::INFO<<"ALFA_Beampipe06: hlength="<<ALFAEDGEBEAMPIPEHLENGTH<<", z="<<AStationParams01.IdealMainPoint[2]-ALFASTATIONHSIZEZ-ALFAEDGEBEAMPIPEHLENGTH<<endmsg;
@@ -775,8 +775,8 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 		pPhysAlfaBox=mapActiveStations[RPosParams.eASName].pPhysVolume;
 		TransAlfaBox=mapActiveStations[RPosParams.eASName].Transform;
 
-		pAlTransRPBox=new GeoAlignableTransform(RPosParams.RPTransformInStation);
-		pAlTransDetInRPMainPoint=new GeoAlignableTransform(RPosParams.DetTransformInMainPoint);
+		pAlTransRPBox=new GeoAlignableTransform(Amg::CLHEPTransformToEigen(RPosParams.RPTransformInStation));
+		pAlTransDetInRPMainPoint=new GeoAlignableTransform(Amg::CLHEPTransformToEigen(RPosParams.DetTransformInMainPoint));
 
 		//create Roman pot ----------------------------------------------------------------------------
 		sprintf(szLabel,"LogRPBox[%02d]",eRPName);
@@ -797,7 +797,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 		sprintf(szLabel,"RPAir[%02d]",eRPName);
 		TransRPAir=HepGeom::Translate3D(0.0,0.0,0.0);
 		pPhysRPBox->add(new GeoNameTag(szLabel));
-		pPhysRPBox->add(new GeoTransform(TransRPAir));
+		pPhysRPBox->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransRPAir)));
 		pPhysRPBox->add(pPhysRPAir);
 		//LogStream<<MSG::INFO<<"MARK4"<<endmsg;
 
@@ -808,7 +808,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 		sprintf(szLabel,"Trigger[%02d]",eRPName);
 		pPhysRPAir->add(new GeoNameTag(szLabel));
 		pPhysRPAir->add(pAlTransDetInRPMainPoint);
-		pPhysRPAir->add(new GeoTransform(HepGeom::Translate3D(-22.0*CLHEP::mm,-31.325*CLHEP::mm,11.3*CLHEP::mm)));
+		pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(-22.0*CLHEP::mm,-31.325*CLHEP::mm,11.3*CLHEP::mm)));
 		pPhysRPAir->add(pPhysObj);
 		//LogStream<<MSG::INFO<<"MARK5"<<endmsg;
 
@@ -819,7 +819,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 		sprintf(szLabel,"RPSupport[%02d]",eRPName);
 		pPhysRPAir->add(new GeoNameTag(szLabel));
 		pPhysRPAir->add(pAlTransDetInRPMainPoint);
-		pPhysRPAir->add(new GeoTransform(HepGeom::Translate3D(0.0*CLHEP::mm,85.475*CLHEP::mm,-28.5*CLHEP::mm)));
+		pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,85.475*CLHEP::mm,-28.5*CLHEP::mm)));
 		pPhysRPAir->add(pPhysObj);
 		//LogStream<<MSG::INFO<<"MARK6"<<endmsg;
 
@@ -831,7 +831,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 			sprintf(szLabel,"G10Substrate[%02d][%d]",eRPName,i);
 			pPhysRPAir->add(new GeoNameTag(szLabel));
 			pPhysRPAir->add(pAlTransDetInRPMainPoint);
-			pPhysRPAir->add(new GeoTransform(HepGeom::Translate3D(ALFA_stagger[i]*CLHEP::mm,-27.525*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)*HepGeom::RotateX3D(-90.0*CLHEP::deg)));
+			pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(ALFA_stagger[i]*CLHEP::mm,-27.525*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)*GeoTrf::RotateX3D(-90.0*CLHEP::deg)));
 			pPhysRPAir->add(pPhysObj);
 		}
 
@@ -843,7 +843,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 			sprintf(szLabel,"RPSupport[%02d][%d]",eRPName,i);
 			pPhysRPAir->add(new GeoNameTag(szLabel));
 			pPhysRPAir->add(pAlTransDetInRPMainPoint);
-			pPhysRPAir->add(new GeoTransform(HepGeom::Translate3D(0.0*CLHEP::mm,5.975*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)));
+			pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,5.975*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)));
 			pPhysRPAir->add(pPhysObj);
 		}
 		//LogStream<<MSG::INFO<<"MARK7"<<endmsg;
@@ -863,7 +863,7 @@ void ALFA_DetectorFactory::create(GeoPhysVol* pWorld)
 			sprintf(szLabel,"ODPlate[%02d][%d]",eRPName,i);
 			pPhysRPAir->add(new GeoNameTag(szLabel));
 			pPhysRPAir->add(pAlTransDetInRPMainPoint);
-			pPhysRPAir->add(new GeoTransform(HepGeom::Translate3D(0.0*CLHEP::mm,-0.175*CLHEP::mm,(15+i*2)*CLHEP::mm)));
+			pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,-0.175*CLHEP::mm,(15+i*2)*CLHEP::mm)));
 			pPhysRPAir->add(pPhysObj);
 		}
 		//LogStream<<MSG::INFO<<"MARK9"<<endmsg;
@@ -909,47 +909,47 @@ GeoShape* ALFA_DetectorFactory::CreateSolidRP()
 	GeoBox* RPbox2 = new GeoBox(21*CLHEP::mm,5.425*CLHEP::mm,7.5*CLHEP::mm);
 	GeoBox* RPbox3 = new GeoBox(22*CLHEP::mm,1*CLHEP::mm,8.5*CLHEP::mm);
 
-	HepGeom::Transform3D RP_Move1= HepGeom::Translate3D(0, 4.425*CLHEP::mm, 0);
+	GeoTrf::Transform3D RP_Move1= GeoTrf::Translate3D(0, 4.425*CLHEP::mm, 0);
 	GeoShapeShift * mowe1 = new GeoShapeShift(RPbox3,RP_Move1);
 	GeoShapeUnion * RPsemi1 = new GeoShapeUnion(RPbox2, mowe1);
 
-	HepGeom::Transform3D RP_Move2= HepGeom::Translate3D( 38.5*CLHEP::mm, -35.25*CLHEP::mm, 14.5*CLHEP::mm);
+	GeoTrf::Transform3D RP_Move2= GeoTrf::Translate3D( 38.5*CLHEP::mm, -35.25*CLHEP::mm, 14.5*CLHEP::mm);
 	GeoShapeShift * mowe2 = new GeoShapeShift(RPsemi1,RP_Move2);
 	GeoShapeUnion * RPsemi2 = new GeoShapeUnion(RPbox1, mowe2);
 
-	HepGeom::Transform3D RP_Move3= HepGeom::Translate3D(-38.5*CLHEP::mm, -35.25*CLHEP::mm, 14.5*CLHEP::mm);
+	GeoTrf::Transform3D RP_Move3= GeoTrf::Translate3D(-38.5*CLHEP::mm, -35.25*CLHEP::mm, 14.5*CLHEP::mm);
 	GeoShapeShift * mowe3 = new GeoShapeShift(RPsemi1,RP_Move3);
 	GeoShapeUnion * RPsemi3 = new GeoShapeUnion(RPsemi2, mowe3);
 
 	GeoTube* RPtube1 = new GeoTube(0*CLHEP::mm,74*CLHEP::mm,26.675*CLHEP::mm);
 	GeoTube* RPtube2 = new GeoTube(0*CLHEP::mm,126.5*CLHEP::mm,9.875*CLHEP::mm);
 
-	HepGeom::Transform3D RP_Move4= HepGeom::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -36.55*CLHEP::mm);
+	GeoTrf::Transform3D RP_Move4= GeoTrf::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -36.55*CLHEP::mm);
 	GeoShapeShift * mowe4 = new GeoShapeShift(RPtube2,RP_Move4);
 	GeoShapeUnion * RPsemi4 = new GeoShapeUnion(RPtube1, mowe4);
 
 	GeoBox* RPbox4 = new GeoBox(104*CLHEP::mm,104*CLHEP::mm,9.875*CLHEP::mm);
 	GeoBox* RPbox5 = new GeoBox(131.75*CLHEP::mm,131.75*CLHEP::mm,22.5*CLHEP::mm);
 
-	HepGeom::Transform3D RP_Move5= HepGeom::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -56.3*CLHEP::mm);
+	GeoTrf::Transform3D RP_Move5= GeoTrf::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -56.3*CLHEP::mm);
 	GeoShapeShift * mowe5 = new GeoShapeShift(RPbox4,RP_Move5);
 	GeoShapeUnion * RPsemi5 = new GeoShapeUnion(RPsemi4, mowe5);
 
-	HepGeom::Transform3D RP_Move6= HepGeom::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -88.675*CLHEP::mm);
+	GeoTrf::Transform3D RP_Move6= GeoTrf::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, -88.675*CLHEP::mm);
 	GeoShapeShift * mowe6 = new GeoShapeShift(RPbox5,RP_Move6);
 	GeoShapeUnion * RPsemi6 = new GeoShapeUnion(RPsemi5, mowe6);
 
-	HepGeom::Transform3D RP_MoveRot7= HepGeom::Translate3D(0*CLHEP::mm, 56.5*CLHEP::mm, -8.5*CLHEP::mm)*HepGeom::RotateX3D(90*CLHEP::deg);
+	GeoTrf::Transform3D RP_MoveRot7= GeoTrf::Translate3D(0*CLHEP::mm, 56.5*CLHEP::mm, -8.5*CLHEP::mm)*GeoTrf::RotateX3D(90*CLHEP::deg);
 	GeoShapeShift * mowe7 = new GeoShapeShift(RPsemi6,RP_MoveRot7);
 	GeoShapeUnion * RPsemi7 = new GeoShapeUnion(RPsemi3, mowe7);
 
 	GeoBox* RPbox6 = new GeoBox(16.97*CLHEP::mm,16.97*CLHEP::mm,0.75*CLHEP::mm);
 
-	HepGeom::Transform3D RP_MoveRot8= HepGeom::Translate3D(0*CLHEP::mm, -21.525*CLHEP::mm, 22.25*CLHEP::mm)*HepGeom::RotateZ3D(45*CLHEP::deg);
+	GeoTrf::Transform3D RP_MoveRot8= GeoTrf::Translate3D(0*CLHEP::mm, -21.525*CLHEP::mm, 22.25*CLHEP::mm)*GeoTrf::RotateZ3D(45*CLHEP::deg);
 	GeoShapeShift * mowe8 = new GeoShapeShift(RPbox6,RP_MoveRot8);
 	GeoShapeSubtraction * RPsemi8 = new GeoShapeSubtraction(RPsemi7, mowe8);
 
-	HepGeom::Transform3D RP_MoveRot9= HepGeom::Translate3D(0*CLHEP::mm, -21.525*CLHEP::mm, -22.25*CLHEP::mm)*HepGeom::RotateZ3D(45*CLHEP::deg);
+	GeoTrf::Transform3D RP_MoveRot9= GeoTrf::Translate3D(0*CLHEP::mm, -21.525*CLHEP::mm, -22.25*CLHEP::mm)*GeoTrf::RotateZ3D(45*CLHEP::deg);
 	GeoShapeShift * mowe9 = new GeoShapeShift(RPbox6,RP_MoveRot9);
 	GeoShapeSubtraction * shapeRP = new GeoShapeSubtraction(RPsemi8, mowe9);
 		
@@ -964,23 +964,23 @@ GeoShape* ALFA_DetectorFactory::CreateSolidAir()
 	GeoBox* RP_Airbox4 = new GeoBox(20*CLHEP::mm,5.675*CLHEP::mm,6.5*CLHEP::mm);
 	GeoTube* RP_Airtube1 = new GeoTube(0*CLHEP::mm,69*CLHEP::mm,65.425*CLHEP::mm);
 
-	HepGeom::Transform3D RP_Air_Move1= HepGeom::Translate3D(0,31.325*CLHEP::mm, 0);
+	GeoTrf::Transform3D RP_Air_Move1= GeoTrf::Translate3D(0,31.325*CLHEP::mm, 0);
 	GeoShapeShift * mowe1 = new GeoShapeShift(RP_Airbox2,RP_Air_Move1);
 	GeoShapeUnion * RP_Airsemi1 = new GeoShapeUnion(RP_Airbox1, mowe1);
 
-	HepGeom::Transform3D RP_Air_Move2= HepGeom::Translate3D(0,-28.75*CLHEP::mm, 0);
+	GeoTrf::Transform3D RP_Air_Move2= GeoTrf::Translate3D(0,-28.75*CLHEP::mm, 0);
 	GeoShapeShift * mowe2 = new GeoShapeShift(RP_Airbox3,RP_Air_Move2);
 	GeoShapeUnion * RP_Airsemi2 = new GeoShapeUnion(RP_Airsemi1, mowe2);
 
-	HepGeom::Transform3D RP_Air_Move3= HepGeom::Translate3D( 38.5*CLHEP::mm,-33.5*CLHEP::mm,14.5*CLHEP::mm);
+	GeoTrf::Transform3D RP_Air_Move3= GeoTrf::Translate3D( 38.5*CLHEP::mm,-33.5*CLHEP::mm,14.5*CLHEP::mm);
 	GeoShapeShift * mowe3 = new GeoShapeShift(RP_Airbox4,RP_Air_Move3);
 	GeoShapeUnion * RP_Airsemi3 = new GeoShapeUnion(RP_Airsemi2, mowe3);
 
-	HepGeom::Transform3D RP_Air_Move4= HepGeom::Translate3D(-38.5*CLHEP::mm,-33.5*CLHEP::mm,14.5*CLHEP::mm);
+	GeoTrf::Transform3D RP_Air_Move4= GeoTrf::Translate3D(-38.5*CLHEP::mm,-33.5*CLHEP::mm,14.5*CLHEP::mm);
 	GeoShapeShift * mowe4 = new GeoShapeShift(RP_Airbox4,RP_Air_Move4);
 	GeoShapeUnion * RP_Airsemi4 = new GeoShapeUnion(RP_Airsemi3, mowe4);
 
-	HepGeom::Transform3D RP_Air_MoveRot5= HepGeom::Translate3D(0*CLHEP::mm,100.25*CLHEP::mm, -8.5*CLHEP::mm)*HepGeom::RotateX3D(90*CLHEP::deg);
+	GeoTrf::Transform3D RP_Air_MoveRot5= GeoTrf::Translate3D(0*CLHEP::mm,100.25*CLHEP::mm, -8.5*CLHEP::mm)*GeoTrf::RotateX3D(90*CLHEP::deg);
 	GeoShapeShift * mowe5 = new GeoShapeShift(RP_Airtube1,RP_Air_MoveRot5);
 	GeoShapeUnion * shapeRP_Air = new GeoShapeUnion(RP_Airsemi4, mowe5);
 		
@@ -993,19 +993,19 @@ GeoShape* ALFA_DetectorFactory::CreateSolidTrigger()
 	GeoBox* ALFA_Trigbox2 = new GeoBox(15.75*CLHEP::mm,15.75*CLHEP::mm,3*CLHEP::mm);
 	GeoBox* ALFA_Trigbox3 = new GeoBox(3*CLHEP::mm,7.5*CLHEP::mm,1.5*CLHEP::mm);
 
-	HepGeom::Transform3D ALFA_Trig_MoveRot1= HepGeom::Translate3D(17.235*CLHEP::mm, -17.235*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(45*CLHEP::deg);
+	GeoTrf::Transform3D ALFA_Trig_MoveRot1= GeoTrf::Translate3D(17.235*CLHEP::mm, -17.235*CLHEP::mm, 0*CLHEP::mm)*GeoTrf::RotateZ3D(45*CLHEP::deg);
 	GeoShapeShift * mowe1 = new GeoShapeShift(ALFA_Trigbox2, ALFA_Trig_MoveRot1);
 	GeoShapeSubtraction * ALFA_Trigsemi1 = new GeoShapeSubtraction(ALFA_Trigbox1, mowe1);
 
-	HepGeom::Transform3D ALFA_Trig_Move2= HepGeom::Translate3D(0*CLHEP::mm,0*CLHEP::mm, 3.5*CLHEP::mm);
+	GeoTrf::Transform3D ALFA_Trig_Move2= GeoTrf::Translate3D(0*CLHEP::mm,0*CLHEP::mm, 3.5*CLHEP::mm);
 	GeoShapeShift * mowe2 = new GeoShapeShift(ALFA_Trigsemi1,ALFA_Trig_Move2);
 	GeoShapeUnion * ALFA_Trigsemi2 = new GeoShapeUnion(ALFA_Trigsemi1, mowe2);
 
-	HepGeom::Transform3D ALFA_Trig_Move3= HepGeom::Translate3D(44*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
+	GeoTrf::Transform3D ALFA_Trig_Move3= GeoTrf::Translate3D(44*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
 	GeoShapeShift * mowe3 = new GeoShapeShift(ALFA_Trigbox3,ALFA_Trig_Move3);
 	GeoShapeUnion * ALFA_Trigsemi3 = new GeoShapeUnion(ALFA_Trigbox3, mowe3);
 
-	HepGeom::Transform3D ALFA_Trig_MoveRot4= HepGeom::Translate3D(22*CLHEP::mm, 10.424*CLHEP::mm, -7.6*CLHEP::mm)*HepGeom::RotateZ3D(-45*CLHEP::deg);
+	GeoTrf::Transform3D ALFA_Trig_MoveRot4= GeoTrf::Translate3D(22*CLHEP::mm, 10.424*CLHEP::mm, -7.6*CLHEP::mm)*GeoTrf::RotateZ3D(-45*CLHEP::deg);
 	GeoShapeShift * mowe4 = new GeoShapeShift(ALFA_Trigsemi2,ALFA_Trig_MoveRot4);
 	GeoShapeUnion * shapeALFA_Trigger = new GeoShapeUnion(ALFA_Trigsemi3, mowe4);
 	
@@ -1019,15 +1019,15 @@ GeoShape* ALFA_DetectorFactory::CreateSolidRPSupport()
 	GeoBox* RP_Supbox3 = new GeoBox(18*CLHEP::mm, 5*CLHEP::mm,18*CLHEP::mm);
 	GeoBox* RP_Supbox4 = new GeoBox(18*CLHEP::mm,3.5*CLHEP::mm,18*CLHEP::mm);
 
-	HepGeom::Transform3D RP_Sup_Move1= HepGeom::Translate3D(0, 42*CLHEP::mm, 8*CLHEP::mm);
+	GeoTrf::Transform3D RP_Sup_Move1= GeoTrf::Translate3D(0, 42*CLHEP::mm, 8*CLHEP::mm);
 	GeoShapeShift * mowe1 = new GeoShapeShift(RP_Supbox2, RP_Sup_Move1);
 	GeoShapeUnion * RP_Supsemi1 = new GeoShapeUnion(RP_Supbox1, mowe1);
 
-	HepGeom::Transform3D RP_Sup_Move2= HepGeom::Translate3D(0, 56*CLHEP::mm, 20*CLHEP::mm);
+	GeoTrf::Transform3D RP_Sup_Move2= GeoTrf::Translate3D(0, 56*CLHEP::mm, 20*CLHEP::mm);
 	GeoShapeShift * mowe2 = new GeoShapeShift(RP_Supbox3, RP_Sup_Move2);
 	GeoShapeUnion * RP_Supsemi2 = new GeoShapeUnion(RP_Supsemi1, mowe2);
 
-	HepGeom::Transform3D RP_Sup_Move3= HepGeom::Translate3D(0, 64.5*CLHEP::mm, 20*CLHEP::mm);
+	GeoTrf::Transform3D RP_Sup_Move3= GeoTrf::Translate3D(0, 64.5*CLHEP::mm, 20*CLHEP::mm);
 	GeoShapeShift * mowe3 = new GeoShapeShift(RP_Supbox4, RP_Sup_Move3);
 	GeoShapeUnion * shapeRP_Support = new GeoShapeUnion(RP_Supsemi2, mowe3);
 	
@@ -1040,11 +1040,11 @@ GeoShape* ALFA_DetectorFactory::CreateSolidG10Shapes()
 	GeoTrd* G10trd2 = new GeoTrd( 30*CLHEP::mm, 9.5*CLHEP::mm, 0.15*CLHEP::mm, 0.15*CLHEP::mm, 10.25*CLHEP::mm);
 	GeoBox* G10box1 = new GeoBox( 30*CLHEP::mm, 0.15*CLHEP::mm, 3.75*CLHEP::mm);
 
-	HepGeom::Transform3D G10_Move1= HepGeom::Translate3D(0, 0, 4.75*CLHEP::mm);
+	GeoTrf::Transform3D G10_Move1= GeoTrf::Translate3D(0, 0, 4.75*CLHEP::mm);
 	GeoShapeShift* mowe1 = new GeoShapeShift(G10box1, G10_Move1);
 	GeoShapeUnion* G10_Subsemi1 = new GeoShapeUnion(G10trd1, mowe1);
 
-	HepGeom::Transform3D G10_Move2= HepGeom::Translate3D(0, 0, 18.75*CLHEP::mm);
+	GeoTrf::Transform3D G10_Move2= GeoTrf::Translate3D(0, 0, 18.75*CLHEP::mm);
 	GeoShapeShift* mowe2 = new GeoShapeShift(G10trd2, G10_Move2);
 	GeoShapeUnion* shapeG10_Substrate = new GeoShapeUnion(G10_Subsemi1, mowe2);
 	
@@ -1061,20 +1061,20 @@ map<int,GeoShape*>* ALFA_DetectorFactory::CreateSolidTiPlates()
 	GeoBox* TiPlate_box1 = new GeoBox(16*CLHEP::mm,120*CLHEP::mm,0.75*CLHEP::mm);
 	GeoBox* TiPlate_box2 = new GeoBox(19.9793*CLHEP::mm,19.9793*CLHEP::mm,2*CLHEP::mm);
 
-	HepGeom::Transform3D TiPlate_Move1= HepGeom::Translate3D(0, 69*CLHEP::mm, 0);
+	GeoTrf::Transform3D TiPlate_Move1= GeoTrf::Translate3D(0, 69*CLHEP::mm, 0);
 	GeoShapeShift * mowe1 = new GeoShapeShift(TiPlate_Holder,TiPlate_Move1);
 	GeoShapeUnion * TiPlatesemi1 = new GeoShapeUnion(TiPlate_Substr, mowe1);
 
 	for(i=0; i<ALFA_Nb_Plates; i++){
-		HepGeom::Transform3D TiPlate_MoveRot2 = HepGeom::Translate3D(ALFA_stagger[i]*CLHEP::mm, -26.872*CLHEP::mm, 1*CLHEP::mm)*HepGeom::RotateZ3D( 45*CLHEP::deg);
-		HepGeom::Transform3D TiPlate_MoveRot3 = HepGeom::Translate3D(ALFA_stagger[i]*CLHEP::mm, -26.872*CLHEP::mm,-1*CLHEP::mm)*HepGeom::RotateZ3D(-45*CLHEP::deg);
+		GeoTrf::Transform3D TiPlate_MoveRot2 = GeoTrf::Translate3D(ALFA_stagger[i]*CLHEP::mm, -26.872*CLHEP::mm, 1*CLHEP::mm)*GeoTrf::RotateZ3D( 45*CLHEP::deg);
+		GeoTrf::Transform3D TiPlate_MoveRot3 = GeoTrf::Translate3D(ALFA_stagger[i]*CLHEP::mm, -26.872*CLHEP::mm,-1*CLHEP::mm)*GeoTrf::RotateZ3D(-45*CLHEP::deg);
 
 		GeoShapeShift * mowe2 = new GeoShapeShift(TiPlate_box1, TiPlate_MoveRot2);
 		GeoShapeShift * mowe3 = new GeoShapeShift(TiPlate_box1, TiPlate_MoveRot3);
 		GeoShapeSubtraction * TiPlatesemi2 = new GeoShapeSubtraction(TiPlatesemi1,mowe2);
 		GeoShapeSubtraction * TiPlatesemi3 = new GeoShapeSubtraction(TiPlatesemi2,mowe3);
 
-		HepGeom::Transform3D TiPlate_MoveRot4 = HepGeom::Translate3D(ALFA_stagger[i]*CLHEP::mm, -32.5*CLHEP::mm,0*CLHEP::mm)*HepGeom::RotateZ3D(-45*CLHEP::deg);
+		GeoTrf::Transform3D TiPlate_MoveRot4 = GeoTrf::Translate3D(ALFA_stagger[i]*CLHEP::mm, -32.5*CLHEP::mm,0*CLHEP::mm)*GeoTrf::RotateZ3D(-45*CLHEP::deg);
 		GeoShapeShift * mowe4 = new GeoShapeShift(TiPlate_box2, TiPlate_MoveRot4);
 		GeoShapeSubtraction* shapeTi_Plate = new GeoShapeSubtraction(TiPlatesemi3, mowe4);
 
@@ -1093,11 +1093,11 @@ map<int,GeoShape*>* ALFA_DetectorFactory::CreateSolidODPlates()
 	GeoBox* OD_Tibox2 = new GeoBox(10*CLHEP::mm,36.5*CLHEP::mm,1*CLHEP::mm);
 	GeoBox* OD_Tibox3 = new GeoBox(19*CLHEP::mm,21.5*CLHEP::mm,2*CLHEP::mm);
 
-	HepGeom::Transform3D OD_Move01= HepGeom::Translate3D(0, 75.15*CLHEP::mm, 0);
+	GeoTrf::Transform3D OD_Move01= GeoTrf::Translate3D(0, 75.15*CLHEP::mm, 0);
 	GeoShapeShift * mowe01 = new GeoShapeShift(OD_Tibox2,OD_Move01);
 	GeoShapeUnion * OD_Tisemi01 = new GeoShapeUnion(OD_Tibox1, mowe01);
 
-	HepGeom::Transform3D OD_Move02= HepGeom::Translate3D(0, -19.15*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
+	GeoTrf::Transform3D OD_Move02= GeoTrf::Translate3D(0, -19.15*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
 	GeoShapeShift * mowe02 = new GeoShapeShift(OD_Tibox3, OD_Move02);
 	GeoShapeSubtraction * OD_Tisemi02 = new GeoShapeSubtraction(OD_Tisemi01, mowe02);
 
@@ -1107,52 +1107,52 @@ map<int,GeoShape*>* ALFA_DetectorFactory::CreateSolidODPlates()
 	GeoBox* OD_Tibox6 = new GeoBox(72.5*CLHEP::mm,150*CLHEP::mm,1*CLHEP::mm);
 	GeoBox* OD_Tibox7 = new GeoBox(150*CLHEP::mm,72.5*CLHEP::mm,1*CLHEP::mm);
 
-	HepGeom::Transform3D OD_Move04 = HepGeom::Translate3D(72.5*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
+	GeoTrf::Transform3D OD_Move04 = GeoTrf::Translate3D(72.5*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
 	GeoShapeShift * mowe04 = new GeoShapeShift(OD_Tibox6,OD_Move04);
 	GeoShapeSubtraction * OD_Tisemi04 = new GeoShapeSubtraction(OD_Titube1, mowe04);
 
-	HepGeom::Transform3D OD_Move05 = HepGeom::Translate3D(0*CLHEP::mm, 72.5*CLHEP::mm, 0*CLHEP::mm);
+	GeoTrf::Transform3D OD_Move05 = GeoTrf::Translate3D(0*CLHEP::mm, 72.5*CLHEP::mm, 0*CLHEP::mm);
 	GeoShapeShift * mowe05 = new GeoShapeShift(OD_Tibox7,OD_Move05);
 	GeoShapeSubtraction * OD_Tisemi05 = new GeoShapeSubtraction(OD_Tisemi04, mowe05);
 
 	GeoBox* OD_Tibox8 = new GeoBox(8.*CLHEP::mm,20.*CLHEP::mm,0.6*CLHEP::mm);
 	GeoBox* OD_Tibox9 = new GeoBox(20.*CLHEP::mm,60.*CLHEP::mm,0.6*CLHEP::mm);
 
-	HepGeom::Transform3D OD_Move06= HepGeom::Translate3D(4*CLHEP::mm, -42.5*CLHEP::mm, 0.*CLHEP::mm);
+	GeoTrf::Transform3D OD_Move06= GeoTrf::Translate3D(4*CLHEP::mm, -42.5*CLHEP::mm, 0.*CLHEP::mm);
 	GeoShapeShift * mowe06 = new GeoShapeShift(OD_Tibox8,OD_Move06);
 	GeoShapeUnion * OD_Tisemi06 = new GeoShapeUnion(OD_Tisemi05, mowe06);
 
-	HepGeom::Transform3D OD_Move07= HepGeom::Translate3D(-42.5*CLHEP::mm, 60*CLHEP::mm, 0.*CLHEP::mm);
+	GeoTrf::Transform3D OD_Move07= GeoTrf::Translate3D(-42.5*CLHEP::mm, 60*CLHEP::mm, 0.*CLHEP::mm);
 	GeoShapeShift * mowe07 = new GeoShapeShift(OD_Tibox9,OD_Move07);
 	GeoShapeUnion * OD_Tisemi07 = new GeoShapeUnion(OD_Tisemi06, mowe07);
 
 	for(i=0;i<OD_Nb_Plates;i++)
 	{
-		HepGeom::Transform3D OD_Move08= HepGeom::Translate3D(-27*CLHEP::mm, (-8.183+OD_stagger[i])*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
+		GeoTrf::Transform3D OD_Move08= GeoTrf::Translate3D(-27*CLHEP::mm, (-8.183+OD_stagger[i])*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
 		GeoShapeShift * mowe08 = new GeoShapeShift(OD_Tisemi07, OD_Move08);
 		GeoShapeSubtraction * OD_Tisemi08 = new GeoShapeSubtraction(OD_Tibox5, mowe08);
 
-		HepGeom::Transform3D OD_Move09= HepGeom::Translate3D(27*CLHEP::mm, (-8.183+OD_stagger[i])*CLHEP::mm, 0)*HepGeom::RotateY3D(180*CLHEP::deg);
+		GeoTrf::Transform3D OD_Move09= GeoTrf::Translate3D(27*CLHEP::mm, (-8.183+OD_stagger[i])*CLHEP::mm, 0)*GeoTrf::RotateY3D(180*CLHEP::deg);
 		GeoShapeShift * mowe09 = new GeoShapeShift(OD_Tisemi07, OD_Move09);
 		GeoShapeSubtraction * OD_Tisemi09 = new GeoShapeSubtraction(OD_Tisemi08, mowe09);
 
-		HepGeom::Transform3D OD_Move11= HepGeom::Translate3D(-27*CLHEP::mm, (-0.383+OD_stagger[i])*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
+		GeoTrf::Transform3D OD_Move11= GeoTrf::Translate3D(-27*CLHEP::mm, (-0.383+OD_stagger[i])*CLHEP::mm, 0);//(0, -29.383*CLHEP::mm, 0);
 		GeoShapeShift * mowe11 = new GeoShapeShift(OD_Tisemi07, OD_Move11);
 		GeoShapeSubtraction * OD_Tisemi11 = new GeoShapeSubtraction(OD_Tibox5, mowe11);
 
-		HepGeom::Transform3D OD_Move12= HepGeom::Translate3D(27*CLHEP::mm, (-0.383+OD_stagger[i])*CLHEP::mm, 0)*HepGeom::RotateY3D(180*CLHEP::deg);
+		GeoTrf::Transform3D OD_Move12= GeoTrf::Translate3D(27*CLHEP::mm, (-0.383+OD_stagger[i])*CLHEP::mm, 0)*GeoTrf::RotateY3D(180*CLHEP::deg);
 		GeoShapeShift * mowe12 = new GeoShapeShift(OD_Tisemi07, OD_Move12);
 		GeoShapeSubtraction * OD_Tisemi12 = new GeoShapeSubtraction(OD_Tisemi11, mowe12);
 
-		HepGeom::Transform3D OD_Move14= HepGeom::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, 0.7*CLHEP::mm);
+		GeoTrf::Transform3D OD_Move14= GeoTrf::Translate3D(0*CLHEP::mm, 0*CLHEP::mm, 0.7*CLHEP::mm);
 		GeoShapeShift * mowe14 = new GeoShapeShift(OD_Tisemi09,OD_Move14);
 		GeoShapeUnion * OD_Tisemi14 = new GeoShapeUnion(OD_Tisemi02, mowe14);
 
-		HepGeom::Transform3D OD_Move15= HepGeom::Translate3D(0*CLHEP::mm, 0*CLHEP::mm,-0.7*CLHEP::mm);
+		GeoTrf::Transform3D OD_Move15= GeoTrf::Translate3D(0*CLHEP::mm, 0*CLHEP::mm,-0.7*CLHEP::mm);
 		GeoShapeShift * mowe15 = new GeoShapeShift(OD_Tisemi12,OD_Move15);
 		GeoShapeUnion * OD_Tisemi15 = new GeoShapeUnion(OD_Tisemi14, mowe15);
 
-		HepGeom::Transform3D OD_Move16 = HepGeom::Translate3D(0, -19.15*CLHEP::mm, 0);
+		GeoTrf::Transform3D OD_Move16 = GeoTrf::Translate3D(0, -19.15*CLHEP::mm, 0);
 		GeoShapeShift * mowe16 = new GeoShapeShift(OD_Tibox3, OD_Move16);
 		GeoShapeSubtraction * shapeOD_TiPlate = new GeoShapeSubtraction(OD_Tisemi15, mowe16);
 
@@ -1178,19 +1178,19 @@ void ALFA_DetectorFactory::ConstructODFiberCladdings(const eRPotName eRPName, Ge
 	GeoBox* OD_Cladbox3 = new GeoBox(30*CLHEP::mm,50*CLHEP::mm,1*CLHEP::mm);
 	GeoBox* OD_Cladbox4 = new GeoBox(50*CLHEP::mm,30*CLHEP::mm,1*CLHEP::mm);
 
-	HepGeom::Transform3D OD_CladMove1 = HepGeom::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
+	GeoTrf::Transform3D OD_CladMove1 = GeoTrf::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
 	GeoShapeShift * mowe1 = new GeoShapeShift(OD_Cladbox3, OD_CladMove1);
 	GeoShapeSubtraction * OD_Cladsemi1 = new GeoShapeSubtraction(OD_Cladtube1, mowe1);
 
-	HepGeom::Transform3D OD_CladMove2 = HepGeom::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
+	GeoTrf::Transform3D OD_CladMove2 = GeoTrf::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
 	GeoShapeShift * mowe2 = new GeoShapeShift(OD_Cladbox4, OD_CladMove2);
 	GeoShapeSubtraction * OD_Cladsemi2 = new GeoShapeSubtraction(OD_Cladsemi1, mowe2);
 
-	HepGeom::Transform3D OD_CladMov3= HepGeom::Translate3D(4*CLHEP::mm, -26.25*CLHEP::mm, 0);
+	GeoTrf::Transform3D OD_CladMov3= GeoTrf::Translate3D(4*CLHEP::mm, -26.25*CLHEP::mm, 0);
 	GeoShapeShift * mowe3 = new GeoShapeShift(OD_Cladbox1, OD_CladMov3);
 	GeoShapeUnion * OD_Cladsemi3 = new GeoShapeUnion(OD_Cladsemi2, mowe3);
 
-	HepGeom::Transform3D OD_CladMov4= HepGeom::Translate3D(-26.25*CLHEP::mm, 15*CLHEP::mm, 0);
+	GeoTrf::Transform3D OD_CladMov4= GeoTrf::Translate3D(-26.25*CLHEP::mm, 15*CLHEP::mm, 0);
 	GeoShapeShift * mowe4 = new GeoShapeShift(OD_Cladbox2, OD_CladMov4);
 	GeoShapeUnion * shapeOD_Cladding = new GeoShapeUnion(OD_Cladsemi3, mowe4);
 
@@ -1213,7 +1213,7 @@ void ALFA_DetectorFactory::ConstructODFiberCladdings(const eRPotName eRPName, Ge
 		ConstructODFibers00(eRPName, i, EFT_ODFIBERU0, physOD_CladdingU_0, MotherTransform, TransODCladdingU0);
 
 		pPhysMotherVolume->add(pDetTransform);
-		pPhysMotherVolume->add(new GeoTransform(TransODCladdingU0));
+		pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODCladdingU0)));
 		sprintf(szLabel,"physODclad[%d][0][%d]",eRPName,i);
 		pPhysMotherVolume->add(new GeoNameTag(szLabel));
 		pPhysMotherVolume->add(physOD_CladdingU_0);
@@ -1224,7 +1224,7 @@ void ALFA_DetectorFactory::ConstructODFiberCladdings(const eRPotName eRPName, Ge
 		ConstructODFibers01(eRPName, i, EFT_ODFIBERU1, physOD_CladdingU_1, MotherTransform, TransODCladdingU1);
 
 		pPhysMotherVolume->add(pDetTransform);
-		pPhysMotherVolume->add(new GeoTransform(TransODCladdingU1));
+		pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODCladdingU1)));
 		sprintf(szLabel,"physODclad[%d][1][%d]",eRPName,i);
 		pPhysMotherVolume->add(new GeoNameTag(szLabel));
 		pPhysMotherVolume->add(physOD_CladdingU_1);
@@ -1235,7 +1235,7 @@ void ALFA_DetectorFactory::ConstructODFiberCladdings(const eRPotName eRPName, Ge
 		ConstructODFibers00(eRPName, i, EFT_ODFIBERV0, physOD_CladdingV_0, MotherTransform, TransODCladdingV0);
 
 		pPhysMotherVolume->add(pDetTransform);
-		pPhysMotherVolume->add(new GeoTransform(TransODCladdingV0));
+		pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODCladdingV0)));
 		sprintf(szLabel,"physODclad[%d][2][%d]",eRPName,i);
 		pPhysMotherVolume->add(new GeoNameTag(szLabel));
 		pPhysMotherVolume->add(physOD_CladdingV_0);
@@ -1246,7 +1246,7 @@ void ALFA_DetectorFactory::ConstructODFiberCladdings(const eRPotName eRPName, Ge
 		ConstructODFibers01(eRPName, i, EFT_ODFIBERV1, physOD_CladdingV_1, MotherTransform, TransODCladdingV1);
 
 		pPhysMotherVolume->add(pDetTransform);
-		pPhysMotherVolume->add(new GeoTransform(TransODCladdingV1));
+		pPhysMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODCladdingV1)));
 		sprintf(szLabel,"physODclad[%d][3][%d]",eRPName,i);
 		pPhysMotherVolume->add(new GeoNameTag(szLabel));
 		pPhysMotherVolume->add(physOD_CladdingV_1);
@@ -1269,15 +1269,15 @@ void ALFA_DetectorFactory::ConstructODFibers00(const eRPotName eRPName, const in
 	for(i=0; i<OD_Nb_Fibers; i++){
 		GeoTube* OD_Fibertube1 = new GeoTube((29.51-0.5*i)*CLHEP::mm,(29.99-0.5*i)*CLHEP::mm,0.24*CLHEP::mm);
 
-		HepGeom::Transform3D OD_FiberMove1 = HepGeom::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
+		GeoTrf::Transform3D OD_FiberMove1 = GeoTrf::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
 		GeoShapeShift * mowe1 = new GeoShapeShift(OD_Fiberbox3, OD_FiberMove1);
 		GeoShapeSubtraction * OD_Fibersemi1 = new GeoShapeSubtraction(OD_Fibertube1, mowe1);
 
-		HepGeom::Transform3D OD_FiberMove2 = HepGeom::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
+		GeoTrf::Transform3D OD_FiberMove2 = GeoTrf::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
 		GeoShapeShift * mowe2 = new GeoShapeShift(OD_Fiberbox4, OD_FiberMove2);
 		GeoShapeSubtraction * OD_Fibersemi2 = new GeoShapeSubtraction(OD_Fibersemi1, mowe2);
 
-		HepGeom::Transform3D OD_FiberMov4= HepGeom::Translate3D((-29.75+0.5*i)*CLHEP::mm, 15*CLHEP::mm, 0);
+		GeoTrf::Transform3D OD_FiberMov4= GeoTrf::Translate3D((-29.75+0.5*i)*CLHEP::mm, 15*CLHEP::mm, 0);
 		GeoShapeShift * mowe4 = new GeoShapeShift(OD_Fiberbox2, OD_FiberMov4);
 		GeoShapeUnion * shapeOD_Fiber = new GeoShapeUnion(OD_Fibersemi2, mowe4);
 
@@ -1304,7 +1304,7 @@ void ALFA_DetectorFactory::ConstructODFibers00(const eRPotName eRPName, const in
 		
 		//ODFiber00Active - physical volumes
 		GeoPhysVol* physOD_FiberActive = new GeoPhysVol(logOD_FiberActive);
-		pMotherVolume->add(new GeoTransform(TransODFiber));
+		pMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODFiber)));
 		pMotherVolume->add(new GeoNameTag(szLabel));
 		pMotherVolume->add(physOD_FiberActive);
 		
@@ -1355,7 +1355,7 @@ void ALFA_DetectorFactory::ConstructODFibers00(const eRPotName eRPName, const in
 		if (eFType==EFT_ODFIBERU0) sprintf(szLabel,"ODFiberU0[%d][%d][%d]",eRPName,iODPlate+1,i+1);
 		else if (eFType==EFT_ODFIBERV0) sprintf(szLabel,"ODFiberV0[%d][%d][%d]",eRPName,iODPlate+1,i+1);
 		GeoPhysVol* physOD_Fiber = new GeoPhysVol(logOD_Fiber);
-		pMotherVolume->add(new GeoTransform(HepGeom::Translate3D(0*CLHEP::mm,0*CLHEP::mm,0*CLHEP::mm)));
+		pMotherVolume->add(new GeoTransform(GeoTrf::Translate3D(0*CLHEP::mm,0*CLHEP::mm,0*CLHEP::mm)));
 		pMotherVolume->add(new GeoNameTag(szLabel));
 		pMotherVolume->add(physOD_Fiber);
 	}
@@ -1375,15 +1375,15 @@ void ALFA_DetectorFactory::ConstructODFibers01(const eRPotName eRPName, const in
 	for(i=0; i<OD_Nb_Fibers; i++){
 		GeoTube* OD_Fibertube1 = new GeoTube((22.51+0.5*i)*CLHEP::mm,(22.99+0.5*i)*CLHEP::mm,0.24*CLHEP::mm);
 
-		HepGeom::Transform3D OD_FiberMove1 = HepGeom::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
+		GeoTrf::Transform3D OD_FiberMove1 = GeoTrf::Translate3D(30*CLHEP::mm, 0*CLHEP::mm, 0*CLHEP::mm);
 		GeoShapeShift * mowe1 = new GeoShapeShift(OD_Fiberbox3, OD_FiberMove1);
 		GeoShapeSubtraction * OD_Fibersemi1 = new GeoShapeSubtraction(OD_Fibertube1, mowe1);
 
-		HepGeom::Transform3D OD_FiberMove2 = HepGeom::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
+		GeoTrf::Transform3D OD_FiberMove2 = GeoTrf::Translate3D(0*CLHEP::mm, 30*CLHEP::mm, 0*CLHEP::mm);
 		GeoShapeShift * mowe2 = new GeoShapeShift(OD_Fiberbox4, OD_FiberMove2);
 		GeoShapeSubtraction * OD_Fibersemi2 = new GeoShapeSubtraction(OD_Fibersemi1, mowe2);
 
-		HepGeom::Transform3D OD_FiberMov4= HepGeom::Translate3D((-22.75-0.5*i)*CLHEP::mm, 15*CLHEP::mm, 0);
+		GeoTrf::Transform3D OD_FiberMov4= GeoTrf::Translate3D((-22.75-0.5*i)*CLHEP::mm, 15*CLHEP::mm, 0);
 		GeoShapeShift * mowe4 = new GeoShapeShift(OD_Fiberbox2, OD_FiberMov4);
 		GeoShapeUnion * shapeOD_Fiber = new GeoShapeUnion(OD_Fibersemi2, mowe4);
 
@@ -1418,7 +1418,7 @@ void ALFA_DetectorFactory::ConstructODFibers01(const eRPotName eRPName, const in
 		
 		//ODFiber01Active - physical volumes
 		GeoPhysVol* physOD_FiberActive = new GeoPhysVol(logOD_FiberActive);
-		pMotherVolume->add(new GeoTransform(TransODFiber));
+		pMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransODFiber)));
 		pMotherVolume->add(new GeoNameTag(szLabel));
 		pMotherVolume->add(physOD_FiberActive);
 		
@@ -1445,7 +1445,7 @@ void ALFA_DetectorFactory::ConstructODFibers01(const eRPotName eRPName, const in
 		if (eFType==EFT_ODFIBERU1) sprintf(szLabel,"ODFiberU1[%d][%d][%d]",eRPName,iODPlate+1,i+1);
 		else if (eFType==EFT_ODFIBERV1) sprintf(szLabel,"ODFiberV1[%d][%d][%d]",eRPName,iODPlate+1,i+1);
 		GeoPhysVol* physOD_Fiber = new GeoPhysVol(logOD_Fiber);
-		pMotherVolume->add(new GeoTransform(HepGeom::Translate3D(0*CLHEP::mm,0*CLHEP::mm,0*CLHEP::mm)));
+		pMotherVolume->add(new GeoTransform(GeoTrf::Translate3D(0*CLHEP::mm,0*CLHEP::mm,0*CLHEP::mm)));
 		pMotherVolume->add(new GeoNameTag(szLabel));
 		pMotherVolume->add(physOD_Fiber);
 	}
@@ -1493,7 +1493,7 @@ void ALFA_DetectorFactory::ConstructUFiberCladdings(const eRPotName eRPName, Geo
 		//G4RotationMatrix* Clad_Rot1 = new G4RotationMatrix; 
 		//Clad_Rot1 -> rotateZ(-45*CLHEP::deg);
 		//G4ThreeVector  Clad_Move1(-17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm);
-		HepGeom::Transform3D Clad_Move1=HepGeom::Translate3D(-17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(-45*CLHEP::deg);
+		GeoTrf::Transform3D Clad_Move1=GeoTrf::Translate3D(-17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm)*GeoTrf::RotateZ3D(-45*CLHEP::deg);
 	
 		mowe1=new GeoShapeShift(ALFA_Cladbox2,Clad_Move1);
 		shapeALFA_Clad = new GeoShapeSubtraction(ALFA_Cladbox1,mowe1);
@@ -1505,7 +1505,7 @@ void ALFA_DetectorFactory::ConstructUFiberCladdings(const eRPotName eRPName, Geo
 		physALFA_CladdingU[i] = new GeoFullPhysVol(pLogCladdingU);
 		pMotherVolume->add(new GeoNameTag(strLabel));
 		pMotherVolume->add(pDetTransform);
-		pMotherVolume->add(new GeoTransform(TransCladdingU[i]));
+		pMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransCladdingU[i])));
 		pMotherVolume->add(physALFA_CladdingU[i]);
 
 		/*
@@ -1545,7 +1545,7 @@ void ALFA_DetectorFactory::ConstructUFiberCladdings(const eRPotName eRPName, Geo
 			double fAngle=m_pGeoReader->GetUFiberAngle(eRPName, i+1, j+1);
 			double fDx=fXPos-(+15.75-0.5*(j))*CLHEP::mm;
 
-			HepGeom::Transform3D TrimMove=HepGeom::Translate3D((-33.165+0.5*j)*CLHEP::mm-fDx, -17.415*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(+45.0*CLHEP::deg); //bug fix 23.2.2010
+			GeoTrf::Transform3D TrimMove=GeoTrf::Translate3D((-33.165+0.5*j)*CLHEP::mm-fDx, -17.415*CLHEP::mm, 0*CLHEP::mm)*GeoTrf::RotateZ3D(+45.0*CLHEP::deg); //bug fix 23.2.2010
 			const GeoShapeShift* Sh6=new GeoShapeShift(CladTrim,TrimMove);
 			const GeoShapeSubtraction* solFibU=new GeoShapeSubtraction(Fib1,Sh6);
 			sprintf(strLabel,"logALFA_FiberU[%d]",j+1);
@@ -1555,7 +1555,7 @@ void ALFA_DetectorFactory::ConstructUFiberCladdings(const eRPotName eRPName, Geo
 			TransFiber=HepGeom::Translate3D(fXPos, 0*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(-fAngle);
 			physiFibU=new GeoFullPhysVol(logALFA_FiberU);
 			physALFA_CladdingU[i]->add(new GeoNameTag(strLabel));
-			physALFA_CladdingU[i]->add(new GeoTransform(TransFiber));
+			physALFA_CladdingU[i]->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransFiber)));
 			physALFA_CladdingU[i]->add(physiFibU);
 			
 			//set translation vector of the fiber with respect to the main reference point
@@ -1604,7 +1604,7 @@ void ALFA_DetectorFactory::ConstructVFiberCladdings(const eRPotName eRPName, Geo
 		//G4RotationMatrix* Clad_Rot1 = new G4RotationMatrix; 
 		//Clad_Rot1 -> rotateZ(-45*CLHEP::deg);
 		//G4ThreeVector  Clad_Move1(-17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm);
-		HepGeom::Transform3D Clad_Move1=HepGeom::Translate3D(+17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(-45*CLHEP::deg);
+		GeoTrf::Transform3D Clad_Move1=GeoTrf::Translate3D(+17.415*CLHEP::mm, -17.415*CLHEP::mm, 0*CLHEP::mm)*GeoTrf::RotateZ3D(-45*CLHEP::deg);
 	
 		mowe1=new GeoShapeShift(ALFA_Cladbox2,Clad_Move1);
 		shapeALFA_Clad = new GeoShapeSubtraction(ALFA_Cladbox1,mowe1);
@@ -1616,7 +1616,7 @@ void ALFA_DetectorFactory::ConstructVFiberCladdings(const eRPotName eRPName, Geo
 		physALFA_CladdingV[i] = new GeoFullPhysVol(pLogCladdingV);
 		pMotherVolume->add(new GeoNameTag(strLabel));
 		pMotherVolume->add(pDetTransform);
-		pMotherVolume->add(new GeoTransform(TransCladdingV[i]));
+		pMotherVolume->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransCladdingV[i])));
 		pMotherVolume->add(physALFA_CladdingV[i]);
 	}
 	
@@ -1647,7 +1647,7 @@ void ALFA_DetectorFactory::ConstructVFiberCladdings(const eRPotName eRPName, Geo
 			double fAngle=m_pGeoReader->GetVFiberAngle(eRPName, i+1, j+1);
 			double fDx=fXPos-(+15.75-0.5*(j))*CLHEP::mm;
 
-			HepGeom::Transform3D TrimMove=HepGeom::Translate3D((1.665+0.5*j)*CLHEP::mm-fDx, -17.415*CLHEP::mm, 0*CLHEP::mm)*HepGeom::RotateZ3D(+45.0*CLHEP::deg);
+			GeoTrf::Transform3D TrimMove=GeoTrf::Translate3D((1.665+0.5*j)*CLHEP::mm-fDx, -17.415*CLHEP::mm, 0*CLHEP::mm)*GeoTrf::RotateZ3D(+45.0*CLHEP::deg);
 			const GeoShapeShift* Sh6=new GeoShapeShift(CladTrim,TrimMove);
 			const GeoShapeSubtraction* solFibV=new GeoShapeSubtraction(Fib1,Sh6);
 			sprintf(strLabel,"logALFA_FiberV[%d]",j+1);
@@ -1658,7 +1658,7 @@ void ALFA_DetectorFactory::ConstructVFiberCladdings(const eRPotName eRPName, Geo
 			
 			physiFibV=new GeoFullPhysVol(logALFA_FiberV);
 			physALFA_CladdingV[i]->add(new GeoNameTag(strLabel));
-			physALFA_CladdingV[i]->add(new GeoTransform(TransFiber));
+			physALFA_CladdingV[i]->add(new GeoTransform(Amg::CLHEPTransformToEigen(TransFiber)));
 			physALFA_CladdingV[i]->add(physiFibV);
 			
 			//set translation vector of the fiber with respect to the main reference point
@@ -1947,7 +1947,7 @@ void ALFA_DetectorFactory::UpdateTransforms(PALIGNPARAMETERS pAlignParams)
 				if(sc==StatusCode::SUCCESS){
 					pAlTrans=pAlignX->getAlignX();
 					//pAlTrans->setDelta(RPosParams.RPSWTransformInStation);
-					pAlTrans->setDelta(RPosParams.RPTransformInStation);
+					pAlTrans->setDelta(Amg::CLHEPTransformToEigen(RPosParams.RPTransformInStation));
 				}
 
 				sprintf(szLabel,"AlTransDetInRPMainPoint[%02d]",eRPName);
@@ -1955,7 +1955,7 @@ void ALFA_DetectorFactory::UpdateTransforms(PALIGNPARAMETERS pAlignParams)
 				if(sc==StatusCode::SUCCESS){
 					pAlTrans=pAlignX->getAlignX();
 					//pAlTrans->setDelta(RPosParams.DetSWTransformInMainPoint);
-					pAlTrans->setDelta(RPosParams.DetTransformInMainPoint);
+					pAlTrans->setDelta(Amg::CLHEPTransformToEigen(RPosParams.DetTransformInMainPoint));
 				}
 
 			}
diff --git a/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorTool.cxx b/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorTool.cxx
index a43313394d4ea284588f7f1fd7a9ad66dd029abf..dc4c44db52447beb7605f33436d1098372fed8f8 100755
--- a/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorTool.cxx
+++ b/ForwardDetectors/ALFA/ALFA_GeoModel/src/ALFA_DetectorTool.cxx
@@ -244,9 +244,9 @@ StatusCode ALFA_DetectorTool::align(IOVSVC_CALLBACK_ARGS)
 		sc=detStore()->retrieve(pStPhysRPBox,"StRPBox[03]");
 		if(sc.isSuccess()){
 			const GeoFullPhysVol* pPhysRPBox=pStPhysRPBox->getPhysVol();
-			const HepGeom::Transform3D& xf= pPhysRPBox->getAbsoluteTransform();
+			const GeoTrf::Transform3D& xf= pPhysRPBox->getAbsoluteTransform();
 
-			msg(MSG::INFO) << "Translation of RPBOX: "<< xf.getTranslation() << endmsg;
+			msg(MSG::INFO) << "Translation of RPBOX: "<< xf.translation() << endmsg;
 		}
 
 		if(detStore()->retrieve(listAttrColl,COOLFOLDER_DETSWCORR )==StatusCode::SUCCESS){
@@ -263,8 +263,8 @@ StatusCode ALFA_DetectorTool::align(IOVSVC_CALLBACK_ARGS)
 			sc=detStore()->retrieve(pStPhysRPBox,"StRPBox[03]");
 			if(sc.isSuccess()){
 				const GeoFullPhysVol* pPhysRPBox=pStPhysRPBox->getPhysVol();
-				const HepGeom::Transform3D& xf= pPhysRPBox->getAbsoluteTransform();
-				msg(MSG::INFO) << "Translation of RPBOX after update: "<< xf.getTranslation() << endmsg;
+				const GeoTrf::Transform3D& xf= pPhysRPBox->getAbsoluteTransform();
+				msg(MSG::INFO) << "Translation of RPBOX after update: "<< xf.translation() << endmsg;
 			}
 		}
 		else{
diff --git a/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_Config.h b/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_Config.h
index 4edf51634d32689bc2aa227f6ca4152c868f65cd..a1f3a153b360713031ef97b4f69fd3eee26b3e49 100644
--- a/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_Config.h
+++ b/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_Config.h
@@ -9,7 +9,6 @@
 #include "ALFA_constants.h"
 
 #include "CLHEP/Geometry/Point3D.h"
-#include "GeoModelKernel/GeoTransform.h"
 
 #include <list>
 #include <map>
diff --git a/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_GeometryReader.h b/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_GeometryReader.h
index 7405dcdc31fc652e9506ec37e71857d4c07beb77..9f1aa48b810c9608d6716b0c9e2edf02d314b97c 100644
--- a/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_GeometryReader.h
+++ b/ForwardDetectors/ALFA/ALFA_Geometry/ALFA_Geometry/ALFA_GeometryReader.h
@@ -8,8 +8,8 @@
 
 #include "ALFA_constants.h"
 
+#include "CLHEP/Geometry/Transform3D.h"
 #include "CLHEP/Geometry/Point3D.h"
-#include "GeoModelKernel/GeoTransform.h"
 #include "AthenaKernel/CLASS_DEF.h"
 
 #include "ALFA_Geometry/ALFA_ConfigParams.h"
diff --git a/ForwardDetectors/ALFA/ALFA_Geometry/CMakeLists.txt b/ForwardDetectors/ALFA/ALFA_Geometry/CMakeLists.txt
index 3910308730cc145d135044473edac67224ddc31f..7a8854b5553dce33fb8a5aad9e6a9dd015bb56aa 100644
--- a/ForwardDetectors/ALFA/ALFA_Geometry/CMakeLists.txt
+++ b/ForwardDetectors/ALFA/ALFA_Geometry/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           PRIVATE
                           Control/StoreGate
@@ -27,7 +26,7 @@ atlas_add_library( ALFA_Geometry
                    PUBLIC_HEADERS ALFA_Geometry
                    INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GaudiKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GaudiKernel StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES PathResolver )
 
 # Install files from the package:
diff --git a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/CMakeLists.txt b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/CMakeLists.txt
index 2027c917822b6042cc8cbca7f80ef10bc9f439e6..3d637b720bf1aaabbf48bb45762ed656de2c7d91 100644
--- a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/CMakeLists.txt
+++ b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( ForwardRegionGeoModel )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           GaudiKernel
                           PRIVATE
@@ -18,6 +17,8 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( ForwardRegionGeoModelLib
@@ -25,13 +26,13 @@ atlas_add_library( ForwardRegionGeoModelLib
                    PUBLIC_HEADERS ForwardRegionGeoModel
                    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES PathResolver )
 
 atlas_add_component( ForwardRegionGeoModel
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities GaudiKernel StoreGateLib SGtests PathResolver ForwardRegionGeoModelLib )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities GaudiKernel StoreGateLib SGtests PathResolver ForwardRegionGeoModelLib )
 
 # Install files from the package:
 atlas_install_runtime( share/*.csv )
diff --git a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelElements.cxx b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelElements.cxx
index 4f292748a9684041844d1c5e307d70c8569efa20..2e884a193a867e949c62efc3671766b2ffe17113 100644
--- a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelElements.cxx
+++ b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelElements.cxx
@@ -17,20 +17,20 @@
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 
 
 GeoPhysVol* ForwardRegionGeoModelFactory::insertMagnetEnvelope(std::string name, double x, double y, double z, double rotationAngle, double diameter, double halfL, double dL, GeoPhysVol* fwrPhys)
 {
     const GeoTube     *tube  = new GeoTube(0, diameter/2, halfL-dL);
 
-    HepGeom::Transform3D shift = HepGeom::Translate3D(x,y,z);
-    HepGeom::Transform3D rotate = HepGeom::RotateY3D(rotationAngle);
-//    HepGeom::Transform3D rotateX180 = HepGeom::RotateX3D(180*CLHEP::deg);
+    GeoTrf::Transform3D shift = GeoTrf::Translate3D(x,y,z);
+    GeoTrf::Transform3D rotate = GeoTrf::RotateY3D(rotationAngle);
+//    Transform3D rotateX180 = GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg);
 
     const GeoShapeShift& magTube0 = (*tube)<<rotate<<shift;
 //    const GeoShapeUnion& magTube = magTube0.add((*tube)<<rotate<<shift<<rotateX180);
@@ -49,7 +49,7 @@ GeoPhysVol* ForwardRegionGeoModelFactory::insertMagnetEnvelope(std::string name,
 
 void ForwardRegionGeoModelFactory::insertCircularElement(std::string name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol* fwrPhys)
 {
-    double r0 = std::max(xAperture,yAperture)*CLHEP::mm/2;
+    double r0 = std::max(xAperture,yAperture)*GeoModelKernelUnits::mm/2;
 
     const GeoTube     *ringTube  = new GeoTube(r0, r0+tubeThickness, halfL-dL);
 
@@ -58,9 +58,9 @@ void ForwardRegionGeoModelFactory::insertCircularElement(std::string name, doubl
     GeoPhysVol        *ringPhys = new GeoPhysVol(ringLog);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
-    GeoTransform *rotate         = new GeoTransform(HepGeom::RotateY3D(rotationAngle));
+    GeoTransform *rotate         = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
     fwrPhys->add(rotate);
 
     GeoNameTag *tag = new GeoNameTag(name);
@@ -69,7 +69,7 @@ void ForwardRegionGeoModelFactory::insertCircularElement(std::string name, doubl
     fwrPhys->add(ringPhys);
 
 //    // The other side of the forward region may be obtained by rotation
-//    GeoTransform *rotateX180  = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg));
+//    GeoTransform *rotateX180  = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
 
 //    // the other side
 //    fwrPhys->add(rotateX180);
@@ -87,12 +87,12 @@ void ForwardRegionGeoModelFactory::insertEllipticalElement(std::string name, dou
 
     // GeoEllipticalTube causes VP1 to fall, so for visualization GeoBox is used
     if(!m_Config.vp1Compatibility) {
-        ringTube0  = new GeoEllipticalTube(xAperture*CLHEP::mm/2+tubeThickness, yAperture*CLHEP::mm/2+tubeThickness, halfL-dL);
-        ringTube2  = new GeoEllipticalTube(xAperture*CLHEP::mm/2, yAperture*CLHEP::mm/2, halfL-dL);
+        ringTube0  = new GeoEllipticalTube(xAperture*GeoModelKernelUnits::mm/2+tubeThickness, yAperture*GeoModelKernelUnits::mm/2+tubeThickness, halfL-dL);
+        ringTube2  = new GeoEllipticalTube(xAperture*GeoModelKernelUnits::mm/2, yAperture*GeoModelKernelUnits::mm/2, halfL-dL);
     }
     else {
-        ringTube0  = new GeoBox(xAperture*CLHEP::mm/2+tubeThickness, yAperture*CLHEP::mm/2+tubeThickness, halfL-dL);
-        ringTube2  = new GeoBox(xAperture*CLHEP::mm/2, yAperture*CLHEP::mm/2, halfL-dL);
+        ringTube0  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2+tubeThickness, yAperture*GeoModelKernelUnits::mm/2+tubeThickness, halfL-dL);
+        ringTube2  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2, yAperture*GeoModelKernelUnits::mm/2, halfL-dL);
     }
     GeoShapeSubtraction * ringTube = new GeoShapeSubtraction(ringTube0, ringTube2);
 
@@ -101,9 +101,9 @@ void ForwardRegionGeoModelFactory::insertEllipticalElement(std::string name, dou
     GeoPhysVol        *ringPhys = new GeoPhysVol(ringLog);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
-    GeoTransform *rotate         = new GeoTransform(HepGeom::RotateY3D(rotationAngle));
+    GeoTransform *rotate         = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
     fwrPhys->add(rotate);
 
     GeoNameTag *tag = new GeoNameTag(name);
@@ -112,7 +112,7 @@ void ForwardRegionGeoModelFactory::insertEllipticalElement(std::string name, dou
     fwrPhys->add(ringPhys);
 
 //    // The other side of the forward region may be obtained by rotation
-//    GeoTransform *rotateX180  = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg));
+//    GeoTransform *rotateX180  = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
 
 //    // the other side
 //    fwrPhys->add(rotateX180);
@@ -125,22 +125,22 @@ void ForwardRegionGeoModelFactory::insertEllipticalElement(std::string name, dou
 
 void ForwardRegionGeoModelFactory::insertXRecticircularElement(std::string name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol* fwrPhys)
 {
-    double beamScreenSeparation = 1.5*CLHEP::mm;
-    double beamScreenCuThick = 0.05*CLHEP::mm;
-    double beamScreenSteelThick = 1*CLHEP::mm;
+    double beamScreenSeparation = 1.5*GeoModelKernelUnits::mm;
+    double beamScreenCuThick = 0.05*GeoModelKernelUnits::mm;
+    double beamScreenSteelThick = 1*GeoModelKernelUnits::mm;
 
-    const GeoTube     *ringTube  = new GeoTube(yAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, yAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
-    const GeoTube     *circ  = new GeoTube(0, yAperture*CLHEP::mm/2, halfL-dL);
-    const GeoBox      *rect  = new GeoBox(xAperture*CLHEP::mm/2, yAperture*CLHEP::mm/2, halfL-dL);
+    const GeoTube     *ringTube  = new GeoTube(yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
+    const GeoTube     *circ  = new GeoTube(0, yAperture*GeoModelKernelUnits::mm/2, halfL-dL);
+    const GeoBox      *rect  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2, yAperture*GeoModelKernelUnits::mm/2, halfL-dL);
     GeoShapeIntersection *innerVac = new GeoShapeIntersection(rect,circ);
 
-    const GeoTube     *circ2  = new GeoTube(0, yAperture*CLHEP::mm/2+beamScreenCuThick, halfL-dL);
-    const GeoBox      *rect2  = new GeoBox(xAperture*CLHEP::mm/2+beamScreenCuThick, yAperture*CLHEP::mm/2+beamScreenCuThick, halfL-dL);
+    const GeoTube     *circ2  = new GeoTube(0, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, halfL-dL);
+    const GeoBox      *rect2  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, halfL-dL);
     GeoShapeIntersection *beamScreenCu0 = new GeoShapeIntersection(rect2,circ2);
     GeoShapeSubtraction *beamScreenCu = new GeoShapeSubtraction(beamScreenCu0, innerVac);
 
-    const GeoTube     *circ3  = new GeoTube(0, yAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
-    const GeoBox      *rect3  = new GeoBox(xAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
+    const GeoTube     *circ3  = new GeoTube(0, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
+    const GeoBox      *rect3  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
     GeoShapeIntersection *beamScreenSteel01 = new GeoShapeIntersection(rect3,circ3);
     GeoShapeSubtraction *beamScreenSteel02 = new GeoShapeSubtraction(beamScreenSteel01, innerVac);
     GeoShapeSubtraction *beamScreenSteel = new GeoShapeSubtraction(beamScreenSteel02, beamScreenCu);
@@ -154,9 +154,9 @@ void ForwardRegionGeoModelFactory::insertXRecticircularElement(std::string name,
     GeoPhysVol        *ringPhysSteel = new GeoPhysVol(ringLogSteel);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
-    GeoTransform *rotate         = new GeoTransform(HepGeom::RotateY3D(rotationAngle));
+    GeoTransform *rotate         = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
     fwrPhys->add(rotate);
 
     GeoNameTag *tag = new GeoNameTag(name+"BeamPipe");
@@ -179,7 +179,7 @@ void ForwardRegionGeoModelFactory::insertXRecticircularElement(std::string name,
 
 
 //    // The other side of the forward region may be obtain by rotation
-//    GeoTransform *rotateX180  = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg));
+//    GeoTransform *rotateX180  = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
 
 //    // the other side
 //    fwrPhys->add(rotateX180);
@@ -206,22 +206,22 @@ void ForwardRegionGeoModelFactory::insertXRecticircularElement(std::string name,
 
 void ForwardRegionGeoModelFactory::insertYRecticircularElement(std::string name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol* fwrPhys)
 {
-    double beamScreenSeparation = 1.5*CLHEP::mm;
-    double beamScreenCuThick = 0.05*CLHEP::mm;
-    double beamScreenSteelThick = 1*CLHEP::mm;
+    double beamScreenSeparation = 1.5*GeoModelKernelUnits::mm;
+    double beamScreenCuThick = 0.05*GeoModelKernelUnits::mm;
+    double beamScreenSteelThick = 1*GeoModelKernelUnits::mm;
 
-    const GeoTube     *ringTube  = new GeoTube(xAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, xAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
-    const GeoTube     *circ  = new GeoTube(0, xAperture*CLHEP::mm/2, halfL-dL);
-    const GeoBox      *rect  = new GeoBox(xAperture*CLHEP::mm/2, yAperture*CLHEP::mm/2, halfL-dL);
+    const GeoTube     *ringTube  = new GeoTube(xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
+    const GeoTube     *circ  = new GeoTube(0, xAperture*GeoModelKernelUnits::mm/2, halfL-dL);
+    const GeoBox      *rect  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2, yAperture*GeoModelKernelUnits::mm/2, halfL-dL);
     GeoShapeIntersection *innerVac = new GeoShapeIntersection(rect,circ);
 
-    const GeoTube     *circ2  = new GeoTube(0, xAperture*CLHEP::mm/2+beamScreenCuThick, halfL-dL);
-    const GeoBox      *rect2  = new GeoBox(xAperture*CLHEP::mm/2+beamScreenCuThick, yAperture*CLHEP::mm/2+beamScreenCuThick, halfL-dL);
+    const GeoTube     *circ2  = new GeoTube(0, xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, halfL-dL);
+    const GeoBox      *rect2  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick, halfL-dL);
     GeoShapeIntersection *beamScreenCu0 = new GeoShapeIntersection(rect2,circ2);
     GeoShapeSubtraction *beamScreenCu = new GeoShapeSubtraction(beamScreenCu0, innerVac);
 
-    const GeoTube     *circ3  = new GeoTube(0, xAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
-    const GeoBox      *rect3  = new GeoBox(xAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*CLHEP::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
+    const GeoTube     *circ3  = new GeoTube(0, xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
+    const GeoBox      *rect3  = new GeoBox(xAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*GeoModelKernelUnits::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
     GeoShapeIntersection *beamScreenSteel01 = new GeoShapeIntersection(rect3,circ3);
     GeoShapeSubtraction *beamScreenSteel02 = new GeoShapeSubtraction(beamScreenSteel01, innerVac);
     GeoShapeSubtraction *beamScreenSteel = new GeoShapeSubtraction(beamScreenSteel02, beamScreenCu);
@@ -235,9 +235,9 @@ void ForwardRegionGeoModelFactory::insertYRecticircularElement(std::string name,
     GeoPhysVol        *ringPhysSteel = new GeoPhysVol(ringLogSteel);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
-    GeoTransform *rotate         = new GeoTransform(HepGeom::RotateY3D(rotationAngle));
+    GeoTransform *rotate         = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
     fwrPhys->add(rotate);
 
     GeoNameTag *tag = new GeoNameTag(name+"BeamPipe");
@@ -258,7 +258,7 @@ void ForwardRegionGeoModelFactory::insertYRecticircularElement(std::string name,
     fwrPhys->add(ringPhysSteel);
 
 //    // The other side of the forward region may be obtain by rotation
-//    GeoTransform *rotateX180  = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg));
+//    GeoTransform *rotateX180  = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
 
 //    // the other side
 //    fwrPhys->add(rotateX180);
@@ -290,13 +290,13 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
 
     // CONSTANTS
     double TAN_A, TAN_B, TAN_C, TAN_Dsmall, TAN_Dbig, TAN_thick1, TAN_xseparation;
-    TAN_A = 700*CLHEP::mm;
-    TAN_B = 500*CLHEP::mm;
-    TAN_C = 3700*CLHEP::mm;
-    TAN_Dsmall = 52*CLHEP::mm;
-    TAN_Dbig = 212*CLHEP::mm;
-    TAN_thick1 = 4.5*CLHEP::mm;
-    TAN_xseparation = 80*CLHEP::mm;
+    TAN_A = 700*GeoModelKernelUnits::mm;
+    TAN_B = 500*GeoModelKernelUnits::mm;
+    TAN_C = 3700*GeoModelKernelUnits::mm;
+    TAN_Dsmall = 52*GeoModelKernelUnits::mm;
+    TAN_Dbig = 212*GeoModelKernelUnits::mm;
+    TAN_thick1 = 4.5*GeoModelKernelUnits::mm;
+    TAN_xseparation = 80*GeoModelKernelUnits::mm;
 
     // Derived constants
     double TAN_Rsmall, TAN_Rbig, TAN_coneZh, TAN_coneR, TAN_coneXh;//, TAN_halflength;
@@ -310,16 +310,16 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     // volume construction
 
     // inner part
-    GeoPcon *TANi_cone0 = new GeoPcon(0,360*CLHEP::deg);
+    GeoPcon *TANi_cone0 = new GeoPcon(0,360*GeoModelKernelUnits::deg);
     TANi_cone0->addPlane(2*TAN_coneZh, TAN_Rsmall, 2*TAN_Rbig);
     TANi_cone0->addPlane(TAN_coneZh, TAN_Rsmall, 2*TAN_Rbig);
     TANi_cone0->addPlane(-TAN_coneZh, TAN_coneR, 2*TAN_Rbig);
-    HepGeom::Transform3D TAN_moveCone = HepGeom::Translate3D(TAN_coneXh,0,0.5*(TAN_A-TAN_B));
-    HepGeom::Transform3D TAN_rotateCone = HepGeom::RotateY3D(5*CLHEP::deg);
+    GeoTrf::Transform3D TAN_moveCone = GeoTrf::Translate3D(TAN_coneXh,0,0.5*(TAN_A-TAN_B));
+    GeoTrf::Transform3D TAN_rotateCone = GeoTrf::RotateY3D(5*GeoModelKernelUnits::deg);
     const GeoShapeShift& TANi_cone = (*TANi_cone0)<<TAN_rotateCone<<TAN_moveCone;
 
     const GeoBox *TAN_box0 = new GeoBox(2*TAN_Rbig,2*TAN_Rbig,TAN_A+TAN_B);
-    HepGeom::Transform3D TAN_moveBox = HepGeom::Translate3D(-2*TAN_Rbig,0,0);
+    GeoTrf::Transform3D TAN_moveBox = GeoTrf::Translate3D(-2*TAN_Rbig,0,0);
     const GeoShapeShift& TAN_box = (*TAN_box0)<<TAN_moveBox;
 
     const GeoTube *TANi_bigtube  = new GeoTube(0, TAN_Rbig, 0.5*(TAN_A+TAN_B));
@@ -327,14 +327,14 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     GeoShapeSubtraction *TANi_hcyl = new GeoShapeSubtraction(TANi_bigtube, &TAN_box);
 
     GeoShapeSubtraction *TANi_h = new GeoShapeSubtraction(TANi_hcyl, &TANi_cone);
-    HepGeom::Transform3D TAN_moveH = HepGeom::Translate3D(0,0,-0.5*TAN_C);
-    HepGeom::Transform3D TAN_rotateH = HepGeom::RotateZ3D(180*CLHEP::deg);
+    GeoTrf::Transform3D TAN_moveH = GeoTrf::Translate3D(0,0,-0.5*TAN_C);
+    GeoTrf::Transform3D TAN_rotateH = GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg);
 
-    HepGeom::Transform3D TAN_moveTube1 = HepGeom::Translate3D(TAN_xseparation,0,0.5*(TAN_A+TAN_B));
-    HepGeom::Transform3D TAN_moveTube2 = HepGeom::Translate3D(-TAN_xseparation,0,0.5*(TAN_A+TAN_B));
+    GeoTrf::Transform3D TAN_moveTube1 = GeoTrf::Translate3D(TAN_xseparation,0,0.5*(TAN_A+TAN_B));
+    GeoTrf::Transform3D TAN_moveTube2 = GeoTrf::Translate3D(-TAN_xseparation,0,0.5*(TAN_A+TAN_B));
 
     // outer part
-    GeoPcon *TANo_cone0 = new GeoPcon(0,360*CLHEP::deg);
+    GeoPcon *TANo_cone0 = new GeoPcon(0,360*GeoModelKernelUnits::deg);
     TANo_cone0->addPlane(2*TAN_coneZh, TAN_Rsmall+TAN_thick1, 2*TAN_Rbig);
     TANo_cone0->addPlane(TAN_coneZh, TAN_Rsmall+TAN_thick1, 2*TAN_Rbig);
     TANo_cone0->addPlane(-TAN_coneZh, TAN_coneR+TAN_thick1, 2*TAN_Rbig);
@@ -347,7 +347,7 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     GeoShapeSubtraction *TANo_h = new GeoShapeSubtraction(TANo_hcyl, &TANo_cone);
 
     const GeoTube *TAN_antiblock0  = new GeoTube(0, TAN_Rsmall, 0.5*(TAN_A+2*TAN_B)); // antiblock tube -- just in case..
-    HepGeom::Transform3D TAN_moveAntiblock = HepGeom::Translate3D(TAN_xseparation,0,0);
+    GeoTrf::Transform3D TAN_moveAntiblock = GeoTrf::Translate3D(TAN_xseparation,0,0);
     const GeoShapeShift& TAN_antiblock = (*TAN_antiblock0)<<TAN_moveAntiblock;
 
     GeoShapeSubtraction *TAN_shape0 = new GeoShapeSubtraction(TANo_h, TANi_h);
@@ -355,7 +355,7 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     const GeoShapeShift& TAN_shape1 = (*TAN_shape)<<TAN_moveH;
     const GeoShapeShift& TAN_shape2 = (*TAN_shape)<<TAN_moveH<<TAN_rotateH;
 
-    const GeoTube *TANo_ftube = new GeoTube(TAN_Rsmall,TAN_Rsmall+TAN_thick1,0.5*TAN_C-0.1*CLHEP::mm);
+    const GeoTube *TANo_ftube = new GeoTube(TAN_Rsmall,TAN_Rsmall+TAN_thick1,0.5*TAN_C-0.1*GeoModelKernelUnits::mm);
     const GeoShapeShift& TANo_ftube1 = (*TANo_ftube)<<TAN_moveTube1;
     const GeoShapeShift& TANo_ftube2 = (*TANo_ftube)<<TAN_moveTube2;
 
@@ -369,9 +369,9 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     GeoPhysVol        *ringPhys = new GeoPhysVol(ringLog);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
-    GeoTransform *rotate         = new GeoTransform(HepGeom::RotateY3D(rotationAngle));
+    GeoTransform *rotate         = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
     fwrPhys->add(rotate);
 
     GeoNameTag *tag = new GeoNameTag(name);
@@ -380,7 +380,7 @@ void ForwardRegionGeoModelFactory::insertTrousersElement(std::string name, doubl
     fwrPhys->add(ringPhys);
 
 //    // The other side of the forward region may be obtained by rotation
-//    GeoTransform *rotateX180  = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg));
+//    GeoTransform *rotateX180  = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
 
 //    // the other side
 //    fwrPhys->add(rotateX180);
@@ -395,48 +395,48 @@ void ForwardRegionGeoModelFactory::insertTCLElement(std::string name, double x,
 {
     // Constants
     double TCL_BOX_halflength, TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_sideThickness, TCL_BOX_topBottomThickness, TCL_BOX_endThickness, TCL_TUBE_halflength, TCL_TUBE_halfapperture, TCL_TUBE_thickness;
-    TCL_BOX_sideThickness = 6*CLHEP::mm;
-    TCL_BOX_topBottomThickness = 18*CLHEP::mm;
-    TCL_BOX_endThickness = 18*CLHEP::mm;
+    TCL_BOX_sideThickness = 6*GeoModelKernelUnits::mm;
+    TCL_BOX_topBottomThickness = 18*GeoModelKernelUnits::mm;
+    TCL_BOX_endThickness = 18*GeoModelKernelUnits::mm;
 
-    TCL_BOX_halflength = 621*CLHEP::mm;
-    TCL_BOX_halfwidth = 132*CLHEP::mm;
+    TCL_BOX_halflength = 621*GeoModelKernelUnits::mm;
+    TCL_BOX_halfwidth = 132*GeoModelKernelUnits::mm;
     TCL_BOX_halfheight = 60+TCL_BOX_topBottomThickness;
 
-    TCL_TUBE_halflength = 59.5*CLHEP::mm;
-    TCL_TUBE_halfapperture = 53*CLHEP::mm;
-    TCL_TUBE_thickness = 2*CLHEP::mm;
+    TCL_TUBE_halflength = 59.5*GeoModelKernelUnits::mm;
+    TCL_TUBE_halfapperture = 53*GeoModelKernelUnits::mm;
+    TCL_TUBE_thickness = 2*GeoModelKernelUnits::mm;
 
     double TCL_CuBlock_halflength, TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlockCylCut_zDepth, TCL_CuBlockCylCut_angle, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength, TCL_CuBlockCylCut_xDepth, TCL_CuBlockCylCut_xShift;
-    TCL_CuBlock_halflength = 597*CLHEP::mm;
-    TCL_CuBlock_halfwidth = 14.5*CLHEP::mm;
-    TCL_CuBlock_halfheight = 40*CLHEP::mm;
+    TCL_CuBlock_halflength = 597*GeoModelKernelUnits::mm;
+    TCL_CuBlock_halfwidth = 14.5*GeoModelKernelUnits::mm;
+    TCL_CuBlock_halfheight = 40*GeoModelKernelUnits::mm;
 
-    TCL_CuBlockCylCut_zDepth = 90*CLHEP::mm;
-    TCL_CuBlockCylCut_angle = 12*CLHEP::deg;
-    TCL_CuBlockCylCut_cylR = 40*CLHEP::mm;
+    TCL_CuBlockCylCut_zDepth = 90*GeoModelKernelUnits::mm;
+    TCL_CuBlockCylCut_angle = 12*GeoModelKernelUnits::deg;
+    TCL_CuBlockCylCut_cylR = 40*GeoModelKernelUnits::mm;
 
     TCL_CuBlockCylCut_cylHalflength = TCL_CuBlockCylCut_zDepth/cos(TCL_CuBlockCylCut_angle);
     TCL_CuBlockCylCut_xDepth = TCL_CuBlockCylCut_zDepth*tan(TCL_CuBlockCylCut_angle);
     TCL_CuBlockCylCut_xShift = -TCL_CuBlock_halfwidth-TCL_CuBlockCylCut_cylR/cos(TCL_CuBlockCylCut_angle)+TCL_CuBlockCylCut_xDepth;
 
     double TCL_CuBeam_halflength, TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_Cooling_width;
-    TCL_CuBeam_halflength = 530*CLHEP::mm;
-    TCL_CuBeam_halfwidth = 15*CLHEP::mm;
-    TCL_CuBeam_halfheight = 40*CLHEP::mm;
+    TCL_CuBeam_halflength = 530*GeoModelKernelUnits::mm;
+    TCL_CuBeam_halfwidth = 15*GeoModelKernelUnits::mm;
+    TCL_CuBeam_halfheight = 40*GeoModelKernelUnits::mm;
 
-    TCL_Cooling_width = 9*CLHEP::mm;
+    TCL_Cooling_width = 9*GeoModelKernelUnits::mm;
 
 
 
     // rotate by 180 deg around X and Y
-    HepGeom::Transform3D rotateX180 = HepGeom::RotateX3D(180*CLHEP::deg);
-    HepGeom::Transform3D rotateY180 = HepGeom::RotateY3D(180*CLHEP::deg);
+    GeoTrf::Transform3D rotateX180 = GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg);
+    GeoTrf::Transform3D rotateY180 = GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
 
     // inner vacuum volume solid
     const GeoBox * boxIn = new GeoBox(TCL_BOX_halfwidth-TCL_BOX_sideThickness, TCL_BOX_halfheight-TCL_BOX_topBottomThickness, TCL_BOX_halflength-TCL_BOX_endThickness);
     const GeoTube * tubeIn = new GeoTube(0, TCL_TUBE_halfapperture, TCL_TUBE_halflength+0.5*TCL_BOX_endThickness);
-    HepGeom::Transform3D moveTubeIn = HepGeom::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength-0.5*TCL_BOX_endThickness);
+    GeoTrf::Transform3D moveTubeIn = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength-0.5*TCL_BOX_endThickness);
     const GeoShapeShift& tubeIn1 = (*tubeIn)<<moveTubeIn;
     const GeoShapeShift& tubeIn2 = (*tubeIn)<<moveTubeIn<<rotateY180;
     const GeoShapeUnion * innerVac0 = new GeoShapeUnion(boxIn,&tubeIn1);
@@ -445,7 +445,7 @@ void ForwardRegionGeoModelFactory::insertTCLElement(std::string name, double x,
     // outer steel case solid
     const GeoBox * boxFull = new GeoBox(TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_halflength);
     const GeoTube * tubeOut = new GeoTube(TCL_TUBE_halfapperture, TCL_TUBE_halfapperture+TCL_TUBE_thickness, TCL_TUBE_halflength);
-    HepGeom::Transform3D moveTubeOut = HepGeom::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength);
+    GeoTrf::Transform3D moveTubeOut = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength);
     const GeoShapeShift& tubeOut1 = (*tubeOut)<<moveTubeOut;
     const GeoShapeShift& tubeOut2 = (*tubeOut)<<moveTubeOut<<rotateY180;
     const GeoShapeUnion * outerSteelFull0 = new GeoShapeUnion(boxFull,&tubeOut1);
@@ -455,29 +455,29 @@ void ForwardRegionGeoModelFactory::insertTCLElement(std::string name, double x,
     // Copper block solid
     const GeoBox * cuBoxFull = new GeoBox(TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
     const GeoTube * cylCut0 = new GeoTube(0, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength);
-    HepGeom::Transform3D rotateCylCut = HepGeom::RotateY3D(TCL_CuBlockCylCut_angle);
-    HepGeom::Transform3D moveCylCut = HepGeom::Translate3D(TCL_CuBlockCylCut_xShift, 0, TCL_CuBlock_halflength);
+    GeoTrf::Transform3D rotateCylCut = GeoTrf::RotateY3D(TCL_CuBlockCylCut_angle);
+    GeoTrf::Transform3D moveCylCut = GeoTrf::Translate3D(TCL_CuBlockCylCut_xShift, 0, TCL_CuBlock_halflength);
     const GeoShapeShift& cylCut1 = (*cylCut0)<<rotateCylCut<<moveCylCut;
     const GeoShapeShift& cylCut2 = (*cylCut0)<<rotateCylCut<<moveCylCut<<rotateX180;
     const GeoShapeSubtraction * cuBox0 = new GeoShapeSubtraction(cuBoxFull, &cylCut1);
     const GeoShapeSubtraction * cuBox1 = new GeoShapeSubtraction(cuBox0, &cylCut2);
-    HepGeom::Transform3D moveCuBoxI = HepGeom::Translate3D(TCLJawDistI+TCL_CuBlock_halfwidth, 0, 0);
+    GeoTrf::Transform3D moveCuBoxI = GeoTrf::Translate3D(TCLJawDistI+TCL_CuBlock_halfwidth, 0, 0);
     const GeoShapeShift& cuBoxI = (*cuBox1)<<moveCuBoxI;
-    HepGeom::Transform3D moveCuBoxO = HepGeom::Translate3D(+TCLJawDistO+TCL_CuBlock_halfwidth, 0, 0);
+    GeoTrf::Transform3D moveCuBoxO = GeoTrf::Translate3D(+TCLJawDistO+TCL_CuBlock_halfwidth, 0, 0);
     const GeoShapeShift& cuBoxO = (*cuBox1)<<moveCuBoxO<<rotateY180;
 
     // Copper beam solid
     const GeoBox * cuBeamFull = new GeoBox(TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_CuBeam_halflength);
-    HepGeom::Transform3D moveCuBeamI = HepGeom::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
+    GeoTrf::Transform3D moveCuBeamI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
     const GeoShapeShift& cuBeamI = (*cuBeamFull)<<moveCuBeamI;
-    HepGeom::Transform3D moveCuBeamO = HepGeom::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
+    GeoTrf::Transform3D moveCuBeamO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
     const GeoShapeShift& cuBeamO = (*cuBeamFull)<<moveCuBeamO<<rotateY180;
 
     // Watter cooling in first aproximation (water box)
     const GeoBox * waterBox = new GeoBox(0.5*TCL_Cooling_width, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
-    HepGeom::Transform3D moveWaterBoxI = HepGeom::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
+    GeoTrf::Transform3D moveWaterBoxI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
     const GeoShapeShift& waterBoxI = (*waterBox)<<moveWaterBoxI;
-    HepGeom::Transform3D moveWaterBoxO = HepGeom::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
+    GeoTrf::Transform3D moveWaterBoxO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
     const GeoShapeShift& waterBoxO = (*waterBox)<<moveWaterBoxO<<rotateY180;
 
 
@@ -504,7 +504,7 @@ void ForwardRegionGeoModelFactory::insertTCLElement(std::string name, double x,
     GeoPhysVol        *waterBoxPhysO = new GeoPhysVol(waterBoxLogO);
 
     //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
-    GeoTransform *move           = new GeoTransform(HepGeom::Translate3D(x,y,z));
+    GeoTransform *move           = new GeoTransform(GeoTrf::Translate3D(x,y,z));
     fwrPhys->add(move);
 
     GeoNameTag *tag = new GeoNameTag(name);
diff --git a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelFactory.cxx b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelFactory.cxx
index bb6c0bfcb4ae262198fe4e7b51f687d073de8225..da38507471985160813b683bd77fbe5a44f156e8 100755
--- a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelFactory.cxx
+++ b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelFactory.cxx
@@ -16,13 +16,12 @@
 #include "GeoModelKernel/GeoNameTag.h"  
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoFullPhysVol.h"  
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoAlignableTransform.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"  
+#include "GeoModelKernel/Units.h"  
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "CLHEP/Geometry/Point3D.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "StoreGate/DataHandle.h"
@@ -48,28 +47,28 @@
 
 void FWD_CONFIGURATION::clear()
 {
-    TCL4JawDistB1I = 57*CLHEP::mm;
-    TCL5JawDistB1I = 57*CLHEP::mm;
-    TCL6JawDistB1I = 57*CLHEP::mm;
-    TCL4JawDistB2I = 57*CLHEP::mm;
-    TCL5JawDistB2I = 57*CLHEP::mm;
-    TCL6JawDistB2I = 57*CLHEP::mm;
-    TCL4JawDistB1O = 57*CLHEP::mm;
-    TCL5JawDistB1O = 57*CLHEP::mm;
-    TCL6JawDistB1O = 57*CLHEP::mm;
-    TCL4JawDistB2O = 57*CLHEP::mm;
-    TCL5JawDistB2O = 57*CLHEP::mm;
-    TCL6JawDistB2O = 57*CLHEP::mm;
+    TCL4JawDistB1I = 57*GeoModelKernelUnits::mm;
+    TCL5JawDistB1I = 57*GeoModelKernelUnits::mm;
+    TCL6JawDistB1I = 57*GeoModelKernelUnits::mm;
+    TCL4JawDistB2I = 57*GeoModelKernelUnits::mm;
+    TCL5JawDistB2I = 57*GeoModelKernelUnits::mm;
+    TCL6JawDistB2I = 57*GeoModelKernelUnits::mm;
+    TCL4JawDistB1O = 57*GeoModelKernelUnits::mm;
+    TCL5JawDistB1O = 57*GeoModelKernelUnits::mm;
+    TCL6JawDistB1O = 57*GeoModelKernelUnits::mm;
+    TCL4JawDistB2O = 57*GeoModelKernelUnits::mm;
+    TCL5JawDistB2O = 57*GeoModelKernelUnits::mm;
+    TCL6JawDistB2O = 57*GeoModelKernelUnits::mm;
     vp1Compatibility = false;
     buildTCL4 = false;
     buildTCL6 = false;
     ALFAInNewPosition = false;
-    newPosB7L1 = 245656.77*CLHEP::mm;
-    newPosB7R1 = -245656.11*CLHEP::mm;
-    posAFPL1 = 204500*CLHEP::mm;
-    posAFPL2 = 212675*CLHEP::mm;
-    posAFPR1 = -204500*CLHEP::mm;
-    posAFPL2 = -212675*CLHEP::mm;
+    newPosB7L1 = 245656.77*GeoModelKernelUnits::mm;
+    newPosB7R1 = -245656.11*GeoModelKernelUnits::mm;
+    posAFPL1 = 204500*GeoModelKernelUnits::mm;
+    posAFPL2 = 212675*GeoModelKernelUnits::mm;
+    posAFPR1 = -204500*GeoModelKernelUnits::mm;
+    posAFPL2 = -212675*GeoModelKernelUnits::mm;
 }
 
 
@@ -118,7 +117,7 @@ void ForwardRegionGeoModelFactory::DefineMaterials()
 
     // water
     matName = "water";
-    GeoMaterial *water = new GeoMaterial("H20", 1.0*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial *water = new GeoMaterial("H20", 1.0*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
     GeoElement *hydrogen = new GeoElement("Hydrogen","H",1.0, 1.010);
     GeoElement *oxygen   = new GeoElement("Oxygen",  "O", 8.0, 16.0);
     water->add(hydrogen,0.11);
@@ -146,7 +145,7 @@ void ForwardRegionGeoModelFactory::DefineMaterials()
 
     // Copper for beam screens
     matName = "Copper";
-    GeoMaterial *copper = new GeoMaterial("Copper", 8.94*CLHEP::g/CLHEP::cm3);
+    GeoMaterial *copper = new GeoMaterial("Copper", 8.94*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
     copper->add(const_cast<GeoElement*> (Cu),1.0);
     copper->lock();
     m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,copper));
@@ -154,7 +153,7 @@ void ForwardRegionGeoModelFactory::DefineMaterials()
     // Tungsten for TCL6
     matName = "Tungsten";
     const GeoElement* W = materialManager->getElement("Wolfram");
-    GeoMaterial *tungsten = new GeoMaterial("Tungsten", 19.25*CLHEP::g/CLHEP::cm3);
+    GeoMaterial *tungsten = new GeoMaterial("Tungsten", 19.25*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
     tungsten->add(const_cast<GeoElement*> (W),1.0);
     tungsten->lock();
     m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,tungsten));
@@ -162,14 +161,14 @@ void ForwardRegionGeoModelFactory::DefineMaterials()
     // GlidCop AL15 copper -- aproximate composition (trace impurities (< 0.01 wt. %) not included)
     // source: http://www-ferp.ucsd.edu/LIB/PROPS/compcu15.html
     matName = "GlidCopAL15";
-    GeoMaterial *glidcop=new GeoMaterial("GlidCopAL15", 8.90*CLHEP::g/CLHEP::cm3);
+    GeoMaterial *glidcop=new GeoMaterial("GlidCopAL15", 8.90*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
 
     double aCu, aAl, aO, aB, aTot;
 
-    aCu=99.7*Cu->getA()/(CLHEP::g/CLHEP::mole);
-    aAl=0.15*Al->getA()/(CLHEP::g/CLHEP::mole);
-    aO=0.13*O->getA()/(CLHEP::g/CLHEP::mole);
-    aB=0.02*B->getA()/(CLHEP::g/CLHEP::mole);
+    aCu=99.7*Cu->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aAl=0.15*Al->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aO=0.13*O->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aB=0.02*B->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
     aTot=aCu+aAl+aO+aB;
 
     glidcop->add(const_cast<GeoElement*> (Cu), aCu/aTot);
@@ -181,20 +180,20 @@ void ForwardRegionGeoModelFactory::DefineMaterials()
 
     // Steel Grade 316L (Roman Pot)
     matName = "Steel";
-    GeoMaterial *steel=new GeoMaterial("Steel", 8*CLHEP::g/CLHEP::cm3);
+    GeoMaterial *steel=new GeoMaterial("Steel", 8*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
 
     double aC,aN,aSi,aP,aS,aCr,aMn,aFe,aNi,aMo,Atot;
 
-    aFe=62.045*Fe->getA()/(CLHEP::g/CLHEP::mole);
-    aC =0.03*C ->getA()/(CLHEP::g/CLHEP::mole);
-    aMn=2.0*Mn ->getA()/(CLHEP::g/CLHEP::mole);
-    aSi=0.75*Si->getA()/(CLHEP::g/CLHEP::mole);
-    aP =0.045*P->getA()/(CLHEP::g/CLHEP::mole);
-    aS =0.03*S ->getA()/(CLHEP::g/CLHEP::mole);
-    aCr=18.0*Cr->getA()/(CLHEP::g/CLHEP::mole);
-    aMo=3.0*Mo ->getA()/(CLHEP::g/CLHEP::mole);
-    aNi=14.0*Ni->getA()/(CLHEP::g/CLHEP::mole);
-    aN =0.10*N ->getA()/(CLHEP::g/CLHEP::mole);
+    aFe=62.045*Fe->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aC =0.03*C ->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aMn=2.0*Mn ->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aSi=0.75*Si->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aP =0.045*P->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aS =0.03*S ->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aCr=18.0*Cr->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aMo=3.0*Mo ->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aNi=14.0*Ni->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+    aN =0.10*N ->getA()/(GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
     Atot=aFe+aC+aMn+aSi+aP+aS+aCr+aMo+aNi+aN;
 
     steel->add(const_cast<GeoElement*> (Fe),aFe/Atot);
@@ -264,8 +263,8 @@ void ForwardRegionGeoModelFactory::constructElements(GeoPhysVol *fwrPhys,std::ve
             double startX = pointMagStart[0];
             double endX   = pointMagEnd[0];
             double rotationAngle = atan2(endX - startX,endZ - startZ);
-            double r = atof(loadedDataFile[i][xAperture].c_str())*CLHEP::mm/2;
-            double dL = abs(r*tan(rotationAngle))+0.2*CLHEP::mm;
+            double r = atof(loadedDataFile[i][xAperture].c_str())*GeoModelKernelUnits::mm/2;
+            double dL = abs(r*tan(rotationAngle))+0.2*GeoModelKernelUnits::mm;
 
 
             // move start and end points of the magnet element and neighbour elemens accordingly
@@ -290,12 +289,12 @@ void ForwardRegionGeoModelFactory::constructElements(GeoPhysVol *fwrPhys,std::ve
     // --------------- elements cycle -----------------
     for(int i=0; i < lDFSize; i++)
     {
-        startZ = atof(loadedDataFile[i][zStart].c_str())*CLHEP::m;
-        endZ   = atof(loadedDataFile[i][zEnd].c_str())*CLHEP::m;
-        startX = atof(loadedDataFile[i][xStart].c_str())*CLHEP::m;
-        endX   = atof(loadedDataFile[i][xEnd].c_str())*CLHEP::m;
-        startY = atof(loadedDataFile[i][yStart].c_str())*CLHEP::m;
-        endY   = atof(loadedDataFile[i][yEnd].c_str())*CLHEP::m;
+        startZ = atof(loadedDataFile[i][zStart].c_str())*GeoModelKernelUnits::m;
+        endZ   = atof(loadedDataFile[i][zEnd].c_str())*GeoModelKernelUnits::m;
+        startX = atof(loadedDataFile[i][xStart].c_str())*GeoModelKernelUnits::m;
+        endX   = atof(loadedDataFile[i][xEnd].c_str())*GeoModelKernelUnits::m;
+        startY = atof(loadedDataFile[i][yStart].c_str())*GeoModelKernelUnits::m;
+        endY   = atof(loadedDataFile[i][yEnd].c_str())*GeoModelKernelUnits::m;
 
         // translation of element
         x = (startX + endX)/2;
@@ -309,10 +308,10 @@ void ForwardRegionGeoModelFactory::constructElements(GeoPhysVol *fwrPhys,std::ve
         // half-length of element
         halfL = sqrt((endX - startX)*(endX - startX) + (endZ - startZ)*(endZ - startZ))/2;
 
-        r = atof(loadedDataFile[i][xAperture].c_str())*CLHEP::mm/2;
+        r = atof(loadedDataFile[i][xAperture].c_str())*GeoModelKernelUnits::mm/2;
 
         // overlap correction
-        dL = abs(r*tan(rotationAngle))+0.2*CLHEP::mm;
+        dL = abs(r*tan(rotationAngle))+0.2*GeoModelKernelUnits::mm;
 
         // do not shorten magnetic volumes
         if(loadedDataFile[i][name].find("Mag") != std::string::npos)
@@ -324,7 +323,7 @@ void ForwardRegionGeoModelFactory::constructElements(GeoPhysVol *fwrPhys,std::ve
         if(atoi(loadedDataFile[i][type].c_str()) == 0){
             // envelope to allow tracking with G4TrackAction
             if(loadedDataFile[i][name] == "VCDBP.7R1.B"){
-                GeoPhysVol* trackEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 100*CLHEP::mm, halfL, dL, fwrPhys);
+                GeoPhysVol* trackEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 100*GeoModelKernelUnits::mm, halfL, dL, fwrPhys);
                 insertCircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), trackEnv);
             }
             else
@@ -351,20 +350,20 @@ void ForwardRegionGeoModelFactory::constructElements(GeoPhysVol *fwrPhys,std::ve
 
         // elliptical aperture
         if(atoi(loadedDataFile[i][type].c_str()) == 1) {
-            magEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 20*CLHEP::cm, halfL, dL, fwrPhys);
+            magEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 20*GeoModelKernelUnits::cm, halfL, dL, fwrPhys);
             insertEllipticalElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), magEnv);
         }
 
 
-        double magDiam = 19.4*CLHEP::cm;
+        double magDiam = 19.4*GeoModelKernelUnits::cm;
         if(loadedDataFile[i][name].find("Mag") != std::string::npos)
-            magDiam= 19.4*CLHEP::cm;
+            magDiam= 19.4*GeoModelKernelUnits::cm;
         if(loadedDataFile[i][name] == "LQXAA.1R1MagQ1" || loadedDataFile[i][name] == "LQXAG.3R1MagQ3")
-            magDiam = 48*CLHEP::cm;
+            magDiam = 48*GeoModelKernelUnits::cm;
         if(loadedDataFile[i][name] == "LQXBA.2R1MagQ2a" || loadedDataFile[i][name] == "LQXBA.2R1MagQ2b")
-            magDiam = 52*CLHEP::cm;
+            magDiam = 52*GeoModelKernelUnits::cm;
         //else magDiam = std::max(atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()))+2*atof(loadedDataFile[i][tubeThickness].c_str());
-        //else magDiam = 19.4*CLHEP::cm;
+        //else magDiam = 19.4*GeoModelKernelUnits::cm;
 
         // rectcircular aperture with flats in x
         if(atoi(loadedDataFile[i][type].c_str()) == 2) {
@@ -398,37 +397,37 @@ void ForwardRegionGeoModelFactory::create(GeoPhysVol *world)
 
   double startZ,endZ;
 
-  if(m_Config.vp1Compatibility) startZ = 19.0*CLHEP::m;
-  else startZ = 22.0*CLHEP::m;
-  endZ = 268.904*CLHEP::m;
+  if(m_Config.vp1Compatibility) startZ = 19.0*GeoModelKernelUnits::m;
+  else startZ = 22.0*GeoModelKernelUnits::m;
+  endZ = 268.904*GeoModelKernelUnits::m;
 
   //rotationAngle_old = 0;
 
   // mother volume -- union of tubes, one for each side
-  //const GeoBox      *fwrBox    = new GeoBox(2*CLHEP::m,0.5*CLHEP::m,(endZ-startZ)/2);
-  const GeoTube     *fwrTubeL    = new GeoTube(0,2*CLHEP::m,(endZ-startZ)/2);
-  GeoTube     *fwrTubeR    = new GeoTube(0,2*CLHEP::m,(endZ-startZ)/2);
-  HepGeom::Transform3D shiftL = HepGeom::Translate3D(0,0,(endZ+startZ)/2);
-  HepGeom::Transform3D shiftR = HepGeom::Translate3D(0,0,-(endZ+startZ)/2);
+  //const GeoBox      *fwrBox    = new GeoBox(2*GeoModelKernelUnits::m,0.5*GeoModelKernelUnits::m,(endZ-startZ)/2);
+  const GeoTube     *fwrTubeL    = new GeoTube(0,2*GeoModelKernelUnits::m,(endZ-startZ)/2);
+  GeoTube     *fwrTubeR    = new GeoTube(0,2*GeoModelKernelUnits::m,(endZ-startZ)/2);
+  GeoTrf::Transform3D shiftL = GeoTrf::Translate3D(0,0,(endZ+startZ)/2);
+  GeoTrf::Transform3D shiftR = GeoTrf::Translate3D(0,0,-(endZ+startZ)/2);
 
   const GeoShapeShift& fwrTube0 = (*fwrTubeL)<<shiftL;
   const GeoShapeUnion& fwrTube1 = fwrTube0.add((*fwrTubeR)<<shiftR);
 
   // cut out slots for ALFA
-  const GeoTube     *alfa    = new GeoTube(0, 2*CLHEP::m, 500*CLHEP::mm);
-  HepGeom::Transform3D shiftAlfaL1 = HepGeom::Translate3D(0,0,237388*CLHEP::mm);
-  HepGeom::Transform3D shiftAlfaR1 = HepGeom::Translate3D(0,0,-237408*CLHEP::mm);
-  HepGeom::Transform3D shiftAlfaL2 = HepGeom::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7L1 : 241528*CLHEP::mm));
-  HepGeom::Transform3D shiftAlfaR2 = HepGeom::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7R1 :-241548*CLHEP::mm));
+  const GeoTube     *alfa    = new GeoTube(0, 2*GeoModelKernelUnits::m, 500*GeoModelKernelUnits::mm);
+  GeoTrf::Transform3D shiftAlfaL1 = GeoTrf::Translate3D(0,0,237388*GeoModelKernelUnits::mm);
+  GeoTrf::Transform3D shiftAlfaR1 = GeoTrf::Translate3D(0,0,-237408*GeoModelKernelUnits::mm);
+  GeoTrf::Transform3D shiftAlfaL2 = GeoTrf::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7L1 : 241528*GeoModelKernelUnits::mm));
+  GeoTrf::Transform3D shiftAlfaR2 = GeoTrf::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7R1 :-241548*GeoModelKernelUnits::mm));
   const GeoShapeSubtraction& fwrTube2 = fwrTube1.subtract((*alfa)<<shiftAlfaL1).subtract((*alfa)<<shiftAlfaL2).subtract((*alfa)<<shiftAlfaR1).subtract((*alfa)<<shiftAlfaR2);
 
   // cut out slots for AFP
-  const GeoTube     *afp    = new GeoTube(0, 2.5*CLHEP::m, 280*CLHEP::mm);
-  const GeoTube     *afp2    = new GeoTube(0, 2.5*CLHEP::m, 580*CLHEP::mm);
-  HepGeom::Transform3D shiftAfpL1 = HepGeom::Translate3D(0,0,m_Config.posAFPL1);
-  HepGeom::Transform3D shiftAfpR1 = HepGeom::Translate3D(0,0,m_Config.posAFPR1);
-  HepGeom::Transform3D shiftAfpL2 = HepGeom::Translate3D(0,0,m_Config.posAFPL2);
-  HepGeom::Transform3D shiftAfpR2 = HepGeom::Translate3D(0,0,m_Config.posAFPR2);
+  const GeoTube     *afp    = new GeoTube(0, 2.5*GeoModelKernelUnits::m, 280*GeoModelKernelUnits::mm);
+  const GeoTube     *afp2    = new GeoTube(0, 2.5*GeoModelKernelUnits::m, 580*GeoModelKernelUnits::mm);
+  GeoTrf::Transform3D shiftAfpL1 = GeoTrf::Translate3D(0,0,m_Config.posAFPL1);
+  GeoTrf::Transform3D shiftAfpR1 = GeoTrf::Translate3D(0,0,m_Config.posAFPR1);
+  GeoTrf::Transform3D shiftAfpL2 = GeoTrf::Translate3D(0,0,m_Config.posAFPL2);
+  GeoTrf::Transform3D shiftAfpR2 = GeoTrf::Translate3D(0,0,m_Config.posAFPR2);
   const GeoShapeSubtraction& fwrTube = fwrTube2.subtract((*afp)<<shiftAfpL1).subtract((*afp)<<shiftAfpR1).subtract((*afp2)<<shiftAfpL2).subtract((*afp2)<<shiftAfpR2);
 
 
diff --git a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelTool.cxx b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelTool.cxx
index daba635469dcb41ad227842185fb0a3972db8f7f..cd2494ced12ee55c80fd0439ae2a0094dca0ad2d 100755
--- a/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelTool.cxx
+++ b/ForwardDetectors/ForwardSimulation/ForwardRegionGeoModel/src/ForwardRegionGeoModelTool.cxx
@@ -10,6 +10,7 @@
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/MsgStream.h"
 #include "StoreGate/StoreGateSvc.h"
+#include "GeoModelKernel/Units.h"
 
 /**
  ** Constructor(s)
@@ -18,28 +19,28 @@ ForwardRegionGeoModelTool::ForwardRegionGeoModelTool( const std::string& type, c
 : GeoModelTool( type, name, parent )
 {
     m_Config.clear();
-    declareProperty("TCL4JawDistB1I",m_Config.TCL4JawDistB1I=57*CLHEP::mm);
-    declareProperty("TCL4JawDistB2I",m_Config.TCL4JawDistB2I=57*CLHEP::mm);
-    declareProperty("TCL5JawDistB1I",m_Config.TCL5JawDistB1I=57*CLHEP::mm);
-    declareProperty("TCL5JawDistB2I",m_Config.TCL5JawDistB2I=57*CLHEP::mm);
-    declareProperty("TCL6JawDistB1I",m_Config.TCL6JawDistB1I=57*CLHEP::mm);
-    declareProperty("TCL6JawDistB2I",m_Config.TCL6JawDistB2I=57*CLHEP::mm);
-    declareProperty("TCL4JawDistB1O",m_Config.TCL4JawDistB1O=57*CLHEP::mm);
-    declareProperty("TCL4JawDistB2O",m_Config.TCL4JawDistB2O=57*CLHEP::mm);
-    declareProperty("TCL5JawDistB1O",m_Config.TCL5JawDistB1O=57*CLHEP::mm);
-    declareProperty("TCL5JawDistB2O",m_Config.TCL5JawDistB2O=57*CLHEP::mm);
-    declareProperty("TCL6JawDistB1O",m_Config.TCL6JawDistB1O=57*CLHEP::mm);
-    declareProperty("TCL6JawDistB2O",m_Config.TCL6JawDistB2O=57*CLHEP::mm);
+    declareProperty("TCL4JawDistB1I",m_Config.TCL4JawDistB1I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL4JawDistB2I",m_Config.TCL4JawDistB2I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL5JawDistB1I",m_Config.TCL5JawDistB1I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL5JawDistB2I",m_Config.TCL5JawDistB2I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL6JawDistB1I",m_Config.TCL6JawDistB1I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL6JawDistB2I",m_Config.TCL6JawDistB2I=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL4JawDistB1O",m_Config.TCL4JawDistB1O=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL4JawDistB2O",m_Config.TCL4JawDistB2O=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL5JawDistB1O",m_Config.TCL5JawDistB1O=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL5JawDistB2O",m_Config.TCL5JawDistB2O=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL6JawDistB1O",m_Config.TCL6JawDistB1O=57*GeoModelKernelUnits::mm);
+    declareProperty("TCL6JawDistB2O",m_Config.TCL6JawDistB2O=57*GeoModelKernelUnits::mm);
     declareProperty("vp1Compatibility", m_Config.vp1Compatibility=false);
     declareProperty("buildTCL4",m_Config.buildTCL4=false);
     declareProperty("buildTCL6",m_Config.buildTCL6=false);
     declareProperty("ALFAInNewPosition",m_Config.ALFAInNewPosition=false);
-    declareProperty("newPosB7L1",m_Config.newPosB7L1=245656.77*CLHEP::mm);
-    declareProperty("newPosB7R1",m_Config.newPosB7R1=-245656.11*CLHEP::mm);
-    declareProperty("posAFPL1",m_Config.posAFPL1=204500*CLHEP::mm);
-    declareProperty("posAFPR1",m_Config.posAFPR1=-204500*CLHEP::mm);
-    declareProperty("posAFPL2",m_Config.posAFPL2=212675*CLHEP::mm);
-    declareProperty("posAFPR2",m_Config.posAFPR2=-212675*CLHEP::mm);
+    declareProperty("newPosB7L1",m_Config.newPosB7L1=245656.77*GeoModelKernelUnits::mm);
+    declareProperty("newPosB7R1",m_Config.newPosB7R1=-245656.11*GeoModelKernelUnits::mm);
+    declareProperty("posAFPL1",m_Config.posAFPL1=204500*GeoModelKernelUnits::mm);
+    declareProperty("posAFPR1",m_Config.posAFPR1=-204500*GeoModelKernelUnits::mm);
+    declareProperty("posAFPL2",m_Config.posAFPL2=212675*GeoModelKernelUnits::mm);
+    declareProperty("posAFPR2",m_Config.posAFPR2=-212675*GeoModelKernelUnits::mm);
 }
 
 /**
diff --git a/ForwardDetectors/LUCID/LUCID_GeoModel/CMakeLists.txt b/ForwardDetectors/LUCID/LUCID_GeoModel/CMakeLists.txt
index 98759e89f8448d0100e1430897301422ffda632d..a15717f40dc593ff7f5f598f767df4f064e01bc1 100644
--- a/ForwardDetectors/LUCID/LUCID_GeoModel/CMakeLists.txt
+++ b/ForwardDetectors/LUCID/LUCID_GeoModel/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( LUCID_GeoModel )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           GaudiKernel
                           PRIVATE
@@ -19,20 +18,20 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LUCID_GeoModelLib
                    src/*.cxx
                    PUBLIC_HEADERS LUCID_GeoModel
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel GeoModelUtilities GaudiKernel StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel SGTools )
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities GaudiKernel StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaKernel SGTools )
 
 atlas_add_component( LUCID_GeoModel
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities GaudiKernel AthenaKernel SGTools StoreGateLib SGtests LUCID_GeoModelLib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities GaudiKernel AthenaKernel SGTools StoreGateLib SGtests LUCID_GeoModelLib )
 
diff --git a/ForwardDetectors/LUCID/LUCID_GeoModel/src/GetRefIndex.cxx b/ForwardDetectors/LUCID/LUCID_GeoModel/src/GetRefIndex.cxx
index f926c62af1d5870dc631c20676e25634530d0e17..518c44509c22c2582198e089bd5bf5d17fdb1e67 100644
--- a/ForwardDetectors/LUCID/LUCID_GeoModel/src/GetRefIndex.cxx
+++ b/ForwardDetectors/LUCID/LUCID_GeoModel/src/GetRefIndex.cxx
@@ -7,15 +7,16 @@
 #include <iomanip>
 #include <math.h>
 
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+//#include "CLHEP/Units/PhysicalConstants.h"
+//#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "LUCID_DetectorFactory.h"
 #include "GetRefIndex.h"
+#include "GeoModelKernel/Units.h"
 
 double GetRefIndexGas(double lambda, double pressure, double temperature) {
     
-  double e  = 2.*M_PI*CLHEP::hbarc/(CLHEP::eV*CLHEP::nm)/lambda;  
+  double e  = 2.*M_PI*GeoModelKernelUnits::hbarc/(GeoModelKernelUnits::eV*GeoModelKernelUnits::nm)/lambda;
   double e0 = 17;
   double k  = 0.25938;
   double x  = k*pressure/temperature/(1 - pow(e/e0, 2));
@@ -28,7 +29,7 @@ double GetRefIndexQuartz(double lambda) {
   double const SellCoeu[] = {46.41,  228.71, 0.014};
   double const SellCoed[] = {10.666, 18.125, 0.125};
   
-  double e = 2.*M_PI*CLHEP::hbarc/(CLHEP::eV*CLHEP::nm)/lambda;  
+  double e = 2.*M_PI*GeoModelKernelUnits::hbarc/(GeoModelKernelUnits::eV*GeoModelKernelUnits::nm)/lambda;
   double r = 1.;
   
   for(int i=0; i<3; i++) r += SellCoeu[i]/(SellCoed[i]*SellCoed[i] - e*e);
diff --git a/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_DetectorFactory.cxx b/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_DetectorFactory.cxx
index fc0384bf23bd3c9342c2342ee50ecca4580fb405..eaae2ee41532ee4af5d0838273a99618fa8263c8 100755
--- a/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_DetectorFactory.cxx
+++ b/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_DetectorFactory.cxx
@@ -15,6 +15,8 @@
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelUtilities/GeoExtendedMaterial.h"
 #include "GeoModelUtilities/GeoMaterialPropertiesTable.h"
 #include "GeoModelUtilities/GeoOpticalSurface.h"
@@ -78,7 +80,7 @@ void LUCID_DetectorFactory::create(GeoPhysVol* world) {
   
   log << MSG::DEBUG << " Build LUCID side A " << endmsg;
 
-  GeoPcon* aShape = new GeoPcon(0, 360*CLHEP::deg); 
+  GeoPcon* aShape = new GeoPcon(0, 360*GeoModelKernelUnits::deg); 
   
   aShape->addPlane(                 0, m_lp->coolingRadius, m_lp->VJconeRadiusFront);
   aShape->addPlane(m_lp->VJconelength, m_lp->coolingRadius, m_lp->VJconeRadiusBack);
@@ -90,7 +92,7 @@ void LUCID_DetectorFactory::create(GeoPhysVol* world) {
   addCooling(phyVolA);
   addVessel (phyVolA);
   
-  world->add(new GeoAlignableTransform(HepGeom::Translate3D(0, 0,  m_lp->VJdistanceToIP)));
+  world->add(new GeoAlignableTransform(GeoTrf::Translate3D(0, 0,  m_lp->VJdistanceToIP)));
   world->add(new GeoNameTag("LucidSideA"));
   world->add(phyVolA);
   
@@ -100,7 +102,7 @@ void LUCID_DetectorFactory::create(GeoPhysVol* world) {
   
   GeoFullPhysVol* phyVolC = phyVolA->clone();
     
-  world->add(new GeoAlignableTransform(HepGeom::Translate3D(0, 0, -m_lp->VJdistanceToIP )*HepGeom::RotateY3D(180*CLHEP::degree)*HepGeom::RotateZ3D(180*CLHEP::degree)));
+  world->add(new GeoAlignableTransform(GeoTrf::Translate3D(0, 0, -m_lp->VJdistanceToIP )*GeoTrf::RotateY3D(180*GeoModelKernelUnits::degree)*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::degree)));
   world->add(new GeoNameTag("LucidSideC"));
   world->add(phyVolC);
   
@@ -121,7 +123,7 @@ void LUCID_DetectorFactory::buildMaterials()  {
 
   m_alu = m_materialManager->getMaterial("std::Aluminium");
   
-  log << MSG::DEBUG << " Aluminium density[g/cm3]: " << m_alu->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+  log << MSG::DEBUG << " Aluminium density[g/cm3]: " << m_alu->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
 
   log << MSG::DEBUG << " Build Cherenkov Gas " << endmsg;
   
@@ -134,9 +136,9 @@ void LUCID_DetectorFactory::buildMaterials()  {
   m_gas->add(const_cast<GeoElement*>(fluorine), 10*fluorine->getA()/(4*carbon->getA() + 10*fluorine->getA()));
   
   log << MSG::DEBUG << " gasState              : " << m_gas->getState()              << endmsg;
-  log << MSG::DEBUG << " gasTemperature[kelvin]: " << m_gas->getTemperature()/CLHEP::kelvin << endmsg;
-  log << MSG::DEBUG << " gasPressure      [bar]: " << m_gas->getPressure()/CLHEP::bar       << endmsg;
-  log << MSG::DEBUG << " gasDensity     [g/cm3]: " << m_gas->getDensity()/(CLHEP::g/CLHEP::cm3)    << endmsg;
+  log << MSG::DEBUG << " gasTemperature[kelvin]: " << m_gas->getTemperature()/GeoModelKernelUnits::kelvin << endmsg;
+  log << MSG::DEBUG << " gasPressure      [bar]: " << m_gas->getPressure()/GeoModelKernelUnits::bar       << endmsg;
+  log << MSG::DEBUG << " gasDensity     [g/cm3]: " << m_gas->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3)    << endmsg;
 
   log << MSG::DEBUG << " Wavelength dependent properties " << endmsg;
   
@@ -149,16 +151,16 @@ void LUCID_DetectorFactory::buildMaterials()  {
   double* gasAbsLength     = new double[waveLengthNum];
   double* tubeReflectivity = new double[waveLengthNum];
   
-  double absLengthScale = (m_lp->gasPressure) ? (m_lp->gasPressure/CLHEP::bar) : 1;
+  double absLengthScale = (m_lp->gasPressure) ? (m_lp->gasPressure/GeoModelKernelUnits::bar) : 1;
   
   for(int i=0; i<waveLengthNum; i++) {
     
-    photonWaveLength[i] = (m_lp->waveLengthMin + i*m_lp->waveLengthStep)*CLHEP::nm;
-    photonEnergy    [i] = 2.*M_PI*(CLHEP::hbarc/(CLHEP::eV*CLHEP::nm))/(photonWaveLength[i]/CLHEP::nm)*CLHEP::eV;
-    quartzRefIndex  [i] = GetRefIndexQuartz (photonWaveLength[i]/CLHEP::nm);
-    gasRefIndex     [i] = GetRefIndexGas    (photonWaveLength[i]/CLHEP::nm, m_lp->gasPressure/CLHEP::bar, m_lp->gasTemperature/CLHEP::kelvin);
-    gasAbsLength    [i] = GetAbsLengthGas   (photonWaveLength[i]/CLHEP::nm)*CLHEP::m/absLengthScale;
-    tubeReflectivity[i] = GetReflectivity   (photonWaveLength[i]/CLHEP::nm);
+    photonWaveLength[i] = (m_lp->waveLengthMin + i*m_lp->waveLengthStep)*GeoModelKernelUnits::nm;
+    photonEnergy    [i] = 2.*M_PI*(GeoModelKernelUnits::hbarc/(GeoModelKernelUnits::eV*GeoModelKernelUnits::nm))/(photonWaveLength[i]/GeoModelKernelUnits::nm)*GeoModelKernelUnits::eV;
+    quartzRefIndex  [i] = GetRefIndexQuartz (photonWaveLength[i]/GeoModelKernelUnits::nm);
+    gasRefIndex     [i] = GetRefIndexGas    (photonWaveLength[i]/GeoModelKernelUnits::nm, m_lp->gasPressure/GeoModelKernelUnits::bar, m_lp->gasTemperature/GeoModelKernelUnits::kelvin);
+    gasAbsLength    [i] = GetAbsLengthGas   (photonWaveLength[i]/GeoModelKernelUnits::nm)*GeoModelKernelUnits::m/absLengthScale;
+    tubeReflectivity[i] = GetReflectivity   (photonWaveLength[i]/GeoModelKernelUnits::nm);
   }
   
   log << MSG::DEBUG << " **************************************************************************************************** " << endmsg;
@@ -167,11 +169,11 @@ void LUCID_DetectorFactory::buildMaterials()  {
   for(int i=0; i<waveLengthNum; i++) {
     
     log << MSG::DEBUG 
-	<< std::setw(11) << photonWaveLength[i]/CLHEP::nm
-	<< std::setw(11) << photonEnergy    [i]/CLHEP::eV
+	<< std::setw(11) << photonWaveLength[i]/GeoModelKernelUnits::nm
+	<< std::setw(11) << photonEnergy    [i]/GeoModelKernelUnits::eV
 	<< std::setw(13) << quartzRefIndex  [i]
 	<< std::setw(10) << gasRefIndex     [i]
-	<< std::setw(16) << gasAbsLength    [i]/CLHEP::m
+	<< std::setw(16) << gasAbsLength    [i]/GeoModelKernelUnits::m
 	<< std::setw(17) << tubeReflectivity[i]
 	<< endmsg;
   }
@@ -190,7 +192,7 @@ void LUCID_DetectorFactory::buildMaterials()  {
   
   log << MSG::DEBUG << " Build Quartz for PMT windows" << endmsg; 
   
-  m_quartz = new GeoExtendedMaterial("SiO2", m_lp->quartzDensity, stateSolid, CLHEP::STP_Temperature);
+  m_quartz = new GeoExtendedMaterial("SiO2", m_lp->quartzDensity, stateSolid, GeoModelKernelUnits::STP_Temperature);
   
   const GeoElement* oxygen  = m_materialManager->getElement("Oxygen");
   const GeoElement* silicon = m_materialManager->getElement("Silicon");
@@ -211,7 +213,7 @@ void LUCID_DetectorFactory::buildMaterials()  {
   
   m_cop = m_materialManager->getMaterial("std::Copper");
   
-  log << MSG::DEBUG << " Copper density[g/cm3]: " << m_cop->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+  log << MSG::DEBUG << " Copper density[g/cm3]: " << m_cop->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
     
   log << MSG::DEBUG << " Build Reflective Tube Optical Surfaces " << endmsg; 
   
@@ -249,17 +251,17 @@ void LUCID_DetectorFactory::calcTubeParams() {
   
   for (int i=0; i<nLayers; i++) {
     
-    m_tubeTheta  [i] = atan(layerRadius[i]/m_lp->distanceToIP)*CLHEP::rad;
-    tubePhiOffset[i] = (i==0)*M_PI/8*CLHEP::rad;
+    m_tubeTheta  [i] = atan(layerRadius[i]/m_lp->distanceToIP)*GeoModelKernelUnits::rad;
+    tubePhiOffset[i] = (i==0)*M_PI/8*GeoModelKernelUnits::rad;
     
     for (int j=0; j<nPmtTubesPerLayer; j++) {
       
-      tubePhiAngle[i][j] = 2*M_PI*j/nPmtTubesPerLayer*CLHEP::rad + tubePhiOffset[i];
+      tubePhiAngle[i][j] = 2*M_PI*j/nPmtTubesPerLayer*GeoModelKernelUnits::rad + tubePhiOffset[i];
       
-      double tubeDistance = layerRadius[i] + m_lp->tubeLength/2*sin(m_tubeTheta[i]/CLHEP::rad);
+      double tubeDistance = layerRadius[i] + m_lp->tubeLength/2*sin(m_tubeTheta[i]/GeoModelKernelUnits::rad);
       
-      m_tubePosition[i][j][0] = tubeDistance*cos(tubePhiAngle[i][j]/CLHEP::rad); if (fabs(m_tubePosition[i][j][0]) < 1e-10) m_tubePosition[i][j][0] = 0;
-      m_tubePosition[i][j][1] = tubeDistance*sin(tubePhiAngle[i][j]/CLHEP::rad); if (fabs(m_tubePosition[i][j][1]) < 1e-10) m_tubePosition[i][j][1] = 0;
+      m_tubePosition[i][j][0] = tubeDistance*cos(tubePhiAngle[i][j]/GeoModelKernelUnits::rad); if (fabs(m_tubePosition[i][j][0]) < 1e-10) m_tubePosition[i][j][0] = 0;
+      m_tubePosition[i][j][1] = tubeDistance*sin(tubePhiAngle[i][j]/GeoModelKernelUnits::rad); if (fabs(m_tubePosition[i][j][1]) < 1e-10) m_tubePosition[i][j][1] = 0;
     }
   }
   
@@ -274,13 +276,13 @@ void LUCID_DetectorFactory::calcTubeParams() {
       log << MSG::DEBUG << setiosflags(std::ios::right)
 	  << std::setw( 6) << lay
 	  << std::setw( 5) << tub
-	  << std::setw(11) << m_lp->tubeRadius/CLHEP::mm
-	  << std::setw(16) << layerRadius   [lay]/CLHEP::mm
-	  << std::setw(14) << m_tubeTheta   [lay]/CLHEP::degree
-	  << std::setw(19) << tubePhiOffset [lay]/CLHEP::degree
-	  << std::setw(18) << tubePhiAngle  [lay][tub]/CLHEP::degree
-	  << std::setw(19) << m_tubePosition[lay][tub][0]/CLHEP::mm
-	  << std::setw(18) << m_tubePosition[lay][tub][1]/CLHEP::mm
+	  << std::setw(11) << m_lp->tubeRadius/GeoModelKernelUnits::mm
+	  << std::setw(16) << layerRadius   [lay]/GeoModelKernelUnits::mm
+	  << std::setw(14) << m_tubeTheta   [lay]/GeoModelKernelUnits::degree
+	  << std::setw(19) << tubePhiOffset [lay]/GeoModelKernelUnits::degree
+	  << std::setw(18) << tubePhiAngle  [lay][tub]/GeoModelKernelUnits::degree
+	  << std::setw(19) << m_tubePosition[lay][tub][0]/GeoModelKernelUnits::mm
+	  << std::setw(18) << m_tubePosition[lay][tub][1]/GeoModelKernelUnits::mm
 	  << endmsg;
   
   log << MSG::DEBUG << " ********************************************************************************************************************************* " << endmsg;
@@ -296,12 +298,12 @@ void LUCID_DetectorFactory::addVJcone(GeoFullPhysVol* parent) {
 				     m_lp->VJconeRadiusBack  - m_lp->VJconeThickness,
 				     m_lp->VJconeRadiusFront, 
 				     m_lp->VJconeRadiusBack, 
-				     (m_lp->VJconelength - (m_lp->VJconeFrontRingLength - m_lp->VJconeFrontRingOverlap))/2, 0*CLHEP::deg,360*CLHEP::deg);
+				     (m_lp->VJconelength - (m_lp->VJconeFrontRingLength - m_lp->VJconeFrontRingOverlap))/2, 0*GeoModelKernelUnits::deg,360*GeoModelKernelUnits::deg);
   
   GeoLogVol*  logVol0 = new GeoLogVol("lvVJcone", aShape0, m_alu);
   GeoPhysVol* phyVol0 = new GeoPhysVol(logVol0); 
   
-  parent->add(new GeoTransform(HepGeom::TranslateZ3D((m_lp->VJconelength + (m_lp->VJconeFrontRingLength - m_lp->VJconeFrontRingOverlap))/2)));
+  parent->add(new GeoTransform(GeoTrf::TranslateZ3D((m_lp->VJconelength + (m_lp->VJconeFrontRingLength - m_lp->VJconeFrontRingOverlap))/2)));
   parent->add(new GeoNameTag("LucidVJcone"));
   parent->add(phyVol0);
   
@@ -311,7 +313,7 @@ void LUCID_DetectorFactory::addVJcone(GeoFullPhysVol* parent) {
   GeoLogVol*  logVol1 = new GeoLogVol("lvVJconeFrontRing", aShape1, m_alu);
   GeoPhysVol* phyVol1 = new GeoPhysVol(logVol1); 
   
-  parent->add(new GeoTransform(HepGeom::TranslateZ3D(m_lp->VJconeFrontRingLength/2)));
+  parent->add(new GeoTransform(GeoTrf::TranslateZ3D(m_lp->VJconeFrontRingLength/2)));
   parent->add(new GeoNameTag("LucidVJconeFrontRing"));
   parent->add(phyVol1);
 }
@@ -326,7 +328,7 @@ void LUCID_DetectorFactory::addCooling(GeoFullPhysVol* parent) {
   GeoLogVol*  logVol = new GeoLogVol("lvCooling", aShape, m_cop);
   GeoPhysVol* phyVol = new GeoPhysVol(logVol); 
 
-  parent->add(new GeoTransform(HepGeom::Translate3D(0, 0, m_lp->vesselLength/2 + (m_lp->distanceToIP - m_lp->VJdistanceToIP))));
+  parent->add(new GeoTransform(GeoTrf::Translate3D(0, 0, m_lp->vesselLength/2 + (m_lp->distanceToIP - m_lp->VJdistanceToIP))));
   parent->add(new GeoNameTag("LucidCooling"));
   parent->add(phyVol);
 }
@@ -336,7 +338,7 @@ void LUCID_DetectorFactory::addVessel(GeoFullPhysVol* parent) {
   MsgStream log(Athena::getMessageSvc(), "LUCID_DetectorFactory::addVessel");
   log << MSG::INFO << " LUCID_DetectorFactory::addVessel " << endmsg;
   
-  GeoPcon* aShape = new GeoPcon(0, 360*CLHEP::deg); 
+  GeoPcon* aShape = new GeoPcon(0, 360*GeoModelKernelUnits::deg); 
   aShape->addPlane(                 0, m_lp->vesselInnerRadius, m_lp->vesselOuterRadMin + m_lp->vesselOuterThickness);
   aShape->addPlane(m_lp->vesselLength, m_lp->vesselInnerRadius, m_lp->vesselOuterRadMax + m_lp->vesselOuterThickness);
   
@@ -347,7 +349,7 @@ void LUCID_DetectorFactory::addVessel(GeoFullPhysVol* parent) {
   
   addVesselGas(phyVol);
   
-  parent->add(new GeoAlignableTransform(HepGeom::Translate3D(0, 0,  m_lp->distanceToIP - m_lp->VJdistanceToIP  )));
+  parent->add(new GeoAlignableTransform(GeoTrf::Translate3D(0, 0,  m_lp->distanceToIP - m_lp->VJdistanceToIP  )));
   parent->add(new GeoNameTag("LucidVessel"));
   parent->add(phyVol);
 }
@@ -358,7 +360,7 @@ void LUCID_DetectorFactory::addVesselGas(GeoPhysVol* parent) {
 
   log << MSG::INFO << " LUCID_DetectorFactory::addVesselGas " << endmsg;
   
-  GeoPcon* aShape = new GeoPcon(0, 360*CLHEP::deg); 
+  GeoPcon* aShape = new GeoPcon(0, 360*GeoModelKernelUnits::deg); 
   aShape->addPlane(                 0, m_lp->vesselInnerRadius + m_lp->vesselInnerThickness, m_lp->vesselOuterRadMin);
   aShape->addPlane(m_lp->vesselLength, m_lp->vesselInnerRadius + m_lp->vesselInnerThickness, m_lp->vesselOuterRadMax);
 
@@ -382,7 +384,7 @@ void LUCID_DetectorFactory::addBulkHeads(GeoPhysVol* parent) {
   GeoLogVol*  logVol0 = new GeoLogVol("lvBulkHead0", aShape0, m_alu);
   GeoPhysVol* phyVol0 = new GeoPhysVol(logVol0); 
   
-  parent->add(new GeoTransform(HepGeom::Translate3D(0, 0, m_lp->bulkheadThickness/2)));
+  parent->add(new GeoTransform(GeoTrf::Translate3D(0, 0, m_lp->bulkheadThickness/2)));
   parent->add(new GeoNameTag("LucidBulkHead0"));
   parent->add(phyVol0);
   
@@ -390,7 +392,7 @@ void LUCID_DetectorFactory::addBulkHeads(GeoPhysVol* parent) {
   GeoLogVol*  logVol1 = new GeoLogVol("lvBulkHead1", aShape1, m_alu);
   GeoPhysVol* phyVol1 = new GeoPhysVol(logVol1);   
   
-  parent->add(new GeoTransform(HepGeom::Translate3D(0, 0, m_lp->vesselLength - m_lp->bulkheadThickness/2)));
+  parent->add(new GeoTransform(GeoTrf::Translate3D(0, 0, m_lp->vesselLength - m_lp->bulkheadThickness/2)));
   parent->add(new GeoNameTag("LucidBulkHead1"));
   parent->add(phyVol1);
 }
@@ -428,30 +430,31 @@ void LUCID_DetectorFactory::addTubes(GeoPhysVol* parent) {
       
       double x = m_tubePosition[lay][tub][0];
       double y = m_tubePosition[lay][tub][1];
-      
+      double r = sqrt(x*x+y*y);
+
       char sname[256]; 
       
       log << MSG::DEBUG << " Add PMT as daugther of the TubeGas " << endmsg;
       
       sprintf(sname, "LucidPmt%d", tubeNumber);
       phyVol2->add(new GeoNameTag  (sname));
-      phyVol2->add(new GeoTransform(HepGeom::Translate3D(0, 0, (m_lp->tubeLength - m_lp->pmtThickness)/2)));
+      phyVol2->add(new GeoTransform(GeoTrf::Translate3D(0, 0, (m_lp->tubeLength - m_lp->pmtThickness)/2)));
       phyVol2->add(phyVol3);
       
       log << MSG::DEBUG << " Add Alluminium Tube as daugther of the VesselGas " << endmsg;
 
       sprintf(sname, "LucidTube%d", tubeNumber);
       parent->add(new GeoNameTag  (sname));
-      parent->add(new GeoTransform(HepGeom::Rotate3D   (m_tubeTheta[lay], CLHEP::Hep3Vector(-y, x, 0))));
-      parent->add(new GeoTransform(HepGeom::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
+      parent->add(new GeoTransform(GeoTrf::Rotate3D   (m_tubeTheta[lay],GeoTrf:: Vector3D(-y/r, x/r, 0))));
+      parent->add(new GeoTransform(GeoTrf::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
       parent->add(phyVol1);
       
       log << MSG::DEBUG << " Add TubeGas as daugther of the VesselGas " << endmsg;
 
       sprintf(sname, "LucidTubeGas%d", tubeNumber);
       parent->add(new GeoNameTag  (sname));
-      parent->add(new GeoTransform(HepGeom::Rotate3D   (m_tubeTheta[lay], CLHEP::Hep3Vector(-y, x, 0))));
-      parent->add(new GeoTransform(HepGeom::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
+      parent->add(new GeoTransform(GeoTrf::Rotate3D   (m_tubeTheta[lay], GeoTrf::Vector3D(-y/r, x/r, 0))));
+      parent->add(new GeoTransform(GeoTrf::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
       parent->add(phyVol2);
     
       log << MSG::DEBUG << " Add the Optical Surface between Gas and Tube physica volumes " << endmsg;
@@ -479,6 +482,7 @@ void LUCID_DetectorFactory::addTubes(GeoPhysVol* parent) {
     log << MSG::DEBUG << " Set Fiber-Readout Tubes on Inner layer at 45 degrees " << endmsg;
     
     x = y = r*cos(M_PI/4); 
+    double r1 = sqrt(x*x + y*y);
 
     if (tubeNumber==17 || tubeNumber==18) x = -x;
     if (tubeNumber==18 || tubeNumber==19) y = -y;
@@ -489,23 +493,23 @@ void LUCID_DetectorFactory::addTubes(GeoPhysVol* parent) {
     
     sprintf(sname, "LucidPmt%d", tubeNumber);
     phyVol2->add(new GeoNameTag  (sname));
-    phyVol2->add(new GeoTransform(HepGeom::Translate3D(0, 0, (m_lp->tubeLength - m_lp->pmtThickness)/2)));
+    phyVol2->add(new GeoTransform(GeoTrf::Translate3D(0, 0, (m_lp->tubeLength - m_lp->pmtThickness)/2)));
     phyVol2->add(phyVol3);
     
     log << MSG::DEBUG << " Add Alluminium Tube as daugther of the VesselGas " << endmsg;
 
     sprintf(sname, "LucidTube%d", tubeNumber);
     parent->add(new GeoNameTag  (sname));
-    parent->add(new GeoTransform(HepGeom::Rotate3D   (m_tubeTheta[0], CLHEP::Hep3Vector(-y, x, 0))));
-    parent->add(new GeoTransform(HepGeom::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
+    parent->add(new GeoTransform(GeoTrf::Rotate3D   (m_tubeTheta[0], GeoTrf::Vector3D(-y/r1, x/r1, 0))));
+    parent->add(new GeoTransform(GeoTrf::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength)/2 - m_lp->bulkheadThickness)));
     parent->add(phyVol1);
     
     log << MSG::DEBUG << " Add TubeGas as daugther of the VesselGas " << endmsg;
 
     sprintf(sname, "LucidTubeGas%d", tubeNumber);
     parent->add(new GeoNameTag  (sname));
-    parent->add(new GeoTransform(HepGeom::Rotate3D   (m_tubeTheta[0], CLHEP::Hep3Vector(-y, x, 0))));
-    parent->add(new GeoTransform(HepGeom::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength )/2 - m_lp->bulkheadThickness)));    
+    parent->add(new GeoTransform(GeoTrf::Rotate3D   (m_tubeTheta[0], GeoTrf::Vector3D(-y/r1, x/r1, 0))));
+    parent->add(new GeoTransform(GeoTrf::Translate3D(x, y, m_lp->vesselLength/2 + (m_lp->vesselLength - m_lp->tubeLength )/2 - m_lp->bulkheadThickness)));    
     parent->add(phyVol2);
     
     log << MSG::DEBUG << " Add the Optical Surface between Gas and Tube physica volumes " << endmsg;
diff --git a/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_RDBAaccess.cxx b/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_RDBAaccess.cxx
index 9942f3f901e81ee5b7cbe8872ee97558415c31ac..f301f728917299e459d18fb1f494a54d1e88e4ad 100755
--- a/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_RDBAaccess.cxx
+++ b/ForwardDetectors/LUCID/LUCID_GeoModel/src/LUCID_RDBAaccess.cxx
@@ -4,7 +4,8 @@
 
 #include "LUCID_RDBAaccess.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+//#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include "GeoModelUtilities/DecodeVersionKey.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -72,34 +73,34 @@ void LUCID_RDBAccess::SetParameters() {
   
   for(AccessSvc_iter = m_lucidParams->begin(); AccessSvc_iter != m_lucidParams->end(); AccessSvc_iter++) {
     
-    distanceToIP                  = (*AccessSvc_iter)->getDouble("DISTANCETOIP")*CLHEP::mm;
-    VJdistanceToIP                = (*AccessSvc_iter)->getDouble("VJDISTANCETOIP")*CLHEP::mm;
-    VJconelength                  = (*AccessSvc_iter)->getDouble("VJCONELENGTH")*CLHEP::mm;
-    VJconeRadiusFront             = (*AccessSvc_iter)->getDouble("VJCONERADIUSFRONT")*CLHEP::mm;
-    VJconeRadiusBack              = (*AccessSvc_iter)->getDouble("VJCONERADIUSBACK")*CLHEP::mm;
-    VJconeThickness               = (*AccessSvc_iter)->getDouble("VJCONETHICKNESS")*CLHEP::mm;
-    VJconeFrontRingThickness      = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGTHICKNESS")*CLHEP::mm;
-    VJconeFrontRingLength         = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGLENGTH")*CLHEP::mm;
-    VJconeFrontRingOverlap        = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGOVERLAP")*CLHEP::mm;
-    vesselInnerRadius             = (*AccessSvc_iter)->getDouble("VESSELINNERRADIUS")*CLHEP::mm;
-    vesselInnerThickness          = (*AccessSvc_iter)->getDouble("VESSELINNERTHICKNESS")*CLHEP::mm;
-    vesselOuterRadMin             = (*AccessSvc_iter)->getDouble("VESSELOUTERRADMIN")*CLHEP::mm + 3*CLHEP::mm;
-    vesselOuterRadMax             = (*AccessSvc_iter)->getDouble("VESSELOUTERRADMAX")*CLHEP::mm + 3*CLHEP::mm;
-    vesselOuterThickness          = (*AccessSvc_iter)->getDouble("VESSELOUTERTHICKNESS")*CLHEP::mm;
-    vesselLength                  = (*AccessSvc_iter)->getDouble("VESSELLENGTH")*CLHEP::mm;
-    bulkheadThickness             = (*AccessSvc_iter)->getDouble("BULKHEADTHICKNESS")*CLHEP::mm;
-    coolingRadius                 = (*AccessSvc_iter)->getDouble("COOLINGRADIUS")*CLHEP::mm;
-    coolingThickness              = (*AccessSvc_iter)->getDouble("COOLINGTHICKNESS")*CLHEP::mm;
-    layerRadius1                  = (*AccessSvc_iter)->getDouble("LAYERRADIUS1")*CLHEP::mm;
-    layerRadius2                  = (*AccessSvc_iter)->getDouble("LAYERRADIUS2")*CLHEP::mm;
-    tubeRadius                    = (*AccessSvc_iter)->getDouble("TUBERADIUS")*CLHEP::mm;
-    tubeThickness                 = (*AccessSvc_iter)->getDouble("TUBETHICKNESS")*CLHEP::mm;
-    tubeLength                    = (*AccessSvc_iter)->getDouble("TUBELENGTH")*CLHEP::mm;
-    pmtThickness                  = (*AccessSvc_iter)->getDouble("PMTTHICKNESS")*CLHEP::mm;
-    gasPressure                   = (*AccessSvc_iter)->getDouble("GASPRESSURE")*CLHEP::bar;
-    gasDensity                    = (*AccessSvc_iter)->getDouble("GASDENSITY")*CLHEP::gram/CLHEP::cm3;
-    gasTemperature                = (*AccessSvc_iter)->getDouble("GASTEMPERATURE")*CLHEP::kelvin;
-    quartzDensity                 = (*AccessSvc_iter)->getDouble("QUARTZDENSITY")*CLHEP::gram/CLHEP::cm3;
+    distanceToIP                  = (*AccessSvc_iter)->getDouble("DISTANCETOIP")*GeoModelKernelUnits::mm;
+    VJdistanceToIP                = (*AccessSvc_iter)->getDouble("VJDISTANCETOIP")*GeoModelKernelUnits::mm;
+    VJconelength                  = (*AccessSvc_iter)->getDouble("VJCONELENGTH")*GeoModelKernelUnits::mm;
+    VJconeRadiusFront             = (*AccessSvc_iter)->getDouble("VJCONERADIUSFRONT")*GeoModelKernelUnits::mm;
+    VJconeRadiusBack              = (*AccessSvc_iter)->getDouble("VJCONERADIUSBACK")*GeoModelKernelUnits::mm;
+    VJconeThickness               = (*AccessSvc_iter)->getDouble("VJCONETHICKNESS")*GeoModelKernelUnits::mm;
+    VJconeFrontRingThickness      = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGTHICKNESS")*GeoModelKernelUnits::mm;
+    VJconeFrontRingLength         = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGLENGTH")*GeoModelKernelUnits::mm;
+    VJconeFrontRingOverlap        = (*AccessSvc_iter)->getDouble("VJCONEFRONTRINGOVERLAP")*GeoModelKernelUnits::mm;
+    vesselInnerRadius             = (*AccessSvc_iter)->getDouble("VESSELINNERRADIUS")*GeoModelKernelUnits::mm;
+    vesselInnerThickness          = (*AccessSvc_iter)->getDouble("VESSELINNERTHICKNESS")*GeoModelKernelUnits::mm;
+    vesselOuterRadMin             = (*AccessSvc_iter)->getDouble("VESSELOUTERRADMIN")*GeoModelKernelUnits::mm + 3*GeoModelKernelUnits::mm;
+    vesselOuterRadMax             = (*AccessSvc_iter)->getDouble("VESSELOUTERRADMAX")*GeoModelKernelUnits::mm + 3*GeoModelKernelUnits::mm;
+    vesselOuterThickness          = (*AccessSvc_iter)->getDouble("VESSELOUTERTHICKNESS")*GeoModelKernelUnits::mm;
+    vesselLength                  = (*AccessSvc_iter)->getDouble("VESSELLENGTH")*GeoModelKernelUnits::mm;
+    bulkheadThickness             = (*AccessSvc_iter)->getDouble("BULKHEADTHICKNESS")*GeoModelKernelUnits::mm;
+    coolingRadius                 = (*AccessSvc_iter)->getDouble("COOLINGRADIUS")*GeoModelKernelUnits::mm;
+    coolingThickness              = (*AccessSvc_iter)->getDouble("COOLINGTHICKNESS")*GeoModelKernelUnits::mm;
+    layerRadius1                  = (*AccessSvc_iter)->getDouble("LAYERRADIUS1")*GeoModelKernelUnits::mm;
+    layerRadius2                  = (*AccessSvc_iter)->getDouble("LAYERRADIUS2")*GeoModelKernelUnits::mm;
+    tubeRadius                    = (*AccessSvc_iter)->getDouble("TUBERADIUS")*GeoModelKernelUnits::mm;
+    tubeThickness                 = (*AccessSvc_iter)->getDouble("TUBETHICKNESS")*GeoModelKernelUnits::mm;
+    tubeLength                    = (*AccessSvc_iter)->getDouble("TUBELENGTH")*GeoModelKernelUnits::mm;
+    pmtThickness                  = (*AccessSvc_iter)->getDouble("PMTTHICKNESS")*GeoModelKernelUnits::mm;
+    gasPressure                   = (*AccessSvc_iter)->getDouble("GASPRESSURE")*GeoModelKernelUnits::bar;
+    gasDensity                    = (*AccessSvc_iter)->getDouble("GASDENSITY")*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
+    gasTemperature                = (*AccessSvc_iter)->getDouble("GASTEMPERATURE")*GeoModelKernelUnits::kelvin;
+    quartzDensity                 = (*AccessSvc_iter)->getDouble("QUARTZDENSITY")*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
     tubePolish                    = (*AccessSvc_iter)->getDouble("TUBEPOLISH");
     waveLengthStep                = (*AccessSvc_iter)->getDouble("WAVELENGTHSTEP");
     waveLengthMin                 = (*AccessSvc_iter)->getDouble("WAVELENGTHMIN");
@@ -111,26 +112,26 @@ void LUCID_RDBAccess::Print() {
   
   MsgStream log(Athena::getMessageSvc(), "LUCID_GeoModel::LUCID_RDBAaccess");
 
-  log << MSG::DEBUG << " distanceToIP         [mm]: " << distanceToIP/CLHEP::mm           << endmsg;
-  log << MSG::DEBUG << " vesselInnerRadius    [mm]: " << vesselInnerRadius/CLHEP::mm      << endmsg;
-  log << MSG::DEBUG << " vesselInnerThickness [mm]: " << vesselInnerThickness/CLHEP::mm   << endmsg;
-  log << MSG::DEBUG << " vesselOuterRadMin    [mm]: " << vesselOuterRadMin /CLHEP::mm     << endmsg;
-  log << MSG::DEBUG << " vesselOuterRadMax    [mm]: " << vesselOuterRadMax/CLHEP::mm      << endmsg;
-  log << MSG::DEBUG << " vesselOuterThickness [mm]: " << vesselOuterThickness/CLHEP::mm   << endmsg;
-  log << MSG::DEBUG << " vesselLength         [mm]: " << vesselLength /CLHEP::mm          << endmsg;
-  log << MSG::DEBUG << " bulkheadThickness    [mm]: " << bulkheadThickness/CLHEP::mm      << endmsg;
-  log << MSG::DEBUG << " coolingRadius        [mm]: " << coolingRadius/CLHEP::mm          << endmsg;
-  log << MSG::DEBUG << " coolingThickness     [mm]: " << coolingThickness/CLHEP::mm       << endmsg;
-  log << MSG::DEBUG << " layerRadius1         [mm]: " << layerRadius1/CLHEP::mm           << endmsg;
-  log << MSG::DEBUG << " layerRadius2         [mm]: " << layerRadius2/CLHEP::mm           << endmsg;
-  log << MSG::DEBUG << " tubeRadius           [mm]: " << tubeRadius/CLHEP::mm             << endmsg;
-  log << MSG::DEBUG << " tubeThickness        [mm]: " << tubeThickness/CLHEP::mm          << endmsg;
-  log << MSG::DEBUG << " tubeLength           [mm]: " << tubeLength/CLHEP::mm             << endmsg;
-  log << MSG::DEBUG << " pmtThickness         [mm]: " << pmtThickness/CLHEP::mm           << endmsg;
-  log << MSG::DEBUG << " gasPressure         [bar]: " << gasPressure/CLHEP::bar           << endmsg;
-  log << MSG::DEBUG << " gasDensity        [g/cm3]: " << gasDensity/(CLHEP::gram/CLHEP::cm3)     << endmsg;
-  log << MSG::DEBUG << " gasTempearture   [kelvin]: " << gasTemperature/CLHEP::kelvin     << endmsg;
-  log << MSG::DEBUG << " quartzDensity     [g/cm3]: " << quartzDensity/(CLHEP::gram/CLHEP::cm3)  << endmsg;  
+  log << MSG::DEBUG << " distanceToIP         [mm]: " << distanceToIP/GeoModelKernelUnits::mm           << endmsg;
+  log << MSG::DEBUG << " vesselInnerRadius    [mm]: " << vesselInnerRadius/GeoModelKernelUnits::mm      << endmsg;
+  log << MSG::DEBUG << " vesselInnerThickness [mm]: " << vesselInnerThickness/GeoModelKernelUnits::mm   << endmsg;
+  log << MSG::DEBUG << " vesselOuterRadMin    [mm]: " << vesselOuterRadMin /GeoModelKernelUnits::mm     << endmsg;
+  log << MSG::DEBUG << " vesselOuterRadMax    [mm]: " << vesselOuterRadMax/GeoModelKernelUnits::mm      << endmsg;
+  log << MSG::DEBUG << " vesselOuterThickness [mm]: " << vesselOuterThickness/GeoModelKernelUnits::mm   << endmsg;
+  log << MSG::DEBUG << " vesselLength         [mm]: " << vesselLength /GeoModelKernelUnits::mm          << endmsg;
+  log << MSG::DEBUG << " bulkheadThickness    [mm]: " << bulkheadThickness/GeoModelKernelUnits::mm      << endmsg;
+  log << MSG::DEBUG << " coolingRadius        [mm]: " << coolingRadius/GeoModelKernelUnits::mm          << endmsg;
+  log << MSG::DEBUG << " coolingThickness     [mm]: " << coolingThickness/GeoModelKernelUnits::mm       << endmsg;
+  log << MSG::DEBUG << " layerRadius1         [mm]: " << layerRadius1/GeoModelKernelUnits::mm           << endmsg;
+  log << MSG::DEBUG << " layerRadius2         [mm]: " << layerRadius2/GeoModelKernelUnits::mm           << endmsg;
+  log << MSG::DEBUG << " tubeRadius           [mm]: " << tubeRadius/GeoModelKernelUnits::mm             << endmsg;
+  log << MSG::DEBUG << " tubeThickness        [mm]: " << tubeThickness/GeoModelKernelUnits::mm          << endmsg;
+  log << MSG::DEBUG << " tubeLength           [mm]: " << tubeLength/GeoModelKernelUnits::mm             << endmsg;
+  log << MSG::DEBUG << " pmtThickness         [mm]: " << pmtThickness/GeoModelKernelUnits::mm           << endmsg;
+  log << MSG::DEBUG << " gasPressure         [bar]: " << gasPressure/GeoModelKernelUnits::bar           << endmsg;
+  log << MSG::DEBUG << " gasDensity        [g/cm3]: " << gasDensity/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)     << endmsg;
+  log << MSG::DEBUG << " gasTempearture   [kelvin]: " << gasTemperature/GeoModelKernelUnits::kelvin     << endmsg;
+  log << MSG::DEBUG << " quartzDensity     [g/cm3]: " << quartzDensity/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)  << endmsg;  
   log << MSG::DEBUG << " tubePolish               : " << tubePolish                << endmsg;
   log << MSG::DEBUG << " waveLengthStep           : " << waveLengthStep            << endmsg;
   log << MSG::DEBUG << " waveLengthMin            : " << waveLengthMin             << endmsg;
diff --git a/ForwardDetectors/LUCID/LUCID_SimUtils/LUCID_OpProcess/src/LucidPhysicsTool.cxx b/ForwardDetectors/LUCID/LUCID_SimUtils/LUCID_OpProcess/src/LucidPhysicsTool.cxx
index 304fd694f9d97dbc5fd248b52bbb247c2f089da4..b8146c05f2cba60d3f74ed0bbd0bc2766b3e0a4a 100644
--- a/ForwardDetectors/LUCID/LUCID_SimUtils/LUCID_OpProcess/src/LucidPhysicsTool.cxx
+++ b/ForwardDetectors/LUCID/LUCID_SimUtils/LUCID_OpProcess/src/LucidPhysicsTool.cxx
@@ -17,7 +17,9 @@
 #include "G4OpRayleigh.hh"
 #include "G4OpBoundaryProcess.hh"
 
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/ForwardDetectors/ZDC/ZDC_GeoM/CMakeLists.txt b/ForwardDetectors/ZDC/ZDC_GeoM/CMakeLists.txt
index 8cd8f0f156b46b10d4005a4a685c4db6f3b10a80..0bdd429f7059adc37fbdcefc4a8c9900aed748b2 100644
--- a/ForwardDetectors/ZDC/ZDC_GeoM/CMakeLists.txt
+++ b/ForwardDetectors/ZDC/ZDC_GeoM/CMakeLists.txt
@@ -8,21 +8,24 @@ atlas_subdir( ZDC_GeoM )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           GaudiKernel )
 
+# External dependencies:
+find_package( GeoModel )
+
+
 # Component(s) in the package:
 atlas_add_library( ZDC_GeoMLib
                    src/*.cxx
                    PUBLIC_HEADERS ZDC_GeoM
-                   LINK_LIBRARIES AthenaKernel GeoModelKernel GeoModelUtilities StoreGateLib SGtests
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES GaudiKernel )
 
 atlas_add_component( ZDC_GeoM
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaKernel GeoModelKernel GeoModelUtilities StoreGateLib SGtests GaudiKernel ZDC_GeoMLib )
+                     LINK_LIBRARIES ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities StoreGateLib SGtests GaudiKernel ZDC_GeoMLib )
 
diff --git a/ForwardDetectors/ZDC/ZDC_GeoM/src/ZDC_DetFactory.cxx b/ForwardDetectors/ZDC/ZDC_GeoM/src/ZDC_DetFactory.cxx
index 547e1939b1e29f95b8c600bd8be1ef91cd54b2de..89a9a75de05c2371e2503ee76198ebc0c441e128 100644
--- a/ForwardDetectors/ZDC/ZDC_GeoM/src/ZDC_DetFactory.cxx
+++ b/ForwardDetectors/ZDC/ZDC_GeoM/src/ZDC_DetFactory.cxx
@@ -18,6 +18,8 @@
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoSerialTransformer.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -34,7 +36,7 @@
 //I have assumed that the cavity is 1016mm (4*4=16mm larger than the one in the above webpage)
 //Ionization chamber material is air currently
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 ZDC_DetFactory::ZDC_DetFactory(StoreGateSvc* detStore) : m_detectorManager(NULL) , m_detectorStore(detStore) {}
@@ -53,27 +55,27 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
 
   const GeoMaterial* air = materialManager->getMaterial("std::Air");
 
-  GeoElement*  Oxygen   = new GeoElement ("Oxygen"  ,"O"  ,  8.0 ,  16.0*CLHEP::g/CLHEP::mole);
-  GeoElement*  Sillicon = new GeoElement ("Sillicon","Si" , 14.0 ,  28.085*CLHEP::g/CLHEP::mole);
-  GeoElement*  Tung     = new GeoElement ("Tungsten","W"  , 74.0 , 183.84*CLHEP::g/CLHEP::mole);
-  GeoElement*  Iron     = new GeoElement ("Iron"    ,"Fe" , 26.0 ,  55.845 *CLHEP::g/CLHEP::mole);
-  GeoElement*  Carbon   = new GeoElement ("Carbon"  ,"C"  ,  6.0 ,  12.0107*CLHEP::g/CLHEP::mole);
-  GeoElement*  Nickel   = new GeoElement ("Nickel"  ,"Ni" , 28.0 ,  58.6934*CLHEP::g/CLHEP::mole);
+  GeoElement*  Oxygen   = new GeoElement ("Oxygen"  ,"O"  ,  8.0 ,  16.0*GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+  GeoElement*  Sillicon = new GeoElement ("Sillicon","Si" , 14.0 ,  28.085*GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+  GeoElement*  Tung     = new GeoElement ("Tungsten","W"  , 74.0 , 183.84*GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+  GeoElement*  Iron     = new GeoElement ("Iron"    ,"Fe" , 26.0 ,  55.845 *GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+  GeoElement*  Carbon   = new GeoElement ("Carbon"  ,"C"  ,  6.0 ,  12.0107*GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
+  GeoElement*  Nickel   = new GeoElement ("Nickel"  ,"Ni" , 28.0 ,  58.6934*GeoModelKernelUnits::g/GeoModelKernelUnits::mole);
 
 
-  GeoMaterial* Quartz   = new GeoMaterial("Quartz",2.20*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial* Quartz   = new GeoMaterial("Quartz",2.20*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   Quartz->add(Sillicon,0.467);
   Quartz->add(Oxygen,0.533);
   Quartz->lock();
   
   // Absorber composition:  savannah.cern.ch/task/download.php?file_id=22925
-  GeoMaterial* Tungsten = new GeoMaterial("Tungsten",18.155*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Tungsten = new GeoMaterial("Tungsten",18.155*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Tungsten->add(Tung,   0.948);
   Tungsten->add(Nickel, 0.037);
   Tungsten->add(Iron,   0.015);
   Tungsten->lock();
 
-  GeoMaterial* Steel  = new GeoMaterial("Steel", 7.9*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial* Steel  = new GeoMaterial("Steel", 7.9*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   Steel->add(Iron  , 0.98);
   Steel->add(Carbon, 0.02);
   Steel->lock();
@@ -82,11 +84,11 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
   //List of shapes and logical volumes
   //https://atlasop.cern.ch/atlas-point1/twiki/pub/Main/ZDCOperationManualShifter/zdc_layout.png
 
-  GeoBox*  Envelope_Box    = new GeoBox (10.0*CLHEP::cm/2.0 ,20.0*CLHEP::cm/2.0  ,100.0*CLHEP::cm/2.0);
-  GeoBox*  Module_Box      = new GeoBox ( 9.0*CLHEP::cm/2.0 ,18.0*CLHEP::cm/2.0  , 13.4*CLHEP::cm/2.0);
-  GeoBox*  Steel_Plate_Box = new GeoBox ( 9.0*CLHEP::cm/2.0 ,18.0*CLHEP::cm/2.0  ,  1.0*CLHEP::cm/2.0); 
-  GeoTube* Pixel_Tube      = new GeoTube( 0.0*CLHEP::mm     , 1.0*CLHEP::mm/2.0  , 13.4*CLHEP::cm/2.0);
-  GeoTube* Strip_Tube      = new GeoTube( 0.0*CLHEP::mm     , 1.5*CLHEP::mm/2.0  , 18.0*CLHEP::cm/2.0);
+  GeoBox*  Envelope_Box    = new GeoBox (10.0*GeoModelKernelUnits::cm/2.0 ,20.0*GeoModelKernelUnits::cm/2.0  ,100.0*GeoModelKernelUnits::cm/2.0);
+  GeoBox*  Module_Box      = new GeoBox ( 9.0*GeoModelKernelUnits::cm/2.0 ,18.0*GeoModelKernelUnits::cm/2.0  , 13.4*GeoModelKernelUnits::cm/2.0);
+  GeoBox*  Steel_Plate_Box = new GeoBox ( 9.0*GeoModelKernelUnits::cm/2.0 ,18.0*GeoModelKernelUnits::cm/2.0  ,  1.0*GeoModelKernelUnits::cm/2.0); 
+  GeoTube* Pixel_Tube      = new GeoTube( 0.0*GeoModelKernelUnits::mm     , 1.0*GeoModelKernelUnits::mm/2.0  , 13.4*GeoModelKernelUnits::cm/2.0);
+  GeoTube* Strip_Tube      = new GeoTube( 0.0*GeoModelKernelUnits::mm     , 1.5*GeoModelKernelUnits::mm/2.0  , 18.0*GeoModelKernelUnits::cm/2.0);
 
   GeoLogVol* Envelope_Logical    = new GeoLogVol("Envelope_Logical"   ,Envelope_Box    ,air);
   GeoLogVol* Steel_Plate_Logical = new GeoLogVol("Steel_Plate_Logical",Steel_Plate_Box ,Steel);
@@ -122,8 +124,8 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
     GeoIdentifierTag* Pixel_ID       = new GeoIdentifierTag( 11000+L1*8+K1);  
     GeoFullPhysVol*   Pixel_Physical = new GeoFullPhysVol(Pixel_Logical);
 
-    ShiftX = new GeoAlignableTransform(HepGeom::TranslateX3D((4.5-K)*CLHEP::cm));
-    ShiftY = new GeoAlignableTransform(HepGeom::TranslateY3D((4.5-L)*CLHEP::cm));
+    ShiftX = new GeoAlignableTransform(GeoTrf::TranslateX3D((4.5-K)*GeoModelKernelUnits::cm));
+    ShiftY = new GeoAlignableTransform(GeoTrf::TranslateY3D((4.5-L)*GeoModelKernelUnits::cm));
 	
     Module_Physical[0][0]->add(Pixel_ID);
     Module_Physical[0][0]->add(ShiftX);
@@ -149,8 +151,8 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
 	GeoIdentifierTag* Pixel_ID       = new GeoIdentifierTag( I*10000+2000+ Pix_id);
 	GeoFullPhysVol*   Pixel_Physical = new GeoFullPhysVol(Pixel_Logical);
 
-	ShiftX = new GeoAlignableTransform(HepGeom::TranslateX3D( (4.5-K)*CLHEP::cm ));
-	ShiftY = new GeoAlignableTransform(HepGeom::TranslateY3D( (5.5-L)*CLHEP::cm ));
+	ShiftX = new GeoAlignableTransform(GeoTrf::TranslateX3D( (4.5-K)*GeoModelKernelUnits::cm ));
+	ShiftY = new GeoAlignableTransform(GeoTrf::TranslateY3D( (5.5-L)*GeoModelKernelUnits::cm ));
 	
 	Module_Physical[I-1][1]->add(Pixel_ID);
 	Module_Physical[I-1][1]->add(ShiftX);
@@ -169,9 +171,9 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
 	    GeoFullPhysVol*   Strip_Physical = new GeoFullPhysVol  (Strip_Logical);
 	    GeoIdentifierTag* Strip_ID       = new GeoIdentifierTag(I*10000+J*1000+K*12+L*10+M);
 	    
-	    RotateX = new GeoAlignableTransform(HepGeom::RotateX3D   (90*CLHEP::deg));
-	    ShiftX  = new GeoAlignableTransform(HepGeom::TranslateX3D((L-5.5)*CLHEP::cm + (M-0.75)*1.5*CLHEP::mm +0.75*CLHEP::mm));
-	    ShiftZ  = new GeoAlignableTransform(HepGeom::TranslateZ3D((K*1.2 - 7.8)*CLHEP::cm));
+	    RotateX = new GeoAlignableTransform(GeoTrf::RotateX3D   (90*GeoModelKernelUnits::deg));
+	    ShiftX  = new GeoAlignableTransform(GeoTrf::TranslateX3D((L-5.5)*GeoModelKernelUnits::cm + (M-0.75)*1.5*GeoModelKernelUnits::mm +0.75*GeoModelKernelUnits::mm));
+	    ShiftZ  = new GeoAlignableTransform(GeoTrf::TranslateZ3D((K*1.2 - 7.8)*GeoModelKernelUnits::cm));
 	
 	    Module_Physical[I-1][J-1]->add(Strip_ID);
 	    Module_Physical[I-1][J-1]->add(ShiftZ);
@@ -194,9 +196,9 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
 	    GeoFullPhysVol*   Strip_Physical = new GeoFullPhysVol(Strip_Logical);
 	    GeoIdentifierTag* Strip_ID       = new GeoIdentifierTag(I*10000 + J*1000 + K*12 + L*10 + M);
 
-	    RotateX = new GeoAlignableTransform(HepGeom::RotateX3D   (90*CLHEP::deg));
-	    ShiftX  = new GeoAlignableTransform(HepGeom::TranslateX3D((L-5.5)*CLHEP::cm + (M-0.75)*1.5*CLHEP::mm + 0.75*CLHEP::mm));
-	    ShiftZ  = new GeoAlignableTransform(HepGeom::TranslateZ3D((K*1.2-7.8)*CLHEP::cm ));
+	    RotateX = new GeoAlignableTransform(GeoTrf::RotateX3D   (90*GeoModelKernelUnits::deg));
+	    ShiftX  = new GeoAlignableTransform(GeoTrf::TranslateX3D((L-5.5)*GeoModelKernelUnits::cm + (M-0.75)*1.5*GeoModelKernelUnits::mm + 0.75*GeoModelKernelUnits::mm));
+	    ShiftZ  = new GeoAlignableTransform(GeoTrf::TranslateZ3D((K*1.2-7.8)*GeoModelKernelUnits::cm ));
 	
 	    Module_Physical[I-1][J-1]->add(Strip_ID);
 	    Module_Physical[I-1][J-1]->add(ShiftZ);
@@ -226,13 +228,13 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
     Envelope_Physical[I] = new GeoFullPhysVol(Envelope_Logical);
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
 
-    ShiftZ  = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 0.5)*CLHEP::cm*sgn));
+    ShiftZ  = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 0.5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
 
     Vol_Name = "EM_XY"; Vol_Name = Vol_Name + Vol_Name_append;
 
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D ((-47.2 + 1 + 6.7)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D ((-47.2 + 1 + 6.7)*GeoModelKernelUnits::cm*sgn));
 
     tag = new GeoNameTag(Vol_Name.c_str());
     Envelope_Physical[I]->add(tag);
@@ -240,58 +242,58 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
     Envelope_Physical[I]->add(Module_Physical[I][0]);
 
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 +.5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 +.5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
   
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + .5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + .5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
 
     Vol_Name = "HM_XY"; Vol_Name = Vol_Name + Vol_Name_append;
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 6.7)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 6.7)*GeoModelKernelUnits::cm*sgn));
     tag = new GeoNameTag(Vol_Name.c_str());
     Envelope_Physical[I]->add(tag);
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Module_Physical[I][1]);
   
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + .5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + .5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
  
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 +.5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 +.5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
 
     Vol_Name = "HM_01"; Vol_Name = Vol_Name + Vol_Name_append;
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 6.7)*CLHEP::cm*sgn ));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 6.7)*GeoModelKernelUnits::cm*sgn ));
     tag = new GeoNameTag(Vol_Name.c_str());
     Envelope_Physical[I]->add(tag);
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Module_Physical[I][2]);
   
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + .5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + .5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
 
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + .5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + .5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
 
     Vol_Name = "HM_02"; Vol_Name = Vol_Name + Vol_Name_append;
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + 1 + 6.7)*CLHEP::cm*sgn ));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + 1 + 6.7)*GeoModelKernelUnits::cm*sgn ));
     tag = new GeoNameTag(Vol_Name.c_str());
     Envelope_Physical[I]->add(tag);
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Module_Physical[I][3]);
   
     Steel_Plate_Physical = new GeoFullPhysVol(Steel_Plate_Logical);
-    ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + 1 + 13.4 + .5)*CLHEP::cm*sgn));
+    ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D((-47.2 + 1 + 13.4 + 1 + 6 + 10 + 1 + 13.4 + 1 + 3 + 1 + 13.4 + 1 + 1 + 13.4 + .5)*GeoModelKernelUnits::cm*sgn));
     Envelope_Physical[I]->add(ShiftZ);
     Envelope_Physical[I]->add(Steel_Plate_Physical);
   }
@@ -303,7 +305,7 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
 
   world->add(tag);
 
-  ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D(-141.580*CLHEP::m));
+  ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D(-141.580*GeoModelKernelUnits::m));
 
   world->add(ShiftZ);
   world->add(Envelope_Physical[0]);
@@ -318,7 +320,7 @@ void ZDC_DetFactory::create(GeoPhysVol* world)
   
   world->add(tag);
   
-  ShiftZ = new GeoAlignableTransform(HepGeom::TranslateZ3D(141.580 *CLHEP::m));
+  ShiftZ = new GeoAlignableTransform(GeoTrf::TranslateZ3D(141.580 *GeoModelKernelUnits::m));
 
   world->add(ShiftZ);
   world->add(Envelope_Physical[1]);
diff --git a/Generators/GeneratorFilters/GeneratorFilters/VBFMjjIntervalFilter.h b/Generators/GeneratorFilters/GeneratorFilters/VBFMjjIntervalFilter.h
index d321064c0340716e2d20bda266e98b0e4a088ab3..54dc51fe82f97522e97435c8b79e55530da78646 100644
--- a/Generators/GeneratorFilters/GeneratorFilters/VBFMjjIntervalFilter.h
+++ b/Generators/GeneratorFilters/GeneratorFilters/VBFMjjIntervalFilter.h
@@ -7,6 +7,7 @@
 
 #include "GeneratorModules/GenFilter.h"
 #include "xAODJet/JetContainer.h"
+#include "CLHEP/Vector/LorentzVector.h"
 
 class IAtRndmGenSvc;
 
diff --git a/Generators/GeneratorFilters/src/HTFilter.cxx b/Generators/GeneratorFilters/src/HTFilter.cxx
index e332acfde8f37126cb24bceda17ee0d63a2b4436..cda6a1ac76fff6b42234a9eb15df9f9c02efc9bd 100644
--- a/Generators/GeneratorFilters/src/HTFilter.cxx
+++ b/Generators/GeneratorFilters/src/HTFilter.cxx
@@ -20,6 +20,7 @@
 #include "HepMC/GenEvent.h"
 // #include "GeneratorObjects/McEventCollection.h"
 #include "TruthUtils/HepMCHelpers.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 //--------------------------------------------------------------------------
 
diff --git a/Generators/GeneratorFilters/src/VBFMjjIntervalFilter.cxx b/Generators/GeneratorFilters/src/VBFMjjIntervalFilter.cxx
index 2b167dfcdbebc420d019aadb2407e8e6d6c570d1..830c25e8a37b2a15141cb3316eca2c78d9705481 100644
--- a/Generators/GeneratorFilters/src/VBFMjjIntervalFilter.cxx
+++ b/Generators/GeneratorFilters/src/VBFMjjIntervalFilter.cxx
@@ -8,6 +8,7 @@
 #include "StoreGate/DataHandle.h"
 #include "AthenaKernel/IAtRndmGenSvc.h" // For random numbers...
 #include "CLHEP/Random/RandomEngine.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 #include "EventInfo/EventInfo.h"        // For setting the weight
 #include "EventInfo/EventType.h"        // From event info - the real holder of the event weight
 
diff --git a/InnerDetector/InDetAlignAlgs/InDetAlignGenAlgs/src/InDetAlignCog.cxx b/InnerDetector/InDetAlignAlgs/InDetAlignGenAlgs/src/InDetAlignCog.cxx
index b756a435613f86559a1c9a1fb0c1160d7def486e..26a534e47dda089c31ec144a427062f10de09289 100644
--- a/InnerDetector/InDetAlignAlgs/InDetAlignGenAlgs/src/InDetAlignCog.cxx
+++ b/InnerDetector/InDetAlignAlgs/InDetAlignGenAlgs/src/InDetAlignCog.cxx
@@ -601,7 +601,7 @@ StatusCode InDetAlignCog::getTRT_Elements(bool cog_already_calculated, InDetAlig
 
 
       // Get Default Transform (of module in barrel, layer in endcap)
-      const Amg::Transform3D defTransform = Amg::CLHEPTransformToEigen( element->defTransform() );
+      const Amg::Transform3D defTransform =  element->defTransform();
       ATH_MSG_VERBOSE("defTransform 2 3" << " " << bec << " " << phi_module << " " 
 		      << layer_wheel << " " << straw_layer << " " << printTransform(defTransform));    
            
diff --git a/InnerDetector/InDetAlignTools/InDetAlignGenTools/src/InDetAlignFillTrack.cxx b/InnerDetector/InDetAlignTools/InDetAlignGenTools/src/InDetAlignFillTrack.cxx
index 1cf0a0aa793f6be091023aa2207d46e85c6fdff4..121aa2ed1749837fedfac122aa11a85cdab15d56 100644
--- a/InnerDetector/InDetAlignTools/InDetAlignGenTools/src/InDetAlignFillTrack.cxx
+++ b/InnerDetector/InDetAlignTools/InDetAlignGenTools/src/InDetAlignFillTrack.cxx
@@ -40,6 +40,8 @@
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
 #include "TrkEventPrimitives/FitQuality.h"
 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
+#include "CLHEP/Geometry/Point3D.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "InDetAlignGenTools/InDetAlignFillTrack.h"
 #include "HepPDT/ParticleDataTable.hh"
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
index 0eb8a5e0b91ad06bb04d6425f66d1c8f81e7a9fc..92013e6daa384bb493069b37a5a9873127d259a9 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
@@ -28,7 +28,6 @@ atlas_depends_on_subdirs(
    InnerDetector/InDetDetDescr/InDetIdentifier
    InnerDetector/InDetDetDescr/InDetReadoutGeometry
    InnerDetector/InDetDetDescr/PixelCabling
-   InnerDetector/InDetDetDescr/PixelGeoModel 
    Tools/PathResolver)
 
 # External dependencies:
@@ -53,7 +52,7 @@ atlas_add_component( PixelConditionsAlgorithms
    ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel AthenaPoolUtilities
    GaudiKernel PixelConditionsData SGTools StoreGateLib CoralDB
    GeoModelUtilities Identifier InDetIdentifier InDetReadoutGeometry
-   PixelGeoModelLib PixelCablingLib PixelConditionsAlgorithmsLib PathResolver )
+   PixelCablingLib PixelConditionsAlgorithmsLib PathResolver )
 
 # Install files from the package:
 #atlas_install_joboptions( share/*.py )
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/CMakeLists.txt b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/CMakeLists.txt
index 0f54ba381fea3ec32039513ddbd46774f36322a9..45a5d999e45bb6dced16ff214c9d159491804ab1 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/CMakeLists.txt
@@ -14,6 +14,7 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/Identifier
                           DetectorDescription/DetDescrCond/DetDescrConditions
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel
                           InnerDetector/InDetConditions/InDetConditionsSummaryService
                           InnerDetector/InDetConditions/SCT_ConditionsData
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_DetectorElementCondAlg.h b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_DetectorElementCondAlg.h
index d2d814a0268c923165f3e0c956d3d0aa2989d972..07c81ceb9ba2d1eef5c3015943896f70e5f5a5ca 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_DetectorElementCondAlg.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_DetectorElementCondAlg.h
@@ -7,6 +7,7 @@
 
 #include "AthenaBaseComps/AthAlgorithm.h"
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelUtilities/GeoAlignmentStore.h"
 #include "InDetReadoutGeometry/SiCommonItems.h"
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
diff --git a/InnerDetector/InDetDetDescr/BCM_GeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/BCM_GeoModel/CMakeLists.txt
index b02017798ff881931d645afa2e91cf0b32c41784..7c5cd7aadb89b94c87a1a9cb3c57d861032bcaef 100644
--- a/InnerDetector/InDetDetDescr/BCM_GeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/BCM_GeoModel/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           PRIVATE
                           Database/RDBAccessSvc
@@ -19,13 +18,15 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( BCM_GeoModel
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel GeoModelKernel GaudiKernel GeoModelUtilities )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel GeoModelUtilities )
 
 # Install files from the package:
 atlas_install_headers( BCM_GeoModel )
diff --git a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Builder.cxx b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Builder.cxx
index c2da53e0d19aae7acf09e5f46ed3070ee685bc70..79e8b6c9197f772d381929aace14e2fc86679d83 100755
--- a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Builder.cxx
+++ b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Builder.cxx
@@ -231,14 +231,13 @@ StatusCode InDetDD::BCM_Builder::build(GeoVPhysVol* pv)
       BCM_ModuleParameters* parameters = manager->Module(i);
       
       //setting transformation
-      CLHEP::Hep3Vector pos(parameters->Position_X(), parameters->Position_Y(), parameters->Position_Z());
-      CLHEP::HepRotation rm;
-      rm.rotateY(-90.*CLHEP::deg);
-      rm.rotateZ(-90.*CLHEP::deg);
-      rm.rotateX(parameters->Rotation_X()*CLHEP::deg);
-      rm.rotateY(parameters->Rotation_Y()*CLHEP::deg);
-      rm.rotateZ(parameters->Rotation_Z()*CLHEP::deg);
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      GeoTrf::Translation3D pos(parameters->Position_X(), parameters->Position_Y(), parameters->Position_Z());
+      GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(parameters->Rotation_Z()*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateY3D(parameters->Rotation_Y()*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateX3D(parameters->Rotation_X()*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateZ3D(-90.*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateY3D(-90.*GeoModelKernelUnits::deg);
+      GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       xform->ref();
       ATH_MSG_DEBUG(" --> Module " << i << " build!");
 
diff --git a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Module.cxx b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Module.cxx
index 646fd13aab785cd9113cce021d331f22eccecf8a..28ba6043a842d80a786f7e053d317705e62c63ab 100755
--- a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Module.cxx
+++ b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Module.cxx
@@ -109,10 +109,9 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall C  
   GeoPhysVol* WallC = wall.Build(ModLength/2, ReducedModWidth/2, G10Thick, CuThick, g10, copper, mat_mgr);
 		
-  CLHEP::Hep3Vector WallCPos(ModHeight/2 - WallThick/2, 0, 0);
-  CLHEP::HepRotation rmC;
-  rmC.rotateY(90.*CLHEP::deg);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rmC,WallCPos));
+  GeoTrf::Translation3D WallCPos(ModHeight/2 - WallThick/2, 0, 0);
+  GeoTrf::RotateY3D rmC(90.*GeoModelKernelUnits::deg);
+  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(WallCPos*rmC));
   GeoNameTag* tag = new GeoNameTag("Wall C");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -121,9 +120,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall D
   GeoPhysVol* WallD = wall.Build((ModTailHeight - WallThick - MainWallThick)/2, ReducedModWidth/2, CuThick, G10Thick, copper, g10, mat_mgr);
   
-  CLHEP::Hep3Vector WallDPos(ModHeight/2 - WallThick - (ModTailHeight - WallThick - MainWallThick)/2, 0, WallThick/2 - ModLength/2);
-  CLHEP::HepRotation rmD;
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallDPos));
+  GeoTrf::Translate3D WallDPos(ModHeight/2 - WallThick - (ModTailHeight - WallThick - MainWallThick)/2, 0, WallThick/2 - ModLength/2);
+  xform = new GeoTransform(WallDPos);
   tag = new GeoNameTag("Wall D");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -132,8 +130,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall H
   GeoPhysVol* WallH = wall.Build((ModTailHeight - WallThick - MainWallThick)/2, ReducedModWidth/2, LamelCuThick, LamelG10Thick, LamelCuThick, copper, g10, copper, mat_mgr);
   
-  CLHEP::Hep3Vector WallHPos(ModHeight/2 -WallThick - (ModTailHeight - WallThick - MainWallThick)/2, 0, ModLength/2 - LamelHoffset);
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallHPos));
+  GeoTrf::Translate3D WallHPos(ModHeight/2 -WallThick - (ModTailHeight - WallThick - MainWallThick)/2, 0, ModLength/2 - LamelHoffset);
+  xform = new GeoTransform(WallHPos);
   tag = new GeoNameTag("Wall H");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -142,8 +140,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall J
   GeoPhysVol* WallJ = wall.Build((ModTailHeight - WallThick - MainWallThick - MainWallBackCuThick)/2, ReducedModWidth/2, LamelCuThick, LamelG10Thick, LamelCuThick, copper, g10, copper, mat_mgr);
 		
-  CLHEP::Hep3Vector WallJPos(ModHeight/2 -WallThick - (ModTailHeight - WallThick - MainWallThick - MainWallBackCuThick)/2, 0, ModLength/2 - LamelJoffset);
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallJPos));
+  GeoTrf::Translate3D WallJPos(ModHeight/2 -WallThick - (ModTailHeight - WallThick - MainWallThick - MainWallBackCuThick)/2, 0, ModLength/2 - LamelJoffset);
+  xform = new GeoTransform(WallJPos);
   tag = new GeoNameTag("Wall J");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -152,8 +150,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall E //if changing thickness of E one must also change length and position of MainWall and wallK (extra copper)
   GeoPhysVol* WallE = wall.Build(ModHeight/2 - WallThick, ReducedModWidth/2, parameters->BackWallThickness(), CuThick, g10, copper, mat_mgr);
 		
-  CLHEP::Hep3Vector WallEPos(0, 0,ModLength/2 - (parameters->BackWallThickness()+CuThick)/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallEPos));
+  GeoTrf::Translate3D WallEPos(0, 0,ModLength/2 - (parameters->BackWallThickness()+CuThick)/2);
+  xform = new GeoTransform(WallEPos);
   tag = new GeoNameTag("Wall E");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -163,8 +161,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   double heightI = ModHeight - ModTailHeight - WallThick;
   GeoPhysVol* WallI = wall.Build(heightI/2, ReducedModWidth/2, LamelG10Thick, "bcmWallLog", g10);
 		
-  CLHEP::Hep3Vector WallIPos(WallThick + heightI/2 - ModHeight/2, 0, ModLength/2 - LamelIoffset);
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallIPos));
+  GeoTrf::Translate3D WallIPos(WallThick + heightI/2 - ModHeight/2, 0, ModLength/2 - LamelIoffset);
+  xform = new GeoTransform(WallIPos);
   tag = new GeoNameTag("Wall I");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -173,8 +171,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall F
   GeoPhysVol* WallF = wall.Build(heightI/2, ReducedModWidth/2, CuThick, G10Thick, copper, g10, mat_mgr);
 		
-  CLHEP::Hep3Vector WallFPos(WallThick + heightI/2 - ModHeight/2, 0, ModLength/2 - ModHeadLength + WallThick/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmD,WallFPos));
+  GeoTrf::Translate3D WallFPos(WallThick + heightI/2 - ModHeight/2, 0, ModLength/2 - ModHeadLength + WallThick/2);
+  xform = new GeoTransform(WallFPos);
   tag = new GeoNameTag("Wall F");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -183,8 +181,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall G
   GeoPhysVol* WallG = wall.Build(ModHeadLength/2, ReducedModWidth/2, CuThick, G10Thick, copper, g10, mat_mgr);
   
-  CLHEP::Hep3Vector WallGPos(WallThick/2 - ModHeight/2, 0, ModLength/2 - ModHeadLength/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmC,WallGPos));
+  GeoTrf::Translation3D WallGPos(WallThick/2 - ModHeight/2, 0, ModLength/2 - ModHeadLength/2);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallGPos*rmC));
   tag = new GeoNameTag("Wall G");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -193,8 +191,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //main wall
   GeoPhysVol* WallMain = wall.Build((ModLength - parameters->BackWallThickness() - CuThick)/2, ReducedModWidth/2, MainWallCuThick, MainWallG10Thick, copper, g10, mat_mgr);
   
-  CLHEP::Hep3Vector WallMainPos(ModHeight/2 + MainWallThick/2 - ModTailHeight, 0, -(parameters->BackWallThickness() + CuThick)/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmC,WallMainPos));
+  GeoTrf::Translation3D WallMainPos(ModHeight/2 + MainWallThick/2 - ModTailHeight, 0, -(parameters->BackWallThickness() + CuThick)/2);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallMainPos*rmC));
   tag = new GeoNameTag("Wall Main");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -205,8 +203,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   double lengthK = LamelHoffset - LamelHThick/2 - (parameters->BackWallThickness() + CuThick);
   GeoPhysVol* WallK = wall.Build(lengthK/2, ReducedModWidth/2, CuThick, "bcmWallLog",copper);
 		
-  CLHEP::Hep3Vector WallKPos(ModHeight/2 + MainWallThick + CuThick/2 - ModTailHeight, 0, ModLength/2 - lengthK/2 - (parameters->BackWallThickness() + CuThick));
-  xform = new GeoTransform(HepGeom::Transform3D(rmC,WallKPos));
+  GeoTrf::Translation3D WallKPos(ModHeight/2 + MainWallThick + CuThick/2 - ModTailHeight, 0, ModLength/2 - lengthK/2 - (parameters->BackWallThickness() + CuThick));
+  xform = new GeoTransform(GeoTrf::Transform3D(WallKPos*rmC));
   tag = new GeoNameTag("Wall extra cupper");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -216,8 +214,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   GeoPhysVol* DiamondVolA = wall.Build(diamondSize/2, diamondSize/2, diamondThick, "bcmDiamondLog", diamond);
   
   double diamond_x = ModHeight/2 + MainWallThick + diamondThick/2 - ModTailHeight;
-  CLHEP::Hep3Vector DiamondPosA(diamond_x, parameters->DiamondPosition_Y(), parameters->DiamondPosition_Z());
-  xform = new GeoTransform(HepGeom::Transform3D(rmC,DiamondPosA));
+  GeoTrf::Translation3D DiamondPosA(diamond_x, parameters->DiamondPosition_Y(), parameters->DiamondPosition_Z());
+  xform = new GeoTransform(GeoTrf::Transform3D(DiamondPosA*rmC));
   tag = new GeoNameTag("Diamond");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(new GeoIdentifierTag(11950));
@@ -226,8 +224,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
 
   GeoPhysVol* DiamondVolB = wall.Build(diamondSize/2, diamondSize/2, diamondThick, "bcmDiamondLog", diamond);
   
-  CLHEP::Hep3Vector DiamondPosB(diamond_x + diamondThick + parameters->DiamondDelta_X(), parameters->DiamondPosition_Y() + parameters->DiamondDelta_Y(), parameters->DiamondPosition_Z() + parameters->DiamondDelta_Z());
-  xform = new GeoTransform(HepGeom::Transform3D(rmC,DiamondPosB));
+  GeoTrf::Translation3D DiamondPosB(diamond_x + diamondThick + parameters->DiamondDelta_X(), parameters->DiamondPosition_Y() + parameters->DiamondDelta_Y(), parameters->DiamondPosition_Z() + parameters->DiamondDelta_Z());
+  xform = new GeoTransform(GeoTrf::Transform3D(DiamondPosB*rmC));
   tag = new GeoNameTag("Diamond");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(new GeoIdentifierTag(11951));
@@ -237,10 +235,9 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall A
   GeoPhysVol* WallA = wall.Build(ModTailHeight/2, (ModLength - ModHeadLength)/2, CuThick, G10Thick, copper, g10, mat_mgr);
   
-  CLHEP::Hep3Vector WallAPos((ModHeight - ModTailHeight)/2 , (ReducedModWidth + WallThick)/2, -ModHeadLength/2);
-  CLHEP::HepRotation rmA;
-  rmA.rotateX(90.*CLHEP::deg);
-  xform = new GeoTransform(HepGeom::Transform3D(rmA,WallAPos));
+  GeoTrf::Translation3D WallAPos((ModHeight - ModTailHeight)/2 , (ReducedModWidth + WallThick)/2, -ModHeadLength/2);
+  GeoTrf::RotateX3D rmA(90.*GeoModelKernelUnits::deg);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallAPos*rmA));
   tag = new GeoNameTag("Wall A");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -249,8 +246,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall AA
   GeoPhysVol* WallAA = wall.Build(ModTailHeight/2, (ModLength - ModHeadLength)/2, G10Thick, CuThick, g10, copper, mat_mgr);
   
-  CLHEP::Hep3Vector WallAAPos((ModHeight - ModTailHeight)/2 , -(ReducedModWidth + WallThick)/2, -ModHeadLength/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmA,WallAAPos));
+  GeoTrf::Translation3D WallAAPos((ModHeight - ModTailHeight)/2 , -(ReducedModWidth + WallThick)/2, -ModHeadLength/2);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallAAPos*rmA));
   tag = new GeoNameTag("Wall AA");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -259,8 +256,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall B
   GeoPhysVol* WallB = wall.Build(ModHeight/2, ModHeadLength/2, CuThick, G10Thick, copper, g10, mat_mgr);
   
-  CLHEP::Hep3Vector WallBPos(0, (ReducedModWidth + WallThick)/2, (ModLength - ModHeadLength)/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmA,WallBPos));
+  GeoTrf::Translation3D WallBPos(0, (ReducedModWidth + WallThick)/2, (ModLength - ModHeadLength)/2);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallBPos*rmA));
   tag = new GeoNameTag("Wall B");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -269,8 +266,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   //wall BB
   GeoPhysVol* WallBB = wall.Build(ModHeight/2, ModHeadLength/2, G10Thick, CuThick, g10, copper, mat_mgr);
   
-  CLHEP::Hep3Vector WallBBPos(0, -(ReducedModWidth + WallThick)/2, (ModLength - ModHeadLength)/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rmA,WallBBPos));
+  GeoTrf::Translation3D WallBBPos(0, -(ReducedModWidth + WallThick)/2, (ModLength - ModHeadLength)/2);
+  xform = new GeoTransform(GeoTrf::Transform3D(WallBBPos*rmA));
   tag = new GeoNameTag("Wall BB");
   env_bcmModPhys->add(tag);
   env_bcmModPhys->add(xform);
@@ -281,12 +278,8 @@ GeoPhysVol* BCM_Module::Build(const AbsMaterialManager* mat_mgr, const BCM_Modul
   // Add the BCM envelop inside the new complex encompassing volume
   // --------------------------------------------------------------------------------------
 
-  CLHEP::HepRotation rmEnv;
-  rmEnv.rotateZ(90.*CLHEP::deg);
-  rmEnv.rotateY(90.*CLHEP::deg);
-
-  CLHEP::Hep3Vector WallEnvPos(0., 0., 0.);
-  xform = new GeoTransform(HepGeom::Transform3D(rmEnv,WallEnvPos));
+  GeoTrf::Transform3D rmEnv = GeoTrf::RotateY3D(90.*GeoModelKernelUnits::deg)*GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg);
+  xform = new GeoTransform(rmEnv);
   tag = new GeoNameTag("EnvBcmWallLog");
   bcmModPhys->add(tag);
   bcmModPhys->add(xform);
diff --git a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Wall.cxx b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Wall.cxx
index cc2adaab24a69d20255c02421231a1a0bcdfe558..c9cdb3954e63c7e3e902b1620ad2df25373cdbb8 100755
--- a/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Wall.cxx
+++ b/InnerDetector/InDetDetDescr/BCM_GeoModel/src/BCM_Wall.cxx
@@ -37,9 +37,8 @@ GeoPhysVol* BCM_Wall::Build(double halfX, double halfY, double thick_one, double
   const GeoLogVol* bcmWallOneLog = new GeoLogVol("bcmWallLog", bcmWallOneBox, material_one);
   GeoPhysVol* bcmWallOnePhys = new GeoPhysVol(bcmWallOneLog);
  
-  CLHEP::Hep3Vector WallOnePos(0,0,thick_one/2 - wallthick/2);
-  CLHEP::HepRotation rm;
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,WallOnePos));
+  GeoTrf::Translate3D WallOnePos(0,0,thick_one/2 - wallthick/2);
+  GeoTransform* xform = new GeoTransform(WallOnePos);
   bcmWallPhys->add(xform);
   bcmWallPhys->add(bcmWallOnePhys);
  
@@ -49,8 +48,8 @@ GeoPhysVol* BCM_Wall::Build(double halfX, double halfY, double thick_one, double
   const GeoLogVol* bcmWallTwoLog = new GeoLogVol("bcmWallLog", bcmWallTwoBox, material_two);
   GeoPhysVol* bcmWallTwoPhys = new GeoPhysVol(bcmWallTwoLog);
 
-  CLHEP::Hep3Vector WallTwoPos(0,0,wallthick/2 - thick_two/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,WallTwoPos));
+  GeoTrf::Translate3D WallTwoPos(0,0,wallthick/2 - thick_two/2);
+  xform = new GeoTransform(WallTwoPos);
   bcmWallPhys->add(xform);
   bcmWallPhys->add(bcmWallTwoPhys);
 
@@ -73,9 +72,8 @@ GeoPhysVol* BCM_Wall::Build(double halfX, double halfY, double thick_one, double
   const GeoLogVol* bcmWallOneLog = new GeoLogVol("bcmWallLog", bcmWallOneBox, material_one);
   GeoPhysVol* bcmWallOnePhys = new GeoPhysVol(bcmWallOneLog);
  
-  CLHEP::Hep3Vector WallOnePos(0,0,thick_one/2 - wallthick/2);
-  CLHEP::HepRotation rm;
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,WallOnePos));
+  GeoTrf::Translate3D WallOnePos(0,0,thick_one/2 - wallthick/2);
+  GeoTransform* xform = new GeoTransform(WallOnePos);
   bcmWallPhys->add(xform);
   bcmWallPhys->add(bcmWallOnePhys);
  
@@ -85,8 +83,8 @@ GeoPhysVol* BCM_Wall::Build(double halfX, double halfY, double thick_one, double
   const GeoLogVol* bcmWallTwoLog = new GeoLogVol("bcmWallLog", bcmWallTwoBox, material_two);
   GeoPhysVol* bcmWallTwoPhys = new GeoPhysVol(bcmWallTwoLog);
 
-  CLHEP::Hep3Vector WallTwoPos(0,0,thick_one -wallthick/2 + thick_two/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,WallTwoPos));
+  GeoTrf::Translate3D WallTwoPos(0,0,thick_one -wallthick/2 + thick_two/2);
+  xform = new GeoTransform(WallTwoPos);
   bcmWallPhys->add(xform);
   bcmWallPhys->add(bcmWallTwoPhys);
 
@@ -96,8 +94,8 @@ GeoPhysVol* BCM_Wall::Build(double halfX, double halfY, double thick_one, double
   const GeoLogVol* bcmWallThreeLog = new GeoLogVol("bcmWallLog", bcmWallThreeBox, material_three);
   GeoPhysVol* bcmWallThreePhys = new GeoPhysVol(bcmWallThreeLog);
 
-  CLHEP::Hep3Vector WallThreePos(0,0,wallthick/2 - thick_three/2);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,WallThreePos));
+  GeoTrf::Translate3D WallThreePos(0,0,wallthick/2 - thick_three/2);
+  xform = new GeoTransform(WallThreePos);
   bcmWallPhys->add(xform);
   bcmWallPhys->add(bcmWallThreePhys);
 
diff --git a/InnerDetector/InDetDetDescr/BLM_GeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/BLM_GeoModel/CMakeLists.txt
index 68d046510be1a3cb62a3548fa988ab79e2fe66ac..b5ea30eeef762b7fa8c770e289e742d2974d1f4d 100644
--- a/InnerDetector/InDetDetDescr/BLM_GeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/BLM_GeoModel/CMakeLists.txt
@@ -9,9 +9,7 @@ atlas_subdir( BLM_GeoModel )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
-                          Control/AthenaKernel
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           PRIVATE
                           Database/RDBAccessSvc
@@ -20,13 +18,14 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( BLM_GeoModel
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel AthenaKernel GeoModelKernel GaudiKernel GeoModelUtilities )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel GeoModelUtilities )
 
 # Install files from the package:
 atlas_install_headers( BLM_GeoModel )
diff --git a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Builder.cxx b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Builder.cxx
index 6a400d2c42d2dc8f5facee3805e288a0261de0f6..12c308b8d30797e99383936189daad6ac7382644 100644
--- a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Builder.cxx
+++ b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Builder.cxx
@@ -240,12 +240,11 @@ StatusCode InDetDD::BLM_Builder::build(GeoVPhysVol* pv)
       BLM_ModuleParameters* parameters = manager->Module(i);
 
       //setting transformation
-      CLHEP::Hep3Vector pos(parameters->R()*cos(parameters->Phi()*CLHEP::deg), parameters->R()*sin(parameters->Phi()*CLHEP::deg), parameters->Z());
-      CLHEP::HepRotation rm;
-      rm.rotateX(parameters->Rotation_X()*CLHEP::deg);
-      rm.rotateY(parameters->Rotation_Y()*CLHEP::deg);
-      rm.rotateZ(parameters->Rotation_Z()*CLHEP::deg);
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      GeoTrf::Translation3D pos(parameters->R()*cos(parameters->Phi()*GeoModelKernelUnits::deg), parameters->R()*sin(parameters->Phi()*GeoModelKernelUnits::deg), parameters->Z());
+      GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(parameters->Rotation_Z()*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateY3D(parameters->Rotation_Y()*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateX3D(parameters->Rotation_X()*GeoModelKernelUnits::deg);
+      GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       xform->ref();
       //building module
       int k=i+222;
diff --git a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Module.cxx b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Module.cxx
index 405089fda998fac87ea70deb7c7fc705ca89ebc1..5b5e88207f4ee8ed6a2ea5ee4f3569ebc9569f08 100755
--- a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Module.cxx
+++ b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Module.cxx
@@ -47,7 +47,7 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   {     
   	if(msg)
   		(*msg) << "BLM _ PEEK _ MISSING." << endmsg;
-	GeoMaterial* peektmp = new GeoMaterial("PEEK", 1.3*CLHEP::gram/CLHEP::cm3);
+	GeoMaterial* peektmp = new GeoMaterial("PEEK", 1.3*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
 	GeoElement* hydrogen = new GeoElement("Hydrogen", "H", 1.0, 1.010);
 	GeoElement* oxygen = new GeoElement("Oxygen", "O", 8.0, 16.000);
 	GeoElement* carbon = new GeoElement("Carbon", "C", 6.0, 12.010);
@@ -63,7 +63,7 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   //PEEK
 
  /* //STAINLESS STEEL
-  GeoMaterial* stainless_steel = new GeoMaterial("S_steel", 7.8*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial* stainless_steel = new GeoMaterial("S_steel", 7.8*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   GeoElement* iron = new GeoElement("Iron", "Fe", 26.0, 55.845);
   GeoElement* chromium = new GeoElement("Chromium", "Cr", 24.0, 51.996);
   stainless_steel->add(iron, 0.89);
@@ -79,9 +79,8 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
 
   //holder
   GeoPhysVol* holder = wall.BuildHolder(peek);
-  CLHEP::Hep3Vector holderPos(0, BLM_Wall::s_holder_height-ModHeight/2-BLM_Wall::s_holder_thickness/2, 0);
-  CLHEP::HepRotation holderRot;
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(holderRot, holderPos));
+  GeoTrf::Translate3D holderPos(0, BLM_Wall::s_holder_height-ModHeight/2-BLM_Wall::s_holder_thickness/2, 0);
+  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(holderPos));
   GeoNameTag* tag = new GeoNameTag("Holder");
   blmModPhys->add(tag);
   blmModPhys->add(xform);
@@ -91,12 +90,12 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* layer1a = wall.BuildLayerI(CuThick, copper, false);
   GeoPhysVol* layer1b = wall.BuildLayerI(LamelThick15, g10, false);
   GeoPhysVol* layer1c = wall.BuildLayerI(CuThick, copper, true);
-  CLHEP::Hep3Vector layer1Posa(0, BLM_Wall::s_holder_height-ModHeight/2+CuThick/2, ModLength/2-BLM_Wall::s_extended_length/2);
-  CLHEP::Hep3Vector layer1Posb(0, BLM_Wall::s_holder_height-ModHeight/2+CuThick+LamelThick15/2, ModLength/2-BLM_Wall::s_extended_length/2);
-  CLHEP::Hep3Vector layer1Posc(0, BLM_Wall::s_holder_height-ModHeight/2+3*CuThick/2+LamelThick15, ModLength/2-BLM_Wall::s_extended_length/2);
-  GeoTransform* yforma = new GeoTransform(HepGeom::Transform3D(holderRot, layer1Posa));
-  GeoTransform* yformb = new GeoTransform(HepGeom::Transform3D(holderRot, layer1Posb));
-  GeoTransform* yformc = new GeoTransform(HepGeom::Transform3D(holderRot, layer1Posc));
+  GeoTrf::Translate3D layer1Posa(0, BLM_Wall::s_holder_height-ModHeight/2+CuThick/2, ModLength/2-BLM_Wall::s_extended_length/2);
+  GeoTrf::Translate3D layer1Posb(0, BLM_Wall::s_holder_height-ModHeight/2+CuThick+LamelThick15/2, ModLength/2-BLM_Wall::s_extended_length/2);
+  GeoTrf::Translate3D layer1Posc(0, BLM_Wall::s_holder_height-ModHeight/2+3*CuThick/2+LamelThick15, ModLength/2-BLM_Wall::s_extended_length/2);
+  GeoTransform* yforma = new GeoTransform(GeoTrf::Transform3D(layer1Posa));
+  GeoTransform* yformb = new GeoTransform(GeoTrf::Transform3D(layer1Posb));
+  GeoTransform* yformc = new GeoTransform(GeoTrf::Transform3D(layer1Posc));
   tag = new GeoNameTag("Layer1");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -112,12 +111,12 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* layer2a = wall.BuildLayerII(CuThick, copper);
   GeoPhysVol* layer2b = wall.BuildLayerII(LamelThick234, g10);
   GeoPhysVol* layer2c = wall.BuildLayerII(CuThick, copper);
-  CLHEP::Hep3Vector layer2Posa(0, BLM_Wall::s_holder_height-ModHeight/2+5*CuThick/2+LamelThick15, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer2Posb(0, BLM_Wall::s_holder_height-ModHeight/2+3*CuThick+LamelThick15+LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer2Posc(0, BLM_Wall::s_holder_height-ModHeight/2+7*CuThick/2+LamelThick15+LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  yforma = new GeoTransform(HepGeom::Transform3D(holderRot, layer2Posa));
-  yformb = new GeoTransform(HepGeom::Transform3D(holderRot, layer2Posb));
-  yformc = new GeoTransform(HepGeom::Transform3D(holderRot, layer2Posc));
+  GeoTrf::Translate3D layer2Posa(0, BLM_Wall::s_holder_height-ModHeight/2+5*CuThick/2+LamelThick15, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer2Posb(0, BLM_Wall::s_holder_height-ModHeight/2+3*CuThick+LamelThick15+LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer2Posc(0, BLM_Wall::s_holder_height-ModHeight/2+7*CuThick/2+LamelThick15+LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  yforma = new GeoTransform(GeoTrf::Transform3D(layer2Posa));
+  yformb = new GeoTransform(GeoTrf::Transform3D(layer2Posb));
+  yformc = new GeoTransform(GeoTrf::Transform3D(layer2Posc));
   tag = new GeoNameTag("Layer2");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -133,12 +132,12 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* layer3a = wall.BuildLayerIII(CuThick, copper);
   GeoPhysVol* layer3b = wall.BuildLayerIII(LamelThick234, g10);
   GeoPhysVol* layer3c = wall.BuildLayerIII(CuThick, copper);
-  CLHEP::Hep3Vector layer3Posa(0, BLM_Wall::s_holder_height-ModHeight/2+9*CuThick/2+LamelThick15+LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer3Posb(0, BLM_Wall::s_holder_height-ModHeight/2+5*CuThick+LamelThick15+3*LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer3Posc(0, BLM_Wall::s_holder_height-ModHeight/2+11*CuThick/2+LamelThick15+2*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  yforma = new GeoTransform(HepGeom::Transform3D(holderRot, layer3Posa));
-  yformb = new GeoTransform(HepGeom::Transform3D(holderRot, layer3Posb));
-  yformc = new GeoTransform(HepGeom::Transform3D(holderRot, layer3Posc));
+  GeoTrf::Translate3D layer3Posa(0, BLM_Wall::s_holder_height-ModHeight/2+9*CuThick/2+LamelThick15+LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer3Posb(0, BLM_Wall::s_holder_height-ModHeight/2+5*CuThick+LamelThick15+3*LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer3Posc(0, BLM_Wall::s_holder_height-ModHeight/2+11*CuThick/2+LamelThick15+2*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  yforma = new GeoTransform(GeoTrf::Transform3D(layer3Posa));
+  yformb = new GeoTransform(GeoTrf::Transform3D(layer3Posb));
+  yformc = new GeoTransform(GeoTrf::Transform3D(layer3Posc));
   tag = new GeoNameTag("Layer3");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -154,12 +153,12 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* layer4a = wall.BuildLayerIV(CuThick, copper);
   GeoPhysVol* layer4b = wall.BuildLayerIV(LamelThick234, g10);
   GeoPhysVol* layer4c = wall.BuildLayerIV(CuThick, copper);
-  CLHEP::Hep3Vector layer4Posa(0, BLM_Wall::s_holder_height-ModHeight/2+13*CuThick/2+LamelThick15+2*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer4Posb(0, BLM_Wall::s_holder_height-ModHeight/2+7*CuThick+LamelThick15+5*LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer4Posc(0, BLM_Wall::s_holder_height-ModHeight/2+15*CuThick/2+LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  yforma = new GeoTransform(HepGeom::Transform3D(holderRot, layer4Posa));
-  yformb = new GeoTransform(HepGeom::Transform3D(holderRot, layer4Posb));
-  yformc = new GeoTransform(HepGeom::Transform3D(holderRot, layer4Posc));
+  GeoTrf::Translate3D layer4Posa(0, BLM_Wall::s_holder_height-ModHeight/2+13*CuThick/2+LamelThick15+2*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer4Posb(0, BLM_Wall::s_holder_height-ModHeight/2+7*CuThick+LamelThick15+5*LamelThick234/2, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer4Posc(0, BLM_Wall::s_holder_height-ModHeight/2+15*CuThick/2+LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  yforma = new GeoTransform(GeoTrf::Transform3D(layer4Posa));
+  yformb = new GeoTransform(GeoTrf::Transform3D(layer4Posb));
+  yformc = new GeoTransform(GeoTrf::Transform3D(layer4Posc));
   tag = new GeoNameTag("Layer4");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -175,12 +174,12 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* layer5a = wall.BuildLayerV(CuThick, copper);
   GeoPhysVol* layer5b = wall.BuildLayerV(LamelThick15, g10);
   GeoPhysVol* layer5c = wall.BuildLayerV(CuThick, copper);
-  CLHEP::Hep3Vector layer5Posa(0, BLM_Wall::s_holder_height-ModHeight/2+17*CuThick/2+LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer5Posb(0, BLM_Wall::s_holder_height-ModHeight/2+9*CuThick+3*LamelThick15/2+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  CLHEP::Hep3Vector layer5Posc(0, BLM_Wall::s_holder_height-ModHeight/2+19*CuThick/2+2*LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
-  yforma = new GeoTransform(HepGeom::Transform3D(holderRot, layer5Posa));
-  yformb = new GeoTransform(HepGeom::Transform3D(holderRot, layer5Posb));
-  yformc = new GeoTransform(HepGeom::Transform3D(holderRot, layer5Posc));
+  GeoTrf::Translate3D layer5Posa(0, BLM_Wall::s_holder_height-ModHeight/2+17*CuThick/2+LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer5Posb(0, BLM_Wall::s_holder_height-ModHeight/2+9*CuThick+3*LamelThick15/2+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  GeoTrf::Translate3D layer5Posc(0, BLM_Wall::s_holder_height-ModHeight/2+19*CuThick/2+2*LamelThick15+3*LamelThick234, ModLength/2-BLM_Wall::s_length/2);
+  yforma = new GeoTransform(GeoTrf::Transform3D(layer5Posa));
+  yformb = new GeoTransform(GeoTrf::Transform3D(layer5Posb));
+  yformc = new GeoTransform(GeoTrf::Transform3D(layer5Posc));
   tag = new GeoNameTag("Layer5");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -201,26 +200,24 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
   GeoPhysVol* screw6 = wall.BuildScrew(10, stainless_steel);
   GeoPhysVol* screw7 = wall.BuildScrew(BLM_Wall::s_holder_thickness, stainless_steel);
   GeoPhysVol* screw8 = wall.BuildScrew(BLM_Wall::s_holder_thickness, stainless_steel);
-  CLHEP::HepRotation screwRot;
-  screwRot.rotateX(90.*CLHEP::deg);
-  CLHEP::HepRotation screwRot1;
-  screwRot1.rotateX(180.*CLHEP::deg);
-  CLHEP::Hep3Vector screwPos1(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_hole_position);
-  CLHEP::Hep3Vector screwPos2(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_hole_position);
-  CLHEP::Hep3Vector screwPos3(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_length+BLM_Wall::s_hole_position);
-  CLHEP::Hep3Vector screwPos4(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_length+BLM_Wall::s_hole_position);
-  CLHEP::Hep3Vector screwPos5(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_extended_length+2.1);
-  CLHEP::Hep3Vector screwPos6(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_extended_length+2.1);
-  CLHEP::Hep3Vector screwPos7(ModWidth/2-BLM_Wall::s_hole_position, 3.5-ModHeight/2, BLM_Wall::s_holder_thickness-ModLength/2+1);
-  CLHEP::Hep3Vector screwPos8(BLM_Wall::s_hole_position-ModWidth/2, 3.5-ModHeight/2, BLM_Wall::s_holder_thickness-ModLength/2+1);
-  GeoTransform* xform1 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos1));
-  GeoTransform* xform2 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos2));
-  GeoTransform* xform3 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos3));
-  GeoTransform* xform4 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos4));
-  GeoTransform* xform5 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos5));
-  GeoTransform* xform6 = new GeoTransform(HepGeom::Transform3D(screwRot, screwPos6));
-  GeoTransform* xform7 = new GeoTransform(HepGeom::Transform3D(screwRot1, screwPos7));
-  GeoTransform* xform8 = new GeoTransform(HepGeom::Transform3D(screwRot1, screwPos8));
+  GeoTrf::RotateX3D screwRot(90.*GeoModelKernelUnits::deg);
+  GeoTrf::RotateX3D screwRot1(180.*GeoModelKernelUnits::deg);  
+  GeoTrf::Translation3D screwPos1(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_hole_position);
+  GeoTrf::Translation3D screwPos2(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_hole_position);
+  GeoTrf::Translation3D screwPos3(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_length+BLM_Wall::s_hole_position);
+  GeoTrf::Translation3D screwPos4(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_length+BLM_Wall::s_hole_position);
+  GeoTrf::Translation3D screwPos5(ModWidth/2-BLM_Wall::s_hole_position, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_extended_length+2.1);
+  GeoTrf::Translation3D screwPos6(BLM_Wall::s_hole_position-ModWidth/2, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234+1, ModLength/2-BLM_Wall::s_extended_length+2.1);
+  GeoTrf::Translation3D screwPos7(ModWidth/2-BLM_Wall::s_hole_position, 3.5-ModHeight/2, BLM_Wall::s_holder_thickness-ModLength/2+1);
+  GeoTrf::Translation3D screwPos8(BLM_Wall::s_hole_position-ModWidth/2, 3.5-ModHeight/2, BLM_Wall::s_holder_thickness-ModLength/2+1);
+  GeoTransform* xform1 = new GeoTransform(GeoTrf::Transform3D(screwPos1*screwRot));
+  GeoTransform* xform2 = new GeoTransform(GeoTrf::Transform3D(screwPos2*screwRot));
+  GeoTransform* xform3 = new GeoTransform(GeoTrf::Transform3D(screwPos3*screwRot));
+  GeoTransform* xform4 = new GeoTransform(GeoTrf::Transform3D(screwPos4*screwRot));
+  GeoTransform* xform5 = new GeoTransform(GeoTrf::Transform3D(screwPos5*screwRot));
+  GeoTransform* xform6 = new GeoTransform(GeoTrf::Transform3D(screwPos6*screwRot));
+  GeoTransform* xform7 = new GeoTransform(GeoTrf::Transform3D(screwPos7*screwRot1));
+  GeoTransform* xform8 = new GeoTransform(GeoTrf::Transform3D(screwPos8*screwRot1));
   tag = new GeoNameTag("Screw");
   blmModPhys->add(tag);
   blmModPhys->add(xform1);
@@ -249,8 +246,8 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
 
   //clamp
   GeoPhysVol* clamp = wall.BuildClamp(g10);
-  CLHEP::Hep3Vector clampPos(0, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234-BLM_Wall::s_clamp_thickness/2, ModLength/2-BLM_Wall::s_extended_length+2.1+2.5-BLM_Wall::s_clamp_length/2);
-  yforma = new GeoTransform(HepGeom::Transform3D(holderRot, clampPos));
+  GeoTrf::Translate3D clampPos(0, BLM_Wall::s_holder_height-ModHeight/2+10*CuThick+2*LamelThick15+3*LamelThick234-BLM_Wall::s_clamp_thickness/2, ModLength/2-BLM_Wall::s_extended_length+2.1+2.5-BLM_Wall::s_clamp_length/2);
+  yforma = new GeoTransform(GeoTrf::Transform3D(clampPos));
   tag = new GeoNameTag("Clamp");
   blmModPhys->add(tag);
   blmModPhys->add(yforma);
@@ -258,8 +255,8 @@ GeoPhysVol* BLM_Module::Build(const AbsMaterialManager* mat_mgr, const BLM_Modul
 
   //diamond//blmDiamondLog
   GeoPhysVol* DiamondVol = wall.BuildBlock(8, diamondThick, diamondSize, "blmDiamondLog", diamond);
-  CLHEP::Hep3Vector DiamondPos(parameters->DiamondPosition_X(), BLM_Wall::s_holder_height-ModHeight/2+CuThick+LamelThick15+diamondThick/2, ModLength/2-diamondSize/2-5+parameters->DiamondPosition_Z());
-  xform = new GeoTransform(HepGeom::Transform3D(holderRot,DiamondPos));
+  GeoTrf::Translate3D DiamondPos(parameters->DiamondPosition_X(), BLM_Wall::s_holder_height-ModHeight/2+CuThick+LamelThick15+diamondThick/2, ModLength/2-diamondSize/2-5+parameters->DiamondPosition_Z());
+  xform = new GeoTransform(GeoTrf::Transform3D(DiamondPos));
   tag = new GeoNameTag("Diamond");
   blmModPhys->add(tag);
   blmModPhys->add(new GeoIdentifierTag(2009));
diff --git a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Wall.cxx b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Wall.cxx
index 301a75ec9edcfd01da2cd068e5f593d42f44122e..e2983ec4d48a299d8d54f48dad7fd3d59ebfefe9 100755
--- a/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Wall.cxx
+++ b/InnerDetector/InDetDetDescr/BLM_GeoModel/src/BLM_Wall.cxx
@@ -29,15 +29,14 @@ GeoPhysVol* BLM_Wall::BuildClamp(const GeoMaterial* material)
   const GeoBox* blmWallBox = new GeoBox(s_width/2, s_clamp_thickness/2, s_clamp_length/2);
   const GeoTube* blmWallHole = new GeoTube(0, s_hole_r, s_clamp_thickness);
   //rotations
-  CLHEP::HepRotation rm;
-  rm.rotateX(90.*CLHEP::deg);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
   //position of holes
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_clamp_length/2-2.5);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_clamp_length/2-2.5);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_clamp_length/2-2.5);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_clamp_length/2-2.5);
   
   //offsets
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
   const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
   const GeoShapeSubtraction& blmFinal = blm1.subtract(((*blmWallHole)<< offset2));
 
@@ -61,9 +60,7 @@ GeoPhysVol* BLM_Wall::BuildScrew(double length, const GeoMaterial* material)
   const GeoTube* blmScrew = new GeoTube(0, 2.5, 1);
   const GeoTube* blmScrew1 = new GeoTube(0, 1.5, length/2);
   //positions
-  CLHEP::HepRotation rm;
-  CLHEP::Hep3Vector pos1(0, 0, length/2+1);
-  HepGeom::Transform3D offset1(rm,pos1);
+  GeoTrf::Translate3D offset1(0, 0, length/2+1);
   const GeoShapeUnion& blmFinal = blmScrew->add(((*blmScrew1) << offset1));
   
   const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
@@ -79,33 +76,28 @@ GeoPhysVol* BLM_Wall::BuildHolder(const GeoMaterial* material)
   const GeoTube* blmWallHole = new GeoTube(0, s_hole_r, s_holder_thickness);
   const GeoBox* blmWallHole1 = new GeoBox(s_holder_spacing/2, s_holder_height, (s_holder_spacing_length+s_holder_thickness)/2+1);
   //rotations
-  CLHEP::HepRotation rm;
-  CLHEP::HepRotation rm1;
-  rm.rotateX(90.*CLHEP::deg);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
   //position of holes
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_holder_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_holder_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_holder_length/2-s_length+s_hole_position);
-  CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_holder_length/2-s_length+s_hole_position);
-  CLHEP::Hep3Vector pos5(s_width/2-s_hole_position, 0, s_holder_length/2-s_extended_length+2.1);
-  CLHEP::Hep3Vector pos6(s_hole_position-s_width/2, 0, s_holder_length/2-s_extended_length+2.1);
-  CLHEP::Hep3Vector pos9(s_width/2-s_hole_position, 3.5+s_holder_thickness/2-s_holder_height, s_holder_thickness/2-s_holder_length/2);
-  CLHEP::Hep3Vector pos10(s_hole_position-s_width/2, 3.5+s_holder_thickness/2-s_holder_height, s_holder_thickness/2-s_holder_length/2);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_holder_length/2-s_hole_position);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_holder_length/2-s_hole_position);
+  GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_holder_length/2-s_length+s_hole_position);
+  GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_holder_length/2-s_length+s_hole_position);
+  GeoTrf::Translation3D pos5(s_width/2-s_hole_position, 0, s_holder_length/2-s_extended_length+2.1);
+  GeoTrf::Translation3D pos6(s_hole_position-s_width/2, 0, s_holder_length/2-s_extended_length+2.1);
+  GeoTrf::Translate3D offset9(s_width/2-s_hole_position, 3.5+s_holder_thickness/2-s_holder_height, s_holder_thickness/2-s_holder_length/2);
+  GeoTrf::Translate3D offset10(s_hole_position-s_width/2, 3.5+s_holder_thickness/2-s_holder_height, s_holder_thickness/2-s_holder_length/2);
   //position of vertical boxes
-  CLHEP::Hep3Vector pos7(0, s_holder_thickness/2-s_holder_height/2, s_holder_thickness/2-s_holder_length/2);
+  GeoTrf::Translate3D offset7(0, s_holder_thickness/2-s_holder_height/2, s_holder_thickness/2-s_holder_length/2);
   //position of the hole
-  CLHEP::Hep3Vector pos8(0, -s_holder_height/2, (s_holder_spacing_length+s_holder_thickness)/2-s_holder_length/2-2);
+  GeoTrf::Translate3D offset8(0, -s_holder_height/2, (s_holder_spacing_length+s_holder_thickness)/2-s_holder_length/2-2);
   //offsets
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
-  HepGeom::Transform3D offset3(rm,pos3);
-  HepGeom::Transform3D offset4(rm,pos4);
-  HepGeom::Transform3D offset5(rm,pos5);
-  HepGeom::Transform3D offset6(rm,pos6);
-  HepGeom::Transform3D offset7(rm1,pos7);
-  HepGeom::Transform3D offset8(rm1,pos8);
-  HepGeom::Transform3D offset9(rm1,pos9);
-  HepGeom::Transform3D offset10(rm1,pos10);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
+  GeoTrf::Transform3D offset3 = pos3*rm;
+  GeoTrf::Transform3D offset4 = pos4*rm;
+  GeoTrf::Transform3D offset5 = pos5*rm;
+  GeoTrf::Transform3D offset6 = pos6*rm;
+
   const GeoShapeUnion& blm1 = blmWallBox->add(((*blmWallBox1) << offset7));
   const GeoShapeSubtraction& blm3 = blm1.subtract(((*blmWallHole1)<< offset8));
   const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset1));
@@ -132,29 +124,24 @@ GeoPhysVol* BLM_Wall::BuildLayerI(double thick, const GeoMaterial* material, boo
       const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.9);
       const GeoShape* blmWallHole2 = new GeoBox(s_width/2-6.1, thick, 4);
       const GeoShape* blmWallHole3 = new GeoBox(3.89, thick, 3.89);
-      CLHEP::HepRotation rm;
-      CLHEP::HepRotation rm1;
-      CLHEP::HepRotation rm2;
-      rm.rotateX(90.*CLHEP::deg);
-      rm1.rotateY(45.*CLHEP::deg);
-      CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
-      CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
-      CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
-      CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
-      CLHEP::Hep3Vector pos9(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
-      CLHEP::Hep3Vector pos10(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
-      CLHEP::Hep3Vector pos5(0, 0, s_extended_length/2-s_length+12.55);
-      CLHEP::Hep3Vector pos6(0, 0, s_extended_length/2-s_length+4);
-      CLHEP::Hep3Vector pos7(0, 0, s_extended_length/2+6.6-s_length);
-      HepGeom::Transform3D offset1(rm,pos1);
-      HepGeom::Transform3D offset2(rm,pos2);
-      HepGeom::Transform3D offset3(rm,pos3);
-      HepGeom::Transform3D offset4(rm,pos4);
-      HepGeom::Transform3D offset5(rm2,pos5);
-      HepGeom::Transform3D offset6(rm2,pos6);
-      HepGeom::Transform3D offset7(rm1,pos7);
-      HepGeom::Transform3D offset9(rm,pos9);
-      HepGeom::Transform3D offset10(rm,pos10);
+      GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+      GeoTrf::RotateY3D rm1(45.*GeoModelKernelUnits::deg);
+      GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
+      GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
+      GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
+      GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
+      GeoTrf::Translation3D pos9(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
+      GeoTrf::Translation3D pos10(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
+      GeoTrf::Translate3D offset5(0, 0, s_extended_length/2-s_length+12.55);
+      GeoTrf::Translate3D offset6(0, 0, s_extended_length/2-s_length+4);
+      GeoTrf::Translation3D pos7(0, 0, s_extended_length/2+6.6-s_length);
+      GeoTrf::Transform3D offset1 = pos1*rm;
+      GeoTrf::Transform3D offset2 = pos2*rm;
+      GeoTrf::Transform3D offset3 = pos3*rm;
+      GeoTrf::Transform3D offset4 = pos4*rm;
+      GeoTrf::Transform3D offset7 = pos7*rm1;
+      GeoTrf::Transform3D offset9 = pos9*rm;
+      GeoTrf::Transform3D offset10 = pos10*rm;
       
       const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole3) << offset7));
       const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
@@ -175,21 +162,19 @@ GeoPhysVol* BLM_Wall::BuildLayerI(double thick, const GeoMaterial* material, boo
     {
       const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_extended_length/2);
       const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
-      CLHEP::HepRotation rm;
-      CLHEP::HepRotation rm1;
-      rm.rotateX(90.*CLHEP::deg);
-      CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
-      CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
-      CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
-      CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
-      CLHEP::Hep3Vector pos5(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
-      CLHEP::Hep3Vector pos6(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
-      HepGeom::Transform3D offset1(rm,pos1);
-      HepGeom::Transform3D offset2(rm,pos2);
-      HepGeom::Transform3D offset3(rm,pos3);
-      HepGeom::Transform3D offset4(rm,pos4);
-      HepGeom::Transform3D offset5(rm,pos5);
-      HepGeom::Transform3D offset6(rm,pos6);
+      GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+      GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
+      GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
+      GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
+      GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
+      GeoTrf::Translation3D pos5(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
+      GeoTrf::Translation3D pos6(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
+      GeoTrf::Transform3D offset1 = pos1*rm;
+      GeoTrf::Transform3D offset2 = pos2*rm;
+      GeoTrf::Transform3D offset3 = pos3*rm;
+      GeoTrf::Transform3D offset4 = pos4*rm;
+      GeoTrf::Transform3D offset5 = pos5*rm;
+      GeoTrf::Transform3D offset6 = pos6*rm;
       const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
       const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
       const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
@@ -212,28 +197,23 @@ GeoPhysVol* BLM_Wall::BuildLayerII(double thick, const GeoMaterial* material)
   const GeoShape* blmWallHole2 = new GeoBox(s_width/2-6.1, thick, 4);
   //const GeoShape* blmWallHole3 = new GeoBox(1.76777, thick, 1.76777);
   const GeoShape* blmWallHole3 = new GeoBox(3.9, thick, 3.9);
-  CLHEP::HepRotation rm;
-  CLHEP::HepRotation rm1;
-  CLHEP::HepRotation rm2;
-  rm.rotateX(90.*CLHEP::deg);
-  rm1.rotateY(45.*CLHEP::deg);
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos5(0, 0, 1.5);
-  CLHEP::Hep3Vector pos6(0, 0, -7.175);
-  CLHEP::Hep3Vector pos7(s_width/2-6.1, 0, 6.6-s_length/2);
-  //CLHEP::Hep3Vector pos8(6.1-s_width/2, 0, 6.6-s_length/2);
-  CLHEP::Hep3Vector pos8(0, 0, 6.6-s_length/2);
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
-  HepGeom::Transform3D offset3(rm,pos3);
-  HepGeom::Transform3D offset4(rm,pos4);
-  HepGeom::Transform3D offset5(rm2,pos5);
-  HepGeom::Transform3D offset6(rm2,pos6);
-  HepGeom::Transform3D offset7(rm1,pos7);
-  HepGeom::Transform3D offset8(rm1,pos8);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+  GeoTrf::RotateY3D rm1(45.*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
+  GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
+  GeoTrf::Translate3D offset5(0, 0, 1.5);
+  GeoTrf::Translate3D offset6(0, 0, -7.175);
+  //GeoTrf::Translation3D pos7(s_width/2-6.1, 0, 6.6-s_length/2);
+  //GeoTrf::Vector3D pos8(6.1-s_width/2, 0, 6.6-s_length/2);
+  GeoTrf::Translation3D pos8(0, 0, 6.6-s_length/2);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
+  GeoTrf::Transform3D offset3 = pos3*rm;
+  GeoTrf::Transform3D offset4 = pos4*rm;
+  //GeoTrf::Transform3D offset7 = pos7*rm1;
+  GeoTrf::Transform3D offset8 = pos8*rm1;
 
   const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole3) << offset8));
   const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
@@ -255,19 +235,16 @@ GeoPhysVol* BLM_Wall::BuildLayerIII(double thick, const GeoMaterial* material)
   const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
   const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
   const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.425);
-  CLHEP::HepRotation rm;
-  CLHEP::HepRotation rm1;
-  rm.rotateX(90.*CLHEP::deg);
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos5(0, 0, 2.075);
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
-  HepGeom::Transform3D offset3(rm,pos3);
-  HepGeom::Transform3D offset4(rm,pos4);
-  HepGeom::Transform3D offset5(rm1,pos5);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
+  GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
+  GeoTrf::Translate3D offset5(0, 0, 2.075);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
+  GeoTrf::Transform3D offset3 = pos3*rm;
+  GeoTrf::Transform3D offset4 = pos4*rm;
   const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
   const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
   const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
@@ -286,21 +263,17 @@ GeoPhysVol* BLM_Wall::BuildLayerIV(double thick, const GeoMaterial* material)
   const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
   const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.425);
   const GeoShape* blmWallHole2 = new GeoBox(s_width/2-8.1, thick, 4);
-  CLHEP::HepRotation rm;
-  CLHEP::HepRotation rm1;
-  rm.rotateX(90.*CLHEP::deg);
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos5(0, 0, 2.075);
-  CLHEP::Hep3Vector pos6(0, 0, -7.175);
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
-  HepGeom::Transform3D offset3(rm,pos3);
-  HepGeom::Transform3D offset4(rm,pos4);
-  HepGeom::Transform3D offset5(rm1,pos5);
-  HepGeom::Transform3D offset6(rm1,pos6);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
+  GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
+  GeoTrf::Translate3D offset5(0, 0, 2.075);
+  GeoTrf::Translate3D offset6(0, 0, -7.175);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
+  GeoTrf::Transform3D offset3 = pos3*rm;
+  GeoTrf::Transform3D offset4 = pos4*rm;
   const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
   const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
   const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
@@ -318,16 +291,15 @@ GeoPhysVol* BLM_Wall::BuildLayerV(double thick, const GeoMaterial* material)
 {
   const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
   const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
-  CLHEP::HepRotation rm;
-  rm.rotateX(90.*CLHEP::deg);
-  CLHEP::Hep3Vector pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
-  CLHEP::Hep3Vector pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
-  CLHEP::Hep3Vector pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
-  HepGeom::Transform3D offset1(rm,pos1);
-  HepGeom::Transform3D offset2(rm,pos2);
-  HepGeom::Transform3D offset3(rm,pos3);
-  HepGeom::Transform3D offset4(rm,pos4);
+  GeoTrf::RotateX3D rm(90.*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
+  GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
+  GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
+  GeoTrf::Transform3D offset1 = pos1*rm;
+  GeoTrf::Transform3D offset2 = pos2*rm;
+  GeoTrf::Transform3D offset3 = pos3*rm;
+  GeoTrf::Transform3D offset4 = pos4*rm;
   const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
   const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
   const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/CMakeLists.txt b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/CMakeLists.txt
index a9dee220a6c22bf163046db9298db0b833738160..35712cde5b08e3eaa3b80ff882ef53ec7e2f698d 100644
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/CMakeLists.txt
@@ -9,18 +9,19 @@ atlas_subdir( InDetGeoModelUtils )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           DetectorDescription/GeometryDBSvc )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( InDetGeoModelUtils
@@ -28,6 +29,6 @@ atlas_add_library( InDetGeoModelUtils
                    PUBLIC_HEADERS InDetGeoModelUtils
                    INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GaudiKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GaudiKernel StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES GeoModelUtilities )
 
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/TopLevelPlacements.h b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/TopLevelPlacements.h
index ae144a72c31932d7264b03740da7dce31bab265e..541fba5a4428927cadbb3159d7d03817e5b99db8 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/TopLevelPlacements.h
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/TopLevelPlacements.h
@@ -5,8 +5,9 @@
 #ifndef INDETGEOMODELUTILS_TOPLEVELPLACEMENTS_H
 #define INDETGEOMODELUTILS_TOPLEVELPLACEMENTS_H
 
-#include "CLHEP/Geometry/Transform3D.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <map>
 #include <string>
@@ -22,7 +23,7 @@ public:
   ~TopLevelPlacements();
 
   bool  present(const std::string & partName) const;
-  const HepGeom::Transform3D & transform(const std::string & partName) const;
+  const GeoTrf::Transform3D & transform(const std::string & partName) const;
   
 
 private:
@@ -30,18 +31,17 @@ private:
   class Part {
   public:
     std::string label;
-    HepGeom::Transform3D transform;
+    GeoTrf::Transform3D transform;
   };
 
   void fillPlacements(IRDBRecordset_ptr topLevelTable);
-  HepGeom::Transform3D partTransform(const IRDBRecord* record) const;
+  GeoTrf::Transform3D partTransform(const IRDBRecord* record) const;
   Part * getPart(const std::string & partName) const;
 
   std::map<std::string, Part *> m_parts;
   bool m_noTopLevelTable;
 
-  static HepGeom::Transform3D s_identityTransform;
-
+  static GeoTrf::Transform3D s_identityTransform;
 };
 
 #endif // INDETGEOMODELUTILS_TOPLEVELPLACEMENTS_H
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ExtraMaterial.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ExtraMaterial.cxx
index 87de0f163a37107375ac09a7a35071aeb57a11b6..6dfe4a12d5e24b44ee2ac5d39c4d6f184bc8d337 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ExtraMaterial.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ExtraMaterial.cxx
@@ -9,16 +9,14 @@
 //#include "InDetGeoModelUtils/InDetMaterialManager.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoTubs.h"
 #include "GeoModelKernel/GeoCons.h"
-#include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Geometry/Transform3D.h"
-
 
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/GenericTubeMaker.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/GenericTubeMaker.cxx
index 920a3f051611a1748435fc7b09f24ccb3e37dba2..94f7b5f36303677a0ac5ab8c80d37971cad81a95 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/GenericTubeMaker.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/GenericTubeMaker.cxx
@@ -12,6 +12,8 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include "RDBAccessSvc/IRDBRecord.h"
 
@@ -98,7 +100,7 @@ namespace InDetDD {
       GeoTransform* xform = 0;
       double zOffset = m_volData.zMid() - zParent;
       if (zOffset != 0 || iRepeat > 0) {
-        xform = new GeoTransform(HepGeom::TranslateZ3D(zOffset) * HepGeom::RotateZ3D(phi));
+        xform = new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi));
       }
 
       if (parent) {
@@ -111,8 +113,8 @@ namespace InDetDD {
 
       // Place in negative z as well.
       if (m_volData.bothZ()) {
-        GeoTransform* xformNeg = new GeoTransform(HepGeom::RotateY3D(180 * CLHEP::deg) * HepGeom::TranslateZ3D(
-                                                    zOffset) * HepGeom::RotateZ3D(phi));
+        GeoTransform* xformNeg = new GeoTransform(GeoTrf::RotateY3D(180 * GeoModelKernelUnits::deg) * GeoTrf::TranslateZ3D(
+                                                    zOffset) * GeoTrf::RotateZ3D(phi));
         if (parent) {
           parent->add(xformNeg);
           parent->add(child);
@@ -135,20 +137,20 @@ namespace InDetDD {
 
       if (parentPos) {
         if (newXform) {
-          parentPos->add(new GeoTransform(HepGeom::TranslateZ3D(zOffset) * HepGeom::RotateZ3D(phi)));
+          parentPos->add(new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi)));
         }
         parentPos->add(child);
       } else if (fullparentPos) {
         if (newXform) {
-          fullparentPos->add(new GeoTransform(HepGeom::TranslateZ3D(zOffset) * HepGeom::RotateZ3D(phi)));
+          fullparentPos->add(new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi)));
         }
         fullparentPos->add(child);
       }
 
       // Place in negative z as well.
       if (m_volData.bothZ()) {
-        GeoTransform* xformNeg = new GeoTransform(HepGeom::RotateY3D(180 * CLHEP::deg) * HepGeom::TranslateZ3D(
-                                                    zOffset) * HepGeom::RotateZ3D(phi));
+        GeoTransform* xformNeg = new GeoTransform(GeoTrf::RotateY3D(180 * GeoModelKernelUnits::deg) * GeoTrf::TranslateZ3D(
+                                                    zOffset) * GeoTrf::RotateZ3D(phi));
         if (parentNeg) {
           parentNeg->add(xformNeg);
           parentNeg->add(child);
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/InDetMaterialManager.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/InDetMaterialManager.cxx
index f8ae66df9ce4848ed96b55a164611b6d00a5d8c1..e811e511ae69e7f650bd612a7c7f15f94ed58262 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/InDetMaterialManager.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/InDetMaterialManager.cxx
@@ -8,11 +8,11 @@
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoElement.h"
+#include "GeoModelKernel/Units.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
 
 #include <iostream>
 #include <iomanip>
@@ -142,8 +142,8 @@ InDetMaterialManager::getCompositeMaterialForVolume(const std::string& newMatNam
   baseMaterials.reserve(2);
   fracWeight.reserve(2);
 
-  msg(MSG::DEBUG) << "Composite material : " << volumeTot / CLHEP::cm3 << " = " << volume1 / CLHEP::cm3 << " + " <<
-    volume2 / CLHEP::cm3 << endmsg;
+  msg(MSG::DEBUG) << "Composite material : " << volumeTot / GeoModelKernelUnits::cm3 << " = " << volume1 / GeoModelKernelUnits::cm3 << " + " <<
+    volume2 / GeoModelKernelUnits::cm3 << endmsg;
   msg(MSG::DEBUG) << "Composite material : " << matName1 << " " << matName2 << endmsg;
 
   double density1, density2;
@@ -152,21 +152,21 @@ InDetMaterialManager::getCompositeMaterialForVolume(const std::string& newMatNam
   if ((iter = m_weightMap.find(matName1)) != m_weightMap.end()) {
     const GeoMaterial* mat1 = getMaterialForVolume(matName1, volume1);
     density1 = mat1->getDensity();
-    msg(MSG::DEBUG) << "Composite material 1 - weight : " << density1 / (CLHEP::gram / CLHEP::cm3) << endmsg;
+    msg(MSG::DEBUG) << "Composite material 1 - weight : " << density1 / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
   } else {
     const GeoMaterial* mat1 = getMaterial(matName1);
     density1 = mat1->getDensity();
-    msg(MSG::DEBUG) << "Composite material 1 - standard : " << density1 / (CLHEP::gram / CLHEP::cm3) << endmsg;
+    msg(MSG::DEBUG) << "Composite material 1 - standard : " << density1 / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
   }
 
   if ((iter = m_weightMap.find(matName2)) != m_weightMap.end()) {
     const GeoMaterial* mat2 = getMaterialForVolume(matName2, volume2);
     density2 = mat2->getDensity();
-    msg(MSG::DEBUG) << "Composite material 2 - weight : " << density2 / (CLHEP::gram / CLHEP::cm3) << endmsg;
+    msg(MSG::DEBUG) << "Composite material 2 - weight : " << density2 / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
   } else {
     const GeoMaterial* mat2 = getMaterial(matName2);
     density2 = mat2->getDensity();
-    msg(MSG::DEBUG) << "Composite material 2 - standard : " << density2 / (CLHEP::gram / CLHEP::cm3) << endmsg;
+    msg(MSG::DEBUG) << "Composite material 2 - standard : " << density2 / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
   }
 
   double weight1 = density1 * volume1;
@@ -179,9 +179,9 @@ InDetMaterialManager::getCompositeMaterialForVolume(const std::string& newMatNam
   double frac2 = weight2 / (weight1 + weight2);
   double density_2 = 1.0 / (frac1 / density1 + frac2 / density2);
   double density_3 = (weight1 + weight2) / (volume1 + volume2);
-  msg(MSG::DEBUG) << "-> weights : " << weight1 / (CLHEP::gram) << " " << weight2 / (CLHEP::gram) << endmsg;
-  msg(MSG::DEBUG) << "-> density : " << density / (CLHEP::gram / CLHEP::cm3) << "  " << density_2 /
-  (CLHEP::gram / CLHEP::cm3) << " " << density_3 / (CLHEP::gram / CLHEP::cm3) << endmsg;
+  msg(MSG::DEBUG) << "-> weights : " << weight1 / (GeoModelKernelUnits::gram) << " " << weight2 / (GeoModelKernelUnits::gram) << endmsg;
+  msg(MSG::DEBUG) << "-> density : " << density / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << "  " << density_2 /
+  (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << " " << density_3 / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
 
 
   baseMaterials.push_back(matName1);
@@ -228,8 +228,8 @@ InDetMaterialManager::getMaterialInternal(const std::string& origMaterialName,
   if (material) {
     if (!compareDensity(material->getDensity(), density)) {
       msg(MSG::WARNING) << "Density is not consistent for material " << newName2
-                        << "  " << material->getDensity() / (CLHEP::gram / CLHEP::cm3)
-                        << " / " << density / (CLHEP::gram / CLHEP::cm3) << endmsg;
+                        << "  " << material->getDensity() / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3)
+                        << " / " << density / (GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3) << endmsg;
     }
     newMaterial = material;
   } else {
@@ -311,7 +311,7 @@ InDetMaterialManager::addMaterial(GeoMaterial* material) {
     m_store[name] = material;
 
     if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Created new material: " << name << ", " << material->getDensity() /
-      (CLHEP::g / CLHEP::cm3) << " CLHEP::g/CLHEP::cm3" << endmsg;
+      (GeoModelKernelUnits::g / GeoModelKernelUnits::cm3) << " g/cm3" << endmsg;
   }
 }
 
@@ -338,7 +338,7 @@ InDetMaterialManager::addWeightTable(IRDBRecordset_ptr weightTable, const std::s
     if (db()->testField(weightTable, "BASEMATERIAL", i)) {
       materialBase = db()->getString(weightTable, "BASEMATERIAL", i);
     }
-    double weight = db()->getDouble(weightTable, "WEIGHT", i) * CLHEP::gram;
+    double weight = db()->getDouble(weightTable, "WEIGHT", i) * GeoModelKernelUnits::gram;
     //std::cout << materialName << " " << materialBase << " " << weight/CLHEP::g <<  std::endl;
 
     bool linearWeightFlag = false;
@@ -364,7 +364,7 @@ void
 InDetMaterialManager::addWeightMaterial(std::string materialName, std::string materialBase, double weight,
                                         int linearWeightFlag) {
   // Weight in gr
-  weight = weight * CLHEP::gram;
+  weight = weight * GeoModelKernelUnits::gram;
 
   if (m_weightMap.find(materialName) != m_weightMap.end()) {
     msg(MSG::WARNING) << "Material: " << materialName << " already exists in weight table" << endmsg;
@@ -389,7 +389,7 @@ InDetMaterialManager::addWeightTableOld(IRDBRecordset_ptr weightTable, const std
     if (!record->isFieldNull("BASEMATERIAL")) {
       materialBase = record->getString("BASEMATERIAL");
     }
-    double weight = record->getDouble("WEIGHT") * CLHEP::gram;
+    double weight = record->getDouble("WEIGHT") * GeoModelKernelUnits::gram;
     //std::cout << materialName << " " << materialBase << " " << weight/CLHEP::g <<  std::endl;
 
     bool linearWeightFlag = false;
@@ -492,12 +492,12 @@ InDetMaterialManager::getMaterialForVolume(const std::string& materialName, doub
     if (msgLvl(MSG::VERBOSE)) {
       msg(MSG::VERBOSE)
         <<
-      "Found material in weight table - name, base, weight(CLHEP::g), volume(CLHEP::cm3), density(CLHEP::g/CLHEP::cm3): "
+      "Found material in weight table - name, base, weight(g), volume(cm3), density(g/cm3): "
         << materialName << ", "
         << materialBase << ", "
-        << weight / CLHEP::gram << ", "
-        << volume / CLHEP::cm3 << ", "
-        << density / (CLHEP::g / CLHEP::cm3) << endmsg;
+        << weight / GeoModelKernelUnits::gram << ", "
+        << volume / GeoModelKernelUnits::cm3 << ", "
+        << density / (GeoModelKernelUnits::g / GeoModelKernelUnits::cm3) << endmsg;
     }
 
     if (materialBase.empty()) {
@@ -516,7 +516,7 @@ InDetMaterialManager::getMaterialForVolume(const std::string& materialName, doub
       msg(MSG::VERBOSE)
         << "Material not in weight table, using standard material: "
         << materialName
-        << ", volume(CLHEP::cm3) = " << volume / CLHEP::cm3
+        << ", volume(cm3) = " << volume / GeoModelKernelUnits::cm3
         << endmsg;
     return getMaterial(materialName);
   }
@@ -586,7 +586,7 @@ InDetMaterialManager::getMaterialForVolumeLength(const std::string& materialName
       msg(MSG::VERBOSE)
         << "Material not in weight table, using standard material: "
         << materialName
-        << ", volume(CLHEP::cm3) = " << volume / CLHEP::cm3
+        << ", volume(cm3) = " << volume / GeoModelKernelUnits::cm3
         << endmsg;
     return getMaterial(materialName);
   }
@@ -639,9 +639,9 @@ InDetMaterialManager::getMaterialForVolumeLength(const std::string& name,
         weight *= factors[iComp];
       }
       msg(MSG::DEBUG) << "Material " << materialName
-                      << " found in weight table, weight " << iter->second.weight / CLHEP::gram
+                      << " found in weight table, weight " << iter->second.weight / GeoModelKernelUnits::gram
                       << " factor " << factors[iComp]
-                      << " w*fac*len " << weight * length / CLHEP::gram
+                      << " w*fac*len " << weight * length / GeoModelKernelUnits::gram
                       << " basMat " << materialBase
                       << " linear? " << iter->second.linearWeightFlag << endmsg;
 
@@ -668,7 +668,7 @@ InDetMaterialManager::getMaterialForVolumeLength(const std::string& name,
        */
 
       // In this case the factor should correspond to the linear weight
-      double weight = factors.at(iComp) * length * CLHEP::gram;
+      double weight = factors.at(iComp) * length * GeoModelKernelUnits::gram;
 
       // If material not found, will get error message when attempting to make the material. So carry on here.
       baseMaterials.push_back(materialName);
@@ -681,7 +681,7 @@ InDetMaterialManager::getMaterialForVolumeLength(const std::string& name,
     msg(MSG::VERBOSE) << "Creating material from multiple components: " << name << endmsg;
     for (unsigned int i = 0; i < materialComponents.size(); ++i) {
       msg(MSG::VERBOSE) << " Component " << i << ": Name = " << baseMaterials[i]
-                        << " Weight(CLHEP::g) = " << fracWeight[i] / CLHEP::g << endmsg;
+                        << " Weight(g) = " << fracWeight[i] / GeoModelKernelUnits::g << endmsg;
     }
   }
 
@@ -799,7 +799,7 @@ InDetMaterialManager::addTextFileMaterials() {
   // read in material table
   for (unsigned int iMat = 0; iMat < db()->getTableSize(materialTable); iMat++) {
     std::string materialName = db()->getString(materialTable, "NAME", iMat);
-    double density = db()->getDouble(materialTable, "DENSITY", iMat) * CLHEP::g / CLHEP::cm3;
+    double density = db()->getDouble(materialTable, "DENSITY", iMat) * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3;
     materials[materialName] = MaterialDef(materialName, density);
   }
 
@@ -899,7 +899,7 @@ InDetMaterialManager::createMaterial(const MaterialDef& material) {
   // Now build the material
   GeoMaterial* newMaterial = new GeoMaterial(material.name(), material.density());
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Creating material: " << material.name()
-                                          << " with density: " << material.density() / (CLHEP::g / CLHEP::cm3) <<
+                                          << " with density: " << material.density() / (GeoModelKernelUnits::g / GeoModelKernelUnits::cm3) <<
     endmsg;
   for (unsigned int i = 0; i < material.numComponents(); i++) {
     double fracWeight = material.fraction(i) / totWeight;
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolume.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolume.cxx
index e722f04071822d4f45dd2123da58d82a3fc0d56f..55c9e70441e960b4a51497503116c761021ed0cd 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolume.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolume.cxx
@@ -52,31 +52,31 @@
 //   Ignored: ROUT, RIN2, ROUT2
 //   RIN: Radial position of center of tube
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm): diameter
+//   WIDTH (mm): diameter
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // ROD2  (hollow tube not centered around Z axis)
 //   Ignored: ROUT, ROUT2
 //   RIN: Radial position of center of tube
 //   RIN2: inner radius
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm): diameter
+//   WIDTH (mm): diameter
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // BOX
 //   Ignored: RIN2, ROUT2
 //   ROUT-RIN = thickness of box (radially)
 //   (RIN+ROUT)/2 = radial poistion of center of box
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm) = width of box
+//   WIDTH (mm) = width of box
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // TRAP
 //   Ignored: RIN2, ROUT2
 //   ROUT-RIN = thickness of trapezoid (radially)
 //   (RIN+ROUT)/2 = radial poistion of center of trapzoid
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm) = width of trapezoid at center
+//   WIDTH (mm) = width of trapezoid at center
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 //
-//   **IMPORTANT NOTE** WIDTH can be in degrees or CLHEP::mm. See OraclePixGeoManager
+//   **IMPORTANT NOTE** WIDTH can be in degrees or mm. See OraclePixGeoManager
 
 #include "InDetGeoModelUtils/ServiceVolume.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -86,6 +86,7 @@
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTrap.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
+#include "GeoModelKernel/Units.h"
 
 #include <string>
 #include <iostream>
@@ -238,10 +239,10 @@ namespace InDetDD {
       // Inner edge
       GeoShape* shapeTmp2 = 0;
       if (m_rmin == m_rmin2) {
-        shapeTmp2 = new GeoTube(0, m_rmin, halflength + 0.1 * CLHEP::mm);
+        shapeTmp2 = new GeoTube(0, m_rmin, halflength + 0.1 * GeoModelKernelUnits::mm);
         volume -= 2 * M_PI * m_rmin * m_rmin * halflength;
       } else {
-        shapeTmp2 = new GeoCons(0, 0, m_rmin, m_rmin2, halflength + 0.1 * CLHEP::mm, 0, 2 * M_PI);
+        shapeTmp2 = new GeoCons(0, 0, m_rmin, m_rmin2, halflength + 0.1 * GeoModelKernelUnits::mm, 0, 2 * M_PI);
         volume -= 2 * M_PI * pow(0.5 * (m_rmin + m_rmin2), 2) * halflength;
       }
       serviceShape = &(shapeTmp1->subtract(*shapeTmp2));
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolumeMaker.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolumeMaker.cxx
index c980d5cc37dc21ae2661a1da58a2401bd8dd6352..8e56a2b2ca2cf23a8a7be85305bfe7c833873aff 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolumeMaker.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/ServiceVolumeMaker.cxx
@@ -10,7 +10,7 @@
 
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDD {
   ServiceVolumeSchema::ServiceVolumeSchema() {
@@ -97,56 +97,56 @@ namespace InDetDD {
 
   double
   ServiceVolumeMakerMgr::rmin(int index) const {
-    return db()->getDouble(m_table, m_schema.rmin(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.rmin(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::rmax(int index) const {
-    return db()->getDouble(m_table, m_schema.rmax(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.rmax(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::rmin2(int index) const {
-    return db()->getDouble(m_table, m_schema.rmin2(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.rmin2(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::rmax2(int index) const {
-    return db()->getDouble(m_table, m_schema.rmax2(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.rmax2(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::zmin(int index) const {
-    return db()->getDouble(m_table, m_schema.zmin(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.zmin(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::zmax(int index) const {
-    return db()->getDouble(m_table, m_schema.zmax(), index) * CLHEP::mm;
+    return db()->getDouble(m_table, m_schema.zmax(), index) * GeoModelKernelUnits::mm;
   }
 
   double
   ServiceVolumeMakerMgr::phiDelta(int index) const {
-    return db()->getDouble(m_table, m_schema.phiDelta(), index) * CLHEP::deg;
+    return db()->getDouble(m_table, m_schema.phiDelta(), index) * GeoModelKernelUnits::deg;
   }
 
   double
   ServiceVolumeMakerMgr::width(int index) const {
     if (m_schema.has_width()) {
-      return db()->getDouble(m_table, m_schema.width(), index) * CLHEP::mm;
+      return db()->getDouble(m_table, m_schema.width(), index) * GeoModelKernelUnits::mm;
     }
     return 0;
   }
 
   double
   ServiceVolumeMakerMgr::phiStart(int index) const {
-    return db()->getDouble(m_table, m_schema.phiStart(), index) * CLHEP::deg;
+    return db()->getDouble(m_table, m_schema.phiStart(), index) * GeoModelKernelUnits::deg;
   }
 
   double
   ServiceVolumeMakerMgr::phiStep(int index) const {
     if (m_schema.has_phiStep()) {
-      return db()->getDouble(m_table, m_schema.phiStep(), index) * CLHEP::deg;
+      return db()->getDouble(m_table, m_schema.phiStep(), index) * GeoModelKernelUnits::deg;
     }
     return 0;
   }
@@ -309,8 +309,8 @@ namespace InDetDD {
       double phiDelta = m_mgr->phiDelta(ii);
 
       bool fullPhiSector = false;
-      if (phiDelta == 0 || phiDelta >= 359.9 * CLHEP::degree) {
-        phiDelta = 360 * CLHEP::degree;
+      if (phiDelta == 0 || phiDelta >= 359.9 * GeoModelKernelUnits::degree) {
+        phiDelta = 360 * GeoModelKernelUnits::degree;
         fullPhiSector = true;
       }
       //else {
@@ -340,12 +340,12 @@ namespace InDetDD {
       double phiWidth = phiDelta;
 
       if (shapeType == "CONS" || shapeType == "TUBS") {
-        const double phiepsilon = 0.001 * CLHEP::degree;
+        const double phiepsilon = 0.001 * GeoModelKernelUnits::degree;
         phiWidth -= 2 * phiepsilon;
         phiStart += phiepsilon;
       }
 
-      // Can be in degree or CLHEP::mm. Usually it is CLHEP::deg expect for BOX, TRAP and ROD shape
+      // Can be in degree or mm. Usually it is deg expect for BOX, TRAP and ROD shape
       // Geometry manager makes no assumptions about units. So we must interpret here.
       if (shapeType == "BOX" || shapeType == "ROD" || shapeType == "ROD2" || shapeType == "TRAP") {
         phiWidth = m_mgr->width(ii); // in mm
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TopLevelPlacements.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TopLevelPlacements.cxx
index bd6b6f12ce86117c50ba3d599715e36c6b9da583..8f8fce59eefee18d1359cfaf7be0e7bc37f5f488 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TopLevelPlacements.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TopLevelPlacements.cxx
@@ -2,19 +2,13 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-
 #include "InDetGeoModelUtils/TopLevelPlacements.h"
-
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/Units.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
+#include <iostream>
 
-
-
-
-HepGeom::Transform3D TopLevelPlacements::s_identityTransform = HepGeom::Transform3D();
-
+GeoTrf::Transform3D TopLevelPlacements::s_identityTransform = GeoTrf::Transform3D::Identity();
 
 TopLevelPlacements::TopLevelPlacements(IRDBRecordset_ptr topLevelTable)
   : m_noTopLevelTable(true) {
@@ -26,7 +20,7 @@ TopLevelPlacements::~TopLevelPlacements() {
   for (iter = m_parts.begin(); iter != m_parts.end(); ++iter) delete iter->second;
 }
 
-const HepGeom::Transform3D&
+const GeoTrf::Transform3D&
 TopLevelPlacements::transform(const std::string& partName) const {
   Part* part = getPart(partName);
 
@@ -63,18 +57,18 @@ TopLevelPlacements::fillPlacements(IRDBRecordset_ptr topLevelTable) {
   }
 }
 
-HepGeom::Transform3D
+GeoTrf::Transform3D
 TopLevelPlacements::partTransform(const IRDBRecord* record) const {
-  double posX = record->getDouble("POSX") * CLHEP::mm;
-  double posY = record->getDouble("POSY") * CLHEP::mm;
-  double posZ = record->getDouble("POSZ") * CLHEP::mm;
-  double rotX = record->getDouble("ROTX") * CLHEP::degree;
-  double rotY = record->getDouble("ROTY") * CLHEP::degree;
-  double rotZ = record->getDouble("ROTZ") * CLHEP::degree;
+  double posX = record->getDouble("POSX") * GeoModelKernelUnits::mm;
+  double posY = record->getDouble("POSY") * GeoModelKernelUnits::mm;
+  double posZ = record->getDouble("POSZ") * GeoModelKernelUnits::mm;
+  double rotX = record->getDouble("ROTX") * GeoModelKernelUnits::degree;
+  double rotY = record->getDouble("ROTY") * GeoModelKernelUnits::degree;
+  double rotZ = record->getDouble("ROTZ") * GeoModelKernelUnits::degree;
   int rotOrder = record->getInt("ROTORDER");
 
   // Translation part
-  HepGeom::Transform3D transform = HepGeom::Translate3D(posX, posY, posZ);
+  GeoTrf::Translate3D transform(posX, posY, posZ);
 
   // If rotation is zero return translation
   if (rotX == 0 && rotY == 0 && rotZ == 0) {
@@ -100,14 +94,14 @@ TopLevelPlacements::partTransform(const IRDBRecord* record) const {
   }
 
   // List of the three transforms
-  HepGeom::Transform3D* xformList[3] = {
+  GeoTrf::Transform3D* xformList[3] = {
     0, 0, 0
   };
-  if (rotX != 0) xformList[0] = new HepGeom::RotateX3D(rotX);
-  if (rotY != 0) xformList[1] = new HepGeom::RotateY3D(rotY);
-  if (rotZ != 0) xformList[2] = new HepGeom::RotateZ3D(rotZ);
+  if (rotX != 0) xformList[0] = new GeoTrf::RotateX3D(rotX);
+  if (rotY != 0) xformList[1] = new GeoTrf::RotateY3D(rotY);
+  if (rotZ != 0) xformList[2] = new GeoTrf::RotateZ3D(rotZ);
 
-  HepGeom::Transform3D rotation;
+  GeoTrf::Transform3D rotation(GeoTrf::Transform3D::Identity());
   if (xformList[ixyz1]) rotation = *(xformList[ixyz1]) * rotation;
   if (xformList[ixyz2]) rotation = *(xformList[ixyz2]) * rotation;
   if (xformList[ixyz3]) rotation = *(xformList[ixyz3]) * rotation;
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TubeVolData.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TubeVolData.cxx
index d12523d06b71de476a15857d63f657627bdc0341..10e14267b979241d7bca3d8410a0b2758a30ad17 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TubeVolData.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/TubeVolData.cxx
@@ -4,7 +4,7 @@
 
 #include "InDetGeoModelUtils/TubeVolData.h"
 #include "RDBAccessSvc/IRDBRecord.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <string>
@@ -36,7 +36,7 @@ namespace InDetDD {
     m_length(0.),
     m_zMid(0.) {
     // add an 2*epsilon gap between phi sectors.
-    const double phiepsilon = 0.001 * CLHEP::degree;
+    const double phiepsilon = 0.001 * GeoModelKernelUnits::degree;
 
     bool fullPhiSector = false;
 
@@ -45,14 +45,14 @@ namespace InDetDD {
     // The rest are obtained directly from RDB.
 
     if (m_record) {
-      m_phiStart = m_record->getDouble("PHISTART") * CLHEP::degree;
-      m_phiDelta = m_record->getDouble("PHIDELTA") * CLHEP::degree;
-      m_phiStep = m_record->getDouble("PHISTEP") * CLHEP::degree;
+      m_phiStart = m_record->getDouble("PHISTART") * GeoModelKernelUnits::degree;
+      m_phiDelta = m_record->getDouble("PHIDELTA") * GeoModelKernelUnits::degree;
+      m_phiStep = m_record->getDouble("PHISTEP") * GeoModelKernelUnits::degree;
       m_nRepeat = m_record->getInt("NREPEAT");
-      m_rmin1 = m_record->getDouble("RMIN") * CLHEP::mm;
-      m_rmax1 = m_record->getDouble("RMAX") * CLHEP::mm;
-      m_rmin2 = m_record->getDouble("RMIN2") * CLHEP::mm;
-      m_rmax2 = m_record->getDouble("RMAX2") * CLHEP::mm;
+      m_rmin1 = m_record->getDouble("RMIN") * GeoModelKernelUnits::mm;
+      m_rmax1 = m_record->getDouble("RMAX") * GeoModelKernelUnits::mm;
+      m_rmin2 = m_record->getDouble("RMIN2") * GeoModelKernelUnits::mm;
+      m_rmax2 = m_record->getDouble("RMAX2") * GeoModelKernelUnits::mm;
       m_radialDiv = 0;
       if (!m_record->isFieldNull("RADIAL")) {
         m_radialDiv = m_record->getInt("RADIAL");
@@ -62,13 +62,13 @@ namespace InDetDD {
         m_bothZ = m_record->getInt("ZSYMM");
       }
 
-      double zmin = m_record->getDouble("ZMIN") * CLHEP::mm;
-      double zmax = m_record->getDouble("ZMAX") * CLHEP::mm;
+      double zmin = m_record->getDouble("ZMIN") * GeoModelKernelUnits::mm;
+      double zmax = m_record->getDouble("ZMAX") * GeoModelKernelUnits::mm;
       m_length = std::abs(zmax - zmin);
       m_zMid = 0.5 * (zmin + zmax);
 
-      if (m_phiDelta == 0 || m_phiDelta >= 359.9 * CLHEP::degree) {
-        m_phiDelta = 360 * CLHEP::degree;
+      if (m_phiDelta == 0 || m_phiDelta >= 359.9 * GeoModelKernelUnits::degree) {
+        m_phiDelta = 360 * GeoModelKernelUnits::degree;
         fullPhiSector = true;
       } else {
         m_phiDelta -= 2 * phiepsilon;
@@ -79,7 +79,7 @@ namespace InDetDD {
       if (m_nRepeat <= 0) m_nRepeat = 1;
       // if PHISTEP==0 then set it to be equi-distant steps filling up phi.
       if (m_phiStep == 0) {
-        m_phiStep = 360 * CLHEP::degree / m_nRepeat;
+        m_phiStep = 360 * GeoModelKernelUnits::degree / m_nRepeat;
       }
 
       if (m_rmin2 <= 0) m_rmin2 = m_rmin1;
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeBuilder.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeBuilder.cxx
index b5051db82a43fdf941f197f8b2f178074851a059..a8367990da379e724ffa50947ded197229194b35 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeBuilder.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeBuilder.cxx
@@ -5,13 +5,14 @@
 #include "InDetGeoModelUtils/VolumeBuilder.h"
 #include "InDetGeoModelUtils/ServiceVolume.h"
 #include "InDetGeoModelUtils/InDetMaterialManager.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoTransform.h"
-#include "CLHEP/Geometry/Transform3D.h"
-
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDD {
   VolumeBuilder::VolumeBuilder(const Zone& zone, const std::vector<const ServiceVolume* >& services)
@@ -225,7 +226,7 @@ namespace InDetDD {
     if (msgLvl(MSG::DEBUG)) {
       msg(MSG::DEBUG) << "Volume/material: " << logName << "/" << materialName << endmsg;
       if (!param.shapeType().empty()) msg(MSG::DEBUG) << " shape: " << param.shapeType() << endmsg;
-      msg(MSG::DEBUG) << " volume (CLHEP::cm3): " << volume / CLHEP::cm3 << endmsg;
+      msg(MSG::DEBUG) << " volume (cm3): " << volume / GeoModelKernelUnits::cm3 << endmsg;
       msg(MSG::DEBUG) << " rmin,rmax,zmin,zmax: "
                       << param.rmin() << ", "
                       << param.rmax() << ", "
@@ -298,24 +299,24 @@ namespace InDetDD {
       rotateAroundY = true;
     }
     // Most are just translated in z
-    HepGeom::Transform3D xform = HepGeom::TranslateZ3D(zpos);
+    GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
     double phiStart = 0;
     // BOX, ROD and TRAP need special treatment.
     const std::string& shapeType = param.shapeType();
     if (shapeType == "TRAP" || shapeType == "TRAP2") {
       // Need to rotate by -90 deg.
-      xform = HepGeom::RotateZ3D(-90. * CLHEP::deg) * xform;
+      xform = GeoTrf::RotateZ3D(-90. * GeoModelKernelUnits::deg) * xform;
     }
     if (shapeType == "TRAP2") {
-      xform = HepGeom::RotateZ3D(-90. * CLHEP::deg) * xform;  // * HepGeom::RotateX3D(-90.*CLHEP::deg);
+      xform = GeoTrf::RotateZ3D(-90. * GeoModelKernelUnits::deg) * xform;  // * GeoTrf::RotateX3D(-90.*GeoModelKernelUnits::deg);
     }
     if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
       double radius = 0.5 * (param.rmin() + param.rmax());
-      xform = HepGeom::TranslateX3D(radius) * xform;
+      xform = GeoTrf::TranslateX3D(radius) * xform;
       phiStart = param.phiLoc();
     } else if (shapeType == "ROD" || shapeType == "ROD2") {
       double radius = param.rmin();
-      xform = HepGeom::TranslateX3D(radius) * xform;
+      xform = GeoTrf::TranslateX3D(radius) * xform;
       phiStart = param.phiLoc();
     }
     // For volumes that are placed more than once.
@@ -325,11 +326,11 @@ namespace InDetDD {
     }
     double phi = phiStart + deltaPhi * iCopy;
     if (phi) {
-      xform = HepGeom::RotateZ3D(phi) * xform;
+      xform = GeoTrf::RotateZ3D(phi) * xform;
     }
     // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
     if (rotateAroundY) {
-      xform = HepGeom::RotateY3D(180. * CLHEP::degree) * xform;
+      xform = GeoTrf::RotateY3D(180. * GeoModelKernelUnits::degree) * xform;
     }
     return new GeoTransform(xform);
   }
@@ -353,25 +354,25 @@ namespace InDetDD {
       rotateAroundY = true;
     }
     // Most are just translated in z
-    HepGeom::Transform3D xform = HepGeom::TranslateZ3D(zpos);
+    GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
     const std::string& shapeType = param.shapeType();
     double phiStart = 0;
     // BOX, ROD and TRAP need special treatment.
     if (shapeType == "TRAP") {
       // Need to rotate by -90 deg.
-      xform = HepGeom::RotateZ3D(-90. * CLHEP::deg) * xform;
+      xform = GeoTrf::RotateZ3D(-90. * GeoModelKernelUnits::deg) * xform;
     }
     if (shapeType == "TRAP2") {
       // Need to rotate by -90 deg.
-      xform = HepGeom::RotateX3D(-90. * CLHEP::deg) * xform;
+      xform = GeoTrf::RotateX3D(-90. * GeoModelKernelUnits::deg) * xform;
     }
     if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
       double radius = 0.5 * (param.rmin() + param.rmax()) - rCenter;
-      xform = HepGeom::TranslateX3D(radius) * xform;
+      xform = GeoTrf::TranslateX3D(radius) * xform;
       phiStart = param.phiLoc();
     } else if (shapeType == "ROD" || shapeType == "ROD2") {
       double radius = param.rmin();
-      xform = HepGeom::TranslateX3D(radius) * xform;
+      xform = GeoTrf::TranslateX3D(radius) * xform;
       phiStart = param.phiLoc();
     }
     // For volumes that are placed more than once.
@@ -381,11 +382,11 @@ namespace InDetDD {
     }
     double phi = phiStart + deltaPhi * iCopy;
     if (phi) {
-      xform = HepGeom::RotateZ3D(phi) * xform;
+      xform = GeoTrf::RotateZ3D(phi) * xform;
     }
     // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
     if (rotateAroundY) {
-      xform = HepGeom::RotateY3D(180. * CLHEP::degree) * xform;
+      xform = GeoTrf::RotateY3D(180. * GeoModelKernelUnits::degree) * xform;
     }
     return new GeoTransform(xform);
   }
diff --git a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeSplitter.cxx b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeSplitter.cxx
index 35fb29ef43a971a7cf6a547a0c9f94ef59f56b1d..d91cd6bbd7cf663fe3e0134ad5083c9f1fe6daf7 100755
--- a/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeSplitter.cxx
+++ b/InnerDetector/InDetDetDescr/InDetGeoModelUtils/src/VolumeSplitter.cxx
@@ -5,7 +5,7 @@
 #include "InDetGeoModelUtils/VolumeSplitter.h"
 #include "InDetGeoModelUtils/VolumeSplitterUtils.h"
 #include "InDetGeoModelUtils/ServiceVolume.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <algorithm>
@@ -13,7 +13,7 @@
 namespace InDetDD {
   VolumeSplitter::VolumeSplitter()
     : m_ownVolumes(true),
-    m_epsilon(0.0001 * CLHEP::mm)
+    m_epsilon(0.0001 * GeoModelKernelUnits::mm)
   {}
 
   VolumeSplitter::~VolumeSplitter() {
@@ -150,7 +150,7 @@ namespace InDetDD {
     }
   }
 
-// This takes care of cone like volumes and adjust the CLHEP::radius according to the adjusted z.
+// This takes care of cone like volumes and adjust the radius according to the adjusted z.
   void
   VolumeSplitter::adjustR(const ServiceVolume& param, ServiceVolume* paramNew) {
     double z1 = param.zmin();
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/CMakeLists.txt b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/CMakeLists.txt
index fe9ae4f1765184adb7eeb92032370f1bfd438a17..40aebd365680c5b4545a98517b82601b8a8c8e50 100644
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/CMakeLists.txt
@@ -11,7 +11,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Control/StoreGate
                           DetectorDescription/AtlasDetDescr
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           DetectorDescription/GeoPrimitives
                           DetectorDescription/Identifier
@@ -30,6 +29,7 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( CLHEP )
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( InDetReadoutGeometry
@@ -37,6 +37,6 @@ atlas_add_library( InDetReadoutGeometry
                    PUBLIC_HEADERS InDetReadoutGeometry
                    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel AtlasDetDescr GeoModelKernel GeoModelUtilities GeoPrimitives Identifier GaudiKernel InDetCondServices InDetIdentifier TrkDetElementBase TrkSurfaces TrkEventPrimitives StoreGateLib SGtests AthenaBaseComps DetDescrConditions
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel AtlasDetDescr GeoModelUtilities GeoPrimitives Identifier GaudiKernel InDetCondServices InDetIdentifier TrkDetElementBase TrkSurfaces TrkEventPrimitives StoreGateLib SGtests AthenaBaseComps DetDescrConditions
                    PRIVATE_LINK_LIBRARIES AthenaPoolUtilities IdDictDetDescr TRT_ConditionsData )
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/ExtendedAlignableTransform.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/ExtendedAlignableTransform.h
index 37e427afc36abc4d2449ccd5a255c1ff5afe41f0..9cf563c55b242b0b9fe576216de2e023d3c226e5 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/ExtendedAlignableTransform.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/ExtendedAlignableTransform.h
@@ -11,6 +11,7 @@
 #ifndef INDETREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
 #define INDETREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoVFullPhysVol.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDetectorManager.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDetectorManager.h
index 3744b92d1ef9f801b197ff16ca35beb32189c625..7d42b82f07c15fa4f3079099f022733278f0d211 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDetectorManager.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDetectorManager.h
@@ -11,6 +11,7 @@
 #ifndef InDetReadoutGeometry_PixelDetectorManager_h
 #define InDetReadoutGeometry_PixelDetectorManager_h 1
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoVPhysVol.h"
 
 #include "InDetReadoutGeometry/SiDetectorManager.h"
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDiodeMatrix.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDiodeMatrix.h
index 35190f3655b9c0bab6c733b8ef997c356e9b6e7d..7dc7b3e60e47ea0c7ddafa2733fb29ea432c36c3 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDiodeMatrix.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/PixelDiodeMatrix.h
@@ -12,6 +12,7 @@
 #define INDETREADOUTGEOMETRY_PIXELDIODEMATRIX_H
 
 #include "InDetReadoutGeometry/SiCellId.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "TrkDetElementBase/TrkDetElementBase.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiCommonItems.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiCommonItems.h
index 5f6f8ef5e00038c2a32ad8656778b7559fc9569f..99d2b50e97d81be1ad38ee3c239ad7f0fb2bacae 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiCommonItems.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiCommonItems.h
@@ -17,6 +17,7 @@ class AtlasDetectorID;
 #include "AthenaKernel/MsgStreamMember.h"
 #include "GaudiKernel/ServiceHandle.h"
 #include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "InDetCondServices/ISiLorentzAngleTool.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorDesign.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorDesign.h
index ea3d11ff2ae8001f9af8fed9eeb46ae5df753fa2..52487fb58cb39771612756d8d97da61ef98b3102 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorDesign.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorDesign.h
@@ -17,6 +17,7 @@
 #include "CLHEP/Geometry/Point3D.h"
 #include "CLHEP/Geometry/Vector3D.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "InDetDD_Defs.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
index 978e9e5a3ca7f13b4b8da8b3c7186eaa87ab0941..87a2c22cbe80a205012339c78d686f0dbb278cbf 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiDetectorElement.h
@@ -24,6 +24,8 @@
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "CLHEP/Geometry/Point3D.h"
 #include "GeoPrimitives/CLHEPtoEigenConverter.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 class AtlasDetectorID;
 class GeoVFullPhysVol;
@@ -182,7 +184,7 @@ namespace InDetDD {
       //@{
       // Position 
       /// Local (simulation/hit frame) to global transform
-      virtual const HepGeom::Transform3D & transformHit() const; 
+      virtual const GeoTrf::Transform3D & transformHit() const; 
       /// Local (reconstruction frame) to global transform
       const Amg::Transform3D & transform() const; 
       /// Default Local (reconstruction frame) to global transform
@@ -662,7 +664,7 @@ namespace InDetDD {
     
     inline HepGeom::Point3D<double> SiDetectorElement::globalPositionHit(const HepGeom::Point3D<double> &localPos) const
     {
-      return transformHit()*localPos;
+      return Amg::EigenTransformToCLHEP(transformHit())*localPos;
     }
     
     inline Amg::Vector3D SiDetectorElement::globalPosition(const Amg::Vector2D &localPos) const
@@ -674,7 +676,7 @@ namespace InDetDD {
 
     inline Amg::Vector3D SiDetectorElement::globalPositionHit(const Amg::Vector3D &localPos) const
     {
-      return Amg::CLHEPTransformToEigen(transformHit()) * localPos;
+      return transformHit() * localPos;
     }
     
      inline HepGeom::Point3D<double> SiDetectorElement::globalPositionCLHEP(const Amg::Vector2D &localPos) const
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BarrelDescriptor.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BarrelDescriptor.h
index 793007ef80379c52711ff362ba4194a167d32fa2..244ff8ec08b3e208eea72f22f7f442ac2819a8a7 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BarrelDescriptor.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BarrelDescriptor.h
@@ -10,6 +10,7 @@
 
 #ifndef TRT_BarrelDescriptor_h
 #define TRT_BarrelDescriptor_h 1
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "GeoModelKernel/GeoXF.h"
 #include <vector>
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.h
index c240c7ccbad3ea012f9ab3c0f91c5c1c6d55f399..a59add9b67b6c009de8bd3e0e0fdf357f3610a62 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.h
@@ -70,8 +70,8 @@ namespace InDetDD {
 
     // --- GeoModel transformation forwards ----------------------------------------------------- //
 
-    /** Get Default Transform (of module in barrel, layer in endcap) from GeoModel before alignment corrections: CLHEP */
-    const HepGeom::Transform3D& defTransform() const;
+    /** Get Default Transform (of module in barrel, layer in endcap) from GeoModel before alignment corrections */
+    inline const GeoTrf::Transform3D& defTransform() const { return getMaterialGeom()->getDefAbsoluteTransform(); }
     
     /** Default Local -> global transform of the straw (ie before alignment corrections) : CLHEP */
     virtual HepGeom::Transform3D defStrawTransform(int straw) const = 0;
@@ -235,7 +235,6 @@ namespace InDetDD {
     
 }
 
-#include "TRT_BaseElement.icc"
 #endif
 
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.icc b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.icc
deleted file mode 100755
index 828631ffe639d43c00fb32dde2a0a5adf0a6d0bc..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_BaseElement.icc
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-namespace InDetDD {
-	
-inline const HepGeom::Transform3D & TRT_BaseElement::defTransform() const
-{
-  return getMaterialGeom()->getDefAbsoluteTransform();
-}
-
-}
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_Conditions.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_Conditions.h
index 2c1551d6694b4d7ce8905b6d0c28cfd5d1159b30..fd3d53b578a62cc4ac78a90a379aeada54d5e74d 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_Conditions.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_Conditions.h
@@ -11,6 +11,7 @@
 #ifndef INDETREADOUTGEOMETRY_TRT_CONDITIONS_H
 #define INDETREADOUTGEOMETRY_TRT_CONDITIONS_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "CLHEP/Geometry/Transform3D.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_DetectorManager.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_DetectorManager.h
index 30e7231d79b6045bd64148d99147402a2b551e41..b79ad864f284c310d02fb84066b4fb6a2bc18185 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_DetectorManager.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_DetectorManager.h
@@ -16,6 +16,7 @@
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "InDetReadoutGeometry/Version.h"
 #include "InDetReadoutGeometry/TRT_DetElementCollection.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoVPhysVol.h"
 #include "InDetIdentifier/TRT_ID.h"
 #include "GeoModelKernel/GeoXF.h"
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_EndcapDescriptor.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_EndcapDescriptor.h
index e6b9a1c55b66764acccb12a8d100f64d3e7081e7..a6edf251a9cf89fa09ba9497765cb8ee24e98645 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_EndcapDescriptor.h
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/TRT_EndcapDescriptor.h
@@ -10,6 +10,7 @@
 
 #ifndef TRT_EndcapDescriptor_h
 #define TRT_EndcapDescriptor_h 1
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/RCBase.h"
 #include "GeoModelKernel/GeoXF.h"
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
index f1ddcf9bde3fb0a6183d8e38bf8a972ea62b53ad..6c9c34a291af0882c6b4bf8068628de98aee5f20 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
@@ -153,14 +153,14 @@ SiDetectorElement::updateCache() const
   bool firstTimeTmp = m_firstTime;
   m_firstTime = false;
   
-  const HepGeom::Transform3D & geoTransform = transformHit();
+  const GeoTrf::Transform3D & geoTransform = transformHit();
 
   double radialShift = 0.;
   const InDetDD::StripStereoAnnulusDesign * testDesign = dynamic_cast<const InDetDD::StripStereoAnnulusDesign*>(m_design);
   if(testDesign) radialShift = testDesign->localModuleCentreRadius(); 
       
   HepGeom::Point3D<double> centerGeoModel(radialShift, 0., 0.);
-  m_centerCLHEP = geoTransform * centerGeoModel;
+  m_centerCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * centerGeoModel;
   m_center = Amg::Vector3D(m_centerCLHEP[0],m_centerCLHEP[1],m_centerCLHEP[2]);
   
   //
@@ -193,9 +193,9 @@ SiDetectorElement::updateCache() const
     	const HepGeom::Vector3D<double> &geoModelEtaAxis = localAxes[m_hitEta];
     	const HepGeom::Vector3D<double> &geoModelDepthAxis = localAxes[m_hitDepth];
 
-    	HepGeom::Vector3D<double> globalDepthAxis(geoTransform * geoModelDepthAxis);
-    	HepGeom::Vector3D<double> globalPhiAxis(geoTransform * geoModelPhiAxis);
-	HepGeom::Vector3D<double> globalEtaAxis(geoTransform * geoModelEtaAxis);
+    	HepGeom::Vector3D<double> globalDepthAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelDepthAxis);
+    	HepGeom::Vector3D<double> globalPhiAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelPhiAxis);
+	HepGeom::Vector3D<double> globalEtaAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelEtaAxis);
 
 
 
@@ -298,7 +298,7 @@ SiDetectorElement::updateCache() const
   
 
 
-  m_transformCLHEP = geoTransform * recoToHitTransform();
+  m_transformCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * recoToHitTransform();
   //m_transform = m_commonItems->solenoidFrame() * geoTransform * recoToHitTransform();
   m_transform = Amg::CLHEPTransformToEigen(m_transformCLHEP);
   
@@ -315,7 +315,7 @@ SiDetectorElement::updateCache() const
 	  msg(MSG::DEBUG) << "Local frame is left-handed, Swapping depth axis to make it right handed." 
 			  << endmsg;
 	m_depthDirection = !m_depthDirection;
-	m_transformCLHEP = geoTransform * recoToHitTransform();
+	m_transformCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * recoToHitTransform();
 	 m_transform = Amg::CLHEPTransformToEigen(m_transformCLHEP);
 	//m_transform = m_commonItems->solenoidFrame() * geoTransform * recoToHitTransform();
        } else {
@@ -363,11 +363,11 @@ SiDetectorElement::updateCache() const
 }
 
 
-const HepGeom::Transform3D &
+const GeoTrf::Transform3D &
 SiDetectorElement::transformHit() const
 {
   if (m_geoAlignStore) {
-    const HepGeom::Transform3D* ptrXf = m_geoAlignStore->getAbsPosition(getMaterialGeom());
+    const GeoTrf::Transform3D* ptrXf = m_geoAlignStore->getAbsPosition(getMaterialGeom());
     if(ptrXf) return *ptrXf;
   }
   return getMaterialGeom()->getAbsoluteTransform();
@@ -395,10 +395,10 @@ const HepGeom::Transform3D
 SiDetectorElement::defTransformCLHEP() const
 {
   if (m_geoAlignStore) {
-    const HepGeom::Transform3D* ptrXf = m_geoAlignStore->getDefAbsPosition(getMaterialGeom());
-    if(ptrXf) return *ptrXf * recoToHitTransform();
+    const GeoTrf::Transform3D* ptrXf = m_geoAlignStore->getDefAbsPosition(getMaterialGeom());
+    if(ptrXf) return Amg::EigenTransformToCLHEP(*ptrXf) * recoToHitTransform();
   }
-  return getMaterialGeom()->getDefAbsoluteTransform() * recoToHitTransform();
+  return Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()) * recoToHitTransform();
 }  
    
 const Amg::Transform3D 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorManager.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorManager.cxx
index 4b7980893c116430cb99289de7c93f1509eaa4d7..eeeb8201d39f8dbeb4f58d05c1fb067425a1b36e 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorManager.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorManager.cxx
@@ -11,7 +11,7 @@
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelKernel/GeoXF.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "DetDescrConditions/AlignableTransformContainer.h"
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
@@ -85,12 +85,11 @@ namespace InDetDD
         const GeoVFullPhysVol* child = extXF->child();
         if (child && extXF->alignableTransform()) {
             // the definitiv absolut transform is in CLHEP -> do the calculation in CLHEP
-            HepGeom::Transform3D localToGlobalXFCLHEP = Amg::EigenTransformToCLHEP(localToGlobalXF);
-            const HepGeom::Transform3D& transform = child->getDefAbsoluteTransform();
+            const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform();
             // calucluate the corrected delta according to the formula above
-            HepGeom::Transform3D correctedDelta = transform.inverse()*localToGlobalXFCLHEP      // (A*B*C).inverse() * T
-                                                   * Amg::EigenTransformToCLHEP(delta)             // l
-                                                   * localToGlobalXFCLHEP.inverse() * transform;   // T.inverse() * (A*B*C)
+            GeoTrf::Transform3D correctedDelta = transform.inverse()*localToGlobalXF      // (A*B*C).inverse() * T
+	                                         * delta                                  // l
+                                                 * localToGlobalXF.inverse() * transform; // T.inverse() * (A*B*C)
             extXF->alignableTransform()->setDelta(correctedDelta, alignStore);
             return true;
         } else {
@@ -123,8 +122,8 @@ namespace InDetDD
         const GeoVFullPhysVol * child = extXF->child();
         if (child && extXF->alignableTransform()) {
             // do the calculation in CLHEP  
-            const HepGeom::Transform3D& transform = child->getDefAbsoluteTransform();
-            extXF->alignableTransform()->setDelta(transform.inverse() * Amg::EigenTransformToCLHEP(delta) * transform, alignStore);
+            const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform();
+            extXF->alignableTransform()->setDelta(transform.inverse() * delta * transform, alignStore);
             return true;
         } else {
             return false;
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_BarrelElement.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_BarrelElement.cxx
index a476eb4531dbf7705b447adc211bc6f61e168458..e44a52697d0ef947a756c29857e2305552ea19e4 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_BarrelElement.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_BarrelElement.cxx
@@ -15,6 +15,8 @@
 #include "TRT_ConditionsData/ExpandedIdentifier.h"
 #include "TRT_ConditionsData/StrawDxContainer.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 namespace InDetDD {
 
 TRT_BarrelElement::TRT_BarrelElement(const GeoVFullPhysVol *volume, 
@@ -95,7 +97,7 @@ HepGeom::Transform3D TRT_BarrelElement::calculateStrawTransform(int straw) const
     size_t offsetInto = m_descriptor->getStrawTransformOffset();
     double zPos = -m_descriptor->strawZPos();
     double zAng =  m_code.isPosZ() ? M_PI : 0;
-    return  getMaterialGeom()->getAbsoluteTransform()*((*f)(straw+offsetInto))
+    return  Amg::EigenTransformToCLHEP(getMaterialGeom()->getAbsoluteTransform()*((*f)(straw+offsetInto)))
       * HepGeom::RotateY3D(zAng)*HepGeom::TranslateZ3D(zPos)
       * calculateLocalStrawTransform(straw);
     ////return  conditions()->solenoidFrame() 
@@ -152,7 +154,8 @@ HepGeom::Transform3D TRT_BarrelElement::defStrawTransform(int straw) const
     size_t offsetInto = m_descriptor->getStrawTransformOffset();
     double zPos = -m_descriptor->strawZPos();
     double zAng =  m_code.isPosZ() ? M_PI : 0;
-    return getMaterialGeom()->getDefAbsoluteTransform()*((*f)(straw+offsetInto))* HepGeom::RotateY3D(zAng)*HepGeom::TranslateZ3D(zPos);
+    return Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()*((*f)(straw+offsetInto))) 
+      * HepGeom::RotateY3D(zAng)*HepGeom::TranslateZ3D(zPos);
   } else {
     std::cout << "calculateStrawTransform:  f is 0 !!!!" << std::endl;
     return HepGeom::Transform3D();
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_DetectorManager.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_DetectorManager.cxx
index 643824f4b3518b6f46ff8e342e9618b267822ca4..d432e4298ce1e5c3360ca493363f6de3487377ac 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_DetectorManager.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_DetectorManager.cxx
@@ -532,13 +532,13 @@ namespace InDetDD {
             if (!child) {
                 msg(MSG::ERROR) << "global frame specified, but child == 0" << endmsg;
             } else {
-                const HepGeom::Transform3D & childXF = child->getDefAbsoluteTransform();
-                extXF->alignableTransform()->setDelta(childXF.inverse() * Amg::EigenTransformToCLHEP(delta) * childXF);
+                const GeoTrf::Transform3D & childXF = child->getDefAbsoluteTransform();
+                extXF->alignableTransform()->setDelta(childXF.inverse() * delta * childXF);
             }
 
         } else if (frame == InDetDD::local) { // Local
             // if its a local frame then no transform necessary. We set it directly.
-            extXF->alignableTransform()->setDelta(Amg::EigenTransformToCLHEP(delta));
+            extXF->alignableTransform()->setDelta(delta);
 
         } else { // Other frame
             // if child or frame is zero it will have been set to local or global above
@@ -547,9 +547,9 @@ namespace InDetDD {
               ATH_MSG_ERROR("Child can't be null if frame is 'other'");
               return false;
             } else {
-	            const HepGeom::Transform3D & xfChild = child->getDefAbsoluteTransform();
-	            const HepGeom::Transform3D & xfFrame = frameVol->getDefAbsoluteTransform();
-	            extXF->alignableTransform()->setDelta(xfChild.inverse() * xfFrame * Amg::EigenTransformToCLHEP(delta) * xfFrame.inverse() * xfChild);
+	            const GeoTrf::Transform3D & xfChild = child->getDefAbsoluteTransform();
+	            const GeoTrf::Transform3D & xfFrame = frameVol->getDefAbsoluteTransform();
+	            extXF->alignableTransform()->setDelta(xfChild.inverse() * xfFrame * delta * xfFrame.inverse() * xfChild);
             }
         }
 
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_EndcapElement.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_EndcapElement.cxx
index ce9c0fa38f9bfae8d9ebf0480d0b62b2bc5f52b2..c5637d308b56a475d283d09d610756780d9c660d 100755
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_EndcapElement.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/TRT_EndcapElement.cxx
@@ -12,6 +12,7 @@
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "CLHEP/Geometry/Transform3D.h"
 
 #include "TrkSurfaces/DiscBounds.h"
@@ -97,7 +98,8 @@ namespace InDetDD {
 
             size_t offsetInto = m_descriptor->getStrawTransformOffset();
 
-            return getMaterialGeom()->getAbsoluteTransform()*((*f)(istraw+offsetInto)) * calculateLocalStrawTransform(straw);
+            return Amg::EigenTransformToCLHEP(getMaterialGeom()->getAbsoluteTransform()*((*f)(istraw+offsetInto))) 
+	      * calculateLocalStrawTransform(straw);
             ////return conditions()->solenoidFrame() 
             ////  * getMaterialGeom()->getAbsoluteTransform()*((*f)(istraw+offsetInto));
 
@@ -108,7 +110,9 @@ namespace InDetDD {
 
             double phi = m_descriptor->startPhi() +  m_descriptor->strawPitch() * straw;
             double r = m_descriptor->innerRadius() + 0.5 * m_descriptor->strawLength() ;
-            CLHEP::Hep3Vector pos(r*cos(phi), r*sin(phi), (getMaterialGeom()->getAbsoluteTransform()*HepGeom::Point3D<double>()).z());
+            CLHEP::Hep3Vector pos(r*cos(phi)
+				  , r*sin(phi)
+				  , (Amg::EigenTransformToCLHEP(getMaterialGeom()->getAbsoluteTransform())*HepGeom::Point3D<double>()).z());
             CLHEP::HepRotation rot;
             // Axis (in local (0,0,1)) points towards beam axis.
             rot.rotateY(-0.5*M_PI); // Make it point along -ve X.
@@ -175,13 +179,15 @@ namespace InDetDD {
             int istraw = m_code.isPosZ() ? straw : m_descriptor->nStraws()-1 - straw;
 
             size_t offsetInto = m_descriptor->getStrawTransformOffset();
-            return getMaterialGeom()->getDefAbsoluteTransform()*((*f)(istraw+offsetInto));
+            return Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()*((*f)(istraw+offsetInto)));
 
         } else {
 
             double phi = m_descriptor->startPhi() +  m_descriptor->strawPitch() * straw;
             double r = m_descriptor->innerRadius() + 0.5 * m_descriptor->strawLength() ;
-            CLHEP::Hep3Vector pos(r*cos(phi), r*sin(phi), (getMaterialGeom()->getDefAbsoluteTransform()*HepGeom::Point3D<double>()).z());
+            CLHEP::Hep3Vector pos(r*cos(phi)
+				  , r*sin(phi)
+				  , (Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform())*HepGeom::Point3D<double>()).z());
             CLHEP::HepRotation rot;
             rot.rotateY(-0.5*M_PI); // Make it point along -ve X.
             rot.rotateZ(phi);
@@ -228,9 +234,9 @@ namespace InDetDD {
 
         Amg::Transform3D * transform = 0;
         if  (m_code.isPosZ())
-            transform = new Amg::Transform3D(Amg::CLHEPTransformToEigen( (getMaterialGeom()->getAbsoluteTransform() * HepGeom::RotateZ3D(phiCenter))));
+	  transform = new Amg::Transform3D((getMaterialGeom()->getAbsoluteTransform() * GeoTrf::RotateZ3D(phiCenter)));
         else
-            transform = new Amg::Transform3D(Amg::CLHEPTransformToEigen( (getMaterialGeom()->getAbsoluteTransform() * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateZ3D(phiCenter))));
+	  transform = new Amg::Transform3D((getMaterialGeom()->getAbsoluteTransform() * GeoTrf::RotateY3D(180*CLHEP::deg) * GeoTrf::RotateZ3D(phiCenter)));
 
         // create the igredients and the cache
         Trk::DiscBounds* bounds = new Trk::DiscBounds(rMin, rMax, phiHalfWidth);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/CMakeLists.txt
index 1ab76249c6126c6fccc5a044ba651b853ae63694..cbc87c5da2af375289052924f127ed52085d4a5c 100644
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/CMakeLists.txt
@@ -10,7 +10,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
+                          DetectorDescription/GeoPrimitives
                           DetectorDescription/GeoModel/GeoModelUtilities
                           GaudiKernel
                           InnerDetector/InDetDetDescr/InDetGeoModelUtils
@@ -23,15 +23,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( InDetServMatGeoModel
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel InDetGeoModelUtils SGTools StoreGateLib SGtests )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AthenaKernel GeoModelUtilities GaudiKernel InDetGeoModelUtils SGTools StoreGateLib SGtests )
 
 # Install files from the package:
 atlas_install_headers( InDetServMatGeoModel )
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactory.cxx
index 7866fd46a53bdeeba484c8ee2c7d1c0197fdcd5b..98dfcadc27160a3671e96499e91d21c4835b3ffc 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactory.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/EndPlateFactory.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -46,29 +48,29 @@ void EndPlateFactory::create(GeoPhysVol *mother)
 //----------------------------------------------------------------------------------
 //    std::string matName =  mat[(int) (*pbfi)[ii]->getFloat("MAT")];
 //    const GeoMaterial* cylMat = materialManager()->getMaterial(matName);
-//    double rmin = (*pbfi)[ii]->getFloat("RIN")*CLHEP::cm;
+//    double rmin = (*pbfi)[ii]->getFloat("RIN")*GeoModelKernelUnits::cm;
 //----------------------------------------------------------------------------------
-    double safety = 0.01*CLHEP::mm;
-    double maxRofEP = 1075.0*CLHEP::mm - safety; // Interfere with TRT PatchPanel1
-    double RibConnection = 550.0*CLHEP::mm;
+    double safety = 0.01*GeoModelKernelUnits::mm;
+    double maxRofEP = 1075.0*GeoModelKernelUnits::mm - safety; // Interfere with TRT PatchPanel1
+    double RibConnection = 550.0*GeoModelKernelUnits::mm;
 
-    maxRofEP      = (*shell)[0]->getDouble("EPMAXR")*CLHEP::mm - safety; 
-    RibConnection = (*ribs)[0]->getDouble("RIBCONNECTION")*CLHEP::mm; 
+    maxRofEP      = (*shell)[0]->getDouble("EPMAXR")*GeoModelKernelUnits::mm - safety; 
+    RibConnection = (*ribs)[0]->getDouble("RIBCONNECTION")*GeoModelKernelUnits::mm; 
 //
 //     Internal shell. Default (initial) values
 //
-    double rminInt = 425.*CLHEP::mm;
-    double rmaxInt = 1040.*CLHEP::mm;
-    double thickShell = 3.*CLHEP::mm;
-    double thick2     = 10.*CLHEP::mm;
-    double zposEP     = 3370.*CLHEP::mm;
-    double zleng      = 42.*CLHEP::mm;
-    rminInt    = (*shell)[0]->getDouble("RMININT")*CLHEP::mm; 
-    rmaxInt    = (*shell)[0]->getDouble("RMAXINT")*CLHEP::mm;
-    thickShell = (*shell)[0]->getDouble("THICKSHELL")*CLHEP::mm;
-    thick2     = (*shell)[0]->getDouble("THICKADD")*CLHEP::mm;
-    zposEP     = (*shell)[0]->getDouble("ZSTART")*CLHEP::mm;
-    zleng      = (*shell)[0]->getDouble("ZSHIFT")*CLHEP::mm;
+    double rminInt = 425.*GeoModelKernelUnits::mm;
+    double rmaxInt = 1040.*GeoModelKernelUnits::mm;
+    double thickShell = 3.*GeoModelKernelUnits::mm;
+    double thick2     = 10.*GeoModelKernelUnits::mm;
+    double zposEP     = 3370.*GeoModelKernelUnits::mm;
+    double zleng      = 42.*GeoModelKernelUnits::mm;
+    rminInt    = (*shell)[0]->getDouble("RMININT")*GeoModelKernelUnits::mm; 
+    rmaxInt    = (*shell)[0]->getDouble("RMAXINT")*GeoModelKernelUnits::mm;
+    thickShell = (*shell)[0]->getDouble("THICKSHELL")*GeoModelKernelUnits::mm;
+    thick2     = (*shell)[0]->getDouble("THICKADD")*GeoModelKernelUnits::mm;
+    zposEP     = (*shell)[0]->getDouble("ZSTART")*GeoModelKernelUnits::mm;
+    zleng      = (*shell)[0]->getDouble("ZSHIFT")*GeoModelKernelUnits::mm;
  
  
     GeoPcon* shellInt = new GeoPcon(0.,2*M_PI);
@@ -86,10 +88,10 @@ void EndPlateFactory::create(GeoPhysVol *mother)
     const GeoLogVol* shellLogInt = new GeoLogVol("EPShellInt",shellInt,shellMat);
     GeoVPhysVol* shellPhysInt = new GeoPhysVol(shellLogInt);
     
-    CLHEP::Hep3Vector servpos1(0.,0., zposEP);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zposEP);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0., zposEP);
+    GeoTrf::Vector3D servpos2(0.,0.,-zposEP);
+    GeoTransform* xform1 = new GeoTransform(servpos1);
+    GeoTransform* xform2 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,M_PI,0),servpos2));
     mother->add(xform1);
     mother->add(shellPhysInt);
     mother->add(xform2);
@@ -99,22 +101,22 @@ void EndPlateFactory::create(GeoPhysVol *mother)
 //
 //     External shell (default/initial values)
 
-    double zgap     = 50.*CLHEP::mm;
-    double rminExt  = 250.*CLHEP::mm;
+    double zgap     = 50.*GeoModelKernelUnits::mm;
+    double rminExt  = 250.*GeoModelKernelUnits::mm;
     double rmaxExt  = maxRofEP;
     
-    zgap    = (*shell)[0]->getDouble("ZGAP")*CLHEP::mm;
-    rminExt = (*shell)[0]->getDouble("RMINEXT")*CLHEP::mm;
+    zgap    = (*shell)[0]->getDouble("ZGAP")*GeoModelKernelUnits::mm;
+    rminExt = (*shell)[0]->getDouble("RMINEXT")*GeoModelKernelUnits::mm;
 
 
     const GeoTube*   shellExt    = new GeoTube(rminExt,rmaxExt,thickShell/2.);
     const GeoLogVol* shellLogExt = new GeoLogVol("EPShellExt",shellExt,shellMat);
     GeoVPhysVol* shellPhysExt = new GeoPhysVol(shellLogExt);
 
-    CLHEP::Hep3Vector servpos3(0.,0., zposEP+zleng+thickShell+zgap+thickShell/2.);
-    CLHEP::Hep3Vector servpos4(0.,0.,-zposEP-zleng-thickShell-zgap-thickShell/2.);
-    GeoTransform *xform3 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos3));
-    GeoTransform *xform4 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos4));
+    GeoTrf::Translate3D servpos3(0.,0., zposEP+zleng+thickShell+zgap+thickShell/2.);
+    GeoTrf::Vector3D servpos4(0.,0.,-zposEP-zleng-thickShell-zgap-thickShell/2.);
+    GeoTransform *xform3 = new GeoTransform(servpos3);
+    GeoTransform* xform4 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,M_PI,0),servpos4));
 
     mother->add(xform3);
     mother->add(shellPhysExt);
@@ -125,19 +127,19 @@ void EndPlateFactory::create(GeoPhysVol *mother)
 //
 //     Insert - default (initial) values
 
-    double zthick  = 16.0*CLHEP::mm;
-    double zinsert = 3018.*CLHEP::mm-zthick;
-    double rminins = 252.*CLHEP::mm;
-    double rmaxins = 435.*CLHEP::mm;
-    double rthick  = 5.*CLHEP::mm;
-    double zlengi   = 410.*CLHEP::mm;
+    double zthick  = 16.0*GeoModelKernelUnits::mm;
+    double zinsert = 3018.*GeoModelKernelUnits::mm-zthick;
+    double rminins = 252.*GeoModelKernelUnits::mm;
+    double rmaxins = 435.*GeoModelKernelUnits::mm;
+    double rthick  = 5.*GeoModelKernelUnits::mm;
+    double zlengi   = 410.*GeoModelKernelUnits::mm;
 
-    zthick  = (*insert)[0]->getDouble("ZTHICK")*CLHEP::mm;
-    zinsert = (*insert)[0]->getDouble("ZINSERT")*CLHEP::mm;
-    rminins = (*insert)[0]->getDouble("RMININS")*CLHEP::mm;
-    rmaxins = (*insert)[0]->getDouble("RMAXINS")*CLHEP::mm;
-    rthick  = (*insert)[0]->getDouble("RTHICK")*CLHEP::mm;
-    zlengi  = (*insert)[0]->getDouble("ZLENGINS")*CLHEP::mm;
+    zthick  = (*insert)[0]->getDouble("ZTHICK")*GeoModelKernelUnits::mm;
+    zinsert = (*insert)[0]->getDouble("ZINSERT")*GeoModelKernelUnits::mm;
+    rminins = (*insert)[0]->getDouble("RMININS")*GeoModelKernelUnits::mm;
+    rmaxins = (*insert)[0]->getDouble("RMAXINS")*GeoModelKernelUnits::mm;
+    rthick  = (*insert)[0]->getDouble("RTHICK")*GeoModelKernelUnits::mm;
+    zlengi  = (*insert)[0]->getDouble("ZLENGINS")*GeoModelKernelUnits::mm;
 
     GeoPcon* Insert = new GeoPcon(0.,2*M_PI);
     Insert->addPlane(0.              , rminins, rmaxins+rthick);
@@ -151,10 +153,10 @@ void EndPlateFactory::create(GeoPhysVol *mother)
     const GeoLogVol* InsertLog = new GeoLogVol("EPInsert",Insert,insertMat);
     GeoVPhysVol* InsertPhys = new GeoPhysVol(InsertLog);
 
-    CLHEP::Hep3Vector servpos5(0.,0., zinsert);
-    CLHEP::Hep3Vector servpos6(0.,0.,-zinsert);
-    GeoTransform *xform5 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos5));
-    GeoTransform *xform6 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos6));
+    GeoTrf::Translate3D servpos5(0.,0., zinsert);
+    GeoTrf::Vector3D servpos6(0.,0.,-zinsert);
+    GeoTransform *xform5 = new GeoTransform(servpos5);
+    GeoTransform* xform6 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,M_PI,0),servpos6));
 
     mother->add(xform5);
     mother->add(InsertPhys);
@@ -167,15 +169,15 @@ void EndPlateFactory::create(GeoPhysVol *mother)
 //     Short ribs - default (initial) values
 //     Initial position is along X axis then move and rotate
 //
-    double ribY   = 12.0*CLHEP::mm;
+    double ribY   = 12.0*GeoModelKernelUnits::mm;
     double ribZ   = zgap - safety;
-    double ribX   = 380.0*CLHEP::mm;
-    double posX   = 550.0*CLHEP::mm+ribX/2.;
+    double ribX   = 380.0*GeoModelKernelUnits::mm;
+    double posX   = 550.0*GeoModelKernelUnits::mm+ribX/2.;
 
-    ribY   = (*ribs)[0]->getDouble("SHORTWID")*CLHEP::mm;
+    ribY   = (*ribs)[0]->getDouble("SHORTWID")*GeoModelKernelUnits::mm;
     ribZ   = zgap - safety;
-    ribX   = (*ribs)[0]->getDouble("SHORTLENG")*CLHEP::mm;
-    posX   = (*ribs)[0]->getDouble("SHORTRSTART")*CLHEP::mm + ribX/2.;
+    ribX   = (*ribs)[0]->getDouble("SHORTLENG")*GeoModelKernelUnits::mm;
+    posX   = (*ribs)[0]->getDouble("SHORTRSTART")*GeoModelKernelUnits::mm + ribX/2.;
 
     const GeoBox* ribShort = new GeoBox(ribX/2., ribY/2., ribZ/2.);
 
@@ -192,12 +194,12 @@ void EndPlateFactory::create(GeoPhysVol *mother)
     for (int ip=1; ip<12; ip++){
       if( ip==3 || ip==6 || ip==9) continue;
       double angl= ip*M_PI/6.;
-      CLHEP::Hep3Vector ribpos_pos( posX*cos(angl), posX*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg( posX*cos(angl), posX*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos));
+      GeoTrf::Vector3D ribpos_pos( posX*cos(angl), posX*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg( posX*cos(angl), posX*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_pos));
       mother->add(xrib);
       mother->add(ribShortPhys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_neg));
       mother->add(xrib);
       mother->add(ribShortPhys);
     }
@@ -205,22 +207,22 @@ void EndPlateFactory::create(GeoPhysVol *mother)
 //---------------------------------------------------------------------------------
 //     Long ribs (initial position is along X axis then move and rotate)
 //
-    double ribY1   = 20.0*CLHEP::mm;
+    double ribY1   = 20.0*GeoModelKernelUnits::mm;
     double ribZ1   = zgap - safety;
-    double ribX1   = RibConnection-250.*CLHEP::mm;
-    double posX1   = 250.*CLHEP::mm+ribX1/2.;
+    double ribX1   = RibConnection-250.*GeoModelKernelUnits::mm;
+    double posX1   = 250.*GeoModelKernelUnits::mm+ribX1/2.;
 
-    double ribY2   = 30.0*CLHEP::mm;
+    double ribY2   = 30.0*GeoModelKernelUnits::mm;
     double ribZ2   = zgap - safety;
     double ribX2   = maxRofEP - RibConnection;
     double posX2   = RibConnection+ribX2/2.;
 
-    ribY1   = (*ribs)[0]->getDouble("LONGWID1")*CLHEP::mm;
+    ribY1   = (*ribs)[0]->getDouble("LONGWID1")*GeoModelKernelUnits::mm;
     ribZ1   = zgap - safety;
-    ribX1   = RibConnection - (*ribs)[0]->getDouble("LONGLENG1")*CLHEP::mm;  // LONGLENG1 is a RMIN of ribs
-    posX1   = (*ribs)[0]->getDouble("LONGLENG1")*CLHEP::mm + ribX1/2.;       // It's determined by Pixel volume -> so 250.0!!!
+    ribX1   = RibConnection - (*ribs)[0]->getDouble("LONGLENG1")*GeoModelKernelUnits::mm;  // LONGLENG1 is a RMIN of ribs
+    posX1   = (*ribs)[0]->getDouble("LONGLENG1")*GeoModelKernelUnits::mm + ribX1/2.;       // It's determined by Pixel volume -> so 250.0!!!
  
-    ribY2   = (*ribs)[0]->getDouble("LONGWID2")*CLHEP::mm;
+    ribY2   = (*ribs)[0]->getDouble("LONGWID2")*GeoModelKernelUnits::mm;
     ribZ2   = zgap - safety;
     ribX2   = maxRofEP - RibConnection;
     posX2   = RibConnection+ribX2/2.;
@@ -239,21 +241,21 @@ void EndPlateFactory::create(GeoPhysVol *mother)
     for (int ip=0; ip<4; ip++){
       double angl= ip*M_PI/2.;
 // 1st part
-      CLHEP::Hep3Vector ribpos_pos1( posX1*cos(angl), posX1*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg1( posX1*cos(angl), posX1*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos1));
+      GeoTrf::Vector3D ribpos_pos1( posX1*cos(angl), posX1*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg1( posX1*cos(angl), posX1*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_pos1));      
       mother->add(xrib);
       mother->add(ribLong1Phys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg1));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_neg1));      
       mother->add(xrib);
       mother->add(ribLong1Phys);
 // 2nd part
-      CLHEP::Hep3Vector ribpos_pos2( posX2*cos(angl), posX2*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg2( posX2*cos(angl), posX2*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos2));
+      GeoTrf::Vector3D ribpos_pos2( posX2*cos(angl), posX2*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg2( posX2*cos(angl), posX2*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_pos2));      
       mother->add(xrib);
       mother->add(ribLong2Phys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg2));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0,0),ribpos_neg2));      
       mother->add(xrib);
       mother->add(ribLong2Phys);
     }
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactoryFS.cxx
index 7b97e625dfcd27f0b464524ab399d9db0c901e3a..508d487c5d1776fba304551d1f0969eac3871311 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/EndPlateFactoryFS.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/EndPlateFactoryFS.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -62,29 +64,29 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //----------------------------------------------------------------------------------
 //    std::string matName =  mat[(int) (*pbfi)[ii]->getFloat("MAT")];
 //    const GeoMaterial* cylMat = materialManager->getMaterial(matName);
-//    double rmin = (*pbfi)[ii]->getFloat("RIN")*CLHEP::cm;
+//    double rmin = (*pbfi)[ii]->getFloat("RIN")*GeoModelKernelUnits::cm;
 //----------------------------------------------------------------------------------
-    double safety = 0.01*CLHEP::mm;
-    double maxRofEP = 1075.0*CLHEP::mm - safety; // Interfere with TRT PatchPanel1
-    double RibConnection = 550.0*CLHEP::mm;
+    double safety = 0.01*GeoModelKernelUnits::mm;
+    double maxRofEP = 1075.0*GeoModelKernelUnits::mm - safety; // Interfere with TRT PatchPanel1
+    double RibConnection = 550.0*GeoModelKernelUnits::mm;
 
-    maxRofEP      = (*shell)[0]->getDouble("EPMAXR")*CLHEP::mm - safety; 
-    RibConnection = (*ribs)[0]->getDouble("RIBCONNECTION")*CLHEP::mm; 
+    maxRofEP      = (*shell)[0]->getDouble("EPMAXR")*GeoModelKernelUnits::mm - safety; 
+    RibConnection = (*ribs)[0]->getDouble("RIBCONNECTION")*GeoModelKernelUnits::mm; 
 //
 //     Internal shell. Default (initial) values
 //
-    double rminInt = 425.*CLHEP::mm;
-    double rmaxInt = 1040.*CLHEP::mm;
-    double thickShell = 3.*CLHEP::mm;
-    double thick2     = 10.*CLHEP::mm;
-    double zposEP     = 3370.*CLHEP::mm;
-    double zleng      = 42.*CLHEP::mm;
-    rminInt    = (*shell)[0]->getDouble("RMININT")*CLHEP::mm; 
-    rmaxInt    = (*shell)[0]->getDouble("RMAXINT")*CLHEP::mm;
-    thickShell = (*shell)[0]->getDouble("THICKSHELL")*CLHEP::mm;
-    thick2     = (*shell)[0]->getDouble("THICKADD")*CLHEP::mm;
-    zposEP     = (*shell)[0]->getDouble("ZSTART")*CLHEP::mm;
-    zleng      = (*shell)[0]->getDouble("ZSHIFT")*CLHEP::mm;
+    double rminInt = 425.*GeoModelKernelUnits::mm;
+    double rmaxInt = 1040.*GeoModelKernelUnits::mm;
+    double thickShell = 3.*GeoModelKernelUnits::mm;
+    double thick2     = 10.*GeoModelKernelUnits::mm;
+    double zposEP     = 3370.*GeoModelKernelUnits::mm;
+    double zleng      = 42.*GeoModelKernelUnits::mm;
+    rminInt    = (*shell)[0]->getDouble("RMININT")*GeoModelKernelUnits::mm; 
+    rmaxInt    = (*shell)[0]->getDouble("RMAXINT")*GeoModelKernelUnits::mm;
+    thickShell = (*shell)[0]->getDouble("THICKSHELL")*GeoModelKernelUnits::mm;
+    thick2     = (*shell)[0]->getDouble("THICKADD")*GeoModelKernelUnits::mm;
+    zposEP     = (*shell)[0]->getDouble("ZSTART")*GeoModelKernelUnits::mm;
+    zleng      = (*shell)[0]->getDouble("ZSHIFT")*GeoModelKernelUnits::mm;
  
     GeoTube* shellInt1 = new GeoTube(rminInt,rminInt+thick2,zleng*0.5);
     GeoTube* shellInt2 = new GeoTube(rminInt,rmaxInt,thickShell*0.5);
@@ -96,15 +98,15 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
     const GeoLogVol* shellLogInt2 = new GeoLogVol("EPShellInt",shellInt2,shellMat);
     GeoVPhysVol* shellPhysInt2 = new GeoPhysVol(shellLogInt2);
 
-    CLHEP::Hep3Vector servpos11(0.,0., zposEP+zleng*0.5);
-    CLHEP::Hep3Vector servpos12(0.,0., zposEP+zleng+thickShell*0.5);
-    CLHEP::Hep3Vector servpos21(0.,0., -zposEP-zleng*0.5);
-    CLHEP::Hep3Vector servpos22(0.,0., -zposEP-zleng-thickShell*0.5);
+    GeoTrf::Translate3D servpos11(0.,0., zposEP+zleng*0.5);
+    GeoTrf::Translate3D servpos12(0.,0., zposEP+zleng+thickShell*0.5);
+    GeoTrf::Vector3D servpos21(0.,0., -zposEP-zleng*0.5);
+    GeoTrf::Vector3D servpos22(0.,0., -zposEP-zleng-thickShell*0.5);
 
-    GeoTransform *xform11 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),servpos11));
-    GeoTransform *xform12 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),servpos12));
-    GeoTransform *xform21 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.,M_PI,0.),servpos21));
-    GeoTransform *xform22 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.,M_PI,0.),servpos22));
+    GeoTransform *xform11 = new GeoTransform(servpos11);
+    GeoTransform *xform12 = new GeoTransform(servpos12);
+    GeoTransform *xform21 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos21));
+    GeoTransform *xform22 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos22));
     motherP->add(xform11);
     motherP->add(shellPhysInt1);
     motherP->add(xform12);
@@ -118,22 +120,22 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //
 //     External shell (default/initial values)
 
-    double zgap     = 50.*CLHEP::mm;
-    double rminExt  = 250.*CLHEP::mm;
+    double zgap     = 50.*GeoModelKernelUnits::mm;
+    double rminExt  = 250.*GeoModelKernelUnits::mm;
     double rmaxExt  = maxRofEP;
     
-    zgap    = (*shell)[0]->getDouble("ZGAP")*CLHEP::mm;
-    rminExt = (*shell)[0]->getDouble("RMINEXT")*CLHEP::mm;
+    zgap    = (*shell)[0]->getDouble("ZGAP")*GeoModelKernelUnits::mm;
+    rminExt = (*shell)[0]->getDouble("RMINEXT")*GeoModelKernelUnits::mm;
 
 
     const GeoTube*   shellExt    = new GeoTube(rminExt,rmaxExt,thickShell/2.);
     const GeoLogVol* shellLogExt = new GeoLogVol("EPShellExt",shellExt,shellMat);
     GeoVPhysVol* shellPhysExt = new GeoPhysVol(shellLogExt);
 
-    CLHEP::Hep3Vector servpos3(0.,0., zposEP+zleng+thickShell+zgap+thickShell/2.);
-    CLHEP::Hep3Vector servpos4(0.,0.,-zposEP-zleng-thickShell-zgap-thickShell/2.);
-    GeoTransform *xform3 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos3));
-    GeoTransform *xform4 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos4));
+    GeoTrf::Translate3D servpos3(0.,0., zposEP+zleng+thickShell+zgap+thickShell/2.);
+    GeoTrf::Vector3D servpos4(0.,0.,-zposEP-zleng-thickShell-zgap-thickShell/2.);
+    GeoTransform *xform3 = new GeoTransform(servpos3);
+    GeoTransform *xform4 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos4));
 
     motherP->add(xform3);
     motherP->add(shellPhysExt);
@@ -144,19 +146,19 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //
 //     Insert - default (initial) values
 
-    double zthick  = 16.0*CLHEP::mm;
-    double zinsert = 3018.*CLHEP::mm-zthick;
-    double rminins = 252.*CLHEP::mm;
-    double rmaxins = 435.*CLHEP::mm;
-    double rthick  = 5.*CLHEP::mm;
-    double zlengi   = 410.*CLHEP::mm;
+    double zthick  = 16.0*GeoModelKernelUnits::mm;
+    double zinsert = 3018.*GeoModelKernelUnits::mm-zthick;
+    double rminins = 252.*GeoModelKernelUnits::mm;
+    double rmaxins = 435.*GeoModelKernelUnits::mm;
+    double rthick  = 5.*GeoModelKernelUnits::mm;
+    double zlengi   = 410.*GeoModelKernelUnits::mm;
 
-    zthick  = (*insert)[0]->getDouble("ZTHICK")*CLHEP::mm;
-    zinsert = (*insert)[0]->getDouble("ZINSERT")*CLHEP::mm;
-    rminins = (*insert)[0]->getDouble("RMININS")*CLHEP::mm;
-    rmaxins = (*insert)[0]->getDouble("RMAXINS")*CLHEP::mm;
-    rthick  = (*insert)[0]->getDouble("RTHICK")*CLHEP::mm;
-    zlengi  = (*insert)[0]->getDouble("ZLENGINS")*CLHEP::mm;
+    zthick  = (*insert)[0]->getDouble("ZTHICK")*GeoModelKernelUnits::mm;
+    zinsert = (*insert)[0]->getDouble("ZINSERT")*GeoModelKernelUnits::mm;
+    rminins = (*insert)[0]->getDouble("RMININS")*GeoModelKernelUnits::mm;
+    rmaxins = (*insert)[0]->getDouble("RMAXINS")*GeoModelKernelUnits::mm;
+    rthick  = (*insert)[0]->getDouble("RTHICK")*GeoModelKernelUnits::mm;
+    zlengi  = (*insert)[0]->getDouble("ZLENGINS")*GeoModelKernelUnits::mm;
 
     GeoTube* Insert1 = new GeoTube(rminins,rmaxins+rthick,zthick*0.5);
     GeoTube* Insert2 = new GeoTube(rmaxins,rmaxins+rthick,(zlengi-zthick)*0.5);
@@ -168,14 +170,14 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
     const GeoLogVol* InsertLog2 = new GeoLogVol("EPInsert",Insert2,insertMat);
     GeoVPhysVol* InsertPhys2 = new GeoPhysVol(InsertLog2);
 
-    CLHEP::Hep3Vector servpos51(0.,0., zinsert+zthick*0.5);
-    CLHEP::Hep3Vector servpos52(0.,0., zinsert+(zthick+zlengi)*0.5);
-    CLHEP::Hep3Vector servpos61(0.,0., -zinsert-zthick*0.5);
-    CLHEP::Hep3Vector servpos62(0.,0., -zinsert-(zthick+zlengi)*0.5);
-    GeoTransform *xform51 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),servpos51));
-    GeoTransform *xform52 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),servpos52));
-    GeoTransform *xform61 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.,M_PI,0.),servpos61));
-    GeoTransform *xform62 = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.,M_PI,0.),servpos62));
+    GeoTrf::Translate3D servpos51(0.,0., zinsert+zthick*0.5);
+    GeoTrf::Translate3D servpos52(0.,0., zinsert+(zthick+zlengi)*0.5);
+    GeoTrf::Vector3D servpos61(0.,0., -zinsert-zthick*0.5);
+    GeoTrf::Vector3D servpos62(0.,0., -zinsert-(zthick+zlengi)*0.5);
+    GeoTransform *xform51 = new GeoTransform(servpos51);
+    GeoTransform *xform52 = new GeoTransform(servpos52);
+    GeoTransform *xform61 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos61));
+    GeoTransform *xform62 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos62));
 
     motherP->add(xform51);
     motherP->add(InsertPhys1);
@@ -192,15 +194,15 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //     Short ribs - default (initial) values
 //     Initial position is along X axis then move and rotate
 //
-    double ribY   = 12.0*CLHEP::mm;
+    double ribY   = 12.0*GeoModelKernelUnits::mm;
     double ribZ   = zgap - safety;
-    double ribX   = 380.0*CLHEP::mm;
-    double posX   = 550.0*CLHEP::mm+ribX/2.;
+    double ribX   = 380.0*GeoModelKernelUnits::mm;
+    double posX   = 550.0*GeoModelKernelUnits::mm+ribX/2.;
 
-    ribY   = (*ribs)[0]->getDouble("SHORTWID")*CLHEP::mm;
+    ribY   = (*ribs)[0]->getDouble("SHORTWID")*GeoModelKernelUnits::mm;
     ribZ   = zgap - safety;
-    ribX   = (*ribs)[0]->getDouble("SHORTLENG")*CLHEP::mm;
-    posX   = (*ribs)[0]->getDouble("SHORTRSTART")*CLHEP::mm + ribX/2.;
+    ribX   = (*ribs)[0]->getDouble("SHORTLENG")*GeoModelKernelUnits::mm;
+    posX   = (*ribs)[0]->getDouble("SHORTRSTART")*GeoModelKernelUnits::mm + ribX/2.;
 
     const GeoBox* ribShort = new GeoBox(ribX/2., ribY/2., ribZ/2.);
 
@@ -217,12 +219,12 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
     for (int ip=1; ip<12; ip++){
       if( ip==3 || ip==6 || ip==9) continue;
       double angl= ip*M_PI/6.;
-      CLHEP::Hep3Vector ribpos_pos( posX*cos(angl), posX*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg( posX*cos(angl), posX*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos));
+      GeoTrf::Vector3D ribpos_pos( posX*cos(angl), posX*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg( posX*cos(angl), posX*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_pos));
       motherP->add(xrib);
       motherP->add(ribShortPhys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_neg));
       motherM->add(xrib);
       motherM->add(ribShortPhys);
     }
@@ -230,22 +232,22 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //---------------------------------------------------------------------------------
 //     Long ribs (initial position is along X axis then move and rotate)
 //
-    double ribY1   = 20.0*CLHEP::mm;
+    double ribY1   = 20.0*GeoModelKernelUnits::mm;
     double ribZ1   = zgap - safety;
-    double ribX1   = RibConnection-250.*CLHEP::mm;
-    double posX1   = 250.*CLHEP::mm+ribX1/2.;
+    double ribX1   = RibConnection-250.*GeoModelKernelUnits::mm;
+    double posX1   = 250.*GeoModelKernelUnits::mm+ribX1/2.;
 
-    double ribY2   = 30.0*CLHEP::mm;
+    double ribY2   = 30.0*GeoModelKernelUnits::mm;
     double ribZ2   = zgap - safety;
     double ribX2   = maxRofEP - RibConnection;
     double posX2   = RibConnection+ribX2/2.;
 
-    ribY1   = (*ribs)[0]->getDouble("LONGWID1")*CLHEP::mm;
+    ribY1   = (*ribs)[0]->getDouble("LONGWID1")*GeoModelKernelUnits::mm;
     ribZ1   = zgap - safety;
-    ribX1   = RibConnection - (*ribs)[0]->getDouble("LONGLENG1")*CLHEP::mm;  // LONGLENG1 is a RMIN of ribs
-    posX1   = (*ribs)[0]->getDouble("LONGLENG1")*CLHEP::mm + ribX1/2.;       // It's determined by Pixel volume -> so 250.0!!!
+    ribX1   = RibConnection - (*ribs)[0]->getDouble("LONGLENG1")*GeoModelKernelUnits::mm;  // LONGLENG1 is a RMIN of ribs
+    posX1   = (*ribs)[0]->getDouble("LONGLENG1")*GeoModelKernelUnits::mm + ribX1/2.;       // It's determined by Pixel volume -> so 250.0!!!
  
-    ribY2   = (*ribs)[0]->getDouble("LONGWID2")*CLHEP::mm;
+    ribY2   = (*ribs)[0]->getDouble("LONGWID2")*GeoModelKernelUnits::mm;
     ribZ2   = zgap - safety;
     ribX2   = maxRofEP - RibConnection;
     posX2   = RibConnection+ribX2/2.;
@@ -264,21 +266,21 @@ void EndPlateFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
     for (int ip=0; ip<4; ip++){
       double angl= ip*M_PI/2.;
 // 1st part
-      CLHEP::Hep3Vector ribpos_pos1( posX1*cos(angl), posX1*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg1( posX1*cos(angl), posX1*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos1));
+      GeoTrf::Vector3D ribpos_pos1( posX1*cos(angl), posX1*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg1( posX1*cos(angl), posX1*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_pos1));
       motherP->add(xrib);
       motherP->add(ribLong1Phys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg1));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_neg1));
       motherM->add(xrib);
       motherM->add(ribLong1Phys);
 // 2nd part
-      CLHEP::Hep3Vector ribpos_pos2( posX2*cos(angl), posX2*sin(angl), zposEP+zleng+thickShell+zgap/2.);
-      CLHEP::Hep3Vector ribpos_neg2( posX2*cos(angl), posX2*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_pos2));
+      GeoTrf::Vector3D ribpos_pos2( posX2*cos(angl), posX2*sin(angl), zposEP+zleng+thickShell+zgap/2.);
+      GeoTrf::Vector3D ribpos_neg2( posX2*cos(angl), posX2*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_pos2));
       motherP->add(xrib);
       motherP->add(ribLong2Phys);
-      xrib = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(-angl,0.,0.),ribpos_neg2));
+      xrib = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(-angl,0.,0.),ribpos_neg2));
       motherM->add(xrib);
       motherM->add(ribLong2Phys);
     }
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatBuilderToolSLHC.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatBuilderToolSLHC.cxx
index ad4299a2c7be2a61e85fb09db1582c442cd94a9e..87365a42dd85dc963e4228da3e279fa02eceb063 100644
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatBuilderToolSLHC.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatBuilderToolSLHC.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelInterfaces/IGeoDbTagSvc.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "InDetGeoModelUtils/InDetMaterialManager.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include "InDetServMatGeoModel/ServicesTracker.h"
 #include "InDetServMatGeoModel/ServicesTrackerBuilder.h"
@@ -301,14 +301,14 @@ void InDetServMatBuilderToolSLHC::printNewVolume( const ServiceVolume& vol,
 		   << " zmin " << vol.zMin() 
 		   << " zmax " << vol.zMax() << endmsg;
  
-    msg(MSG::DEBUG) << "name " << vol.name() << " density " << dens * CLHEP::cm3 / CLHEP::g 
-		   << " [g/cm3] weight " << dens*param.volume()/CLHEP::kg  << " [kg]" << endmsg;
+    msg(MSG::DEBUG) << "name " << vol.name() << " density " << dens * GeoModelKernelUnits::cm3 / GeoModelKernelUnits::g 
+		   << " [g/cm3] weight " << dens*param.volume()/GeoModelKernelUnits::kg  << " [kg]" << endmsg;
   } 
   if (msgLvl(MSG::DEBUG)) {   // FIXME: change to VERBOSE when done!
     msg(MSG::DEBUG) << "Number of elements: " << mat.getNumElements() << endmsg;
     for (unsigned int i=0; i< mat.getNumElements(); i++) {
       msg(MSG::DEBUG) << "Element " << mat.getElement(i)->getName() 
-		      << " weight " << mat.getFraction(i) * weight / CLHEP::g << endmsg;
+		      << " weight " << mat.getFraction(i) * weight / GeoModelKernelUnits::g << endmsg;
     }
   }
 }
@@ -316,16 +316,16 @@ void InDetServMatBuilderToolSLHC::printNewVolume( const ServiceVolume& vol,
 void InDetServMatBuilderToolSLHC::fixMissingMaterials() 
 {
   /*
-  m_geoMgr->matMgr()->addWeightEntry( "CoaxialHVCable",    "indet::CoaxialHVCableBase",    0.0026*CLHEP::gram, true, "indet"); 
-  m_geoMgr->matMgr()->addWeightEntry( "TwistedPair_awg36", "indet::TwistedPair_awg36Base", 0.000381*CLHEP::gram, true, "indet"); 
-  m_geoMgr->matMgr()->addWeightEntry( "ScreenedTwistP_36", "indet::ScreenedTwistP_36Base", 0.000978*CLHEP::gram, true, "indet"); 
-  m_geoMgr->matMgr()->addWeightEntry( "Twinax",            "indet::TwinaxBase",            0.00517*CLHEP::gram, true, "indet"); 
+  m_geoMgr->matMgr()->addWeightEntry( "CoaxialHVCable",    "indet::CoaxialHVCableBase",    0.0026*GeoModelKernelUnits::gram, true, "indet"); 
+  m_geoMgr->matMgr()->addWeightEntry( "TwistedPair_awg36", "indet::TwistedPair_awg36Base", 0.000381*GeoModelKernelUnits::gram, true, "indet"); 
+  m_geoMgr->matMgr()->addWeightEntry( "ScreenedTwistP_36", "indet::ScreenedTwistP_36Base", 0.000978*GeoModelKernelUnits::gram, true, "indet"); 
+  m_geoMgr->matMgr()->addWeightEntry( "Twinax",            "indet::TwinaxBase",            0.00517*GeoModelKernelUnits::gram, true, "indet"); 
   */
-  //m_geoMgr->matMgr()->addWeightEntry( "ShieldingSleeve",   "indet::ShieldingSleeveBase",   0.033*CLHEP::gram, true, "indet"); 
-  //m_geoMgr->matMgr()->addWeightEntry( "ProtectionSleeve",   "indet::ProtectionSleeveBase", 0.004*CLHEP::gram, true, "indet"); 
+  //m_geoMgr->matMgr()->addWeightEntry( "ShieldingSleeve",   "indet::ShieldingSleeveBase",   0.033*GeoModelKernelUnits::gram, true, "indet"); 
+  //m_geoMgr->matMgr()->addWeightEntry( "ProtectionSleeve",   "indet::ProtectionSleeveBase", 0.004*GeoModelKernelUnits::gram, true, "indet"); 
   /*
   // the wight is 1, because the real weight is in ServiceMaterial NOT NEEDED
-  m_geoMgr->matMgr()->addWeightEntry( "CoolingPipe", "std::Titanium", 1*CLHEP::gram, true, "indet"); 
+  m_geoMgr->matMgr()->addWeightEntry( "CoolingPipe", "std::Titanium", 1*GeoModelKernelUnits::gram, true, "indet"); 
 
   std::vector<std::string> comps(2);
   std::vector<double> fracs(2);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactory.cxx
index c29725f0f0b82c4497a0077fcad2b748802f27b6..6854e139abd657c605da5f75252937e5758b93db 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactory.cxx
@@ -36,7 +36,7 @@
 // StoreGate includes
 #include "StoreGate/StoreGateSvc.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 
@@ -90,26 +90,26 @@ void InDetServMatFactory::create(GeoPhysVol *world )
   InDetMaterialManager * materialManager = new InDetMaterialManager("InDetServMatMaterialManager", getAthenaComps());
   materialManager->addScalingTable(scalingTable);
 
-  double safety = 0.001 * CLHEP::mm;
-
-  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * CLHEP::mm;
-  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * CLHEP::mm;
-  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * CLHEP::mm;
-  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * CLHEP::mm;
-  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * CLHEP::mm;
-  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * CLHEP::mm;
-  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * CLHEP::mm;
-  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * CLHEP::cm + safety;  // 3470 mm
-
-  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * CLHEP::mm;
-  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * CLHEP::mm;
-  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * CLHEP::mm;
-  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * CLHEP::mm;
-  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * CLHEP::mm;
-  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * CLHEP::mm;
-  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * CLHEP::mm;
-  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * CLHEP::mm;
-  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * CLHEP::cm + safety; // 1147 mm
+  double safety = 0.001 * GeoModelKernelUnits::mm;
+
+  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * GeoModelKernelUnits::mm;
+  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * GeoModelKernelUnits::mm;
+  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * GeoModelKernelUnits::mm;
+  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * GeoModelKernelUnits::cm + safety;  // 3470 mm
+
+  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * GeoModelKernelUnits::mm;
+  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * GeoModelKernelUnits::cm + safety; // 1147 mm
 
   // Since the TRT Wheel C space is not used in some versions and is used by some 
   // other services we simplify the volume.
@@ -124,12 +124,12 @@ void InDetServMatFactory::create(GeoPhysVol *world )
   bool join1 = false; 
   bool join2 = false; 
 
-  if (std::abs(RMaxFwdTRTC - RMinPixServ) <= 1*CLHEP::mm){
+  if (std::abs(RMaxFwdTRTC - RMinPixServ) <= 1*GeoModelKernelUnits::mm){
     join1 = true;
     join2 = true;
     RMaxFwdTRTC = RMinPixServ;
     RMaxPixServ = RMinPixServ;
-  } else if ((RMaxFwdTRTC - 1*CLHEP::mm) <=  RMaxPixServ) {
+  } else if ((RMaxFwdTRTC - 1*GeoModelKernelUnits::mm) <=  RMaxPixServ) {
     join1 = true;
     RMaxPixServ = RMaxFwdTRTC;
   }
@@ -142,8 +142,8 @@ void InDetServMatFactory::create(GeoPhysVol *world )
   const GeoShapeUnion *ServVolAux = 0;
     
   if (!join1) { 
-    GeoPcon* pixServP = new GeoPcon(0.,2*CLHEP::pi);
-    GeoPcon* pixServM = new GeoPcon(0.,2*CLHEP::pi);
+    GeoPcon* pixServP = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
+    GeoPcon* pixServM = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
     
     // Plane 1: Start at the end of the SCT endcap
     pixServP->addPlane(ZMinPixServ,  RMinPixServ, RMaxPixServ);
@@ -163,7 +163,7 @@ void InDetServMatFactory::create(GeoPhysVol *world )
   }
 
   // This is the volume for the TRT/SCT services
-  GeoPcon *sctTrtServ = new GeoPcon(0.,2*CLHEP::pi);
+  GeoPcon *sctTrtServ = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
   
   // Pixel Services
   if (join1) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC2.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC2.cxx
index a44b966ae5608d2d093c1022ae7fc18910f4999e..43f828b400c740a4cca8498feed4e2da920dde00 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC2.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC2.cxx
@@ -95,42 +95,42 @@ void InDetServMatFactoryDC2::create(GeoPhysVol *world)
 
 //  double epsilon = 0.001;
 
-  double endZOfBTRT =                (*trtb)[0]->getDouble("ZLEN")*CLHEP::cm;
-  double endZOfBSCT =                (*sctg)[0]->getDouble("HLEN")*CLHEP::cm;
-  double begZOfFSCT =                (*zscg)[0]->getDouble("ZLOEND")*CLHEP::cm;
-  double endZOfFSCT =                (*zscg)[0]->getDouble("ZHIEND")*CLHEP::cm;
+  double endZOfBTRT =                (*trtb)[0]->getDouble("ZLEN")*GeoModelKernelUnits::cm;
+  double endZOfBSCT =                (*sctg)[0]->getDouble("HLEN")*GeoModelKernelUnits::cm;
+  double begZOfFSCT =                (*zscg)[0]->getDouble("ZLOEND")*GeoModelKernelUnits::cm;
+  double endZOfFSCT =                (*zscg)[0]->getDouble("ZHIEND")*GeoModelKernelUnits::cm;
   double endZOfFTRT =                ((*trtb)[15]->getDouble("ZPOSA") +
 				      ((*trtb)[15]->getDouble("ZLEN")+(*trtb)[15]->getDouble("ZGAP"))/2.
 				      + ((*trtb)[2]->getDouble("ZPOSA")-(*trtb)[1]->getDouble("ZPOSA"))*3 
-				      + (*trtb)[1]->getDouble("ZLEN")/2.)*CLHEP::cm;
+				      + (*trtb)[1]->getDouble("ZLEN")/2.)*GeoModelKernelUnits::cm;
  
-  double endZOfIDet =                (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
+  double endZOfIDet =                (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
 
   // This is endOfEndCapVolumeAB 
   //double begZOfSCTServInTRT = ((trtb[7].zposa + (trtb[7].zlen + trtb[7].zgap)/2.) +
-  //			       (trtb[8].zposa - trtb[7].zposa)*7 + trtb[7].zlen/2.)*CLHEP::cm;
+  //			       (trtb[8].zposa - trtb[7].zposa)*7 + trtb[7].zlen/2.)*GeoModelKernelUnits::cm;
 
   // This is beginningOfEndCapVolumeC 
   //  double endZOfSCTServInTRT = (trtb[15].zposa + (trtb[15].zlen + trtb[15].zgap)/2. - 
-  //			       trtb[1].zlen/2.)*CLHEP::cm;
+  //			       trtb[1].zlen/2.)*GeoModelKernelUnits::cm;
 
-  // The SCT services go from 2755.306 to 2775.306 CLHEP::mm 
+  // The SCT services go from 2755.306 to 2775.306 GeoModelKernelUnits::mm 
   // The TRT has a gap from 2712.25 to 2829.75 mm
   // We hard wire an envelope for these services instead.
-  double begZOfSCTServInTRT = 2755. * CLHEP::mm;
-  double endZOfSCTServInTRT = 2776. * CLHEP::mm;
+  double begZOfSCTServInTRT = 2755. * GeoModelKernelUnits::mm;
+  double endZOfSCTServInTRT = 2776. * GeoModelKernelUnits::mm;
 
   //std::cout << "Begin SCT services " << begZOfSCTServInTRT << std::endl;
   //std::cout << "End SCT services " << endZOfSCTServInTRT << std::endl;
 
 
-  double outROfPixel =               (*zscg)[0]->getDouble("RINEND")*CLHEP::cm;
-  double inROfFTRT  =                (*trtb)[15]->getDouble("RI")*CLHEP::cm;
-  double outROfFSCT =                (*zscg)[0]->getDouble("ROUEND")*CLHEP::cm;
-  double outROfBSCT =                (*sctg)[0]->getDouble("RMAX")*CLHEP::cm;
-  double outROfPixelCables =         (*pbfi)[0]->getFloat("ROUT")*CLHEP::cm;
-  double outROfIDet =                (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double outROfTRT =                 (*trtg)[0]->getDouble("RMAX")*CLHEP::cm;
+  double outROfPixel =               (*zscg)[0]->getDouble("RINEND")*GeoModelKernelUnits::cm;
+  double inROfFTRT  =                (*trtb)[15]->getDouble("RI")*GeoModelKernelUnits::cm;
+  double outROfFSCT =                (*zscg)[0]->getDouble("ROUEND")*GeoModelKernelUnits::cm;
+  double outROfBSCT =                (*sctg)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double outROfPixelCables =         (*pbfi)[0]->getFloat("ROUT")*GeoModelKernelUnits::cm;
+  double outROfIDet =                (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double outROfTRT =                 (*trtg)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;
 
   //
   // Create the envelope for the Pixel Services:
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC3.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC3.cxx
index b772fcb94f7ce33c90cd822aa911d3ec3b2812de..024b50ae510bc2d2cd4689a8267a038762539a68 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC3.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryDC3.cxx
@@ -87,24 +87,24 @@ void InDetServMatFactoryDC3::create(GeoPhysVol *world )
   InDetMaterialManager * materialManager = new InDetMaterialManager("InDetServMatMaterialManager", getAthenaComps());
 
 
-  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * CLHEP::mm;
-  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * CLHEP::mm;
-  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * CLHEP::mm;
-  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * CLHEP::mm;
-  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * CLHEP::mm;
-  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * CLHEP::mm;
-  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * CLHEP::mm;
-  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * CLHEP::cm;  // 3490 mm
-
-  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * CLHEP::mm;
-  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * CLHEP::mm;
-  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * CLHEP::mm;
-  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * CLHEP::mm;
-  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * CLHEP::mm;
-  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * CLHEP::mm;
-  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * CLHEP::mm;
-  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * CLHEP::mm;
-  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * CLHEP::cm; // 1147 mm
+  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * GeoModelKernelUnits::mm;
+  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * GeoModelKernelUnits::mm;
+  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * GeoModelKernelUnits::mm;
+  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * GeoModelKernelUnits::cm;  // 3490 mm
+
+  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * GeoModelKernelUnits::mm;
+  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * GeoModelKernelUnits::cm; // 1147 mm
 
 
 
@@ -112,8 +112,8 @@ void InDetServMatFactoryDC3::create(GeoPhysVol *world )
   // Create the envelope for the Pixel Services:
   //
   const GeoMaterial* air = materialManager->getMaterial("std::Air");
-  GeoPcon* pixServP = new GeoPcon(0.,2*CLHEP::pi);
-  GeoPcon* pixServM = new GeoPcon(0.,2*CLHEP::pi);
+  GeoPcon* pixServP = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
+  GeoPcon* pixServM = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
 
   // Plane 1: Start at the end of the SCT endcap
   pixServP->addPlane(ZMinPixServ,  RMinPixServ, RMaxPixServ);
@@ -132,7 +132,7 @@ void InDetServMatFactoryDC3::create(GeoPhysVol *world )
   const GeoShapeUnion *ServVolAux = new GeoShapeUnion(pixServP, pixServM);
 
   // This is the volume for the TRT/SCT services
-  GeoPcon *sctTrtServ = new GeoPcon(0.,2*CLHEP::pi);
+  GeoPcon *sctTrtServ = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
   
   // THE BEGINNING
   sctTrtServ->addPlane(-ZMaxIDet, RMaxFwdTRTC, RMaxIDet);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryFS.cxx
index c0dd46354f1c8dab029343975deed3b99e1598a5..4da8a0e8df60f7c9b9b4dde3fcc0a7b0b509dc0e 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactoryFS.cxx
@@ -32,7 +32,7 @@
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "GaudiKernel/Bootstrap.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 
@@ -91,26 +91,26 @@ void InDetServMatFactoryFS::create(GeoPhysVol *world )
   const IRDBRecord *envelopes = (*servEnvelopeTable)[0];
 
 
-  double safety = 0.001 * CLHEP::mm;
+  double safety = 0.001 * GeoModelKernelUnits::mm;
 
-  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * CLHEP::mm;
-  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * CLHEP::mm;
-  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * CLHEP::mm;
-  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * CLHEP::mm;
-  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * CLHEP::mm;
-  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * CLHEP::mm;
-  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * CLHEP::mm;
-  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * CLHEP::cm + safety;  // 3470 mm
+  double ZMaxBrlTRT =        envelopes->getDouble("ZMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double ZMaxBrlSCT =        envelopes->getDouble("ZMAXBRLSCT") * GeoModelKernelUnits::mm;
+  double ZMinFwdSCTandTRT =  envelopes->getDouble("ZMINFWDSCTANDTRT") * GeoModelKernelUnits::mm;
+  double ZMinSCTServInTRT =  envelopes->getDouble("ZMINSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMaxSCTServInTRT =  envelopes->getDouble("ZMAXSCTSERVINTRT") * GeoModelKernelUnits::mm;
+  double ZMinPixServ    =    envelopes->getDouble("ZMINPIXSERV") * GeoModelKernelUnits::mm;
+  double ZMaxFwdTRTC =       envelopes->getDouble("ZMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double ZMaxIDet =          (*atls)[0]->getDouble("IDETZMX") * GeoModelKernelUnits::cm + safety;  // 3470 mm
 
-  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * CLHEP::mm;
-  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * CLHEP::mm;
-  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * CLHEP::mm;
-  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * CLHEP::mm;
-  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * CLHEP::mm;
-  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * CLHEP::mm;
-  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * CLHEP::mm;
-  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * CLHEP::mm;
-  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * CLHEP::cm + safety; // 1147 mm
+  double RMinBrlSCT =        envelopes->getDouble("RMINBRLSCT") * GeoModelKernelUnits::mm;
+  double RMaxBrlTRT =        envelopes->getDouble("RMAXBRLTRT") * GeoModelKernelUnits::mm;
+  double RMinBrlTRT =        envelopes->getDouble("RMINBRLTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRT =        envelopes->getDouble("RMAXFWDTRT") * GeoModelKernelUnits::mm;
+  double RMaxFwdSCT =        envelopes->getDouble("RMAXFWDSCT") * GeoModelKernelUnits::mm;
+  double RMaxFwdTRTC =       envelopes->getDouble("RMAXFWDTRTC") * GeoModelKernelUnits::mm;
+  double RMinPixServ =       envelopes->getDouble("RMINPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxPixServ =       envelopes->getDouble("RMAXPIXSERV") * GeoModelKernelUnits::mm;
+  double RMaxIDet =          (*atls)[0]->getDouble("IDETOR") * GeoModelKernelUnits::cm + safety; // 1147 mm
 
   // Since the TRT Wheel C space is not used in some versions and is used by some 
   // other services we simplify the volume.
@@ -125,12 +125,12 @@ void InDetServMatFactoryFS::create(GeoPhysVol *world )
   bool join1 = false; 
   bool join2 = false; 
 
-  if (std::abs(RMaxFwdTRTC - RMinPixServ) <= 1*CLHEP::mm){
+  if (std::abs(RMaxFwdTRTC - RMinPixServ) <= 1*GeoModelKernelUnits::mm){
     join1 = true;
     join2 = true;
     RMaxFwdTRTC = RMinPixServ;
     RMaxPixServ = RMinPixServ;
-  } else if ((RMaxFwdTRTC - 1*CLHEP::mm) <=  RMaxPixServ) {
+  } else if ((RMaxFwdTRTC - 1*GeoModelKernelUnits::mm) <=  RMaxPixServ) {
     join1 = true;
     RMaxPixServ = RMaxFwdTRTC;
   }
@@ -144,8 +144,8 @@ void InDetServMatFactoryFS::create(GeoPhysVol *world )
   GeoPcon* pixServM = 0;
     
   if (!join1) { 
-    pixServP = new GeoPcon(0.,2*CLHEP::pi);
-    pixServM = new GeoPcon(0.,2*CLHEP::pi);
+    pixServP = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
+    pixServM = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
     
     // Plane 1: Start at the end of the SCT endcap
     pixServP->addPlane(ZMinPixServ,  RMinPixServ, RMaxPixServ);
@@ -163,8 +163,8 @@ void InDetServMatFactoryFS::create(GeoPhysVol *world )
   }
 
   // This is the volume for the TRT/SCT services
-  GeoPcon *sctTrtServP = new GeoPcon(0.,2*CLHEP::pi);
-  GeoPcon *sctTrtServM = new GeoPcon(0.,2*CLHEP::pi);
+  GeoPcon *sctTrtServP = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
+  GeoPcon *sctTrtServM = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
   
   // Pixel Services
   if (join1) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactorySLHC.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactorySLHC.cxx
index 60272ec92c6c1aa57f4bdc11d40cd01d644c0d69..79bdc998f80467f07b538418186d3886b2f7c771 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactorySLHC.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatFactorySLHC.cxx
@@ -75,9 +75,9 @@ void InDetServMatFactorySLHC::create(GeoPhysVol *world )
     double cylLength;
     
     if (oldEnvelope()) {
-      innerRadius = geomDB()->getDouble("","SERVICESINNERRADIUS") * CLHEP::mm;
-      outerRadius = geomDB()->getDouble("","SERVICESOUTERRADIUS") * CLHEP::mm; 
-      cylLength   = geomDB()->getDouble("","SERVICESCYLLENGTH") * CLHEP::mm; 
+      innerRadius = geomDB()->getDouble("","SERVICESINNERRADIUS") * GeoModelKernelUnits::mm;
+      outerRadius = geomDB()->getDouble("","SERVICESOUTERRADIUS") * GeoModelKernelUnits::mm; 
+      cylLength   = geomDB()->getDouble("","SERVICESCYLLENGTH") * GeoModelKernelUnits::mm; 
     } else {
       innerRadius = envelopeRMin();
       outerRadius = envelopeRMax();
@@ -86,7 +86,7 @@ void InDetServMatFactorySLHC::create(GeoPhysVol *world )
     envelopeShape = new GeoTube(innerRadius, outerRadius, 0.5*cylLength);
     zone = new InDetDD::TubeZone("InDetServMat", -0.5*cylLength, 0.5*cylLength, innerRadius, outerRadius);
   } else {
-    GeoPcon* envelopeShapeTmp  = new GeoPcon(0.,2*CLHEP::pi);
+    GeoPcon* envelopeShapeTmp  = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
     // table contains +ve z values only and envelope is assumed to be symmetric around z.
     int numPlanes = envelopeNumPlanes();
     for (int i = 0; i < numPlanes * 2; i++) {
@@ -183,7 +183,7 @@ InDetServMatFactorySLHC::envelopeNumPlanes() const
 double 
 InDetServMatFactorySLHC::envelopeZ(int i) const 
 {
-  double zmin =  geomDB()->getDouble(m_InDetServGenEnvelope,"Z",i) * CLHEP::mm;
+  double zmin =  geomDB()->getDouble(m_InDetServGenEnvelope,"Z",i) * GeoModelKernelUnits::mm;
   if (zmin < 0) msg(MSG::ERROR) << "InDetServGenEnvelope table should only contain +ve z values" << endmsg;
   return std::abs(zmin);
 }
@@ -191,11 +191,11 @@ InDetServMatFactorySLHC::envelopeZ(int i) const
 double 
 InDetServMatFactorySLHC::envelopeRMin(int i) const 
 {
-  return geomDB()->getDouble(m_InDetServGenEnvelope,"RMIN",i) * CLHEP::mm;
+  return geomDB()->getDouble(m_InDetServGenEnvelope,"RMIN",i) * GeoModelKernelUnits::mm;
 }
 
 double 
 InDetServMatFactorySLHC::envelopeRMax(int i) const
 {
-  return geomDB()->getDouble(m_InDetServGenEnvelope,"RMAX",i) * CLHEP::mm;
+  return geomDB()->getDouble(m_InDetServGenEnvelope,"RMAX",i) * GeoModelKernelUnits::mm;
 }
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatGeometryManager.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatGeometryManager.cxx
index a85d8ea8fdab393c2fd8c3ab15d2243b43799b71..b1b87b9cf5c43f51a83bceda48cf175722a8f7b1 100644
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatGeometryManager.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/InDetServMatGeometryManager.cxx
@@ -10,7 +10,7 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 InDetServMatGeometryManager::InDetServMatGeometryManager(const InDetDD::AthenaComps * athenaComps)   
   : m_athenaComps(athenaComps),
@@ -158,14 +158,14 @@ int InDetServMatGeometryManager::pixelNumLayers() const
 // layer radius 
 double InDetServMatGeometryManager::pixelLayerRadius(int layer) const
 {
-  return db()->getDouble(m_PixelLayer,"RLAYER",layer) * CLHEP::mm;
+  return db()->getDouble(m_PixelLayer,"RLAYER",layer) * GeoModelKernelUnits::mm;
 }
 
 // layer length
 double InDetServMatGeometryManager::pixelLayerLength(int layer) const
 {
   int staveIndex = db()->getInt(m_PixelLayer,"STAVEINDEX",layer);
-  return db()->getDouble(m_PixelStave,"ENVLENGTH",staveIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"ENVLENGTH",staveIndex) * GeoModelKernelUnits::mm;
 }
 
 // Number of staves/sectors per barrel layer 
@@ -264,7 +264,7 @@ int InDetServMatGeometryManager::pixelNumDisks() const
 // disk Z position
 double InDetServMatGeometryManager::pixelDiskZ(int disk) const 
 {
-  return db()->getDouble(m_PixelDisk,"ZDISK",disk) * CLHEP::mm;
+  return db()->getDouble(m_PixelDisk,"ZDISK",disk) * GeoModelKernelUnits::mm;
 }
 
 // disk min radius
@@ -272,10 +272,10 @@ double InDetServMatGeometryManager::pixelDiskRMin(int disk) const
 {
   std::string route = pixelDiskServiceRoute(disk);   
   if(route=="StdRoute")
-    return db()->getDouble(m_PixelDisk,"RMIN",disk) * CLHEP::mm - 11*CLHEP::mm;
+    return db()->getDouble(m_PixelDisk,"RMIN",disk) * GeoModelKernelUnits::mm - 11*GeoModelKernelUnits::mm;
 
   // support structures - SUP1RMIN is always closest to centre
-  return db()->getDouble(m_PixelDisk,"SUP1RMIN",disk) * CLHEP::mm;
+  return db()->getDouble(m_PixelDisk,"SUP1RMIN",disk) * GeoModelKernelUnits::mm;
 
 }
 
@@ -284,10 +284,10 @@ double InDetServMatGeometryManager::pixelDiskRMax(int disk) const
 {
   std::string route = pixelDiskServiceRoute(disk);   
   if(route=="StdRoute")
-    return db()->getDouble(m_PixelDisk,"RMAX",disk) * CLHEP::mm + 11*CLHEP::mm;
+    return db()->getDouble(m_PixelDisk,"RMAX",disk) * GeoModelKernelUnits::mm + 11*GeoModelKernelUnits::mm;
 
   // support structures - SUP3RMAX is always furthest from centre
-  return db()->getDouble(m_PixelDisk,"SUP3RMAX",disk) * CLHEP::mm;
+  return db()->getDouble(m_PixelDisk,"SUP3RMAX",disk) * GeoModelKernelUnits::mm;
 
 }
 
@@ -297,7 +297,7 @@ double InDetServMatGeometryManager::pixelDiskEOSZOffset(int disk) const
   if (!db()->testField(m_PixelSvcRoute, "EOSZOFFSET")) 
     return 0.0;
   else
-    return db()->getDouble(m_PixelSvcRoute,"EOSZOFFSET",disk) * CLHEP::mm;
+    return db()->getDouble(m_PixelSvcRoute,"EOSZOFFSET",disk) * GeoModelKernelUnits::mm;
 }
 
 // return name of support tube where 
@@ -310,7 +310,7 @@ std::string InDetServMatGeometryManager::pixelDiskServiceRoute(int disk) const
 
 double InDetServMatGeometryManager::pixelEnvelopeRMax() const
 {
-  return db()->getDouble(m_PixelEnvelope,"RMAX") * CLHEP::mm;
+  return db()->getDouble(m_PixelEnvelope,"RMAX") * GeoModelKernelUnits::mm;
 }
 
 int InDetServMatGeometryManager::pixelBarrelModuleType( int layer) const 
@@ -351,13 +351,13 @@ int InDetServMatGeometryManager::sctNumLayers() const
 // layer radius 
 double InDetServMatGeometryManager::sctLayerRadius(int layer) const
 {
-  return db()->getDouble(m_SctBrlLayer,"RADIUS",layer) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlLayer,"RADIUS",layer) * GeoModelKernelUnits::mm;
 }
 
 // layer length
 double InDetServMatGeometryManager::sctLayerLength(int layer) const
 {
-  return db()->getDouble(m_SctBrlLayer,"CYLLENGTH",layer) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlLayer,"CYLLENGTH",layer) * GeoModelKernelUnits::mm;
 }
 
 // layer type. Long(0) or Short (1) strips. NEEDS CHECKING
@@ -395,17 +395,17 @@ int InDetServMatGeometryManager::sctNumDisks() const
 // disk Z position
 double InDetServMatGeometryManager::sctDiskZ(int disk) const 
 {
-  return db()->getDouble(m_SctFwdWheel,"ZPOSITION",disk) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdWheel,"ZPOSITION",disk) * GeoModelKernelUnits::mm;
 }
 
 // disk Z position
 double InDetServMatGeometryManager::sctDiskRMax(int disk) const 
 {
-  return db()->getDouble(m_SctFwdDiscSupport,"OUTERRADIUS",disk) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdDiscSupport,"OUTERRADIUS",disk) * GeoModelKernelUnits::mm;
 }
 
 double InDetServMatGeometryManager::sctInnerSupport() const 
 {
-  return db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLINNERRAD",0) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLINNERRAD",0) * GeoModelKernelUnits::mm;
 }
 
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC2.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC2.cxx
index 56735f08168474fcd15c7cfe80abc1a8b5776226..ce929352dd2120423ce40cf6d764c5c4c20f4880 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC2.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC2.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/PixelServMatFactoryDC2.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -74,8 +76,8 @@ void PixelServMatFactoryDC2::create(GeoPhysVol *mother)
     std::string matName =  mat[(int) (*pbfi)[ii]->getFloat("MAT")];
 
     const GeoMaterial* cylMat = materialManager->getMaterial(matName);
-    double rmin = (*pbfi)[ii]->getFloat("RIN")*CLHEP::cm;
-    double rmax = (*pbfi)[ii]->getFloat("ROUT")*CLHEP::cm;
+    double rmin = (*pbfi)[ii]->getFloat("RIN")*GeoModelKernelUnits::cm;
+    double rmax = (*pbfi)[ii]->getFloat("ROUT")*GeoModelKernelUnits::cm;
     double zmin = (*pbfi)[ii]->getFloat("ZIN");
     double zmax = (*pbfi)[ii]->getFloat("ZOUT");
     // elaborate it 'a la G3...
@@ -84,9 +86,9 @@ void PixelServMatFactoryDC2::create(GeoPhysVol *mother)
       double rl = cylMat->getRadLength();
       halflength = fabs(zmax) * rl /200. ;
     } else {
-      halflength = fabs(zmax-zmin)*CLHEP::cm;
+      halflength = fabs(zmax-zmin)*GeoModelKernelUnits::cm;
     }
-    double zpos = fabs(zmin*CLHEP::cm)+halflength+epsilon;
+    double zpos = fabs(zmin*GeoModelKernelUnits::cm)+halflength+epsilon;
     // Build the Phys Vol
     std::ostringstream o;
     o << ii;
@@ -97,18 +99,18 @@ void PixelServMatFactoryDC2::create(GeoPhysVol *mother)
     
     if(rmin > 0.)  // place two
       {
-	CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-	CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-	GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-	GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+	GeoTrf::Translate3D servpos1(0.,0.,zpos);
+	GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+	GeoTransform *xform1 = new GeoTransform(servpos1);
+	GeoTransform *xform2 = new GeoTransform(servpos2);
 	mother->add(xform1);
 	mother->add(ServPhys);
 	mother->add(xform2);
 	mother->add(ServPhys);
       } else { // only one on the right side
 	if(zmin < 0) zpos = -zpos; 
-	CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-	GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
+	GeoTrf::Translate3D servpos1(0.,0.,zpos);
+	GeoTransform *xform1 = new GeoTransform(servpos1);
 	mother->add(xform1);
 	mother->add(ServPhys);
       }
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC3.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC3.cxx
index e60ea28344bd36d99b3f1c82a05fa81571c7d426..84d66d298dc28f11f49e17189a4f163e54d753fa 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC3.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryDC3.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/PixelServMatFactoryDC3.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -72,14 +74,14 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
   std::cout << "Test Material std::Copper density="<<testMat->getDensity()
       <<" Rad.length="<<testMat->getRadLength()<<" Int.length="<<testMat->getIntLength()<<'\n';
 
-      GeoMaterial* TIN = new GeoMaterial("Sn", 7.31*CLHEP::gram/CLHEP::cm3);
-//        GeoElement *testMat   = new GeoElement("Tin",  "Sn", 50.0, 118.69*CLHEP::amu_c2);
+      GeoMaterial* TIN = new GeoMaterial("Sn", 7.31*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
+//        GeoElement *testMat   = new GeoElement("Tin",  "Sn", 50.0, 118.69*GeoModelKernelUnits::amu_c2);
       const GeoElement *tin   = materialManager->getElement("Tin");
       TIN->add(const_cast<GeoElement *>(tin),1.);
       TIN->lock(); testMat=TIN;
   std::cout << "Test Material Tin density="<<testMat->getDensity()
       <<" Rad.length="<<testMat->getRadLength()<<" Int.length="<<testMat->getIntLength()<<'\n';
-  std::cout << "Atomic mass unit="<<CLHEP::amu_c2<<'\n';
+  std::cout << "Atomic mass unit="<<GeoModelKernelUnits::amu_c2<<'\n';
   std::cout << "gram/cm3 ="<<gram/cm3<<'\n';
 */
  
@@ -99,8 +101,8 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
 //      <<" Rad.length="<<cylMat->getRadLength()<<'\n';
 
 
-    double rmin = (*pbfi)[jj]->getFloat("RIN")*CLHEP::cm;
-    double rmax = (*pbfi)[jj]->getFloat("ROUT")*CLHEP::cm;
+    double rmin = (*pbfi)[jj]->getFloat("RIN")*GeoModelKernelUnits::cm;
+    double rmax = (*pbfi)[jj]->getFloat("ROUT")*GeoModelKernelUnits::cm;
     double zmin = (*pbfi)[jj]->getFloat("ZIN");
     double zmax = (*pbfi)[jj]->getFloat("ZOUT");
 
@@ -113,7 +115,7 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
       double rl = cylMat->getRadLength();
       halflength = fabs(zmax) * rl /200. ;
     } else {
-      halflength = fabs(zmax-zmin)*CLHEP::cm;
+      halflength = fabs(zmax-zmin)*GeoModelKernelUnits::cm;
     }
 
 //VK Temporary!!!  To bring thickness to nominal values
@@ -123,7 +125,7 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
 //    if( ii == 0 ) zmin += 0.7;   // in cm!
 //std::cout << "New="<<halflength<<", "<<zmin<<", "<<ii<<'\n';
 
-    double zpos = fabs(zmin*CLHEP::cm)+halflength+epsilon;
+    double zpos = fabs(zmin*GeoModelKernelUnits::cm)+halflength+epsilon;
     // Build the Phys Vol
     std::ostringstream o;
     o << ii;
@@ -149,17 +151,17 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
     GeoPhysVol* ServPhys = new GeoPhysVol(ServLog);
     
     if(zmin < 0) zpos = -zpos; 
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
+    GeoTrf::Vector3D servpos1(0.,0.,zpos);
+    GeoTrf::Vector3D servpos2(0.,0.,-zpos);
 //
     if (ii==0 || ii==2 || ii==6 || ii==1){
 	for (int isec=0; isec<12 ; isec++){
-            std::ostringstream o;
+	    std::ostringstream o;
             o<<"_";  o << isec;
             std::string logNameTmp = logName+o.str();    
 //std::cout<<isec<<", "<<logNameTmp<<'\n';
-	    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,isec*M_PI/6.),servpos1));
-	    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,isec*M_PI/6.),servpos2));
+	    GeoTransform *xform1 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,0.,isec*M_PI/6.),servpos1));
+	    GeoTransform *xform2 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,0.,isec*M_PI/6.),servpos2));
 	    xform2->ref();//artificial refcount increment
 	    mother->add(new GeoNameTag(logNameTmp));
 	    mother->add(xform1);//xform1 is always used
@@ -172,8 +174,8 @@ void PixelServMatFactoryDC3::create(GeoPhysVol *mother)
 	    xform2->unref(); //will delete it, if it was never used
         }
     }else{
-	GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-	GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+        GeoTransform *xform1 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,0,0),servpos1));
+	GeoTransform *xform2 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,0,0),servpos2));
 	xform2->ref();//artificial refcount increment
 	mother->add(xform1);
 	mother->add(ServPhys);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryFS.cxx
index 371e02aa48e3cc3a369968f9407eb6c5631bf65d..e872b357bf66833acbce4df6aa0f5a260a3a67fa 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/PixelServMatFactoryFS.cxx
@@ -105,7 +105,7 @@ void PixelServMatFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 				    servicePcon->getDPhi());
 
       GeoCons* cons = new GeoCons(servicePcon->getRMinPlane(2),servicePcon->getRMinPlane(3),
-				   servicePcon->getRMaxPlane(2),servicePcon->getRMaxPlane(3)+1E-9*CLHEP::mm,
+				   servicePcon->getRMaxPlane(2),servicePcon->getRMaxPlane(3)+1E-9*GeoModelKernelUnits::mm,
 				   (servicePcon->getZPlane(3)-servicePcon->getZPlane(2))*0.5,
 				   servicePcon->getSPhi(),
 				   servicePcon->getDPhi());
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactory.cxx
index 5310b5f5edf8e24b2761da2067bf7d2b26f96807..12d99004ab1d44fd93259e840c42dfd40af592f0 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactory.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SCT_ServMatFactory.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -70,14 +72,14 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 
   //------------------------------------------
   //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
-  //  double minRofGap  =       1050.0*CLHEP::mm;
-  //  double minRofGap  =       1110.0*CLHEP::mm;
-  double minRofGap  =       1089.0*CLHEP::mm;
-  double phiWid=(70.*CLHEP::mm)/outROfIDet;   
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
+  //  double minRofGap  =       1050.0*GeoModelKernelUnits::mm;
+  //  double minRofGap  =       1110.0*GeoModelKernelUnits::mm;
+  double minRofGap  =       1089.0*GeoModelKernelUnits::mm;
+  double phiWid=(70.*GeoModelKernelUnits::mm)/outROfIDet;   
   //  std::cout << "Gap phiWid = " << phiWid << std::endl;
-  double safetyGap=1.*CLHEP::mm;
+  double safetyGap=1.*GeoModelKernelUnits::mm;
 
   //created by Adam Agocs 
 
@@ -129,7 +131,7 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
     double volumeCut = 0;
     const GeoShape* serviceTube = serviceTubeTmp;
     const GeoShape* serviceTube2 = serviceTubeTmp; //because of asymmetry
-    if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiStart()*CLHEP::radian < phiTop)  {
+    if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiStart()*GeoModelKernelUnits::radian < phiTop)  {
       // Subtract RailGap out of services
       if (NameOfService == "PPB1EFEG" || NameOfService == "CableTrayEFEG")
       {
@@ -166,13 +168,13 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
      const GeoLogVol* serv2Log = new GeoLogVol(logName,serviceTube2,material);
      GeoVPhysVol* serv2Phys = new GeoPhysVol(serv2Log);
 
-     HepGeom::TranslateZ3D trans(tubeHelper.volData().zMid());
-     HepGeom::TranslateZ3D trans2(-tubeHelper.volData().zMid());
+     GeoTrf::TranslateZ3D trans(tubeHelper.volData().zMid());
+     GeoTrf::TranslateZ3D trans2(-tubeHelper.volData().zMid());
 
      GeoTransform * xform1    = new GeoTransform(trans);
      GeoTransform * xform1Neg = new GeoTransform(trans2);
-     GeoTransform * xform2    = new GeoTransform(HepGeom::RotateZ3D(180*CLHEP::deg)*trans);
-     GeoTransform * xform2Neg = new GeoTransform(HepGeom::RotateZ3D(180*CLHEP::deg)*trans2);
+     GeoTransform * xform2    = new GeoTransform(GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg)*trans);
+     GeoTransform * xform2Neg = new GeoTransform(GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg)*trans2);
     
 //     std::cerr << xform1 << std::endl << xform1Neg << std::endl << xform2 << std::endl << xform2Neg << std::endl;
      
@@ -202,12 +204,12 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 
     for (unsigned int ii =0; ii < sctsup->size(); ii++) {
       
-      RMinW          = (*sctsup)[ii]->getFloat("RMIN")*CLHEP::mm;
-      RMaxW          = (*sctsup)[ii]->getFloat("RMAX")*CLHEP::mm;
-      ZHalfLengthW   = (*sctsup)[ii]->getFloat("THICK")/2.*CLHEP::mm;
-      WidI           = (*sctsup)[ii]->getFloat("WIDTHINNER")*CLHEP::mm;
-      WidO           = (*sctsup)[ii]->getFloat("WIDTHOUTER")*CLHEP::mm;
-      ZStartW        = (*sctsup)[ii]->getFloat("ZSTART")*CLHEP::mm;
+      RMinW          = (*sctsup)[ii]->getFloat("RMIN")*GeoModelKernelUnits::mm;
+      RMaxW          = (*sctsup)[ii]->getFloat("RMAX")*GeoModelKernelUnits::mm;
+      ZHalfLengthW   = (*sctsup)[ii]->getFloat("THICK")/2.*GeoModelKernelUnits::mm;
+      WidI           = (*sctsup)[ii]->getFloat("WIDTHINNER")*GeoModelKernelUnits::mm;
+      WidO           = (*sctsup)[ii]->getFloat("WIDTHOUTER")*GeoModelKernelUnits::mm;
+      ZStartW        = (*sctsup)[ii]->getFloat("ZSTART")*GeoModelKernelUnits::mm;
       NameOfMaterial = (*sctsup)[ii]->getString("MATERIAL");
       DPhi = asin(WidI/2./RMinW);
       
@@ -225,7 +227,7 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 	//	double DPhiDop = asin(WidI/2./(Shift-H1));
 	double DPhiDop = atan(WidI/2./(Shift-H1));
 	const GeoShape* pTub2 = new GeoTubs(0., RMaxDop, ZHalfLengthW, M_PI-DPhiDop, 2.*DPhiDop);
-	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << HepGeom::TranslateX3D(Shift));
+	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << GeoTrf::TranslateX3D(Shift));
 	wing  = (GeoShape*) & (*pTub1).intersect(*pTub3);  
 	
 	// GeoModel calculates the volume incorrectly so we calculate it here.
@@ -258,10 +260,10 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
       
       const GeoLogVol* wingLog = new GeoLogVol(logName,wing,wingMat);
       GeoVPhysVol* wingPhys    = new GeoPhysVol(wingLog);
-      GeoTransform* wPos1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos3 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
-      GeoTransform* wPos4 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
+      GeoTransform* wPos1 = new GeoTransform(GeoTrf::Translate3D(0.,0., ZStartW+ZHalfLengthW));
+      GeoTransform* wPos2 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(M_PI,0,0),GeoTrf::Vector3D(0.,0., ZStartW+ZHalfLengthW)));
+      GeoTransform* wPos3 = new GeoTransform(GeoTrf::Translate3D(0.,0.,-ZStartW-ZHalfLengthW));
+      GeoTransform* wPos4 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(M_PI,0,0),GeoTrf::Vector3D(0.,0.,-ZStartW-ZHalfLengthW)));
       mother->add(wPos1);
       mother->add(wingPhys);
       mother->add(wPos2);
@@ -291,14 +293,14 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 
   //------------------------------------------
   //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
-  //  double minRofGap  =       1050.0*CLHEP::mm;
-  //  double minRofGap  =       1110.0*CLHEP::mm;
-  double minRofGap  =       1089.0*CLHEP::mm;
-  double phiWid=(70.*CLHEP::mm)/outROfIDet;   
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
+  //  double minRofGap  =       1050.0*GeoModelKernelUnits::mm;
+  //  double minRofGap  =       1110.0*GeoModelKernelUnits::mm;
+  double minRofGap  =       1089.0*GeoModelKernelUnits::mm;
+  double phiWid=(70.*GeoModelKernelUnits::mm)/outROfIDet;   
   //  std::cout << "Gap phiWid = " << phiWid << std::endl;
-  double safetyGap=1.*CLHEP::mm;
+  double safetyGap=1.*GeoModelKernelUnits::mm;
   const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
 					-phiWid/2.,phiWid);
   const GeoShape* railGap2=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
@@ -365,12 +367,12 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 
     for (unsigned int ii =0; ii < sctsup->size(); ii++) {
       
-      RMinW        = (*sctsup)[ii]->getFloat("RMIN")*CLHEP::mm;
-      RMaxW        = (*sctsup)[ii]->getFloat("RMAX")*CLHEP::mm;
-      ZHalfLengthW = (*sctsup)[ii]->getFloat("THICK")/2.*CLHEP::mm;
-      WidI         = (*sctsup)[ii]->getFloat("WIDTHINNER")*CLHEP::mm;
-      WidO         = (*sctsup)[ii]->getFloat("WIDTHOUTER")*CLHEP::mm;
-      ZStartW      = (*sctsup)[ii]->getFloat("ZSTART")*CLHEP::mm;
+      RMinW        = (*sctsup)[ii]->getFloat("RMIN")*GeoModelKernelUnits::mm;
+      RMaxW        = (*sctsup)[ii]->getFloat("RMAX")*GeoModelKernelUnits::mm;
+      ZHalfLengthW = (*sctsup)[ii]->getFloat("THICK")/2.*GeoModelKernelUnits::mm;
+      WidI         = (*sctsup)[ii]->getFloat("WIDTHINNER")*GeoModelKernelUnits::mm;
+      WidO         = (*sctsup)[ii]->getFloat("WIDTHOUTER")*GeoModelKernelUnits::mm;
+      ZStartW      = (*sctsup)[ii]->getFloat("ZSTART")*GeoModelKernelUnits::mm;
       DPhi = asin(WidI/2./RMinW);
       
       const GeoShape* pTub1 = new GeoTubs(RMinW, RMaxW, ZHalfLengthW, 0.-DPhi, 2.*DPhi);  //Basic shape
@@ -385,7 +387,7 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
 	//	double DPhiDop = asin(WidI/2./(Shift-H1));
 	double DPhiDop = atan(WidI/2./(Shift-H1));
 	const GeoShape* pTub2 = new GeoTubs(0., RMaxDop, ZHalfLengthW, M_PI-DPhiDop, 2.*DPhiDop);
-	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << HepGeom::TranslateX3D(Shift));
+	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << GeoTrf::TranslateX3D(Shift));
 	wing  = (GeoShape*) & (*pTub1).intersect(*pTub3);  
 	
 	// GeoModel calculates the volume incorrectly so we calculate it here.
@@ -418,10 +420,10 @@ void SCT_ServMatFactory::create(GeoPhysVol *mother)
       
       const GeoLogVol* wingLog = new GeoLogVol(logName,wing,wingMat);
       GeoVPhysVol* wingPhys    = new GeoPhysVol(wingLog);
-      GeoTransform* wPos1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos3 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
-      GeoTransform* wPos4 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
+      GeoTransform* wPos1 = new GeoTransform(GeoTrf::Translate3D(0.,0., ZStartW+ZHalfLengthW));
+      GeoTransform* wPos2 = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translation3D(0.,0., ZStartW+ZHalfLengthW)*GeoTrf::RotateX3D(M_PI)));
+      GeoTransform* wPos3 = new GeoTransform(GeoTrf::Translate3D(0.,0.,-ZStartW-ZHalfLengthW));
+      GeoTransform* wPos4 = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translation3D(0.,0.,-ZStartW-ZHalfLengthW)*GeoTrf::RotateX3D(M_PI)));
       mother->add(wPos1);
       mother->add(wingPhys);
       mother->add(wPos2);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC2.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC2.cxx
index 4626e5092bd58f1cf31e2bade37fff4722a4d12b..32ed55a0bbb3fed658f7c8d4416605e336972fd4 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC2.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC2.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SCT_ServMatFactoryDC2.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -76,20 +78,20 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
   // Build SCT services in Endcap.
   // (Code taken from TRT_GeoModel)
 
-  double innerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
-  double outerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTSupport = ((*tsci)[0]->getDouble("ZMAX")-(*tsci)[0]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTSupport= 0.5 * ((*tsci)[0]->getDouble("ZMAX")+(*tsci)[0]->getDouble("ZMIN"))*CLHEP::cm;
+  double innerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
+  double outerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTSupport = ((*tsci)[0]->getDouble("ZMAX")-(*tsci)[0]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTSupport= 0.5 * ((*tsci)[0]->getDouble("ZMAX")+(*tsci)[0]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
 
-  double innerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
-  double outerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTCables = ((*tsci)[1]->getDouble("ZMAX")-(*tsci)[1]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTCables = 0.5 * ((*tsci)[1]->getDouble("ZMAX")+(*tsci)[1]->getDouble("ZMIN"))*CLHEP::cm;
+  double innerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
+  double outerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTCables = ((*tsci)[1]->getDouble("ZMAX")-(*tsci)[1]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTCables = 0.5 * ((*tsci)[1]->getDouble("ZMAX")+(*tsci)[1]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
  
-  double innerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
-  double outerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTCooling = ((*tsci)[2]->getDouble("ZMAX")-(*tsci)[2]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTCooling = 0.5 * ((*tsci)[2]->getDouble("ZMAX")+(*tsci)[2]->getDouble("ZMIN"))*CLHEP::cm;
+  double innerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
+  double outerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTCooling = ((*tsci)[2]->getDouble("ZMAX")-(*tsci)[2]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTCooling = 0.5 * ((*tsci)[2]->getDouble("ZMAX")+(*tsci)[2]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
 
 
   // For new LMT we get name from SCT table ZSCG.
@@ -104,15 +106,15 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
     // We define it here for now as a quick fix.
     
     // Thickness of CuK 896 tapes smeared in phi = 0.08575cm
-    double tapeCrossSection = (*zscg)[0]->getDouble("ALAREA")*CLHEP::cm2;
+    double tapeCrossSection = (*zscg)[0]->getDouble("ALAREA")*GeoModelKernelUnits::cm2;
     double rave = 2*innerRadiusOfSCTCables*outerRadiusOfSCTCables/(innerRadiusOfSCTCables+outerRadiusOfSCTCables);
-    double thickness = 988*tapeCrossSection/(2*CLHEP::pi*rave);
+    double thickness = 988*tapeCrossSection/(2*GeoModelKernelUnits::pi*rave);
     // We need to scale the density to fit in with space given.
-    //std::cout << "LMT thickness (CLHEP::mm) = " << thickness/CLHEP::mm << std::endl;
+    //std::cout << "LMT thickness (GeoModelKernelUnits::mm) = " << thickness/GeoModelKernelUnits::mm << std::endl;
     double densityfactor = thickness/lengthOfSCTCables;
     const GeoElement  *copper  = m_materialManager->getElement("Copper");
     const GeoMaterial *kapton  = m_materialManager->getMaterial("std::Kapton");
-    GeoMaterial * matCuKapton   = new GeoMaterial("CuKaptoninTRT",densityfactor * 2.94*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial * matCuKapton   = new GeoMaterial("CuKaptoninTRT",densityfactor * 2.94*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
     matCuKapton->add(const_cast<GeoElement*>(copper),  0.6142);
     matCuKapton->add(const_cast<GeoMaterial*>(kapton), 0.3858);
     matCuKapton->lock();
@@ -125,8 +127,8 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
   GeoTube    *sSCTSupport = new GeoTube( innerRadiusOfSCTSupport, outerRadiusOfSCTSupport, 0.5*lengthOfSCTSupport); 
   GeoLogVol  *lSCTSupport = new GeoLogVol("SCTSupport", sSCTSupport, sctCablesMaterial);
   GeoPhysVol *pSCTSupport = new GeoPhysVol(lSCTSupport);
-  GeoTransform *xSCTSupportPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTSupport));
-  GeoTransform *xSCTSupportMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTSupport));
+  GeoTransform *xSCTSupportPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTSupport));
+  GeoTransform *xSCTSupportMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTSupport));
   mother->add(xSCTSupportPlus);
   mother->add(pSCTSupport);
   mother->add(xSCTSupportMinus);
@@ -136,8 +138,8 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
   GeoTube    *sSCTCables = new GeoTube(innerRadiusOfSCTCables, outerRadiusOfSCTCables, 0.5*lengthOfSCTCables); 
   GeoLogVol  *lSCTCables = new GeoLogVol("SCTCables", sSCTCables, m_materialManager->getMaterial("trt::SCTCables"));
   GeoPhysVol *pSCTCables = new GeoPhysVol(lSCTCables);
-  GeoTransform *xSCTCablesPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTCables ));
-  GeoTransform *xSCTCablesMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTCables ));
+  GeoTransform *xSCTCablesPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTCables ));
+  GeoTransform *xSCTCablesMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTCables ));
 
   mother->add(xSCTCablesPlus);
   mother->add(pSCTCables);
@@ -149,8 +151,8 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
   GeoTube    *sSCTCooling = new GeoTube( innerRadiusOfSCTCooling, outerRadiusOfSCTCooling, 0.5*lengthOfSCTCooling); 
   GeoLogVol  *lSCTCooling = new GeoLogVol("SCTCooling", sSCTCooling, m_materialManager->getMaterial("trt::SCTCooling"));
   GeoPhysVol *pSCTCooling = new GeoPhysVol(lSCTCooling);
-  GeoTransform *xSCTCoolingPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTCooling ));
-  GeoTransform *xSCTCoolingMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTCooling ));
+  GeoTransform *xSCTCoolingPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTCooling ));
+  GeoTransform *xSCTCoolingMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTCooling ));
   mother->add(xSCTCoolingPlus);
   mother->add(pSCTCooling);
   mother->add(xSCTCoolingMinus);
@@ -165,15 +167,15 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
     std::ostringstream o;
     o << jj;
     std::string logName = "SctInel"+o.str();  
-    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm;
+    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm;
     int volType = (int) (*inel)[ii]->getFloat("VOLTYP");
 
     const GeoShape* serviceTube = createShape(volType,
-					      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+					      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 					      halflength,
-					      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm);
+					      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm);
     
 
     // create the material...
@@ -192,21 +194,21 @@ void SCT_ServMatFactoryDC2::create(GeoPhysVol *mother)
       cylMat = createMaterial(nameStr.str(),
 			      volType,
 			      fractionRL,
-			      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+			      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 			      halflength,
-			      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm); 
+			      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm); 
     }
 
     const GeoLogVol* ServLog = new GeoLogVol(logName,serviceTube,cylMat);
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
-    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm+epsilon;
+    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm+epsilon;
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -225,7 +227,7 @@ const GeoShape* SCT_ServMatFactoryDC2::createShape(int volType,
 						double rmax2=0.) 
   
 {
-  const double epsilon = 0.001*CLHEP::mm;
+  const double epsilon = 0.001*GeoModelKernelUnits::mm;
   enum VOLTYPE{Tube=1, Cone, ICone};
   const GeoShape* IDShape = 0;
   if(volType == Tube) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC3.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC3.cxx
index 9003a271c909b3deb74c3dc59bdff2b1306178b5..2f2ff0f25c4fe050710519fbe269aca9c43d3b46 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC3.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryDC3.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SCT_ServMatFactoryDC3.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -64,10 +66,10 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   //const IRDBRecordset* sctFwdServices = rdbAccessSvc()->getRecordset("SctFwdServices", sctVersionKey.tag(), sctVersionKey.node());
 
 //VVK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
-  double minRofGap  =       1050.0*CLHEP::mm;
-  double phiWid=(70.*CLHEP::mm)/outROfIDet;    double safetyGap=1.*CLHEP::mm;
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
+  double minRofGap  =       1050.0*GeoModelKernelUnits::mm;
+  double phiWid=(70.*GeoModelKernelUnits::mm)/outROfIDet;    double safetyGap=1.*GeoModelKernelUnits::mm;
   const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
 					-phiWid/2.,phiWid);
   const GeoShape* railGap2=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
@@ -80,25 +82,25 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   // (Code taken from TRT_GeoModel)
   
   // Hardwire min sct services for now. The database structures should be moved out of TRT anyway.
-  double rminSCTServ = 620*CLHEP::mm;
+  double rminSCTServ = 620*GeoModelKernelUnits::mm;
 
-  //double innerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
+  //double innerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
   double innerRadiusOfSCTSupport =  rminSCTServ + 2*epsilon;
-  double outerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTSupport = ((*tsci)[0]->getDouble("ZMAX")-(*tsci)[0]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTSupport= 0.5 * ((*tsci)[0]->getDouble("ZMAX")+(*tsci)[0]->getDouble("ZMIN"))*CLHEP::cm;
+  double outerRadiusOfSCTSupport = (*tsci)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTSupport = ((*tsci)[0]->getDouble("ZMAX")-(*tsci)[0]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTSupport= 0.5 * ((*tsci)[0]->getDouble("ZMAX")+(*tsci)[0]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
 
-  //double innerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
+  //double innerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
   double innerRadiusOfSCTCables = rminSCTServ + 2*epsilon;
-  double outerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTCables = ((*tsci)[1]->getDouble("ZMAX")-(*tsci)[1]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTCables = 0.5 * ((*tsci)[1]->getDouble("ZMAX")+(*tsci)[1]->getDouble("ZMIN"))*CLHEP::cm;
+  double outerRadiusOfSCTCables = (*tsci)[1]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTCables = ((*tsci)[1]->getDouble("ZMAX")-(*tsci)[1]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTCables = 0.5 * ((*tsci)[1]->getDouble("ZMAX")+(*tsci)[1]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
  
-  //double innerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMIN")*CLHEP::cm + 2*epsilon;
+  //double innerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMIN")*GeoModelKernelUnits::cm + 2*epsilon;
   double innerRadiusOfSCTCooling = rminSCTServ + 2*epsilon;
-  double outerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMAX")*CLHEP::cm;
-  double lengthOfSCTCooling = ((*tsci)[2]->getDouble("ZMAX")-(*tsci)[2]->getDouble("ZMIN"))*CLHEP::cm - epsilon;
-  double positionOfSCTCooling = 0.5 * ((*tsci)[2]->getDouble("ZMAX")+(*tsci)[2]->getDouble("ZMIN"))*CLHEP::cm;
+  double outerRadiusOfSCTCooling = (*tsci)[2]->getDouble("RMAX")*GeoModelKernelUnits::cm;
+  double lengthOfSCTCooling = ((*tsci)[2]->getDouble("ZMAX")-(*tsci)[2]->getDouble("ZMIN"))*GeoModelKernelUnits::cm - epsilon;
+  double positionOfSCTCooling = 0.5 * ((*tsci)[2]->getDouble("ZMAX")+(*tsci)[2]->getDouble("ZMIN"))*GeoModelKernelUnits::cm;
 
 
   // For new LMT we get name from SCT table SctFwdServices.
@@ -113,15 +115,15 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
     // We define it here for now as a quick fix.
     
     // Thickness of CuK 896 tapes smeared in phi = 0.08575cm
-    double tapeCrossSection = (*sctFwdServices)[0]->getDouble("POWERTAPECROSSSECT")*CLHEP::mm2;
+    double tapeCrossSection = (*sctFwdServices)[0]->getDouble("POWERTAPECROSSSECT")*GeoModelKernelUnits::mm2;
     double rave = 2*innerRadiusOfSCTCables*outerRadiusOfSCTCables/(innerRadiusOfSCTCables+outerRadiusOfSCTCables);
-    double thickness = 988*tapeCrossSection/(2*CLHEP::pi*rave);
+    double thickness = 988*tapeCrossSection/(2*GeoModelKernelUnits::pi*rave);
     // We need to scale the density to fit in with space given.
-    //std::cout << "LMT thickness (mm) = " << thickness/CLHEP::mm << std::endl;
+    //std::cout << "LMT thickness (mm) = " << thickness/GeoModelKernelUnits::mm << std::endl;
     double densityfactor = thickness/lengthOfSCTCables;
     const GeoElement  *copper  = m_materialManager->getElement("Copper");
     const GeoMaterial *kapton  = m_materialManager->getMaterial("std::Kapton");
-    GeoMaterial * matCuKapton   = new GeoMaterial("CuKaptoninTRT",densityfactor * 2.94*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial * matCuKapton   = new GeoMaterial("CuKaptoninTRT",densityfactor * 2.94*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
     matCuKapton->add(const_cast<GeoElement*>(copper),  0.6142);
     matCuKapton->add(const_cast<GeoMaterial*>(kapton), 0.3858);
     matCuKapton->lock();
@@ -138,8 +140,8 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   GeoTube    *sSCTSupport = new GeoTube( innerRadiusOfSCTSupport, outerRadiusOfSCTSupport, 0.5*lengthOfSCTSupport); 
   GeoLogVol  *lSCTSupport = new GeoLogVol("SCTSupport", sSCTSupport, sctCablesMaterial);
   GeoPhysVol *pSCTSupport = new GeoPhysVol(lSCTSupport);
-  GeoTransform *xSCTSupportPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTSupport));
-  GeoTransform *xSCTSupportMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTSupport));
+  GeoTransform *xSCTSupportPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTSupport));
+  GeoTransform *xSCTSupportMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTSupport));
   mother->add(xSCTSupportPlus);
   mother->add(pSCTSupport);
   mother->add(xSCTSupportMinus);
@@ -149,8 +151,8 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   GeoTube    *sSCTCables = new GeoTube(innerRadiusOfSCTCables, outerRadiusOfSCTCables, 0.5*lengthOfSCTCables); 
   GeoLogVol  *lSCTCables = new GeoLogVol("SCTCables", sSCTCables, materialManager()->getMaterial("trt::SCTCables"));
   GeoPhysVol *pSCTCables = new GeoPhysVol(lSCTCables);
-  GeoTransform *xSCTCablesPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTCables ));
-  GeoTransform *xSCTCablesMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTCables ));
+  GeoTransform *xSCTCablesPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTCables ));
+  GeoTransform *xSCTCablesMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTCables ));
 
   mother->add(xSCTCablesPlus);
   mother->add(pSCTCables);
@@ -162,8 +164,8 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   GeoTube    *sSCTCooling = new GeoTube( innerRadiusOfSCTCooling, outerRadiusOfSCTCooling, 0.5*lengthOfSCTCooling); 
   GeoLogVol  *lSCTCooling = new GeoLogVol("SCTCooling", sSCTCooling, materialManager()->getMaterial("trt::SCTCooling"));
   GeoPhysVol *pSCTCooling = new GeoPhysVol(lSCTCooling);
-  GeoTransform *xSCTCoolingPlus  = new GeoTransform(HepGeom::TranslateZ3D(+positionOfSCTCooling ));
-  GeoTransform *xSCTCoolingMinus = new GeoTransform(HepGeom::TranslateZ3D(-positionOfSCTCooling ));
+  GeoTransform *xSCTCoolingPlus  = new GeoTransform(GeoTrf::TranslateZ3D(+positionOfSCTCooling ));
+  GeoTransform *xSCTCoolingMinus = new GeoTransform(GeoTrf::TranslateZ3D(-positionOfSCTCooling ));
   mother->add(xSCTCoolingPlus);
   mother->add(pSCTCooling);
   mother->add(xSCTCoolingMinus);
@@ -183,19 +185,19 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
     std::ostringstream o;
     o << irecold++;
     std::string logName = "SctInel"+o.str();  
-    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm;
+    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm;
     int volType = (int) (*inel)[ii]->getFloat("VOLTYP");
 
     const GeoShape* serviceTubeTmp1 = createShape(volType,
-					      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+					      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 					      halflength,
-					      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm);
+					      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm);
 
     const GeoShape* serviceTube = serviceTubeTmp1;
-    if( (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm  > minRofGap   ||
-        (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm  > minRofGap     )  {
+    if( (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm  > minRofGap   ||
+        (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm  > minRofGap     )  {
 //
 //VVK Subtract RailGap out of services
         const GeoShape* serviceTubeTmp2 = (GeoShape*) & (*serviceTubeTmp1).subtract(*railGap1);
@@ -221,21 +223,21 @@ void SCT_ServMatFactoryDC3::create(GeoPhysVol *mother)
       cylMat = createMaterial(nameStr.str(),
 			      volType,
 			      fractionRL,
-			      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+			      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 			      halflength,
-			      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm); 
+			      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm); 
     }
 
     const GeoLogVol* ServLog = new GeoLogVol(logName,serviceTube,cylMat);
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
-    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm+epsilon;
+    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm+epsilon;
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -255,7 +257,7 @@ const GeoShape* SCT_ServMatFactoryDC3::createShape(int volType,
 						double rmax2=0.) 
   
 {
-  const double epsilon = 0.001*CLHEP::mm;
+  const double epsilon = 0.001*GeoModelKernelUnits::mm;
   enum VOLTYPE{Tube=1, Cone, ICone};
   const GeoShape* IDShape = 0;
   if(volType == Tube) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryFS.cxx
index a63fe0fc192a6200fdd8ceeb0cacad083f957a6a..a519849def8bf7714f02cfaa372b2a945bd293c1 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SCT_ServMatFactoryFS.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SCT_ServMatFactoryFS.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTubs.h"  
@@ -72,11 +74,11 @@ void SCT_ServMatFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 
   //------------------------------------------
   //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
-  double minRofGap  =       1089.0*CLHEP::mm;
-  double phiWid=(70.*CLHEP::mm)/outROfIDet;   
-  double safetyGap=1.*CLHEP::mm;
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
+  double minRofGap  =       1089.0*GeoModelKernelUnits::mm;
+  double phiWid=(70.*GeoModelKernelUnits::mm)/outROfIDet;   
+  double safetyGap=1.*GeoModelKernelUnits::mm;
   const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
 					-phiWid/2.,phiWid);
   const GeoShape* railGap2=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
@@ -157,7 +159,7 @@ void SCT_ServMatFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 
 	// Shape 2. Cons component of the pcon
 	cons = new GeoCons(servicePcon->getRMinPlane(1),servicePcon->getRMinPlane(2),
-			   servicePcon->getRMaxPlane(1),servicePcon->getRMaxPlane(2)+1E-9*CLHEP::mm,
+			   servicePcon->getRMaxPlane(1),servicePcon->getRMaxPlane(2)+1E-9*GeoModelKernelUnits::mm,
 			   (servicePcon->getZPlane(2)-servicePcon->getZPlane(1))*0.5,
 			   0,2*M_PI);
 
@@ -216,12 +218,12 @@ void SCT_ServMatFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 
     for (unsigned int ii =0; ii < sctsup->size(); ii++) {
       
-      RMinW        = (*sctsup)[ii]->getFloat("RMIN")*CLHEP::mm;
-      RMaxW        = (*sctsup)[ii]->getFloat("RMAX")*CLHEP::mm;
-      ZHalfLengthW = (*sctsup)[ii]->getFloat("THICK")/2.*CLHEP::mm;
-      WidI         = (*sctsup)[ii]->getFloat("WIDTHINNER")*CLHEP::mm;
-      WidO         = (*sctsup)[ii]->getFloat("WIDTHOUTER")*CLHEP::mm;
-      ZStartW      = (*sctsup)[ii]->getFloat("ZSTART")*CLHEP::mm;
+      RMinW        = (*sctsup)[ii]->getFloat("RMIN")*GeoModelKernelUnits::mm;
+      RMaxW        = (*sctsup)[ii]->getFloat("RMAX")*GeoModelKernelUnits::mm;
+      ZHalfLengthW = (*sctsup)[ii]->getFloat("THICK")/2.*GeoModelKernelUnits::mm;
+      WidI         = (*sctsup)[ii]->getFloat("WIDTHINNER")*GeoModelKernelUnits::mm;
+      WidO         = (*sctsup)[ii]->getFloat("WIDTHOUTER")*GeoModelKernelUnits::mm;
+      ZStartW      = (*sctsup)[ii]->getFloat("ZSTART")*GeoModelKernelUnits::mm;
       DPhi = asin(WidI/2./RMinW);
       
       const GeoShape* pTub1 = new GeoTubs(RMinW, RMaxW, ZHalfLengthW, 0.-DPhi, 2.*DPhi);  //Basic shape
@@ -236,7 +238,7 @@ void SCT_ServMatFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 	//	double DPhiDop = asin(WidI/2./(Shift-H1));
 	double DPhiDop = atan(WidI/2./(Shift-H1));
 	const GeoShape* pTub2 = new GeoTubs(0., RMaxDop, ZHalfLengthW, M_PI-DPhiDop, 2.*DPhiDop);
-	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << HepGeom::TranslateX3D(Shift));
+	const GeoShape* pTub3 = (GeoShape*) & ((*pTub2) << GeoTrf::TranslateX3D(Shift));
 	wing  = (GeoShape*) & (*pTub1).intersect(*pTub3);  
 	
 	// GeoModel calculates the volume incorrectly so we calculate it here.
@@ -269,10 +271,10 @@ void SCT_ServMatFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
       
       const GeoLogVol* wingLog = new GeoLogVol(logName,wing,wingMat);
       GeoVPhysVol* wingPhys    = new GeoPhysVol(wingLog);
-      GeoTransform* wPos1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0., ZStartW+ZHalfLengthW)));
-      GeoTransform* wPos3 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
-      GeoTransform* wPos4 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(M_PI,0.,0.),CLHEP::Hep3Vector(0.,0.,-ZStartW-ZHalfLengthW)));
+      GeoTransform* wPos1 = new GeoTransform(GeoTrf::Translate3D(0.,0., ZStartW+ZHalfLengthW));
+      GeoTransform* wPos2 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(M_PI,0.,0.),GeoTrf::Vector3D(0.,0., ZStartW+ZHalfLengthW)));
+      GeoTransform* wPos3 = new GeoTransform(GeoTrf::Translate3D(0.,0.,-ZStartW-ZHalfLengthW));
+      GeoTransform* wPos4 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(M_PI,0.,0.),GeoTrf::Vector3D(0.,0.,-ZStartW-ZHalfLengthW)));
       motherP->add(wPos1);
       motherP->add(wingPhys);
       motherP->add(wPos2);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/ServiceVolume.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/ServiceVolume.cxx
index 6ffacbd81c18cc09a48c7af9cbdc382233199445..9b96b7a7738f87e87c89b9994ef1cec715c63220 100644
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/ServiceVolume.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/ServiceVolume.cxx
@@ -6,7 +6,7 @@
 
 #include "InDetServMatGeoModel/ServicesLayer.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include <iostream>
 
 void ServiceVolume::dump( bool dumpMaterial) const
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactory.cxx
index a4fc9ad753da634a2bba22dd0ea4e0e98df80b5f..291fc8bde5358a70a6bf65c10690466a48ab20c0 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactory.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SquirrelCageFactory.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -68,37 +70,37 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //     Squirrel cage rings
 //  Default (initial) ring parameters
 //
-//     double rminInt    = 1074.0*CLHEP::mm;
-//     double ringThick  = 4.0*CLHEP::mm;
-//     double ringGap    = 20.*CLHEP::mm;
-//     double ringWid    = 40.*CLHEP::mm;
+//     double rminInt    = 1074.0*GeoModelKernelUnits::mm;
+//     double ringThick  = 4.0*GeoModelKernelUnits::mm;
+//     double ringGap    = 20.*GeoModelKernelUnits::mm;
+//     double ringWid    = 40.*GeoModelKernelUnits::mm;
 //
-    double rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
-    double ringThick  = (*cage)[0]->getDouble("RINGTHICK")*CLHEP::mm;
-    double ringGap    = (*cage)[0]->getDouble("RINGGAP")*CLHEP::mm;
-    double ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*CLHEP::mm;
+    double rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
+    double ringThick  = (*cage)[0]->getDouble("RINGTHICK")*GeoModelKernelUnits::mm;
+    double ringGap    = (*cage)[0]->getDouble("RINGGAP")*GeoModelKernelUnits::mm;
+    double ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*GeoModelKernelUnits::mm;
 //
 //--- Default (initial) z positions
-//     double zposFirstRing  = 805.0*CLHEP::mm+161.0*CLHEP::mm;
-//     double zposGap1  = 390.*CLHEP::mm;
-//     double zposGap2  = 402.*CLHEP::mm;
-//     double zposGap3  = 446.*CLHEP::mm;
-//     double zposGap4  = 331.*CLHEP::mm;
+//     double zposFirstRing  = 805.0*GeoModelKernelUnits::mm+161.0*GeoModelKernelUnits::mm;
+//     double zposGap1  = 390.*GeoModelKernelUnits::mm;
+//     double zposGap2  = 402.*GeoModelKernelUnits::mm;
+//     double zposGap3  = 446.*GeoModelKernelUnits::mm;
+//     double zposGap4  = 331.*GeoModelKernelUnits::mm;
 //
-    double zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*CLHEP::mm;
-    double zposGap1  = (*cage)[0]->getDouble("ZGAP1")*CLHEP::mm;
-    double zposGap2  = (*cage)[0]->getDouble("ZGAP2")*CLHEP::mm;
-    double zposGap3  = (*cage)[0]->getDouble("ZGAP3")*CLHEP::mm;
-    double zposGap4  = (*cage)[0]->getDouble("ZGAP4")*CLHEP::mm;
+    double zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*GeoModelKernelUnits::mm;
+    double zposGap1  = (*cage)[0]->getDouble("ZGAP1")*GeoModelKernelUnits::mm;
+    double zposGap2  = (*cage)[0]->getDouble("ZGAP2")*GeoModelKernelUnits::mm;
+    double zposGap3  = (*cage)[0]->getDouble("ZGAP3")*GeoModelKernelUnits::mm;
+    double zposGap4  = (*cage)[0]->getDouble("ZGAP4")*GeoModelKernelUnits::mm;
 //
 // Now support ring
-//     double rminSup    = 830.0*CLHEP::mm;
-//     double supThick   = 90.0*CLHEP::mm;
-//     double supWid     = 12.0*CLHEP::mm;
+//     double rminSup    = 830.0*GeoModelKernelUnits::mm;
+//     double supThick   = 90.0*GeoModelKernelUnits::mm;
+//     double supWid     = 12.0*GeoModelKernelUnits::mm;
 //
-    double rminSup    = (*cage)[0]->getDouble("SUPRMIN")*CLHEP::mm;
-    double supThick   = (*cage)[0]->getDouble("SUPTHICK")*CLHEP::mm;
-    double supWid     = (*cage)[0]->getDouble("SUPWIDTH")*CLHEP::mm;
+    double rminSup    = (*cage)[0]->getDouble("SUPRMIN")*GeoModelKernelUnits::mm;
+    double supThick   = (*cage)[0]->getDouble("SUPTHICK")*GeoModelKernelUnits::mm;
+    double supWid     = (*cage)[0]->getDouble("SUPWIDTH")*GeoModelKernelUnits::mm;
 //
     double zposSupRing  = zposFirstRing+ringWid*5. + zposGap1 + zposGap2 + zposGap3 + zposGap4;
 
@@ -170,11 +172,11 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
     GeoBox* UShapePart2 = new GeoBox(xDepthUSP2/2., yWidthUSP2/2., zLengthUS/2.);
     GeoBox* UShapePart3 = new GeoBox(xDepthUSP3/2., yWidthUSP3/2., zLengthUS/2.);
 
-    CLHEP::Hep3Vector trans1UShapeP2(xDepthUSP2/2. - xDepthUSP1/2., yWidthUSP1/2. + yWidthUSP2/2., 0.);
-    CLHEP::Hep3Vector trans2UShapeP2(- xDepthUSP2/2. + xDepthUSP1/2., yWidthUSP1/2. + yWidthUSP2/2., 0.);
+    GeoTrf::Vector3D trans1UShapeP2(xDepthUSP2/2. - xDepthUSP1/2., yWidthUSP1/2. + yWidthUSP2/2., 0.);
+    GeoTrf::Vector3D trans2UShapeP2(- xDepthUSP2/2. + xDepthUSP1/2., yWidthUSP1/2. + yWidthUSP2/2., 0.);
 
-    CLHEP::Hep3Vector trans1UShapeP3(xDepthUSP3/2. - xDepthUSP1/2., - yWidthUSP1/2. - yWidthUSP3/2., 0.);
-    CLHEP::Hep3Vector trans2UShapeP3(- xDepthUSP3/2. + xDepthUSP1/2., - yWidthUSP1/2. - yWidthUSP3/2., 0.);
+    GeoTrf::Vector3D trans1UShapeP3(xDepthUSP3/2. - xDepthUSP1/2., - yWidthUSP1/2. - yWidthUSP3/2., 0.);
+    GeoTrf::Vector3D trans2UShapeP3(- xDepthUSP3/2. + xDepthUSP1/2., - yWidthUSP1/2. - yWidthUSP3/2., 0.);
 
 //Determining the exact place of "U" Shape support
 
@@ -194,14 +196,14 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //Inner 
    
     double phiICRT = asin((yWidthUSP1/2. + yWidthUSP2 + coordY) / rminInt);
-    double DphiICRT = CLHEP::pi - 2*phiICRT;
+    double DphiICRT = GeoModelKernelUnits::pi - 2*phiICRT;
  
     double phiICRB = asin((yWidthUSP1/2. + yWidthUSP2 - coordY) / rminInt);
-    double DphiICRB = CLHEP::pi - 2*phiICRB;
+    double DphiICRB = GeoModelKernelUnits::pi - 2*phiICRB;
 
     GeoTubs* ICRT = new GeoTubs(rminInt, rminInt + ringThick, ringWid/2., phiICRT, DphiICRT);
   
-    GeoTubs* ICRB = new GeoTubs(rminInt, rminInt + ringThick, ringWid/2., CLHEP::pi + phiICRB, DphiICRB);
+    GeoTubs* ICRB = new GeoTubs(rminInt, rminInt + ringThick, ringWid/2., GeoModelKernelUnits::pi + phiICRB, DphiICRB);
 
 
     const GeoLogVol* ICRTLog = new GeoLogVol("SQringIntTop", ICRT, ringMat);
@@ -213,10 +215,10 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //Outer
   
     double phiECRT = asin((yWidthUSP1/2. + yWidthUSP2 + coordY) / (rminInt+ringGap+ringThick));
-    double DphiECRT = CLHEP::pi - 2*phiECRT;
+    double DphiECRT = GeoModelKernelUnits::pi - 2*phiECRT;
 
     double phiECRB = asin((yWidthUSP1/2. + yWidthUSP2 - coordY) / (rminInt+ringGap+ringThick));
-    double DphiECRB = CLHEP::pi - 2*phiECRB;
+    double DphiECRB = GeoModelKernelUnits::pi - 2*phiECRB;
 
 //     std::cerr << "phiET: " << phiECRT << ", DphiET: " << DphiECRT << std::endl;
 //     std::cerr << "phiIT: " << phiICRT << ", DphiIT: " << DphiICRT << std::endl;
@@ -224,7 +226,7 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //     std::cerr << "phiIB: " << phiICRB << ", DphiIB: " << DphiICRB << std::endl;
 
     GeoTubs* ECRT = new GeoTubs(rminInt+ringGap+ringThick, rminInt+2.*ringThick+ringGap, ringWid/2., phiECRT, DphiECRT);
-    GeoTubs* ECRB = new GeoTubs(rminInt+ringGap+ringThick, rminInt+2.*ringThick+ringGap, ringWid/2., CLHEP::pi + phiECRB, DphiECRB);
+    GeoTubs* ECRB = new GeoTubs(rminInt+ringGap+ringThick, rminInt+2.*ringThick+ringGap, ringWid/2., GeoModelKernelUnits::pi + phiECRB, DphiECRB);
 
     const GeoLogVol* ECRTLog = new GeoLogVol("SQringExtTop", ECRT, ringMat);
     GeoVPhysVol* ECRTPhys = new GeoPhysVol(ECRTLog);
@@ -241,26 +243,26 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //Positioning and adding to geometry
 //Rings
         
-    CLHEP::Hep3Vector  servpos1(0.,0., zposFirstRing+ringWid/2.);
-    CLHEP::Hep3Vector  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
-    CLHEP::Hep3Vector  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
-    CLHEP::Hep3Vector  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
-    CLHEP::Hep3Vector  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
-    CLHEP::Hep3Vector  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
-    CLHEP::Hep3Vector  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
-    CLHEP::Hep3Vector  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
-    CLHEP::Hep3Vector  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
-    CLHEP::Hep3Vector servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
-    GeoTransform *xform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos1));
-    GeoTransform *xform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,0.),servpos2));
-    GeoTransform *xform3  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos3));
-    GeoTransform *xform4  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,0.),servpos4));
-    GeoTransform *xform5  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos5));
-    GeoTransform *xform6  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,0.),servpos6));
-    GeoTransform *xform7  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos7));
-    GeoTransform *xform8  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,0.),servpos8));
-    GeoTransform *xform9  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos9));
-    GeoTransform *xform10 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,0.),servpos10));
+    GeoTrf::Translate3D  servpos1(0.,0., zposFirstRing+ringWid/2.);
+    GeoTrf::Translate3D  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
+    GeoTrf::Translate3D  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
+    GeoTrf::Translate3D  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
+    GeoTrf::Translate3D  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
+    GeoTrf::Translate3D  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
+    GeoTrf::Translate3D  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
+    GeoTrf::Translate3D  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
+    GeoTrf::Translate3D  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
+    GeoTrf::Translate3D  servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
+    GeoTransform *xform1  = new GeoTransform(servpos1);
+    GeoTransform *xform2  = new GeoTransform(servpos2);
+    GeoTransform *xform3  = new GeoTransform(servpos3);
+    GeoTransform *xform4  = new GeoTransform(servpos4);
+    GeoTransform *xform5  = new GeoTransform(servpos5);
+    GeoTransform *xform6  = new GeoTransform(servpos6);
+    GeoTransform *xform7  = new GeoTransform(servpos7);
+    GeoTransform *xform8  = new GeoTransform(servpos8);
+    GeoTransform *xform9  = new GeoTransform(servpos9);
+    GeoTransform *xform10 = new GeoTransform(servpos10);
     
     mother->add(xform1);   mother->add(ICRTPhys);   mother->add(xform1);   mother->add(ECRTPhys);
     mother->add(xform2);   mother->add(ICRTPhys);   mother->add(xform2);   mother->add(ECRTPhys);
@@ -286,45 +288,58 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 
 // "U Shape" support
 
-    CLHEP::Hep3Vector USSupCoordX(rminInt + xDepthUSP1/2., 0, 0);
+    GeoTrf::Vector3D USSupCoordX(rminInt + xDepthUSP1/2., 0, 0);
    
-    GeoTransform* transUSS;
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.)));
+    GeoTransform* transUSS{nullptr};
+    GeoTrf::Vector3D tmpVec(0,0,0);
+    tmpVec = USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.);
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP1);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.) + trans1UShapeP2 ));
+    tmpVec = USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.) + trans1UShapeP2;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP2);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.) + trans1UShapeP3 ));
+    tmpVec = USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.) + trans1UShapeP3 ;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP3);
 
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), -USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.)));
+    tmpVec = -USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.);
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP1);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), -USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.) + trans2UShapeP2 ));
+    tmpVec =  -USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.) + trans2UShapeP2;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP2);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), -USSupCoordX + CLHEP::Hep3Vector(0, coordY, bUSS + zLengthUS/2.) + trans2UShapeP3 ));
+    tmpVec = -USSupCoordX + GeoTrf::Vector3D(0, coordY, bUSS + zLengthUS/2.) + trans2UShapeP3;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP3);
 
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.)));
+    tmpVec = USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.);
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP1);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.) + trans1UShapeP2 ));
+    tmpVec = USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.) + trans1UShapeP2;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP2);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.) + trans1UShapeP3 ));
+    tmpVec = USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.) + trans1UShapeP3;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP3);
 
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.)));
+    tmpVec = - USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.);
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP1);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.) + trans2UShapeP2 ));
+    tmpVec = - USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.) + trans2UShapeP2;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP2);
-    transUSS = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - USSupCoordX - CLHEP::Hep3Vector(0, - coordY, bUSS + zLengthUS/2.) + trans2UShapeP3 ));
+    tmpVec = - USSupCoordX - GeoTrf::Vector3D(0, - coordY, bUSS + zLengthUS/2.) + trans2UShapeP3;
+    transUSS = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(transUSS);   mother->add(UShapePP3);
 
 
 
 //Support ring positioning
 
-    CLHEP::Hep3Vector  suppos1(0.,0., zposSupRing+supWid/2.);
-    CLHEP::Hep3Vector  suppos2(0.,0.,-zposSupRing-supWid/2.);
-    GeoTransform *sform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          suppos1));
-    GeoTransform *sform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),suppos2));
+    GeoTrf::Translate3D  suppos1(0.,0., zposSupRing+supWid/2.);
+    GeoTrf::Vector3D  suppos2(0.,0.,-zposSupRing-supWid/2.);
+    GeoTransform *sform1  = new GeoTransform(suppos1);
+    GeoTransform *sform2  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,M_PI,0),suppos2));
     mother->add(sform1);
     mother->add(ringPhysSup);
     mother->add(sform2);
@@ -351,46 +366,46 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //     Squirrel cage rings
 //  Default (initial) ring parameters
 //
-    double rminInt    = 1074.0*CLHEP::mm;
-    double ringThick  = 4.0*CLHEP::mm;
-    double ringGap    = 20.*CLHEP::mm;
-    double ringWid    = 40.*CLHEP::mm;
+    double rminInt    = 1074.0*GeoModelKernelUnits::mm;
+    double ringThick  = 4.0*GeoModelKernelUnits::mm;
+    double ringGap    = 20.*GeoModelKernelUnits::mm;
+    double ringWid    = 40.*GeoModelKernelUnits::mm;
 //
-    rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
-    ringThick  = (*cage)[0]->getDouble("RINGTHICK")*CLHEP::mm;
-    ringGap    = (*cage)[0]->getDouble("RINGGAP")*CLHEP::mm;
-    ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*CLHEP::mm;
+    rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
+    ringThick  = (*cage)[0]->getDouble("RINGTHICK")*GeoModelKernelUnits::mm;
+    ringGap    = (*cage)[0]->getDouble("RINGGAP")*GeoModelKernelUnits::mm;
+    ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*GeoModelKernelUnits::mm;
 //
 //--- Default (initial) z positions
-    double zposFirstRing  = 805.0*CLHEP::mm+161.0*CLHEP::mm;
-    double zposGap1  = 390.*CLHEP::mm;
-    double zposGap2  = 402.*CLHEP::mm;
-    double zposGap3  = 446.*CLHEP::mm;
-    double zposGap4  = 331.*CLHEP::mm;
+    double zposFirstRing  = 805.0*GeoModelKernelUnits::mm+161.0*GeoModelKernelUnits::mm;
+    double zposGap1  = 390.*GeoModelKernelUnits::mm;
+    double zposGap2  = 402.*GeoModelKernelUnits::mm;
+    double zposGap3  = 446.*GeoModelKernelUnits::mm;
+    double zposGap4  = 331.*GeoModelKernelUnits::mm;
 //
-    zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*CLHEP::mm;
-    zposGap1  = (*cage)[0]->getDouble("ZGAP1")*CLHEP::mm;
-    zposGap2  = (*cage)[0]->getDouble("ZGAP2")*CLHEP::mm;
-    zposGap3  = (*cage)[0]->getDouble("ZGAP3")*CLHEP::mm;
-    zposGap4  = (*cage)[0]->getDouble("ZGAP4")*CLHEP::mm;
+    zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*GeoModelKernelUnits::mm;
+    zposGap1  = (*cage)[0]->getDouble("ZGAP1")*GeoModelKernelUnits::mm;
+    zposGap2  = (*cage)[0]->getDouble("ZGAP2")*GeoModelKernelUnits::mm;
+    zposGap3  = (*cage)[0]->getDouble("ZGAP3")*GeoModelKernelUnits::mm;
+    zposGap4  = (*cage)[0]->getDouble("ZGAP4")*GeoModelKernelUnits::mm;
 //
 // Now support ring
-    double rminSup    = 830.0*CLHEP::mm;
-    double supThick   = 90.0*CLHEP::mm;
-    double supWid     = 12.0*CLHEP::mm;
+    double rminSup    = 830.0*GeoModelKernelUnits::mm;
+    double supThick   = 90.0*GeoModelKernelUnits::mm;
+    double supWid     = 12.0*GeoModelKernelUnits::mm;
 //
-    rminSup    = (*cage)[0]->getDouble("SUPRMIN")*CLHEP::mm;
-    supThick   = (*cage)[0]->getDouble("SUPTHICK")*CLHEP::mm;
-    supWid     = (*cage)[0]->getDouble("SUPWIDTH")*CLHEP::mm;
+    rminSup    = (*cage)[0]->getDouble("SUPRMIN")*GeoModelKernelUnits::mm;
+    supThick   = (*cage)[0]->getDouble("SUPTHICK")*GeoModelKernelUnits::mm;
+    supWid     = (*cage)[0]->getDouble("SUPWIDTH")*GeoModelKernelUnits::mm;
 //
     double zposSupRing  = zposFirstRing+ringWid*5. + zposGap1 + zposGap2 + zposGap3 + zposGap4;
 //
 // Now support ribbon
-    double ribWid     = 68.0*CLHEP::mm ;
-    ribWid = (*cage)[0]->getDouble("RIBWIDTH")*CLHEP::mm;
+    double ribWid     = 68.0*GeoModelKernelUnits::mm ;
+    ribWid = (*cage)[0]->getDouble("RIBWIDTH")*GeoModelKernelUnits::mm;
     double ribLeng    = ringWid*5. + zposGap1 + zposGap2 + zposGap3 + zposGap4;
     double ribThick = 0; 
-    if (sqversion >= 3) ribThick = (*cage)[0]->getDouble("RIBTHICK")*CLHEP::mm;
+    if (sqversion >= 3) ribThick = (*cage)[0]->getDouble("RIBTHICK")*GeoModelKernelUnits::mm;
     double safety =0.01;
     double ribThickMax = ringGap - 2*safety;
     if (ribThick == 0 || ribThick > ribThickMax) {
@@ -425,26 +440,26 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
     GeoVPhysVol* ringPhysSup = new GeoPhysVol(ringLogSup);
     GeoVPhysVol*  ribPhysSup = new GeoPhysVol(ribLogSup);
     
-    CLHEP::Hep3Vector  servpos1(0.,0., zposFirstRing+ringWid/2.);
-    CLHEP::Hep3Vector  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
-    CLHEP::Hep3Vector  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
-    CLHEP::Hep3Vector  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
-    CLHEP::Hep3Vector  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
-    CLHEP::Hep3Vector  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
-    CLHEP::Hep3Vector  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
-    CLHEP::Hep3Vector  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
-    CLHEP::Hep3Vector  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
-    CLHEP::Hep3Vector servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
-    GeoTransform *xform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos1));
-    GeoTransform *xform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos2));
-    GeoTransform *xform3  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos3));
-    GeoTransform *xform4  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos4));
-    GeoTransform *xform5  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos5));
-    GeoTransform *xform6  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos6));
-    GeoTransform *xform7  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos7));
-    GeoTransform *xform8  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos8));
-    GeoTransform *xform9  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos9));
-    GeoTransform *xform10 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos10));
+    GeoTrf::Translate3D  servpos1(0.,0., zposFirstRing+ringWid/2.);
+    GeoTrf::Translation3D  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
+    GeoTrf::Translate3D  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
+    GeoTrf::Translation3D  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
+    GeoTrf::Translate3D  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
+    GeoTrf::Translation3D  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
+    GeoTrf::Translate3D  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
+    GeoTrf::Translation3D  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
+    GeoTrf::Translate3D  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
+    GeoTrf::Translation3D servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
+    GeoTransform *xform1  = new GeoTransform(servpos1);
+    GeoTransform *xform2  = new GeoTransform(GeoTrf::Transform3D(servpos2*GeoTrf::RotateY3D(M_PI)));
+    GeoTransform *xform3  = new GeoTransform(servpos3);
+    GeoTransform *xform4  = new GeoTransform(GeoTrf::Transform3D(servpos4*GeoTrf::RotateY3D(M_PI)));
+    GeoTransform *xform5  = new GeoTransform(servpos5);
+    GeoTransform *xform6  = new GeoTransform(GeoTrf::Transform3D(servpos6*GeoTrf::RotateY3D(M_PI)));
+    GeoTransform *xform7  = new GeoTransform(servpos7);
+    GeoTransform *xform8  = new GeoTransform(GeoTrf::Transform3D(servpos8*GeoTrf::RotateY3D(M_PI)));
+    GeoTransform *xform9  = new GeoTransform(servpos9);
+    GeoTransform *xform10 = new GeoTransform(GeoTrf::Transform3D(servpos10*GeoTrf::RotateY3D(M_PI)));
     mother->add(xform1);
     mother->add(ringPhysInt);
     mother->add(xform1);
@@ -488,10 +503,10 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 
 //Support ring positioning
 
-    CLHEP::Hep3Vector  suppos1(0.,0., zposSupRing+supWid/2.);
-    CLHEP::Hep3Vector  suppos2(0.,0.,-zposSupRing-supWid/2.);
-    GeoTransform *sform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          suppos1));
-    GeoTransform *sform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),suppos2));
+    GeoTrf::Translate3D  suppos1(0.,0., zposSupRing+supWid/2.);
+    GeoTrf::Translation3D  suppos2(0.,0.,-zposSupRing-supWid/2.);
+    GeoTransform *sform1  = new GeoTransform(suppos1);
+    GeoTransform *sform2  = new GeoTransform(GeoTrf::Transform3D(suppos2*GeoTrf::RotateY3D(M_PI)));
     mother->add(sform1);
     mother->add(ringPhysSup);
     mother->add(sform2);
@@ -500,12 +515,12 @@ void SquirrelCageFactory::create(GeoPhysVol *mother)
 //Support ribbon positioning
 
 
-    CLHEP::Hep3Vector  ribpos1( 0., 0., zposFirstRing+ribLeng/2.);
-    CLHEP::Hep3Vector  ribpos2( 0., 0.,-zposFirstRing-ribLeng/2.);
-    GeoTransform *rform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          ribpos1));
-    GeoTransform *rform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,M_PI),ribpos1));
-    GeoTransform *rform3  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          ribpos2));
-    GeoTransform *rform4  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,M_PI),ribpos2));
+    GeoTrf::Translate3D  ribpos1( 0., 0., zposFirstRing+ribLeng/2.);
+    GeoTrf::Translate3D  ribpos2( 0., 0.,-zposFirstRing-ribLeng/2.);
+    GeoTransform *rform1  = new GeoTransform(ribpos1);
+    GeoTransform *rform2  = new GeoTransform(ribpos1*GeoTrf::RotateZ3D(M_PI));
+    GeoTransform *rform3  = new GeoTransform(ribpos2);
+    GeoTransform *rform4  = new GeoTransform(ribpos2*GeoTrf::RotateZ3D(M_PI));
 
 
     mother->add(rform1);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactoryFS.cxx
index 24b3b6aa352f8a55449b5ec2e103d6e72e54dcf0..5983eed14c9297b9d6baaada8ccce50e9aa59496 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SquirrelCageFactoryFS.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SquirrelCageFactoryFS.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -72,46 +74,46 @@ void SquirrelCageFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //     Squirrel cage rings
 //  Default (initial) ring parameters
 //
-    double rminInt    = 1074.0*CLHEP::mm;
-    double ringThick  = 4.0*CLHEP::mm;
-    double ringGap    = 20.*CLHEP::mm;
-    double ringWid    = 40.*CLHEP::mm;
+    double rminInt    = 1074.0*GeoModelKernelUnits::mm;
+    double ringThick  = 4.0*GeoModelKernelUnits::mm;
+    double ringGap    = 20.*GeoModelKernelUnits::mm;
+    double ringWid    = 40.*GeoModelKernelUnits::mm;
 //
-    rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
-    ringThick  = (*cage)[0]->getDouble("RINGTHICK")*CLHEP::mm;
-    ringGap    = (*cage)[0]->getDouble("RINGGAP")*CLHEP::mm;
-    ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*CLHEP::mm;
+    rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
+    ringThick  = (*cage)[0]->getDouble("RINGTHICK")*GeoModelKernelUnits::mm;
+    ringGap    = (*cage)[0]->getDouble("RINGGAP")*GeoModelKernelUnits::mm;
+    ringWid    = (*cage)[0]->getDouble("RINGWIDTH")*GeoModelKernelUnits::mm;
 //
 //--- Default (initial) z positions
-    double zposFirstRing  = 805.0*CLHEP::mm+161.0*CLHEP::mm;
-    double zposGap1  = 390.*CLHEP::mm;
-    double zposGap2  = 402.*CLHEP::mm;
-    double zposGap3  = 446.*CLHEP::mm;
-    double zposGap4  = 331.*CLHEP::mm;
+    double zposFirstRing  = 805.0*GeoModelKernelUnits::mm+161.0*GeoModelKernelUnits::mm;
+    double zposGap1  = 390.*GeoModelKernelUnits::mm;
+    double zposGap2  = 402.*GeoModelKernelUnits::mm;
+    double zposGap3  = 446.*GeoModelKernelUnits::mm;
+    double zposGap4  = 331.*GeoModelKernelUnits::mm;
 //
-    zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*CLHEP::mm;
-    zposGap1  = (*cage)[0]->getDouble("ZGAP1")*CLHEP::mm;
-    zposGap2  = (*cage)[0]->getDouble("ZGAP2")*CLHEP::mm;
-    zposGap3  = (*cage)[0]->getDouble("ZGAP3")*CLHEP::mm;
-    zposGap4  = (*cage)[0]->getDouble("ZGAP4")*CLHEP::mm;
+    zposFirstRing  = (*cage)[0]->getDouble("ZBASE")*GeoModelKernelUnits::mm;
+    zposGap1  = (*cage)[0]->getDouble("ZGAP1")*GeoModelKernelUnits::mm;
+    zposGap2  = (*cage)[0]->getDouble("ZGAP2")*GeoModelKernelUnits::mm;
+    zposGap3  = (*cage)[0]->getDouble("ZGAP3")*GeoModelKernelUnits::mm;
+    zposGap4  = (*cage)[0]->getDouble("ZGAP4")*GeoModelKernelUnits::mm;
 //
 // Now support ring
-    double rminSup    = 830.0*CLHEP::mm;
-    double supThick   = 90.0*CLHEP::mm;
-    double supWid     = 12.0*CLHEP::mm;
+    double rminSup    = 830.0*GeoModelKernelUnits::mm;
+    double supThick   = 90.0*GeoModelKernelUnits::mm;
+    double supWid     = 12.0*GeoModelKernelUnits::mm;
 //
-    rminSup    = (*cage)[0]->getDouble("SUPRMIN")*CLHEP::mm;
-    supThick   = (*cage)[0]->getDouble("SUPTHICK")*CLHEP::mm;
-    supWid     = (*cage)[0]->getDouble("SUPWIDTH")*CLHEP::mm;
+    rminSup    = (*cage)[0]->getDouble("SUPRMIN")*GeoModelKernelUnits::mm;
+    supThick   = (*cage)[0]->getDouble("SUPTHICK")*GeoModelKernelUnits::mm;
+    supWid     = (*cage)[0]->getDouble("SUPWIDTH")*GeoModelKernelUnits::mm;
 //
     double zposSupRing  = zposFirstRing+ringWid*5. + zposGap1 + zposGap2 + zposGap3 + zposGap4;
 //
 // Now support ribbon
-    double ribWid     = 68.0*CLHEP::mm ;
-    ribWid = (*cage)[0]->getDouble("RIBWIDTH")*CLHEP::mm;
+    double ribWid     = 68.0*GeoModelKernelUnits::mm ;
+    ribWid = (*cage)[0]->getDouble("RIBWIDTH")*GeoModelKernelUnits::mm;
     double ribLeng    = ringWid*5. + zposGap1 + zposGap2 + zposGap3 + zposGap4;
     double ribThick = 0; 
-    if (sqversion >= 3) ribThick = (*cage)[0]->getDouble("RIBTHICK")*CLHEP::mm;
+    if (sqversion >= 3) ribThick = (*cage)[0]->getDouble("RIBTHICK")*GeoModelKernelUnits::mm;
     double safety =0.01;
     double ribThickMax = ringGap - 2*safety;
     if (ribThick == 0 || ribThick > ribThickMax) {
@@ -146,26 +148,26 @@ void SquirrelCageFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
     GeoVPhysVol* ringPhysSup = new GeoPhysVol(ringLogSup);
     GeoVPhysVol*  ribPhysSup = new GeoPhysVol(ribLogSup);
     
-    CLHEP::Hep3Vector  servpos1(0.,0., zposFirstRing+ringWid/2.);
-    CLHEP::Hep3Vector  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
-    CLHEP::Hep3Vector  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
-    CLHEP::Hep3Vector  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
-    CLHEP::Hep3Vector  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
-    CLHEP::Hep3Vector  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
-    CLHEP::Hep3Vector  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
-    CLHEP::Hep3Vector  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
-    CLHEP::Hep3Vector  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
-    CLHEP::Hep3Vector servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
-    GeoTransform *xform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos1));
-    GeoTransform *xform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos2));
-    GeoTransform *xform3  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos3));
-    GeoTransform *xform4  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos4));
-    GeoTransform *xform5  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos5));
-    GeoTransform *xform6  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos6));
-    GeoTransform *xform7  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos7));
-    GeoTransform *xform8  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos8));
-    GeoTransform *xform9  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          servpos9));
-    GeoTransform *xform10 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),servpos10));
+    GeoTrf::Translate3D  servpos1(0.,0., zposFirstRing+ringWid/2.);
+    GeoTrf::Vector3D  servpos2(0.,0.,-zposFirstRing-ringWid/2.);
+    GeoTrf::Translate3D  servpos3(0.,0., zposFirstRing+ringWid*3./2. + zposGap1);
+    GeoTrf::Vector3D  servpos4(0.,0.,-zposFirstRing-ringWid*3./2. - zposGap1);
+    GeoTrf::Translate3D  servpos5(0.,0., zposFirstRing+ringWid*5./2. + zposGap1 + zposGap2);
+    GeoTrf::Vector3D  servpos6(0.,0.,-zposFirstRing-ringWid*5./2. - zposGap1 - zposGap2);
+    GeoTrf::Translate3D  servpos7(0.,0., zposFirstRing+ringWid*7./2. + zposGap1 + zposGap2 + zposGap3);
+    GeoTrf::Vector3D  servpos8(0.,0.,-zposFirstRing-ringWid*7./2. - zposGap1 - zposGap2 - zposGap3);
+    GeoTrf::Translate3D  servpos9(0.,0., zposFirstRing+ringWid*9./2. + zposGap1 + zposGap2 + zposGap3 + zposGap4);
+    GeoTrf::Vector3D servpos10(0.,0.,-zposFirstRing-ringWid*9./2. - zposGap1 - zposGap2 - zposGap3 - zposGap4);
+    GeoTransform *xform1  = new GeoTransform(servpos1);
+    GeoTransform *xform2  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos2));
+    GeoTransform *xform3  = new GeoTransform(servpos3);
+    GeoTransform *xform4  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos4));
+    GeoTransform *xform5  = new GeoTransform(servpos5);
+    GeoTransform *xform6  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos6));
+    GeoTransform *xform7  = new GeoTransform(servpos7);
+    GeoTransform *xform8  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos8));
+    GeoTransform *xform9  = new GeoTransform(servpos9);
+    GeoTransform *xform10 = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),servpos10));
     motherP->add(xform1);
     motherP->add(ringPhysInt);
     motherP->add(xform1);
@@ -209,10 +211,10 @@ void SquirrelCageFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 
 //Support ring positioning
 
-    CLHEP::Hep3Vector  suppos1(0.,0., zposSupRing+supWid/2.);
-    CLHEP::Hep3Vector  suppos2(0.,0.,-zposSupRing-supWid/2.);
-    GeoTransform *sform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          suppos1));
-    GeoTransform *sform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,M_PI,0.),suppos2));
+    GeoTrf::Translate3D  suppos1(0.,0., zposSupRing+supWid/2.);
+    GeoTrf::Vector3D  suppos2(0.,0.,-zposSupRing-supWid/2.);
+    GeoTransform *sform1  = new GeoTransform(suppos1);
+    GeoTransform *sform2  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,M_PI,0.),suppos2));
     motherP->add(sform1);
     motherP->add(ringPhysSup);
     motherM->add(sform2);
@@ -221,12 +223,12 @@ void SquirrelCageFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 //Support ribbon positioning
 
 
-    CLHEP::Hep3Vector  ribpos1( 0., 0., zposFirstRing+ribLeng/2.);
-    CLHEP::Hep3Vector  ribpos2( 0., 0.,-zposFirstRing-ribLeng/2.);
-    GeoTransform *rform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          ribpos1));
-    GeoTransform *rform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,M_PI),ribpos1));
-    GeoTransform *rform3  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),          ribpos2));
-    GeoTransform *rform4  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(0.,0.,M_PI),ribpos2));
+    GeoTrf::Vector3D  ribpos1( 0., 0., zposFirstRing+ribLeng/2.);
+    GeoTrf::Vector3D  ribpos2( 0., 0.,-zposFirstRing-ribLeng/2.);
+    GeoTransform *rform1  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,0,0),ribpos1));
+    GeoTransform *rform2  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,0.,M_PI),ribpos1));
+    GeoTransform *rform3  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,0,0),ribpos2));
+    GeoTransform *rform4  = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.,0.,M_PI),ribpos2));
 
 
     motherP->add(rform1);
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactory.cxx
index 346960aee288007ee9d63aff7b1e610351074e11..f6ca11d8b999bf50dba164f854d74e4be2ff2771 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactory.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SupportRailFactory.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -66,18 +68,18 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 //
 // Default(initial) values
 //    
-    double RMAX_ID      = 1150.0*CLHEP::mm -1.0*CLHEP::mm;   //Some safety margin
-    double railLengthB  = 1600.0*CLHEP::mm;
-    double railWidthB   = 5.5*CLHEP::mm;
-    double railThickB   = 34.7*CLHEP::mm;
+    double RMAX_ID      = 1150.0*GeoModelKernelUnits::mm -1.0*GeoModelKernelUnits::mm;   //Some safety margin
+    double railLengthB  = 1600.0*GeoModelKernelUnits::mm;
+    double railWidthB   = 5.5*GeoModelKernelUnits::mm;
+    double railThickB   = 34.7*GeoModelKernelUnits::mm;
 //
-    double railLengthE  = 2600.0*CLHEP::mm;
-//    double railWidthE   = 14.*CLHEP::mm;
-//    double railThickE   = 14.7*CLHEP::mm;
+    double railLengthE  = 2600.0*GeoModelKernelUnits::mm;
+//    double railWidthE   = 14.*GeoModelKernelUnits::mm;
+//    double railThickE   = 14.7*GeoModelKernelUnits::mm;
 //
-    double suppLength   = 6800.0*CLHEP::mm;
-    double suppWidth    = 54.*CLHEP::mm;
-//    double suppThick    = 22.6*CLHEP::mm;
+    double suppLength   = 6800.0*GeoModelKernelUnits::mm;
+    double suppWidth    = 54.*GeoModelKernelUnits::mm;
+//    double suppThick    = 22.6*GeoModelKernelUnits::mm;
 //
 //   Database 
 //
@@ -93,7 +95,7 @@ void SupportRailFactory::create(GeoPhysVol *mother)
     const GeoMaterial*  alum  = materialManager()->getMaterial((*railrec)[0]->getString("MATSUP"));
     
 //Radius of Squirrel cage
-    double rminInt = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
+    double rminInt = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
 //Thick of U Shape Support
     std::unique_ptr<IRDBQuery> queryUSP = rdbAccessSvc()->getQuery("IDDetRailUSP",indetVersionKey.tag(), indetVersionKey.node());
     if(!queryUSP)
@@ -110,21 +112,21 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 
     double epsilon = 0.01;  // +Some safety margin
  
-     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;  
-     //railLengthB = (*railrec)[0]->getDouble("LENGTHB")*CLHEP::mm; At database there is 34.7 but it could cause crash.
+     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;  
+     //railLengthB = (*railrec)[0]->getDouble("LENGTHB")*GeoModelKernelUnits::mm; At database there is 34.7 but it could cause crash.
 
-     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*CLHEP::mm;
-     railThickB  = (*railrec)[0]->getDouble("THICKB")*CLHEP::mm;
+     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*GeoModelKernelUnits::mm;
+     railThickB  = (*railrec)[0]->getDouble("THICKB")*GeoModelKernelUnits::mm;
   //------------ Limited by EP ExternalShell
-     railLengthE = (*endplate)[0]->getDouble("ZSTART")*CLHEP::mm  
-                  +(*endplate)[0]->getDouble("ZSHIFT")*CLHEP::mm
-                  +(*endplate)[0]->getDouble("ZGAP")*CLHEP::mm   - railLengthB/2.;
-//     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*CLHEP::mm;
-//     railThickE  = (*railrec)[0]->getDouble("THICKE")*CLHEP::mm;
+     railLengthE = (*endplate)[0]->getDouble("ZSTART")*GeoModelKernelUnits::mm  
+                  +(*endplate)[0]->getDouble("ZSHIFT")*GeoModelKernelUnits::mm
+                  +(*endplate)[0]->getDouble("ZGAP")*GeoModelKernelUnits::mm   - railLengthB/2.;
+//     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*GeoModelKernelUnits::mm;
+//     railThickE  = (*railrec)[0]->getDouble("THICKE")*GeoModelKernelUnits::mm;
  
      suppLength = railLengthB + 2.*railLengthE;
-     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*CLHEP::mm;
-//     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*CLHEP::mm;
+     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*GeoModelKernelUnits::mm;
+//     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*GeoModelKernelUnits::mm;
 
      double zLengthB   =  (*idSupportRails)[0]->getDouble("ZLENGTH");
      double yWidthB    =  (*idSupportRails)[0]->getDouble("YWIDTH");
@@ -217,12 +219,12 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 
     //GeoBox** railEndcap = new GeoBox*[numberOfPieces];
     GeoBox* railEndcap[numberOfPieces];
-    //    CLHEP::Hep3Vector* vectorForTrans = new CLHEP::Hep3Vector[numberOfPieces];
-    //    //CLHEP::Hep3Vector vectorForTrans[numberOfPieces];
-    CLHEP::Hep3Vector vectorForTrans[numberOfPieces];
+    //    GeoTrf::Vector3D* vectorForTrans = new GeoTrf::Vector3D[numberOfPieces];
+    //    //GeoTrf::Vector3D vectorForTrans[numberOfPieces];
+    GeoTrf::Vector3D vectorForTrans[numberOfPieces];
 
     GeoBox* railEndcapFirst = new GeoBox(railEBx/2., railEBy/2., railLengthE/2);
-    CLHEP::Hep3Vector vectorForTransFirst (0., 0., 0.);
+    GeoTrf::Vector3D vectorForTransFirst (0., 0., 0.);
 
     double lastY = 0.;
     double startY = 0.;
@@ -238,12 +240,12 @@ void SupportRailFactory::create(GeoPhysVol *mother)
      railEndcap[i] = new GeoBox(railEBx/2. - xa, ya/2, railLengthE/2);
      if (i == 0)
      {
-       vectorForTrans[0] = CLHEP::Hep3Vector(0., railEBy/2. + ya/2, 0.) + vectorForTransFirst;
+       vectorForTrans[0] = GeoTrf::Vector3D(0., railEBy/2. + ya/2, 0.) + vectorForTransFirst;
        lastY = ya/2;
      }
      else
      {
-       vectorForTrans[i] = vectorForTrans[i-1] + CLHEP::Hep3Vector(0., lastY + ya/2, 0.);
+       vectorForTrans[i] = vectorForTrans[i-1] + GeoTrf::Vector3D(0., lastY + ya/2, 0.);
        lastY = ya/2;
      }
 
@@ -253,12 +255,12 @@ void SupportRailFactory::create(GeoPhysVol *mother)
     const GeoShape* elementOfRailSupport2 = new GeoBox(railSP2x/2., railSP2y/2., suppLength/2);
     const GeoShape* elementOfRailSupport3 = new GeoBox(railSP3x/2., railSP3y/2., suppLength/2);
 
-    CLHEP::Hep3Vector transRailSupport1(0., 0., 0.);
-    CLHEP::Hep3Vector transRailSupport2Part1(-railSP1x/2. + railSP2x/2., railSP1y/2. + railSP2y/2. ,0.);
-    CLHEP::Hep3Vector transRailSupport3Part1(-railSP1x/2. - railSP3x/2., railSP1y/2. + railSP2y - railSP3y/2. , 0.);
+    GeoTrf::Vector3D transRailSupport1(0., 0., 0.);
+    GeoTrf::Vector3D transRailSupport2Part1(-railSP1x/2. + railSP2x/2., railSP1y/2. + railSP2y/2. ,0.);
+    GeoTrf::Vector3D transRailSupport3Part1(-railSP1x/2. - railSP3x/2., railSP1y/2. + railSP2y - railSP3y/2. , 0.);
     
-    CLHEP::Hep3Vector transRailSupport2Part2(railSP1x/2. - railSP2x/2., railSP1y/2. + railSP2y/2. ,0.);
-    CLHEP::Hep3Vector transRailSupport3Part2(railSP1x/2. + railSP3x/2., railSP1y/2. + railSP2y - railSP3y/2. ,0.);
+    GeoTrf::Vector3D transRailSupport2Part2(railSP1x/2. - railSP2x/2., railSP1y/2. + railSP2y/2. ,0.);
+    GeoTrf::Vector3D transRailSupport3Part2(railSP1x/2. + railSP3x/2., railSP1y/2. + railSP2y - railSP3y/2. ,0.);
 
 
 //Definition of Barrel Tracker Support Rail
@@ -267,17 +269,17 @@ void SupportRailFactory::create(GeoPhysVol *mother)
     const GeoBox* trackerSRBP3 = new GeoBox(trackerSRBP3x/2., trackerSRBP3y/2., zLengthB/2);
     const GeoBox* trackerSRBP4 = new GeoBox(trackerSRBP4x/2., trackerSRBP4y/2., zLengthB/2);
 
-    CLHEP::Hep3Vector trans1TSRBP1(0., 0.,0.);
-    CLHEP::Hep3Vector trans2TSRBP1(0., 0.,0.);
+    GeoTrf::Vector3D trans1TSRBP1(0., 0.,0.);
+    GeoTrf::Vector3D trans2TSRBP1(0., 0.,0.);
 
-    CLHEP::Hep3Vector trans1TSRBP2(trackerSRBP1x/2. + trackerSRBP2x/2., - (trackerSRBP1y/2. - trackerSRBP2y/2. - distBottom), 0.);
-    CLHEP::Hep3Vector trans2TSRBP2(-trackerSRBP1x/2. - trackerSRBP2x/2., - (trackerSRBP1y/2. - trackerSRBP2y/2. - distBottom), 0.);
+    GeoTrf::Vector3D trans1TSRBP2(trackerSRBP1x/2. + trackerSRBP2x/2., - (trackerSRBP1y/2. - trackerSRBP2y/2. - distBottom), 0.);
+    GeoTrf::Vector3D trans2TSRBP2(-trackerSRBP1x/2. - trackerSRBP2x/2., - (trackerSRBP1y/2. - trackerSRBP2y/2. - distBottom), 0.);
     
-    CLHEP::Hep3Vector trans1TSRBP3(trackerSRBP1x/2. + trackerSRBP2x + trackerSRBP3x/2., - (trackerSRBP1y/2. - trackerSRBP3y/2. - distBottom), 0.);
-    CLHEP::Hep3Vector trans2TSRBP3(- trackerSRBP1x/2. - trackerSRBP2x - trackerSRBP3x/2., - (trackerSRBP1y/2. - trackerSRBP3y/2. - distBottom), 0.);
+    GeoTrf::Vector3D trans1TSRBP3(trackerSRBP1x/2. + trackerSRBP2x + trackerSRBP3x/2., - (trackerSRBP1y/2. - trackerSRBP3y/2. - distBottom), 0.);
+    GeoTrf::Vector3D trans2TSRBP3(- trackerSRBP1x/2. - trackerSRBP2x - trackerSRBP3x/2., - (trackerSRBP1y/2. - trackerSRBP3y/2. - distBottom), 0.);
 
-    CLHEP::Hep3Vector trans1TSRBP4(trackerSRBP1x/2. + trackerSRBP2x + trackerSRBP4x/2., trackerSRBP1y/2. - trackerSRBP4y/2. - distTop, 0.);
-    CLHEP::Hep3Vector trans2TSRBP4(- trackerSRBP1x/2. - trackerSRBP2x - trackerSRBP4x/2.,trackerSRBP1y/2. - trackerSRBP4y/2. - distTop, 0.);
+    GeoTrf::Vector3D trans1TSRBP4(trackerSRBP1x/2. + trackerSRBP2x + trackerSRBP4x/2., trackerSRBP1y/2. - trackerSRBP4y/2. - distTop, 0.);
+    GeoTrf::Vector3D trans2TSRBP4(- trackerSRBP1x/2. - trackerSRBP2x - trackerSRBP4x/2.,trackerSRBP1y/2. - trackerSRBP4y/2. - distTop, 0.);
 
 //Definition Of Endcap Tracker Support Rail
 
@@ -285,14 +287,14 @@ void SupportRailFactory::create(GeoPhysVol *mother)
     const GeoBox* trackerSREP2 = new GeoBox(trackerSREP2x/2., trackerSREP2y/2.,zLengthE/2.); 
     const GeoBox* trackerSREP3 = new GeoBox(trackerSREP3x/2., trackerSREP3y/2.,zLengthE/2.);
 
-    CLHEP::Hep3Vector trans1TSREP1(0. ,0.,0.);
-    CLHEP::Hep3Vector trans2TSREP1(0. ,0.,0.);
+    GeoTrf::Vector3D trans1TSREP1(0. ,0.,0.);
+    GeoTrf::Vector3D trans2TSREP1(0. ,0.,0.);
   
-    CLHEP::Hep3Vector trans1TSREP2(trackerSREP1x/2. + trackerSREP2x/2., -trackerSREP1y/2. + trackerSREP2y/2., 0.);
-    CLHEP::Hep3Vector trans2TSREP2(- trackerSREP1x/2. - trackerSREP2x/2., -trackerSREP1y/2. + trackerSREP2y/2., 0.);
+    GeoTrf::Vector3D trans1TSREP2(trackerSREP1x/2. + trackerSREP2x/2., -trackerSREP1y/2. + trackerSREP2y/2., 0.);
+    GeoTrf::Vector3D trans2TSREP2(- trackerSREP1x/2. - trackerSREP2x/2., -trackerSREP1y/2. + trackerSREP2y/2., 0.);
 
-    CLHEP::Hep3Vector trans1TSREP3(trackerSREP1x/2. + trackerSREP3x/2., trackerSREP1y/2. - trackerSREP3y/2., 0.);
-    CLHEP::Hep3Vector trans2TSREP3(- trackerSREP1x/2. - trackerSREP3x/2., trackerSREP1y/2. - trackerSREP3y/2., 0.);
+    GeoTrf::Vector3D trans1TSREP3(trackerSREP1x/2. + trackerSREP3x/2., trackerSREP1y/2. - trackerSREP3y/2., 0.);
+    GeoTrf::Vector3D trans2TSREP3(- trackerSREP1x/2. - trackerSREP3x/2., trackerSREP1y/2. - trackerSREP3y/2., 0.);
 
 
 
@@ -352,30 +354,34 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 
 //Support rail - male part
 
-    CLHEP::Hep3Vector suppPos1Part1(rminInt + xDepthUSP2 + railSP2x - railSP1x/2., - yWidthUSP1/2. + railSP1y/2. + coordY, 0.);
-    CLHEP::Hep3Vector suppPos2Part1( - rminInt - xDepthUSP2 - railSP2x + railSP1x/2., - yWidthUSP1/2. + railSP1y/2. + coordY, 0.);
+    GeoTrf::Vector3D suppPos1Part1(rminInt + xDepthUSP2 + railSP2x - railSP1x/2., - yWidthUSP1/2. + railSP1y/2. + coordY, 0.);
+    GeoTrf::Vector3D suppPos2Part1( - rminInt - xDepthUSP2 - railSP2x + railSP1x/2., - yWidthUSP1/2. + railSP1y/2. + coordY, 0.);
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1Part1));
+    pos = new GeoTransform(GeoTrf::Translate3D(suppPos1Part1.x(),suppPos1Part1.y(),suppPos1Part1.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart1);
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2Part1));
+    pos = new GeoTransform(GeoTrf::Translate3D(suppPos2Part1.x(),suppPos2Part1.y(),suppPos2Part1.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart1);
    
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1Part1 + transRailSupport2Part2));
+    GeoTrf::Vector3D tmpVec = suppPos1Part1 + transRailSupport2Part2;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart2);
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2Part1 + transRailSupport2Part1));
+    tmpVec = suppPos2Part1 + transRailSupport2Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart2);
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1Part1+ transRailSupport3Part2));
+    tmpVec = suppPos1Part1+ transRailSupport3Part2;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart3);
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2Part1+ transRailSupport3Part1));
+    tmpVec = suppPos2Part1+ transRailSupport3Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railSupportPhysPart3);
 
@@ -387,140 +393,169 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 //    double safety=0.01; // to provide safety gap for G4
 
 
-    CLHEP::Hep3Vector railBpos1(railSP1x/2. - railThickB/2. - railSP2x, railSP1y/2. + railWidthB/2., 0.);
-    CLHEP::Hep3Vector railBpos2(- railSP1x/2. + railThickB/2. + railSP2x, railSP1y/2. + railWidthB/2., 0.);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos1 + suppPos1Part1));
+    GeoTrf::Vector3D railBpos1(railSP1x/2. - railThickB/2. - railSP2x, railSP1y/2. + railWidthB/2., 0.);
+    GeoTrf::Vector3D railBpos2(- railSP1x/2. + railThickB/2. + railSP2x, railSP1y/2. + railWidthB/2., 0.);
+    tmpVec = railBpos1 + suppPos1Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railBarrelPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos2 + suppPos2Part1));
+    tmpVec = railBpos2 + suppPos2Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railBarrelPhys);
 //
 //    Endcap steel rails
 //
 
-    CLHEP::Hep3Vector railEpos1( railSP1x/2 + railSP3x - exactPl, railSP1y/2. + railEBy/2., (railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos2( -railSP1x/2 - railSP3x + exactPl, railSP1y/2. + railEBy/2., (railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos3( railSP1x/2 + railSP3x - exactPl, railSP1y/2. + railEBy/2.,-(railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos4( -railSP1x/2 - railSP3x + exactPl, railSP1y/2. + railEBy/2.,-(railLengthB+railLengthE)/2.);
-
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos1 + vectorForTransFirst + suppPos1Part1));
+    GeoTrf::Vector3D railEpos1( railSP1x/2 + railSP3x - exactPl, railSP1y/2. + railEBy/2., (railLengthB+railLengthE)/2.);
+    GeoTrf::Vector3D railEpos2( -railSP1x/2 - railSP3x + exactPl, railSP1y/2. + railEBy/2., (railLengthB+railLengthE)/2.);
+    GeoTrf::Vector3D railEpos3( railSP1x/2 + railSP3x - exactPl, railSP1y/2. + railEBy/2.,-(railLengthB+railLengthE)/2.);
+    GeoTrf::Vector3D railEpos4( -railSP1x/2 - railSP3x + exactPl, railSP1y/2. + railEBy/2.,-(railLengthB+railLengthE)/2.);
+    tmpVec = railEpos1 + vectorForTransFirst + suppPos1Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railEndcapFirstPhys);
    
     for (int i = 0; i < numberOfPieces; i++)
     {
-     pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), railEpos1 + vectorForTrans[i] + suppPos1Part1));
-     mother->add(pos);
-     mother->add(railEndcapPhys[i]);
+      tmpVec = railEpos1 + vectorForTrans[i] + suppPos1Part1;
+      pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+      mother->add(pos);
+      mother->add(railEndcapPhys[i]);
     }
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos2 + vectorForTransFirst + suppPos2Part1));
+    tmpVec = railEpos2 + vectorForTransFirst + suppPos2Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railEndcapFirstPhys);
 
     for (int i = 0; i < numberOfPieces; i++)
     {
-     pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), railEpos2 + vectorForTrans[i] + suppPos2Part1));
-     mother->add(pos);
-     mother->add(railEndcapPhys[i]);
+      tmpVec = railEpos2 + vectorForTrans[i] + suppPos2Part1;
+      pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+      mother->add(pos);
+      mother->add(railEndcapPhys[i]);
     }
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos3 + vectorForTransFirst + suppPos1Part1));
+    tmpVec = railEpos3 + vectorForTransFirst + suppPos1Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railEndcapFirstPhys);
 
     for (int i = 0; i < numberOfPieces; i++)
     {
-     pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), railEpos3 + vectorForTrans[i] + suppPos1Part1));
-     mother->add(pos);
-     mother->add(railEndcapPhys[i]);
+      tmpVec = railEpos3 + vectorForTrans[i] + suppPos1Part1;
+      pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+      mother->add(pos);
+      mother->add(railEndcapPhys[i]);
     }
 
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos4 + vectorForTransFirst + suppPos2Part1));
+    tmpVec = railEpos4 + vectorForTransFirst + suppPos2Part1;
+    pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
     mother->add(pos);
     mother->add(railEndcapFirstPhys);
 
     for (int i = 0; i < numberOfPieces; i++)
     {
-     pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), railEpos4 + vectorForTrans[i] + suppPos2Part1));
-     mother->add(pos);
-     mother->add(railEndcapPhys[i]);
+      tmpVec = railEpos4 + vectorForTrans[i] + suppPos2Part1;
+      pos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+      mother->add(pos);
+      mother->add(railEndcapPhys[i]);
     }
 
-    CLHEP::Hep3Vector transToInnerWall(rminInt + xDepthUSP2 + railSP2x + railSP3x + trackerSRBP2x + trackerSRBP1x, 0, 0);
-    CLHEP::Hep3Vector transMalePart(0., 0., 0.);
+    GeoTrf::Vector3D transToInnerWall(rminInt + xDepthUSP2 + railSP2x + railSP3x + trackerSRBP2x + trackerSRBP1x, 0, 0);
+    GeoTrf::Vector3D transMalePart(0., 0., 0.);
     GeoTransform *xfPos;
     GeoTransform *xfNeg;
 
 //Barrel           
-    xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),transToInnerWall - CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans2TSRBP1 + transMalePart));
-    xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),- transToInnerWall + CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans1TSRBP1 + transMalePart));
+    tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSRBP1x/2., 0, 0) + trans2TSRBP1 + transMalePart;
+    xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+    tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSRBP1x/2., 0,0) + trans1TSRBP1 + transMalePart;
+    xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSRBPP1);
      mother->add(xfNeg);
      mother->add(trackerSRBPP1);
 
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),transToInnerWall - CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans2TSRBP2 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans1TSRBP2 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSRBP1x/2., 0, 0) + trans2TSRBP2 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSRBP1x/2., 0, 0) + trans1TSRBP2 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSRBPP2);
      mother->add(xfNeg);
      mother->add(trackerSRBPP2);
   
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans2TSRBP3 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans1TSRBP3 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSRBP1x/2., 0,0) + trans2TSRBP3 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSRBP1x/2., 0, 0) + trans1TSRBP3 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSRBPP3);
      mother->add(xfNeg);
      mother->add(trackerSRBPP3);
 
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans2TSRBP4 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), -transToInnerWall + CLHEP::Hep3Vector(trackerSRBP1x/2., 0, 0) + trans1TSRBP4 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSRBP1x/2., 0,0) + trans2TSRBP4 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = -transToInnerWall + GeoTrf::Vector3D(trackerSRBP1x/2., 0, 0) + trans1TSRBP4 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSRBPP4);
      mother->add(xfNeg);
      mother->add(trackerSRBPP4);
 //Endcap positiv
 
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP1 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP1 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP1 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP1 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP1);
      mother->add(xfNeg);
      mother->add(trackerSREPP1);
 
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP2 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP2 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP2 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP2 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP2);
      mother->add(xfNeg);
      mother->add(trackerSREPP2);
   
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP3 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP3 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, zLengthB/2 + zLengthE/2) + trans2TSREP3 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, zLengthB/2 + zLengthE/2) + trans1TSREP3 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP3);
      mother->add(xfNeg);
      mother->add(trackerSREPP3);       
 //Endcap negativ
-    
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP1 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP1 + transMalePart));
+  
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP1 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP1 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP1);
      mother->add(xfNeg);
      mother->add(trackerSREPP1);
 
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP2 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP2 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP2 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP2 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP2);
      mother->add(xfNeg);
      mother->add(trackerSREPP2);
   
-     xfPos = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), transToInnerWall - CLHEP::Hep3Vector(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP3 + transMalePart));
-     xfNeg = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), - transToInnerWall + CLHEP::Hep3Vector(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP3 + transMalePart));
+     tmpVec = transToInnerWall - GeoTrf::Vector3D(trackerSREP1x/2., 1.5, - zLengthB/2 - zLengthE/2) + trans2TSREP3 + transMalePart;
+     xfPos = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
+     tmpVec = - transToInnerWall + GeoTrf::Vector3D(trackerSREP1x/2., -1.5, - zLengthB/2 - zLengthE/2) + trans1TSREP3 + transMalePart;
+     xfNeg = new GeoTransform(GeoTrf::Translate3D(tmpVec.x(),tmpVec.y(),tmpVec.z()));
      mother->add(xfPos);
      mother->add(trackerSREPP3);
      mother->add(xfNeg);
@@ -544,18 +579,18 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 //
 // Default(initial) values
 //    
-    double RMAX_ID      = 1150.0*CLHEP::mm -1.0*CLHEP::mm;   //Some safety margin
-    double railLengthB  = 1600.0*CLHEP::mm;
-    double railWidthB   = 5.5*CLHEP::mm;
-    double railThickB   = 34.7*CLHEP::mm;
+    double RMAX_ID      = 1150.0*GeoModelKernelUnits::mm -1.0*GeoModelKernelUnits::mm;   //Some safety margin
+    double railLengthB  = 1600.0*GeoModelKernelUnits::mm;
+    double railWidthB   = 5.5*GeoModelKernelUnits::mm;
+    double railThickB   = 34.7*GeoModelKernelUnits::mm;
 //
-    double railLengthE  = 2600.0*CLHEP::mm;
-    double railWidthE   = 14.*CLHEP::mm;
-    double railThickE   = 14.7*CLHEP::mm;
+    double railLengthE  = 2600.0*GeoModelKernelUnits::mm;
+    double railWidthE   = 14.*GeoModelKernelUnits::mm;
+    double railThickE   = 14.7*GeoModelKernelUnits::mm;
 //
-    double suppLength   = 6800.0*CLHEP::mm;
-    double suppWidth    = 54.*CLHEP::mm;
-    double suppThick    = 22.6*CLHEP::mm;
+    double suppLength   = 6800.0*GeoModelKernelUnits::mm;
+    double suppWidth    = 54.*GeoModelKernelUnits::mm;
+    double suppThick    = 22.6*GeoModelKernelUnits::mm;
 //
 //   Database 
 //
@@ -578,20 +613,20 @@ void SupportRailFactory::create(GeoPhysVol *mother)
     
     double epsilon = 0.01;  // +Some safety margin
  
-     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;  
-     railLengthB = (*railrec)[0]->getDouble("LENGTHB")*CLHEP::mm;
-     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*CLHEP::mm;
-     railThickB  = (*railrec)[0]->getDouble("THICKB")*CLHEP::mm;
+     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;  
+     railLengthB = (*railrec)[0]->getDouble("LENGTHB")*GeoModelKernelUnits::mm;
+     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*GeoModelKernelUnits::mm;
+     railThickB  = (*railrec)[0]->getDouble("THICKB")*GeoModelKernelUnits::mm;
   //------------ Limited by EP ExternalShell
-     railLengthE = (*endplate)[0]->getDouble("ZSTART")*CLHEP::mm  
-                  +(*endplate)[0]->getDouble("ZSHIFT")*CLHEP::mm
-                  +(*endplate)[0]->getDouble("ZGAP")*CLHEP::mm   - railLengthB/2.;
-     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*CLHEP::mm;
-     railThickE  = (*railrec)[0]->getDouble("THICKE")*CLHEP::mm;
+     railLengthE = (*endplate)[0]->getDouble("ZSTART")*GeoModelKernelUnits::mm  
+                  +(*endplate)[0]->getDouble("ZSHIFT")*GeoModelKernelUnits::mm
+                  +(*endplate)[0]->getDouble("ZGAP")*GeoModelKernelUnits::mm   - railLengthB/2.;
+     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*GeoModelKernelUnits::mm;
+     railThickE  = (*railrec)[0]->getDouble("THICKE")*GeoModelKernelUnits::mm;
  
      suppLength = railLengthB + 2.*railLengthE;
-     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*CLHEP::mm;
-     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*CLHEP::mm;
+     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*GeoModelKernelUnits::mm;
+     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*GeoModelKernelUnits::mm;
 //
 // To avoid rail corner outside ID envelope
      RMAX_ID = sqrt(RMAX_ID*RMAX_ID-suppWidth*suppWidth/4.)-epsilon;  
@@ -616,43 +651,43 @@ void SupportRailFactory::create(GeoPhysVol *mother)
 //
     double safety=0.01; // to provide safety gap for G4
 
-    CLHEP::Hep3Vector railBpos1( ( RMAX_ID-suppThick-railThickB/2.-safety), 0., 0.);
-    CLHEP::Hep3Vector railBpos2( (-RMAX_ID+suppThick+railThickB/2.+safety), 0., 0.);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos1));
+    GeoTrf::Translate3D railBpos1( ( RMAX_ID-suppThick-railThickB/2.-safety), 0., 0.);
+    GeoTrf::Translate3D railBpos2( (-RMAX_ID+suppThick+railThickB/2.+safety), 0., 0.);
+    pos = new GeoTransform(railBpos1);
     mother->add(pos);
     mother->add(railBarrelPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos2));
+    pos = new GeoTransform(railBpos2);
     mother->add(pos);
     mother->add(railBarrelPhys);
 //
 //    Endcap steel rails
 //
-    CLHEP::Hep3Vector railEpos1( ( RMAX_ID-suppThick-railThickE/2.-safety), 0., (railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos2( (-RMAX_ID+suppThick+railThickE/2.+safety), 0., (railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos3( ( RMAX_ID-suppThick-railThickE/2.-safety), 0.,-(railLengthB+railLengthE)/2.);
-    CLHEP::Hep3Vector railEpos4( (-RMAX_ID+suppThick+railThickE/2.+safety), 0.,-(railLengthB+railLengthE)/2.);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos1));
+    GeoTrf::Translate3D railEpos1( ( RMAX_ID-suppThick-railThickE/2.-safety), 0., (railLengthB+railLengthE)/2.);
+    GeoTrf::Translate3D railEpos2( (-RMAX_ID+suppThick+railThickE/2.+safety), 0., (railLengthB+railLengthE)/2.);
+    GeoTrf::Translate3D railEpos3( ( RMAX_ID-suppThick-railThickE/2.-safety), 0.,-(railLengthB+railLengthE)/2.);
+    GeoTrf::Translate3D railEpos4( (-RMAX_ID+suppThick+railThickE/2.+safety), 0.,-(railLengthB+railLengthE)/2.);
+    pos = new GeoTransform(railEpos1);
     mother->add(pos);
     mother->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos2));
+    pos = new GeoTransform(railEpos2);
     mother->add(pos);
     mother->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos3));
+    pos = new GeoTransform(railEpos3);
     mother->add(pos);
     mother->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos4));
+    pos = new GeoTransform(railEpos4);
     mother->add(pos);
     mother->add(railEndcapPhys);
 //
 //    Rail supports
 //
     
-    CLHEP::Hep3Vector suppPos1( ( RMAX_ID-suppThick/2.), 0., 0.);
-    CLHEP::Hep3Vector suppPos2( (-RMAX_ID+suppThick/2.), 0., 0.);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1));
+    GeoTrf::Translate3D suppPos1( ( RMAX_ID-suppThick/2.), 0., 0.);
+    GeoTrf::Translate3D suppPos2( (-RMAX_ID+suppThick/2.), 0., 0.);
+    pos = new GeoTransform(suppPos1);
     mother->add(pos);
     mother->add(supportPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2));
+    pos = new GeoTransform(suppPos2);
     mother->add(pos);
     mother->add(supportPhys);
 
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactoryFS.cxx
index 1020cb4e2acc25f8971f2a1aebf5aa09623fa563..2b51616c3c2a2d1c387efd22b8eb23bbc5fb3540 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/SupportRailFactoryFS.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/SupportRailFactoryFS.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -70,18 +72,18 @@ void SupportRailFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 //
 // Default(initial) values
 //    
-    double RMAX_ID      = 1150.0*CLHEP::mm -1.0*CLHEP::mm;   //Some safety margin
-    double railLengthB  = 1600.0*CLHEP::mm;
-    double railWidthB   = 5.5*CLHEP::mm;
-    double railThickB   = 34.7*CLHEP::mm;
+    double RMAX_ID      = 1150.0*GeoModelKernelUnits::mm -1.0*GeoModelKernelUnits::mm;   //Some safety margin
+    double railLengthB  = 1600.0*GeoModelKernelUnits::mm;
+    double railWidthB   = 5.5*GeoModelKernelUnits::mm;
+    double railThickB   = 34.7*GeoModelKernelUnits::mm;
 //
-    double railLengthE  = 2600.0*CLHEP::mm;
-    double railWidthE   = 14.*CLHEP::mm;
-    double railThickE   = 14.7*CLHEP::mm;
+    double railLengthE  = 2600.0*GeoModelKernelUnits::mm;
+    double railWidthE   = 14.*GeoModelKernelUnits::mm;
+    double railThickE   = 14.7*GeoModelKernelUnits::mm;
 //
-    double suppLength   = 6800.0*CLHEP::mm;
-    double suppWidth    = 54.*CLHEP::mm;
-    double suppThick    = 22.6*CLHEP::mm;
+    double suppLength   = 6800.0*GeoModelKernelUnits::mm;
+    double suppWidth    = 54.*GeoModelKernelUnits::mm;
+    double suppThick    = 22.6*GeoModelKernelUnits::mm;
 //
 //   Database 
 //
@@ -104,20 +106,20 @@ void SupportRailFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
     
     double epsilon = 0.01;  // +Some safety margin
  
-     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;  
-     railLengthB = (*railrec)[0]->getDouble("LENGTHB")*CLHEP::mm;
-     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*CLHEP::mm;
-     railThickB  = (*railrec)[0]->getDouble("THICKB")*CLHEP::mm;
+     RMAX_ID = (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;  
+     railLengthB = (*railrec)[0]->getDouble("LENGTHB")*GeoModelKernelUnits::mm;
+     railWidthB  = (*railrec)[0]->getDouble("WIDTHB")*GeoModelKernelUnits::mm;
+     railThickB  = (*railrec)[0]->getDouble("THICKB")*GeoModelKernelUnits::mm;
   //------------ Limited by EP ExternalShell
-     railLengthE = (*endplate)[0]->getDouble("ZSTART")*CLHEP::mm  
-                  +(*endplate)[0]->getDouble("ZSHIFT")*CLHEP::mm
-                  +(*endplate)[0]->getDouble("ZGAP")*CLHEP::mm   - railLengthB*0.5;
-     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*CLHEP::mm;
-     railThickE  = (*railrec)[0]->getDouble("THICKE")*CLHEP::mm;
+     railLengthE = (*endplate)[0]->getDouble("ZSTART")*GeoModelKernelUnits::mm  
+                  +(*endplate)[0]->getDouble("ZSHIFT")*GeoModelKernelUnits::mm
+                  +(*endplate)[0]->getDouble("ZGAP")*GeoModelKernelUnits::mm   - railLengthB*0.5;
+     railWidthE  = (*railrec)[0]->getDouble("WIDTHE")*GeoModelKernelUnits::mm;
+     railThickE  = (*railrec)[0]->getDouble("THICKE")*GeoModelKernelUnits::mm;
  
      suppLength = railLengthB + 2.*railLengthE;
-     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*CLHEP::mm;
-     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*CLHEP::mm;
+     suppWidth  = (*railrec)[0]->getDouble("WIDTHSUP")*GeoModelKernelUnits::mm;
+     suppThick  = (*railrec)[0]->getDouble("THICKSUP")*GeoModelKernelUnits::mm;
 //
 // To avoid rail corner outside ID envelope
      RMAX_ID = sqrt(RMAX_ID*RMAX_ID-suppWidth*suppWidth/4.)-epsilon;  
@@ -142,59 +144,59 @@ void SupportRailFactoryFS::create(GeoPhysVol *motherP,GeoPhysVol *motherM)
 //
     double safety=0.01; // to provide safety gap for G4
 
-    CLHEP::Hep3Vector railBpos1P( ( RMAX_ID-suppThick-railThickB*0.5-safety), 0., railLengthB*0.25);
-    CLHEP::Hep3Vector railBpos2P( (-RMAX_ID+suppThick+railThickB*0.5+safety), 0., railLengthB*0.25);
-    CLHEP::Hep3Vector railBpos1M( ( RMAX_ID-suppThick-railThickB*0.5-safety), 0.,-railLengthB*0.25);
-    CLHEP::Hep3Vector railBpos2M( (-RMAX_ID+suppThick+railThickB*0.5+safety), 0.,-railLengthB*0.25);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos1P));
+    GeoTrf::Translate3D railBpos1P( ( RMAX_ID-suppThick-railThickB*0.5-safety), 0., railLengthB*0.25);
+    GeoTrf::Translate3D railBpos2P( (-RMAX_ID+suppThick+railThickB*0.5+safety), 0., railLengthB*0.25);
+    GeoTrf::Translate3D railBpos1M( ( RMAX_ID-suppThick-railThickB*0.5-safety), 0.,-railLengthB*0.25);
+    GeoTrf::Translate3D railBpos2M( (-RMAX_ID+suppThick+railThickB*0.5+safety), 0.,-railLengthB*0.25);
+    pos = new GeoTransform(railBpos1P);
     motherP->add(pos);
     motherP->add(railBarrelPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos2P));
+    pos = new GeoTransform(railBpos2P);
     motherP->add(pos);
     motherP->add(railBarrelPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos1M));
+    pos = new GeoTransform(railBpos1M);
     motherM->add(pos);
     motherM->add(railBarrelPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railBpos2M));
+    pos = new GeoTransform(railBpos2M);
     motherM->add(pos);
     motherM->add(railBarrelPhys);
 //
 //    Endcap steel rails
 //
-    CLHEP::Hep3Vector railEpos1( ( RMAX_ID-suppThick-railThickE*0.5-safety), 0., (railLengthB+railLengthE)*0.5);
-    CLHEP::Hep3Vector railEpos2( (-RMAX_ID+suppThick+railThickE*0.5+safety), 0., (railLengthB+railLengthE)*0.5);
-    CLHEP::Hep3Vector railEpos3( ( RMAX_ID-suppThick-railThickE*0.5-safety), 0.,-(railLengthB+railLengthE)*0.5);
-    CLHEP::Hep3Vector railEpos4( (-RMAX_ID+suppThick+railThickE*0.5+safety), 0.,-(railLengthB+railLengthE)*0.5);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos1));
+    GeoTrf::Translate3D railEpos1( ( RMAX_ID-suppThick-railThickE*0.5-safety), 0., (railLengthB+railLengthE)*0.5);
+    GeoTrf::Translate3D railEpos2( (-RMAX_ID+suppThick+railThickE*0.5+safety), 0., (railLengthB+railLengthE)*0.5);
+    GeoTrf::Translate3D railEpos3( ( RMAX_ID-suppThick-railThickE*0.5-safety), 0.,-(railLengthB+railLengthE)*0.5);
+    GeoTrf::Translate3D railEpos4( (-RMAX_ID+suppThick+railThickE*0.5+safety), 0.,-(railLengthB+railLengthE)*0.5);
+    pos = new GeoTransform(railEpos1);
     motherP->add(pos);
     motherP->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos2));
+    pos = new GeoTransform(railEpos2);
     motherP->add(pos);
     motherP->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos3));
+    pos = new GeoTransform(railEpos3);
     motherM->add(pos);
     motherM->add(railEndcapPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),railEpos4));
+    pos = new GeoTransform(railEpos4);
     motherM->add(pos);
     motherM->add(railEndcapPhys);
 //
 //    Rail supports
 //
     
-    CLHEP::Hep3Vector suppPos1P( ( RMAX_ID-suppThick*0.5), 0., suppLength*0.25);
-    CLHEP::Hep3Vector suppPos2P( (-RMAX_ID+suppThick*0.5), 0., suppLength*0.25);
-    CLHEP::Hep3Vector suppPos1M( ( RMAX_ID-suppThick*0.5), 0.,-suppLength*0.25);
-    CLHEP::Hep3Vector suppPos2M( (-RMAX_ID+suppThick*0.5), 0.,-suppLength*0.25);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1P));
+    GeoTrf::Translate3D suppPos1P( ( RMAX_ID-suppThick*0.5), 0., suppLength*0.25);
+    GeoTrf::Translate3D suppPos2P( (-RMAX_ID+suppThick*0.5), 0., suppLength*0.25);
+    GeoTrf::Translate3D suppPos1M( ( RMAX_ID-suppThick*0.5), 0.,-suppLength*0.25);
+    GeoTrf::Translate3D suppPos2M( (-RMAX_ID+suppThick*0.5), 0.,-suppLength*0.25);
+    pos = new GeoTransform(suppPos1P);
     motherP->add(pos);
     motherP->add(supportPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2P));
+    pos = new GeoTransform(suppPos2P);
     motherP->add(pos);
     motherP->add(supportPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos1M));
+    pos = new GeoTransform(suppPos1M);
     motherM->add(pos);
     motherM->add(supportPhys);
-    pos = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),suppPos2M));
+    pos = new GeoTransform(suppPos2M);
     motherM->add(pos);
     motherM->add(supportPhys);
 
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactory.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactory.cxx
index 0506fc6bd2173f7c41aead92d3df9653c1c98fca..f4738c0bd9b9c225c7b4bf6ea60b81f824288616 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactory.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactory.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/TRT_ServMatFactory.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -77,11 +79,11 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
   m_materialManager->addScalingTable(scalingTable);
 
   //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
 
 //VK 26.03.2007  Construct a gap for SquirrelCage ribbon
-  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
+  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
 
 //created by Adam Agocs 
   IRDBRecordset_ptr commonParameters = rdbAccessSvc()->getRecordsetPtr("IDDetRailCommon",indetVersionKey.tag(), indetVersionKey.node());
@@ -118,7 +120,7 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
 
     const GeoShape* serviceTube = serviceTubeTmp;
     
-    if( tubeHelper.volData().maxRadius() > rminInt && tubeHelper.volData().phiDelta() > 359.9*CLHEP::degree)  
+    if( tubeHelper.volData().maxRadius() > rminInt && tubeHelper.volData().phiDelta() > 359.9*GeoModelKernelUnits::degree)  
     {
       // Subtract RailGap out of services
       serviceTube  = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
@@ -133,12 +135,13 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
     
     if (tubeHelper.name() == "FwdServ")
     {
-     GeoTransform *xform1  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), CLHEP::Hep3Vector(0, 0, tubeHelper.volData().zMid() ) ));
-     GeoTransform *xform2  = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(), - CLHEP::Hep3Vector(0, 0, tubeHelper.volData().zMid() ) ));
-     mother->add(xform1);   mother->add(servPhys);   mother->add(xform2);   mother->add(servPhys);
+      GeoTransform *xform1  = new GeoTransform(GeoTrf::Translate3D(0, 0, tubeHelper.volData().zMid() ));
+      GeoTransform *xform2  = new GeoTransform(GeoTrf::Translate3D(0, 0, -tubeHelper.volData().zMid() ));
+      mother->add(xform1);   mother->add(servPhys);   mother->add(xform2);   mother->add(servPhys);
+    }
+    else {
+      tubeHelper.placeVolume(mother, servPhys);
     }
-    else
-    tubeHelper.placeVolume(mother, servPhys);
   }
   railGap1->unref(); 
   railGap2->unref(); 
@@ -162,8 +165,8 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
   m_materialManager->addScalingTable(scalingTable);
 
   //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
   double minRofGap  =       1050.0;
   double phiWid=70./outROfIDet;    double safetyGap=1.;
   const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
@@ -176,10 +179,10 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
 
 
 //VK 26.03.2007  Construct a gap for SquirrelCage ribbon
-  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
-  double  ringThick  = (*cage)[0]->getDouble("RINGTHICK")*CLHEP::mm;
-  double  ringGap    = (*cage)[0]->getDouble("RINGGAP")*CLHEP::mm;
-  double  ribWid = (*cage)[0]->getDouble("RIBWIDTH")*CLHEP::mm;
+  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
+  double  ringThick  = (*cage)[0]->getDouble("RINGTHICK")*GeoModelKernelUnits::mm;
+  double  ringGap    = (*cage)[0]->getDouble("RINGGAP")*GeoModelKernelUnits::mm;
+  double  ribWid = (*cage)[0]->getDouble("RIBWIDTH")*GeoModelKernelUnits::mm;
   double phiWidSQ=ribWid/(rminInt+ringThick+ringGap/2.);
 
 
@@ -211,7 +214,7 @@ void TRT_ServMatFactory::create(GeoPhysVol *mother)
       const GeoShape*  ribSup2  = new GeoTubs( tubeHelper.volData().rmin(), tubeHelper.volData().rmax(), 0.5*tubeHelper.volData().length(), 
 					       -phiWidSQ/2.+M_PI, phiWidSQ);
       serviceTube  = (GeoShape*) & (*serviceTubeTmp).subtract(*ribSup1).subtract(*ribSup2);
-    } else if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiDelta() > 359.9*CLHEP::degree)  {
+    } else if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiDelta() > 359.9*GeoModelKernelUnits::degree)  {
       // Subtract RailGap out of services
       serviceTube  = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
     }    
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC2.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC2.cxx
index 9d63a9e75ecd2f65bf2d13e2dd6c35dacab981f5..51e16b5d09928e4b67c32487fecfb432764ee244 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC2.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC2.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/TRT_ServMatFactoryDC2.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -73,10 +75,10 @@ void TRT_ServMatFactoryDC2::create(GeoPhysVol *mother)
   
   for (int ii=0; ii<NUMBEROFPANEL; ii++) {
     const GeoMaterial* cylMat = m_materialManager->getMaterial("trt::PatchOut");
-    double rmin = (*ipan)[ii]->getFloat("RMIN")*CLHEP::cm;
-    double rmax = (*ipan)[ii]->getFloat("RMAX")*CLHEP::cm;
-    double zmin = (*ipan)[ii]->getFloat("ZMIN")*CLHEP::cm;
-    double zmax = (*ipan)[ii]->getFloat("ZMAX")*CLHEP::cm;
+    double rmin = (*ipan)[ii]->getFloat("RMIN")*GeoModelKernelUnits::cm;
+    double rmax = (*ipan)[ii]->getFloat("RMAX")*GeoModelKernelUnits::cm;
+    double zmin = (*ipan)[ii]->getFloat("ZMIN")*GeoModelKernelUnits::cm;
+    double zmax = (*ipan)[ii]->getFloat("ZMAX")*GeoModelKernelUnits::cm;
 
     double halflength = (zmax-zmin)/2.-2*epsilon;
     double zpos = zmin + halflength+2*epsilon;
@@ -88,10 +90,10 @@ void TRT_ServMatFactoryDC2::create(GeoPhysVol *mother)
     const GeoLogVol* ServLog = new GeoLogVol(logName,serviceTube,cylMat);
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -105,15 +107,15 @@ void TRT_ServMatFactoryDC2::create(GeoPhysVol *mother)
     std::ostringstream o;
     o << ii;
     std::string logName = "TrtInel"+o.str();  
-    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm;
+    double halflength = ((*inel)[ii]->getFloat("ZMAX")-(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm;
     int volType = (int) (*inel)[ii]->getFloat("VOLTYP");
 
     const GeoShape* serviceTube = createShape(volType,
-					      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+					      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 					      halflength,
-					      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-					      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm);
+					      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+					      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm);
     // create the material...
     // In AGE the radiation length is specified and from that the density is
     // calculated assuming the material is C. I do the same here for now but
@@ -130,21 +132,21 @@ void TRT_ServMatFactoryDC2::create(GeoPhysVol *mother)
       cylMat = createMaterial(nameStr.str(),
 			      volType,
 			      fractionRL,
-			      (*inel)[ii]->getFloat("RMIN1")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX1")*CLHEP::cm,
+			      (*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm,
 			      halflength,
-			      (*inel)[ii]->getFloat("RMIN2")*CLHEP::cm,
-			      (*inel)[ii]->getFloat("RMAX2")*CLHEP::cm); 
+			      (*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm,
+			      (*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm); 
     }
 
     const GeoLogVol* ServLog = new GeoLogVol(logName,serviceTube,cylMat);
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
-    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*CLHEP::cm+epsilon;
+    double zpos = ((*inel)[ii]->getFloat("ZMAX")+(*inel)[ii]->getFloat("ZMIN"))/2.*GeoModelKernelUnits::cm+epsilon;
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -163,7 +165,7 @@ const GeoShape* TRT_ServMatFactoryDC2::createShape(int volType,
 						double rmax2=0.) 
   
 {
-  const double epsilon = 0.001*CLHEP::mm;
+  const double epsilon = 0.001*GeoModelKernelUnits::mm;
   enum VOLTYPE{Tube=1, Cone, ICone};
   const GeoShape* IDShape = 0;
   if(volType == Tube) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC3.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC3.cxx
index bd83601d73d0fd1e3a48ccc68d566abf88ca7a19..8ea66da54eda33bea61eba76cdf592679b49967a 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC3.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryDC3.cxx
@@ -5,6 +5,8 @@
 #include "InDetServMatGeoModel/TRT_ServMatFactoryDC3.h"
 
 // GeoModel includes
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"  
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoTube.h"  
@@ -61,8 +63,8 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
 
 
 //VVK  10/09/2005 Construct a gap for rails
-    double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-    double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
+    double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+    double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
     double minRofGap  =       1050.0;
     double phiWid=70./outROfIDet;    double safetyGap=1.;
     const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
@@ -76,10 +78,10 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
   
   for (int ii=0; ii<NUMBEROFPANEL; ii++) {
     const GeoMaterial* cylMat = materialManager()->getMaterial("trt::PatchOut");
-    double rmin = (*ipan)[ii]->getFloat("RMIN")*CLHEP::cm;
-    double rmax = (*ipan)[ii]->getFloat("RMAX")*CLHEP::cm;
-    double zmin = (*ipan)[ii]->getFloat("ZMIN")*CLHEP::cm;
-    double zmax = (*ipan)[ii]->getFloat("ZMAX")*CLHEP::cm;
+    double rmin = (*ipan)[ii]->getFloat("RMIN")*GeoModelKernelUnits::cm;
+    double rmax = (*ipan)[ii]->getFloat("RMAX")*GeoModelKernelUnits::cm;
+    double zmin = (*ipan)[ii]->getFloat("ZMIN")*GeoModelKernelUnits::cm;
+    double zmax = (*ipan)[ii]->getFloat("ZMAX")*GeoModelKernelUnits::cm;
 
     double halflength = (zmax-zmin)/2.-2*epsilon;
     double zpos = zmin + halflength+2*epsilon;
@@ -102,10 +104,10 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
     
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -131,12 +133,12 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
     o << irecold++;
     std::string logName = "TrtInel"+o.str();  
     int volType = (int) (*inel)[ii]->getFloat("VOLTYP");
-    double RMIN1=(*inel)[ii]->getFloat("RMIN1")*CLHEP::cm;
-    double RMAX1=(*inel)[ii]->getFloat("RMAX1")*CLHEP::cm;
-    double RMIN2=(*inel)[ii]->getFloat("RMIN2")*CLHEP::cm;
-    double RMAX2=(*inel)[ii]->getFloat("RMAX2")*CLHEP::cm;
-    double ZMAX= (*inel)[ii]->getFloat("ZMAX")*CLHEP::cm;
-    double ZMIN= (*inel)[ii]->getFloat("ZMIN")*CLHEP::cm;
+    double RMIN1=(*inel)[ii]->getFloat("RMIN1")*GeoModelKernelUnits::cm;
+    double RMAX1=(*inel)[ii]->getFloat("RMAX1")*GeoModelKernelUnits::cm;
+    double RMIN2=(*inel)[ii]->getFloat("RMIN2")*GeoModelKernelUnits::cm;
+    double RMAX2=(*inel)[ii]->getFloat("RMAX2")*GeoModelKernelUnits::cm;
+    double ZMAX= (*inel)[ii]->getFloat("ZMAX")*GeoModelKernelUnits::cm;
+    double ZMIN= (*inel)[ii]->getFloat("ZMIN")*GeoModelKernelUnits::cm;
 
 //VK Change of TRT barrel cables definition
 //    if(ii == 3) { RMIN1 += 0; RMAX1=RMIN1+0.589; ZMIN=950.; ZMAX=3250;}
@@ -182,10 +184,10 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
     GeoVPhysVol* ServPhys = new GeoPhysVol(ServLog);
     double zpos = (ZMAX+ZMIN)/2.+epsilon;
     // place two
-    CLHEP::Hep3Vector servpos1(0.,0.,zpos);
-    CLHEP::Hep3Vector servpos2(0.,0.,-zpos);
-    GeoTransform *xform1 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos1));
-    GeoTransform *xform2 = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),servpos2));
+    GeoTrf::Translate3D servpos1(0.,0.,zpos);
+    GeoTrf::Translate3D servpos2(0.,0.,-zpos);
+    GeoTransform *xform1 = new GeoTransform(servpos1);
+    GeoTransform *xform2 = new GeoTransform(servpos2);
     mother->add(xform1);
     mother->add(ServPhys);
     mother->add(xform2);
@@ -205,7 +207,7 @@ void TRT_ServMatFactoryDC3::create(GeoPhysVol *mother)
 						double rmax2=0.) 
   
 {
-  const double epsilon = 0.001*CLHEP::mm;
+  const double epsilon = 0.001*GeoModelKernelUnits::mm;
   enum VOLTYPE{Tube=1, Cone, ICone};
   const GeoShape* IDShape = 0;
   if(volType == Tube) {
diff --git a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryFS.cxx b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryFS.cxx
index 60ce650f9c974c107d3949c09a5f42d2dff50ef7..342c02f44fde239444ce41f9aebfdaec1cddd9d6 100755
--- a/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryFS.cxx
+++ b/InnerDetector/InDetDetDescr/InDetServMatGeoModel/src/TRT_ServMatFactoryFS.cxx
@@ -75,8 +75,8 @@ void TRT_ServMatFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 
 
 //VK  10/09/2005 Construct a gap for rails
-  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*CLHEP::cm;
-  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*CLHEP::cm;
+  double outROfIDet =       (*atls)[0]->getDouble("IDETOR")*GeoModelKernelUnits::cm;
+  double endZOfIDet =       (*atls)[0]->getDouble("IDETZMX")*GeoModelKernelUnits::cm;
   double minRofGap  =       1050.0;
   double phiWid=70./outROfIDet;    double safetyGap=1.;
   const GeoShape* railGap1=new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap , 
@@ -89,10 +89,10 @@ void TRT_ServMatFactoryFS::create(GeoPhysVol *motherP, GeoPhysVol *motherM)
 
 
 //VK 26.03.2007  Construct a gap for SquirrelCage ribbon
-  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*CLHEP::mm;
-  double  ringThick  = (*cage)[0]->getDouble("RINGTHICK")*CLHEP::mm;
-  double  ringGap    = (*cage)[0]->getDouble("RINGGAP")*CLHEP::mm;
-  double  ribWid = (*cage)[0]->getDouble("RIBWIDTH")*CLHEP::mm;
+  double  rminInt    = (*cage)[0]->getDouble("RINGRMIN")*GeoModelKernelUnits::mm;
+  double  ringThick  = (*cage)[0]->getDouble("RINGTHICK")*GeoModelKernelUnits::mm;
+  double  ringGap    = (*cage)[0]->getDouble("RINGGAP")*GeoModelKernelUnits::mm;
+  double  ribWid = (*cage)[0]->getDouble("RIBWIDTH")*GeoModelKernelUnits::mm;
   double phiWidSQ=ribWid/(rminInt+ringThick+ringGap/2.);
 
 
diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/CMakeLists.txt b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/CMakeLists.txt
index 5b643f28a1e31a746552919905405cf24bd7cdba..f049c6b8419c75964b4cd33eeca30f9e24eeb56c 100644
--- a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/CMakeLists.txt
@@ -18,7 +18,6 @@ atlas_depends_on_subdirs( PUBLIC
                           AtlasGeometryCommon/BeamPipeGeoModel
                           AtlasGeometryCommon/SubDetectorEnvelopes
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/Identifier
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
                           Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv
@@ -29,13 +28,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( Eigen )
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( InDetTrackingGeometry
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps GeoPrimitives GaudiKernel InDetIdentifier TrkDetDescrInterfaces TrkDetDescrUtils TrkGeometry BeamPipeGeoModelLib StoreGateLib SGtests GeoModelKernel Identifier InDetReadoutGeometry TrkDetDescrGeoModelCnv TrkSurfaces TrkVolumes )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps GeoPrimitives GaudiKernel InDetIdentifier TrkDetDescrInterfaces TrkDetDescrUtils TrkGeometry BeamPipeGeoModelLib StoreGateLib SGtests Identifier InDetReadoutGeometry TrkDetDescrGeoModelCnv TrkSurfaces TrkVolumes )
 
 # Install files from the package:
 atlas_install_headers( InDetTrackingGeometry )
diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/BeamPipeBuilder.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/BeamPipeBuilder.cxx
index 2527cf4616a3ae7da027d2a38d81888889432f1f..b0f843b2a3d567d0dce304c1f15c563ef881748e 100755
--- a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/BeamPipeBuilder.cxx
+++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/BeamPipeBuilder.cxx
@@ -36,7 +36,7 @@ InDet::BeamPipeBuilder::BeamPipeBuilder(const std::string& t, const std::string&
   m_beamPipeOffsetX(0.*Gaudi::Units::mm),
   m_beamPipeOffsetY(0.*Gaudi::Units::mm),
   m_beamPipeRadius(33.1*Gaudi::Units::mm),
-  m_beamPipeHalflength(2.7*CLHEP::m),
+  m_beamPipeHalflength(2.7*Gaudi::Units::m),
   m_beamPipeThickness(1.*Gaudi::Units::mm),
   m_beamPipeX0(352.8*Gaudi::Units::mm),
   m_beamPipeL0(407.*Gaudi::Units::mm),
@@ -109,9 +109,9 @@ const std::vector< const Trk::CylinderLayer* >* InDet::BeamPipeBuilder::cylindri
   if (m_beamPipeMgr){
         // get the central top volume
         PVConstLink beamPipeTopVolume =  m_beamPipeMgr->getTreeTop(0);
-        (*beamPipeTransform) = Amg::Translation3D(beamPipeTopVolume->getX().getTranslation().x(),
-                                                  beamPipeTopVolume->getX().getTranslation().y(),
-                                                  beamPipeTopVolume->getX().getTranslation().z());
+        (*beamPipeTransform) = Amg::Translation3D(beamPipeTopVolume->getX().translation().x(),
+                                                  beamPipeTopVolume->getX().translation().y(),
+                                                  beamPipeTopVolume->getX().translation().z());
         const GeoLogVol* beamPipeLogVolume = beamPipeTopVolume->getLogVol();
         const GeoTube* beamPipeTube = 0;
         if (beamPipeLogVolume){
diff --git a/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt b/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
index 115ba20ca14031f341cf1648e3938479d12abf5f..3cf3b433165735f2c1d4b2ea160dca920f35583d 100644
--- a/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/PixelCabling/CMakeLists.txt
@@ -16,8 +16,8 @@ atlas_depends_on_subdirs(
    Control/StoreGate
    Database/AthenaPOOL/AthenaPoolUtilities
    DetectorDescription/Identifier
+   InnerDetector/InDetDetDescr/InDetReadoutGeometry
    InnerDetector/InDetDetDescr/InDetIdentifier
-   InnerDetector/InDetDetDescr/PixelGeoModel
    Tools/PathResolver )
 
 # External dependencies:
@@ -38,8 +38,7 @@ atlas_add_component( PixelCabling
    ${TDAQ-COMMON_INCLUDE_DIRS}
    LINK_LIBRARIES ${CORAL_LIBRARIES} ${Boost_LIBRARIES}
    ${TDAQ-COMMON_LIBRARIES} GaudiKernel AthenaBaseComps SGTools StoreGateLib
-   AthenaPoolUtilities Identifier InDetIdentifier PathResolver PixelGeoModelLib
-   PixelCablingLib )
+   AthenaPoolUtilities Identifier InDetIdentifier InDetReadoutGeometry PathResolver PixelCablingLib )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/PixelGeoModel/CMakeLists.txt
index 6be57eed88d1aa1b1393b9cb9fe30c19099a44f9..6718e6b69827f786da3bab532b0c64be0ffe0d69 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/CMakeLists.txt
@@ -12,9 +12,9 @@ atlas_depends_on_subdirs(
    Control/AthenaKernel
    Database/RDBAccessSvc
    DetectorDescription/GeoModel/GeoModelInterfaces
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoModel/GeoModelUtilities
    DetectorDescription/Identifier
+   DetectorDescription/GeoPrimitives
    GaudiKernel
    InnerDetector/InDetDetDescr/InDetGeoModelUtils
    InnerDetector/InDetDetDescr/InDetReadoutGeometry
@@ -27,14 +27,15 @@ atlas_depends_on_subdirs(
    InnerDetector/InDetDetDescr/InDetIdentifier )
 
 # External dependencies:
-find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( PixelGeoModelLib
    PixelGeoModel/*.h src/*.cxx
    PUBLIC_HEADERS PixelGeoModel
-   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-   LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GeoModelKernel
+   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
+   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AthenaKernel 
    GeoModelUtilities Identifier GaudiKernel InDetGeoModelUtils
    InDetReadoutGeometry
    PRIVATE_LINK_LIBRARIES SGTools StoreGateLib DetDescrConditions
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.cxx
index 09a31ecd1a00dff90c800df1fabf1771f0fc42ec..f75a38c352fcb30e0ceadde2c20b1112d209457a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.cxx
@@ -2,9 +2,9 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/DBM_Det.h"
-#include "PixelGeoModel/DBM_Telescope.h"
-#include "PixelGeoModel/DBM_Services.h"
+#include "DBM_Det.h"
+#include "DBM_Telescope.h"
+#include "DBM_Services.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
@@ -21,7 +21,7 @@ DBM_Det::DBM_Det() {
   
   // Radius to beamline
   // Hardcoded, so if change then change in DBM_module too
-  double trans_rad = 46.678*CLHEP::mm + (m_gmt_mgr->DBMTelescopeY()) / 2.; // 10-CLHEP::degree version
+  double trans_rad = 46.678*GeoModelKernelUnits::mm + (m_gmt_mgr->DBMTelescopeY()) / 2.; // 10-GeoModelKernelUnits::degree version
 
   //                 TRANS_X                        TRANS_Y                        TRANS_Z                          ROT_X                       ROT_Y                      ROT_Z        
   m_module[0].push_back(trans_rad);   m_module[0].push_back(0);         m_module[0].push_back(Trans_Y);    m_module[0].push_back(0);     m_module[0].push_back(0);    m_module[0].push_back(270);  
@@ -36,21 +36,19 @@ GeoVPhysVol* DBM_Det::Build()
   double safety = 0.001;
 
   //create a cylinder 8mm smaller than the BPSS outer radius to place the 4 DBM telescopes
-  double rmin = 45.*CLHEP::mm;//41.0*CLHEP::mm;
-  double rmax = 150.*CLHEP::mm; //244.*CLHEP::mm;
-  double halflength = m_gmt_mgr->DBMTelescopeZ()/2.;//200.*CLHEP::mm
+  double rmin = 45.*GeoModelKernelUnits::mm;//41.0*GeoModelKernelUnits::mm;
+  double rmax = 150.*GeoModelKernelUnits::mm; //244.*GeoModelKernelUnits::mm;
+  double halflength = m_gmt_mgr->DBMTelescopeZ()/2.;//200.*GeoModelKernelUnits::mm
   GeoTube * Shape = new GeoTube(rmin,rmax,halflength);
   const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
   const GeoLogVol* Log = new GeoLogVol("OutsideDBM",Shape,air);
   GeoFullPhysVol* Phys = new GeoFullPhysVol(Log);
 
-  CLHEP::HepRotation pp0rm;
-
   // add PP0 board
   DBM_PP0 pp0Board;
   GeoVPhysVol* pp0BoardPhys = pp0Board.Build();
-  CLHEP::Hep3Vector pp0Pos(0., 0., -halflength + m_gmt_mgr->DBMPP0Thick()/2. + safety);
-  GeoTransform* pp0xform = new GeoTransform(HepGeom::Transform3D(pp0rm,pp0Pos));
+  GeoTrf::Translate3D pp0Pos(0., 0., -halflength + m_gmt_mgr->DBMPP0Thick()/2. + safety);
+  GeoTransform* pp0xform = new GeoTransform(pp0Pos);
   GeoNameTag* pp0tag = new GeoNameTag("DBM_PP0"); 
   Phys->add(pp0tag);
   Phys->add(pp0xform);
@@ -68,12 +66,11 @@ GeoVPhysVol* DBM_Det::Build()
       else if ((m_gmt_mgr->GetSide() < 0) && (i == 2)) m_gmt_mgr->SetPhi(0);
 
       //setting transformation
-      CLHEP::HepRotation rm;
-      CLHEP::Hep3Vector pos(m_module[i].at(0), m_module[i].at(1), m_module[i].at(2));
-      rm.rotateX(m_module[i].at(3)*CLHEP::deg);
-      rm.rotateY(m_module[i].at(4)*CLHEP::deg);
-      rm.rotateZ(m_module[i].at(5)*CLHEP::deg);
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      GeoTrf::Transform3D rm  = GeoTrf::RotateZ3D(m_module[i].at(5)*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateY3D(m_module[i].at(4)*GeoModelKernelUnits::deg)
+	* GeoTrf::RotateX3D(m_module[i].at(3)*GeoModelKernelUnits::deg);
+      GeoTrf::Translation3D pos(m_module[i].at(0), m_module[i].at(1), m_module[i].at(2));
+      GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
 
       GeoNameTag* tag = new GeoNameTag("DBM Module"); 
       GeoVPhysVol* dbmModPhys = dbm.Build();
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Det.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.h
similarity index 88%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Det.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.h
index 711a8c95fd570cf7b437454c4bf622bfb6bb4eef..eff928892053a578a529f78c0f614136c75c9ebb 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Det.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Det.h
@@ -9,9 +9,7 @@
 #define DBMDET_H
 
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Transform3D.h"
-
+#include "GeoVPixelFactory.h"
 #include "GaudiKernel/MsgStream.h"
 #include <iostream>
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.cxx
index 1fedff25c77a830ab48442ff38287361788517f6..d4bfe3ff3f60e478282e7d5df6f500199669ff69 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.cxx
@@ -3,7 +3,7 @@
 */
 
 
-#include "PixelGeoModel/DBM_Module.h"
+#include "DBM_Module.h"
 
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
@@ -64,7 +64,7 @@ GeoVPhysVol* DBM_Module::Build()
   GeoIdentifierTag* diamondTag = new GeoIdentifierTag(400);
 
 
-    double safety = 0.003*CLHEP::mm;
+    double safety = 0.003*GeoModelKernelUnits::mm;
 
     //diamond dimension
     double diamond_X = m_gmt_mgr->DBMDiamondX();
@@ -84,8 +84,8 @@ GeoVPhysVol* DBM_Module::Build()
     
     //distances from bottom of the ceramic
     //Hardcoded!
-    double bot2Chip = 0.0*CLHEP::mm;
-    double bot2Diamond = 1.685*CLHEP::mm;
+    double bot2Chip = 0.0*GeoModelKernelUnits::mm;
+    double bot2Diamond = 1.685*GeoModelKernelUnits::mm;
 
 
     //---------------------------------------------
@@ -93,8 +93,8 @@ GeoVPhysVol* DBM_Module::Build()
   
     // Position of the corner closest to IP and beamline
     // Hardcoded, so if change then change in GeoPixelEnvelope and DBM_Det too
-    double ZToIP = 887.002*CLHEP::mm;
-    double RToBeam = 46.678*CLHEP::mm;
+    double ZToIP = 887.002*GeoModelKernelUnits::mm;
+    double RToBeam = 46.678*GeoModelKernelUnits::mm;
 
     // layer spacing
     double Zspacing = m_gmt_mgr->DBMSpacingZ();
@@ -146,10 +146,7 @@ GeoVPhysVol* DBM_Module::Build()
     const GeoLogVol* dbmModuleLog = new GeoLogVol("dbmModuleLog", dbmModuleBox, air);
     GeoPhysVol* dbmModulePhys = new GeoPhysVol(dbmModuleLog);
     
-    CLHEP::HepRotation rm;
-    rm.rotateY(270.*CLHEP::deg);
-    rm.rotateZ(90.*CLHEP::deg);
-
+    GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(270.*GeoModelKernelUnits::deg);
 
     //diamond
     const GeoBox* dbmDiamondBox = new GeoBox(diamond_Z/2.0, diamond_X/2.0, diamond_Y/2.0 );
@@ -181,8 +178,8 @@ GeoVPhysVol* DBM_Module::Build()
     // add the element to the manager
     m_DDmgr->addDetectorElement(element);
 
-    CLHEP::Hep3Vector dbmDiamondPos(0, bot2Diamond+diamond_Y/2.0-substrate_Y/2.0, diamond_Z/2.0-max_thick/2.0);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,dbmDiamondPos));
+    GeoTrf::Translation3D dbmDiamondPos(0, bot2Diamond+diamond_Y/2.0-substrate_Y/2.0, diamond_Z/2.0-max_thick/2.0);
+    GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(dbmDiamondPos*rm));
     //tag = new GeoNameTag("dbmDiamond");
     //dbmModulePhys->add(tag);
     dbmModulePhys->add(diamondTag);
@@ -194,8 +191,8 @@ GeoVPhysVol* DBM_Module::Build()
     const GeoLogVol* dbmFEI4Log = new GeoLogVol("dbmWallLogF4", dbmFEI4Box, chip_mat); //should this be "dbmdiamondLog"?
     GeoPhysVol* dbmFEI4Phys = new GeoPhysVol(dbmFEI4Log);
     
-    CLHEP::Hep3Vector dbmFEI4Pos(0, bot2Chip+chip_Y/2.0-substrate_Y/2.0, max_thick/2.0-substrate_Z-chip_thick/2.0);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,dbmFEI4Pos));
+    GeoTrf::Translation3D dbmFEI4Pos(0, bot2Chip+chip_Y/2.0-substrate_Y/2.0, max_thick/2.0-substrate_Z-chip_thick/2.0);
+    xform = new GeoTransform(GeoTrf::Transform3D(dbmFEI4Pos*rm));
     //tag = new GeoNameTag("dbmFEI4");
     //dbmModulePhys->add(tag);
     dbmModulePhys->add(xform);
@@ -207,9 +204,8 @@ GeoVPhysVol* DBM_Module::Build()
     const GeoLogVol* dbmSubstLog = new GeoLogVol("dbmWallLogCe", dbmSubstBox, aluminiumNitride);
     GeoPhysVol* dbmSubstPhys = new GeoPhysVol(dbmSubstLog);
 
-    CLHEP::HepRotation rmA;
-    CLHEP::Hep3Vector dbmSubstPos(0, 0, max_thick/2.0-substrate_Z/2.0);
-    xform = new GeoTransform(HepGeom::Transform3D(rmA,dbmSubstPos));
+    GeoTrf::Translate3D dbmSubstPos(0, 0, max_thick/2.0-substrate_Z/2.0);
+    xform = new GeoTransform(dbmSubstPos);
     //tag = new GeoNameTag("dbmSubstrate");
     //dbmModulePhys->add(tag);
     dbmModulePhys->add(xform);
@@ -228,10 +224,9 @@ GeoVPhysVol* DBM_Module::Build()
     double globPosZ = ZToIP + layerUnitPos_Z + (sensorPosInModuleCage_Z * cos(angle) - sensorPosInModuleCage_Y * sin(angle));
     double globPosY = RToBeam + layerUnitPos_Y + (sensorPosInModuleCage_Z * sin(angle) + sensorPosInModuleCage_Y * cos(angle));
 
-    CLHEP::HepRotation rmX10;
-    rmX10.rotateX(-10.*CLHEP::deg);
-    CLHEP::Hep3Vector alignTransformPos(0, globPosY, globPosZ);
-    GeoAlignableTransform *xformAlign = new GeoAlignableTransform(HepGeom::Transform3D(rmX10, alignTransformPos));
+    GeoTrf::RotateX3D rmX10(-10.*GeoModelKernelUnits::deg);
+    GeoTrf::Translation3D alignTransformPos(0, globPosY, globPosZ);
+    GeoAlignableTransform *xformAlign = new GeoAlignableTransform(GeoTrf::Transform3D(alignTransformPos*rmX10));
     m_DDmgr->addAlignableTransform(0, idwafer, xformAlign, dbmDiamondPhys);
     //-----------------------------------------------------
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Module.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.h
similarity index 90%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Module.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.h
index 40e44caf86f12d6343f6e823dd5f2e1ee3f13a68..13509ca8928151fbe4734d6a9a82c48f19e512d3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Module.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Module.h
@@ -5,14 +5,12 @@
 #ifndef DBMModule_H
 #define DBMModule_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoLogVol.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-
 /* @class DBM_Module
  *
  * Build the DBM Module consisting of diamond sensor, FEI4 and ceramic substrate
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.cxx
index 3f21d33368097f802a12e2f5bd3ddb64162c469e..2f72f02edd60997b3a200e7079c3f3d575650936 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.cxx
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/DBM_ModuleCage.h"
-#include "PixelGeoModel/DBM_Module.h"
+#include "DBM_ModuleCage.h"
+#include "DBM_Module.h"
 
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTransform.h"
@@ -20,7 +20,7 @@
 GeoVPhysVol* DBM_ModuleCage::Build() {
 
   // safety, to make sure volumes don't overlap
-  double safety = 0.005*CLHEP::mm;
+  double safety = 0.005*GeoModelKernelUnits::mm;
 
   // Telescope dimension
   double layerUnitY = m_gmt_mgr->DBMModuleCageY();
@@ -113,8 +113,6 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
   // Y coordinate
   double mainPlatePosY = -layerUnitY/2. + mainPlateY/2.;
 
-  CLHEP::HepRotation rm;
- 
   // store initial value Eta value 
   int tempLD = m_gmt_mgr->GetLD();
 
@@ -137,8 +135,8 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
     GeoVPhysVol* modulePhys = module.Build();
 
     Rspacing = m_gmt_mgr->DBMSpacingRadial();
-    CLHEP::Hep3Vector modulePos(0, -layerUnitY/2. + Rspacing + ceramicY/2., mainPlatePosZ[i]-mainPlateZ/2.-(ceramicZ+FEI4Z+moduleAirGap+diamondZ + kaptonZ)/2.-2*safety);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,modulePos));
+    GeoTrf::Translate3D modulePos(0, -layerUnitY/2. + Rspacing + ceramicY/2., mainPlatePosZ[i]-mainPlateZ/2.-(ceramicZ+FEI4Z+moduleAirGap+diamondZ + kaptonZ)/2.-2*safety);
+    GeoTransform* xform = new GeoTransform(modulePos);
     GeoNameTag* tag = new GeoNameTag(tag_module[i].c_str());
     containerPhys->add(tag);
     containerPhys->add(new GeoIdentifierTag(i));
@@ -147,27 +145,27 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
 
     // add main plate
 
-    CLHEP::Hep3Vector mPSideAPos((mainPlateX+mPlateWindowX)/4.+safety/2., mainPlatePosY, mainPlatePosZ[i]);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,mPSideAPos));
+    GeoTrf::Translate3D mPSideAPos((mainPlateX+mPlateWindowX)/4.+safety/2., mainPlatePosY, mainPlatePosZ[i]);
+    xform = new GeoTransform(mPSideAPos);
     tag = new GeoNameTag(tag_mainPlate[i].c_str());
     containerPhys->add(tag);
     containerPhys->add(xform);
     containerPhys->add(mPSidePhys);
 
-    CLHEP::Hep3Vector mPSideBPos(-(mainPlateX+mPlateWindowX)/4.-safety/2., mainPlatePosY, mainPlatePosZ[i]);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,mPSideBPos));
+    GeoTrf::Translate3D mPSideBPos(-(mainPlateX+mPlateWindowX)/4.-safety/2., mainPlatePosY, mainPlatePosZ[i]);
+    xform = new GeoTransform(mPSideBPos);
     containerPhys->add(tag);
     containerPhys->add(xform);
     containerPhys->add(mPSidePhys);
 
-    CLHEP::Hep3Vector mPBotPos(0.0, (-layerUnitY + mPlateWindowPos)/2.-safety/2., mainPlatePosZ[i]);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,mPBotPos));
+    GeoTrf::Translate3D mPBotPos(0.0, (-layerUnitY + mPlateWindowPos)/2.-safety/2., mainPlatePosZ[i]);
+    xform = new GeoTransform(mPBotPos);
     containerPhys->add(tag);
     containerPhys->add(xform);
     containerPhys->add(mPCenterBotPhys);
 
-    CLHEP::Hep3Vector mPTopPos(0.0, (-layerUnitY + mainPlateY + mPlateWindowY + mPlateWindowPos)/2.+safety/2., mainPlatePosZ[i]);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,mPTopPos));
+    GeoTrf::Translate3D mPTopPos(0.0, (-layerUnitY + mainPlateY + mPlateWindowY + mPlateWindowPos)/2.+safety/2., mainPlatePosZ[i]);
+    xform = new GeoTransform(mPTopPos);
     containerPhys->add(tag);
     containerPhys->add(xform);
     containerPhys->add(mPCenterTopPhys);
@@ -198,8 +196,8 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
         
     //**** add flex support
 
-    CLHEP::Hep3Vector flexSuppPos(0.0, flexSuppPosY, flexSuppPosZ);
-    xform = new GeoTransform(HepGeom::Transform3D(rm,flexSuppPos));
+    GeoTrf::Translate3D flexSuppPos(0.0, flexSuppPosY, flexSuppPosZ);
+    xform = new GeoTransform(flexSuppPos);
     tag = new GeoNameTag(tag_flex[i].c_str());
     containerPhys->add(tag);
     containerPhys->add(xform);
@@ -215,27 +213,27 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
 
       double rodPosZ = mainPlatePosZ[i] - mainPlateZ/2.0 - layer1Space/2.; // Z position of rod
 
-      CLHEP::Hep3Vector rodAPos(mPlateRod2RodX/2., topRodPosY, rodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodAPos));
+      GeoTrf::Translate3D rodAPos(mPlateRod2RodX/2., topRodPosY, rodPosZ);
+      xform = new GeoTransform(rodAPos);
       tag = new GeoNameTag(tag_rod[i].c_str());
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(rodAPhys);
 
-      CLHEP::Hep3Vector rodBPos(-mPlateRod2RodX/2., topRodPosY, rodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodBPos));
+      GeoTrf::Translate3D rodBPos(-mPlateRod2RodX/2., topRodPosY, rodPosZ);
+      xform = new GeoTransform(rodBPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(rodAPhys);
 
-      CLHEP::Hep3Vector rodCPos(mPlateRod2RodX/2., botRodPosY, rodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodCPos));
+      GeoTrf::Translate3D rodCPos(mPlateRod2RodX/2., botRodPosY, rodPosZ);
+      xform = new GeoTransform(rodCPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(rodAPhys);
 
-      CLHEP::Hep3Vector rodDPos(-mPlateRod2RodX/2., botRodPosY, rodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodDPos));
+      GeoTrf::Translate3D rodDPos(-mPlateRod2RodX/2., botRodPosY, rodPosZ);
+      xform = new GeoTransform(rodDPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(rodAPhys);
@@ -246,27 +244,27 @@ GeoVPhysVol* DBM_ModuleCage::Build() {
       double topRodPosZ = mainPlatePosZ[i] - mainPlateZ/2. - (Zspacing - mainPlateZ - flexSupportZ)/2.;
       double botRodPosZ = mainPlatePosZ[i] - mainPlateZ/2. - (Zspacing - mainPlateZ)/2.;
 
-      CLHEP::Hep3Vector rodAPos(mPlateRod2RodX/2., topRodPosY, topRodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodAPos));
+      GeoTrf::Translate3D rodAPos(mPlateRod2RodX/2., topRodPosY, topRodPosZ);
+      xform = new GeoTransform(rodAPos);
       tag = new GeoNameTag(tag_rod[i].c_str());
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(topRodPhys);
 
-      CLHEP::Hep3Vector rodBPos(-mPlateRod2RodX/2., topRodPosY, topRodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodBPos));
+      GeoTrf::Translate3D rodBPos(-mPlateRod2RodX/2., topRodPosY, topRodPosZ);
+      xform = new GeoTransform(rodBPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(topRodPhys);
 
-      CLHEP::Hep3Vector rodCPos(mPlateRod2RodX/2., botRodPosY, botRodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodCPos));
+      GeoTrf::Translate3D rodCPos(mPlateRod2RodX/2., botRodPosY, botRodPosZ);
+      xform = new GeoTransform(rodCPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(botRodPhys);
 
-      CLHEP::Hep3Vector rodDPos(-mPlateRod2RodX/2., botRodPosY, botRodPosZ);
-      xform = new GeoTransform(HepGeom::Transform3D(rm,rodDPos));
+      GeoTrf::Translate3D rodDPos(-mPlateRod2RodX/2., botRodPosY, botRodPosZ);
+      xform = new GeoTransform(rodDPos);
       containerPhys->add(tag);
       containerPhys->add(xform);
       containerPhys->add(botRodPhys);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_ModuleCage.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.h
similarity index 84%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_ModuleCage.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.h
index 11191d35010ba342411a0b4e14e1c1350387d66b..a4db870afa1b89be4a9fbb5fb6dddfca2cddec69 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_ModuleCage.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_ModuleCage.h
@@ -5,8 +5,7 @@
 #ifndef DBMModuleCage_h
 #define DBMModuleCage_h
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoVPixelFactory.h"
 #include "GaudiKernel/MsgStream.h"
 #include <iostream>
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.cxx
index c876266ed71ad4eeaa50f344be5f077076130cf8..4301bab27c3ae511282db4a315dffff2b4246175 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/DBM_Services.h"
+#include "DBM_Services.h"
 
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Services.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.h
similarity index 80%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Services.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.h
index d4645b7ee7ac65e2c95e2ad90fdc5120fdf480fe..07d1c75beb69b32ca74a13bc3aad47624e366f47 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Services.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Services.h
@@ -5,8 +5,7 @@
 #ifndef DBMSERVICES_h
 #define DBMSERVICES_h
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoVPixelFactory.h"
 #include "GaudiKernel/MsgStream.h"
 #include <iostream>
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.cxx
index 2d458fa35b2d28017dc3621cdb1cc6e50cb73b64..35b64596c7ca4f54785b2e4b119f3e2f368a7542 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.cxx
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/DBM_Telescope.h"
-#include "PixelGeoModel/DBM_ModuleCage.h"
+#include "DBM_Telescope.h"
+#include "DBM_ModuleCage.h"
 
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
@@ -23,7 +23,7 @@
 
 GeoVPhysVol* DBM_Telescope::Build() {
 
-  double safety = 0.005*CLHEP::mm;
+  double safety = 0.005*GeoModelKernelUnits::mm;
 
   // telescope tilting angle in degree
   double angle = m_gmt_mgr->DBMAngle();
@@ -83,22 +83,20 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* telescopeLog = new GeoLogVol("dbmTelescopeLog", telescopeBox, air);
   GeoPhysVol* telescopePhys = new GeoPhysVol(telescopeLog);
 
-  CLHEP::HepRotation rm;
-  CLHEP::HepRotation rmX10;
-  rmX10.rotateX(-10.*CLHEP::deg);
+  GeoTrf::RotateX3D rmX10(-10.*GeoModelKernelUnits::deg);
 
   DBM_ModuleCage moduleCage;
   GeoVPhysVol* moduleCagePhys = moduleCage.Build();
 
   // parameters for rotating the 3-layer unit
   double lyRadius = sqrt(layerUnitY*layerUnitY/4 + layerUnitZ*layerUnitZ/4);
-  double lyAngle = atan(layerUnitY/layerUnitZ);//21.6444*CLHEP::deg; // arctan(DBM3LayersY / DBM3LayersZ)
+  double lyAngle = atan(layerUnitY/layerUnitZ);//21.6444*GeoModelKernelUnits::deg; // arctan(DBM3LayersY / DBM3LayersZ)
   // position of bottom tip of the 3-layers unit, which is the rotation point
   double layerUnitPos_Y = (trapBackY/cos(angle) - coolingSidePlateY)*cos(angle);
   double layerUnitPos_Z = coolingSidePlateY*sin(angle) + trapBackShortZ + bracketZ - brcktLockZ; 
 
-  CLHEP::Hep3Vector layerUnitPos( 0.0, -telescopeY/2. + layerUnitPos_Y + lyRadius * sin(lyAngle+angle), -telescopeZ/2. + layerUnitPos_Z + lyRadius * cos(lyAngle+angle) + 3*safety);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rmX10,layerUnitPos));
+  GeoTrf::Translation3D layerUnitPos( 0.0, -telescopeY/2. + layerUnitPos_Y + lyRadius * sin(lyAngle+angle), -telescopeZ/2. + layerUnitPos_Z + lyRadius * cos(lyAngle+angle) + 3*safety);
+  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(layerUnitPos*rmX10));
   GeoNameTag* tag = new GeoNameTag("dbm3layers");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
@@ -109,12 +107,12 @@ GeoVPhysVol* DBM_Telescope::Build() {
   
   // back trapezoid block with window, will be rotated by 90 degree along the x-axis
 
-  const GeoTrap* trapBack = new GeoTrap(trapBackY/2., trapBack_theta, 90.0*CLHEP::deg, trapBackShortZ/2., trapBackX/2., trapBackX/2, 0.0, (trapBackShortZ+trapBackY*tan(angle))/2., trapBackX/2., trapBackX/2., 0.0);
+  const GeoTrap* trapBack = new GeoTrap(trapBackY/2., trapBack_theta, 90.0*GeoModelKernelUnits::deg, trapBackShortZ/2., trapBackX/2., trapBackX/2, 0.0, (trapBackShortZ+trapBackY*tan(angle))/2., trapBackX/2., trapBackX/2., 0.0);
 
   double brWindowPosY = brcktWindow_offset + brcktWindow_centerZ * tan(angle) + brcktWindowY/(2 * cos(angle));
   const GeoBox* brWindow = new GeoBox(brcktWindowX/2., trapBackShortZ, brcktWindowY/2.);
-  CLHEP::Hep3Vector brWindowPos(0., 0., trapBackY/2. - brWindowPosY);
-  HepGeom::Transform3D brWindowShift(rmX10,brWindowPos);
+  GeoTrf::Translation3D brWindowPos(0., 0., trapBackY/2. - brWindowPosY);
+  GeoTrf::Transform3D brWindowShift(brWindowPos*rmX10);
 
   const GeoShapeSubtraction& trapBack1 = trapBack->subtract(((*brWindow) << brWindowShift));
 
@@ -122,11 +120,10 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* trapBackLog = new GeoLogVol("bracketLog", &trapBack1, dbmPeek4);
   GeoPhysVol* trapBackPhys = new GeoPhysVol(trapBackLog);
 
-  CLHEP::HepRotation rmX90; 
-  rmX90.rotateX(90.*CLHEP::deg); // rotate along x-axis by 90 degree
+  GeoTrf::RotateX3D rmX90(90.*GeoModelKernelUnits::deg);
   double trapBackPos_Z = -telescopeZ/2. + bracketZ - brcktLockZ + ( (trapBackShortZ+trapBackY*tan(angle))/2. + trapBackY/2.*sin(trapBack_theta) - trapBackY*tan(trapBack_theta) );
-  CLHEP::Hep3Vector trapBackPos(0.0, -telescopeY/2. + trapBackY/2. + safety, trapBackPos_Z + 3*safety);
-  xform = new GeoTransform(HepGeom::Transform3D(rmX90,trapBackPos));
+  GeoTrf::Translation3D trapBackPos(0.0, -telescopeY/2. + trapBackY/2. + safety, trapBackPos_Z + 3*safety);
+  xform = new GeoTransform(GeoTrf::Transform3D(trapBackPos*rmX90));
   tag = new GeoNameTag("trapBack");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
@@ -138,8 +135,8 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* brcktTopBlockLog = new GeoLogVol("bracketLog", brcktTopBlock, dbmPeekAluminium);
   GeoPhysVol* brcktTopBlockPhys = new GeoPhysVol(brcktTopBlockLog);
 
-  CLHEP::Hep3Vector brcktTopBlockPos( 0., -telescopeY/2. + brcktSideBlockY + (bracketY - brcktSideBlockY)/2.+2*safety, -telescopeZ/2. + brcktTopBlockZ/2.);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,brcktTopBlockPos));
+  GeoTrf::Translate3D brcktTopBlockPos( 0., -telescopeY/2. + brcktSideBlockY + (bracketY - brcktSideBlockY)/2.+2*safety, -telescopeZ/2. + brcktTopBlockZ/2.);
+  xform = new GeoTransform(brcktTopBlockPos);
   tag = new GeoNameTag("brcktTopBlock");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
@@ -151,15 +148,15 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* brcktSideLog = new GeoLogVol("brcktSideLog", brcktSideBlock, dbmPeek2);
   GeoPhysVol* brcktSidePhys = new GeoPhysVol(brcktSideLog);
 
-  CLHEP::Hep3Vector brcktSidePos1( bracketX/2. - brcktSideBlockX/2., -telescopeY/2. + brcktSideBlockY/2.+safety, -telescopeZ/2. + brcktTopBlockZ/2.);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,brcktSidePos1));
+  GeoTrf::Translate3D brcktSidePos1( bracketX/2. - brcktSideBlockX/2., -telescopeY/2. + brcktSideBlockY/2.+safety, -telescopeZ/2. + brcktTopBlockZ/2.);
+  xform = new GeoTransform(brcktSidePos1);
   tag = new GeoNameTag("brcktSideBlock");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
   telescopePhys->add(brcktSidePhys);
 
-  CLHEP::Hep3Vector brcktSidePos2( -bracketX/2. + brcktSideBlockX/2., -telescopeY/2. + brcktSideBlockY/2. + safety, -telescopeZ/2. + brcktTopBlockZ/2.);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,brcktSidePos2));
+  GeoTrf::Translate3D brcktSidePos2( -bracketX/2. + brcktSideBlockX/2., -telescopeY/2. + brcktSideBlockY/2. + safety, -telescopeZ/2. + brcktTopBlockZ/2.);
+  xform = new GeoTransform(brcktSidePos2);
   tag = new GeoNameTag("brcktSideBlock");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
@@ -171,8 +168,8 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* brcktLockLog = new GeoLogVol("bracketLog", brcktLock, dbmPeek3);
   GeoPhysVol* brcktLockPhys = new GeoPhysVol(brcktLockLog);
 
-  CLHEP::Hep3Vector brcktLockPos( 0., -telescopeY/2. + trapBackY + brcktLockY/2. + 2*safety, -telescopeZ/2. + bracketZ - brcktLockZ/2. + safety);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,brcktLockPos));
+  GeoTrf::Translate3D brcktLockPos( 0., -telescopeY/2. + trapBackY + brcktLockY/2. + 2*safety, -telescopeZ/2. + bracketZ - brcktLockZ/2. + safety);
+  xform = new GeoTransform(brcktLockPos);
   tag = new GeoNameTag("brcktLock");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
@@ -185,38 +182,38 @@ GeoVPhysVol* DBM_Telescope::Build() {
   const GeoLogVol* sidePlateLog = new GeoLogVol("sidePlateLog", sidePlate, dbmAluminium2);
   GeoPhysVol* sidePlatePhys = new GeoPhysVol(sidePlateLog);
 
-  double spAngle = angle + 17.57126*CLHEP::deg;
+  double spAngle = angle + 17.57126*GeoModelKernelUnits::deg;
   double spRadius = 1/2. * sqrt(coolingSidePlateZ*coolingSidePlateZ + coolingSidePlateY*coolingSidePlateY);
 
-  CLHEP::Hep3Vector sidePlatePos1( mainPlateX/2. + coolingSidePlateX/2. + 2*safety, - telescopeY/2. + spRadius * sin(spAngle), -telescopeZ/2. + layerUnitPos_Z - coolingSidePlatePos*cos(angle) + spRadius * cos(spAngle));
-  xform = new GeoTransform(HepGeom::Transform3D(rmX10, sidePlatePos1));
+  GeoTrf::Translation3D sidePlatePos1( mainPlateX/2. + coolingSidePlateX/2. + 2*safety, - telescopeY/2. + spRadius * sin(spAngle), -telescopeZ/2. + layerUnitPos_Z - coolingSidePlatePos*cos(angle) + spRadius * cos(spAngle));
+  xform = new GeoTransform(GeoTrf::Transform3D(sidePlatePos1*rmX10));
   tag = new GeoNameTag("sidePlate");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
   telescopePhys->add(sidePlatePhys);
 
-  CLHEP::Hep3Vector sidePlatePos2( -mainPlateX/2. - coolingSidePlateX/2. - 2*safety, - telescopeY/2. + spRadius * sin(spAngle), -telescopeZ/2. + layerUnitPos_Z - coolingSidePlatePos*cos(angle) + spRadius * cos(spAngle));
-  xform = new GeoTransform(HepGeom::Transform3D(rmX10, sidePlatePos2));
+  GeoTrf::Translation3D sidePlatePos2( -mainPlateX/2. - coolingSidePlateX/2. - 2*safety, - telescopeY/2. + spRadius * sin(spAngle), -telescopeZ/2. + layerUnitPos_Z - coolingSidePlatePos*cos(angle) + spRadius * cos(spAngle));
+  xform = new GeoTransform(GeoTrf::Transform3D(sidePlatePos2*rmX10));
   tag = new GeoNameTag("sidePlate");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
   telescopePhys->add(sidePlatePhys);
 
   //cooling plates next to the bracket unit
-  const GeoTrap* coolingFin = new GeoTrap(coolingFinHeight/2., trapBack_theta, 90.0*CLHEP::deg, (coolingFinLongZ - coolingFinHeight*tan(angle))/2., coolingFinThick/2., coolingFinThick/2, 0.0, coolingFinLongZ/2., coolingFinThick/2., coolingFinThick/2., 0.0);
+  const GeoTrap* coolingFin = new GeoTrap(coolingFinHeight/2., trapBack_theta, 90.0*GeoModelKernelUnits::deg, (coolingFinLongZ - coolingFinHeight*tan(angle))/2., coolingFinThick/2., coolingFinThick/2, 0.0, coolingFinLongZ/2., coolingFinThick/2., coolingFinThick/2., 0.0);
   const GeoMaterial* dbmAluminium3 = m_mat_mgr->getMaterialForVolume("pix::DBMAluminium3", coolingFin->volume());
   const GeoLogVol* finLog = new GeoLogVol("finLog", coolingFin, dbmAluminium3);
   GeoPhysVol* coolingFinPhys = new GeoPhysVol(finLog);
 
-  CLHEP::Hep3Vector finPos1( mainPlateX/2. - coolingFinThick/2. + safety, -telescopeY/2. +  coolingFinHeight/2. + 4*safety, -telescopeZ/2. + coolingFinPos + 0.05*CLHEP::mm);
-  xform = new GeoTransform(HepGeom::Transform3D(rmX90, finPos1));
+  GeoTrf::Translation3D finPos1( mainPlateX/2. - coolingFinThick/2. + safety, -telescopeY/2. +  coolingFinHeight/2. + 4*safety, -telescopeZ/2. + coolingFinPos + 0.05*GeoModelKernelUnits::mm);
+  xform = new GeoTransform(GeoTrf::Transform3D(finPos1*rmX90));
   tag = new GeoNameTag("finPlate");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
   telescopePhys->add(coolingFinPhys);
 
-  CLHEP::Hep3Vector finPos2( -mainPlateX/2. + coolingFinThick/2. - safety, -telescopeY/2. +  coolingFinHeight/2. + 4*safety, -telescopeZ/2. + coolingFinPos + 0.05*CLHEP::mm);
-  xform = new GeoTransform(HepGeom::Transform3D(rmX90, finPos2));
+  GeoTrf::Translation3D finPos2( -mainPlateX/2. + coolingFinThick/2. - safety, -telescopeY/2. +  coolingFinHeight/2. + 4*safety, -telescopeZ/2. + coolingFinPos + 0.05*GeoModelKernelUnits::mm);
+  xform = new GeoTransform(GeoTrf::Transform3D(finPos2*rmX90));
   tag = new GeoNameTag("finPlate");
   telescopePhys->add(tag);
   telescopePhys->add(xform);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Telescope.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.h
similarity index 81%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Telescope.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.h
index 7900f2f2aaaee0079397424ee697be52e8ef586f..7a9570249d55fb545bf20d29ef39629df461dcfc 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/DBM_Telescope.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/DBM_Telescope.h
@@ -6,8 +6,7 @@
 #ifndef DBMTelescope_H
 #define DBMTelescope_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoVPixelFactory.h"
 #include "GaudiKernel/MsgStream.h"
 #include <iostream>
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.cxx
index e47e6cdf25670608da5a3b6a2064206b11e405fd..27885db1d8c8a7cba1e8f63342e4be838dd54ef8 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.cxx
@@ -2,12 +2,12 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelBarrel.h"
-#include "PixelGeoModel/GeoPixelLayer.h"
-#include "PixelGeoModel/GeoPixelServices.h"
-#include "PixelGeoModel/GeoPixelOldFrame.h"
-#include "PixelGeoModel/GeoPixelStaveRing.h"
-#include "PixelGeoModel/GeoPixelIFlexServices.h"
+#include "GeoPixelBarrel.h"
+#include "GeoPixelLayer.h"
+#include "GeoPixelServices.h"
+#include "GeoPixelOldFrame.h"
+#include "GeoPixelStaveRing.h"
+#include "GeoPixelIFlexServices.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoPara.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -67,11 +67,11 @@ GeoVPhysVol* GeoPixelBarrel::Build( ) {
     if(m_gmt_mgr->isLDPresent()){
       std::ostringstream lname;
       lname << "Layer" << ii;
-      //      GeoAlignableTransform * xform = new GeoAlignableTransform(HepGeom::Transform3D()); 
+      //      GeoAlignableTransform * xform = new GeoAlignableTransform(GeoTrf::Transform3D()); 
 
       // IBL layer shift ( 2mm shift issue )
       double layerZshift = m_gmt_mgr->PixelLayerGlobalShift();
-      GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(CLHEP::HepRotation(),CLHEP::Hep3Vector(0.,0.,layerZshift)));
+      GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Translate3D(0.,0.,layerZshift));
 
       GeoVPhysVol* layerphys = layer.Build();
       GeoNameTag *tag = new GeoNameTag(lname.str());         
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelBarrel.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.h
similarity index 89%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelBarrel.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.h
index 1e3966b012c08a3e69e6febf216fbb18f6b928e5..16f097816ab7e10cc55e2c5d6309036c78855d42 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelBarrel.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelBarrel.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELBARREL_H
 #define GEOPIXELBARREL_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoPixelServices;
 
 class GeoPixelBarrel : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.cxx
index 006dd2bd842d04fdec12aab1a3c8dc440e416c17..a6c8e52e21abc5447440496c251d199949702454 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelCable.h"
+#include "GeoPixelCable.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
@@ -70,7 +70,7 @@ GeoVPhysVol* GeoPixelCable::Build() {
   std::ostringstream o;
   o << m_gmt_mgr->getLD_Label() << label;
   logName = logName+o.str();
-  //std::cout << logName << ": " << weight/CLHEP::g << " g, " << thickness << std::endl;
+  //std::cout << logName << ": " << weight/GeoModelKernelUnits::g << " g, " << thickness << std::endl;
 
   GeoLogVol* theCable = new GeoLogVol(logName,cableBox,cableMat);
   GeoPhysVol* cablePhys = new GeoPhysVol(theCable);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelCable.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.h
similarity index 92%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelCable.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.h
index 5d7b6228a27850825f65cb4fc75900477e213952..c27414f2d6d2fac77e932b85da83bf99645a7737 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelCable.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelCable.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELCABLE_H
 #define GEOPIXELCABLE_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 #include <vector>
 
 class GeoPixelCable : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.cxx
index feed0f3e476f35f8dd348ce4526760fb0ec827be..65ccdc0c24551233903fa19562190cd36fd00880 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.cxx
@@ -11,7 +11,7 @@
 //
 // Contains: nothing
 //
-#include "PixelGeoModel/GeoPixelChip.h"
+#include "GeoPixelChip.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelChip.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.h
similarity index 88%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelChip.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.h
index 143ac4f211e6f5a5ac4154416c09ebb20c0a23eb..57c7e6ec078883c05fa984ed60a9e60e6272921d 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelChip.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelChip.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELCHIP_H
 #define GEOPIXELCHIP_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelChip : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.cxx
index 0d74323902180d9e20a5ba5241ef6cd9260d9e43..6b6b9382d6673da425c4bb3c00e1e97125fcd564 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.cxx
@@ -6,10 +6,10 @@
 // Build detailed stave support : face plate + carbon foam + cable flex + cooling pipe + end blocks
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelDetailedStaveSupport.h"
+#include "GeoPixelDetailedStaveSupport.h"
 
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
-#include "PixelGeoModel/GeoPixelModule.h"
+#include "GeoPixelSiCrystal.h"
+#include "GeoPixelModule.h"
 
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -20,11 +20,13 @@
 #include "GeoModelKernel/GeoNameTag.h"
 
 #include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <algorithm>
 using std::max;
 
 GeoPixelDetailedStaveSupport::GeoPixelDetailedStaveSupport()
+  : m_transform(GeoTrf::Transform3D::Identity())
 {
   m_staveEnvelopShape=0;
   m_bVerbose = (m_gmt_mgr->msgLvl(MSG::DEBUG));
@@ -199,9 +201,9 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   double halfMecStaveWidth=MechanicalStaveWidth*0.5;
 
   // SafetyMargin
-  m_SafetyMargin=.001*CLHEP::mm;
+  m_SafetyMargin=.001*GeoModelKernelUnits::mm;
   double xGblOffset=FacePlateThick+m_SafetyMargin;
-  double safetyMarginZ=.001*CLHEP::mm;
+  double safetyMarginZ=.001*GeoModelKernelUnits::mm;
 
   // Compute approximated stave shape based on DB parameters
   ComputeStaveExternalShape();
@@ -406,7 +408,7 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 
   const GeoMaterial* foam_material = m_mat_mgr->getMaterial(m_gmt_mgr->getMaterialName("CarbonFoam",0,0));
   GeoNameTag* foam_tag = new GeoNameTag("CarbonFoam");
-  GeoTransform* foam_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),CLHEP::Hep3Vector()));
+  GeoTransform* foam_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
   
   GeoLogVol * foam_logVol = new GeoLogVol("CarbonFoam",foam_shape,foam_material);
   GeoPhysVol * foam_logVolPV = new GeoPhysVol(foam_logVol);
@@ -448,16 +450,16 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 										 omegaVolume,
 										 omegaVolume,"pix::Omega_IBL",
 										 glueVolume,"pix::Stycast2850FT");
-      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<omega_material->getName()<<" "<<omega_material->getDensity()/(CLHEP::gram/CLHEP::cm3)<<endmsg;
+      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<omega_material->getName()<<" "<<omega_material->getDensity()/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)<<endmsg;
       omega_logVol = new GeoLogVol("Omega",omega_shape,omega_material);
     }
 
   GeoNameTag* omega_tag = new GeoNameTag("Omega");
-  GeoTransform* omega_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),CLHEP::Hep3Vector()));      
+  GeoTransform* omega_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
 
   //       const GeoMaterial* omega_material = m_mat_mgr->getMaterial(m_gmt_mgr->getMaterialName("Omega",0,0));
   //       GeoNameTag* omega_tag = new GeoNameTag("Omega");
-  //       GeoTransform* omega_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),CLHEP::Hep3Vector()));
+  //       GeoTransform* omega_xform = new GeoTransform(GeoTrf::Transform3D(GeoModelKernelUnits::HepRotation(),GeoTrf::Vector3D()));
   //      GeoLogVol * omega_logVol = new GeoLogVol("Omega",omega_shape,omega_material);
 
   GeoPhysVol * omega_logVolPV = new GeoPhysVol(omega_logVol);
@@ -473,8 +475,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   // ------------------------------------------------------------------------------------------------------------
 
   GeoBox * faceplate_shape = new GeoBox(FacePlateThick*0.5,MechanicalStaveWidth*0.5,MiddleSectionLength*.5);
-  CLHEP::Hep3Vector faceplate_pos((plate1x+plate2x+plate3x+plate4x)*0.25,(plate1y+plate2y+plate3y+plate4y)*0.25,0.0);
-  GeoTransform* faceplate_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),faceplate_pos));
+  GeoTrf::Translate3D faceplate_pos((plate1x+plate2x+plate3x+plate4x)*0.25,(plate1y+plate2y+plate3y+plate4y)*0.25,0.0);
+  GeoTransform* faceplate_xform = new GeoTransform(faceplate_pos);
   
  std::string faceplateMatName;
  const GeoMaterial* faceplate_material;
@@ -498,7 +500,7 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 								  facePlateVolume,
 								  facePlateVolume,"pix::FacePlate_IBL",
 								  glueVolume,"pix::Stycast2850FT");
-      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<faceplate_material->getName()<<" "<<faceplate_material->getDensity()/(CLHEP::gram/CLHEP::cm3)<<endmsg;
+      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<faceplate_material->getName()<<" "<<faceplate_material->getDensity()/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)<<endmsg;
     }
 
   // Create composite material made of faceplate + grease if a thickness of grease is defined is DB
@@ -523,7 +525,7 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 										     facePlateVolume,faceplateMatName,
 										     greaseVolume,"pix::ThermGrease_IBL");
       faceplate_logVol = new GeoLogVol("FacePlate",faceplate_shape,faceplate_material);
-      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<faceplate_material->getName()<<" "<<faceplate_material->getDensity()/(CLHEP::gram/CLHEP::cm3)<<endmsg;
+      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<faceplate_material->getName()<<" "<<faceplate_material->getDensity()/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)<<endmsg;
     }
 
   //  const GeoMaterial* faceplate_material = m_mat_mgr->getMaterial(m_gmt_mgr->getMaterialName("FacePlate",0,0));
@@ -623,9 +625,9 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 //       }
 
       // Add flex in 3D model : A component
-      CLHEP::Hep3Vector cableflex_pos((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,ModulePosZ+flexGapZ*0.5);
-      //      GeoTransform* cableflex_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.0,0.0,-fabs(flex_angle)),cableflex_pos));
-      GeoTransform* cableflex_xform = new GeoTransform(HepGeom::Translate3D(cableflex_pos)*HepGeom::RotateZ3D(fabs(flex_angle)));
+      GeoTrf::Translation3D cableflex_pos((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,ModulePosZ+flexGapZ*0.5);
+      //      GeoTransform* cableflex_xform = new GeoTransform(GeoTrf::Transform3D(GeoModelKernelUnits::HepRotation(0.0,0.0,-fabs(flex_angle)),cableflex_pos));
+      GeoTransform* cableflex_xform = new GeoTransform(GeoTrf::Transform3D(cableflex_pos*GeoTrf::RotateZ3D(fabs(flex_angle))));
 
       GeoLogVol * cableflex_logVol = 0;
       if(bFlexAndWing||bFlexConstantThickness)
@@ -670,8 +672,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 	  // Add flex in 3D model : A component
 
 	  double zPos = (iModule+.5)*ModuleLength_flex+(iModule+.5)*ModuleGap_flex;
-	  CLHEP::Hep3Vector wingflex_posA(wingFlexPosX, wingFlexPosY , zPos-ModuleLength_flex*.25);
-	  GeoTransform* wingflex_xformA = new GeoTransform(HepGeom::Translate3D(wingflex_posA)*HepGeom::RotateZ3D(fabs(flex_angle)));
+	  GeoTrf::Translation3D wingflex_posA(wingFlexPosX, wingFlexPosY , zPos-ModuleLength_flex*.25);
+	  GeoTransform* wingflex_xformA = new GeoTransform(GeoTrf::Transform3D(wingflex_posA*GeoTrf::RotateZ3D(fabs(flex_angle))));
 	  
 	  GeoPhysVol * wingflex_logVolPV_1 = new GeoPhysVol(wingflex_logVol);
 	  GeoNameTag* wingflex_tag = new GeoNameTag(wingName.str());
@@ -679,8 +681,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 	  logVolPV->add(wingflex_xformA);
 	  logVolPV->add(wingflex_logVolPV_1);
 
-	  CLHEP::Hep3Vector wingflex_posA_2(wingFlexPosX, wingFlexPosY , zPos+ModuleLength_flex*.25);
-	  GeoTransform* wingflex_xformA_2 = new GeoTransform(HepGeom::Translate3D(wingflex_posA_2)*HepGeom::RotateZ3D(fabs(flex_angle)));
+	  GeoTrf::Translation3D wingflex_posA_2(wingFlexPosX, wingFlexPosY , zPos+ModuleLength_flex*.25);
+	  GeoTransform* wingflex_xformA_2 = new GeoTransform(GeoTrf::Transform3D(wingflex_posA_2*GeoTrf::RotateZ3D(fabs(flex_angle))));
 	  
 	  GeoPhysVol * wingflex_logVolPV_2 = new GeoPhysVol(wingflex_logVol);
 	  logVolPV->add(wingflex_tag);
@@ -689,16 +691,16 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 
 
 	  // Add flex in 3D model : C component
-	  CLHEP::Hep3Vector wingflex_posC(wingFlexPosX, wingFlexPosY , -zPos-ModuleLength_flex*.25);
-	  GeoTransform* wingflex_xformC = new GeoTransform(HepGeom::Translate3D(wingflex_posC)*HepGeom::RotateZ3D(fabs(flex_angle)));
+	  GeoTrf::Translation3D wingflex_posC(wingFlexPosX, wingFlexPosY , -zPos-ModuleLength_flex*.25);
+	  GeoTransform* wingflex_xformC = new GeoTransform(GeoTrf::Transform3D(wingflex_posC*GeoTrf::RotateZ3D(fabs(flex_angle))));
 	  
 	  GeoPhysVol * wingflex_logVolPV_C1 = new GeoPhysVol(wingflex_logVol);
 	  logVolPV->add(wingflex_tag);
 	  logVolPV->add(wingflex_xformC);
 	  logVolPV->add(wingflex_logVolPV_C1);
 
-	  CLHEP::Hep3Vector wingflex_posC_2(wingFlexPosX, wingFlexPosY , -zPos+ModuleLength_flex*.25);
-	  GeoTransform* wingflex_xformC_2 = new GeoTransform(HepGeom::Translate3D(wingflex_posC_2)*HepGeom::RotateZ3D(fabs(flex_angle)));
+	  GeoTrf::Translation3D wingflex_posC_2(wingFlexPosX, wingFlexPosY , -zPos+ModuleLength_flex*.25);
+	  GeoTransform* wingflex_xformC_2 = new GeoTransform(GeoTrf::Transform3D(wingflex_posC_2*GeoTrf::RotateZ3D(fabs(flex_angle))));
 	  
 	  GeoPhysVol * wingflex_logVolPV_C2 = new GeoPhysVol(wingflex_logVol);
 	  logVolPV->add(wingflex_tag);
@@ -713,7 +715,9 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
       logVolPV->add(cableflex_xform);
       logVolPV->add(cableflex_logVolPV);
 
-      m_gmt_mgr->msg(MSG::INFO)<<cableflex_pos<<" "<<FlexThicknessRL<<" / ";
+      m_gmt_mgr->msg(MSG::INFO) 
+	  << "(" << cableflex_pos.x() << "," << cableflex_pos.y() << "," << cableflex_pos.z() << ")"
+	  << " " << FlexThicknessRL<<" / ";
      
       // Add flex in 3D model : C component
       if((ModuleNumber_flex%2==1&&iModule>0)||ModuleNumber_flex%2==0)
@@ -721,8 +725,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 	  std::ostringstream lname;
 	  lname << "StaveFlex_"<<iFlexModule<<"C";
 
-	  CLHEP::Hep3Vector cableflex_pos2((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-ModulePosZ-flexGapZ*0.5);
-	  GeoTransform* cableflex_xform2 = new GeoTransform(HepGeom::Translate3D(cableflex_pos2)*HepGeom::RotateZ3D(fabs(flex_angle)));
+	  GeoTrf::Translation3D cableflex_pos2((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-ModulePosZ-flexGapZ*0.5);
+	  GeoTransform* cableflex_xform2 = new GeoTransform(GeoTrf::Transform3D(cableflex_pos2*GeoTrf::RotateZ3D(fabs(flex_angle))));
 	  GeoLogVol * cableflex_logVol = 0;
 
 	  const GeoMaterial* scaledFlexMaterial=0;
@@ -791,8 +795,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
       wingName << "WingFlex";
       
       // Add flex in 3D model : A component
-      CLHEP::Hep3Vector wingflex_posA((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,(wingZmax-wingZmin)*.5+FlexStaveMiddleGap);
-      GeoTransform* wingflex_xformA = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.0,0.0,-fabs(flex_angle)),wingflex_posA));
+      GeoTrf::Vector3D wingflex_posA((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,(wingZmax-wingZmin)*.5+FlexStaveMiddleGap);
+      GeoTransform* wingflex_xformA = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0,-fabs(flex_angle)),wingflex_posA));
       
       const GeoMaterial* wingflex_material= m_mat_mgr->getMaterial("pix::WingFlexA");
       GeoLogVol * wingflex_logVol = new GeoLogVol(wingName.str(),wingflex_shape,wingflex_material);
@@ -803,8 +807,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
       logVolPV->add(wingflex_xformA);
       logVolPV->add(wingflex_logVolPV);
       
-      CLHEP::Hep3Vector wingflex_posC((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-((wingZmax-wingZmin)*.5+FlexStaveMiddleGap));
-      GeoTransform* wingflex_xformC = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.0,0.0,-fabs(flex_angle)),wingflex_posC));
+      GeoTrf::Vector3D wingflex_posC((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-((wingZmax-wingZmin)*.5+FlexStaveMiddleGap));
+      GeoTransform* wingflex_xformC = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0,-fabs(flex_angle)),wingflex_posC));
       logVolPV->add(wingflex_tag);
       logVolPV->add(wingflex_xformC);
       logVolPV->add(wingflex_logVolPV);
@@ -829,16 +833,16 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   else
     {
       m_gmt_mgr->msg(MSG::INFO)<<"** TUBE : with Stycast "<<TubeGlueThick<<"  diam "<<TubeOuterDiam*0.5<<" "<<TubeInnerDiam*0.5<<endmsg;
-      double glueVolume = (TubeOuterDiam*0.5+TubeGlueThick)*(TubeOuterDiam*0.5+TubeGlueThick)*CLHEP::pi*MiddleSectionLength;
-      double tubeOuterVolume = TubeOuterDiam*TubeOuterDiam*0.25*CLHEP::pi*MiddleSectionLength;
-      double tubeInnerVolume = TubeInnerDiam*TubeInnerDiam*0.25*CLHEP::pi*MiddleSectionLength;
+      double glueVolume = (TubeOuterDiam*0.5+TubeGlueThick)*(TubeOuterDiam*0.5+TubeGlueThick)*GeoModelKernelUnits::pi*MiddleSectionLength;
+      double tubeOuterVolume = TubeOuterDiam*TubeOuterDiam*0.25*GeoModelKernelUnits::pi*MiddleSectionLength;
+      double tubeInnerVolume = TubeInnerDiam*TubeInnerDiam*0.25*GeoModelKernelUnits::pi*MiddleSectionLength;
 
       const std::string compMatName="CoolingPipeGlue_IBL";
       const GeoMaterial* cp_material = m_mat_mgr->getCompositeMaterialForVolume(compMatName,
 									      tubeOuterVolume-tubeInnerVolume,
 									      tubeOuterVolume-tubeInnerVolume,"pix::CoolingPipe_IBL",
 									      glueVolume-tubeOuterVolume,"pix::Stycast2850FT");
-      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<cp_material->getName()<<" "<<cp_material->getDensity()/(CLHEP::gram/CLHEP::cm3)<<endmsg;
+      m_gmt_mgr->msg(MSG::INFO)<<"***> new material : "<<cp_material->getName()<<" "<<cp_material->getDensity()/(GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3)<<endmsg;
       cp_logVol = new GeoLogVol("CoolingPipe",coolingPipe,cp_material);
     }
 
@@ -849,8 +853,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 //   GeoPhysVol * cp_logPV = new GeoPhysVol(cp_log);
   
   GeoNameTag* cp_tag = new GeoNameTag("CoolingPipe");
-  CLHEP::Hep3Vector cp_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
-  GeoTransform* cp_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_pos));
+  GeoTrf::Translate3D cp_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
+  GeoTransform* cp_xform = new GeoTransform(cp_pos);
   foam_logVolPV->add(cp_tag);
   foam_logVolPV->add(cp_xform);
   foam_logVolPV->add(cp_logPV);
@@ -861,8 +865,7 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   GeoPhysVol * cp_inner_logPV = new GeoPhysVol(cp_inner_log);
   
   GeoNameTag* cp_inner_tag = new GeoNameTag("CoolingPipeInner");
-  CLHEP::Hep3Vector cp_inner_pos(0.0,0.0,0.0);
-  GeoTransform* cp_inner_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_inner_pos));
+  GeoTransform* cp_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
   cp_logPV->add(cp_inner_tag);
   cp_logPV->add(cp_inner_xform);
   cp_logPV->add(cp_inner_logPV);
@@ -963,8 +966,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   GeoPhysVol * cp_endblock_logPV = new GeoPhysVol(cp_endblock_log);
   
   GeoNameTag* cp_endblock_tag = new GeoNameTag("EndBlockCoolingPipe");
-  CLHEP::Hep3Vector cp_endblock_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
-  GeoTransform* cp_endblock_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_endblock_pos));
+  GeoTrf::Translate3D cp_endblock_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
+  GeoTransform* cp_endblock_xform = new GeoTransform(cp_endblock_pos);
   m_endblockAPhysVol->add(cp_endblock_tag);
   m_endblockAPhysVol->add(cp_endblock_xform);
   m_endblockAPhysVol->add(cp_endblock_logPV);
@@ -980,8 +983,7 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
   GeoPhysVol * cp_endblock_inner_logPV = new GeoPhysVol(cp_endblock_inner_log);
   
   GeoNameTag* cp_endblock_inner_tag = new GeoNameTag("EndBlockCoolingPipeInner");
-  CLHEP::Hep3Vector cp_endblock_inner_pos(0.0,0.0,0.0);
-  GeoTransform* cp_endblock_inner_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_endblock_inner_pos));
+  GeoTransform* cp_endblock_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
   cp_endblock_logPV->add(cp_endblock_inner_tag);
   cp_endblock_logPV->add(cp_endblock_inner_xform);
   cp_endblock_logPV->add(cp_endblock_inner_logPV);
@@ -1024,8 +1026,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
 
   // Add flex in 3D model : A component
   //  GeoNameTag* cableflex_tag = new GeoNameTag(lname.str());
-  CLHEP::Hep3Vector cableflex_pos(EndblockFlexXpos,EndblockFlexYpos,0.);
-  m_endblockFlexTrf = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.0,0.0,-fabs(flex_angle)),cableflex_pos));
+  GeoTrf::Vector3D cableflex_pos(EndblockFlexXpos,EndblockFlexYpos,0.);
+  m_endblockFlexTrf = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0,-fabs(flex_angle)),cableflex_pos));
   GeoLogVol * cableflex_logVol = new GeoLogVol(lname.str(),cableflex_shape,scaledFlexMaterial);
   m_endblockFlexPhysVol = new GeoPhysVol(cableflex_logVol);
 
@@ -1047,8 +1049,8 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
     m_serviceCoolPipePhysVol = new GeoPhysVol(cp_service_log);
   
 //   GeoNameTag* cp_service_tag = new GeoNameTag("ServiceCoolingPipe");
-//   CLHEP::Hep3Vector cp_service_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
-//   GeoTransform* cp_service_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_service_pos));
+//   GeoTrf::Vector3D cp_service_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
+//   GeoTransform* cp_service_xform = new GeoTransform(GeoTrf::Transform3D(GeoModelKernelUnits::HepRotation(),cp_service_pos));
 //   //       service_logVolPV->add(cp_service_tag);
 //   //       service_logVolPV->add(cp_service_xform);
 //   //       service_logVolPV->add(cp_service_logPV);
@@ -1062,17 +1064,16 @@ GeoVPhysVol* GeoPixelDetailedStaveSupport::Build() {
     GeoPhysVol * cp_service_inner_logPV = new GeoPhysVol(cp_service_inner_log);
     
     GeoNameTag* cp_service_inner_tag = new GeoNameTag("SrvCoolingPipeInner");
-    CLHEP::Hep3Vector cp_service_inner_pos(0.0,0.0,0.0);
-    GeoTransform* cp_service_inner_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_service_inner_pos));
+    GeoTransform* cp_service_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
     m_serviceCoolPipePhysVol->add(cp_service_inner_tag);
     m_serviceCoolPipePhysVol->add(cp_service_inner_xform);
     m_serviceCoolPipePhysVol->add(cp_service_inner_logPV);
     
-    CLHEP::Hep3Vector cpipe_posA(xGblOffset+TubeMiddlePos,0.0,(MechanicalStaveLength*0.5+m_endblockSrvLength*0.5)-m_serviceZpos);
-    m_serviceCoolPipeTrfA = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cpipe_posA));
+    GeoTrf::Translate3D cpipe_posA(xGblOffset+TubeMiddlePos,0.0,(MechanicalStaveLength*0.5+m_endblockSrvLength*0.5)-m_serviceZpos);
+    m_serviceCoolPipeTrfA = new GeoTransform(GeoTrf::Transform3D(cpipe_posA));
     
-    CLHEP::Hep3Vector cpipe_posC(xGblOffset+TubeMiddlePos,0.0,-((MechanicalStaveLength*0.5+m_endblockSrvLength*0.5)-m_serviceZpos));
-    m_serviceCoolPipeTrfC = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cpipe_posC));
+    GeoTrf::Translate3D cpipe_posC(xGblOffset+TubeMiddlePos,0.0,-((MechanicalStaveLength*0.5+m_endblockSrvLength*0.5)-m_serviceZpos));
+    m_serviceCoolPipeTrfC = new GeoTransform(GeoTrf::Transform3D(cpipe_posC));
   }
 
   // ------------------------------------------------------------------------------------------------------------
@@ -1121,7 +1122,7 @@ void GeoPixelDetailedStaveSupport::computeStaveEnvelopTransformAndSize(double mo
   double stave_xOffset=StaveModuleOffset+moduleThickP, stave_yOffset=MechanicalStaveOffset;
   m_gmt_mgr->msg(MSG::INFO)<<" stave xoffset = "<< stave_xOffset <<endmsg; 
   m_gmt_mgr->msg(MSG::INFO)<<" stave yoffset = "<< stave_yOffset <<endmsg; 
-  m_transform = HepGeom::Translate3D(stave_xOffset,stave_yOffset,0);
+  m_transform = GeoTrf::Translate3D(stave_xOffset,stave_yOffset,0);
 
   double staveSupportThickness=FacePlateThick+m_FoamMiddleThick;
   m_thicknessP = staveSupportThickness;
@@ -1310,7 +1311,7 @@ void GeoPixelDetailedStaveSupport::RemoveCoincidentAndColinearPointsFromShape(st
 	  int i2=(iPt+1)%(nbPoint);
 	  
 	  double zDist=fabs(sqrt((xPoint[i1]-xPoint[i2])*(xPoint[i1]-xPoint[i2])+(yPoint[i1]-yPoint[i2])*(yPoint[i1]-yPoint[i2])));
-	  if(zDist<0.01*CLHEP::mm){
+	  if(zDist<0.01*GeoModelKernelUnits::mm){
 	      xPoint.erase(xPoint.begin()+i1);
 	      yPoint.erase(yPoint.begin()+i1);
 	      bRemovedPoint=true;
@@ -1511,13 +1512,13 @@ void GeoPixelDetailedStaveSupport::AddSurroundingXYMargin(double vMarginX, doubl
 void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
 {
 
-  HepGeom::Point3D<double> midStaveCenter(m_gmt_mgr->IBLStaveOmegaMidCenterX(),0.0,0.0);
+  GeoTrf::Vector3D midStaveCenter(m_gmt_mgr->IBLStaveOmegaMidCenterX(),0.0,0.0);
   double midStaveRadius=m_gmt_mgr->IBLStaveOmegaMidRadius();
-  double midStaveAngle=90.0*CLHEP::deg-m_gmt_mgr->IBLStaveOmegaMidAngle();
+  double midStaveAngle=90.0*GeoModelKernelUnits::deg-m_gmt_mgr->IBLStaveOmegaMidAngle();
 
-  HepGeom::Point3D<double> endStaveCenter(m_gmt_mgr->IBLStaveOmegaEndCenterX(),m_gmt_mgr->IBLStaveOmegaEndCenterY(),0.0);
+  GeoTrf::Vector3D endStaveCenter(m_gmt_mgr->IBLStaveOmegaEndCenterX(),m_gmt_mgr->IBLStaveOmegaEndCenterY(),0.0);
   double endStaveRadius=m_gmt_mgr->IBLStaveOmegaEndRadius();
-  double endStaveAngle=90.0*CLHEP::deg+m_gmt_mgr->IBLStaveOmegaEndAngle();
+  double endStaveAngle=90.0*GeoModelKernelUnits::deg+m_gmt_mgr->IBLStaveOmegaEndAngle();
 
   double omegaThick = m_gmt_mgr->IBLStaveOmegaThickness();
   double omegaEndStavePointY = m_gmt_mgr->IBLStaveMechanicalStaveWidth()*0.5;
@@ -1543,7 +1544,7 @@ void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
   double endStavePt2=-sqrt(endStaveRadius*endStaveRadius-endStaveCenter.x()*endStaveCenter.x())+endStaveCenter.y();
   double endStavePt=endStavePt1;
   if(fabs(endStavePt2-omegaEndStavePointY)<fabs(endStavePt1-omegaEndStavePointY))endStavePt=endStavePt2;
-  HepGeom::Point3D<double> endStavePoint(0.0,endStavePt,0.0);
+  GeoTrf::Vector3D endStavePoint(0.0,endStavePt,0.0);
   m_OmegaEndStaveThick=omegaEndStavePointY-endStavePt;
   m_gmt_mgr->msg(MSG::DEBUG)<<"End stave Y point : "<<endStavePt<<" "<<omegaEndStavePointY<<" -> "<<m_OmegaEndStaveThick<<endmsg;
   m_gmt_mgr->msg(MSG::DEBUG)<<"Angles : "<<midStaveAngle<<" "<<endStaveAngle<<endmsg;
@@ -1551,37 +1552,36 @@ void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
   // ***** compute points coordinates defining stave long side
   // midSidePt : point next to cooling pipe 
 
-  HepGeom::Point3D<double> midSidePt(0.0,0.0,0.0);
-  midSidePt=HepGeom::Point3D<double>(midStaveCenter.x()+midStaveRadius*midCos, midStaveCenter.y()+midStaveRadius*midSin, 0.0);
+  GeoTrf::Vector3D midSidePt(midStaveCenter.x()+midStaveRadius*midCos, midStaveCenter.y()+midStaveRadius*midSin, 0.0);
   m_gmt_mgr->msg(MSG::DEBUG)<< "midSidePt : "<<midSidePt.x()<<" "<<midSidePt.y()<<endmsg;
   m_gmt_mgr->msg(MSG::DEBUG)<< "-> verif : "<<(midSidePt.x()-midStaveCenter.x())*(midSidePt.x()-midStaveCenter.x())+(midSidePt.y()-midStaveCenter.y())*(midSidePt.y()-midStaveCenter.y())-midStaveRadius*midStaveRadius<<"  ps : "<<(midSidePt.x()-midStaveCenter.x())*midSin+(midSidePt.y()-midStaveCenter.y())*midCos<<endmsg;
 
-  HepGeom::Point3D<double> midSidePt_omega(0.0,0.0,0.0);
-  CLHEP::Hep3Vector midSideDir(midSidePt.x()-midStaveCenter.x(),midSidePt.y()-midStaveCenter.y(),0.0);
+  GeoTrf::Vector3D midSidePt_omega(0.0,0.0,0.0);
+  GeoTrf::Vector3D midSideDir(midSidePt.x()-midStaveCenter.x(),midSidePt.y()-midStaveCenter.y(),0.0);
   midSidePt_omega=NeighbourPoint_Rad(midSidePt,midSideDir,omegaThick);
 
   // endSidePt : point next to end of stave
-  HepGeom::Point3D<double> endSidePt(0.0,0.0,0.0);
-  endSidePt=HepGeom::Point3D<double>(endStaveCenter.x()+endStaveRadius*midCos, endStaveCenter.y()+endStaveRadius*midSin, 0.0);
+  GeoTrf::Vector3D endSidePt(0.0,0.0,0.0);
+  endSidePt=GeoTrf::Vector3D(endStaveCenter.x()+endStaveRadius*midCos, endStaveCenter.y()+endStaveRadius*midSin, 0.0);
   m_gmt_mgr->msg(MSG::DEBUG)<< "endSidePt : "<<endSidePt.x()<<" "<<endSidePt.y()<<endmsg;
   m_gmt_mgr->msg(MSG::DEBUG)<< "-> verif : "<<(endSidePt.x()-endStaveCenter.x())*(endSidePt.x()-endStaveCenter.x())+(endSidePt.y()-endStaveCenter.y())*(endSidePt.y()-endStaveCenter.y())-endStaveRadius*endStaveRadius<<"  ps : "<<(endSidePt.x()-endStaveCenter.x())*midSin-(endSidePt.y()-endStaveCenter.y())*midCos<<endmsg;
 
-  HepGeom::Point3D<double> endSidePt_omega(0.0,0.0,0.0);
-  CLHEP::Hep3Vector endSideDir(endSidePt.x()-endStaveCenter.x(),endSidePt.y()-endStaveCenter.y(),0.0);
+  GeoTrf::Vector3D endSidePt_omega(0.0,0.0,0.0);
+  GeoTrf::Vector3D endSideDir(endSidePt.x()-endStaveCenter.x(),endSidePt.y()-endStaveCenter.y(),0.0);
   endSidePt_omega=NeighbourPoint_Rad(endSidePt,endSideDir,omegaThick);
 
 
   // ***** Points defining the vertex of foam module and omega module
   
   // Foam module
-  HepGeom::Point3D<double> midStavePoint(0.0,0.0,0.0);
+  GeoTrf::Vector3D midStavePoint(0.0,0.0,0.0);
   midStavePoint=IntersectionPoint(midSidePt.x(),midSidePt.y(),endSidePt.x(),endSidePt.y(),
 				  midSidePt.x(),-midSidePt.y(),endSidePt.x(),-endSidePt.y());
   m_FoamMiddleThick=midStavePoint.x();
   m_gmt_mgr->msg(MSG::DEBUG)<< "Foam thickness (middle) "<<m_FoamMiddleThick<<" ("<<midStavePoint.y()<<") "<<endmsg;
 
   // Omega module
-  HepGeom::Point3D<double> midStavePoint_omega(0.0,0.0,0.0);
+  GeoTrf::Vector3D midStavePoint_omega(0.0,0.0,0.0);
   midStavePoint_omega=IntersectionPoint(midSidePt_omega.x(),midSidePt_omega.y(),endSidePt_omega.x(),endSidePt_omega.y(),
 					midSidePt_omega.x(),-midSidePt_omega.y(),endSidePt_omega.x(),-endSidePt_omega.y());
   m_OmegaMidStaveThick=midStavePoint_omega.x()-midStavePoint.x();
@@ -1591,23 +1591,23 @@ void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
   // ***** Points defining the rounded shape at the edge of the stave
 
   // Neighbour endstave point (without omega)
-  HepGeom::Point3D<double> endStavePoint_omega(0.0,0.0,0.0);
-  CLHEP::Hep3Vector endStaveDir(endStavePoint.x()-endStaveCenter.x(),endStavePoint.y()-endStaveCenter.y(),0.0);
+  GeoTrf::Vector3D endStavePoint_omega(0.0,0.0,0.0);
+  GeoTrf::Vector3D endStaveDir(endStavePoint.x()-endStaveCenter.x(),endStavePoint.y()-endStaveCenter.y(),0.0);
   endStavePoint_omega=NeighbourPoint_Rad(endStavePoint,endStaveDir,omegaThick);
 
-  HepGeom::Point3D<double> endSidePt_omega2(0.0,0.0,0.0);
+  GeoTrf::Vector3D endSidePt_omega2(0.0,0.0,0.0);
   endSidePt_omega2=IntersectionPoint(midSidePt_omega.x(),midSidePt_omega.y(),endSidePt_omega.x(),endSidePt_omega.y(),
 				     endStavePoint_omega.x(),endStavePoint_omega.y(),endStavePoint.x(),endStavePoint.y()+m_OmegaEndStaveThick);
   m_gmt_mgr->msg(MSG::DEBUG)<< "EndStave + omega par intersection X/Y "<<endSidePt_omega2.x()<<" "<<endSidePt_omega2.y()<<endmsg;
   m_OmegaEndStavePointX=endSidePt_omega2.x();
   m_OmegaEndStavePointY=endSidePt_omega2.y();
 
-  HepGeom::Point3D<double> endSidePt_inner(0.0,0.0,0.0);
-  CLHEP::Hep3Vector endSidePt_vec(endSidePt_omega2.x()-endStavePoint.x(),endSidePt_omega2.y()-(endStavePoint.y()+m_OmegaEndStaveThick),0.0);
+  GeoTrf::Vector3D endSidePt_inner(0.0,0.0,0.0);
+  GeoTrf::Vector3D endSidePt_vec(endSidePt_omega2.x()-endStavePoint.x(),endSidePt_omega2.y()-(endStavePoint.y()+m_OmegaEndStaveThick),0.0);
   endSidePt_inner=NeighbourPoint_Perp(endSidePt_omega2,endSidePt_vec,omegaThick,-1);
 
   // Compute Rx3,Ry3 coordinates
-  HepGeom::Point3D<double> endSidePt_inter(0.0,0.0,0.0);
+  GeoTrf::Vector3D endSidePt_inter(0.0,0.0,0.0);
   endSidePt_inter=IntersectionPoint(midSidePt.x(),midSidePt.y(),endSidePt.x(),endSidePt.y(),
 				    endSidePt_inner.x(),endSidePt_inner.y(),endStavePoint.x(),endStavePoint.y());
   m_FoamEdgePointX=endSidePt_inter.x();
@@ -1623,7 +1623,7 @@ void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
   m_gmt_mgr->msg(MSG::DEBUG)<< "Verfi angles : "<<angle1<<" "<<angle2<<" "<<angle3<<"  / "<<angle1*180.0/3.1415<<" "<<angle2*180.0/3.1415<<endmsg;
 
   // Compute mid stave side point
-  HepGeom::Point3D<double> midSidePoint(0.0,0.0,0.0);
+  GeoTrf::Vector3D midSidePoint(0.0,0.0,0.0);
   midSidePoint=IntersectionPoint(midSidePt_omega.x(),midSidePt_omega.y(),endSidePt_omega.x(),endSidePt_omega.y(),
 				 0.0,(endStavePoint.y()+m_OmegaEndStaveThick)*0.5,10.0,(endStavePoint.y()+m_OmegaEndStaveThick)*0.5);
   m_MidStaveSidePointX=midSidePoint.x();
@@ -1632,50 +1632,50 @@ void GeoPixelDetailedStaveSupport::ComputeStaveExternalShape()
 }
 
 
-HepGeom::Point3D<double> GeoPixelDetailedStaveSupport::IntersectionPoint(double Ax,double Ay,double Bx,double By,double Cx,double Cy,double Dx,double Dy)
+GeoTrf::Vector3D GeoPixelDetailedStaveSupport::IntersectionPoint(double Ax,double Ay,double Bx,double By,double Cx,double Cy,double Dx,double Dy)
 {
   double tmp=(Bx-Ax)*(Dy-Cy)-(By-Ay)*(Dx-Cx);
   double invTmp=1.0/tmp;
     
   double r=((Ay-Cy)*(Dx-Cx)-(Ax-Cx)*(Dy-Cy))*invTmp;
     
-  HepGeom::Point3D<double> inter(Ax+r*(Bx-Ax),Ay+r*(By-Ay),0.0);
+  GeoTrf::Vector3D inter(Ax+r*(Bx-Ax),Ay+r*(By-Ay),0.0);
     
   return inter;
 }
 
 
-CLHEP::Hep3Vector GeoPixelDetailedStaveSupport::NormalizeDir(CLHEP::Hep3Vector v)
+GeoTrf::Vector3D GeoPixelDetailedStaveSupport::NormalizeDir(GeoTrf::Vector3D v)
 {
   double tmp=1.0/sqrt(v.x()*v.x()+v.y()*v.y());
-  return CLHEP::Hep3Vector(v.x()*tmp,v.y()*tmp,0.0);
+  return GeoTrf::Vector3D(v.x()*tmp,v.y()*tmp,0.0);
 }
 
 
-HepGeom::Point3D<double> GeoPixelDetailedStaveSupport::NeighbourPoint_Rad(HepGeom::Point3D<double> p, CLHEP::Hep3Vector v, double delta)
+GeoTrf::Vector3D GeoPixelDetailedStaveSupport::NeighbourPoint_Rad(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta)
 {
-  CLHEP::Hep3Vector vNorm=NormalizeDir(v);
+  GeoTrf::Vector3D vNorm=NormalizeDir(v);
   double xnew=p.x()+delta*vNorm.x();
   double ynew=p.y()+delta*vNorm.y();
-  return HepGeom::Point3D<double>(xnew,ynew,0.0);
+  return GeoTrf::Vector3D(xnew,ynew,0.0);
 }
 
-HepGeom::Point3D<double> GeoPixelDetailedStaveSupport::NeighbourPoint_Perp(HepGeom::Point3D<double> p, CLHEP::Hep3Vector v, double delta, int iDir)
+GeoTrf::Vector3D GeoPixelDetailedStaveSupport::NeighbourPoint_Perp(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta, int iDir)
 {
-  CLHEP::Hep3Vector vNorm=NormalizeDir(v);
+  GeoTrf::Vector3D vNorm=NormalizeDir(v);
   double xnew=p.x()-iDir*delta*vNorm.y();
   double ynew=p.y()+iDir*delta*vNorm.x();
-  return HepGeom::Point3D<double>(xnew,ynew,0.0);
+  return GeoTrf::Vector3D(xnew,ynew,0.0);
 }
 
 double GeoPixelDetailedStaveSupport::ComputeAngle(double ux, double uy, double vx, double vy)
 {
   
-  CLHEP::Hep3Vector u(ux,uy,0.0);
-  CLHEP::Hep3Vector v(vx,vy,0.0);
+  GeoTrf::Vector3D u(ux,uy,0.0);
+  GeoTrf::Vector3D v(vx,vy,0.0);
 
-  CLHEP::Hep3Vector uNorm=NormalizeDir(u);
-  CLHEP::Hep3Vector vNorm=NormalizeDir(v);
+  GeoTrf::Vector3D uNorm=NormalizeDir(u);
+  GeoTrf::Vector3D vNorm=NormalizeDir(v);
 
   double pScal=uNorm.x()*vNorm.x()+uNorm.y()*vNorm.y();
   double angle=acos(pScal);
@@ -1683,7 +1683,7 @@ double GeoPixelDetailedStaveSupport::ComputeAngle(double ux, double uy, double v
   return angle;
 }
 
-double GeoPixelDetailedStaveSupport::ComputeDistance(HepGeom::Point3D<double> p, HepGeom::Point3D<double> q)
+double GeoPixelDetailedStaveSupport::ComputeDistance(GeoTrf::Vector3D p, GeoTrf::Vector3D q)
 {
   return sqrt((q.x()-p.x())*(q.x()-p.x())+(q.y()-p.y())*(q.y()-p.y()));
 }
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDetailedStaveSupport.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.h
similarity index 80%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDetailedStaveSupport.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.h
index 0542199492805e25f2d2a06623bc588a0ada1400..9eaadecff17414982a67fe5281f7ff0825a7932d 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDetailedStaveSupport.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDetailedStaveSupport.h
@@ -5,8 +5,9 @@
 #ifndef GEOPIXELDETAILEDSTAVESUPPORT_H
 #define GEOPIXELDETAILEDSTAVESUPPORT_H
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
 
@@ -16,7 +17,7 @@ public:
   GeoPixelDetailedStaveSupport();
   virtual GeoVPhysVol* Build();
   virtual GeoVPhysVol* getPhysVol() const {return m_physVol;}
-  virtual const HepGeom::Transform3D & transform() const {return m_transform;}
+  virtual const GeoTrf::Transform3D & transform() const {return m_transform;}
   virtual double thicknessP() const {return m_thicknessP;}
   virtual double thicknessN() const {return m_thicknessN;}
   virtual GeoSimplePolygonBrep* computeStaveEnvelopShape( double safetyMargin);
@@ -46,7 +47,7 @@ private:
   GeoTransform* m_serviceCoolPipeTrfA;
   GeoTransform* m_serviceCoolPipeTrfC;
 
-  HepGeom::Transform3D m_transform;
+  GeoTrf::Transform3D m_transform;
   double m_thicknessP;
   double m_thicknessN;
   double m_thicknessN_svc;
@@ -73,12 +74,12 @@ private:
   double m_MidStaveSidePointY;
 
   void ComputeStaveExternalShape();
-  HepGeom::Point3D<double> IntersectionPoint(double Ax,double Ay,double Bx,double By,double Cx,double Cy,double Dx,double Dy);
-  CLHEP::Hep3Vector NormalizeDir(CLHEP::Hep3Vector v);
-  HepGeom::Point3D<double> NeighbourPoint_Rad(HepGeom::Point3D<double> p, CLHEP::Hep3Vector v, double delta);
-  HepGeom::Point3D<double> NeighbourPoint_Perp(HepGeom::Point3D<double> p, CLHEP::Hep3Vector v, double delta, int iDir);
+  GeoTrf::Vector3D IntersectionPoint(double Ax,double Ay,double Bx,double By,double Cx,double Cy,double Dx,double Dy);
+  GeoTrf::Vector3D NormalizeDir(GeoTrf::Vector3D v);
+  GeoTrf::Vector3D NeighbourPoint_Rad(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta);
+  GeoTrf::Vector3D NeighbourPoint_Perp(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta, int iDir);
   double ComputeAngle(double ux, double uy, double vx, double vy);
-  double ComputeDistance(HepGeom::Point3D<double> p, HepGeom::Point3D<double> q);
+  double ComputeDistance(GeoTrf::Vector3D p, GeoTrf::Vector3D q);
 
 };
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.cxx
index bc0d5132beb734623959f1bdef8160b3dd43b4e8..3ba59bf0a3c4448ce070940906f03cf50a8ee5a4 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.cxx
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelDisk.h"
-#include "PixelGeoModel/GeoPixelModule.h"
-#include "PixelGeoModel/GeoPixelDiskSupports.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
+#include "GeoPixelDisk.h"
+#include "GeoPixelModule.h"
+#include "GeoPixelDiskSupports.h"
+#include "GeoPixelSiCrystal.h"
 
 #include "InDetGeoModelUtils/ExtraMaterial.h"
 
@@ -55,7 +55,7 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   // Need to specify some eta. Assume all module the same
   GeoPixelModule psd(theSensor);
   double zpos = m_gmt_mgr->PixelECSiDz1()*0.5;
-  double deltaPhi = 360.*CLHEP::deg/ (float) nbECSector;
+  double deltaPhi = 360.*GeoModelKernelUnits::deg/ (float) nbECSector;
   // This is the start angle of the even modules (3.75 deg):
   double startAngle = deltaPhi*0.25;
   // Start angle could eventually come from the database...
@@ -133,19 +133,20 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
     m_gmt_mgr->SetPhi(phiId);
 
     double angle = ii*0.5*deltaPhi+startAngle;
-    //if ( m_gmt_mgr->GetSide()<0 ) angle = 360*CLHEP::deg-(ii*deltaPhi+startAngle);
+    //if ( m_gmt_mgr->GetSide()<0 ) angle = 360*GeoModelKernelUnits::deg-(ii*deltaPhi+startAngle);
     int diskSide = (ii%2) ? +1 : -1; // even: -1, odd +1
-    CLHEP::HepRotation rm;
-    rm.rotateY(90*CLHEP::deg);
+
+
+    GeoTrf::Transform3D rmX(GeoTrf::Transform3D::Identity());
     if (oldGeometry && m_gmt_mgr->GetSide()<0) {
-      if (diskSide > 0) rm.rotateX(180.*CLHEP::deg); // This is for compatibilty with older geomtries.
+      if (diskSide > 0) rmX = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg); // This is for compatibilty with older geomtries.
     } else {
-      if (diskSide < 0) rm.rotateX(180.*CLHEP::deg); // depth axis points towards disk.
+      if (diskSide < 0) rmX = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg); // depth axis points towards disk.
     } 
-    rm.rotateZ(angle);
-    CLHEP::Hep3Vector pos(moduleRadius,0.,diskSide*zpos);
-    pos.rotateZ(angle);
-    GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(angle) * rmX * GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    GeoTrf::Vector3D pos(moduleRadius,0.,diskSide*zpos);
+    pos = GeoTrf::RotateZ3D(angle)*pos;
+    GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rm);
     GeoVPhysVol * modulePhys = psd.Build();
     std::ostringstream nameTag; 
     nameTag << "ModuleEC" << phiId;
@@ -166,7 +167,7 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   GeoPixelDiskSupports pds;
   for(int ii =0; ii< pds.NCylinders(); ii++) {
     pds.SetCylinder(ii);
-    GeoTransform* xform = new GeoTransform( HepGeom::Translate3D(0, 0, pds.ZPos()) );
+    GeoTransform* xform = new GeoTransform( GeoTrf::Translate3D(0, 0, pds.ZPos()) );
     diskPhys->add(xform);
     diskPhys->add(pds.Build() );
   }
@@ -207,11 +208,11 @@ double GeoPixelDisk::Thickness() {
   // 7-1 I switch to the minimum thickness possible as the cables are right
   // outside this volume.
   //
-  //  return 10*CLHEP::mm;
+  //  return 10*GeoModelKernelUnits::mm;
   // GWG. It would be nice to get these numbers from the module itself to
   // ensure consistency.
-  double safety = 0.01* CLHEP::mm; // This is the safety added to the module.
-  double zClearance = 0.5 * CLHEP::mm; // Clearance for misalignments
+  double safety = 0.01* GeoModelKernelUnits::mm; // This is the safety added to the module.
+  double zClearance = 0.5 * GeoModelKernelUnits::mm; // Clearance for misalignments
   double tck = 2*(safety + 0.5*m_gmt_mgr->PixelBoardThickness()
                   + std::max(m_gmt_mgr->PixelHybridThickness(),
 			     m_gmt_mgr->PixelChipThickness()+m_gmt_mgr->PixelChipGap())
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDisk.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.h
similarity index 87%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDisk.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.h
index 2c0c281e84e3a17ff7c746d57390c7554975cee5..484e5919ae5950fd2d3242d18338587683e09baf 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDisk.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDisk.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELDISK_H
 #define GEOPIXELDISK_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelDisk : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.cxx
index deeca836e1f4db019d4235b01845d5dc7aff23f9..13d094d8afe8209fc95f7132363418bcbb3cf85e 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.cxx
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelDiskSLHC.h"
-#include "PixelGeoModel/GeoPixelDiskSupports.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
-#include "PixelGeoModel/GeoPixelRingSLHC.h"
+#include "GeoPixelDiskSLHC.h"
+#include "GeoPixelDiskSupports.h"
+#include "GeoPixelSiCrystal.h"
+#include "GeoPixelRingSLHC.h"
 
 #include "InDetGeoModelUtils/ExtraMaterial.h"
 
@@ -77,7 +77,7 @@ GeoVPhysVol* GeoPixelDiskSLHC::Build( ) {
       // front rings first (away from IP)
       m_gmt_mgr->setDiskFront();
       GeoPixelRingSLHC gpRingF(theSensor);
-      GeoTransform* xfront = new GeoTransform( HepGeom::Translate3D(0, 0, zpos) );
+      GeoTransform* xfront = new GeoTransform( GeoTrf::Translate3D(0, 0, zpos) );
       diskPhys->add( new GeoNameTag("PixelECRing") );
       diskPhys->add( new GeoIdentifierTag(2*iring) );
       diskPhys->add( xfront );
@@ -89,7 +89,7 @@ GeoVPhysVol* GeoPixelDiskSLHC::Build( ) {
       // then back rings (near IP)
       m_gmt_mgr->setDiskBack();
       GeoPixelRingSLHC gpRingB(theSensor);
-      GeoTransform* xback = new GeoTransform( HepGeom::Translate3D(0, 0, -zpos) );
+      GeoTransform* xback = new GeoTransform( GeoTrf::Translate3D(0, 0, -zpos) );
       diskPhys->add( new GeoNameTag("PixelECRing") );
       diskPhys->add( new GeoIdentifierTag(2*iring+1) ); // unique
       diskPhys->add( xback );
@@ -103,7 +103,7 @@ GeoVPhysVol* GeoPixelDiskSLHC::Build( ) {
   for(int ii =0; ii< pds.NCylinders(); ii++) {
     pds.SetCylinder(ii);
     GeoNameTag* tag = new GeoNameTag("DiskSupport");
-    GeoTransform* xform = new GeoTransform( HepGeom::Translate3D(0, 0, pds.ZPos()) );
+    GeoTransform* xform = new GeoTransform( GeoTrf::Translate3D(0, 0, pds.ZPos()) );
     diskPhys->add(tag);
     diskPhys->add(xform);
     diskPhys->add(pds.Build() );
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSLHC.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.h
similarity index 85%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSLHC.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.h
index 4397cfdf5f5636cb52269dfc4171250d0e462381..d3b882e6d1cbd18fc20555dab7845d0d566b7e3b 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSLHC.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSLHC.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELDISKSLHC_H
 #define GEOPIXELDISKSLHC_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
 class GeoPixelDiskSLHC : public GeoVPixelFactory {
  public:
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.cxx
index a305d0e53c777530d11906cb327eca23be117034..7e3e94f2b598f610b07b7720513ed6a0074c1d62 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelDiskSupports.h"
+#include "GeoPixelDiskSupports.h"
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSupports.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.h
similarity index 92%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSupports.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.h
index 1a7c34155504c5b3d384b23dcb415fca72ce2a8a..c60302eac1aeb8f18bebabc0e7f03fa0d8fbf481 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelDiskSupports.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelDiskSupports.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELDISKSUPPORTS_H
 #define GEOPIXELDISKSUPPORTS_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelDiskSupports : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.cxx
index b0a9ff094aa99d9e2faf3f8d4587c19f6241b52e..552112bcba06ed13f19b93efa951be426fd6f9d3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelECCable.h"
+#include "GeoPixelECCable.h"
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelECCable.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.h
similarity index 86%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelECCable.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.h
index cde825e4b4e00c54b8f83eefeedf32ac46191af0..ec4bf77bb4e007d456ac0443eff0b586cb846a4f 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelECCable.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelECCable.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELECCABLE_H
 #define GEOPIXELECCABLE_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelECCable : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.cxx
index 533c324f560b88a94fd5e1e38aa0250b5ff26ca0..4279d0d89a2b84a19553f701e3afb29b5f4593f0 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.cxx
@@ -2,11 +2,11 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelEndCap.h"
-#include "PixelGeoModel/GeoPixelDisk.h"
-#include "PixelGeoModel/GeoPixelDiskSLHC.h"
-#include "PixelGeoModel/GeoPixelECCable.h"
-#include "PixelGeoModel/GeoPixelServices.h"
+#include "GeoPixelEndCap.h"
+#include "GeoPixelDisk.h"
+#include "GeoPixelDiskSLHC.h"
+#include "GeoPixelECCable.h"
+#include "GeoPixelServices.h"
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoNameTag.h"
@@ -78,7 +78,7 @@ GeoVPhysVol* GeoPixelEndCap::Build( ) {
       std::ostringstream nameTag; 
       nameTag << "Disk" << idisk;
       GeoNameTag * tag = new GeoNameTag(nameTag.str());
-      GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::TranslateZ3D(zdisk));
+      GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::TranslateZ3D(zdisk));
 
       GeoVPhysVol * diskPhys = 0;
       if (m_gmt_mgr->slhc()) {
@@ -102,10 +102,10 @@ GeoVPhysVol* GeoPixelEndCap::Build( ) {
       //
       if (pecc && pd) { // Not in SLHC
 	double dz = pd->Thickness()/2. + m_gmt_mgr->PixelECCablesDistance() ;
-	GeoTransform * xformCablesPlus = new GeoTransform(HepGeom::TranslateZ3D(zdisk+dz));
+	GeoTransform * xformCablesPlus = new GeoTransform(GeoTrf::TranslateZ3D(zdisk+dz));
 	ecPhys->add(xformCablesPlus);
 	ecPhys->add(pecc->Build() );
-	GeoTransform * xformCablesMinus = new GeoTransform(HepGeom::TranslateZ3D(zdisk-dz));
+	GeoTransform * xformCablesMinus = new GeoTransform(GeoTrf::TranslateZ3D(zdisk-dz));
 	ecPhys->add(xformCablesMinus);
 	ecPhys->add(pecc->Build() );
       }
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEndCap.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.h
similarity index 89%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEndCap.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.h
index 72b43040a8ac278c5921ee1d9cf7cbd3cab19f0a..eba497217a34eeb1eded74c7e0ff3b1cd373b785 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEndCap.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEndCap.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELENDCAP_H
 #define GEOPIXELENDCAP_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoPixelServices;
 
 class GeoPixelEndCap : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.cxx
index 1f1bdb7fab8dcdf710bd0b347a21f7f3b0f5acb9..0a19ebf30ecb225e9a89ac48438ed8ab495f2715 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelEnvelope.h"
+#include "GeoPixelEnvelope.h"
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoPcon.h"
 #include "GeoModelKernel/GeoLogVol.h"
@@ -12,14 +12,14 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 
-#include "PixelGeoModel/GeoPixelBarrel.h"
-#include "PixelGeoModel/GeoPixelEndCap.h"
-#include "PixelGeoModel/GeoPixelServices.h"
-#include "PixelGeoModel/GeoPixelFrame.h"
-#include "PixelGeoModel/GeoPixelOldFrame.h"
-#include "PixelGeoModel/GeoPixelIFlexServices.h"
-#include "PixelGeoModel/GeoPixelIBLFwdServices.h"
-#include "PixelGeoModel/DBM_Det.h"
+#include "GeoPixelBarrel.h"
+#include "GeoPixelEndCap.h"
+#include "GeoPixelServices.h"
+#include "GeoPixelFrame.h"
+#include "GeoPixelOldFrame.h"
+#include "GeoPixelIFlexServices.h"
+#include "GeoPixelIBLFwdServices.h"
+#include "DBM_Det.h"
 
 #include "InDetGeoModelUtils/VolumeBuilder.h"
 #include "InDetGeoModelUtils/VolumeSplitterUtils.h"
@@ -59,7 +59,7 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
     envelopeShape = new GeoTube(rmin,rmax,halflength);
     pixZone = new InDetDD::TubeZone("Pixel",-halflength,halflength,rmin,rmax);
   } else {
-    GeoPcon* envelopeShapeTmp  = new GeoPcon(0.,2*CLHEP::pi);
+    GeoPcon* envelopeShapeTmp  = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
     // table contains +ve z values only and envelope is assumed to be symmetric around z.
     int numPlanes = m_gmt_mgr->PixelEnvelopeNumPlanes();
     for (int i = 0; i < numPlanes * 2; i++) {
@@ -91,7 +91,7 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
     //
     // Add the Barrel:
     //
-    HepGeom::Transform3D barrelTransform = m_gmt_mgr->partTransform("Barrel");
+    GeoTrf::Transform3D barrelTransform = m_gmt_mgr->partTransform("Barrel");
     
     m_gmt_mgr->SetBarrel();
     GeoPixelBarrel brl(pixServices);
@@ -115,10 +115,10 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
 
       m_DDmgr->numerology().addEndcap(2);
     
-      HepGeom::Transform3D endcapATransform = m_gmt_mgr->partTransform("EndcapA");
+      GeoTrf::Transform3D endcapATransform = m_gmt_mgr->partTransform("EndcapA");
       
       m_gmt_mgr->SetPos();
-      GeoTransform* xform = new GeoTransform(endcapATransform * HepGeom::TranslateZ3D(zpos));
+      GeoTransform* xform = new GeoTransform(endcapATransform * GeoTrf::TranslateZ3D(zpos));
       GeoNameTag* tag  = new GeoNameTag("EndCapA");
       envelopePhys->add(tag);
       envelopePhys->add(new GeoIdentifierTag(2));
@@ -131,11 +131,11 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
 
       m_DDmgr->numerology().addEndcap(-2);
       
-      HepGeom::Transform3D endcapCTransform = m_gmt_mgr->partTransform("EndcapC");
+      GeoTrf::Transform3D endcapCTransform = m_gmt_mgr->partTransform("EndcapC");
       
       m_gmt_mgr->SetEndcap();
       m_gmt_mgr->SetNeg();
-      GeoTransform* xform = new GeoTransform(endcapCTransform * HepGeom::TranslateZ3D(-zpos) *  HepGeom::RotateY3D(180*CLHEP::deg));
+      GeoTransform* xform = new GeoTransform(endcapCTransform * GeoTrf::TranslateZ3D(-zpos) *  GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
       GeoNameTag* tag  = new GeoNameTag("EndCapC");
       envelopePhys->add(tag);
       envelopePhys->add(new GeoIdentifierTag(-2));
@@ -237,7 +237,7 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
   // so if change then change in DBM_module too
 
   if (m_gmt_mgr->dbm()) {
-    HepGeom::Translate3D dbmTransform1( 0, 0, 887.002*CLHEP::mm + ( m_gmt_mgr->DBMTelescopeZ() )/2.); //Add 0.002mm to 887mm for safety
+    GeoTrf::Translate3D dbmTransform1( 0, 0, 887.002*GeoModelKernelUnits::mm + ( m_gmt_mgr->DBMTelescopeZ() )/2.); //Add 0.002mm to 887mm for safety
 
     //m_DDmgr->numerology().addEndcap(4);
     m_gmt_mgr->SetPartsDBM();
@@ -253,7 +253,7 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
     //m_DDmgr->numerology().addEndcap(-4);
     m_gmt_mgr->SetNeg();
     GeoNameTag* tag2 = new GeoNameTag("DBMC");
-    GeoTransform* dbmTransform2 = new GeoTransform(HepGeom::TranslateZ3D(-887.002*CLHEP::mm - ( m_gmt_mgr->DBMTelescopeZ() )/2.) *  HepGeom::RotateY3D(180*CLHEP::deg));
+    GeoTransform* dbmTransform2 = new GeoTransform(GeoTrf::TranslateZ3D(-887.002*GeoModelKernelUnits::mm - ( m_gmt_mgr->DBMTelescopeZ() )/2.) *  GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
     envelopePhys->add(tag2);
     envelopePhys->add(new GeoIdentifierTag(-4));
     envelopePhys->add(dbmTransform2);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEnvelope.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.h
similarity index 84%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEnvelope.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.h
index 0e21e84d5bf9e63703bc83bf85c491393f8cd886..da67c0c8e4623d33a509ff210a910c0705b9a44f 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelEnvelope.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelEnvelope.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELENVELOPE_H
 #define GEOPIXELENVELOPE_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
 class GeoPixelEnvelope : public GeoVPixelFactory {
  public:
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.cxx
index 4f353b767dc4319c7c3a99470ce2d9cc24d51dfd..5a9fc2db145a2e6a7ca17850cee031193581f5ea 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.cxx
@@ -6,7 +6,7 @@
 // This class builds one trapezoid
 //
 //
-#include "PixelGeoModel/GeoPixelFluid.h"
+#include "GeoPixelFluid.h"
 #include "GeoModelKernel/GeoTrd.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFluid.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.h
similarity index 91%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFluid.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.h
index e6503ca4be0140054e4e4b14a0a64d73f4ec6859..06909551298b43c11e6fe630b24ca67ff045adc3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFluid.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFluid.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELFLUID_H
 #define GEOPIXELFLUID_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 #include <sstream>
 
 class GeoLogVol;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.cxx
index b1a906be92f6ace1f93ca698705aeb41f31184cb..e626969c244f7d3ef7fc5cc2311a1480d80238a3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.cxx
@@ -4,7 +4,8 @@
 
 // Build the global support frame
 
-#include "PixelGeoModel/GeoPixelFrame.h"
+#include "GeoPixelFrame.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoPara.h"
 #include "GeoModelKernel/GeoTrap.h"
@@ -14,8 +15,7 @@
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoTransform.h"
-
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include <algorithm>
 
 GeoPixelFrame::GeoPixelFrame()
@@ -47,18 +47,18 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
   ////////////////////////
   
   // Make envelope to hold the frame
-  //double safety = 0.001 * CLHEP::mm;
-  double epsilon = 0.00001 * CLHEP::mm;
+  //double safety = 0.001 * GeoModelKernelUnits::mm;
+  double epsilon = 0.00001 * GeoModelKernelUnits::mm;
   double halflength = 0.5*std::abs(zmax - zmin); 
 
-  double alpha = CLHEP::pi/numSides;
+  double alpha = GeoModelKernelUnits::pi/numSides;
   double cosalpha = cos(alpha);
   double sinalpha = sin(alpha);
   
   /*
   double rminEnv = (rminSide-safety)/cosalpha;
   double rmaxEnv = (rmaxSide+safety)/cosalpha;
-  GeoPgon * frameEnvShape = new GeoPgon(phiLoc-alpha,2*CLHEP::pi,numSides);
+  GeoPgon * frameEnvShape = new GeoPgon(phiLoc-alpha,2*GeoModelKernelUnits::pi,numSides);
   frameEnvShape->addPlane(zCenter-halflength-0.5*epsilon,rminEnv,rmaxEnv);
   frameEnvShape->addPlane(zCenter+halflength+0.5*epsilon,rminEnv,rmaxEnv);
 
@@ -134,7 +134,7 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
   if (numElements) {
     double sideThick = rmaxSide - rminSide;
 
-    std::vector<HepGeom::Transform3D> sideTransVec;
+    std::vector<GeoTrf::Transform3D> sideTransVec;
     std::vector<GeoShape *> sideElementShapeVec;
     sideTransVec.reserve(numElements);
     sideElementShapeVec.reserve(numElements);
@@ -160,7 +160,7 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
 	zSideMax = std::max(zSideMax, zmaxInput);
       }      
       GeoShape * sideElementShape = 0;
-      HepGeom::Transform3D rotateShape;
+      GeoTrf::Transform3D rotateShape(GeoTrf::Transform3D::Identity());
       double shapeVolume = 0;
       if (same(zMin1,zMin2) && same(zMax1,zMax2)) { 
 	// Use a box
@@ -172,13 +172,13 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
 	double thetaPara = 0; 
 	double phiPara = 0;
 	sideElementShape = new GeoPara(0.5*std::abs(zMax1-zMin1),  0.5*sideWidth-epsilon, 0.5*sideThick, alphaPara, thetaPara, phiPara);
-	rotateShape = HepGeom::RotateY3D(-90*CLHEP::deg);
+	rotateShape = GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
 	shapeVolume =  std::abs(zMax1-zMin1) * (sideWidth-2*epsilon) * sideThick;
       } else {// 
 	      // other cases not implemented. Should not occur for the frame.
 	      std::cout << "GeoPixelFrame: This case is not handled for building the frame" << std::endl;
       }
-      sideTransVec.push_back(HepGeom::TranslateZ3D(0.25*(zMin1+zMin2+zMax1+zMax2))*rotateShape);
+      sideTransVec.push_back(GeoTrf::TranslateZ3D(0.25*(zMin1+zMin2+zMax1+zMax2))*rotateShape);
       sideElementShapeVec.push_back(sideElementShape);
       //totSideVolume += sideElementShape->volume();
       totSideVolume += shapeVolume;
@@ -194,7 +194,7 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
     std::string sideMatName = m_gmt_mgr->PixelFrameSideMaterial(section);
     const GeoMaterial* sideMat = m_mat_mgr->getMaterialForVolume(sideMatName,numSides*totSideVolume);  
     for (int iElement = 0; iElement < numElements; iElement++) {
-      GeoTransform * transSideElement = new GeoTransform(HepGeom::TranslateZ3D(-zSideCenter)*sideTransVec[iElement]);
+      GeoTransform * transSideElement = new GeoTransform(GeoTrf::TranslateZ3D(-zSideCenter)*sideTransVec[iElement]);
       std::ostringstream frameSideName;
       frameSideName << "FrameSide" << iElement;
       GeoLogVol  * sideElementLV = new GeoLogVol(frameSideName.str(), sideElementShapeVec[iElement], sideMat);
@@ -212,18 +212,18 @@ void GeoPixelFrame::BuildAndPlace(GeoFullPhysVol * parent, int section)
   // place the corners and sides.
   for (int iSide = 0; iSide<numSides; iSide++) {
     double angleCorner = phiLoc + alpha * (2*iSide - 1);
-    GeoTransform * cornerTrans = new GeoTransform(HepGeom::TranslateZ3D(zCenter)*HepGeom::RotateZ3D(angleCorner));
+    GeoTransform * cornerTrans = new GeoTransform(GeoTrf::TranslateZ3D(zCenter)*GeoTrf::RotateZ3D(angleCorner));
     // Place the corners
     parent->add(cornerTrans);
     parent->add(cornerPV);
     if (sideEnvelopePV) {
       double angleSide   = phiLoc + alpha * (2*iSide);
-      HepGeom::Transform3D oddEvenRotate;
+      GeoTrf::Transform3D oddEvenRotate(GeoTrf::Transform3D::Identity());
       if (iSide%2 && mirrorSides) {
-	      oddEvenRotate = HepGeom::RotateZ3D(CLHEP::pi); // Every 2nd side we mirror the side. 
+	      oddEvenRotate = GeoTrf::RotateZ3D(GeoModelKernelUnits::pi); // Every 2nd side we mirror the side. 
       }
-      GeoTransform * sideTrans = new GeoTransform(HepGeom::TranslateZ3D(zSideCenter)*HepGeom::RotateZ3D(angleSide)
-						  *HepGeom::TranslateX3D(midRadius)*oddEvenRotate);
+      GeoTransform * sideTrans = new GeoTransform(GeoTrf::TranslateZ3D(zSideCenter)*GeoTrf::RotateZ3D(angleSide)
+						  *GeoTrf::TranslateX3D(midRadius)*oddEvenRotate);
 
       // Place the sides
       parent->add(sideTrans);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFrame.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.h
similarity index 90%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFrame.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.h
index 34d97b4b46b07be70c39f1c2d5e8e2d41254ef64..6648da6ba285bc9815daf58a26dd9ab86b0039f3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelFrame.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelFrame.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELFRAME_H
 #define GEOPIXELFRAME_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
 class GeoPixelFrame : public GeoVPixelFactory {
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.cxx
index 84086a8f87c5a7f43bfa4b351badea88b3378a96..d2918ede95e25e3debd495385e79f76497789e04 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.cxx
@@ -11,7 +11,7 @@
 //
 // Contains: nothing
 //
-#include "PixelGeoModel/GeoPixelHybrid.h"
+#include "GeoPixelHybrid.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelHybrid.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.h
similarity index 88%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelHybrid.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.h
index 21a12fd12d9b1b6eb14d12f2ec1808571fc9bfbb..ed159c5257e5e0f2d03180a0b3b1b35ff4d33da8 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelHybrid.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelHybrid.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELHYBRID_H
 #define GEOPIXELHYBRID_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelHybrid : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.cxx
index e39504eb91e3846a555a1debc3e923ee6eac33cb..616831e979f99cd11ce0d886d91c33c47fee55ac 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.cxx
@@ -6,10 +6,10 @@
 // Build IBL fwd services (wavy shape)
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelIBLFwdServices.h"
+#include "GeoPixelIBLFwdServices.h"
 
-#include "PixelGeoModel/GeoPixelIBLFwdSvcCADModel.h"
-#include "PixelGeoModel/GeoPixelIBLFwdSvcModel1.h"
+#include "GeoPixelIBLFwdSvcCADModel.h"
+#include "GeoPixelIBLFwdSvcModel1.h"
 
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdServices.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.h
similarity index 81%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdServices.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.h
index 4b5984340d486f41c854f2d064256f1d4516e5fc..9b23be3728c30d7177e8e00ae1d8a76cf4c33426 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdServices.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdServices.h
@@ -5,17 +5,14 @@
 #ifndef GEOPIXELIBLFWDSERVICES_H
 #define GEOPIXELIBLFWDSERVICES_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelLadder.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
-
 class GeoTransform;
-class GeoPhysVol;
 
 class GeoPixelIBLFwdServices :  public GeoVPixelFactory {
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.cxx
index 9748cd9a02cbe7e374dd58e316902016cf61b48d..11643a2de6523f460452fef64f100be6a91ab5f8 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.cxx
@@ -6,7 +6,7 @@
 // Build IBL fwd services (wavy shape)
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelIBLFwdSvcCADModel.h"
+#include "GeoPixelIBLFwdSvcCADModel.h"
 
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoTubs.h"
@@ -53,7 +53,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
 
   m_gmt_mgr->msg(MSG::INFO) <<"Build IBL fwd services - CAD tool design - Torus object is defined"<<endmsg;
 
-  //  double safety = 0.01*CLHEP::mm;
+  //  double safety = 0.01*GeoModelKernelUnits::mm;
 
   // IBL layer shift ( 2mm shift issue )
   double layerZshift = m_gmt_mgr->PixelLayerGlobalShift();
@@ -63,7 +63,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
 
   // check if sectors are properly defined
   if(nSectors==0) return 0;
-  double angle=360./(double)nSectors*CLHEP::deg;
+  double angle=360./(double)nSectors*GeoModelKernelUnits::deg;
   
   // Defines the IBL_Fwd02 section in the IBL services area
   double innerRadius = 33.;
@@ -94,7 +94,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
   double lgFwdSvc[4]={511., 561., 560., 706. };
   double devLgFwdSvc[4]={512., 562., 562., 707. };
   double devTotalLength = 2460.188;
-  double pi = CLHEP::pi;
+  double pi = GeoModelKernelUnits::pi;
 
   // Cable bundle sizes
   double rminCable = 0.;
@@ -112,7 +112,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
   double zposRing = 0.;
   double totalLength=0.;
   double hermJunction = .4;
-  double breakAngle = 11.*CLHEP::deg;
+  double breakAngle = 11.*GeoModelKernelUnits::deg;
 
   //  Loop over the wavy shape sections to build a cable and a cooling pipe
   const GeoShape * gblShapeCableA = 0;
@@ -133,9 +133,9 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
         double tubeLength=deltaJunction+zpos0-zMin+hermJunction;
         double zposTrans=zMin+tubeLength*.5-zpos0;
 	const GeoTube* tubeShape = new GeoTube(0., rmaxCable, tubeLength*.5);
-	HepGeom::Transform3D trfA =  HepGeom::TranslateZ3D(zpos0+zposTrans-zMiddle);
+	GeoTrf::Transform3D trfA =  GeoTrf::TranslateZ3D(zpos0+zposTrans-zMiddle);
 	gblShapeCableA = addShape(gblShapeCableA, tubeShape, trfA );
-	HepGeom::Transform3D trfC =  HepGeom::RotateY3D(pi)*HepGeom::TranslateZ3D(zpos0+zposTrans-zMiddle);
+	GeoTrf::Transform3D trfC =  GeoTrf::RotateY3D(pi)*GeoTrf::TranslateZ3D(zpos0+zposTrans-zMiddle);
 	gblShapeCableC = addShape(gblShapeCableC, tubeShape, trfC );
 	
 	//	std::cout<<"IBL_fwd : junction "<<std::setprecision(15)<<i<<" : "<<zpos0+zposTrans-tubeLength*.5<<" "<<zpos0+zposTrans+tubeLength*.5<<" // "<<zMin<<std::endl;
@@ -151,9 +151,9 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
       double rtor = radius;
       const GeoTorus* torusShape = new GeoTorus(rminCable,rmaxCable,rtor,pi*.5-theta,2.*theta);
       double angle=(i%2==0)?breakAngle:pi-breakAngle;
-      HepGeom::Transform3D trfA = HepGeom::RotateZ3D(angle)*HepGeom::RotateY3D(-pi*.5)*HepGeom::TranslateY3D(-radius+delta)* HepGeom::TranslateX3D(zpos0+zpos-zMiddle);
+      GeoTrf::Transform3D trfA = GeoTrf::RotateZ3D(angle)*GeoTrf::RotateY3D(-pi*.5)*GeoTrf::TranslateY3D(-radius+delta)* GeoTrf::TranslateX3D(zpos0+zpos-zMiddle);
       gblShapeCableA = addShape(gblShapeCableA, torusShape, trfA );
-      HepGeom::Transform3D trfC = HepGeom::RotateZ3D(angle)*HepGeom::RotateY3D(pi*.5)*HepGeom::TranslateY3D(-radius+delta)* HepGeom::TranslateX3D(zpos0+zpos-zMiddle);
+      GeoTrf::Transform3D trfC = GeoTrf::RotateZ3D(angle)*GeoTrf::RotateY3D(pi*.5)*GeoTrf::TranslateY3D(-radius+delta)* GeoTrf::TranslateX3D(zpos0+zpos-zMiddle);
       gblShapeCableC = addShape(gblShapeCableC, torusShape, trfC );
 
       const GeoTorus* torusShape_cooling = new GeoTorus(rminCooling,rmaxCooling,rtor,pi*.5-theta,2.*theta);
@@ -167,9 +167,9 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
 	double tubeLength=zMax-zpos+hermJunction;
 	double zposTrans=zMax-tubeLength*.5;
 	const GeoTube* tubeShape = new GeoTube(0., rmaxCable, tubeLength*.5);
-	HepGeom::Transform3D trfA =  HepGeom::TranslateZ3D(zposTrans-zMiddle);
+	GeoTrf::Transform3D trfA =  GeoTrf::TranslateZ3D(zposTrans-zMiddle);
  	gblShapeCableA = addShape(gblShapeCableA, tubeShape, trfA );
-	HepGeom::Transform3D trfC =  HepGeom::RotateY3D(pi)*HepGeom::TranslateZ3D(zposTrans-zMiddle);
+	GeoTrf::Transform3D trfC =  GeoTrf::RotateY3D(pi)*GeoTrf::TranslateZ3D(zposTrans-zMiddle);
  	gblShapeCableC = addShape(gblShapeCableC, tubeShape, trfC );
 
  	const GeoTube* tubeShape_cooling = new GeoTube(0., rmaxCooling, tubeLength*.5);
@@ -195,12 +195,12 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
 
   // -------------- Alignement of the services with the previous services (Fwd01 area)
   double cooling_radius = 35.1;
-  double cooling_angle = -2.154*CLHEP::deg;
+  double cooling_angle = -2.154*GeoModelKernelUnits::deg;
 
   if(m_gmt_mgr->PixelStaveAxe()==1)   
     {
       cooling_radius = 34.7 + layerRadius-33.25;
-      cooling_angle = -.1*CLHEP::deg;
+      cooling_angle = -.1*GeoModelKernelUnits::deg;
     }
 
   double cable_radius = 36.501;
@@ -222,7 +222,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
       std::ostringstream tmp1; 
       tmp1 << "IBL_Fwd02_Cooling_A" << ii;
       GeoNameTag * tag1 = new GeoNameTag(tmp1.str());
-      GeoTransform* xformA1 = new GeoTransform(HepGeom::RotateZ3D(phiOfCooling)*HepGeom::TranslateX3D(cooling_radius));
+      GeoTransform* xformA1 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCooling)*GeoTrf::TranslateX3D(cooling_radius));
       m_supportPhysA->add(tag1);
       m_supportPhysA->add(xformA1);
       m_supportPhysA->add(coolingPhysVolA);
@@ -230,7 +230,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
       std::ostringstream tmp1C; 
       tmp1C << "IBL_Fwd02_Cooling_C" << ii;
       GeoNameTag * tag1C = new GeoNameTag(tmp1C.str());
-      GeoTransform* xformC1 = new GeoTransform(HepGeom::RotateZ3D(phiOfCooling)*HepGeom::TranslateX3D(cooling_radius));
+      GeoTransform* xformC1 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCooling)*GeoTrf::TranslateX3D(cooling_radius));
       m_supportPhysC->add(tag1C);
       m_supportPhysC->add(xformC1);
       m_supportPhysC->add(coolingPhysVolC);
@@ -240,7 +240,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
       std::ostringstream tmp2; 
       tmp2 << "IBL_Fwd02_Cable_A" << ii;
       GeoNameTag * tag2 = new GeoNameTag(tmp2.str());
-      GeoTransform* xformA2 = new GeoTransform(HepGeom::RotateZ3D(phiOfCable)*HepGeom::TranslateX3D(cable_radius));
+      GeoTransform* xformA2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCable)*GeoTrf::TranslateX3D(cable_radius));
       m_supportPhysA->add(tag2);
       m_supportPhysA->add(xformA2);
       m_supportPhysA->add(cablePhysVolA);
@@ -248,7 +248,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
       std::ostringstream tmp2C; 
       tmp2C << "IBL_Fwd02_Cable_C" << ii;
       GeoNameTag * tag2C = new GeoNameTag(tmp2C.str());
-      GeoTransform* xformC2 = new GeoTransform(HepGeom::RotateZ3D(phiOfCable)*HepGeom::TranslateX3D(cable_radius));
+      GeoTransform* xformC2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCable)*GeoTrf::TranslateX3D(cable_radius));
       m_supportPhysC->add(tag2C);
       m_supportPhysC->add(xformC2);
       m_supportPhysC->add(cablePhysVolC);
@@ -259,10 +259,10 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
   double middleA = zMiddle+layerZshift;
   double middleC = -zMiddle+layerZshift;
 
-  HepGeom::Transform3D supportTrfA = HepGeom::TranslateZ3D(middleA);
+  GeoTrf::Transform3D supportTrfA = GeoTrf::TranslateZ3D(middleA);
   m_xformSupportA = new GeoTransform(supportTrfA);
   
-  HepGeom::Transform3D supportTrfC = HepGeom::TranslateZ3D(middleC);
+  GeoTrf::Transform3D supportTrfC = GeoTrf::TranslateZ3D(middleC);
   m_xformSupportC = new GeoTransform(supportTrfC);
 
   return 0;
@@ -272,7 +272,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcCADModel::Build()
 }
 
 
-const GeoShape * GeoPixelIBLFwdSvcCADModel::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans)
+const GeoShape * GeoPixelIBLFwdSvcCADModel::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans)
 {
   const GeoShape * shiftedShape = &(*nextShape << trans);
   if (lastShape) {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcCADModel.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.h
similarity index 76%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcCADModel.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.h
index 8ad8a742b950ed614a0a9b845d50724da617d60a..63a6ddb10b6f3143c03f114fc82d6711077c9083 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcCADModel.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcCADModel.h
@@ -5,17 +5,16 @@
 #ifndef GEOPIXELIBLFWDSVC_CADMODEL_H
 #define GEOPIXELIBLFWDSVC_CADMODEL_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelLadder.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
-
 class GeoTransform;
-class GeoPhysVol;
 
 class GeoPixelIBLFwdSvcCADModel :  public GeoVPixelFactory {
 
@@ -36,7 +35,7 @@ public:
   GeoTransform *m_xformSupportA;
   GeoTransform *m_xformSupportC;
 
-  const GeoShape* addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans);
+  const GeoShape* addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans);
 };
 
 #endif
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.cxx
index 8ee32562e12301ec07639084aa79972f910b49d7..ae12b9fea422583e2a0595de332f33eeba4b5246 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.cxx
@@ -6,7 +6,7 @@
 // Build IBL fwd services (wavy shape)
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelIBLFwdSvcModel1.h"
+#include "GeoPixelIBLFwdSvcModel1.h"
 
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoTubs.h"
@@ -39,7 +39,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
 
   m_gmt_mgr->msg(MSG::INFO) <<"Build IBL fwd services"<<endmsg;
 
-  //  double safety = 0.01*CLHEP::mm;
+  //  double safety = 0.01*GeoModelKernelUnits::mm;
 
   // IBL layer shift ( 2mm shift issue )
   double layerZshift = m_gmt_mgr->PixelLayerGlobalShift();
@@ -49,7 +49,7 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
 
   // check if sectors are properly defined
   if(nSectors==0) return 0;
-  double angle=360./(double)nSectors*CLHEP::deg;
+  double angle=360./(double)nSectors*GeoModelKernelUnits::deg;
   
   // Defines the IBL_Fwd02 section in the IBL services area
   double innerRadius = 33.;
@@ -98,15 +98,15 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
   //  double zposRing = 0.;
   double totalLength=0.;
   //  double hermJunction = .4;
-  double breakAngle = 11.*CLHEP::deg;
+  double breakAngle = 11.*GeoModelKernelUnits::deg;
 
   double cooling_radius = 35.1;
-  double cooling_angle = -2.154*CLHEP::deg;
+  double cooling_angle = -2.154*GeoModelKernelUnits::deg;
 
   if(m_gmt_mgr->PixelStaveAxe()==1)   
     {
       cooling_radius = 34.7 + layerRadius-33.25;
-      cooling_angle = -.1*CLHEP::deg;
+      cooling_angle = -.1*GeoModelKernelUnits::deg;
     }
 
   double cable_radius = 36.501;
@@ -189,10 +189,10 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
 
 	// Cable
 	const GeoTube* cableShape = new GeoTube(rminCable, rmaxCable, zHalfLength);	
-	double angle = 0.; //11.*CLHEP::deg;
-	HepGeom::Transform3D trfA1 = HepGeom::RotateZ3D(angle)*HepGeom::TranslateZ3D(zpos-zMiddle);
+	double angle = 0.; //11.*GeoModelKernelUnits::deg;
+	GeoTrf::Transform3D trfA1 = GeoTrf::RotateZ3D(angle)*GeoTrf::TranslateZ3D(zpos-zMiddle);
 	gblShapeCableA = addShape(gblShapeCableA, cableShape, trfA1 );
-	HepGeom::Transform3D trfC1 = HepGeom::RotateZ3D(angle)*HepGeom::TranslateZ3D(zMax-(zpos-zMin)-zMiddle);
+	GeoTrf::Transform3D trfC1 = GeoTrf::RotateZ3D(angle)*GeoTrf::TranslateZ3D(zMax-(zpos-zMin)-zMiddle);
 	gblShapeCableC = addShape(gblShapeCableC, cableShape, trfC1 );
 
 	// Cooling
@@ -211,9 +211,9 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
 	// Cable
 	const GeoTube* cableShape = new GeoTube(rminCable, rmaxCable, cableHalfLength);
 	double angle= 0.; 
-	HepGeom::Transform3D trfA1 = HepGeom::RotateZ3D(angle)*HepGeom::TranslateY3D(deltaMiddleLoc)* HepGeom::TranslateZ3D(zpos-zMiddle)*HepGeom::RotateX3D(-angleSign*deltaPhiLoc);
+	GeoTrf::Transform3D trfA1 = GeoTrf::RotateZ3D(angle)*GeoTrf::TranslateY3D(deltaMiddleLoc)* GeoTrf::TranslateZ3D(zpos-zMiddle)*GeoTrf::RotateX3D(-angleSign*deltaPhiLoc);
 	gblShapeCableA = addShape(gblShapeCableA, cableShape, trfA1 );
-	HepGeom::Transform3D trfC1 = HepGeom::RotateZ3D(angle)*HepGeom::TranslateY3D(deltaMiddleLoc)* HepGeom::TranslateZ3D(zMax-(zpos-zMin)-zMiddle)*HepGeom::RotateX3D(angleSign*deltaPhiLoc);
+	GeoTrf::Transform3D trfC1 = GeoTrf::RotateZ3D(angle)*GeoTrf::TranslateY3D(deltaMiddleLoc)* GeoTrf::TranslateZ3D(zMax-(zpos-zMin)-zMiddle)*GeoTrf::RotateX3D(angleSign*deltaPhiLoc);
 	gblShapeCableC = addShape(gblShapeCableC, cableShape, trfC1 );
 	
 	// Cooling
@@ -269,12 +269,12 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
       std::ostringstream tmp1; 
       tmp1 << "IBL_Fwd02_Cooling_AC" << ii;
       GeoNameTag * tag1 = new GeoNameTag(tmp1.str());
-      GeoTransform* xformA1 = new GeoTransform(HepGeom::RotateZ3D(phiOfCooling)*HepGeom::TranslateX3D(cooling_radius));
+      GeoTransform* xformA1 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCooling)*GeoTrf::TranslateX3D(cooling_radius));
       m_supportPhysA->add(tag1);
       m_supportPhysA->add(xformA1);
       m_supportPhysA->add(coolingPhysVolA);
       
-      GeoTransform* xformC1 = new GeoTransform(HepGeom::RotateZ3D(phiOfCooling)*HepGeom::TranslateX3D(cooling_radius));
+      GeoTransform* xformC1 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCooling)*GeoTrf::TranslateX3D(cooling_radius));
       m_supportPhysC->add(tag1);
       m_supportPhysC->add(xformC1);
       m_supportPhysC->add(coolingPhysVolC);
@@ -284,12 +284,12 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
       std::ostringstream tmp2; 
       tmp2 << "IBL_Fwd02_Cable_AC" << ii;
       GeoNameTag * tag2 = new GeoNameTag(tmp2.str());
-      GeoTransform* xformA2 = new GeoTransform(HepGeom::RotateZ3D(phiOfCable)*HepGeom::TranslateX3D(cable_radius)*HepGeom::RotateZ3D(breakAngle));
+      GeoTransform* xformA2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCable)*GeoTrf::TranslateX3D(cable_radius)*GeoTrf::RotateZ3D(breakAngle));
       m_supportPhysA->add(tag2);
       m_supportPhysA->add(xformA2);
       m_supportPhysA->add(cablePhysVolA);
       
-      GeoTransform* xformC2 = new GeoTransform(HepGeom::RotateZ3D(phiOfCable)*HepGeom::TranslateX3D(cable_radius)*HepGeom::RotateZ3D(breakAngle));
+      GeoTransform* xformC2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCable)*GeoTrf::TranslateX3D(cable_radius)*GeoTrf::RotateZ3D(breakAngle));
       m_supportPhysC->add(tag2);
       m_supportPhysC->add(xformC2);
       m_supportPhysC->add(cablePhysVolC);
@@ -299,17 +299,17 @@ GeoVPhysVol* GeoPixelIBLFwdSvcModel1::Build()
   double middleA = zMiddle+layerZshift;
   double middleC = -zMiddle+layerZshift;
 
-  HepGeom::Transform3D supportTrfA = HepGeom::TranslateZ3D(middleA);
+  GeoTrf::Transform3D supportTrfA = GeoTrf::TranslateZ3D(middleA);
   m_xformSupportA = new GeoTransform(supportTrfA);
   
-  HepGeom::Transform3D supportTrfC = HepGeom::TranslateZ3D(middleC);
+  GeoTrf::Transform3D supportTrfC = GeoTrf::TranslateZ3D(middleC);
   m_xformSupportC = new GeoTransform(supportTrfC);
 
   return 0;
 }
 
 
-const GeoShape * GeoPixelIBLFwdSvcModel1::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans)
+const GeoShape * GeoPixelIBLFwdSvcModel1::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans)
 {
   const GeoShape * shiftedShape = &(*nextShape << trans);
   if (lastShape) {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcModel1.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.h
similarity index 76%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcModel1.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.h
index 212e2d98706b619649361e5d8aa52a5195a95c83..e931d2105b5bed7b8ae214d51d69f05322e64f3f 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIBLFwdSvcModel1.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIBLFwdSvcModel1.h
@@ -5,17 +5,16 @@
 #ifndef GEOPIXELIBLFWDSVCMODEL1_H
 #define GEOPIXELIBLFWDSVCMODEL1_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelLadder.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
-
 class GeoTransform;
-class GeoPhysVol;
 
 class GeoPixelIBLFwdSvcModel1 :  public GeoVPixelFactory {
 
@@ -36,7 +35,7 @@ public:
   GeoTransform *m_xformSupportA;
   GeoTransform *m_xformSupportC;
 
-  const GeoShape* addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans);
+  const GeoShape* addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans);
 };
 
 #endif
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.cxx
index 1abcb581eaf7cce88e6d47c7fff1728d3d7babb5..3463842e192ac70335d603eab8732c43d234d14c 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.cxx
@@ -6,7 +6,7 @@
 // Build detailed stave support : face plate + carbon foam + cable flex + cooling pipe + end blocks
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelIFlexServices.h"
+#include "GeoPixelIFlexServices.h"
 
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -35,7 +35,7 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
 
   m_gmt_mgr->msg(MSG::INFO) <<"Build IBL I-Flex services"<<endmsg;
 
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
 
   // IBL layer shift ( 2mm shift issue )
   double layerZshift = m_gmt_mgr->PixelLayerGlobalShift();
@@ -45,7 +45,7 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
 
   // check if sectors are properly defined
   if(nSectors==0) return 0;
-  double angle=360./(double)nSectors*CLHEP::deg;
+  double angle=360./(double)nSectors*GeoModelKernelUnits::deg;
 
   double zmin=0., zmax=0.;
   double deltaLength = 0.;
@@ -108,12 +108,12 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
   double cooling_radius = 35.1;
   double TubeOuterDiam = m_gmt_mgr->IBLStaveTubeOuterDiameter();
   double TubeInnerDiam = m_gmt_mgr->IBLStaveTubeInnerDiameter();
-  double cooling_angle = -2.154*CLHEP::deg;
+  double cooling_angle = -2.154*GeoModelKernelUnits::deg;
 
   if(m_gmt_mgr->PixelStaveAxe()==1)   
     {
       cooling_radius = 34.7 + layerRadius-33.25;
-      cooling_angle = -.1*CLHEP::deg;
+      cooling_angle = -.1*GeoModelKernelUnits::deg;
     }
 
   const GeoTube* service_coolingPipeA = new GeoTube(0.0,TubeOuterDiam*0.5,halfLengthA);
@@ -134,8 +134,7 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
   GeoPhysVol * cp_service_inner_logPVC = new GeoPhysVol(cp_service_inner_logC);
 
   GeoNameTag* cp_service_inner_tag = new GeoNameTag("PP0CoolingPipeInner");
-  CLHEP::Hep3Vector cp_service_inner_pos(0.0,0.0,0.0);
-  GeoTransform* cp_service_inner_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cp_service_inner_pos));
+  GeoTransform* cp_service_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
   cpPhysVolA->add(cp_service_inner_tag);
   cpPhysVolA->add(cp_service_inner_xform);
   cpPhysVolA->add(cp_service_inner_logPVA);
@@ -146,9 +145,9 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
   GeoLogVol* flex_logVolA = 0;
   GeoLogVol* flex_logVolC = 0;
 
-  double flex_angle = -15.001*CLHEP::deg;
+  double flex_angle = -15.001*GeoModelKernelUnits::deg;
   if(m_gmt_mgr->PixelStaveAxe()==1)   
-    flex_angle += 2.14*CLHEP::deg;
+    flex_angle += 2.14*GeoModelKernelUnits::deg;
 
   double flex_rot=0.30265;
   flex_rot=-0.30265*.5;
@@ -174,8 +173,6 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
     
     GeoBox * flex_shapeA = new GeoBox((flex_rmax-flex_rmin)*.5, flex_width*.5, halfLengthA);
     GeoBox * flex_shapeC = new GeoBox((flex_rmax-flex_rmin)*.5, flex_width*.5, halfLengthC);
-    CLHEP::Hep3Vector flex_pos(0.,0.,0.);
-    //    GeoTransform* flex_xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(0.0,0.0,fabs(flex_rot)),flex_pos));
     const GeoMaterial* flex_material = m_mat_mgr->getMaterial(flexMatName);
     if(flex_material==0)
     {
@@ -228,7 +225,7 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
     std::ostringstream tmp1; 
     tmp1 << "fl" << ii;
     GeoNameTag * tag1 = new GeoNameTag(tmp1.str());
-    GeoTransform* xform1 = new GeoTransform(HepGeom::RotateZ3D(phiOfCooling)*HepGeom::TranslateX3D(cooling_radius));
+    GeoTransform* xform1 = new GeoTransform(GeoTrf::RotateZ3D(phiOfCooling)*GeoTrf::TranslateX3D(cooling_radius));
     m_supportPhysA->add(tag1);
     m_supportPhysA->add(xform1);
     m_supportPhysA->add(cpPhysVolA);
@@ -247,12 +244,12 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
     if(m_section==2){
 
       // Intermediate flex
-      GeoTransform* xformA2 = new GeoTransform(HepGeom::RotateZ3D(phiOfFlex)*HepGeom::TranslateX3D(flexYmidPos)*HepGeom::RotateZ3D(-90.*CLHEP::deg)*HepGeom::RotateY3D(-90.*CLHEP::deg)*HepGeom::RotateX3D(flex_rot));
+      GeoTransform* xformA2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfFlex)*GeoTrf::TranslateX3D(flexYmidPos)*GeoTrf::RotateZ3D(-90.*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90.*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(flex_rot));
       m_supportPhysA->add(tag2);
       m_supportPhysA->add(xformA2);
       m_supportPhysA->add(flexPhysVolA);
 
-      GeoTransform* xformC2 = new GeoTransform(HepGeom::RotateZ3D(phiOfFlex)*HepGeom::TranslateX3D(flexYmidPos)*HepGeom::RotateZ3D(-90.*CLHEP::deg)*HepGeom::RotateY3D(90.*CLHEP::deg)*HepGeom::RotateX3D(-flex_rot));
+      GeoTransform* xformC2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfFlex)*GeoTrf::TranslateX3D(flexYmidPos)*GeoTrf::RotateZ3D(-90.*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90.*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-flex_rot));
       m_supportPhysC->add(tag2);
       m_supportPhysC->add(xformC2);
       m_supportPhysC->add(flexPhysVolC);
@@ -262,7 +259,7 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
 
       // dogleg and PP0 flexes
 
-      GeoTransform* xform2 = new GeoTransform(HepGeom::RotateZ3D(phiOfFlex)*HepGeom::TranslateX3D((flex_rmin+flex_rmax)*.5)*HepGeom::RotateZ3D(flex_rot));
+      GeoTransform* xform2 = new GeoTransform(GeoTrf::RotateZ3D(phiOfFlex)*GeoTrf::TranslateX3D((flex_rmin+flex_rmax)*.5)*GeoTrf::RotateZ3D(flex_rot));
 
       m_supportPhysA->add(tag2);
       m_supportPhysA->add(xform2);
@@ -279,12 +276,12 @@ GeoVPhysVol* GeoPixelIFlexServices::Build()
   double middleA = zStartPosA+halfLengthA;
   double middleC = zStartPosC+halfLengthC;
 
-  HepGeom::Transform3D supportTrfA = HepGeom::TranslateZ3D(middleA);   //(zmin+zmax)*0.5+layerZshift);
+  GeoTrf::Transform3D supportTrfA = GeoTrf::TranslateZ3D(middleA);   //(zmin+zmax)*0.5+layerZshift);
   m_xformSupportA = new GeoTransform(supportTrfA);
   
   //  std::cout<<"Section final A  "<<m_section<<" - "<<middleA-halfLengthA<<" "<<middleA+halfLengthA<<"    "<<middleA<<std::endl;
 
-  HepGeom::Transform3D supportTrfC = HepGeom::TranslateZ3D(middleC);   //(zmin+zmax)*0.5+layerZshift);
+  GeoTrf::Transform3D supportTrfC = GeoTrf::TranslateZ3D(middleC);   //(zmin+zmax)*0.5+layerZshift);
   m_xformSupportC = new GeoTransform(supportTrfC);
 
   //  std::cout<<"Section final C  "<<m_section<<" - "<<middleC-halfLengthC<<" "<<middleC+halfLengthC<<"    "<<middleC<<std::endl;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIFlexServices.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.h
similarity index 79%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIFlexServices.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.h
index ec9d64c31a87a1e54637fa50ddfcdcf83bbdae5d..bc929cde3cf842647020df4beeb6a931a6057a5d 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelIFlexServices.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelIFlexServices.h
@@ -5,17 +5,14 @@
 #ifndef GEOPIXELIFLEXSERVICES_H
 #define GEOPIXELIFLEXSERVICES_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelLadder.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
-
 class GeoTransform;
-class GeoPhysVol;
 
 class GeoPixelIFlexServices :  public GeoVPixelFactory {
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.cxx
index 73565d3a0fce8f03668149203ca282ee7482ccd7..bcbc577a590b9c4df7b7792c4fb00159a00170cf 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.cxx
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelLadder.h"
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelModule.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
+#include "GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelModule.h"
+#include "GeoPixelSiCrystal.h"
 #include "InDetReadoutGeometry/PixelDetectorManager.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTubs.h"
@@ -37,7 +37,7 @@ GeoPixelLadder::GeoPixelLadder(GeoPixelSiCrystal& theSensor,
   // Length of the ladder is in the db
   //
   double length = m_gmt_mgr->PixelLadderLength();
-  double safety = 0.01*CLHEP::mm; 
+  double safety = 0.01*GeoModelKernelUnits::mm; 
 
   m_width = calcWidth();
   m_thicknessP = 0.5 * m_gmt_mgr->PixelLadderThickness();
@@ -58,7 +58,7 @@ GeoPixelLadder::GeoPixelLadder(GeoPixelSiCrystal& theSensor,
   const GeoShape * ladderShape = 0;
 
   // If upper and lower thicknesses are within 100 um. Make them the same.
-  if (std::abs(m_thicknessP - m_thicknessN) < 0.1*CLHEP::mm) {
+  if (std::abs(m_thicknessP - m_thicknessN) < 0.1*GeoModelKernelUnits::mm) {
     m_thicknessP = std::max(m_thicknessP,m_thicknessN); 
     m_thicknessN = m_thicknessP;
     double halfThickness = m_thicknessP;
@@ -67,7 +67,7 @@ GeoPixelLadder::GeoPixelLadder(GeoPixelSiCrystal& theSensor,
   else if (m_gmt_mgr->PixelBentStaveNModule() != 0)
     {
       // Calculate thickness from bent stave part
-      double angle              = m_gmt_mgr->PixelLadderBentStaveAngle() * CLHEP::pi / 180.0;
+      double angle              = m_gmt_mgr->PixelLadderBentStaveAngle() * GeoModelKernelUnits::pi / 180.0;
       double BentStaveThickness = double(m_gmt_mgr->PixelBentStaveNModule()) * m_gmt_mgr->PixelLadderModuleDeltaZ() * sin(angle);
       
       // Extend +ve or -ve ladder thickness according to stave angle
@@ -85,14 +85,14 @@ GeoPixelLadder::GeoPixelLadder(GeoPixelSiCrystal& theSensor,
       // Shift ladder outwards if stave bends away from beam pipe
       double shift = 0.5*BentStaveThickness;
       if (angle > 0) shift *= -1.0;
-      const GeoShape & shiftedBox = (*box) << HepGeom::TranslateX3D(shift);
+      const GeoShape & shiftedBox = (*box) << GeoTrf::TranslateX3D(shift);
       ladderShape = &shiftedBox; 
     }
   else if (!(m_gmt_mgr->PixelStaveLayout()>3&& m_gmt_mgr->PixelStaveLayout()<7)){
     double halfThickness = 0.5*(m_thicknessP+m_thicknessN);
     double shift = 0.5*(m_thicknessP-m_thicknessN);
     GeoBox * box = new GeoBox(halfThickness, m_width/2., length/2.);
-    const GeoShape & shiftedBox = (*box) << HepGeom::TranslateX3D(shift);
+    const GeoShape & shiftedBox = (*box) << GeoTrf::TranslateX3D(shift);
     ladderShape = &shiftedBox;  
   }
   else if(m_staveSupport) 
@@ -321,12 +321,11 @@ GeoVPhysVol* GeoPixelLadder::Build( ) {
       }
 
     
-    CLHEP::Hep3Vector modulepos(xpos+xposShift,yposShift,zpos);
+    GeoTrf::Translation3D modulepos(xpos+xposShift,yposShift,zpos);
 //
 //  Rotate if module is inclined.
 //
-    CLHEP::HepRotation rm;
-    rm.rotateY(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(etaModule) );
+    GeoTrf::RotateY3D rm(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(etaModule) );
 //
 // Place the Module
 //
@@ -342,7 +341,7 @@ GeoVPhysVol* GeoPixelLadder::Build( ) {
     GeoNameTag * tag = new GeoNameTag(nameTag.str());
     GeoAlignableTransform* xform;
 
-    xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,modulepos));
+    xform = new GeoAlignableTransform(GeoTrf::Transform3D(modulepos*rm));
     ladderPhys->add(tag);
     ladderPhys->add(new GeoIdentifierTag(m_gmt_mgr->Eta() ) );
     ladderPhys->add(xform);
@@ -383,27 +382,25 @@ GeoVPhysVol* GeoPixelLadder::Build( ) {
       //      const GeoMaterial* materialSup = m_mat_mgr->getMaterialForVolume(matName,shapeSupBent->volume());
       const GeoMaterial* materialSup = m_mat_mgr->getMaterial("pix::StaveSupportBase");
       
-      double ang = m_gmt_mgr->PixelLadderBentStaveAngle() * CLHEP::pi / 180.0;
+      double ang = m_gmt_mgr->PixelLadderBentStaveAngle() * GeoModelKernelUnits::pi / 180.0;
       double xst = xOffset - (bentStaveHalfLength * sin(ang)); 
       
       // Construct bent stave at negative z
       GeoLogVol* logVolBentNeg = new GeoLogVol("StaveSupportBentNeg2",shapeSupBent,materialSup);
       GeoPhysVol* physVolBentNeg = new GeoPhysVol(logVolBentNeg);
-      CLHEP::HepRotation rmNeg;
-      rmNeg.rotateY(ang);
+      GeoTrf::RotateY3D rmNeg(ang);
       double zstneg = -length/2.0 - (bentStaveHalfLength * cos(ang));
-      HepGeom::Point3D<double> stavePosNeg(xst,0.,zstneg);
-      ladderPhys->add(new GeoTransform(HepGeom::Transform3D(rmNeg,stavePosNeg)));
+      GeoTrf::Translation3D stavePosNeg(xst,0.,zstneg);
+      ladderPhys->add(new GeoTransform(GeoTrf::Transform3D(stavePosNeg*rmNeg)));
       ladderPhys->add(physVolBentNeg); 
       
       // COnstruct bent stave at positive z
       GeoLogVol* logVolBentPos = new GeoLogVol("StaveSupportBentPos2",shapeSupBent,materialSup);
       GeoPhysVol* physVolBentPos = new GeoPhysVol(logVolBentPos);
-      CLHEP::HepRotation rmPos;
-      rmPos.rotateY(-ang);
+      GeoTrf::RotateY3D rmPos(-ang);
       double zstpos = length/2.0 + (bentStaveHalfLength * cos(ang));
-      HepGeom::Point3D<double> stavePosPos(xst,0.,zstpos);
-      ladderPhys->add(new GeoTransform(HepGeom::Transform3D(rmPos,stavePosPos)));
+      GeoTrf::Translation3D stavePosPos(xst,0.,zstpos);
+      ladderPhys->add(new GeoTransform(GeoTrf::Transform3D(stavePosPos*rmPos)));
       ladderPhys->add(physVolBentPos);       
     }
 
@@ -418,7 +415,7 @@ double GeoPixelLadder::calcThickness() {
   // to avoid duplication of code
   //
 
-  const double safety = 0.01*CLHEP::mm; 
+  const double safety = 0.01*GeoModelKernelUnits::mm; 
   double clearance = m_gmt_mgr->PixelLadderThicknessClearance();
   clearance = std::max(clearance, safety);
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadder.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.h
similarity index 95%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadder.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.h
index f21daabb9ffc4eae749cd3b4b730406eef963d3e..8f3486bae637a9a5f7239548c16e890ac287d414 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadder.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadder.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELLADDER_H
 #define GEOPIXELLADDER_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 class GeoPixelSiCrystal;
 class GeoPixelStaveSupport;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.cxx
index 697b6a7ecd65f93292b5faf9ed2fbb455466fd6e..1af721b80a5ef948804f08033688efc0e1a96bd4 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.cxx
@@ -6,9 +6,9 @@
 // This class builds the Ladder services (Omega + Al tube + glue + part of pigtail + connector)
 //
 //
-#include "PixelGeoModel/GeoPixelLadderServices.h"
-#include "PixelGeoModel/GeoPixelFluid.h"
-#include "PixelGeoModel/GeoPixelCable.h"
+#include "GeoPixelLadderServices.h"
+#include "GeoPixelFluid.h"
+#include "GeoPixelCable.h"
 #include "GeoModelKernel/GeoTubs.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoPara.h"
@@ -37,7 +37,7 @@ GeoPixelLadderServices::GeoPixelLadderServices(int ladderType)
   //
   //const GeoBox* ladderSvcBox = new GeoBox(thickness/2.,width/2.,halflength);
   // Quick fix - we hardwire the numbers. Need to work out a way to extract this from the database numbers.
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
   double xBase = 0;
   
   // ConnA: Part to fit Connector
@@ -47,29 +47,29 @@ GeoPixelLadderServices::GeoPixelLadderServices(int ladderType)
   double xOffsetConnC = xOffsetConnA;
 
 
-  //double xMaxConnA = 1.250 * CLHEP::cm + xOffsetConnA + safety;
-  // double xMaxConnC = 1.6575 * CLHEP::cm + xOffsetConnC + safety;
+  //double xMaxConnA = 1.250 * GeoModelKernelUnits::cm + xOffsetConnA + safety;
+  // double xMaxConnC = 1.6575 * GeoModelKernelUnits::cm + xOffsetConnC + safety;
   // max offset is 12.5mm + 1/2 thickness of cables
-  //  double xMaxConnA = 1.5075 * CLHEP::cm + 0.5* 0.15*CLHEP::cm + xOffsetConnA + safety;
+  //  double xMaxConnA = 1.5075 * GeoModelKernelUnits::cm + 0.5* 0.15*GeoModelKernelUnits::cm + xOffsetConnA + safety;
   double xMaxConnA = m_gmt_mgr->PixelConnectorPosX(1) + 0.5*m_gmt_mgr->PixelConnectorWidthX(1)  + xOffsetConnA + safety;
-  double xMaxConnC = 1.25 * CLHEP::cm + 0.5* 0.0125*CLHEP::cm + xOffsetConnC + safety;
-  double xMaxOmegaBase = 0.055 * CLHEP::cm + xBase + 1*CLHEP::mm; // The 1 mm is just extra safety. 
-  double yWidthConnA = 1.0 * CLHEP::cm;
-  double yWidthConnC = 0.2 * CLHEP::cm;
+  double xMaxConnC = 1.25 * GeoModelKernelUnits::cm + 0.5* 0.0125*GeoModelKernelUnits::cm + xOffsetConnC + safety;
+  double xMaxOmegaBase = 0.055 * GeoModelKernelUnits::cm + xBase + 1*GeoModelKernelUnits::mm; // The 1 mm is just extra safety. 
+  double yWidthConnA = 1.0 * GeoModelKernelUnits::cm;
+  double yWidthConnC = 0.2 * GeoModelKernelUnits::cm;
   double yPosConnA =  m_gmt_mgr->PixelLadderCableOffsetY() - m_gmt_mgr->PixelLadderServicesY();
   double yPosConnC =  yPosConnA;
   double xCenter = 0;
   double xWidthOmegaBase = xMaxOmegaBase - xBase;
   double xWidthConnA = xMaxConnA - xBase;
   double xWidthConnC = xMaxConnC - xBase;
-  double yWidthOmega = 1.2*CLHEP::cm + m_epsilon;
+  double yWidthOmega = 1.2*GeoModelKernelUnits::cm + m_epsilon;
 
   const GeoBox* omegaBaseEnv = new GeoBox(0.5*xWidthOmegaBase, 0.5*yWidthOmega, halflength);
   const GeoBox* connAEnv     = new GeoBox(0.5*xWidthConnA, 0.5*yWidthConnA + safety, halflength);
   const GeoBox* connCEnv     = new GeoBox(0.5*xWidthConnC, 0.5*yWidthConnC + safety, halflength);
-  HepGeom::Transform3D omegaBaseShift = HepGeom::Translate3D(xBase + 0.5*xWidthOmegaBase - xCenter, 0., 0.);
-  HepGeom::Transform3D connAShift =     HepGeom::Translate3D(xBase + 0.5*xWidthConnA - xCenter, yPosConnA, 0.);
-  HepGeom::Transform3D connCShift =     HepGeom::Translate3D(xBase + 0.5*xWidthConnC - xCenter, yPosConnC, 0.);
+  GeoTrf::Transform3D omegaBaseShift = GeoTrf::Translate3D(xBase + 0.5*xWidthOmegaBase - xCenter, 0., 0.);
+  GeoTrf::Transform3D connAShift =     GeoTrf::Translate3D(xBase + 0.5*xWidthConnA - xCenter, yPosConnA, 0.);
+  GeoTrf::Transform3D connCShift =     GeoTrf::Translate3D(xBase + 0.5*xWidthConnC - xCenter, yPosConnC, 0.);
 
   const GeoShape & ladderSvcShape = ((*omegaBaseEnv) << omegaBaseShift)
     .add(*connAEnv << connAShift)
@@ -78,10 +78,10 @@ GeoPixelLadderServices::GeoPixelLadderServices(int ladderType)
   m_ladderServicesLV = new GeoLogVol("LadderSvc",&ladderSvcShape,air);
   m_ladderServicesLV->ref();
   // store coordinates of corners of envelope.
-  m_envelopeCornerA1 = HepGeom::Point3D<double>(xMaxConnA - xCenter, yPosConnA + 0.5* yWidthConnA + safety, 0.);
-  m_envelopeCornerA2 = HepGeom::Point3D<double>(xMaxConnA - xCenter, yPosConnA - 0.5* yWidthConnA + safety, 0.);
-  m_envelopeCornerC1 = HepGeom::Point3D<double>(xMaxConnC - xCenter, yPosConnC + 0.5* yWidthConnC + safety, 0.);
-  m_envelopeCornerC2 = HepGeom::Point3D<double>(xMaxConnC - xCenter, yPosConnC - 0.5* yWidthConnC + safety, 0.);
+  m_envelopeCornerA1 = GeoTrf::Vector3D(xMaxConnA - xCenter, yPosConnA + 0.5* yWidthConnA + safety, 0.);
+  m_envelopeCornerA2 = GeoTrf::Vector3D(xMaxConnA - xCenter, yPosConnA - 0.5* yWidthConnA + safety, 0.);
+  m_envelopeCornerC1 = GeoTrf::Vector3D(xMaxConnC - xCenter, yPosConnC + 0.5* yWidthConnC + safety, 0.);
+  m_envelopeCornerC2 = GeoTrf::Vector3D(xMaxConnC - xCenter, yPosConnC - 0.5* yWidthConnC + safety, 0.);
 
 
   m_xOffset = xBase;
@@ -98,7 +98,7 @@ GeoPixelLadderServices::~GeoPixelLadderServices(){
 GeoVPhysVol* GeoPixelLadderServices::Build() {
   GeoPhysVol* ladderSvcPhys = new GeoPhysVol(m_ladderServicesLV);
   //double thickness = m_gmt_mgr->PixelLadderThickness()+m_gmt_mgr->PixelCableThickness();
-  //double thickness = m_gmt_mgr->PixelLadderThickness() + m_gmt_mgr->PixelCableThickness() + 0.25*CLHEP::cm; // plus 0.25 cm New DC3 ???
+  //double thickness = m_gmt_mgr->PixelLadderThickness() + m_gmt_mgr->PixelCableThickness() + 0.25*GeoModelKernelUnits::cm; // plus 0.25 cm New DC3 ???
   //double thickness = m_gmt_mgr->PixelLadderThickness()+ 6.5;  // m_gmt_mgr->PixelCableThickness() was 0.4 cm, plus 0.25 cm New DC3
   //
   // The Glue
@@ -121,7 +121,7 @@ GeoVPhysVol* GeoPixelLadderServices::Build() {
   double zpos = fluid.posZ();
 
   GeoVPhysVol* fluidPhys = fluid.Build();
-  GeoTransform* xform   = new GeoTransform(HepGeom::Translate3D(xpos,ypos,zpos));
+  GeoTransform* xform   = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos));
   ladderSvcPhys->add(xform);
   ladderSvcPhys->add(fluidPhys);
 
@@ -141,7 +141,7 @@ GeoVPhysVol* GeoPixelLadderServices::Build() {
     double xpos = m_xOffset + cable.getStackOffset() + m_gmt_mgr->PixelLadderCableOffsetX() - m_gmt_mgr->PixelLadderServicesX();
     double ypos = m_yOffset + m_gmt_mgr->PixelLadderCableOffsetY() - m_gmt_mgr->PixelLadderServicesY();
     double zpos = cable.zpos();
-    GeoTransform* xform = new GeoTransform(HepGeom::Translate3D(xpos,ypos,zpos));
+    GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos));
     ladderSvcPhys->add(xform);
     ladderSvcPhys->add(phys);
   }
@@ -154,16 +154,16 @@ GeoVPhysVol* GeoPixelLadderServices::BuildOmega() {
   double xOffset = m_xOffset;
   double yOffset = m_yOffset;
   /*
-  double xUpperBend = xOffset + 2.9*CLHEP::mm;
+  double xUpperBend = xOffset + 2.9*GeoModelKernelUnits::mm;
   double yUpperBend = yOffset + 0;
-  double radUpperBend = 2.3*CLHEP::mm; 
+  double radUpperBend = 2.3*GeoModelKernelUnits::mm; 
   double xLowerBend = xOffset + 0.9;
-  double yLowerBend = yOffset + 3.35*CLHEP::mm;
-  double radLowerBend = 0.8*CLHEP::mm; 
-  double yStart= yOffset + (4.675+0.5*2.65)*CLHEP::mm;
+  double yLowerBend = yOffset + 3.35*GeoModelKernelUnits::mm;
+  double radLowerBend = 0.8*GeoModelKernelUnits::mm; 
+  double yStart= yOffset + (4.675+0.5*2.65)*GeoModelKernelUnits::mm;
   double yEnd =  yOffset -yStart;
-  double thick = 0.3*CLHEP::mm;
-  double length = 816*CLHEP::mm;
+  double thick = 0.3*GeoModelKernelUnits::mm;
+  double length = 816*GeoModelKernelUnits::mm;
   double zOffset = 0;
   */
   double xUpperBend = xOffset + m_gmt_mgr->PixelOmegaUpperBendX();
@@ -192,13 +192,13 @@ GeoVPhysVol* GeoPixelLadderServices::BuildOmega() {
 
 
   // Tube sector for upper bend
-  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*CLHEP::pi, CLHEP::pi - 2*alpha);
+  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*GeoModelKernelUnits::pi, GeoModelKernelUnits::pi - 2*alpha);
 
   // Tube sector for lower bend (+y)
-  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, CLHEP::pi, 0.5*CLHEP::pi-alpha);
+  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, GeoModelKernelUnits::pi, 0.5*GeoModelKernelUnits::pi-alpha);
 
   // Tube sector for lower bend (-y)
-  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*CLHEP::pi + alpha, 0.5*CLHEP::pi-alpha);
+  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*GeoModelKernelUnits::pi + alpha, 0.5*GeoModelKernelUnits::pi-alpha);
  
   // Lower Straight section (+y)
   GeoBox * lowerStraightBoxP = new GeoBox(0.5*thick, 0.5*(yStart - yLowerBend), 0.5*length);
@@ -211,13 +211,13 @@ GeoVPhysVol* GeoPixelLadderServices::BuildOmega() {
 
   // Put it all together
   const GeoShape & omegaShape = 
-    (*lowerStraightBoxP     << HepGeom::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(yLowerBend+yStart),zOffset) )
-    .add(*lowerBendShapeP   << HepGeom::Translate3D(xLowerBend,yLowerBend,zOffset) )
-    .add(*upperStraightBox  << HepGeom::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*HepGeom::RotateZ3D(0.5*CLHEP::pi-alpha) )
-    .add(*upperBendShape    << HepGeom::Translate3D(xUpperBend,yUpperBend,zOffset) )
-    .add(*upperStraightBox  << HepGeom::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*HepGeom::RotateZ3D(0.5*CLHEP::pi+alpha) )
-    .add(*lowerBendShapeM   << HepGeom::Translate3D(xLowerBend,-yLowerBend,zOffset) )
-    .add(*lowerStraightBoxM << HepGeom::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(-yLowerBend+yEnd),zOffset) );
+    (*lowerStraightBoxP     << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(yLowerBend+yStart),zOffset) )
+    .add(*lowerBendShapeP   << GeoTrf::Translate3D(xLowerBend,yLowerBend,zOffset) )
+    .add(*upperStraightBox  << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*GeoModelKernelUnits::pi-alpha) )
+    .add(*upperBendShape    << GeoTrf::Translate3D(xUpperBend,yUpperBend,zOffset) )
+    .add(*upperStraightBox  << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*GeoModelKernelUnits::pi+alpha) )
+    .add(*lowerBendShapeM   << GeoTrf::Translate3D(xLowerBend,-yLowerBend,zOffset) )
+    .add(*lowerStraightBoxM << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(-yLowerBend+yEnd),zOffset) );
 
   double totVolume = 
     lowerStraightBoxP->volume() 
@@ -240,14 +240,14 @@ GeoVPhysVol* GeoPixelLadderServices::BuildAlTube() {
   double yOffset = m_yOffset;
 
   /*
-  double xUpperBend = xOffset + 2.7*CLHEP::mm;
+  double xUpperBend = xOffset + 2.7*GeoModelKernelUnits::mm;
   double yUpperBend = yOffset;
-  double radUpperBend = 2.0*CLHEP::mm; 
+  double radUpperBend = 2.0*GeoModelKernelUnits::mm; 
   double xLowerBend = xOffset + 0.55;
-  double yLowerBend = yOffset+1.925*CLHEP::mm;
-  double radLowerBend = 0.5*CLHEP::mm; 
-  double thick = 0.2*CLHEP::mm;
-  double length = 838*CLHEP::mm;
+  double yLowerBend = yOffset+1.925*GeoModelKernelUnits::mm;
+  double radLowerBend = 0.5*GeoModelKernelUnits::mm; 
+  double thick = 0.2*GeoModelKernelUnits::mm;
+  double length = 838*GeoModelKernelUnits::mm;
   double zOffset = 0;
   */
 
@@ -275,13 +275,13 @@ GeoVPhysVol* GeoPixelLadderServices::BuildAlTube() {
 
 
   // Tube sector for upper bend
-  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*CLHEP::pi, CLHEP::pi - 2*alpha);
+  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*GeoModelKernelUnits::pi, GeoModelKernelUnits::pi - 2*alpha);
 
   // Tube sector for lower bend (+y)
-  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*CLHEP::pi-alpha, 0.5*CLHEP::pi+alpha);
+  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*GeoModelKernelUnits::pi-alpha, 0.5*GeoModelKernelUnits::pi+alpha);
 
   // Tube sector for lower bend (-y)
-  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, CLHEP::pi, 0.5*CLHEP::pi+alpha);
+  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, GeoModelKernelUnits::pi, 0.5*GeoModelKernelUnits::pi+alpha);
  
   // Lower Straight section 
   GeoBox * lowerStraightBox = new GeoBox(0.5*thick, yLowerBend, 0.5*length);
@@ -291,12 +291,12 @@ GeoVPhysVol* GeoPixelLadderServices::BuildAlTube() {
 
   // Put it all together
   const GeoShape & alTubeShape = 
-    (*lowerStraightBox      << HepGeom::Translate3D(xLowerBend-radLowerBend+0.5*thick,0,zOffset) )
-    .add(*lowerBendShapeP   << HepGeom::Translate3D(xLowerBend,yLowerBend,zOffset) )
-    .add(*upperStraightBox  << HepGeom::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*HepGeom::RotateZ3D(0.5*CLHEP::pi-alpha) )
-    .add(*upperBendShape    << HepGeom::Translate3D(xUpperBend,yUpperBend,zOffset) )
-    .add(*upperStraightBox  << HepGeom::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*HepGeom::RotateZ3D(0.5*CLHEP::pi+alpha) )
-    .add(*lowerBendShapeM   << HepGeom::Translate3D(xLowerBend,-yLowerBend,zOffset) );
+    (*lowerStraightBox      << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0,zOffset) )
+    .add(*lowerBendShapeP   << GeoTrf::Translate3D(xLowerBend,yLowerBend,zOffset) )
+    .add(*upperStraightBox  << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*GeoModelKernelUnits::pi-alpha) )
+    .add(*upperBendShape    << GeoTrf::Translate3D(xUpperBend,yUpperBend,zOffset) )
+    .add(*upperStraightBox  << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*GeoModelKernelUnits::pi+alpha) )
+    .add(*lowerBendShapeM   << GeoTrf::Translate3D(xLowerBend,-yLowerBend,zOffset) );
 
   double totVolume = 
     lowerStraightBox->volume() 
@@ -333,7 +333,7 @@ void GeoPixelLadderServices::BuildGlue(GeoPhysVol * parent) {
     GeoLogVol* glueLV   = new GeoLogVol("Glue",glueShape,glueMat);
     GeoPhysVol* gluePV = new GeoPhysVol(glueLV);
  
-    GeoTransform * xform = new GeoTransform(HepGeom::Translate3D(m_xOffset+x1+0.5*thickness, m_yOffset-0.5*(y1+y2), zOffset));
+    GeoTransform * xform = new GeoTransform(GeoTrf::Translate3D(m_xOffset+x1+0.5*thickness, m_yOffset-0.5*(y1+y2), zOffset));
 
     parent->add(xform);
     parent->add(gluePV);
@@ -362,7 +362,7 @@ void GeoPixelLadderServices::BuildPigtailAndConnector(GeoPhysVol * parent) {
   // Connector
   int numConn = m_gmt_mgr->PixelNumConnectorElements();
   std::vector<GeoPhysVol *> connectorPhysVols(numConn);
-  std::vector<HepGeom::Transform3D> connectorTransforms(numConn);
+  std::vector<GeoTrf::Transform3D> connectorTransforms(numConn);
   for (int iConn = 0; iConn < numConn; iConn++) {
     double xPosConnector = xOffset + m_gmt_mgr->PixelConnectorPosX(iConn); 
     double yPosConnector = yOffset + m_gmt_mgr->PixelConnectorPosY(iConn); 
@@ -375,7 +375,7 @@ void GeoPixelLadderServices::BuildPigtailAndConnector(GeoPhysVol * parent) {
     const GeoMaterial* connectorMat = m_mat_mgr->getMaterialForVolume(matNameConnector,connectorShape->volume());
     GeoLogVol  * connectorLV   = new GeoLogVol("Connector",connectorShape,connectorMat);
     connectorPhysVols[iConn] = new GeoPhysVol(connectorLV);
-    connectorTransforms[iConn] = HepGeom::Translate3D(xPosConnector, yPosConnector, zPosConnector);
+    connectorTransforms[iConn] = GeoTrf::Translate3D(xPosConnector, yPosConnector, zPosConnector);
   }
    
   for (int iModule = 0; iModule<m_gmt_mgr->PixelNModule(); iModule++) {
@@ -383,13 +383,13 @@ void GeoPixelLadderServices::BuildPigtailAndConnector(GeoPhysVol * parent) {
     double zShift = m_gmt_mgr->PixelModuleZPosition(moduleEta);
     
     // Place pigtail
-    GeoTransform * xformPigtail = new GeoTransform(HepGeom::Translate3D(xPosPigtail, yPosPigtail, zShift+zPosPigtail));
+    GeoTransform * xformPigtail = new GeoTransform(GeoTrf::Translate3D(xPosPigtail, yPosPigtail, zShift+zPosPigtail));
     parent->add(xformPigtail);
     parent->add(pigtailPhys);
 
     // Place connector
     for (int iConn = 0; iConn < numConn; iConn++) {
-      GeoTransform * xformConnector = new GeoTransform(HepGeom::TranslateZ3D(zShift)*connectorTransforms[iConn]);
+      GeoTransform * xformConnector = new GeoTransform(GeoTrf::TranslateZ3D(zShift)*connectorTransforms[iConn]);
       parent->add(xformConnector);
       parent->add(connectorPhysVols[iConn]);
     }
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadderServices.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.h
similarity index 54%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadderServices.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.h
index af2f303c3fd54a2da0204b3f5f8851cbbcca0144..84fb11c61b4ba628a6d50aef12778a9463dd7f0f 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLadderServices.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLadderServices.h
@@ -5,8 +5,9 @@
 #ifndef GEOPIXELLADDERSERVICES_H
 #define GEOPIXELLADDERSERVICES_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Point3D.h"
+#include "GeoVPixelFactory.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 class GeoLogVol;
 class GeoPhysVol;
@@ -16,10 +17,10 @@ class GeoPixelLadderServices : public GeoVPixelFactory {
   GeoPixelLadderServices(int ladderType);
   virtual ~GeoPixelLadderServices();
   virtual GeoVPhysVol* Build();
-  const HepGeom::Point3D<double> & envelopeCornerA1() {return  m_envelopeCornerA1;}
-  const HepGeom::Point3D<double> & envelopeCornerA2() {return  m_envelopeCornerA2;}
-  const HepGeom::Point3D<double> & envelopeCornerC1() {return  m_envelopeCornerC1;}
-  const HepGeom::Point3D<double> & envelopeCornerC2() {return  m_envelopeCornerC2;}
+  const GeoTrf::Vector3D & envelopeCornerA1() {return  m_envelopeCornerA1;}
+  const GeoTrf::Vector3D & envelopeCornerA2() {return  m_envelopeCornerA2;}
+  const GeoTrf::Vector3D & envelopeCornerC1() {return  m_envelopeCornerC1;}
+  const GeoTrf::Vector3D & envelopeCornerC2() {return  m_envelopeCornerC2;}
   double referenceX() {return m_xOffset;}
   double referenceY() {return m_yOffset;}
 
@@ -32,10 +33,10 @@ class GeoPixelLadderServices : public GeoVPixelFactory {
   const GeoLogVol* m_ladderServicesLV;
   int m_ladderType;
 
-  HepGeom::Point3D<double> m_envelopeCornerA1;
-  HepGeom::Point3D<double> m_envelopeCornerA2;
-  HepGeom::Point3D<double> m_envelopeCornerC1;
-  HepGeom::Point3D<double> m_envelopeCornerC2;
+  GeoTrf::Vector3D m_envelopeCornerA1;
+  GeoTrf::Vector3D m_envelopeCornerA2;
+  GeoTrf::Vector3D m_envelopeCornerC1;
+  GeoTrf::Vector3D m_envelopeCornerC2;
 
   double m_xOffset;
   double m_yOffset;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.cxx
index a1f7aca79291bac1ccb0824dfd077666a93f5d5e..8e103b87779df90b75e9fe0239792a079c188a6a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.cxx
@@ -2,17 +2,17 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-
-#include "PixelGeoModel/GeoPixelLayer.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
-#include "PixelGeoModel/GeoPixelTMT.h"
-#include "PixelGeoModel/GeoPixelSimpleStaveSupport.h"
-#include "PixelGeoModel/GeoPixelDetailedStaveSupport.h"
-#include "PixelGeoModel/GeoPixelStaveRingServices.h"
-#include "PixelGeoModel/GeoPixelLadderServices.h"
-#include "PixelGeoModel/GeoPixelPigtail.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
-#include "PixelGeoModel/GeoPixelStaveRing.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoPixelLayer.h"
+#include "GeoPixelLadder.h"
+#include "GeoPixelTMT.h"
+#include "GeoPixelSimpleStaveSupport.h"
+#include "GeoPixelDetailedStaveSupport.h"
+#include "GeoPixelStaveRingServices.h"
+#include "GeoPixelLadderServices.h"
+#include "GeoPixelPigtail.h"
+#include "GeoPixelSiCrystal.h"
+#include "GeoPixelStaveRing.h"
 
 #include "InDetGeoModelUtils/ExtraMaterial.h"
 #include "InDetReadoutGeometry/PixelDetectorManager.h"
@@ -136,10 +136,10 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   //std::cout << "Distance along ladder surface from center to point of closest approach: " <<  distToClosestPoint << std::endl;
 
   // Calculate the radius of the corners of the ladder.
-  HepGeom::Point3D<double> ladderLowerCorner(-ladderHalfThickN, ladderHalfWidth, 0);
-  HepGeom::Point3D<double> ladderUpperCorner(ladderHalfThickP, -ladderHalfWidth, 0);
-  ladderLowerCorner = HepGeom::TranslateX3D(layerRadius) * HepGeom::RotateZ3D(std::abs(ladderTilt)) * ladderLowerCorner;
-  ladderUpperCorner = HepGeom::TranslateX3D(layerRadius) * HepGeom::RotateZ3D(std::abs(ladderTilt)) * ladderUpperCorner;
+  GeoTrf::Vector3D ladderLowerCorner(-ladderHalfThickN, ladderHalfWidth, 0);
+  GeoTrf::Vector3D ladderUpperCorner(ladderHalfThickP, -ladderHalfWidth, 0);
+  ladderLowerCorner = GeoTrf::TranslateX3D(layerRadius) * GeoTrf::RotateZ3D(std::abs(ladderTilt)) * ladderLowerCorner;
+  ladderUpperCorner = GeoTrf::TranslateX3D(layerRadius) * GeoTrf::RotateZ3D(std::abs(ladderTilt)) * ladderUpperCorner;
 
   double layerThicknessN = layerRadius - ladderLowerCorner.perp();
   double layerThicknessP = ladderUpperCorner.perp() - layerRadius; // Will be recalculated below in case of additional services
@@ -182,9 +182,9 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   // Variables that are used later
   int maxLadType = 0;
   std::vector<GeoVPhysVol *> ladderServicesArray;
-  HepGeom::Transform3D ladderServicesTransform;
+  GeoTrf::Transform3D ladderServicesTransform(GeoTrf::Transform3D::Identity());
   GeoVPhysVol* pigtailPhysVol = 0;
-  HepGeom::Transform3D transPigtail;
+  GeoTrf::Transform3D transPigtail(GeoTrf::Transform3D::Identity());
 				
   // Only make services in non SLHC geometries 
   if (staveLayout == 0) {
@@ -244,10 +244,10 @@ GeoVPhysVol* GeoPixelLayer::Build() {
       // We need the dimensions of the GeoPixelLadderServices. They are all the same in this regards
       // so any of them will do -  use the first one.
       
-      HepGeom::Point3D<double> corner1 = firstLadderServices->envelopeCornerC1();
-      HepGeom::Point3D<double> corner2 = firstLadderServices->envelopeCornerC2();
-      HepGeom::Point3D<double> corner3 = firstLadderServices->envelopeCornerA1();
-      HepGeom::Point3D<double> corner4 = firstLadderServices->envelopeCornerA2();
+      GeoTrf::Vector3D corner1 = firstLadderServices->envelopeCornerC1();
+      GeoTrf::Vector3D corner2 = firstLadderServices->envelopeCornerC2();
+      GeoTrf::Vector3D corner3 = firstLadderServices->envelopeCornerA1();
+      GeoTrf::Vector3D corner4 = firstLadderServices->envelopeCornerA2();
       
       // translate relative to sensor center (center of tilt rotation),
       // then tilt then translate by radius of layer, then calculate r.
@@ -256,13 +256,13 @@ GeoVPhysVol* GeoPixelLayer::Build() {
       // xCenter, yCenter or coordinates of ladder services relative to active layer center (center of tilt rotation)
       xCenter = (firstLadderServices->referenceX() + xLadderServicesOffset);
       yCenter = (firstLadderServices->referenceY() + yLadderServicesOffset);
-      HepGeom::Transform3D ladderSvcToglobal = HepGeom::TranslateX3D(layerRadius) 
-	* HepGeom::RotateZ3D(ladderTilt) 
-	* HepGeom::Translate3D(xCenter, yCenter, 0);
-      HepGeom::Point3D<double> corner1global = ladderSvcToglobal * corner1;
-      HepGeom::Point3D<double> corner2global = ladderSvcToglobal * corner2;
-      HepGeom::Point3D<double> corner3global = ladderSvcToglobal * corner3;
-      HepGeom::Point3D<double> corner4global = ladderSvcToglobal * corner4;
+      GeoTrf::Transform3D ladderSvcToglobal = GeoTrf::TranslateX3D(layerRadius) 
+	* GeoTrf::RotateZ3D(ladderTilt) 
+	* GeoTrf::Translate3D(xCenter, yCenter, 0);
+      GeoTrf::Vector3D corner1global = ladderSvcToglobal * corner1;
+      GeoTrf::Vector3D corner2global = ladderSvcToglobal * corner2;
+      GeoTrf::Vector3D corner3global = ladderSvcToglobal * corner3;
+      GeoTrf::Vector3D corner4global = ladderSvcToglobal * corner4;
       
       double rMaxTmp = std::max(corner1global.perp(), 
 				std::max(corner2global.perp(), 
@@ -287,14 +287,14 @@ GeoVPhysVol* GeoPixelLayer::Build() {
     // The tube and cooling have there reference point 
     // In y: center of cooling tube
     // In x: ~center of envelope (will change it to base of glue layer.)
-    ladderServicesTransform = HepGeom::Translate3D(xCenter, yCenter, 0);
+    ladderServicesTransform = GeoTrf::Translate3D(xCenter, yCenter, 0);
       
     //
     // The Pigtail
     //
     GeoPixelPigtail pigtail;
     pigtailPhysVol = pigtail.Build();
-    transPigtail = HepGeom::Translate3D(m_gmt_mgr->PixelPigtailBendX() + m_gmt_mgr->PixelLadderCableOffsetX(), 
+    transPigtail = GeoTrf::Translate3D(m_gmt_mgr->PixelPigtailBendX() + m_gmt_mgr->PixelLadderCableOffsetX(), 
 				  m_gmt_mgr->PixelPigtailBendY() + m_gmt_mgr->PixelLadderCableOffsetY(), 
 				  0.);
 
@@ -304,7 +304,7 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   //
   // Layer dimensions from above, etc
   //
-  double safety = 0.01 * CLHEP::mm;
+  double safety = 0.01 * GeoModelKernelUnits::mm;
   double rmin =  m_gmt_mgr->PixelLayerRadius()-layerThicknessN - safety;
   double rmax =  m_gmt_mgr->PixelLayerRadius()+layerThicknessP + safety;
   double length = m_gmt_mgr->PixelLadderLength() + 4*m_epsilon; // Ladder has length m_gmt_mgr->PixelLadderLength() +  2*m_epsilon
@@ -315,7 +315,7 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   if(m_gmt_mgr->GetLD()==0&&m_gmt_mgr->ibl()&&m_gmt_mgr->PixelStaveLayout()>3&&m_gmt_mgr->PixelStaveLayout()<8)
     {
       bAddIBLStaveRings=true;
-      double safety = 0.001 * CLHEP::mm;
+      double safety = 0.001 * GeoModelKernelUnits::mm;
       double outerRadius = m_gmt_mgr->IBLSupportMidRingInnerRadius();  
       rmax=outerRadius-safety;
 
@@ -346,8 +346,8 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   //
   // A few variables needed below
   //  
-  double angle=(nSectors>0)?(360./(double)nSectors)*CLHEP::deg:(360.*CLHEP::deg);
-  HepGeom::Transform3D transRadiusAndTilt = HepGeom::TranslateX3D(layerRadius)*HepGeom::RotateZ3D(ladderTilt);
+  double angle=(nSectors>0)?(360./(double)nSectors)*GeoModelKernelUnits::deg:(360.*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D transRadiusAndTilt = GeoTrf::TranslateX3D(layerRadius)*GeoTrf::RotateZ3D(ladderTilt);
   double phiOfModuleZero =  m_gmt_mgr->PhiOfModuleZero();
 
   // IBL rotations are defined vs the cooling pipe center...
@@ -355,14 +355,13 @@ GeoVPhysVol* GeoPixelLayer::Build() {
     {
 
       //  Point that defines the center of the cooling pipe
-      HepGeom::Point3D<double> centerCoolingPipe = m_gmt_mgr->IBLStaveRotationAxis() ;
-      HepGeom::Point3D<double> centerCoolingPipe_inv = -centerCoolingPipe;
+      GeoTrf::Vector3D centerCoolingPipe = m_gmt_mgr->IBLStaveRotationAxis() ;
 
       // Transforms
-      HepGeom::Transform3D staveTrf = HepGeom::RotateZ3D(ladderTilt)*HepGeom::Translate3D(centerCoolingPipe_inv);
+      GeoTrf::Transform3D staveTrf = GeoTrf::RotateZ3D(ladderTilt)*GeoTrf::Translate3D(-centerCoolingPipe.x(),-centerCoolingPipe.y(),-centerCoolingPipe.z());
       double staveRadius = m_gmt_mgr->IBLStaveRadius() ;
 
-      transRadiusAndTilt = HepGeom::TranslateX3D(staveRadius)*staveTrf;
+      transRadiusAndTilt = GeoTrf::TranslateX3D(staveRadius)*staveTrf;
     }
 
   //
@@ -396,7 +395,7 @@ GeoVPhysVol* GeoPixelLayer::Build() {
     double phiOfSector = phiOfModuleZero + ii*angle;
 
     // transform equiv  RotZ(phiOfSector)*TransZ(layerRadius)*RotZ(tilt)
-    HepGeom::Transform3D ladderTransform = HepGeom::RotateZ3D(phiOfSector) * transRadiusAndTilt;
+    GeoTrf::Transform3D ladderTransform = GeoTrf::RotateZ3D(phiOfSector) * transRadiusAndTilt;
 
     //
     // Place the active ladders
@@ -499,7 +498,7 @@ GeoVPhysVol* GeoPixelLayer::Build() {
       
       if(m_gmt_mgr->PixelStaveAxe()==1) {
 	GeoNameTag *tagM = new GeoNameTag("Brl0M_StaveRing");         
-	GeoTransform *xformSupportMidRing = new GeoTransform(HepGeom::Transform3D());
+	GeoTransform *xformSupportMidRing = new GeoTransform(GeoTrf::Transform3D::Identity());
 	GeoVPhysVol *supportPhysMidRing = getSupportMidRing();
 	layerPhys->add(tagM);
 	layerPhys->add(xformSupportMidRing);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLayer.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.h
similarity index 95%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLayer.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.h
index 64847a9fb5ae80145b30e768e8796ad85eaca020..317b1207ddcba7591968fcd882ed56b8150f7f68 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelLayer.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelLayer.h
@@ -5,7 +5,7 @@
 #ifndef PIXELGEOMODEL_GEOPIXELLAYER_H
 #define PIXELGEOMODEL_GEOPIXELLAYER_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
 class GeoPhysVol;
 class GeoTransform;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.cxx
index 612341d9e3f40b8a6474e2cad4b00990fe05599f..9f0fb3b103fee2b94f8b5894d0131a9d0d247733 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.cxx
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelModule.h"
-#include "PixelGeoModel/GeoPixelHybrid.h"
-#include "PixelGeoModel/GeoPixelChip.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
+#include "GeoPixelModule.h"
+#include "GeoPixelHybrid.h"
+#include "GeoPixelChip.h"
+#include "GeoPixelSiCrystal.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoLogVol.h"
@@ -57,12 +57,12 @@ GeoPixelModule::GeoPixelModule(GeoPixelSiCrystal& theSensor) :
 
     // Shift so the center of the box is the center of the sensor.
     double shift = 0.5 * (ThicknessP() - ThicknessN_noSvc());
-    //    const GeoShape & shiftedBox = (*moduleBox) << HepGeom::TranslateX3D(shift);
+    //    const GeoShape & shiftedBox = (*moduleBox) << GeoTrf::TranslateX3D(shift);
     //    moduleShape = &shiftedBox;
     
     thickness = ThicknessP()+ThicknessN_noSvc();
     const GeoBox* moduleBox = new GeoBox(thickness/2.,width/2.,length/2.);
-    const GeoShape & shiftedBox = (*moduleBox) << HepGeom::TranslateX3D(shift);
+    const GeoShape & shiftedBox = (*moduleBox) << GeoTrf::TranslateX3D(shift);
     const GeoShape * moduleShape = &shiftedBox;
 
     if(m_moduleSvcThickness<0.001) {
@@ -71,19 +71,19 @@ GeoPixelModule::GeoPixelModule(GeoPixelSiCrystal& theSensor) :
     }
     else {
       const GeoShape * gblShape = 0;
-      gblShape = addShape(gblShape, moduleShape, HepGeom::Transform3D() );
+      gblShape = addShape(gblShape, moduleShape, GeoTrf::Transform3D::Identity() );
 
       double svcWidth = width*.6;
       m_moduleSvcWidth = svcWidth;
       const GeoBox* moduleSvcBox1 = new GeoBox(m_moduleSvcThickness*.5,svcWidth*.25,length*.5);
       double yShift = width*.5-svcWidth*.75;
       double xShift = thickness*.5+m_moduleSvcThickness*.5; 
-      gblShape = addShape(gblShape, moduleSvcBox1, (HepGeom::TranslateX3D(-xShift)*HepGeom::TranslateY3D(-yShift)) );
+      gblShape = addShape(gblShape, moduleSvcBox1, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
 
       const GeoBox* moduleSvcBox2 = new GeoBox(m_moduleSvcThickness*.25,svcWidth*.25,length*.5);
       yShift = width*.5-svcWidth*.25;
       xShift = thickness*.5+m_moduleSvcThickness*.25; 
-      gblShape = addShape(gblShape, moduleSvcBox2, (HepGeom::TranslateX3D(-xShift)*HepGeom::TranslateY3D(-yShift)) );
+      gblShape = addShape(gblShape, moduleSvcBox2, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
 
       for(int iSvc=0; iSvc<m_nbModuleSvc; iSvc++)
 	{
@@ -97,7 +97,7 @@ GeoPixelModule::GeoPixelModule(GeoPixelSiCrystal& theSensor) :
 	    double offsetY = m_gmt_mgr->PixelModuleServiceOffsetY(iSvc);
 	    double xPos = -0.5*(m_gmt_mgr->PixelBoardThickness(m_isModule3D)-m_gmt_mgr->PixelHybridThickness(m_isModule3D)) - offsetX - thick_svc*.5;
 	    const GeoBox* moduleSvcBox3 = new GeoBox(thick_svc*.5+.01,width_svc*.5+.01,length*.5+.01);
-	    gblShape = addShape(gblShape, moduleSvcBox3, (HepGeom::TranslateX3D(xPos)*HepGeom::TranslateY3D(offsetY)) );
+	    gblShape = addShape(gblShape, moduleSvcBox3, (GeoTrf::TranslateX3D(xPos)*GeoTrf::TranslateY3D(offsetY)) );
 	  }
 	}
 
@@ -131,16 +131,16 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
   }
   modulePhys->add(new GeoIdentifierTag(idTag) );
   //Sensor is centered so we don't need the transform.
-  //GeoTransform *xformsi = new GeoTransform(HepGeom::Transform3D());
+  //GeoTransform *xformsi = new GeoTransform(GeoTrf::Transform3D());
   //modulePhys->add(xformsi);
   modulePhys->add(theSi );
   //
   // Place the Hybrid
   //
-  if (m_gmt_mgr->PixelHybridThickness(m_isModule3D)>0.00001*CLHEP::mm){
+  if (m_gmt_mgr->PixelHybridThickness(m_isModule3D)>0.00001*GeoModelKernelUnits::mm){
     GeoPixelHybrid ph(m_isModule3D);
     double hybxpos = -0.5*(m_gmt_mgr->PixelBoardThickness(m_isModule3D)+m_gmt_mgr->PixelHybridThickness(m_isModule3D));
-    GeoTransform* xform = new GeoTransform(HepGeom::TranslateX3D(hybxpos));
+    GeoTransform* xform = new GeoTransform(GeoTrf::TranslateX3D(hybxpos));
     modulePhys->add(xform);
     modulePhys->add(ph.Build() );
   }
@@ -151,7 +151,7 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
   GeoPixelChip pc(m_isModule3D);
   double chipxpos = 0.5*(m_gmt_mgr->PixelBoardThickness(m_isModule3D)+m_gmt_mgr->PixelChipThickness(m_isModule3D))+m_gmt_mgr->PixelChipGap(m_isModule3D);
   double chipypos =m_gmt_mgr->PixelChipOffset(m_isModule3D);
-  GeoTransform* xform = new GeoTransform(HepGeom::TranslateX3D(chipxpos)*HepGeom::TranslateY3D(chipypos));
+  GeoTransform* xform = new GeoTransform(GeoTrf::TranslateX3D(chipxpos)*GeoTrf::TranslateY3D(chipypos));
   modulePhys->add(xform);
   modulePhys->add(pc.Build() );
 
@@ -183,7 +183,7 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
 	double xPos = -0.5*(m_gmt_mgr->PixelBoardThickness(m_isModule3D)-m_gmt_mgr->PixelHybridThickness(m_isModule3D)) - offsetX - thick*.5;
 	double yPos = offsetY;
 	double zPos = offsetZ;
-	GeoTransform* xform = new GeoTransform(HepGeom::Translate3D(xPos,yPos,zPos));	
+	GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(xPos,yPos,zPos));	
 	modulePhys->add(xform);
 	modulePhys->add(svcPhys);
       }
@@ -200,7 +200,7 @@ double GeoPixelModule::ThicknessN_noSvc() {
   // is the max of ThicknessP and thickness from the module center to
   // the outer surface of the hybrid plus some safety.
   //
-  double safety = 0.01*CLHEP::mm; 
+  double safety = 0.01*GeoModelKernelUnits::mm; 
   double thickn = 0.5 * m_gmt_mgr->PixelBoardThickness(m_isModule3D)+ m_gmt_mgr->PixelHybridThickness(m_isModule3D) + safety;
   double thick = max(thickn, ThicknessP()); 
   
@@ -234,7 +234,7 @@ double GeoPixelModule::ThicknessN() {
   //
 
 
-  double safety = 0.01*CLHEP::mm; 
+  double safety = 0.01*GeoModelKernelUnits::mm; 
   double thickn = 0.5 * m_gmt_mgr->PixelBoardThickness(m_isModule3D)+ m_gmt_mgr->PixelHybridThickness(m_isModule3D) + safety;
   double thick = max(thickn, ThicknessP()); 
 
@@ -265,7 +265,7 @@ double GeoPixelModule::ThicknessP() {
   // is thickness from the module center to the outer surface of the
   // chips plus some safety.
 
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
   double thick = 0.5 * m_gmt_mgr->PixelBoardThickness(m_isModule3D) +
     m_gmt_mgr->PixelChipThickness(m_isModule3D)+m_gmt_mgr->PixelChipGap(m_isModule3D) + safety;
 
@@ -305,7 +305,7 @@ Identifier GeoPixelModule::getID() {
 }
 
 
-const GeoShape * GeoPixelModule::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans)
+const GeoShape * GeoPixelModule::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans)
 {
   const GeoShape * shiftedShape = &(*nextShape << trans);
   if (lastShape) {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelModule.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.h
similarity index 90%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelModule.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.h
index 43b254bfbdd4305c04fc2f11787c7df087847921..74ca2f44fb00ddb2c89bd0a1af74f92ad19dffd2 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelModule.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelModule.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELMODULE_H
 #define GEOPIXELMODULE_H
 #include "Identifier/Identifier.h"
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 class GeoPixelSiCrystal;
 
@@ -27,7 +27,7 @@ class GeoPixelModule : public GeoVPixelFactory {
 
  private:
 
-  const GeoShape*  addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans);
+  const GeoShape*  addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans);
 
   const GeoLogVol* m_theModule;
   Identifier m_id;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.cxx
index 0973f6f752dfc2c360a2caf8310a6d7076e5d9ea..e50c4ccec30f04d962a2a7522e771f52c65625df 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.cxx
@@ -6,8 +6,8 @@
 // New description of the pixel support frame (M.Zdrazil + AR) 
 // The box part (of barrel)
 //
-#include "PixelGeoModel/GeoPixelOldFrame.h"
-#include "PixelGeoModel/PixelLegacyManager.h"
+#include "GeoPixelOldFrame.h"
+#include "PixelLegacyManager.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTrap.h"
 #include "GeoModelKernel/GeoLogVol.h"
@@ -113,16 +113,16 @@ void GeoPixelOldFrame::BuildInBarrel(GeoFullPhysVol * parent) {
   
   // First part
   m_legacyManager->setBarrelInSFrame();
-  double alpha = 45.*CLHEP::deg;
+  double alpha = 45.*GeoModelKernelUnits::deg;
   double w1    = m_legacyManager->PixelBarrelBFrameWidth();
   double w2    = m_legacyManager->PixelBarrelTFrameWidth();
   double off   = m_legacyManager->PixelBarrelFrameOffset();
   for (int ii = 0; ii < m_legacyManager->PixelBarrelNBFrame(); ii++) {
     GeoNameTag* tag = new GeoNameTag("Inside Box Frame");
     double thet = ((float)ii+0.5)*alpha;
-    CLHEP::Hep3Vector pos(w1*cos(thet),w1*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+2.5)*alpha);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Translation3D pos(w1*cos(thet),w1*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+2.5)*alpha);
+    GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform);
     parent->add(BuildBox());
@@ -131,9 +131,9 @@ void GeoPixelOldFrame::BuildInBarrel(GeoFullPhysVol * parent) {
   for (int ii = 0; ii < m_legacyManager->PixelBarrelNTFrame(); ii++) {
     GeoNameTag* tag = new GeoNameTag("Inside Trap Frame");
     double thet = ((float)ii+1.)*alpha;
-    CLHEP::Hep3Vector pos(w2*cos(thet),w2*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+3.0)*alpha);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Translation3D pos(w2*cos(thet),w2*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+3.0)*alpha);
+    GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform);
     parent->add(BuildTrap());
@@ -150,14 +150,14 @@ void GeoPixelOldFrame::BuildInBarrel(GeoFullPhysVol * parent) {
   for (int ii = 0; ii < m_legacyManager->PixelBarrelNBFrame(); ii++) {
     GeoNameTag* tag = new GeoNameTag("Outside Box Frame");
     double thet = ((float)ii+0.5)*alpha;
-    CLHEP::Hep3Vector pos(w1*cos(thet),w1*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+2.5)*alpha);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Translation3D pos(w1*cos(thet),w1*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+2.5)*alpha);
+    GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform);
     parent->add(BuildBox());
-    pos.setZ(-off);
-    GeoTransform* xform2 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    pos.z()= -off;
+    GeoTransform* xform2 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform2);
     parent->add(BuildBox());
@@ -166,14 +166,14 @@ void GeoPixelOldFrame::BuildInBarrel(GeoFullPhysVol * parent) {
     m_legacyManager->setBarrelOutSFrame(); 
     GeoNameTag* tag = new GeoNameTag("Outside Trap Frame");
     double thet = ((float)ii+1.)*alpha;
-    CLHEP::Hep3Vector pos(w2*cos(thet),w2*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+3.0)*alpha);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Translation3D pos(w2*cos(thet),w2*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+3.0)*alpha);
+    GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform);
     parent->add(BuildTrap());
-    pos.setZ(-off);
-    GeoTransform* xform2 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+    pos.z() = -off;
+    GeoTransform* xform2 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
     parent->add(tag);
     parent->add(xform2);
     parent->add(BuildTrap());
@@ -181,19 +181,15 @@ void GeoPixelOldFrame::BuildInBarrel(GeoFullPhysVol * parent) {
     m_legacyManager->setEndConeSFrame();
     GeoNameTag* tag2 = new GeoNameTag("Outside End Cone Trap Frame");
     thet = ((float)ii+0.5)*alpha;
-    CLHEP::Hep3Vector posec(radi*cos(thet),radi*sin(thet),zpec);
-    CLHEP::HepRotation rm2;
-    rm2.rotateX(alxec);
-    rm2.rotateZ(((float)ii+2.5)*alpha);
-    GeoTransform* xform3 = new GeoTransform(HepGeom::Transform3D(rm2,posec));
+    GeoTrf::Translation3D posec(radi*cos(thet),radi*sin(thet),zpec);
+    GeoTrf::Transform3D rm2 = GeoTrf::RotateZ3D(((float)ii+2.5)*alpha)*GeoTrf::RotateX3D(alxec);
+    GeoTransform* xform3 = new GeoTransform(GeoTrf::Transform3D(posec*rm2));
     parent->add(tag2);
     parent->add(xform3);
     parent->add(BuildTrap());
-    posec.setZ(-zpec);
-    CLHEP::HepRotation rm3;
-    rm3.rotateX(-alxec);
-    rm3.rotateZ(((float)ii+2.5)*alpha);
-    GeoTransform* xform4 = new GeoTransform(HepGeom::Transform3D(rm3,posec));
+    posec.z() = -zpec;
+    GeoTrf::Transform3D rm3 = GeoTrf::RotateZ3D(((float)ii+2.5)*alpha)*GeoTrf::RotateX3D(-alxec);
+    GeoTransform* xform4 = new GeoTransform(GeoTrf::Transform3D(posec*rm3));
     parent->add(tag2);
     parent->add(xform4);
     parent->add(BuildTrap());
@@ -210,7 +206,7 @@ void GeoPixelOldFrame::BuildOutBarrel(GeoFullPhysVol * parent) {
   // Add the pixel frame inside the endcap volume
   //
   m_legacyManager->setEndcapInSFrame();
-  double alpha = 45.*CLHEP::deg;
+  double alpha = 45.*GeoModelKernelUnits::deg;
   double w1    = m_legacyManager->PixelEndcapBFrameWidth();
   double w2    = m_legacyManager->PixelEndcapTFrameWidth();
   double off   = m_legacyManager->PixelEndcapFrameOffset()+m_legacyManager->PixelEndcapFrameLength();
@@ -218,18 +214,18 @@ void GeoPixelOldFrame::BuildOutBarrel(GeoFullPhysVol * parent) {
   for (int ii = 0; ii < m_legacyManager->PixelEndcapNBFrame(); ii++) {
     GeoNameTag* tag = new GeoNameTag("Outside Outer Endcap Box Frame");
     double thet = ((float)ii+0.5)*alpha;
-    CLHEP::Hep3Vector pos(w1*cos(thet),w1*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+2.5)*alpha);
-    
+    GeoTrf::Translation3D pos(w1*cos(thet),w1*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+2.5)*alpha);
+
     if (endcapAPresent) {
-      GeoTransform* xform1 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      GeoTransform* xform1 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       parent->add(tag);
       parent->add(xform1);
       parent->add(BuildBox());
     } 
     if (endcapCPresent) {
-      pos.setZ(-off);
-      GeoTransform* xform2 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      pos.z() = -off;
+      GeoTransform* xform2 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       parent->add(tag);
       parent->add(xform2);
       parent->add(BuildBox());
@@ -239,17 +235,17 @@ void GeoPixelOldFrame::BuildOutBarrel(GeoFullPhysVol * parent) {
   for (int ii = 0; ii < m_legacyManager->PixelEndcapNTFrame(); ii++) {
     GeoNameTag* tag = new GeoNameTag("Outside Outer Endcap Trap Frame");
     double thet = ((float)ii+1.)*alpha;
-    CLHEP::Hep3Vector pos(w2*cos(thet),w2*sin(thet),off);
-    CLHEP::HepRotation rm; rm.rotateZ(((float)ii+3.0)*alpha);
+    GeoTrf::Translation3D pos(w2*cos(thet),w2*sin(thet),off);
+    GeoTrf::RotateZ3D rm(((float)ii+3.0)*alpha);
     if (endcapAPresent) {
-      GeoTransform* xform1 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      GeoTransform* xform1 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       parent->add(tag);
       parent->add(xform1);
       parent->add(BuildTrap());
     } 
     if (endcapCPresent) {
-      pos.setZ(-off);
-      GeoTransform* xform2 = new GeoTransform(HepGeom::Transform3D(rm,pos));
+      pos.z() = -off;
+      GeoTransform* xform2 = new GeoTransform(GeoTrf::Transform3D(pos*rm));
       parent->add(tag);
       parent->add(xform2);
       parent->add(BuildTrap());
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelOldFrame.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.h
similarity index 92%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelOldFrame.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.h
index 2a40a4964e3690a233cd05ec066e54d3d84ac3e1..2a4d9a5d71bdf5461092524af56fab2796f0735a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelOldFrame.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelOldFrame.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELOLDFRAME_H
 #define GEOPIXELOLDFRAME_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 class GeoFullPhysVol;
 class GeoVPhysVol;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.cxx
index e945ff3fedcd7cf42a35283e1f8fa3941a0ff1d5..e7cab3d7fd9576f8b56f0de0a3e55340b699d43e 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelPigtail.h"
+#include "GeoPixelPigtail.h"
 #include "GeoModelKernel/GeoTubs.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
@@ -41,7 +41,7 @@ GeoVPhysVol* GeoPixelPigtail::Build() {
     GeoPhysVol* pigtailPart = new GeoPhysVol(theTubs);
 
     double zpos = posZ + zShift;
-    GeoTransform* xform = new GeoTransform(HepGeom::TranslateZ3D(zpos));
+    GeoTransform* xform = new GeoTransform(GeoTrf::TranslateZ3D(zpos));
     pigtailPhys->add(xform);
     pigtailPhys->add(pigtailPart);
   }
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelPigtail.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.h
similarity index 86%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelPigtail.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.h
index 5f8766c7bbfb7863aa1a94318fa5303abc24b5de..f21415b6d678b645cefdb40847ff07c0bccaeea2 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelPigtail.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelPigtail.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELPIGTAIL_H
 #define GEOPIXELPIGTAIL_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 class GeoPixelPigtail : public GeoVPixelFactory {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.cxx
index 092b102ea469a0a0571c360258ae875288ad9a54..01ace765ff7d7e445f6bc01cb50c1fb946bf7223 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.cxx
@@ -2,9 +2,9 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoPixelRingSLHC.h"
-#include "PixelGeoModel/GeoPixelModule.h"
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
+#include "GeoPixelRingSLHC.h"
+#include "GeoPixelModule.h"
+#include "GeoPixelSiCrystal.h"
 
 // #include "InDetGeoModelUtils/ExtraMaterial.h"
 
@@ -42,8 +42,8 @@ GeoVPhysVol* GeoPixelRingSLHC::Build() {
   //(sar) Original block was in c'tor...
   // Dimensions from class methods
   //
-  double rmin = m_gmt_mgr->PixelRingRMin(); // Default is 0.01 CLHEP::mm safety added
-  double rmax = m_gmt_mgr->PixelRingRMax(); // Default is 0.01 CLHEP::mm safety added
+  double rmin = m_gmt_mgr->PixelRingRMin(); // Default is 0.01 GeoModelKernelUnits::mm safety added
+  double rmax = m_gmt_mgr->PixelRingRMax(); // Default is 0.01 GeoModelKernelUnits::mm safety added
   double halflength = m_gmt_mgr->PixelRingThickness()/2.;
   const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
   const GeoTube* ringTube = new GeoTube(rmin,rmax,halflength);
@@ -60,7 +60,7 @@ GeoVPhysVol* GeoPixelRingSLHC::Build() {
   if(nmodules==0) return ringPhys;
 
   // deltaPhi is angle between two adjacent modules regardless of side of the disk
-  double deltaPhi = 360.*CLHEP::deg / (double)nmodules;
+  double deltaPhi = 360.*GeoModelKernelUnits::deg / (double)nmodules;
 
   // This is the start angle of the even modules
   // Start angle could eventually come from the database...
@@ -99,15 +99,13 @@ GeoVPhysVol* GeoPixelRingSLHC::Build() {
 
     double angle = imod*deltaPhi+startAngle;
 
+    GeoTrf::Transform3D rm = GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    if( m_gmt_mgr->isDiskBack() ) rm = rm * GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
+    rm = rm * GeoTrf::RotateZ3D(angle);
 
-    CLHEP::HepRotation rm;
-    rm.rotateY(90*CLHEP::deg);
-    if( m_gmt_mgr->isDiskBack() ) rm.rotateX(180.*CLHEP::deg); // depth axis points towards disk.
-
-    rm.rotateZ(angle);
-    CLHEP::Hep3Vector pos(moduleRadius,0,zpos);
-    pos.rotateZ(angle);
-    GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Vector3D pos(moduleRadius,0,zpos);
+    pos = GeoTrf::RotateZ3D(angle)*pos;
+    GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rm);
     GeoVPhysVol * modulePhys = gpmod.Build();
     std::ostringstream ostr; 
     ostr << "Disk" << idisk << "_Sector" << iring;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelRingSLHC.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.h
similarity index 89%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelRingSLHC.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.h
index ccce4bc091b310045600f07086af53515adce847..397d1ba5200ecba1e5cdb1b2f4c5941227ff6c72 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelRingSLHC.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelRingSLHC.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELRINGSLHC_H
 #define GEOPIXELRINGSLHC_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoPixelSiCrystal;
 class GeoLogVol;
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.cxx
index a5d761bdb3d115a3889d495e4b5edfe0f633036e..30aaf37b6dc521f8df3db7f93f5d43d71edee5f8 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.cxx
@@ -34,7 +34,7 @@
 // TUBS
 //   Ignored: RIN2,ROUT2
 //   PHI: phi start location of tube sector
-//   WIDTH (CLHEP::deg): phi width of sector  
+//   WIDTH (GeoModelKernelUnits::deg): phi width of sector  
 //   REPEAT: Repeat the tube sector this many times in phi with equal distance between them.
 // CONS, CONE
 //   WIDTH,REPEAT ignored if CONE
@@ -72,33 +72,33 @@
 //   Ignored: ROUT, RIN2, ROUT2
 //   RIN: Radial position of center of tube
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm): diameter 
+//   WIDTH (GeoModelKernelUnits::mm): diameter 
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // ROD2
 //   Ignored: ROUT, RIN2, ROUT2
 //   RIN: Radial position of center of tube
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm): diameter 
+//   WIDTH (GeoModelKernelUnits::mm): diameter 
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // BOX
 //   Ignored: RIN2, ROUT2
 //   ROUT-RIN = thickness of box (radially)
 //   (RIN+ROUT)/2 = radial poistion of center of box
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm) = width of box
+//   WIDTH (GeoModelKernelUnits::mm) = width of box
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 // TRAP
 //   Ignored: RIN2, ROUT2
 //   ROUT-RIN = thickness of trapezoid (radially)
 //   (RIN+ROUT)/2 = radial poistion of center of trapzoid
 //   PHI: phi position of center
-//   WIDTH (CLHEP::mm) = width of trapezoid at center
+//   WIDTH (GeoModelKernelUnits::mm) = width of trapezoid at center
 //   REPEAT: Repeat this many times in phi with equal distance between them.
 //
-//   **IMPORTANT NOTE** WIDTH can be in degrees or CLHEP::mm. See OraclePixGeoManager
+//   **IMPORTANT NOTE** WIDTH can be in degrees or GeoModelKernelUnits::mm. See OraclePixGeoManager
 
 
-#include "PixelGeoModel/GeoPixelServices.h"
+#include "GeoPixelServices.h"
 #include "InDetGeoModelUtils/VolumeSplitterUtils.h"
 #include "InDetGeoModelUtils/VolumeBuilder.h"
 #include "InDetGeoModelUtils/ServiceVolume.h"
@@ -206,7 +206,7 @@ GeoPixelServices::GeoPixelServices(InDetDD::Zone * pixZone)
     std::vector<const InDetDD::ServiceVolume *> servicesOutPix;
     double svc3_rMin = 99999., svc3_rMax = 0.;
     std::vector<const InDetDD::ServiceVolume *> servicesOther;
-    double safety=0.001*CLHEP::mm;
+    double safety=0.001*GeoModelKernelUnits::mm;
 
     for(std::vector<const InDetDD::ServiceVolume *>::const_iterator it=services.begin(); it!=services.end(); it++)
       {
@@ -403,15 +403,15 @@ void GeoPixelServices::initializeOld(const std::string & a)
       double phiLoc =  m_gmt_mgr->PixelServicePhiLoc(a, ii);
       double phiWidth =  m_gmt_mgr->PixelServiceWidth(a, ii);
       
-      // Can be in degree or CLHEP::mm. Usually it is CLHEP::deg expect for BOX, TRAP and ROD shape
+      // Can be in degree or GeoModelKernelUnits::mm. Usually it is GeoModelKernelUnits::deg expect for BOX, TRAP and ROD shape
       // Geometry manager makes no assumptions about units. So we must interpret here.
       if (shapeType == "BOX" || shapeType == "ROD" || shapeType == "ROD2" || shapeType == "TRAP") {
-	phiWidth *= CLHEP::mm;
+	phiWidth *= GeoModelKernelUnits::mm;
       } else {
-	phiWidth *= CLHEP::degree;
+	phiWidth *= GeoModelKernelUnits::degree;
       }
       
-      if (phiWidth == 0) phiWidth = 2*CLHEP::pi;
+      if (phiWidth == 0) phiWidth = 2*GeoModelKernelUnits::pi;
       if (rmin2 <= 0) rmin2 = param.rmin(); 
       if (rmax2 <= 0) rmax2 = param.rmax(); 
       if (repeat == 0) repeat = 1;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelServices.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.h
similarity index 95%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelServices.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.h
index 9f5d2ca9e735abd55b723c236243c9c8ebae65e7..de701826a8ad4c4edaeb4dd2770ba44199d85b72 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelServices.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelServices.h
@@ -5,7 +5,7 @@
 #ifndef GEOPIXELSERVICES_H
 #define GEOPIXELSERVICES_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoTransform;
 
 namespace InDetDD {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.cxx
index f2fcc130d89826e8a44e80c464c82dfdb21b9713..57fc49f96acbb47748d8450229d1672b8c5a50a6 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.cxx
@@ -11,7 +11,7 @@
 //
 // Contains: nothing
 //
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
+#include "GeoPixelSiCrystal.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
@@ -109,17 +109,17 @@ GeoPixelSiCrystal::GeoPixelSiCrystal(bool isBLayer, bool isModule3D)
 
   if ( (m_gmt_mgr->DesignRPActiveArea(m_isModule3D) > width) ||
        (m_gmt_mgr->DesignZActiveArea(m_isModule3D) >  length) || 
-       (width - m_gmt_mgr->DesignRPActiveArea(m_isModule3D) > 4 * CLHEP::mm) || 
-       (length - m_gmt_mgr->DesignZActiveArea(m_isModule3D) > 4 * CLHEP::mm) ) { 
+       (width - m_gmt_mgr->DesignRPActiveArea(m_isModule3D) > 4 * GeoModelKernelUnits::mm) || 
+       (length - m_gmt_mgr->DesignZActiveArea(m_isModule3D) > 4 * GeoModelKernelUnits::mm) ) { 
     m_gmt_mgr->msg(MSG::WARNING) << "GeoPixelSiCrystal: Active area not consistent with sensor size. Sensor: " 
-			       << width/CLHEP::mm << " x " << length/CLHEP::mm << ", Active: " 
-			       << m_gmt_mgr->DesignRPActiveArea(m_isModule3D)/CLHEP::mm << " x " << m_gmt_mgr->DesignZActiveArea(m_isModule3D)/CLHEP::mm 
+			       << width/GeoModelKernelUnits::mm << " x " << length/GeoModelKernelUnits::mm << ", Active: " 
+			       << m_gmt_mgr->DesignRPActiveArea(m_isModule3D)/GeoModelKernelUnits::mm << " x " << m_gmt_mgr->DesignZActiveArea(m_isModule3D)/GeoModelKernelUnits::mm 
 			       << endmsg;
   } else {
     if (m_gmt_mgr->msgLvl(MSG::DEBUG)) m_gmt_mgr->msg(MSG::DEBUG) 
       << "GeoPixelSiCrystal: Sensor: "  
-      << width/CLHEP::mm << " x " << length/CLHEP::mm << ", Active: " 
-      << m_gmt_mgr->DesignRPActiveArea(m_isModule3D)/CLHEP::mm << " x " << m_gmt_mgr->DesignZActiveArea(m_isModule3D)/CLHEP::mm 
+      << width/GeoModelKernelUnits::mm << " x " << length/GeoModelKernelUnits::mm << ", Active: " 
+      << m_gmt_mgr->DesignRPActiveArea(m_isModule3D)/GeoModelKernelUnits::mm << " x " << m_gmt_mgr->DesignZActiveArea(m_isModule3D)/GeoModelKernelUnits::mm 
       << endmsg;		       
   }
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSiCrystal.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.h
similarity index 95%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSiCrystal.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.h
index 129f0e61e140032043ea181ae5d135082bb0b6d3..711b6119c4f208c7115b9bfe5b27c166b31264d8 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSiCrystal.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSiCrystal.h
@@ -6,7 +6,7 @@
 #define GEOPIXELSICRYSTAL_H
 
 #include "Identifier/Identifier.h"
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 class GeoLogVol;
 
 namespace InDetDD {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.cxx
index 6dcc6471db15103db7409f9a449ab6e8d3b59e51..134f811f597d01222e27108635517675f23fe1e0 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.cxx
@@ -5,7 +5,7 @@
 // Build simple stave support as a box
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelSimpleStaveSupport.h"
+#include "GeoPixelSimpleStaveSupport.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
@@ -14,6 +14,7 @@
 
 
 GeoPixelSimpleStaveSupport::GeoPixelSimpleStaveSupport()
+  : m_transform(GeoTrf::Transform3D::Identity())
 {
   m_physVol = Build();
   m_physVol->ref();
@@ -36,7 +37,7 @@ GeoVPhysVol* GeoPixelSimpleStaveSupport::Build() {
   const GeoMaterial* material = m_mat_mgr->getMaterialForVolume(matName,shape->volume());
   GeoLogVol* logVol = new GeoLogVol("StaveSupport",shape,material);
 
-  m_transform = HepGeom::Translate3D(xOffset,yOffset,0);
+  m_transform = GeoTrf::Translate3D(xOffset,yOffset,0);
 
   m_thicknessP =  xOffset + 0.5*thickness;
   m_thicknessN =  -xOffset + 0.5*thickness;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSimpleStaveSupport.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.h
similarity index 84%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSimpleStaveSupport.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.h
index 0688cb25b0694fa1c6cd9538dece7f92228e374c..3086935ef9d2b118e771bfa3c2b69bce31ac84ba 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelSimpleStaveSupport.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelSimpleStaveSupport.h
@@ -5,8 +5,9 @@
 #ifndef GEOPIXELSIMPLESTAVESUPPORT_H
 #define GEOPIXELSIMPLESTAVESUPPORT_H
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 class GeoPixelSimpleStaveSupport : public GeoPixelStaveSupport {
 
@@ -15,7 +16,7 @@ public:
   virtual ~GeoPixelSimpleStaveSupport();
   virtual GeoVPhysVol* Build();
   virtual GeoVPhysVol* getPhysVol() const {return m_physVol;}
-  virtual const HepGeom::Transform3D & transform() const {return m_transform;}
+  virtual const GeoTrf::Transform3D & transform() const {return m_transform;}
   virtual double thicknessP() const {return m_thicknessP;}
   virtual double thicknessN() const {return m_thicknessN;}
   virtual GeoSimplePolygonBrep* computeStaveEnvelopShape(double) { return 0;}
@@ -33,7 +34,7 @@ public:
 
 private:
   GeoVPhysVol* m_physVol;
-  HepGeom::Transform3D m_transform;
+  GeoTrf::Transform3D m_transform;
   double m_thicknessP;
   double m_thicknessN;
 };
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.cxx
index 87dcd7e1e7acd42f0b9fc419179eddc5577ae2e8..f949df028596d1ff62268a03087b0e29af96ced9 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.cxx
@@ -5,10 +5,10 @@
 // Build detailed stave support : face plate + carbon foam + cable flex + cooling pipe + end blocks
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelStaveRing.h"
+#include "GeoPixelStaveRing.h"
 
-#include "PixelGeoModel/GeoPixelSiCrystal.h"
-#include "PixelGeoModel/GeoPixelModule.h"
+#include "GeoPixelSiCrystal.h"
+#include "GeoPixelModule.h"
 
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -48,7 +48,7 @@ GeoVPhysVol* GeoPixelStaveRing::Build(){
 
   m_gmt_mgr->msg(MSG::INFO) <<"Build detailed stave ring support : "<<m_ringName<<"  "<<m_ringPosition<<endmsg;
 
-  double safety = 0.001*CLHEP::mm; 
+  double safety = 0.001*GeoModelKernelUnits::mm; 
   bool isBLayer = false;
   if(m_gmt_mgr->GetLD() == 0) isBLayer = true;
   GeoPixelSiCrystal theSensor(isBLayer);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRing.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.h
similarity index 83%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRing.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.h
index 891f12ac7ad197213aa2a30614d7788a9969bdf4..0a1510e18ca67c881fe779957d8534388a446d20 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRing.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRing.h
@@ -5,9 +5,7 @@
 #ifndef GEOPIXELSTAVERING_H
 #define GEOPIXELSTAVERING_H
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "GeoModelKernel/GeoTransform.h"
+#include "GeoVPixelFactory.h"
 
 class GeoPixelStaveRing :  public GeoVPixelFactory {
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.cxx
index 1c8b31dd59fbf3cb0df63b11f59db1223d02d2a6..66130eeedae9448060317632bd3619ce2b5084d2 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.cxx
@@ -6,9 +6,9 @@
 // Build detailed stave support : face plate + carbon foam + cable flex + cooling pipe + end blocks
 // This is built one time per layer. 
 
-#include "PixelGeoModel/GeoPixelStaveRingServices.h"
+#include "GeoPixelStaveRingServices.h"
 
-#include "PixelGeoModel/GeoPixelStaveRing.h"
+#include "GeoPixelStaveRing.h"
 
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTube.h"
@@ -43,7 +43,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 
   double ladderHalfThickN = m_ladder.thicknessN();
   double ladderHalfThickP = m_ladder.thicknessP();
-  double safetyMargin = 0.001*CLHEP::mm;
+  double safetyMargin = 0.001*GeoModelKernelUnits::mm;
 
   // Get endblock from m_staveSupport
   GeoPhysVol* endblockA=dynamic_cast<GeoPhysVol*>(m_staveSupport.getEndblockEnvelopShape(2));
@@ -56,7 +56,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
   GeoPhysVol* serviceCoolPipe=dynamic_cast<GeoPhysVol*>(m_staveSupport.getEndblockEnvelopShape(3));
   GeoTransform* serviceCoolPipeTrfA=m_staveSupport.getEndblockEnvelopShapeTrf(2);
   GeoTransform* serviceCoolPipeTrfC=m_staveSupport.getEndblockEnvelopShapeTrf(-2);
-  const HepGeom::Transform3D ladderLocalTrf=m_staveSupport.transform();
+  const GeoTrf::Transform3D ladderLocalTrf=m_staveSupport.transform();
   double dogLegStaveLength=17.87;
   double halfSupportLength=endblockLength*0.5+dogLegStaveLength*0.5;
   
@@ -109,21 +109,20 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
   }
   else {
 
-    double angle=360./nSectors*CLHEP::deg;
-    HepGeom::Transform3D transRadiusAndTilt = HepGeom::TranslateX3D(layerRadius)*HepGeom::RotateZ3D(ladderTilt);
+    double angle=360./nSectors*GeoModelKernelUnits::deg;
+    GeoTrf::Transform3D transRadiusAndTilt = GeoTrf::TranslateX3D(layerRadius)*GeoTrf::RotateZ3D(ladderTilt);
     double phiOfModuleZero =  m_gmt_mgr->PhiOfModuleZero();
 
     if(m_gmt_mgr->PixelStaveAxe()==1)   
       {
 	//  Point that defines the center of the cooling pipe
-	HepGeom::Point3D<double> centerCoolingPipe = m_gmt_mgr->IBLStaveRotationAxis() ;
-	HepGeom::Point3D<double> centerCoolingPipe_inv = -centerCoolingPipe;
+	GeoTrf::Vector3D centerCoolingPipe = m_gmt_mgr->IBLStaveRotationAxis() ;
 	
 	// Transforms
-	HepGeom::Transform3D staveTrf = HepGeom::RotateZ3D(ladderTilt)*HepGeom::Translate3D(centerCoolingPipe_inv);
+	GeoTrf::Transform3D staveTrf = GeoTrf::RotateZ3D(ladderTilt)*GeoTrf::Translate3D(-centerCoolingPipe.x(),-centerCoolingPipe.y(),-centerCoolingPipe.z());
 	double staveRadius = m_gmt_mgr->IBLStaveRadius() ;
 	
-	transRadiusAndTilt = HepGeom::TranslateX3D(staveRadius)*staveTrf;
+	transRadiusAndTilt = GeoTrf::TranslateX3D(staveRadius)*staveTrf;
       }
     
     for(int ii = 0; ii < nSectors; ii++) {
@@ -132,7 +131,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
       double phiOfSector = phiOfModuleZero + ii*angle;
       
       // transform equiv  RotZ(phiOfSector)*TransZ(layerRadius)*RotZ(tilt)
-      HepGeom::Transform3D ladderTransform = HepGeom::RotateZ3D(phiOfSector) * transRadiusAndTilt ;
+      GeoTrf::Transform3D ladderTransform = GeoTrf::RotateZ3D(phiOfSector) * transRadiusAndTilt ;
       
       //
       // Place endblock and endblock flex
@@ -140,12 +139,12 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
       std::ostringstream nameTag; 
       nameTag << "Endblock" << ii;
       GeoNameTag * tag = new GeoNameTag(nameTag.str());
-      GeoTransform* xformA = new GeoTransform(ladderTransform*ladderLocalTrf*HepGeom::TranslateZ3D(endblockZpos-serviceZpos-dogLegStaveLength*0.5));
+      GeoTransform* xformA = new GeoTransform(ladderTransform*ladderLocalTrf*GeoTrf::TranslateZ3D(endblockZpos-serviceZpos-dogLegStaveLength*0.5));
       m_supportPhysA->add(tag);
       m_supportPhysA->add(xformA);
       m_supportPhysA->add(endblockA);
 
-      GeoTransform* xformC = new GeoTransform(ladderTransform*ladderLocalTrf*HepGeom::TranslateZ3D(-endblockZpos+serviceZpos+dogLegStaveLength*0.5));
+      GeoTransform* xformC = new GeoTransform(ladderTransform*ladderLocalTrf*GeoTrf::TranslateZ3D(-endblockZpos+serviceZpos+dogLegStaveLength*0.5));
       m_supportPhysC->add(tag);
       m_supportPhysC->add(xformC);
       m_supportPhysC->add(endblockC);
@@ -156,8 +155,8 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
       std::ostringstream nameTagFlex; 
       nameTagFlex << "EndblockFlex" << ii;
       GeoNameTag * tagFlex = new GeoNameTag(nameTagFlex.str());
-      GeoTransform* xformFlexA = new GeoTransform(ladderTransform*ladderLocalTrf*(endblockFlexTrf->getTransform())*HepGeom::TranslateZ3D(-dogLegStaveLength*0.5));
-      GeoTransform* xformFlexB = new GeoTransform(ladderTransform*ladderLocalTrf*(endblockFlexTrf->getTransform())*HepGeom::TranslateZ3D(dogLegStaveLength*0.5));
+      GeoTransform* xformFlexA = new GeoTransform(ladderTransform*ladderLocalTrf*(endblockFlexTrf->getTransform())*GeoTrf::TranslateZ3D(-dogLegStaveLength*0.5));
+      GeoTransform* xformFlexB = new GeoTransform(ladderTransform*ladderLocalTrf*(endblockFlexTrf->getTransform())*GeoTrf::TranslateZ3D(dogLegStaveLength*0.5));
       
       m_supportPhysA->add(tagFlex);
       m_supportPhysA->add(xformFlexA);
@@ -184,7 +183,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	m_supportPhysC->add(xformPipeC);
 	m_supportPhysC->add(serviceCoolPipe);
 	
-	HepGeom::Point3D<double> p=ladderTransform*ladderLocalTrf*(serviceCoolPipeTrfA->getTransform())*HepGeom::Point3D<double>(0.,0.,0.);
+//	GeoTrf::Vector3D p=ladderTransform*ladderLocalTrf*(serviceCoolPipeTrfA->getTransform())*GeoTrf::Vector3D(0.,0.,0.);
 	//       std::cout<<"Cooling pipe srv : "<<p.x()<<" "<<p.y()<<" "<<p.z();
 	//       std::cout<<"   r : "<<sqrt(p.x()*p.x()+p.y()*p.y())<<" ";
 	//       std::cout<<"  ang : "<<acos(p.x()/sqrt(p.x()*p.x()+p.y()*p.y()))*180./3.1415<<" "; 
@@ -209,7 +208,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	double dimX=dimX_lin/cos(alpha1)-.15;
 	double dimY=m_gmt_mgr->IBLStaveFlexWidth();
 	double dimZ=m_gmt_mgr->IBLStaveFlexBaseThickness();
-	double angle=90.*CLHEP::deg-alpha1;   //90.-27.99;
+	double angle=90.*GeoModelKernelUnits::deg-alpha1;   //90.-27.99;
 	double delta=m_gmt_mgr->IBLFlexDoglegDY();
 	double trX=-dimX_lin*tan(alpha1)*0.5;   //-3.28;
 	double trZ=eoStave+dimX_lin*0.5;
@@ -223,13 +222,13 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	for(unsigned int iPt=0; iPt<xShape.size(); iPt++) tmp_shape->addVertex(xShape[iPt],yShape[iPt]);
 	
 	
-	//	GeoPara * tmp_shape = new GeoPara(0.47,5.5,9.,0.*CLHEP::deg,55.*CLHEP::deg,0.);
+	//	GeoPara * tmp_shape = new GeoPara(0.47,5.5,9.,0.*GeoModelKernelUnits::deg,55.*GeoModelKernelUnits::deg,0.);
 	std::string flexMatName = m_gmt_mgr->IBLFlexMaterial(1,"doglegA");
 	const GeoMaterial* tmp_material = m_mat_mgr->getMaterial(flexMatName);
 	GeoLogVol* tmp_logVol = new GeoLogVol("FlexDogLeg1",tmp_shape,tmp_material);
 	GeoPhysVol * tmp_logVolPV = new GeoPhysVol(tmp_logVol);
 	GeoNameTag* tmp_tag = new GeoNameTag("FlexDogLeg1");
-	HepGeom::Transform3D trfGblA=ladderTransform*ladderLocalTrf*HepGeom::TranslateX3D(trX)*HepGeom::TranslateZ3D(trZ)*(endblockFlexTrf->getTransform())*HepGeom::RotateY3D(angle);
+	GeoTrf::Transform3D trfGblA=ladderTransform*ladderLocalTrf*GeoTrf::TranslateX3D(trX)*GeoTrf::TranslateZ3D(trZ)*(endblockFlexTrf->getTransform())*GeoTrf::RotateY3D(angle);
 	GeoTransform* tmp_xformA = new GeoTransform(trfGblA);
 	
 	m_supportPhysA->add(tmp_tag);
@@ -238,7 +237,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	
 	trX=-dimX_lin*tan(alpha1)*0.5;   //-3.28;
 	trZ=-(eoStave+dimX_lin*0.5);
-	HepGeom::Transform3D trfGblC=ladderTransform*ladderLocalTrf*HepGeom::TranslateX3D(trX)*HepGeom::TranslateZ3D(trZ)*(endblockFlexTrf->getTransform())*HepGeom::RotateY3D(-angle);
+	GeoTrf::Transform3D trfGblC=ladderTransform*ladderLocalTrf*GeoTrf::TranslateX3D(trX)*GeoTrf::TranslateZ3D(trZ)*(endblockFlexTrf->getTransform())*GeoTrf::RotateY3D(-angle);
 	GeoTransform* tmp_xformC = new GeoTransform(trfGblC);
 	
 	m_supportPhysC->add(tmp_tag);
@@ -254,7 +253,7 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	double trX2=trX*2.-dimX2_lin*tan(alpha2)*0.5;   //-3.28;
 	double trZ2=eoStave+dimX_lin+dimX2_lin*0.5;
 	xShape.clear(); yShape.clear();
-	angle=90.*CLHEP::deg-alpha2;
+	angle=90.*GeoModelKernelUnits::deg-alpha2;
 	xShape.push_back(dimX2*0.5);  yShape.push_back(dimY2*0.5);
 	xShape.push_back(-dimX2*0.5);  yShape.push_back(dimY2*0.5);
 	xShape.push_back(-dimX2*0.5); yShape.push_back(-dimY2*0.5);
@@ -267,13 +266,13 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
 	GeoPhysVol * tmp2_logVolPV = new GeoPhysVol(tmp2_logVol);
 	GeoNameTag* tmp2_tag = new GeoNameTag("FlexDogLeg2");
 	
-	GeoTransform* tmp2_xformA = new GeoTransform(ladderTransform*ladderLocalTrf*HepGeom::TranslateX3D(trX2)*HepGeom::TranslateZ3D(trZ2)*(endblockFlexTrf->getTransform())*HepGeom::RotateY3D(angle)*HepGeom::TranslateY3D(delta*.75));
+	GeoTransform* tmp2_xformA = new GeoTransform(ladderTransform*ladderLocalTrf*GeoTrf::TranslateX3D(trX2)*GeoTrf::TranslateZ3D(trZ2)*(endblockFlexTrf->getTransform())*GeoTrf::RotateY3D(angle)*GeoTrf::TranslateY3D(delta*.75));
 	m_supportPhysA->add(tmp2_tag);
 	m_supportPhysA->add(tmp2_xformA);
 	m_supportPhysA->add(tmp2_logVolPV);
 	
 	trZ2=-(eoStave+dimX_lin+dimX2_lin*0.5);
-	GeoTransform* tmp2_xformC = new GeoTransform(ladderTransform*ladderLocalTrf*HepGeom::TranslateX3D(trX2)*HepGeom::TranslateZ3D(trZ2)*(endblockFlexTrf->getTransform())*HepGeom::RotateY3D(-angle)*HepGeom::TranslateY3D(delta*.75));
+	GeoTransform* tmp2_xformC = new GeoTransform(ladderTransform*ladderLocalTrf*GeoTrf::TranslateX3D(trX2)*GeoTrf::TranslateZ3D(trZ2)*(endblockFlexTrf->getTransform())*GeoTrf::RotateY3D(-angle)*GeoTrf::TranslateY3D(delta*.75));
 	m_supportPhysC->add(tmp2_tag);
 	m_supportPhysC->add(tmp2_xformC);
 	m_supportPhysC->add(tmp2_logVolPV);
@@ -284,30 +283,30 @@ GeoVPhysVol* GeoPixelStaveRingServices::Build()
   // IBL layer shift ( 2mm shift issue )
   double layerZshift = m_gmt_mgr->PixelLayerGlobalShift();
 
-  CLHEP::Hep3Vector ring_posA(0.0,0.0,staveRing.GetPositionAlongZAxis()-serviceZpos-dogLegStaveLength*0.5+layerZshift);
-  GeoTransform* xformA  = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),ring_posA));
+  GeoTrf::Translate3D ring_posA(0.0,0.0,staveRing.GetPositionAlongZAxis()-serviceZpos-dogLegStaveLength*0.5+layerZshift);
+  GeoTransform* xformA  = new GeoTransform(ring_posA);
   m_supportPhysA->add(tagA);
   m_supportPhysA->add(xformA);
   m_supportPhysA->add(ringphysA);
   
-  CLHEP::Hep3Vector ring_posC(0.0,0.0,-staveRing.GetPositionAlongZAxis()+serviceZpos+dogLegStaveLength*0.5-layerZshift);
-  GeoTransform* xformC  = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),ring_posC));
+  GeoTrf::Translate3D ring_posC(0.0,0.0,-staveRing.GetPositionAlongZAxis()+serviceZpos+dogLegStaveLength*0.5-layerZshift);
+  GeoTransform* xformC  = new GeoTransform(ring_posC);
   m_supportPhysC->add(tagC);
   m_supportPhysC->add(xformC);
   m_supportPhysC->add(ringphysC);
   
   m_gmt_mgr->msg(MSG::DEBUG)<<"IBL EOS : zpos "<<serviceZpos<<endmsg;
-  HepGeom::Transform3D supportTrfA = HepGeom::TranslateZ3D(serviceZpos+dogLegStaveLength*0.5+layerZshift);
+  GeoTrf::Transform3D supportTrfA = GeoTrf::TranslateZ3D(serviceZpos+dogLegStaveLength*0.5+layerZshift);
   m_xformSupportA = new GeoTransform(supportTrfA);
   
-  HepGeom::Transform3D supportTrfC = HepGeom::TranslateZ3D(-serviceZpos-dogLegStaveLength*0.5+layerZshift);
+  GeoTrf::Transform3D supportTrfC = GeoTrf::TranslateZ3D(-serviceZpos-dogLegStaveLength*0.5+layerZshift);
   m_xformSupportC = new GeoTransform(supportTrfC);
   
   std::ostringstream lnameM;
   lnameM << "Brl0M_StaveRing";
   m_supportMidRing = staveRing.SetParametersAndBuild(lnameM.str(),"Mid");
-  CLHEP::Hep3Vector ring_posM(0.0,0.0,0.0+layerZshift);
-  m_xformSupportMidRing = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),ring_posM));
+  GeoTrf::Translate3D ring_posM(0.0,0.0,0.0+layerZshift);
+  m_xformSupportMidRing = new GeoTransform(ring_posM);
 
 
   return 0;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRingServices.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.h
similarity index 84%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRingServices.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.h
index de473e5f6c7087a5260ef2bcb8a0e9deea3d11c7..e4ebb9393c97b6778b6b2992eceebf66ba5fae9a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveRingServices.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveRingServices.h
@@ -5,17 +5,14 @@
 #ifndef GEOPIXELSTAVERINGSERVICES_H
 #define GEOPIXELSTAVERINGSERVICES_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "PixelGeoModel/GeoPixelLadder.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPixelLadder.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 
-
 class GeoTransform;
-class GeoPhysVol;
 
 class GeoPixelStaveRingServices :  public GeoVPixelFactory {
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveSupport.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveSupport.h
similarity index 86%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveSupport.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveSupport.h
index 05a15c622e8a490f522bccb32ca21eddc0354d4d..0b077797b64d9feb3e0d776f79359e1352a6a3e1 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelStaveSupport.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelStaveSupport.h
@@ -5,8 +5,9 @@
 #ifndef GEOPIXELSTAVESUPPORT_H
 #define GEOPIXELSTAVESUPPORT_H
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoVPixelFactory.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoSimplePolygonBrep.h"
 #include "GeoModelKernel/GeoTransform.h"
 
@@ -14,7 +15,7 @@ class GeoPixelStaveSupport :  public GeoVPixelFactory {
 
 public:  
   virtual GeoVPhysVol* getPhysVol() const = 0;
-  virtual const HepGeom::Transform3D & transform() const = 0;
+  virtual const GeoTrf::Transform3D & transform() const = 0;
   virtual double thicknessP() const = 0;
   virtual double thicknessN() const = 0;
   virtual GeoSimplePolygonBrep* computeStaveEnvelopShape(double) = 0;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.cxx
index 2138e77957ca532db0dd792e04672a4f016f85ba..5d2286e73b42245c64923a90fc9cb66c2e4f2c30 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.cxx
@@ -7,7 +7,7 @@
 // Each layer is given slightly different mass due to differences
 // in the measured mass.
 
-#include "PixelGeoModel/GeoPixelTMT.h"
+#include "GeoPixelTMT.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTubs.h"
 #include "GeoModelKernel/GeoTrap.h"
@@ -15,14 +15,15 @@
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoNameTag.h"
-
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/Units.h"
 #include <utility> //std::swap
 #include <cmath>
 
-GeoPixelTMT::GeoPixelTMT()
+GeoPixelTMT::GeoPixelTMT():
+  m_transform(GeoTrf::Transform3D::Identity())
 {
   m_physVol = Build();
   m_physVol->ref();
@@ -50,7 +51,7 @@ GeoVPhysVol* GeoPixelTMT::Build() {
   GeoNameTag* tag = new GeoNameTag("TMT");
 
   // this part is unchanged: reading the DB, creating the shapes of the volumes and defining their position
-  HepGeom::RotateX3D traprot(180.*CLHEP::deg);
+  GeoTrf::RotateX3D traprot(180.*GeoModelKernelUnits::deg);
 
   int halfNModule = m_gmt_mgr->PixelNModule()/2;
 
@@ -106,7 +107,7 @@ GeoVPhysVol* GeoPixelTMT::Build() {
 
       GeoLogVol* tmpLogVol= new GeoLogVol("TMT",shape,material);
       GeoPhysVol* tmpPhysVol= new GeoPhysVol(tmpLogVol);
-      GeoTransform* trans = new GeoTransform(HepGeom::Translate3D(xpos,ypos,zpos));
+      GeoTransform* trans = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos));
 
       theTMT->add(tag);
       theTMT->add(trans);
@@ -123,12 +124,12 @@ GeoVPhysVol* GeoPixelTMT::Build() {
         // move the dublicates to the correct relative position and add it to the assembly
         double zshift = m_gmt_mgr->PixelModuleZPosition(1) * ii;
 
-        GeoTransform* transPos = new GeoTransform(HepGeom::Translate3D(xpos,ypos,zpos+zshift));
+        GeoTransform* transPos = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos+zshift));
         theTMT->add(tag);
         theTMT->add(transPos);
         theTMT->add(tmpPhysVol);
 
-        GeoTransform* transNeg = new GeoTransform(HepGeom::Translate3D(xpos,ypos,-(zpos+zshift))*HepGeom::RotateX3D(180*CLHEP::deg));
+        GeoTransform* transNeg = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,-(zpos+zshift))*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg));
         theTMT->add(tag);
         theTMT->add(transNeg);
         theTMT->add(tmpPhysVol);
@@ -143,7 +144,7 @@ GeoVPhysVol* GeoPixelTMT::Build() {
 }
 
 const GeoShape *
-GeoPixelTMT::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans)
+GeoPixelTMT::addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans)
 {
   const GeoShape * shiftedShape = &(*nextShape << trans);
   if (lastShape) {
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelTMT.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.h
similarity index 83%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelTMT.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.h
index 06eee2be40d6679058144d12063dc37292bffd88..40c1c9ef77506ebe7f037ab09af8ba9f365835dc 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoPixelTMT.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoPixelTMT.h
@@ -5,8 +5,9 @@
 #ifndef GEOPIXELTMT_H
 #define GEOPIXELTMT_H
 
-#include "PixelGeoModel/GeoPixelStaveSupport.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPixelStaveSupport.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "AthenaKernel/MsgStreamMember.h"
 
 class GeoShape;
@@ -18,7 +19,7 @@ public:
   virtual ~GeoPixelTMT();
   virtual GeoVPhysVol* Build();
   virtual GeoVPhysVol* getPhysVol() const {return m_physVol;}
-  virtual const HepGeom::Transform3D & transform() const {return m_transform;}
+  virtual const GeoTrf::Transform3D & transform() const {return m_transform;}
   virtual double thicknessP() const {return 0;} // Use ladder thickness from database
   virtual double thicknessN() const {return 0;} // Use ladder thickness from database
   virtual GeoSimplePolygonBrep* computeStaveEnvelopShape(double) { return 0;}
@@ -35,10 +36,10 @@ public:
   MsgStream& msg (MSG::Level lvl) const { return m_msg << lvl;}
 
 private:
-  const GeoShape * addShape(const GeoShape * lastShape, const GeoShape * nextShape, const HepGeom::Transform3D & trans);
+  const GeoShape * addShape(const GeoShape * lastShape, const GeoShape * nextShape, const GeoTrf::Transform3D & trans);
 
   GeoVPhysVol* m_physVol;
-  HepGeom::Transform3D m_transform;
+  GeoTrf::Transform3D m_transform;
   mutable Athena::MsgStreamMember m_msg;
 };
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.cxx
index a0097586054c819c6dd85bd40f8963dc1af66d66..c92e41de73ae04f4d84f4f2b22740643fee9954e 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/GeoVPixelFactory.h"
+#include "GeoVPixelFactory.h"
 
 using InDetDD::PixelDetectorManager;
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoVPixelFactory.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.h
similarity index 94%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoVPixelFactory.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.h
index a932c7bcdb27b9d95cc0e596e9a24741b7cfaeb7..9cbb97057a9348bf930ab9eb3dcdc8c70c9ce04a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/GeoVPixelFactory.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/GeoVPixelFactory.h
@@ -11,7 +11,7 @@
 
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "GeoModelKernel/GeoLogVol.h"
-#include "PixelGeoModel/PixelGeometryManager.h"
+#include "PixelGeometryManager.h"
 #include "InDetGeoModelUtils/InDetMaterialManager.h"
 
 // fwd declaration
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.cxx
index b33aed42418e19cf5f81cf6ff5e8edeb491c4012..a4a53b36862262f81358fdd2888031f0d0602524 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.cxx
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/OraclePixGeoManager.h"
-#include "PixelGeoModel/PixelLegacyManager.h"
-#include "PixelGeoModel/PixelMaterialMap.h"
-#include "PixelGeoModel/PixelStaveTypes.h"
+#include "OraclePixGeoManager.h"
+#include "PixelLegacyManager.h"
+#include "PixelMaterialMap.h"
+#include "PixelStaveTypes.h"
 #include "InDetGeoModelUtils/PairIndexMap.h"
 #include "InDetGeoModelUtils/TopLevelPlacements.h"
 #include "InDetGeoModelUtils/InDetMaterialManager.h"
@@ -30,9 +30,7 @@
 // Distorted material manager
 //
 #include "InDetGeoModelUtils/DistortedMaterialManager.h"
-
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 using InDetDD::PixelDetectorManager; 
 
@@ -66,7 +64,7 @@ OraclePixGeoManager::OraclePixGeoManager(const PixelGeoModelAthenaComps * athena
     m_diskRingIndexMap(0),
     m_zPositionMap(0),
     m_dbVersion(0),
-    m_defaultLengthUnit(CLHEP::mm)
+    m_defaultLengthUnit(GeoModelKernelUnits::mm)
 {
   m_commonItems = 0;
   m_pDDmgr = 0;
@@ -173,8 +171,8 @@ OraclePixGeoManager::init()
 
   m_distortedMatManager = new InDetDD::DistortedMaterialManager;
  
-  // Set default lenth unit to CLHEP::mm for newer version and CLHEP::cm for older versions
-  m_defaultLengthUnit =  (dbVersion() < 3) ? CLHEP::cm : CLHEP::mm;
+  // Set default lenth unit to GeoModelKernelUnits::mm for newer version and GeoModelKernelUnits::cm for older versions
+  m_defaultLengthUnit =  (dbVersion() < 3) ? GeoModelKernelUnits::cm : GeoModelKernelUnits::mm;
 
   // Get the top level placements
   m_placements = new TopLevelPlacements(m_PixelTopLevel);
@@ -265,7 +263,7 @@ OraclePixGeoManager::getIdHelper()
 }
 
 
-const HepGeom::Transform3D & 
+const GeoTrf::Transform3D & 
 OraclePixGeoManager::partTransform(const std::string & partName) const 
 {
   return m_placements->transform(partName);
@@ -517,7 +515,7 @@ double OraclePixGeoManager::PixelBoardLength(bool isModule3D)
 double OraclePixGeoManager::PixelBoardThickness(bool isModule3D) 
 {
   if (m_dc1Geometry && isBarrel() && (m_currentLD == 0)) {
-    return 200*CLHEP::micrometer;
+    return 200*GeoModelKernelUnits::micrometer;
   }
 
   if(ibl()&&isModule3D)
@@ -827,7 +825,7 @@ double OraclePixGeoManager::PixelServiceRMin2(const std::string & type, int inde
   if (!getPixelServiceRecordTestField("RIN2",type,index)) {
     return 0;
   } else {
-    return getPixelServiceRecordDouble("RIN2",type,index) * CLHEP::mm;
+    return getPixelServiceRecordDouble("RIN2",type,index) * GeoModelKernelUnits::mm;
   }
 }
 
@@ -835,7 +833,7 @@ double OraclePixGeoManager::PixelServiceRMax2(const std::string & type, int inde
   if (!getPixelServiceRecordTestField("ROUT2",type,index)) {
     return 0;
   } else {
-    return getPixelServiceRecordDouble("ROUT2",type,index) * CLHEP::mm;
+    return getPixelServiceRecordDouble("ROUT2",type,index) * GeoModelKernelUnits::mm;
   }
 }
 
@@ -862,7 +860,7 @@ double OraclePixGeoManager::PixelServicePhiLoc(const std::string & type, int ind
   if (!getPixelServiceRecordTestField("PHI",type,index)) {
     return 0;
   } else {
-    return getPixelServiceRecordDouble("PHI",type,index) * CLHEP::degree; 
+    return getPixelServiceRecordDouble("PHI",type,index) * GeoModelKernelUnits::degree; 
   }
 }
 
@@ -870,7 +868,7 @@ double OraclePixGeoManager::PixelServiceWidth(const std::string & type, int inde
   if (!getPixelServiceRecordTestField("WIDTH",type,index)) {
     return 0;
   } else {
-    // Can be in degree or CLHEP::mm. Leave it to GeoPixelServices to interpret.    
+    // Can be in degree or GeoModelKernelUnits::mm. Leave it to GeoPixelServices to interpret.    
     return getPixelServiceRecordDouble("WIDTH",type,index); 
   }
 }
@@ -1097,42 +1095,42 @@ double
 OraclePixGeoManager::PixelCableZStart(int index)
 {
   if (dbVersion() < 3) return m_legacyManager->PixelCableZStart(index);
-  return db()->getDouble(m_PixelBarrelCable,"ZSTART",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelBarrelCable,"ZSTART",index) * GeoModelKernelUnits::mm;
 }
 
 double 
 OraclePixGeoManager::PixelCableZEnd(int index)
 {
   if (dbVersion() < 3) return m_legacyManager->PixelCableZEnd(index);
-  return db()->getDouble(m_PixelBarrelCable,"ZEND",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelBarrelCable,"ZEND",index) * GeoModelKernelUnits::mm;
 }
 
 double 
 OraclePixGeoManager::PixelCableWidth(int index)
 {
   if (dbVersion() < 3) return m_legacyManager->PixelCableWidth(index);
-  return db()->getDouble(m_PixelBarrelCable,"WIDTH",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelBarrelCable,"WIDTH",index) * GeoModelKernelUnits::mm;
 }
 
 double 
 OraclePixGeoManager::PixelCableThickness(int index)
 {
   if (dbVersion() < 3) return m_legacyManager->PixelCableThickness(index);
-  return db()->getDouble(m_PixelBarrelCable,"THICK",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelBarrelCable,"THICK",index) * GeoModelKernelUnits::mm;
 }
 
 double 
 OraclePixGeoManager::PixelCableStackOffset(int index)
 {
   if (dbVersion() < 3) return m_legacyManager->PixelCableStackOffset(index);
-  return db()->getDouble(m_PixelBarrelCable,"STACKPOS",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelBarrelCable,"STACKPOS",index) * GeoModelKernelUnits::mm;
 }
 
 double 
 OraclePixGeoManager::PixelCableWeight(int index)
 {
   if (dbVersion() < 3) return 0;
-  return db()->getDouble(m_PixelBarrelCable,"WEIGHT",index) * CLHEP::g;
+  return db()->getDouble(m_PixelBarrelCable,"WEIGHT",index) * GeoModelKernelUnits::g;
 }
 
 std::string
@@ -1312,19 +1310,19 @@ unsigned int OraclePixGeoManager::PixelEnvelopeNumPlanes()
 
 double OraclePixGeoManager::PixelEnvelopeZ(int i) 
 {
-  double zmin =  db()->getDouble(m_PixelEnvelope,"Z",i) * CLHEP::mm;
+  double zmin =  db()->getDouble(m_PixelEnvelope,"Z",i) * GeoModelKernelUnits::mm;
   if (zmin < 0) msg(MSG::ERROR) << "PixelEnvelope table should only contain +ve z values" << endmsg;
   return std::abs(zmin);
 }
 
 double OraclePixGeoManager::PixelEnvelopeRMin(int i) 
 {
-  return db()->getDouble(m_PixelEnvelope,"RMIN",i) * CLHEP::mm;
+  return db()->getDouble(m_PixelEnvelope,"RMIN",i) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelEnvelopeRMax(int i) 
 {
-  return db()->getDouble(m_PixelEnvelope,"RMAX",i) * CLHEP::mm;
+  return db()->getDouble(m_PixelEnvelope,"RMAX",i) * GeoModelKernelUnits::mm;
 }
 
 
@@ -1369,32 +1367,32 @@ int OraclePixGeoManager::PixelFrameSections()
 
 double OraclePixGeoManager::PixelFrameRMinSide(int sectionIndex)
 {
-  return db()->getDouble(m_PixelFrame, "RMINSIDE", sectionIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrame, "RMINSIDE", sectionIndex) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameRMaxSide(int sectionIndex)
 {
-  return db()->getDouble(m_PixelFrame, "RMAXSIDE", sectionIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrame, "RMAXSIDE", sectionIndex) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameSideWidth(int sectionIndex)
 {
-  return db()->getDouble(m_PixelFrame, "SIDEWIDTH", sectionIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrame, "SIDEWIDTH", sectionIndex) * GeoModelKernelUnits::mm;
 } 
  
 double OraclePixGeoManager::PixelFrameZMin(int sectionIndex)
 { 
-  return db()->getDouble(m_PixelFrame, "ZMIN", sectionIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrame, "ZMIN", sectionIndex) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameZMax(int sectionIndex)
 { 
-  return db()->getDouble(m_PixelFrame, "ZMAX", sectionIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrame, "ZMAX", sectionIndex) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFramePhiStart(int sectionIndex)
 {
-  return db()->getDouble(m_PixelFrame, "PHISTART", sectionIndex) * CLHEP::deg;
+  return db()->getDouble(m_PixelFrame, "PHISTART", sectionIndex) * GeoModelKernelUnits::deg;
 }
  
 int OraclePixGeoManager::PixelFrameNumSides(int sectionIndex)
@@ -1479,28 +1477,28 @@ double OraclePixGeoManager::PixelFrameElementZMin1(int sectionIndex, int element
 {
   int index = getFrameElementIndex(sectionIndex, element);
   if (index < 0) return 0; // Error message already printed in getFrameElementIndex.
-  return db()->getDouble(m_PixelFrameSect, "ZMIN1", index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrameSect, "ZMIN1", index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameElementZMin2(int sectionIndex, int element)
 {
   int index = getFrameElementIndex(sectionIndex, element);
   if (index < 0) return 0; // Error message already printed in getFrameElementIndex.
-  return db()->getDouble(m_PixelFrameSect, "ZMIN2", index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrameSect, "ZMIN2", index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameElementZMax1(int sectionIndex, int element)
 {
   int index = getFrameElementIndex(sectionIndex, element);
   if (index < 0) return 0; // Error message already printed in getFrameElementIndex.
-  return db()->getDouble(m_PixelFrameSect, "ZMAX1", index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrameSect, "ZMAX1", index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFrameElementZMax2(int sectionIndex, int element)
 {
   int index = getFrameElementIndex(sectionIndex, element);
   if (index < 0) return 0; // Error message already printed in getFrameElementIndex.
-  return db()->getDouble(m_PixelFrameSect, "ZMAX2", index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFrameSect, "ZMAX2", index) * GeoModelKernelUnits::mm;
 }
 
 int OraclePixGeoManager::PixelStaveIndex(int layer)
@@ -1584,14 +1582,14 @@ double OraclePixGeoManager::PixelLadderLength()
 {
   if (useLegacy()) return m_legacyManager->PixelLadderLength(); 
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"ENVLENGTH",index)*CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"ENVLENGTH",index)*GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderWidthClearance() 
 {
-  if (useLegacy()) return 0.9*CLHEP::mm; 
+  if (useLegacy()) return 0.9*GeoModelKernelUnits::mm; 
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"CLEARANCEY",index)*CLHEP::mm;  
+  return db()->getDouble(m_PixelStave,"CLEARANCEY",index)*GeoModelKernelUnits::mm;  
 }
 
 // Only used if ladder thickness is automatically calculated it, ie ENVTHICK = 0
@@ -1600,63 +1598,63 @@ double OraclePixGeoManager::PixelLadderThicknessClearance()
 {
   int index = PixelStaveIndex(m_currentLD);
   if (db()->testField(m_PixelStave,"CLEARANCEX",index)) {
-    return db()->getDouble(m_PixelStave,"CLEARANCEX",index)*CLHEP::mm;  
+    return db()->getDouble(m_PixelStave,"CLEARANCEX",index)*GeoModelKernelUnits::mm;  
   }
-  return 0.1*CLHEP::mm;
+  return 0.1*GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderThickness() 
 {
   if (useLegacy()) return m_legacyManager->PixelLadderThickness();  // 2*1.48972 mm
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"ENVTHICK",index)*CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"ENVTHICK",index)*GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderTilt() 
 {
-  return db()->getDouble(m_PixelLayer,"STAVETILT",m_currentLD)*CLHEP::deg;
+  return db()->getDouble(m_PixelLayer,"STAVETILT",m_currentLD)*GeoModelKernelUnits::deg;
 }
 
 double OraclePixGeoManager::PixelLadderServicesX() 
 {
   if (useLegacy()) return m_legacyManager->PixelLadderServicesX(); // 1.48972 mm
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"SERVICEOFFSETX",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"SERVICEOFFSETX",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderServicesY() 
 {
   if (useLegacy()) return m_legacyManager->PixelLadderServicesY();  // 3mm
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"SERVICEOFFSETY",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"SERVICEOFFSETY",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderCableOffsetX() 
 {
   if (useLegacy()) return m_legacyManager->PixelLadderCableOffsetX(); // 0
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"CABLEOFFSETX",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"CABLEOFFSETX",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelLadderCableOffsetY() 
 {
   if (useLegacy()) return m_legacyManager->PixelLadderCableOffsetY();  // 4mm
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"CABLEOFFSETY",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"CABLEOFFSETY",index) * GeoModelKernelUnits::mm;
 }
 
 // SLHC/IBL only
 double OraclePixGeoManager::PixelLadderSupportThickness() 
 {
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"SUPPORTTHICK",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"SUPPORTTHICK",index) * GeoModelKernelUnits::mm;
 }
 
 // SLHC/IBL only
 double OraclePixGeoManager::PixelLadderSupportWidth() 
 {
   int index = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"SUPPORTWIDTH",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"SUPPORTWIDTH",index) * GeoModelKernelUnits::mm;
 }
 
 
@@ -1690,16 +1688,16 @@ double OraclePixGeoManager::PixelLadderSupportLength()
 {
   int index = PixelStaveIndex(m_currentLD);
   if (db()->testField(m_PixelStave,"SUPPORTHLENGTH",index)) {
-    double halflength = db()->getDouble(m_PixelStave,"SUPPORTHLENGTH",index) * CLHEP::mm;
+    double halflength = db()->getDouble(m_PixelStave,"SUPPORTHLENGTH",index) * GeoModelKernelUnits::mm;
     if (halflength > 0)  return 2 * halflength;
   } 
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
   return PixelLadderLength() - safety;
 }
 
 // IBL detailed stave support only
 
-HepGeom::Point3D<double> OraclePixGeoManager::IBLStaveRotationAxis() 
+GeoTrf::Vector3D OraclePixGeoManager::IBLStaveRotationAxis() 
 {
   // set layer to 0  (in order to read read IBL data)
   int currentLD_tmp = m_currentLD;
@@ -1713,7 +1711,7 @@ HepGeom::Point3D<double> OraclePixGeoManager::IBLStaveRotationAxis()
     IBLStaveFacePlateThickness() + IBLStaveFacePlateGreaseThickness() +       // plate thickness (grease + plate)
     IBLStaveTubeMiddlePos();                                                  // from plate to colling pipe center
   double yCenterCoolingPipe = IBLStaveMechanicalStaveOffset();
-  HepGeom::Point3D<double> centerCoolingPipe(xCenterCoolingPipe, yCenterCoolingPipe, 0.);
+  GeoTrf::Vector3D centerCoolingPipe(xCenterCoolingPipe, yCenterCoolingPipe, 0.);
 
   m_currentLD = currentLD_tmp;  
   return centerCoolingPipe;
@@ -1727,17 +1725,17 @@ double OraclePixGeoManager::IBLStaveRadius()
   m_currentLD = 0;
 
   //  Point that defines the center of the cooling pipe
-  HepGeom::Point3D<double> centerCoolingPipe_inv = -IBLStaveRotationAxis();
-  HepGeom::Point3D<double> origin(0.,0.,0.);
+  GeoTrf::Vector3D centerCoolingPipe_inv = -IBLStaveRotationAxis();
+  GeoTrf::Vector3D origin(0.,0.,0.);
   double layerRadius = PixelLayerRadius();
   double ladderTilt  = PixelLadderTilt();
   
   // Transforms
-  HepGeom::Transform3D staveTrf = HepGeom::RotateZ3D(ladderTilt)*HepGeom::Translate3D(centerCoolingPipe_inv);
-  HepGeom::Point3D<double> sensorPos = staveTrf*origin;
+  GeoTrf::Transform3D staveTrf = GeoTrf::RotateZ3D(ladderTilt)*GeoTrf::Translate3D(centerCoolingPipe_inv.x(),centerCoolingPipe_inv.y(),centerCoolingPipe_inv.z());
+  GeoTrf::Vector3D sensorPos = staveTrf*origin;
   
   double yPos = sensorPos.y();
-  HepGeom::Point3D<double> sensorPos_layer(sqrt(layerRadius*layerRadius-yPos*yPos),yPos,0.);
+  GeoTrf::Vector3D sensorPos_layer(sqrt(layerRadius*layerRadius-yPos*yPos),yPos,0.);
   
   double staveRadius = sensorPos_layer.x()-sensorPos.x();
 
@@ -1751,7 +1749,7 @@ double OraclePixGeoManager::IBLStaveFacePlateThickness()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"FACEPLATETHICK",index)) {
-    double thickness = db()->getDouble(m_PixelIBLStave,"FACEPLATETHICK",index) * CLHEP::mm;
+    double thickness = db()->getDouble(m_PixelIBLStave,"FACEPLATETHICK",index) * GeoModelKernelUnits::mm;
     if (thickness > 0)  return thickness ;
   } 
   return 0.0;
@@ -1762,7 +1760,7 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveWidth()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"STAVEWIDTH",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"STAVEWIDTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"STAVEWIDTH",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1773,7 +1771,7 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveEndBlockLength()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"ENDBLOCKLENGTH",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKLENGTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKLENGTH",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1784,7 +1782,7 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveEndBlockFixPoint()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"ENDBLOCKFIXINGPOS",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKFIXINGPOS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKFIXINGPOS",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1796,7 +1794,7 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveEndBlockOmegaOverlap()
   try{
     int index=0;
     if (db()->testField(m_PixelIBLStave,"ENDBLOCKOMEGAOVERLAP",index)) {
-      double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKOMEGAOVERLAP",index) * CLHEP::mm;
+      double value = db()->getDouble(m_PixelIBLStave,"ENDBLOCKOMEGAOVERLAP",index) * GeoModelKernelUnits::mm;
       return value ;
     } 
     return 0.0;
@@ -1812,7 +1810,7 @@ double OraclePixGeoManager::IBLStaveLength()
     {
       int index=0;
       if (db()->testField(m_PixelIBLStave,"STAVELENGTH",index)) {
-	double value = db()->getDouble(m_PixelIBLStave,"STAVELENGTH",index) * CLHEP::mm;
+	double value = db()->getDouble(m_PixelIBLStave,"STAVELENGTH",index) * GeoModelKernelUnits::mm;
 	return value ;
       } 
     }
@@ -1822,7 +1820,7 @@ double OraclePixGeoManager::IBLStaveLength()
       //           IBL stave length not eqal to other stave length 
     }  
   
-  return 748.0 * CLHEP::mm;  
+  return 748.0 * GeoModelKernelUnits::mm;  
 }
 
 double OraclePixGeoManager:: IBLStaveMechanicalStaveOffset(bool isModule3D)
@@ -1830,11 +1828,11 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveOffset(bool isModule3D)
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (!isModule3D&&db()->testField(m_PixelIBLStave,"MODULELATERALOFFSET",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"MODULELATERALOFFSET",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"MODULELATERALOFFSET",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   if (isModule3D&&db()->testField(m_PixelIBLStave,"MODULELATERALOFFSET3D",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"MODULELATERALOFFSET3D",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"MODULELATERALOFFSET3D",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1845,7 +1843,7 @@ double OraclePixGeoManager:: IBLStaveMechanicalStaveModuleOffset()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"STAVETOMODULEGAP",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"STAVETOMODULEGAP",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"STAVETOMODULEGAP",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1856,7 +1854,7 @@ double OraclePixGeoManager:: IBLStaveTubeOuterDiameter()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"TUBEOUTERDIAM",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"TUBEOUTERDIAM",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"TUBEOUTERDIAM",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1867,7 +1865,7 @@ double OraclePixGeoManager:: IBLStaveTubeInnerDiameter()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"TUBEINNERDIAM",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"TUBEINNERDIAM",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"TUBEINNERDIAM",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1878,7 +1876,7 @@ double OraclePixGeoManager:: IBLStaveTubeMiddlePos()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"TUBEMIDDLEPOS",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"TUBEMIDDLEPOS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"TUBEMIDDLEPOS",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1889,7 +1887,7 @@ double OraclePixGeoManager:: IBLStaveFlexLayerThickness()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"FLEXLAYERTHICK",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"FLEXLAYERTHICK",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"FLEXLAYERTHICK",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1900,7 +1898,7 @@ double OraclePixGeoManager:: IBLStaveFlexBaseThickness()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"FLEXBASETHICK",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"FLEXBASETHICK",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"FLEXBASETHICK",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1911,7 +1909,7 @@ double OraclePixGeoManager:: IBLStaveFlexWidth()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"FLEXWIDTH",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"FLEXWIDTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"FLEXWIDTH",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -1922,7 +1920,7 @@ double OraclePixGeoManager:: IBLStaveFlexOffset()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"FLEXOFFSET",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"FLEXOFFSET",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"FLEXOFFSET",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1934,7 +1932,7 @@ double OraclePixGeoManager::IBLStaveOmegaThickness()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGATHICK",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGATHICK",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGATHICK",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1945,7 +1943,7 @@ double OraclePixGeoManager::IBLStaveOmegaEndCenterX()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAENDCENTERX",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDCENTERX",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDCENTERX",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1955,7 +1953,7 @@ double OraclePixGeoManager::IBLStaveOmegaEndCenterY()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAENDCENTERY",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDCENTERY",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDCENTERY",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1965,7 +1963,7 @@ double OraclePixGeoManager::IBLStaveOmegaEndRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAENDRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDRADIUS",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1975,7 +1973,7 @@ double OraclePixGeoManager::IBLStaveOmegaEndAngle()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAENDANGLE",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDANGLE",index) * CLHEP::deg;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAENDANGLE",index) * GeoModelKernelUnits::deg;
     return value ;
   } 
   return 0.0;
@@ -1986,7 +1984,7 @@ double OraclePixGeoManager::IBLStaveOmegaMidCenterX()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAMIDCENTERX",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAMIDCENTERX",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAMIDCENTERX",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -1997,7 +1995,7 @@ double OraclePixGeoManager::IBLStaveOmegaMidRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAMIDRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAMIDRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAMIDRADIUS",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2007,7 +2005,7 @@ double OraclePixGeoManager::IBLStaveOmegaMidAngle()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"OMEGAOPENINGANGLE",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"OMEGAOPENINGANGLE",index) * CLHEP::deg;
+    double value = db()->getDouble(m_PixelIBLStave,"OMEGAOPENINGANGLE",index) * GeoModelKernelUnits::deg;
     return value ;
   } 
   return 0.0;
@@ -2035,7 +2033,7 @@ double OraclePixGeoManager::IBLStaveModuleGap()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"MODULEGAP",index)) {
-    double value = db()->getDouble(m_PixelIBLStave,"MODULEGAP",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLStave,"MODULEGAP",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2046,7 +2044,7 @@ int OraclePixGeoManager::IBLStaveModuleType()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLStave,"MODULETYPE",index)) {
-    int value = db()->getInt(m_PixelIBLStave,"MODULETYPE",index) * CLHEP::mm;
+    int value = db()->getInt(m_PixelIBLStave,"MODULETYPE",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0;
@@ -2058,7 +2056,7 @@ double OraclePixGeoManager::IBLStaveFacePlateGreaseThickness()
   try{
     int index=0;
     if (db()->testField(m_PixelIBLGlueGrease,"FACEPLATEGREASETHICK",index)) {
-      double value = db()->getDouble(m_PixelIBLGlueGrease,"FACEPLATEGREASETHICK",index) * CLHEP::mm;
+      double value = db()->getDouble(m_PixelIBLGlueGrease,"FACEPLATEGREASETHICK",index) * GeoModelKernelUnits::mm;
       return value ;
     }
     return 0.;
@@ -2073,7 +2071,7 @@ double OraclePixGeoManager::IBLStaveFacePlateGlueThickness()
   try{
     int index=0;
     if (db()->testField(m_PixelIBLGlueGrease,"FACEPLATEGLUETHICK",index)) {
-      double value = db()->getDouble(m_PixelIBLGlueGrease,"FACEPLATEGLUETHICK",index) * CLHEP::mm;
+      double value = db()->getDouble(m_PixelIBLGlueGrease,"FACEPLATEGLUETHICK",index) * GeoModelKernelUnits::mm;
       return value ;
     }
     return 0.;
@@ -2088,7 +2086,7 @@ double OraclePixGeoManager::IBLStaveTubeGlueThickness()
   try{
     int index=0;
     if (db()->testField(m_PixelIBLGlueGrease,"TUBEGLUETHICK",index)) {
-      double value = db()->getDouble(m_PixelIBLGlueGrease,"TUBEGLUETHICK",index) * CLHEP::mm;
+      double value = db()->getDouble(m_PixelIBLGlueGrease,"TUBEGLUETHICK",index) * GeoModelKernelUnits::mm;
       return value ;
     }
     return 0.;
@@ -2103,7 +2101,7 @@ double OraclePixGeoManager::IBLStaveOmegaGlueThickness()
   try{
     int index=0;
     if (db()->testField(m_PixelIBLGlueGrease,"OMEGAGLUETHICK",index)) {
-      double value = db()->getDouble(m_PixelIBLGlueGrease,"OMEGAGLUETHICK",index) * CLHEP::mm;
+      double value = db()->getDouble(m_PixelIBLGlueGrease,"OMEGAGLUETHICK",index) * GeoModelKernelUnits::mm;
       return value ;
     }
     return 0.;
@@ -2118,7 +2116,7 @@ double OraclePixGeoManager:: IBLSupportRingWidth()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVERINGWIDTH",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGWIDTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGWIDTH",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2129,7 +2127,7 @@ double OraclePixGeoManager:: IBLSupportRingInnerRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVERINGINNERRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGINNERRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGINNERRADIUS",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2140,7 +2138,7 @@ double OraclePixGeoManager:: IBLSupportRingOuterRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVERINGOUTERRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGOUTERRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGOUTERRADIUS",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2152,7 +2150,7 @@ double OraclePixGeoManager:: IBLSupportMechanicalStaveRingFixPoint()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVERINGFIXINGPOS",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGFIXINGPOS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVERINGFIXINGPOS",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2163,7 +2161,7 @@ double OraclePixGeoManager:: IBLSupportMidRingWidth()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVEMIDRINGWIDTH",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGWIDTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGWIDTH",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2174,7 +2172,7 @@ double OraclePixGeoManager:: IBLSupportMidRingInnerRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVEMIDRINGINNERRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGINNERRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGINNERRADIUS",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value;
   } 
   return 0.0;
@@ -2185,7 +2183,7 @@ double OraclePixGeoManager:: IBLSupportMidRingOuterRadius()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLSupport,"STAVEMIDRINGOUTERRADIUS",index)) {
-    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGOUTERRADIUS",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLSupport,"STAVEMIDRINGOUTERRADIUS",index) * GeoModelKernelUnits::mm;
     if (value > 0)  return value ;
   } 
   return 0.0;
@@ -2196,7 +2194,7 @@ double OraclePixGeoManager::IBLFlexMiddleGap()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXMIDGAP",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXMIDGAP",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXMIDGAP",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2216,7 +2214,7 @@ double OraclePixGeoManager::IBLFlexDoglegLength()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXDOGLEGLENGTH",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGLENGTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGLENGTH",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2228,7 +2226,7 @@ double OraclePixGeoManager::IBLStaveFlexWingWidth()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXWINGWIDTH",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXWINGWIDTH",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXWINGWIDTH",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2239,7 +2237,7 @@ double OraclePixGeoManager::IBLStaveFlexWingThick()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXWINGTHICK",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXWINGTHICK",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXWINGTHICK",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2250,7 +2248,7 @@ double OraclePixGeoManager::IBLFlexDoglegRatio()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXDOGLEGRATIO",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGRATIO",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGRATIO",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2264,7 +2262,7 @@ double OraclePixGeoManager::IBLFlexDoglegHeight(int iHeight)
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,lname.str(),index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2275,7 +2273,7 @@ double OraclePixGeoManager::IBLFlexDoglegDY()
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,"FLEXDOGLEGDY",index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGDY",index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,"FLEXDOGLEGDY",index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2289,7 +2287,7 @@ double OraclePixGeoManager::IBLFlexPP0Z(int iPos)
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,lname.str(),index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2304,7 +2302,7 @@ double OraclePixGeoManager::IBLFlexPP0Rmin(int iPos)
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,lname.str(),index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2318,7 +2316,7 @@ double OraclePixGeoManager::IBLFlexPP0Rmax(int iPos)
   //  int index = PixelStaveIndex(m_currentLD);
   int index=0;
   if (db()->testField(m_PixelIBLFlex,lname.str(),index)) {
-    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * CLHEP::mm;
+    double value = db()->getDouble(m_PixelIBLFlex,lname.str(),index) * GeoModelKernelUnits::mm;
     return value ;
   } 
   return 0.0;
@@ -2369,10 +2367,10 @@ double OraclePixGeoManager:: IBLServiceGetMinRadialPosition(const std::string& s
       double zmin, zmax, r;
       int symm;
       if(srvType=="simple"){
-	zmin=db()->getDouble(m_PixelSimpleService,"ZMIN",ii)*CLHEP::mm;
-	zmax=db()->getDouble(m_PixelSimpleService,"ZMAX",ii)*CLHEP::mm;
+	zmin=db()->getDouble(m_PixelSimpleService,"ZMIN",ii)*GeoModelKernelUnits::mm;
+	zmax=db()->getDouble(m_PixelSimpleService,"ZMAX",ii)*GeoModelKernelUnits::mm;
 	symm=db()->getInt(m_PixelSimpleService,"ZSYMM",ii);
-	r=db()->getDouble(m_PixelSimpleService,"RMAX",ii)*CLHEP::mm;
+	r=db()->getDouble(m_PixelSimpleService,"RMAX",ii)*GeoModelKernelUnits::mm;
       }
       else {
 	zmin=PixelServiceZMin(srvType, ii);
@@ -2419,10 +2417,10 @@ double OraclePixGeoManager:: IBLServiceGetMaxRadialPosition(const std::string& s
       double zmin, zmax, r;
       int symm;
       if(srvType=="simple"){
-	zmin=db()->getDouble(m_PixelSimpleService,"ZMIN",ii)*CLHEP::mm;
-	zmax=db()->getDouble(m_PixelSimpleService,"ZMAX",ii)*CLHEP::mm;
+	zmin=db()->getDouble(m_PixelSimpleService,"ZMIN",ii)*GeoModelKernelUnits::mm;
+	zmax=db()->getDouble(m_PixelSimpleService,"ZMAX",ii)*GeoModelKernelUnits::mm;
 	symm=db()->getInt(m_PixelSimpleService,"ZSYMM",ii);
-	r=db()->getDouble(m_PixelSimpleService,"RMAX",ii)*CLHEP::mm;
+	r=db()->getDouble(m_PixelSimpleService,"RMAX",ii)*GeoModelKernelUnits::mm;
       }
       else {
 	zmin=PixelServiceZMin(srvType, ii);
@@ -2462,10 +2460,10 @@ double OraclePixGeoManager::PhiOfModuleZero()
 {
   // For backward compatibilty first module is at 1/2 a module division
   if (!db()->testField(m_PixelLayer,"PHIOFMODULEZERO",m_currentLD)){
-    if(NPixelSectors()>0) return 180.0*CLHEP::degree/NPixelSectors();
+    if(NPixelSectors()>0) return 180.0*GeoModelKernelUnits::degree/NPixelSectors();
     return 0.;
   } else { 
-    return db()->getDouble(m_PixelLayer,"PHIOFMODULEZERO",m_currentLD) * CLHEP::degree;
+    return db()->getDouble(m_PixelLayer,"PHIOFMODULEZERO",m_currentLD) * GeoModelKernelUnits::degree;
   }
 }
 
@@ -2483,7 +2481,7 @@ int OraclePixGeoManager::PixelNModule()
 double OraclePixGeoManager::PixelModuleAngle() 
 {
   int staveIndex = PixelStaveIndex(m_currentLD);
-  return db()->getDouble(m_PixelStave,"MODULETILT",staveIndex)*CLHEP::deg;
+  return db()->getDouble(m_PixelStave,"MODULETILT",staveIndex)*GeoModelKernelUnits::deg;
 }
 
 double OraclePixGeoManager::PixelModuleDrDistance() 
@@ -2526,7 +2524,7 @@ double OraclePixGeoManager::PixelModuleZPositionTabulated(int etaModule, int typ
     msg(MSG::ERROR) << "Z position not found for etaModule,type =  " << etaModule << ", " << type << endmsg;
     return 0;
   }
-  return db()->getDouble(m_PixelStaveZ,"ZPOS",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelStaveZ,"ZPOS",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelModuleShiftFlag(int etaModule) 
@@ -2539,7 +2537,7 @@ double OraclePixGeoManager::PixelModuleStaggerDistance()
 {
   int staveIndex = PixelStaveIndex(m_currentLD);
   if (!(slhc() || ibl()) || !db()->testField(m_PixelStave,"STAGGERDIST",staveIndex)) return 0; 
-  return db()->getDouble(m_PixelStave,"STAGGERDIST",staveIndex) * CLHEP::mm;
+  return db()->getDouble(m_PixelStave,"STAGGERDIST",staveIndex) * GeoModelKernelUnits::mm;
 }
 
 int OraclePixGeoManager::PixelModuleStaggerSign(int etaModule)
@@ -2692,49 +2690,49 @@ int OraclePixGeoManager::PixelTMTNumParts()
 double OraclePixGeoManager::PixelTMTWidthX1(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTWidthX1(iPart);
-  return db()->getDouble(m_PixelTMT,"WIDTHX1",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"WIDTHX1",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTWidthX2(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTWidthX2(iPart);
-  return db()->getDouble(m_PixelTMT,"WIDTHX2",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"WIDTHX2",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTWidthY(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTWidthY(iPart);
-  return db()->getDouble(m_PixelTMT,"WIDTHY",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"WIDTHY",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTBaseX1(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTBaseX1(iPart);
-  return db()->getDouble(m_PixelTMT,"BASEX1",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"BASEX1",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTBaseX2(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTBaseX2(iPart);
-  return db()->getDouble(m_PixelTMT,"BASEX2",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"BASEX2",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTPosY(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTPosY(iPart);
-  return db()->getDouble(m_PixelTMT,"Y",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"Y",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTPosZ1(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTPosZ1(iPart);
-  return db()->getDouble(m_PixelTMT,"Z1",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"Z1",iPart) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelTMTPosZ2(int iPart)
 {
   if (useLegacy()) return m_legacyManager->PixelTMTPosZ2(iPart);
-  return db()->getDouble(m_PixelTMT,"Z2",iPart) * CLHEP::mm;
+  return db()->getDouble(m_PixelTMT,"Z2",iPart) * GeoModelKernelUnits::mm;
 }
 
 bool OraclePixGeoManager::PixelTMTPerModule(int iPart)
@@ -2749,61 +2747,61 @@ bool OraclePixGeoManager::PixelTMTPerModule(int iPart)
 double OraclePixGeoManager::PixelOmegaUpperBendX()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaUpperBendX();
-  return db()->getDouble(m_PixelOmega,"UPPERBENDX") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"UPPERBENDX") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaUpperBendY()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaUpperBendY();
-  return db()->getDouble(m_PixelOmega,"UPPERBENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"UPPERBENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaUpperBendRadius()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaUpperBendRadius();
-  return db()->getDouble(m_PixelOmega,"UPPERBENDR") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"UPPERBENDR") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaLowerBendX()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaLowerBendX();
-  return db()->getDouble(m_PixelOmega,"LOWERBENDX") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"LOWERBENDX") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaLowerBendY()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaLowerBendY();
-  return db()->getDouble(m_PixelOmega,"LOWERBENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"LOWERBENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaLowerBendRadius()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaLowerBendRadius();
-  return db()->getDouble(m_PixelOmega,"LOWERBENDR") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"LOWERBENDR") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaWallThickness()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaWallThickness();
-  return db()->getDouble(m_PixelOmega,"THICK") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"THICK") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaLength()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaLength();
-  return db()->getDouble(m_PixelOmega,"LENGTH") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"LENGTH") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaStartY()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaStartY();
-  return db()->getDouble(m_PixelOmega,"STARTY") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"STARTY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaEndY()
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaEndY();
-  return db()->getDouble(m_PixelOmega,"ENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelOmega,"ENDY") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -2813,49 +2811,49 @@ double OraclePixGeoManager::PixelOmegaEndY()
 double OraclePixGeoManager::PixelAlTubeUpperBendX()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeUpperBendX();
-  return db()->getDouble(m_PixelAlTube,"UPPERBENDX") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"UPPERBENDX") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeUpperBendY()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeUpperBendY();
-  return db()->getDouble(m_PixelAlTube,"UPPERBENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"UPPERBENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeUpperBendRadius()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeUpperBendRadius();
-  return db()->getDouble(m_PixelAlTube,"UPPERBENDR") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"UPPERBENDR") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeLowerBendX()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeLowerBendX();
-  return db()->getDouble(m_PixelAlTube,"LOWERBENDX") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"LOWERBENDX") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeLowerBendY()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeLowerBendY();
-  return db()->getDouble(m_PixelAlTube,"LOWERBENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"LOWERBENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeLowerBendRadius()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeLowerBendRadius();
-  return db()->getDouble(m_PixelAlTube,"LOWERBENDR") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"LOWERBENDR") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeWallThickness()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeWallThickness();
-  return db()->getDouble(m_PixelAlTube,"THICK") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"THICK") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelAlTubeLength()
 {
   if (useLegacy()) return m_legacyManager->PixelAlTubeLength();
-  return db()->getDouble(m_PixelAlTube,"LENGTH") * CLHEP::mm;
+  return db()->getDouble(m_PixelAlTube,"LENGTH") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -2871,37 +2869,37 @@ int OraclePixGeoManager::PixelNumOmegaGlueElements()
 double OraclePixGeoManager::PixelOmegaGlueStartX(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGlueStartX(index);
-  return db()->getDouble(m_PixelOmegaGlue,"STARTX",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"STARTX",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaGlueThickness(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGlueThickness(index);
-  return db()->getDouble(m_PixelOmegaGlue,"THICK",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"THICK",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaGlueStartY(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGlueStartY(index);
-  return db()->getDouble(m_PixelOmegaGlue,"STARTY",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"STARTY",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaGlueEndY(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGlueEndY(index);
-  return db()->getDouble(m_PixelOmegaGlue,"ENDY",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"ENDY",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaGlueLength(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGlueLength(index);
-  return db()->getDouble(m_PixelOmegaGlue,"LENGTH",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"LENGTH",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelOmegaGluePosZ(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelOmegaGluePosZ(index);
-  return db()->getDouble(m_PixelOmegaGlue,"Z",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelOmegaGlue,"Z",index) * GeoModelKernelUnits::mm;
 }
 
 int OraclePixGeoManager::PixelOmegaGlueTypeNum(int index)
@@ -2917,45 +2915,45 @@ int OraclePixGeoManager::PixelOmegaGlueTypeNum(int index)
 double OraclePixGeoManager::PixelFluidZ1(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidZ1(index);
-  return db()->getDouble(m_PixelFluid,"Z1",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"Z1",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFluidZ2(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidZ2(index);
-  return db()->getDouble(m_PixelFluid,"Z2",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"Z2",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFluidThick1(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidThick1(index);
-  return db()->getDouble(m_PixelFluid,"THICK1",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"THICK1",index) * GeoModelKernelUnits::mm;
 }
 
 
 double OraclePixGeoManager::PixelFluidThick2(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidThick2(index);
-  return db()->getDouble(m_PixelFluid,"THICK2",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"THICK2",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFluidWidth(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidWidth(index);
-  return db()->getDouble(m_PixelFluid,"WIDTH",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"WIDTH",index) * GeoModelKernelUnits::mm;
 }
 
 
 double OraclePixGeoManager::PixelFluidX(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidX(index);
-  return db()->getDouble(m_PixelFluid,"X",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"X",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelFluidY(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelFluidY(index);
-  return db()->getDouble(m_PixelFluid,"Y",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelFluid,"Y",index) * GeoModelKernelUnits::mm;
 }
 
 int OraclePixGeoManager::PixelFluidType(int index)
@@ -3001,25 +2999,25 @@ int OraclePixGeoManager::PixelFluidOrient(int layer, int phi)
 double OraclePixGeoManager::PixelPigtailThickness()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailThickness();
-  return db()->getDouble(m_PixelPigtail,"THICK") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"THICK") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailStartY()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailStartY();
-  return db()->getDouble(m_PixelPigtail,"STARTY") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"STARTY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailEndY()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailEndY();
-  return db()->getDouble(m_PixelPigtail,"ENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"ENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailWidthZ()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailWidthZ();
-  return db()->getDouble(m_PixelPigtail,"WIDTHZ") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"WIDTHZ") * GeoModelKernelUnits::mm;
 }
 
 // Different width from the curved section in old geometry
@@ -3032,31 +3030,31 @@ double OraclePixGeoManager::PixelPigtailFlatWidthZ()
 double OraclePixGeoManager::PixelPigtailPosX()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailPosX();
-  return db()->getDouble(m_PixelPigtail,"X") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"X") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailPosZ()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailPosZ();
-  return db()->getDouble(m_PixelPigtail,"Z") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"Z") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailBendX()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailBendX();
-  return db()->getDouble(m_PixelPigtail,"BENDX") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"BENDX") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailBendY()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailBendY();
-  return db()->getDouble(m_PixelPigtail,"BENDY") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"BENDY") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailBendRMin()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailBendRMin();
-  return db()->getDouble(m_PixelPigtail,"BENDRMIN") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"BENDRMIN") * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelPigtailBendRMax()
@@ -3068,19 +3066,19 @@ double OraclePixGeoManager::PixelPigtailBendRMax()
 double OraclePixGeoManager::PixelPigtailBendPhiMin()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailBendPhiMin();
-  return db()->getDouble(m_PixelPigtail,"BENDPHIMIN") * CLHEP::deg;
+  return db()->getDouble(m_PixelPigtail,"BENDPHIMIN") * GeoModelKernelUnits::deg;
 }
 
 double OraclePixGeoManager::PixelPigtailBendPhiMax()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailBendPhiMax();
-  return db()->getDouble(m_PixelPigtail,"BENDPHIMAX") * CLHEP::deg;
+  return db()->getDouble(m_PixelPigtail,"BENDPHIMAX") * GeoModelKernelUnits::deg;
 }
 
 double OraclePixGeoManager::PixelPigtailEnvelopeLength()
 {
   if (useLegacy()) return m_legacyManager->PixelPigtailEnvelopeLength();
-  return db()->getDouble(m_PixelPigtail,"ENVLENGTH") * CLHEP::mm;
+  return db()->getDouble(m_PixelPigtail,"ENVLENGTH") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -3095,37 +3093,37 @@ int OraclePixGeoManager::PixelNumConnectorElements()
 double OraclePixGeoManager::PixelConnectorWidthX(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorWidthX(index);
-  return db()->getDouble(m_PixelConnector,"WIDTHX",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"WIDTHX",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelConnectorWidthY(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorWidthY(index);
-  return db()->getDouble(m_PixelConnector,"WIDTHY",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"WIDTHY",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelConnectorWidthZ(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorWidthZ(index);
-  return db()->getDouble(m_PixelConnector,"WIDTHZ",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"WIDTHZ",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelConnectorPosX(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorPosX(index);
-  return db()->getDouble(m_PixelConnector,"X",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"X",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelConnectorPosY(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorPosY(index);
-  return db()->getDouble(m_PixelConnector,"Y",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"Y",index) * GeoModelKernelUnits::mm;
 }
 
 double OraclePixGeoManager::PixelConnectorPosZ(int index)
 {
   if (useLegacy()) return m_legacyManager->PixelConnectorPosZ(index);
-  return db()->getDouble(m_PixelConnector,"Z",index) * CLHEP::mm;
+  return db()->getDouble(m_PixelConnector,"Z",index) * GeoModelKernelUnits::mm;
 }
 
 //
@@ -3389,7 +3387,7 @@ double OraclePixGeoManager::DesignPitchRP(bool isModule3D)
     return m_legacyManager->DesignPitchRP(isInnermostPixelLayer());
   } else {
     int type = designType((ibl()&&isModule3D));
-    return db()->getDouble(m_PixelReadout,"PITCHPHI",type) * CLHEP::mm;
+    return db()->getDouble(m_PixelReadout,"PITCHPHI",type) * GeoModelKernelUnits::mm;
  } 
 }
 
@@ -3399,7 +3397,7 @@ double OraclePixGeoManager::DesignPitchZ(bool isModule3D)
     return m_legacyManager->DesignPitchZ(isInnermostPixelLayer());
   } else {
     int type = designType((ibl()&&isModule3D));
-    return db()->getDouble(m_PixelReadout,"PITCHETA",type) * CLHEP::mm;
+    return db()->getDouble(m_PixelReadout,"PITCHETA",type) * GeoModelKernelUnits::mm;
   }
 }
 
@@ -3410,7 +3408,7 @@ double OraclePixGeoManager::DesignPitchZLong(bool isModule3D)
     return m_legacyManager->DesignPitchZLong(isInnermostPixelLayer());
   } else {
     int type = designType((ibl()&&isModule3D));
-    double pitch = db()->getDouble(m_PixelReadout,"PITCHETALONG",type) * CLHEP::mm;
+    double pitch = db()->getDouble(m_PixelReadout,"PITCHETALONG",type) * GeoModelKernelUnits::mm;
     if (pitch == 0) pitch = DesignPitchZ(isModule3D);
     return pitch;
   }
@@ -3425,7 +3423,7 @@ double OraclePixGeoManager::DesignPitchZLongEnd(bool isModule3D)
     int type = designType((ibl()&&isModule3D));
     double pitch = 0;
     if (db()->testField(m_PixelReadout,"PITCHETAEND",type)) {
-      pitch = db()->getDouble(m_PixelReadout,"PITCHETAEND",type) * CLHEP::mm;
+      pitch = db()->getDouble(m_PixelReadout,"PITCHETAEND",type) * GeoModelKernelUnits::mm;
     }
     if (pitch == 0) pitch = DesignPitchZLong(isModule3D);
     return pitch;
@@ -3520,18 +3518,18 @@ double  OraclePixGeoManager::PixelDiskRMin(bool includeSupports)
   if (!slhc()) {
     return db()->getDouble(m_PixelDisk,"RIDISK",m_currentLD)*mmcm();
   } else {
-    double result = db()->getDouble(m_PixelDisk,"RMIN",m_currentLD) * CLHEP::mm;
+    double result = db()->getDouble(m_PixelDisk,"RMIN",m_currentLD) * GeoModelKernelUnits::mm;
     if(includeSupports) {
       result = std::min( result, PixelDiskSupportRMin(0) );
     }
     int etaInner = 0; // Inner ring
     int ringType = getDiskRingType(m_currentLD,etaInner); 
     if (ringType >= 0 && db()->testField(m_PixelRing,"RMIN",ringType) && db()->getDouble(m_PixelRing,"RMIN",ringType)) {
-      double ringRmin = db()->getDouble(m_PixelRing,"RMIN",ringType) * CLHEP::mm - 0.01*CLHEP::mm;  // ring envelope has a 0.01mm safety
+      double ringRmin = db()->getDouble(m_PixelRing,"RMIN",ringType) * GeoModelKernelUnits::mm - 0.01*GeoModelKernelUnits::mm;  // ring envelope has a 0.01mm safety
       if (ringRmin < result) {
 	msg(MSG::WARNING) << "Ring rmin is less than disk rmin for disk : " << m_currentLD 
 			  << ". Ring rmin: " << ringRmin << ", Disk rmin: " << result <<endmsg;
-	result = ringRmin - 0.1*CLHEP::mm; // NB. ring envelope has a 0.01mm saftey added, but we add a little more.
+	result = ringRmin - 0.1*GeoModelKernelUnits::mm; // NB. ring envelope has a 0.01mm saftey added, but we add a little more.
       }
     }
     return result;
@@ -3541,7 +3539,7 @@ double  OraclePixGeoManager::PixelDiskRMin(bool includeSupports)
 // SLHC only
 double OraclePixGeoManager::PixelDiskRMax(bool includeSupports)
 {
-  double result = db()->getDouble(m_PixelDisk,"RMAX",m_currentLD) * CLHEP::mm;
+  double result = db()->getDouble(m_PixelDisk,"RMAX",m_currentLD) * GeoModelKernelUnits::mm;
   if(includeSupports) {
     result = std::max( result, PixelDiskSupportRMax(2) );
   }
@@ -3553,11 +3551,11 @@ double OraclePixGeoManager::PixelDiskRMax(bool includeSupports)
     // This is not so nice as PixelRingRMax can potentially call PixelDiskRMax, however it
     // only calls PixelDiskRMax if the above condition is not satisified. So hopefully OK.
     // TODO: Code could do with some improvement to make it less fragile.
-    double ringRmax  = PixelRingRMax(0.01*CLHEP::mm); // ring envelope has a 0.01mm safety
+    double ringRmax  = PixelRingRMax(0.01*GeoModelKernelUnits::mm); // ring envelope has a 0.01mm safety
     if (ringRmax > result) {
       msg(MSG::WARNING) << "Ring rmax is greater than disk rmax for disk : " << m_currentLD 
 			<< ". Ring rmax: " << ringRmax << ", Disk rmax: " << result <<endmsg;
-      result = ringRmax + 0.1*CLHEP::mm; // NB. ring envelope has a 0.01mm saftey added, but we add a little more.
+      result = ringRmax + 0.1*GeoModelKernelUnits::mm; // NB. ring envelope has a 0.01mm saftey added, but we add a little more.
     }
   }
   // restore state
@@ -3593,7 +3591,7 @@ double OraclePixGeoManager::PixelRingRcenter() {
   // If ring rmin is present and non-zero use that.
   int ringType = getDiskRingType(m_currentLD,m_eta); 
   if (ringType >=0 && db()->testField(m_PixelRing,"RMIN",ringType) && db()->getDouble(m_PixelRing,"RMIN",ringType)) {
-    return db()->getDouble(m_PixelRing,"RMIN",ringType)  * CLHEP::mm + PixelModuleLength()/2;
+    return db()->getDouble(m_PixelRing,"RMIN",ringType)  * GeoModelKernelUnits::mm + PixelModuleLength()/2;
   } else { 
     // Otherwise calculate from disk rmin/rmax
     int nrings = PixelDiskNRings();
@@ -3616,7 +3614,7 @@ double OraclePixGeoManager::PixelRingRMin(double safety) {
   // If ring rmin is present and non-zero use that.
   int ringType = getDiskRingType(m_currentLD,m_eta); 
   if (ringType >= 0 && db()->testField(m_PixelRing,"RMIN",ringType) && db()->getDouble(m_PixelRing,"RMIN",ringType)) {
-    return db()->getDouble(m_PixelRing,"RMIN",ringType)  * CLHEP::mm - std::abs(safety); 
+    return db()->getDouble(m_PixelRing,"RMIN",ringType)  * GeoModelKernelUnits::mm - std::abs(safety); 
   } else {
     // Otherwise calculated it from disk rmin
     if(m_eta==0) return PixelDiskRMin() - std::abs(safety);
@@ -3662,7 +3660,7 @@ double OraclePixGeoManager::PixelRingZpos() {
 double OraclePixGeoManager::PixelRingZoffset() 
 {
   int index = getDiskRingIndex(m_currentLD,m_eta);
-  return std::abs(db()->getDouble(m_PixelDiskRing,"ZOFFSET",index))*CLHEP::mm;
+  return std::abs(db()->getDouble(m_PixelDiskRing,"ZOFFSET",index))*GeoModelKernelUnits::mm;
 }
 
 // SLHC only
@@ -3676,13 +3674,13 @@ int OraclePixGeoManager::PixelRingSide()
 double OraclePixGeoManager::PixelRingStagger() 
 {
   int ringType = getDiskRingType(m_currentLD,m_eta);
-  return db()->getDouble(m_PixelRing,"STAGGER",ringType)*CLHEP::mm;
+  return db()->getDouble(m_PixelRing,"STAGGER",ringType)*GeoModelKernelUnits::mm;
 }
 
 
 // SLHC only
 //int OraclePixGeoManager::PixelRingNmodules() {
-//  return db()->getInt("PixelRing","NMODULES",ringIndex)*CLHEP::mm();
+//  return db()->getInt("PixelRing","NMODULES",ringIndex)*GeoModelKernelUnits::mm();
 //}
 
 
@@ -3772,7 +3770,7 @@ double OraclePixGeoManager::PixelModuleThicknessN() {
   // is the max of ThicknessP and thickness from the module center to
   // the outer surface of the hybrid plus some safety.
   //
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
   double thickn = 0.5 * PixelBoardThickness()
     + PixelHybridThickness() + safety;
   double thick = std::max(thickn, PixelModuleThicknessP());
@@ -3787,7 +3785,7 @@ double OraclePixGeoManager::PixelModuleThicknessP() {
   // is thickness from the module center to the outer surface of the
   // chips plus some safety.
 
-  double safety = 0.01*CLHEP::mm;
+  double safety = 0.01*GeoModelKernelUnits::mm;
   double thick = 0.5 * PixelBoardThickness() +
     PixelChipThickness() + PixelChipGap() + safety;
 
@@ -3831,39 +3829,39 @@ double OraclePixGeoManager::PixelModuleLength() {
 
 // return angle of the telescope
 double OraclePixGeoManager::DBMAngle() {
-  return db()->getDouble(m_DBMTelescope,"ANGLE")*CLHEP::deg;
+  return db()->getDouble(m_DBMTelescope,"ANGLE")*GeoModelKernelUnits::deg;
 }
 
 // return dimension of the DBM telescope
 double OraclePixGeoManager::DBMTelescopeX() {
-   return db()->getDouble(m_DBMTelescope,"WIDTH")*CLHEP::mm;
+   return db()->getDouble(m_DBMTelescope,"WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMTelescopeY() {
-   return db()->getDouble(m_DBMTelescope,"HEIGHT")*CLHEP::mm;
+   return db()->getDouble(m_DBMTelescope,"HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMTelescopeZ() {
-   return db()->getDouble(m_DBMTelescope,"LENGTH")*CLHEP::mm;
+   return db()->getDouble(m_DBMTelescope,"LENGTH")*GeoModelKernelUnits::mm;
 }
 
 // return height and length of the module cage having a 3-layers structure
 double OraclePixGeoManager::DBMModuleCageY() {
-  return db()->getDouble(m_DBMTelescope,"CAGE_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMTelescope,"CAGE_HEIGHT")*GeoModelKernelUnits::mm;
 } 
 double OraclePixGeoManager::DBMModuleCageZ() {
-  return db()->getDouble(m_DBMTelescope,"CAGE_LENGTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMTelescope,"CAGE_LENGTH")*GeoModelKernelUnits::mm;
 } 
 
 // return layer spacing
 double OraclePixGeoManager::DBMSpacingZ() {
-  return db()->getDouble(m_DBMCage,"ZSPACING")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"ZSPACING")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMSpacingRadial() {
   if (m_currentLD == 0)
-    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_0")*CLHEP::mm;
+    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_0")*GeoModelKernelUnits::mm;
   else if (m_currentLD == 1)
-    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_1")*CLHEP::mm;
+    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_1")*GeoModelKernelUnits::mm;
   else if (m_currentLD == 2)
-    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_2")*CLHEP::mm;
+    return db()->getDouble(m_DBMCage,"RADIAL_SPACE_2")*GeoModelKernelUnits::mm;
   else {
      msg(MSG::WARNING) << "DBMSpacingRadial() is not found" << endmsg;
      return 0.;
@@ -3871,174 +3869,174 @@ double OraclePixGeoManager::DBMSpacingRadial() {
 }
 // return dimension of bracket unit
 double OraclePixGeoManager::DBMBracketX() {
-  return db()->getDouble(m_DBMBracket,"WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBracketY() {
-  return db()->getDouble(m_DBMBracket,"HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBracketZ() {
-  return db()->getDouble(m_DBMBracket,"THICKNESS")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"THICKNESS")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMTrapezBackTheta() {
-  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_THETA")*CLHEP::deg;
+  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_THETA")*GeoModelKernelUnits::deg;
 }
 double OraclePixGeoManager::DBMTrapezBackX() {
-  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMTrapezBackY() {
-  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMTrapezBackShortZ() {
-  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_ZSHORT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"TRAPEZBACK_ZSHORT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktWindowX() {
-  return db()->getDouble(m_DBMBracket,"WINDOW_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"WINDOW_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktWindowY() {
-  return db()->getDouble(m_DBMBracket,"WINDOW_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"WINDOW_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktWindowOffset() {
-  return db()->getDouble(m_DBMBracket,"WINDOW_OFFSET")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"WINDOW_OFFSET")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktWindowCenterZ() {
-  return db()->getDouble(m_DBMBracket,"WINDOW_CENTERZ")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"WINDOW_CENTERZ")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktTopBlockZ() {
-  return db()->getDouble(m_DBMBracket,"TOPBLOCK_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"TOPBLOCK_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktSideBlockX() {
-  return db()->getDouble(m_DBMBracket,"SIDEBLOCK_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"SIDEBLOCK_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktSideBlockY() {
-  return db()->getDouble(m_DBMBracket,"SIDEBLOCK_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"SIDEBLOCK_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktLockZ() {
-  return db()->getDouble(m_DBMBracket,"LOCK_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"LOCK_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktLockY() {
-  return db()->getDouble(m_DBMBracket,"LOCK_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"LOCK_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktFinLongZ() {
-  return db()->getDouble(m_DBMBracket,"COOLINGFIN_ZLONG")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"COOLINGFIN_ZLONG")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktFinHeight() {
-  return db()->getDouble(m_DBMBracket,"COOLINGFIN_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"COOLINGFIN_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktFinThick() {
-  return db()->getDouble(m_DBMBracket,"COOLINGFIN_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"COOLINGFIN_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMBrcktFinPos() {
-  return db()->getDouble(m_DBMBracket,"COOLINGFIN_POS")*CLHEP::mm;
+  return db()->getDouble(m_DBMBracket,"COOLINGFIN_POS")*GeoModelKernelUnits::mm;
 }
 
 // return spacing between V-slide and first layer
 double OraclePixGeoManager::DBMSpace() {
-  return db()->getDouble(m_DBMCage,"SPACING1")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"SPACING1")*GeoModelKernelUnits::mm;
 }
 
 // return dimensions of the main plate
 double OraclePixGeoManager::DBMMainPlateX() {
-  return db()->getDouble(m_DBMCage,"MAINPLATE_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MAINPLATE_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMainPlateY() {
-  return db()->getDouble(m_DBMCage,"MAINPLATE_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MAINPLATE_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMainPlateZ() {
-  return db()->getDouble(m_DBMCage,"MAINPLATE_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MAINPLATE_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMPlateWindowWidth() {
-  return db()->getDouble(m_DBMCage,"MPWINDOW_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MPWINDOW_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMPlateWindowHeight() {
-  return db()->getDouble(m_DBMCage,"MPWINDOW_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MPWINDOW_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMPlateWindowPos() {
-  return db()->getDouble(m_DBMCage,"MPWINDOW_POS")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"MPWINDOW_POS")*GeoModelKernelUnits::mm;
 }
 // return dimensions of aluminium side plates
 double OraclePixGeoManager::DBMCoolingSidePlateX() {
-  return db()->getDouble(m_DBMCage,"SIDEPLATE_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"SIDEPLATE_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCoolingSidePlateY() {
-  return db()->getDouble(m_DBMCage,"SIDEPLATE_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"SIDEPLATE_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCoolingSidePlateZ() {
-  return db()->getDouble(m_DBMCage,"SIDEPLATE_LENGTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"SIDEPLATE_LENGTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCoolingSidePlatePos() {
-  return db()->getDouble(m_DBMCage,"SIDEPLATE_POS")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"SIDEPLATE_POS")*GeoModelKernelUnits::mm;
 }
 
 // return dimension of sensor, chip and ceramic
 double OraclePixGeoManager::DBMDiamondX() {
-  return db()->getDouble(m_DBMModule,"DIAMOND_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"DIAMOND_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMDiamondY() {
-  return db()->getDouble(m_DBMModule,"DIAMOND_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"DIAMOND_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMDiamondZ() {
-  return db()->getDouble(m_DBMModule,"DIAMOND_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"DIAMOND_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFEI4X() {
-  return db()->getDouble(m_DBMModule,"FEI4_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"FEI4_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFEI4Y() {
-  return db()->getDouble(m_DBMModule,"FEI4_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"FEI4_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFEI4Z() {
-  return db()->getDouble(m_DBMModule,"FEI4_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"FEI4_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCeramicX() {
-  return db()->getDouble(m_DBMModule,"CERAMIC_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"CERAMIC_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCeramicY() {
-  return db()->getDouble(m_DBMModule,"CERAMIC_HEIGHT")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"CERAMIC_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMCeramicZ() {
-  return db()->getDouble(m_DBMModule,"CERAMIC_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"CERAMIC_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMAirGap() {
-  return db()->getDouble(m_DBMModule,"AIR_GAP")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"AIR_GAP")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMKaptonZ() {
-  return db()->getDouble(m_DBMModule,"KAPTONZ")*CLHEP::mm;
+  return db()->getDouble(m_DBMModule,"KAPTONZ")*GeoModelKernelUnits::mm;
 }
 
 // flex support
 double OraclePixGeoManager::DBMFlexSupportX() {
-  return db()->getDouble(m_DBMCage,"FLEXSUPP_WIDTH")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"FLEXSUPP_WIDTH")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFlexSupportY() {
-    return db()->getDouble(m_DBMCage,"FLEXSUPP_HEIGHT")*CLHEP::mm;
+    return db()->getDouble(m_DBMCage,"FLEXSUPP_HEIGHT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFlexSupportZ() {
-  return db()->getDouble(m_DBMCage,"FLEXSUPP_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"FLEXSUPP_THICK")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMFlexSupportOffset() {
-    return db()->getDouble(m_DBMCage, "FLEXSUPP_OFFSET")*CLHEP::mm;
+    return db()->getDouble(m_DBMCage, "FLEXSUPP_OFFSET")*GeoModelKernelUnits::mm;
 }
 
 // return radius of supporting rod
 double OraclePixGeoManager::DBMRodRadius() {
-  return db()->getDouble(m_DBMCage,"ROD_RADIUS")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"ROD_RADIUS")*GeoModelKernelUnits::mm;
 }
 // return distance between center of rods
 double OraclePixGeoManager::DBMMPlateRod2RodY() {
-  return db()->getDouble(m_DBMCage,"ROD2ROD_VERT")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"ROD2ROD_VERT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMMPlateRod2RodX() {
-  return db()->getDouble(m_DBMCage,"ROD2ROD_HOR")*CLHEP::mm;
+  return db()->getDouble(m_DBMCage,"ROD2ROD_HOR")*GeoModelKernelUnits::mm;
 }
 
 // radius and thickness of PP0 board
 double OraclePixGeoManager::DBMPP0RIn() {
-  return db()->getDouble(m_DBMTelescope,"PP0_RIN")*CLHEP::mm;
+  return db()->getDouble(m_DBMTelescope,"PP0_RIN")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMPP0ROut() {
-  return db()->getDouble(m_DBMTelescope,"PP0_ROUT")*CLHEP::mm;
+  return db()->getDouble(m_DBMTelescope,"PP0_ROUT")*GeoModelKernelUnits::mm;
 }
 double OraclePixGeoManager::DBMPP0Thick() {
-  return db()->getDouble(m_DBMTelescope,"PP0_THICK")*CLHEP::mm;
+  return db()->getDouble(m_DBMTelescope,"PP0_THICK")*GeoModelKernelUnits::mm;
 }
 
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/OraclePixGeoManager.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.h
similarity index 98%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/OraclePixGeoManager.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.h
index 4efca302e47b36e19dbca6c25bd9a11c0602ae78..04dbd659378bc69bdbaae11333a5d1c2ad898d6c 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/OraclePixGeoManager.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/OraclePixGeoManager.h
@@ -5,8 +5,9 @@
 #ifndef OraclePixelGeoManager_H
 #define OraclePixelGeoManager_H
 
-#include "PixelGeoModel/PixelGeometryManager.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "PixelGeometryManager.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include <string>
 #include <map>
 #include <vector>
@@ -168,7 +169,7 @@ class OraclePixGeoManager : public PixelGeometryManager {
   // db version
   int m_dbVersion;
 
-  // default length unit set according to db version (CLHEP::mm or CLHEP::cm)
+  // default length unit set according to db version (GeoModelKernelUnits::mm or GeoModelKernelUnits::cm)
   double m_defaultLengthUnit;
 
  public:
@@ -424,7 +425,7 @@ class OraclePixGeoManager : public PixelGeometryManager {
   double PixelLadderCableOffsetY();
 
   // Stave support (IBL)
-  HepGeom::Point3D<double> IBLStaveRotationAxis(); 
+  GeoTrf::Vector3D IBLStaveRotationAxis(); 
   double IBLStaveRadius();
   double IBLStaveFacePlateThickness(); 
   double IBLStaveMechanicalStaveWidth();
@@ -793,7 +794,7 @@ class OraclePixGeoManager : public PixelGeometryManager {
   const PixelID * getIdHelper();
 
   // Top Level placements
-  const HepGeom::Transform3D & partTransform(const std::string & partName) const; 
+  const GeoTrf::Transform3D & partTransform(const std::string & partName) const; 
   bool partPresent(const std::string & partName) const;
   
   std::string getMaterialName(const std::string & volumeName, int layerdisk = 0, int typenum = 0);
@@ -835,7 +836,7 @@ class OraclePixGeoManager : public PixelGeometryManager {
   double CalculateThickness(double,std::string);
   int determineDbVersion();
   void addDefaultMaterials();
-  // return default length unit (CLHEP::mm or CLHEP::cm)
+  // return default length unit (GeoModelKernelUnits::mm or GeoModelKernelUnits::cm)
   double mmcm() {return m_defaultLengthUnit;}
 
 };
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.cxx
index afd98c69949e204c263dd9e80eef41e7fae1b45e..a945c0463b074ebe0f584950a2d909c115fa3b0f 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.cxx
@@ -6,7 +6,7 @@
 // This allows one to keep a stable copy of the DC2 version and
 // allow development of future versions.
 
-#include "PixelGeoModel/PixelDetectorDC1DC2.h"
+#include "PixelDetectorDC1DC2.h"
 
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "InDetReadoutGeometry/PixelDetectorManager.h"
@@ -79,7 +79,7 @@ GeoVPhysVol* GeoPixelBarrel::Build( ) {
     //cout << "Layer" << ii << endl;
     m_gmt_mgr->SetCurrentLD(ii);
     if(m_gmt_mgr->isLDPresent()) {
-      GeoAlignableTransform * xform = new GeoAlignableTransform(HepGeom::Transform3D()); 
+      GeoAlignableTransform * xform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
       GeoVPhysVol* layerphys = layer.Build();
       GeoNameTag *tag = new GeoNameTag(lname[ii]);         
       barrelPhys->add(tag);
@@ -102,8 +102,8 @@ GeoVPhysVol* GeoPixelBarrel::Build( ) {
     for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
       brlsvc.SetCylinder(ii);
       GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
-      CLHEP::Hep3Vector pos(0.,0.,brlsvc.ZPos() );
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+      GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
+      GeoTransform* xform = new GeoTransform(pos);
       barrelPhys->add(tag);
       barrelPhys->add(xform);
       barrelPhys->add(brlsvc.Build() );
@@ -152,19 +152,19 @@ double GeoPixelCable::Length() {
 
 double GeoPixelCable::Thickness() {
   //
-  // This is calculated from the CLHEP::rad length of the cables and their mass
+  // This is calculated from the GeoModelKernelUnits::rad length of the cables and their mass
   // I have to go back on this later when I'll have defined a material
   // manager, for the time being I get the thickness by atlsim, using dtree
   // anf hardwire the numbers in the code...
   // I have to come back on the thickness using the cables recipes
   //
-  if(m_moduleNumber == 0) return 2.*0.0028412*CLHEP::cm;
-  if(m_moduleNumber == 1) return 2.*0.0056795*CLHEP::cm;
-  if(m_moduleNumber == 2) return 2.*0.0056830*CLHEP::cm;
-  if(m_moduleNumber == 3) return 2.*0.0056763*CLHEP::cm;
-  if(m_moduleNumber == 4) return 2.*0.0056752*CLHEP::cm;
-  if(m_moduleNumber == 5) return 2.*0.0057058*CLHEP::cm;
-  if(m_moduleNumber == 6) return 2.*0.0056818*CLHEP::cm;
+  if(m_moduleNumber == 0) return 2.*0.0028412*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 1) return 2.*0.0056795*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 2) return 2.*0.0056830*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 3) return 2.*0.0056763*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 4) return 2.*0.0056752*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 5) return 2.*0.0057058*GeoModelKernelUnits::cm;
+  if(m_moduleNumber == 6) return 2.*0.0056818*GeoModelKernelUnits::cm;
 
   return 0.;
 
@@ -249,8 +249,8 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   //
   GeoPixelSubDisk psd(theSensor);
   double zpos = -m_gmt_mgr->PixelECSiDz1()/2.;
-  double angle = 360.*CLHEP::deg/ (float) m_gmt_mgr->PixelECNSectors1();
-  CLHEP::Hep3Vector pos(0.,0.,zpos);
+  double angle = 360.*GeoModelKernelUnits::deg/ (float) m_gmt_mgr->PixelECNSectors1();
+  GeoTrf::Translation3D pos(0.,0.,zpos);
 
   // Set numerology
   m_gmt_mgr->SetEta(0);
@@ -261,10 +261,8 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   m_gmt_mgr->SetEta(0);
   for (int ii = 0; ii <  m_gmt_mgr->PixelECNSectors1(); ii++) {
     m_gmt_mgr->SetPhi(ii);
-    CLHEP::HepRotation rm;
-    rm.rotateX(180.*CLHEP::deg );
-    rm.rotateZ(ii*angle+angle/2.);
-    GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(ii*angle+angle/2.)*GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
+    GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
     GeoVPhysVol * modulePhys = psd.Build();
     GeoNameTag* tag = new GeoNameTag("DiskSector");
     diskPhys->add(tag);
@@ -280,12 +278,11 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   // Odd modules
   m_gmt_mgr->SetEta(1);
   zpos = m_gmt_mgr->PixelECSiDz2()/2.;
-  pos = CLHEP::Hep3Vector(0.,0.,zpos);
+  pos = GeoTrf::Translation3D(0.,0.,zpos);
   for (int ii = 0; ii <  m_gmt_mgr->PixelECNSectors1(); ii++) {
     m_gmt_mgr->SetPhi(ii);
-    CLHEP::HepRotation rm;
-    rm.rotateZ((ii+1)*angle);
-    GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,pos));
+    GeoTrf::RotateZ3D rm((ii+1)*angle);
+    GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
     GeoVPhysVol * modulePhys = psd.Build();
     GeoNameTag* tag = new GeoNameTag("DiskSector");
     diskPhys->add(tag);
@@ -303,9 +300,9 @@ GeoVPhysVol* GeoPixelDisk::Build( ) {
   GeoPixelDiskSupports pds;
   for(int ii =0; ii< pds.NCylinders(); ii++) {
     pds.SetCylinder(ii);
-    CLHEP::Hep3Vector pos(0.,0.,pds.ZPos() );
+    GeoTrf::Translate3D pos(0.,0.,pds.ZPos() );
     GeoNameTag* tag = new GeoNameTag("DiskSupport");
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+    GeoTransform* xform = new GeoTransform(pos);
     diskPhys->add(tag);
     diskPhys->add(xform);
     diskPhys->add(pds.Build() );
@@ -331,7 +328,7 @@ double GeoPixelDisk::Thickness() {
   // 7-1 I switch to the minimum thickness possible as the cables are right
   // outside this volume.
   //
-  //  return 10*CLHEP::mm;
+  //  return 10*GeoModelKernelUnits::mm;
   double tck = 2*(m_gmt_mgr->PixelBoardThickness()
                   +std::max(m_gmt_mgr->PixelHybridThickness(),m_gmt_mgr->PixelChipThickness()));
   tck += std::max(m_gmt_mgr->PixelECSiDz1(),m_gmt_mgr->PixelECSiDz2());
@@ -480,9 +477,9 @@ GeoVPhysVol* GeoPixelEndCap::Build( ) {
       //position of the disk
       double zdisk = m_gmt_mgr->PixelDiskPosition()-ecz;
       // place the disk
-      CLHEP::Hep3Vector pos(0.,0.,zdisk);
+      GeoTrf::Translate3D pos(0.,0.,zdisk);
       GeoNameTag* tag = new GeoNameTag("Disk");
-      GeoAlignableTransform* xform = new GeoAlignableTransform(HepGeom::Transform3D(CLHEP::HepRotation(), pos));
+      GeoAlignableTransform* xform = new GeoAlignableTransform(pos);
       GeoVPhysVol * diskPhys = pd.Build();
       ecPhys->add(tag);
       ecPhys->add(new GeoIdentifierTag(ii));
@@ -498,15 +495,15 @@ GeoVPhysVol* GeoPixelEndCap::Build( ) {
       // place the cables twice for the two active parts
       //
       double dz = pd.Thickness()/2. + m_gmt_mgr->PixelECCablesDistance() ;
-      pos = CLHEP::Hep3Vector(0.,0.,zdisk+dz);
+      pos = GeoTrf::Translate3D(0.,0.,zdisk+dz);
       tag = new GeoNameTag("ECCables");
-      GeoTransform * xformCablesPlus = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), pos));
+      GeoTransform * xformCablesPlus = new GeoTransform(pos);
       ecPhys->add(tag);
       ecPhys->add(xformCablesPlus);
       ecPhys->add(pecc.Build() );
-      pos = CLHEP::Hep3Vector(0.,0.,zdisk-dz);
+      pos = GeoTrf::Translate3D(0.,0.,zdisk-dz);
       tag = new GeoNameTag("ECCables");
-      GeoTransform * xformCablesMinus = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(), pos));
+      GeoTransform * xformCablesMinus = new GeoTransform(pos);
       ecPhys->add(tag);
       ecPhys->add(xformCablesMinus);
       ecPhys->add(pecc.Build() );
@@ -523,8 +520,8 @@ GeoVPhysVol* GeoPixelEndCap::Build( ) {
     for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
       ecsvc.SetCylinder(ii);
       GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
-      CLHEP::Hep3Vector pos(0.,0.,ecsvc.ZPos() );
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+      GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
+      GeoTransform* xform = new GeoTransform(pos);
       ecPhys->add(tag);
       ecPhys->add(xform);
       ecPhys->add(ecsvc.Build() );
@@ -571,8 +568,8 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
     for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
       brlsvc.SetCylinder(ii);
       GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
-      CLHEP::Hep3Vector pos(0.,0.,brlsvc.ZPos() );
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+      GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
+      GeoTransform* xform = new GeoTransform(pos);
       envelopePhys->add(tag);
       envelopePhys->add(new GeoIdentifierTag(ii) );
       envelopePhys->add(xform);
@@ -588,18 +585,16 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
   m_gmt_mgr->SetPos();
   GeoPixelEndCap pec;
   double zpos = (m_gmt_mgr->PixelEndcapZMax()+m_gmt_mgr->PixelEndcapZMin())/2.;
-  CLHEP::Hep3Vector pos(0.,0.,zpos);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+  GeoTrf::Translate3D pos(0.,0.,zpos);
+  GeoTransform* xform = new GeoTransform(pos);
   tag  = new GeoNameTag("EndCap 1");
   envelopePhys->add(tag);
   envelopePhys->add(new GeoIdentifierTag(2));
   envelopePhys->add(xform);
   envelopePhys->add(pec.Build() );
   m_gmt_mgr->SetNeg();
-  pos = CLHEP::Hep3Vector(0.,0.,-zpos);
-  CLHEP::HepRotation rm;
-  rm.rotateX(180.*CLHEP::deg);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,pos));
+  GeoTrf::RotateX3D rm(180.*GeoModelKernelUnits::deg);
+  xform = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translation3D(0.,0.,-zpos)*rm));
   tag  = new GeoNameTag("EndCap 2");
   envelopePhys->add(tag);
   envelopePhys->add(new GeoIdentifierTag(-2));
@@ -613,8 +608,8 @@ GeoVPhysVol* GeoPixelEnvelope::Build( ) {
     for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
       ecsvc.SetCylinder(ii);
       GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
-      CLHEP::Hep3Vector pos(0.,0.,ecsvc.ZPos() );
-      GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+      GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
+      GeoTransform* xform = new GeoTransform(pos);
       envelopePhys->add(tag);
       envelopePhys->add(xform);
       envelopePhys->add(new GeoIdentifierTag(ii) );
@@ -733,15 +728,14 @@ GeoVPhysVol* GeoPixelLadder::Build( ) {
 // Get the z position from the db
 //
     float zpos = m_gmt_mgr->PixelModulePosition(jj)*side;
-    CLHEP::Hep3Vector modulepos(xpos,0.,zpos);
+    GeoTrf::Translation3D modulepos(xpos,0.,zpos);
 //
 //
 //
-    CLHEP::HepRotation rm;
     //
     // again change sign w.r.t. g4
     //
-    rm.rotateY(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(ii) );
+    GeoTrf::RotateY3D rm(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(ii) );
 //
 // Place the Module
 //
@@ -750,11 +744,11 @@ GeoVPhysVol* GeoPixelLadder::Build( ) {
     GeoAlignableTransform* xform;
     // OLD EXAMPLE FOR ALIGNEMENT!!
     //    if(m_gmt_mgr->IsAlign() ) {
-    //      xform = new GeoSiAlTransform(HepGeom::Transform3D(rm,modulepos), pm.getID() );
+    //      xform = new GeoSiAlTransform(GeoTrf::Transform3D(rm,modulepos), pm.getID() );
     //    } else {
-    //      xform = new GeoTransform(HepGeom::Transform3D(rm,modulepos));
+    //      xform = new GeoTransform(GeoTrf::Transform3D(rm,modulepos));
     //    }
-    xform = new GeoAlignableTransform(HepGeom::Transform3D(rm,modulepos));
+    xform = new GeoAlignableTransform(GeoTrf::Transform3D(modulepos*rm));
     ladderPhys->add(tag);
     ladderPhys->add(new GeoIdentifierTag(m_gmt_mgr->Eta() ) );
     ladderPhys->add(xform);
@@ -834,7 +828,7 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   //
   // This is the maximum possible w/o going out of the mother volume!
   //
-  double LayerThickness = 8.499*CLHEP::mm;
+  double LayerThickness = 8.499*GeoModelKernelUnits::mm;
   const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
   //
   // Layer dimensions from the geometry manager
@@ -855,14 +849,14 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   GeoPixelLadder pl(theSensor);
   GeoPixelTubeCables ptc;
   int nsectors = m_gmt_mgr->NPixelSectors();
-  double angle=360./nsectors*CLHEP::deg;
+  double angle=360./nsectors*GeoModelKernelUnits::deg;
   double layerradius = m_gmt_mgr->PixelLayerRadius();
   double xcblpos =  layerradius + (pl.Thickness()/2.+ptc.Thickness()/2)/cos(m_gmt_mgr->PixelLadderTilt());
-  CLHEP::Hep3Vector posladder(layerradius, 0.,0.);
-  CLHEP::Hep3Vector postubecables(xcblpos, 0.,0.);
-  posladder.rotateZ(angle/2.);
-  postubecables.rotateZ(angle/2.);
-  
+  GeoTrf::Vector3D posladder(layerradius, 0.,0.);
+  posladder = GeoTrf::RotateZ3D(angle/2.)*posladder;
+  GeoTrf::Vector3D postubecables(xcblpos, 0.,0.);
+  postubecables = GeoTrf::RotateZ3D(angle/2.)*postubecables;
+
   // Set numerology
   m_DDmgr->numerology().setNumPhiModulesForLayer(m_gmt_mgr->GetLD(),nsectors);
   m_DDmgr->numerology().setNumEtaModulesForLayer(m_gmt_mgr->GetLD(),m_gmt_mgr->PixelNModule());
@@ -872,33 +866,32 @@ GeoVPhysVol* GeoPixelLayer::Build() {
   //
   for(int ii = 0; ii < nsectors; ii++) {
     m_gmt_mgr->SetPhi(ii);
-    CLHEP::HepRotation rm;
     //
     // change the sign w.r.t G4 (same sign as G3)
     //
-    rm.rotateZ(( +(float) ii+0.5)*angle+m_gmt_mgr->PixelLadderTilt() );
+    GeoTrf::RotateZ3D rm(( +(float) ii+0.5)*angle+m_gmt_mgr->PixelLadderTilt() );
     //
     // Place the ladders
     //
     GeoNameTag *tag = new GeoNameTag("Ladder");         
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,posladder));
+    GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(posladder.x(),posladder.y(),posladder.z())*rm);
     layerPhys->add(tag);
     layerPhys->add(new GeoIdentifierTag(ii) );
     layerPhys->add(xform);
     GeoVPhysVol* ladderphys = pl.Build() ;
     layerPhys->add(ladderphys );
-    posladder.rotateZ(angle);     
+    posladder = GeoTrf::RotateZ3D(angle)*posladder;     
     if(m_gmt_mgr->DoServices() ) {
       //
       // Place the box w/ the tubes and cables for the layer
       //
       tag = new GeoNameTag("TubesAndCables");         
-      xform = new GeoTransform(HepGeom::Transform3D(rm,postubecables));
+      xform = new GeoTransform(GeoTrf::Translate3D(postubecables.x(),postubecables.y(),postubecables.z())*rm);
       layerPhys->add(tag);
       layerPhys->add(xform);
       GeoVPhysVol* TCphys = ptc.Build() ;
       layerPhys->add(TCphys );
-      postubecables.rotateZ(angle);
+      postubecables = GeoTrf::RotateZ3D(angle)*postubecables;
     }
   }
   return layerPhys;
@@ -941,7 +934,7 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
   GeoVPhysVol *theSi = m_theSensor.Build();
   m_id = m_theSensor.getID();
   GeoNameTag *tag = new GeoNameTag("Si Crystal");         
-  GeoTransform *xformsi = new GeoTransform(HepGeom::Transform3D());
+  GeoTransform *xformsi = new GeoTransform(GeoTrf::Transform3D::Identity());
   modulePhys->add(tag);
   modulePhys->add(new GeoIdentifierTag(100) );
   modulePhys->add(xformsi);
@@ -951,8 +944,8 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
   //
   GeoPixelHybrid ph;
   double xpos = -0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelHybridThickness());
-  CLHEP::Hep3Vector hybpos(xpos,0.,0.);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D( CLHEP::HepRotation(),hybpos) );
+  GeoTrf::Translate3D hybpos(xpos,0.,0.);
+  GeoTransform* xform = new GeoTransform(hybpos);
   tag = new GeoNameTag("Hybrid");
   modulePhys->add(tag);
   modulePhys->add(xform);
@@ -962,8 +955,8 @@ GeoVPhysVol* GeoPixelModule::Build( ) {
   //
   GeoPixelChip pc;
   xpos = 0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelChipThickness())+m_gmt_mgr->PixelChipGap();
-  CLHEP::Hep3Vector chippos(xpos,0.,0.);
-  xform = new GeoTransform(HepGeom::Transform3D (CLHEP::HepRotation(),chippos) );
+  GeoTrf::Translate3D chippos(xpos,0.,0.);
+  xform = new GeoTransform(chippos);
   tag = new GeoNameTag("Chip");
   modulePhys->add(tag);
   modulePhys->add(xform);
@@ -1350,7 +1343,7 @@ m_theSensor(theSensor)
   double rmax = RMax();
   double halflength = Thickness()/2.;
   const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
-  const GeoTubs* SDTubs = new GeoTubs(rmin,rmax,halflength,-180.*CLHEP::deg/m_gmt_mgr->PixelECNSectors1()+0.000005,360.*CLHEP::deg/m_gmt_mgr->PixelECNSectors1()-0.00001);
+  const GeoTubs* SDTubs = new GeoTubs(rmin,rmax,halflength,-180.*GeoModelKernelUnits::deg/m_gmt_mgr->PixelECNSectors1()+0.000005,360.*GeoModelKernelUnits::deg/m_gmt_mgr->PixelECNSectors1()-0.00001);
   m_theSubDisk = new GeoLogVol("SubDiskLog",SDTubs,air);
   m_theSubDisk->ref();
 }
@@ -1366,11 +1359,9 @@ GeoVPhysVol* GeoPixelSubDisk::Build( ) {
   //
   double xpos = RMin()+m_gmt_mgr->PixelBoardLength()/2.;
   GeoNameTag* tag = new GeoNameTag("SiCrystal");
-  CLHEP::HepRotation rm;
-  rm.rotateY(90.*CLHEP::deg);
-  rm.rotateX(180.*CLHEP::deg);
-  CLHEP::Hep3Vector pos(xpos,0.,0.);
-  GeoAlignableTransform* xformsi = new GeoAlignableTransform(HepGeom::Transform3D(rm,pos) );
+  GeoTrf::Transform3D rm = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90.*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos(xpos,0.,0.);
+  GeoAlignableTransform* xformsi = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
   SDPhys->add(tag);
   SDPhys->add(new GeoIdentifierTag(200) );
   SDPhys->add(xformsi);
@@ -1381,8 +1372,8 @@ GeoVPhysVol* GeoPixelSubDisk::Build( ) {
   GeoPixelHybrid ph;
   tag = new GeoNameTag("Hybrid");
   double zpos = 0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelHybridThickness())+m_epsilon/2.;
-  pos = CLHEP::Hep3Vector(xpos,0.,zpos);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(rm,pos) );
+  pos = GeoTrf::Translation3D(xpos,0.,zpos);
+  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
   SDPhys->add(tag);
   SDPhys->add(xform);
   SDPhys->add(ph.Build() );
@@ -1392,8 +1383,8 @@ GeoVPhysVol* GeoPixelSubDisk::Build( ) {
   GeoPixelChip pc;
   tag = new GeoNameTag("Chip");
   zpos = -0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelChipThickness())-m_gmt_mgr->PixelChipGap();
-  pos = CLHEP::Hep3Vector(xpos,0.,zpos);
-  xform = new GeoTransform(HepGeom::Transform3D(rm,pos) );
+  pos = GeoTrf::Translation3D(xpos,0.,zpos);
+  xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
   SDPhys->add(tag);
   SDPhys->add(xform);
   SDPhys->add(pc.Build() );
@@ -1464,8 +1455,8 @@ GeoVPhysVol* GeoPixelTubeCables::Build( ) {
   GeoNameTag* tag = new GeoNameTag("LadderStructure");
   GeoVPhysVol* ladderstructPhys =  pls.Build() ;
   double xpos = 0.5*(-this->Thickness()+m_gmt_mgr->PixelLadderThickness());
-  CLHEP::Hep3Vector pos(xpos,0.,0.);
-  GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),pos));
+  GeoTrf::Translate3D pos(xpos,0.,0.);
+  GeoTransform* xform = new GeoTransform(pos);
   TCPhys->add(tag);
   TCPhys->add(xform);
   TCPhys->add(ladderstructPhys);
@@ -1492,8 +1483,8 @@ GeoVPhysVol* GeoPixelTubeCables::Build( ) {
     // in the same way.
     //
     xcabshift += pc.Thickness()/2.;
-    CLHEP::Hep3Vector cablepos(xcabpos,0.,zcabpos);
-    GeoTransform* xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cablepos));
+    GeoTrf::Translate3D cablepos(xcabpos,0.,zcabpos);
+    GeoTransform* xform = new GeoTransform(cablepos);
     GeoNameTag *tag = new GeoNameTag("Cable");         
     //
     // Left side
@@ -1507,8 +1498,8 @@ GeoVPhysVol* GeoPixelTubeCables::Build( ) {
     // Right side
     //
     GeoVPhysVol *cablePhys2 =  pc.Build();
-    cablepos = CLHEP::Hep3Vector(xcabpos,0.,-zcabpos);
-    xform = new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotation(),cablepos));
+    cablepos = GeoTrf::Translate3D(xcabpos,0.,-zcabpos);
+    xform = new GeoTransform(cablepos);
     TCPhys->add(tag);
     TCPhys->add(xform);
     //    TCPhys->add(new GeoIdentifierTag(ii+100) );
@@ -1772,29 +1763,29 @@ double OraclePixGeoManager::CalculateThickness(double tck,string mat) {
 /////////////////////////////////////////////////////////
 double OraclePixGeoManager::PixelBoardWidth() 
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDWIDTH")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDWIDTH")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDWIDTH")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDWIDTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelBoardLength() 
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDLENGTH")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDLENGTH")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDLENGTH")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDLENGTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelBoardThickness() 
 {
   if (m_dc1Geometry && isBarrel() && (m_currentLD == 0)) {
-    return 200*CLHEP::micrometer;
+    return 200*GeoModelKernelUnits::micrometer;
   }
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDTHICK")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDTHICK")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDTHICK")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDTHICK")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double  OraclePixGeoManager::PixelBoardActiveLen() 
 {
-  if(isEndcap()) return (*m_pxei)[m_currentLD]->getDouble("DRACTIVE")*CLHEP::cm;
-  if(isBarrel()) return (*m_pxbi)[m_currentLD]->getDouble("DZELEB")*CLHEP::cm;
+  if(isEndcap()) return (*m_pxei)[m_currentLD]->getDouble("DRACTIVE")*GeoModelKernelUnits::cm;
+  if(isBarrel()) return (*m_pxbi)[m_currentLD]->getDouble("DZELEB")*GeoModelKernelUnits::cm;
   return 0.;
 }
 /////////////////////////////////////////////////////////
@@ -1804,14 +1795,14 @@ double  OraclePixGeoManager::PixelBoardActiveLen()
 /////////////////////////////////////////////////////////
 double OraclePixGeoManager::PixelHybridWidth() 
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDWIDTH")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDWIDTH")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDWIDTH")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDWIDTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelHybridLength() 
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDLENGTH")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDLENGTH")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDLENGTH")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDLENGTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelHybridThickness() 
@@ -1829,7 +1820,7 @@ double OraclePixGeoManager::PixelHybridThickness()
   }
   // if it is negative is given in % of r.l.
   if(thick > 0.) { 
-    return thick*CLHEP::cm;
+    return thick*GeoModelKernelUnits::cm;
   }
   return CalculateThickness(thick,mat);
 
@@ -1842,20 +1833,20 @@ double OraclePixGeoManager::PixelHybridThickness()
 
 double OraclePixGeoManager::PixelChipWidth()
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPWIDTH")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPWIDTH")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPWIDTH")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPWIDTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelChipLength()
 {
-  if(isBarrel())return (*m_PixelModule)[m_currentLD]->getDouble("CHIPLENGTH")*CLHEP::cm;
-  if(isEndcap())return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPLENGTH")*CLHEP::cm;
+  if(isBarrel())return (*m_PixelModule)[m_currentLD]->getDouble("CHIPLENGTH")*GeoModelKernelUnits::cm;
+  if(isEndcap())return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPLENGTH")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelChipGap()
 {
-  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPGAP")*CLHEP::cm;
-  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPGAP")*CLHEP::cm;
+  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPGAP")*GeoModelKernelUnits::cm;
+  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPGAP")*GeoModelKernelUnits::cm;
   return 0.;
 }
 double OraclePixGeoManager::PixelChipThickness() {
@@ -1871,7 +1862,7 @@ double OraclePixGeoManager::PixelChipThickness() {
   } 
   // if it is negative is given in % of r.l.
   if(thick > 0.) { 
-    return thick*CLHEP::cm;
+    return thick*GeoModelKernelUnits::cm;
   } 
   return CalculateThickness(thick,mat);
 
@@ -1884,20 +1875,20 @@ double OraclePixGeoManager::PixelChipThickness() {
 /////////////////////////////////////////////////////////
 double OraclePixGeoManager::PixelECCarbonRMin(string a) {
   if(a == "Inner") {
-    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMIN")*CLHEP::cm;
+    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMIN")*GeoModelKernelUnits::cm;
   } else if (a == "Central") {
-    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMIN")*CLHEP::cm;
+    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMIN")*GeoModelKernelUnits::cm;
   }
-  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMIN")*CLHEP::cm;
+  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMIN")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelECCarbonRMax(string a) {
   if(a == "Inner") {
-    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMAX")*CLHEP::cm;
+    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMAX")*GeoModelKernelUnits::cm;
   } else if (a == "Central") {
-    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMAX")*CLHEP::cm;
+    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMAX")*GeoModelKernelUnits::cm;
   } else {
-    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMAX")*CLHEP::cm;
+    return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMAX")*GeoModelKernelUnits::cm;
   }
 }
 
@@ -1916,7 +1907,7 @@ double OraclePixGeoManager::PixelECCarbonThickness(string a) {
     imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP3MAT")-1;
   }
   if(tck>0.) {
-    return tck*CLHEP::cm;
+    return tck*GeoModelKernelUnits::cm;
   } 
   return CalculateThickness(tck,mat[imat]);
 }
@@ -1988,12 +1979,12 @@ double*  OraclePixGeoManager::PixelServiceR(string a, int n) {
     }
   }
   // If this is negative this is the thickness of the cyl in % of r.l.
-  r[0] = rmin*CLHEP::cm;
+  r[0] = rmin*GeoModelKernelUnits::cm;
   if(rmax > 0) {
-    r[1] = rmax*CLHEP::cm;
+    r[1] = rmax*GeoModelKernelUnits::cm;
   } else {
     string material = PixelServiceMaterial(a,n);
-    r[1] = fabs(rmin*CLHEP::cm)+CalculateThickness(rmax,material);
+    r[1] = fabs(rmin*GeoModelKernelUnits::cm)+CalculateThickness(rmax,material);
   }
   return r;
 }
@@ -2021,15 +2012,15 @@ double* OraclePixGeoManager::PixelServiceZ(string a,int n) {
       z[1] = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ZOUT");
     }
   }
-  z[0] = z[0] *CLHEP::cm;
+  z[0] = z[0] *GeoModelKernelUnits::cm;
   if(z[0]*(z[1]) > -0.000000001) { // same sign and z[0] > 0.
-    z[1] = z[1] *CLHEP::cm;
+    z[1] = z[1] *GeoModelKernelUnits::cm;
   } else {
     string material = PixelServiceMaterial(a,n);
     z[1] = z[0] * (1 + CalculateThickness(z[1],material)/fabs(z[0]));
   }
   if(isEndcap() && a == "Inside" ) { // Translate to the ecnter of EndCap
-    double center = ((*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")+(*m_PixelEndcapGeneral)[0]->getDouble("ZMIN"))/2.*CLHEP::cm;
+    double center = ((*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")+(*m_PixelEndcapGeneral)[0]->getDouble("ZMIN"))/2.*GeoModelKernelUnits::cm;
     z[0] = z[0]-center;
     z[1] = z[1]-center;
   }
@@ -2157,7 +2148,7 @@ double OraclePixGeoManager::PixelLadderThickness()
 {
   double tck = (*m_PixelStave)[0]->getDouble("SUPPORTTHICK");
   if( tck > 0.) {
-    return tck*CLHEP::cm;
+    return tck*GeoModelKernelUnits::cm;
   } else {
     return CalculateThickness(tck,"pix::Ladder");
   }
@@ -2167,7 +2158,7 @@ double OraclePixGeoManager::PixelECCablesThickness()
 {
   double tck =  (*m_PixelDisk)[m_currentLD]->getDouble("CABLETHICK");
   if( tck > 0.) {
-    return tck*CLHEP::cm;
+    return tck*GeoModelKernelUnits::cm;
   } else {
     return CalculateThickness(tck,"pix::ECCables");
   }
@@ -2228,31 +2219,31 @@ double OraclePixGeoManager::Voltage(bool isBLayer){
   // override B-layer voltage for DC1 geometry by 
   // value in old DB (approx ratio of thicknesses (200/250 = 0.8)
   // 97.1*0.8 = 77.68. In Nova its 77.7.
-  if (isBLayer && m_dc1Geometry) return 77.7*CLHEP::volt; 
-  if(isBLayer) { return (*m_plor)[0]->getDouble("VOLTAGE")*CLHEP::volt;}
-  return (*m_plor)[1]->getDouble("VOLTAGE")*CLHEP::volt;
+  if (isBLayer && m_dc1Geometry) return 77.7*GeoModelKernelUnits::volt; 
+  if(isBLayer) { return (*m_plor)[0]->getDouble("VOLTAGE")*GeoModelKernelUnits::volt;}
+  return (*m_plor)[1]->getDouble("VOLTAGE")*GeoModelKernelUnits::volt;
 }
 
 double OraclePixGeoManager::Temperature(bool isBLayer){
-  if(isBLayer) { return (*m_plor)[0]->getDouble("TEMPC")*CLHEP::kelvin+CLHEP::STP_Temperature;}
-  return (*m_plor)[1]->getDouble("TEMPC")*CLHEP::kelvin+CLHEP::STP_Temperature;
+  if(isBLayer) { return (*m_plor)[0]->getDouble("TEMPC")*GeoModelKernelUnits::kelvin+GeoModelKernelUnits::STP_Temperature;}
+  return (*m_plor)[1]->getDouble("TEMPC")*GeoModelKernelUnits::kelvin+GeoModelKernelUnits::STP_Temperature;
 }
 
-const HepGeom::Vector3D<double> & 
+const GeoTrf::Vector3D & 
 OraclePixGeoManager::magneticField(bool isBLayer) const
 {
   if (m_magFieldFromNova) {
     if(isBLayer) { 
-      m_magField = HepGeom::Vector3D<double>(0, 0, (*m_plrn)[0]->getDouble("BFIELD") * CLHEP::tesla);
+      m_magField = GeoTrf::Vector3D(0, 0, (*m_plrn)[0]->getDouble("BFIELD") * GeoModelKernelUnits::tesla);
     } else {
-      m_magField = HepGeom::Vector3D<double>(0, 0, (*m_plrn)[1]->getDouble("BFIELD") * CLHEP::tesla);
+      m_magField = GeoTrf::Vector3D(0, 0, (*m_plrn)[1]->getDouble("BFIELD") * GeoModelKernelUnits::tesla);
     }
   }
   return m_magField;
 }
 
 void 
-OraclePixGeoManager::setMagneticField(const HepGeom::Vector3D<double> & field)
+OraclePixGeoManager::setMagneticField(const GeoTrf::Vector3D & field)
 {
   m_magField = field;
   m_magFieldFromNova = false;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorDC1DC2.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.h
similarity index 88%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorDC1DC2.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.h
index e24294946713eaeb3f53a6204a9ad3490b483fdb..4a59f7251044a91b4588141f23ef9e6390ba00e7 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorDC1DC2.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorDC1DC2.h
@@ -5,8 +5,9 @@
 
 
 #include "Identifier/Identifier.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Vector3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "RDBAccessSvc/IRDBRecord.h" //IRDBRecord used in code in the header
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h" //for IRDBRecordset_ptr typedef
@@ -94,7 +95,7 @@ class GeoPixelCable : public GeoVPixelFactory {
 #ifndef GEOPIXELCHIP_H
 #define GEOPIXELCHIP_H
 
-//#include "PixelGeoModel/GeoVPixelFactory.h"
+//#include "GeoVPixelFactory.h"
 
 class GeoPixelChip : public GeoVPixelFactory {
  public:
@@ -565,8 +566,8 @@ class PixelGeometryManager {
   virtual double Temperature(bool isBLayer)=0;
 
   // Magnetic field
-  virtual const HepGeom::Vector3D<double> & magneticField(bool isBLayer = false) const=0;
-  virtual void setMagneticField(const HepGeom::Vector3D<double> & field)=0;
+  virtual const GeoTrf::Vector3D & magneticField(bool isBLayer = false) const=0;
+  virtual void setMagneticField(const GeoTrf::Vector3D & field)=0;
   virtual bool useMagneticFieldSvc() const=0;
   virtual void setUseMagneticFieldSvc(bool flag)=0;  
 
@@ -656,7 +657,7 @@ class OraclePixGeoManager : public PixelGeometryManager {
   // Magnetic Field
   bool m_magFieldFromNova;
   bool m_useMagFieldSvc;
-  mutable HepGeom::Vector3D<double> m_magField;
+  mutable GeoTrf::Vector3D m_magField;
   
   // Class holding items that only one instance is needed for all detector elements.
   InDetDD::SiCommonItems * m_commonItems;
@@ -904,8 +905,8 @@ class OraclePixGeoManager : public PixelGeometryManager {
   double Temperature(bool isBLayer);
 
   // Magnetic field
-  const HepGeom::Vector3D<double> & magneticField(bool isBLayer = false) const;
-  void setMagneticField(const HepGeom::Vector3D<double> & field);
+  const GeoTrf::Vector3D& magneticField(bool isBLayer = false) const;
+  void setMagneticField(const GeoTrf::Vector3D& field);
   bool useMagneticFieldSvc() const;
   void setUseMagneticFieldSvc(bool flag);  
 
@@ -925,16 +926,16 @@ class OraclePixGeoManager : public PixelGeometryManager {
 // ATLS
 double OraclePixGeoManager::GetATLSRadius() 
 {
-  return (*m_atls)[0]->getDouble("RMAX")*CLHEP::cm;
+  return (*m_atls)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;
  }
 
 double OraclePixGeoManager::GetATLSRmin() 
 {
- return (*m_atls)[0]->getDouble("RMIN")*CLHEP::cm;
+ return (*m_atls)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm;
 }
 double OraclePixGeoManager::GetATLSLength() 
 {
-  return (*m_atls)[0]->getDouble("ZMAX")*CLHEP::cm;
+  return (*m_atls)[0]->getDouble("ZMAX")*GeoModelKernelUnits::cm;
 }
 
 //
@@ -950,35 +951,35 @@ int OraclePixGeoManager::PixelEndcapMinorVersion()
   { return static_cast<int>(((*m_PixelEndcapGeneral)[0]->getDouble("VERSION") - PixelEndcapMajorVersion())*10 + 0.5);}
 
 // PXBG
-double OraclePixGeoManager::PixelRMin() {return (*m_PixelCommon)[0]->getDouble("RMIN")*CLHEP::cm;}
-double OraclePixGeoManager::PixelRMax() {return (*m_PixelCommon)[0]->getDouble("RMAX")*CLHEP::cm;}
-double OraclePixGeoManager::PixelHalfLength() {return (*m_PixelCommon)[0]->getDouble("HALFLENGTH")*CLHEP::cm;}
+double OraclePixGeoManager::PixelRMin() {return (*m_PixelCommon)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm;}
+double OraclePixGeoManager::PixelRMax() {return (*m_PixelCommon)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;}
+double OraclePixGeoManager::PixelHalfLength() {return (*m_PixelCommon)[0]->getDouble("HALFLENGTH")*GeoModelKernelUnits::cm;}
 int OraclePixGeoManager::PixelBarrelNLayer() {return (*m_PixelBarrelGeneral)[0]->getInt("NLAYER");}
 
 // m_PixelBarrelGeneral
-double OraclePixGeoManager::PixelBarrelRMin() {return (*m_PixelBarrelGeneral)[0]->getDouble("RMIN")*CLHEP::cm;}
-double OraclePixGeoManager::PixelBarrelRMax() {return (*m_PixelBarrelGeneral)[0]->getDouble("RMAX")*CLHEP::cm;}
-double OraclePixGeoManager::PixelBarrelHalfLength() {return (*m_PixelBarrelGeneral)[0]->getDouble("HALFLENGTH")*CLHEP::cm;}
+double OraclePixGeoManager::PixelBarrelRMin() {return (*m_PixelBarrelGeneral)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm;}
+double OraclePixGeoManager::PixelBarrelRMax() {return (*m_PixelBarrelGeneral)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;}
+double OraclePixGeoManager::PixelBarrelHalfLength() {return (*m_PixelBarrelGeneral)[0]->getDouble("HALFLENGTH")*GeoModelKernelUnits::cm;}
 
 // PXBI
 double OraclePixGeoManager::PixelLayerRadius() 
 {
-  return (*m_PixelLayer)[m_currentLD]->getDouble("RLAYER")*CLHEP::cm;
+  return (*m_PixelLayer)[m_currentLD]->getDouble("RLAYER")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelLadderHalfLength() 
 {
-  return (*m_PixelStave)[0]->getDouble("SUPPORTHLENGTH")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("SUPPORTHLENGTH")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelLadderWidth() 
 {
-  return (*m_PixelStave)[0]->getDouble("SUPPORTWIDTH")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("SUPPORTWIDTH")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelLadderTilt() 
 {
-  return (*m_PixelLayer)[m_currentLD]->getDouble("STAVETILT")*CLHEP::deg;
+  return (*m_PixelLayer)[m_currentLD]->getDouble("STAVETILT")*GeoModelKernelUnits::deg;
 }
 int OraclePixGeoManager::NPixelSectors() 
 {
@@ -987,7 +988,7 @@ int OraclePixGeoManager::NPixelSectors()
 
 double OraclePixGeoManager::PixelBalcony() 
 {
-  return (*m_pxbi)[m_currentLD]->getDouble("DXELEB")*CLHEP::cm;
+  return (*m_pxbi)[m_currentLD]->getDouble("DXELEB")*GeoModelKernelUnits::cm;
 }
 
 int OraclePixGeoManager::PixelNModule() 
@@ -997,17 +998,17 @@ int OraclePixGeoManager::PixelNModule()
 
 double OraclePixGeoManager::PixelModuleAngle() 
 {
-  return (*m_PixelStave)[0]->getDouble("MODULETILT")*CLHEP::deg;
+  return (*m_PixelStave)[0]->getDouble("MODULETILT")*GeoModelKernelUnits::deg;
 }
 
 double OraclePixGeoManager::PixelModuleDrDistance() 
 {
-  return (*m_PixelStave)[0]->getDouble("CENTRMODULESHIFT")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("CENTRMODULESHIFT")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelModulePosition(int im) 
 {
-  return (*m_PixelStave)[0]->getDouble("MODULEDZ")*CLHEP::cm*im;
+  return (*m_PixelStave)[0]->getDouble("MODULEDZ")*GeoModelKernelUnits::cm*im;
 }
 
 // OBSOLETE!!! TO MOVE INTO THE NEW FACTORY 
@@ -1028,23 +1029,23 @@ double OraclePixGeoManager::PixelModuleAngleSign(int im)
 
 // PBAC
 double OraclePixGeoManager::PixelCableWidth() {
-  return (*m_PixelStave)[0]->getDouble("CABLEWIDTH")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("CABLEWIDTH")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelCableThickness() {
-  return (*m_PixelStave)[0]->getDouble("CABLETHICK")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("CABLETHICK")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelCableZMax() {
-  return (*m_PixelStave)[0]->getDouble("SUPPORTHLENGTH")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("SUPPORTHLENGTH")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelCableZMin() {
-  return (*m_PixelStave)[0]->getDouble("CABLEZMIN")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("CABLEZMIN")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelCableDeltaZ() {
-  return (*m_PixelStave)[0]->getDouble("MODULEDZ")*CLHEP::cm;
+  return (*m_PixelStave)[0]->getDouble("MODULEDZ")*GeoModelKernelUnits::cm;
 }
 
 
@@ -1052,24 +1053,24 @@ double OraclePixGeoManager::PixelCableDeltaZ() {
 int OraclePixGeoManager::PixelEndcapNDisk() {return (*m_PixelEndcapGeneral)[0]->getInt("NDISK");}
 
 // Endcap container PEVO
-double  OraclePixGeoManager::PixelEndcapRMin() {return (*m_PixelEndcapGeneral)[0]->getDouble("RMIN")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelEndcapRMin() {return (*m_PixelEndcapGeneral)[0]->getDouble("RMIN")*GeoModelKernelUnits::cm;}
 
-double  OraclePixGeoManager::PixelEndcapRMax() {return (*m_PixelEndcapGeneral)[0]->getDouble("RMAX")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelEndcapRMax() {return (*m_PixelEndcapGeneral)[0]->getDouble("RMAX")*GeoModelKernelUnits::cm;}
 
-double  OraclePixGeoManager::PixelEndcapZMin() {return (*m_PixelEndcapGeneral)[0]->getDouble("ZMIN")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelEndcapZMin() {return (*m_PixelEndcapGeneral)[0]->getDouble("ZMIN")*GeoModelKernelUnits::cm;}
 
-double  OraclePixGeoManager::PixelEndcapZMax() {return (*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelEndcapZMax() {return (*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")*GeoModelKernelUnits::cm;}
 
 int OraclePixGeoManager::PixelEndcapNSupportFrames() {return (int) (*m_PixelEndcapGeneral)[0]->getDouble("NFRAME");}
 
 // Endcap Inner (PXEI)
-double  OraclePixGeoManager::PixelDiskPosition() {return (*m_PixelDisk)[m_currentLD]->getDouble("ZDISK")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelDiskPosition() {return (*m_PixelDisk)[m_currentLD]->getDouble("ZDISK")*GeoModelKernelUnits::cm;}
 
-double  OraclePixGeoManager::PixelDiskRMin() {return (*m_PixelDisk)[m_currentLD]->getDouble("RIDISK")*CLHEP::cm;}
+double  OraclePixGeoManager::PixelDiskRMin() {return (*m_PixelDisk)[m_currentLD]->getDouble("RIDISK")*GeoModelKernelUnits::cm;}
 
-double OraclePixGeoManager::PixelECSiDz1() {return (*m_PixelDisk)[m_currentLD]->getDouble("DZCOUNTER")*CLHEP::cm;}
+double OraclePixGeoManager::PixelECSiDz1() {return (*m_PixelDisk)[m_currentLD]->getDouble("DZCOUNTER")*GeoModelKernelUnits::cm;}
 
-double OraclePixGeoManager::PixelECSiDz2() {return (*m_PixelDisk)[m_currentLD]->getDouble("DZCOUNTER")*CLHEP::cm;}
+double OraclePixGeoManager::PixelECSiDz2() {return (*m_PixelDisk)[m_currentLD]->getDouble("DZCOUNTER")*GeoModelKernelUnits::cm;}
 
 int OraclePixGeoManager::PixelECNSectors1() {return (*m_PixelDisk)[m_currentLD]->getInt("NMODULE");}
 
@@ -1077,53 +1078,53 @@ int OraclePixGeoManager::PixelECNSectors2() {return (*m_PixelDisk)[m_currentLD]-
 
 // Endcap Cables PEAC
 double OraclePixGeoManager::PixelECCablesRMin() {
-  return (*m_PixelDisk)[m_currentLD]->getDouble("RMINCABLE")*CLHEP::cm;
+  return (*m_PixelDisk)[m_currentLD]->getDouble("RMINCABLE")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::PixelECCablesRMax() {
-  return (*m_PixelDisk)[m_currentLD]->getDouble("RMAXCABLE")*CLHEP::cm;
+  return (*m_PixelDisk)[m_currentLD]->getDouble("RMAXCABLE")*GeoModelKernelUnits::cm;
 }
 
 
 double OraclePixGeoManager::PixelECCablesDistance() {
-  return (*m_PixelDisk)[m_currentLD]->getDouble("ZCABLE")*CLHEP::cm;
+  return (*m_PixelDisk)[m_currentLD]->getDouble("ZCABLE")*GeoModelKernelUnits::cm;
 }
 //
 // Design
 //
 
 double OraclePixGeoManager::DesignRPActiveArea(){
-  return (*m_pxbi)[0]->getDouble("DYACTIVE")*CLHEP::cm;
+  return (*m_pxbi)[0]->getDouble("DYACTIVE")*GeoModelKernelUnits::cm;
 }
 double OraclePixGeoManager::DesignZActiveArea(){
-  return (*m_pxbi)[0]->getDouble("DZELEB")*CLHEP::cm;
+  return (*m_pxbi)[0]->getDouble("DZELEB")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::DesignPitchRP(bool isBLayer) {
-  if(isBLayer) return (*m_pxbd)[0]->getDouble("PITCHRP")*CLHEP::cm;
-  else return (*m_pxbd)[1]->getDouble("PITCHRP")*CLHEP::cm;
+  if(isBLayer) return (*m_pxbd)[0]->getDouble("PITCHRP")*GeoModelKernelUnits::cm;
+  else return (*m_pxbd)[1]->getDouble("PITCHRP")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::DesignPitchZ(bool isBLayer) {
   double pitchZ;
   if(isBLayer) {
     if (m_dc1Geometry) { // Override NOVA 
-      pitchZ = 300 * CLHEP::micrometer; 
+      pitchZ = 300 * GeoModelKernelUnits::micrometer; 
     } else {
-      pitchZ = (*m_pxbd)[0]->getDouble("PITCHZ") * CLHEP::cm;
+      pitchZ = (*m_pxbd)[0]->getDouble("PITCHZ") * GeoModelKernelUnits::cm;
     }
   } else {
-    pitchZ = (*m_pxbd)[1]->getDouble("PITCHZ") * CLHEP::cm;
+    pitchZ = (*m_pxbd)[1]->getDouble("PITCHZ") * GeoModelKernelUnits::cm;
   }
   return pitchZ;
 }
 
 double OraclePixGeoManager::DesignGapRP() {
-  return (*m_pdch)[0]->getDouble("GAPRP")*CLHEP::cm;
+  return (*m_pdch)[0]->getDouble("GAPRP")*GeoModelKernelUnits::cm;
 }
 
 double OraclePixGeoManager::DesignGapZ() {
-  return (*m_pdch)[0]->getDouble("GAPZ")*CLHEP::cm;
+  return (*m_pdch)[0]->getDouble("GAPZ")*GeoModelKernelUnits::cm;
 }
 
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.cxx
index 6a640ecb7ad8a58eccabd8bb05fe8ac402c7af7f..160edfb488baf2c572c8e31e2f65ada8d103469c 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.cxx
@@ -2,12 +2,12 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelDetectorFactory.h"
+#include "PixelDetectorFactory.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "PixelGeoModel/PixelSwitches.h" 
+#include "PixelSwitches.h" 
 
 // Envelope, as a starting point of the geometry
-#include "PixelGeoModel/GeoPixelEnvelope.h"
+#include "GeoPixelEnvelope.h"
 
 // GeoModel includes
 #include "GeoModelKernel/GeoNameTag.h"  
@@ -20,8 +20,8 @@
 #include "InDetReadoutGeometry/PixelModuleDesign.h"
 #include "InDetReadoutGeometry/PixelDetectorManager.h"
 
-#include "PixelGeoModel/OraclePixGeoManager.h"
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
+#include "OraclePixGeoManager.h"
+#include "PixelGeoModelAthenaComps.h"
 
 #include "InDetIdentifier/PixelID.h"
 
@@ -120,12 +120,12 @@ void PixelDetectorFactory::create(GeoPhysVol *world)
   m_geometryManager->SetCurrentLD(0);
   m_geometryManager->SetBarrel();
   if(msgLvl(MSG::DEBUG)) {
-    msg(MSG::DEBUG) << " B-Layer basic eta pitch: " << m_geometryManager->DesignPitchZ()/CLHEP::micrometer << "um" << endmsg;  
-    msg(MSG::DEBUG) << " B-Layer sensor thickness: " << m_geometryManager->PixelBoardThickness()/CLHEP::micrometer << "um" << endmsg;   
+    msg(MSG::DEBUG) << " B-Layer basic eta pitch: " << m_geometryManager->DesignPitchZ()/GeoModelKernelUnits::micrometer << "um" << endmsg;  
+    msg(MSG::DEBUG) << " B-Layer sensor thickness: " << m_geometryManager->PixelBoardThickness()/GeoModelKernelUnits::micrometer << "um" << endmsg;   
   }
 
   // Top level transform
-  HepGeom::Transform3D topTransform = m_geometryManager->partTransform("Pixel");
+  GeoTrf::Transform3D topTransform = m_geometryManager->partTransform("Pixel");
 
 
   //
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactory.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactory.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactory.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.cxx
index 28ffa3153b1b7244bedb0bd1a4f5929c37645c08..9731105c0ecbb1a6114f36d0c7daf70b113d9b1a 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.cxx
@@ -3,12 +3,12 @@
 */
 
 
-#include "PixelGeoModel/PixelDetectorFactoryDC2.h"
+#include "PixelDetectorFactoryDC2.h"
 
 // Envelope, as a starting point of the geometry
-//#include "PixelGeoModel/GeoPixelEnvelope.h"
-#include "PixelGeoModel/PixelDetectorDC1DC2.h"
-#include "PixelGeoModel/PixelSwitches.h" 
+//#include "GeoPixelEnvelope.h"
+#include "PixelDetectorDC1DC2.h"
+#include "PixelSwitches.h" 
 
 // GeoModel includes
 #include "GeoModelKernel/GeoNameTag.h"  
@@ -20,7 +20,7 @@
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "InDetReadoutGeometry/PixelModuleDesign.h"
 
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
+#include "PixelGeoModelAthenaComps.h"
 
 #include "InDetIdentifier/PixelID.h"
 
@@ -125,18 +125,18 @@ void PixelDetectorFactoryDC2::create(GeoPhysVol *world)
     msg(MSG::INFO) << " " << m_detectorManager->getVersion().fullDescription() << endmsg;
 
     // Printout the parameters that are different in DC1 and DC2.
-    msg(MSG::INFO) << " B-Layer basic eta pitch: " << geometryManager->DesignPitchZ(true)/CLHEP::micrometer << "um" << endmsg;
+    msg(MSG::INFO) << " B-Layer basic eta pitch: " << geometryManager->DesignPitchZ(true)/GeoModelKernelUnits::micrometer << "um" << endmsg;
   }  
   geometryManager->SetCurrentLD(0);
   geometryManager->SetBarrel();
   if(msgLvl(MSG::INFO)) 
-    msg(MSG::INFO) << " B-Layer sensor thickness: " << geometryManager->PixelBoardThickness()/CLHEP::micrometer << "um" << endmsg;   
+    msg(MSG::INFO) << " B-Layer sensor thickness: " << geometryManager->PixelBoardThickness()/GeoModelKernelUnits::micrometer << "um" << endmsg;   
   
   //
   // Create the Pixel Envelope...
   GeoPixelEnvelope pe;
   GeoVPhysVol* pephys = pe.Build() ;
-  GeoAlignableTransform * transform = new GeoAlignableTransform(HepGeom::Transform3D());
+  GeoAlignableTransform * transform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
   
   //
   // Add this to the world
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactoryDC2.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactoryDC2.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactoryDC2.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.cxx
index 1633bb780edac1671c7826cd12f4a5a14c63d669..e0a93585e536fe18d9147ad4b1eeef71a67122d3 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.cxx
@@ -2,14 +2,14 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelDetectorFactorySR1.h"
+#include "PixelDetectorFactorySR1.h"
 
-#include "PixelGeoModel/PixelSwitches.h" 
+#include "PixelSwitches.h" 
 
 // Envelope, as a starting point of the geometry
-#include "PixelGeoModel/GeoPixelBarrel.h"
-#include "PixelGeoModel/GeoPixelEndCap.h"
-#include "PixelGeoModel/GeoPixelServices.h"
+#include "GeoPixelBarrel.h"
+#include "GeoPixelEndCap.h"
+#include "GeoPixelServices.h"
 
 // GeoModel includes
 #include "GeoModelKernel/GeoNameTag.h"  
@@ -22,8 +22,8 @@
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "InDetReadoutGeometry/PixelModuleDesign.h"
 
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
-#include "PixelGeoModel/OraclePixGeoManager.h"
+#include "PixelGeoModelAthenaComps.h"
+#include "OraclePixGeoManager.h"
 
 #include "InDetIdentifier/PixelID.h"
 
@@ -110,8 +110,8 @@ void PixelDetectorFactorySR1::create(GeoPhysVol *world)
     msg(MSG::INFO) << " " << m_detectorManager->getVersion().fullDescription() << endmsg;
 
     // Printout the parameters that are different in DC1 and DC2.
-    msg(MSG::INFO) << " B-Layer basic eta pitch: " << m_geometryManager->DesignPitchZ()/CLHEP::micrometer << "um" << endmsg;
-    msg(MSG::INFO) << " B-Layer sensor thickness: " << m_geometryManager->PixelBoardThickness()/CLHEP::micrometer << "um" << endmsg;   
+    msg(MSG::INFO) << " B-Layer basic eta pitch: " << m_geometryManager->DesignPitchZ()/GeoModelKernelUnits::micrometer << "um" << endmsg;
+    msg(MSG::INFO) << " B-Layer sensor thickness: " << m_geometryManager->PixelBoardThickness()/GeoModelKernelUnits::micrometer << "um" << endmsg;   
   }  
 
   bool barrelPresent   = m_geometryManager->partPresent("Barrel");
@@ -141,7 +141,7 @@ void PixelDetectorFactorySR1::create(GeoPhysVol *world)
   } 
   
   // Top level transform
-  HepGeom::Transform3D topTransform = m_geometryManager->partTransform("Pixel");
+  GeoTrf::Transform3D topTransform = m_geometryManager->partTransform("Pixel");
 
   if (barrelPresent) {
     //
@@ -151,7 +151,7 @@ void PixelDetectorFactorySR1::create(GeoPhysVol *world)
     GeoPixelBarrel brl(pixServices);
     physVol = brl.Build();   
 
-    HepGeom::Transform3D barrelTransform = m_geometryManager->partTransform("Barrel");
+    GeoTrf::Transform3D barrelTransform = m_geometryManager->partTransform("Barrel");
     transform = new GeoAlignableTransform(topTransform*barrelTransform);
 
     // Add this to the world
@@ -178,8 +178,8 @@ void PixelDetectorFactorySR1::create(GeoPhysVol *world)
       m_geometryManager->SetPos();
       physVol = pec.Build();
       
-      HepGeom::Transform3D endcapATransform = m_geometryManager->partTransform("EndcapA");
-      transform = new GeoAlignableTransform(topTransform * endcapATransform * HepGeom::TranslateZ3D(zpos));
+      GeoTrf::Transform3D endcapATransform = m_geometryManager->partTransform("EndcapA");
+      transform = new GeoAlignableTransform(topTransform * endcapATransform * GeoTrf::TranslateZ3D(zpos));
       
       GeoNameTag* tag  = new GeoNameTag("Pixel");
       world->add(tag);
@@ -194,8 +194,8 @@ void PixelDetectorFactorySR1::create(GeoPhysVol *world)
       m_geometryManager->SetNeg();
       physVol = pec.Build();
       
-      HepGeom::Transform3D endcapCTransform = m_geometryManager->partTransform("EndcapC");
-      transform = new GeoAlignableTransform(topTransform * endcapCTransform * HepGeom::TranslateZ3D(-zpos) * HepGeom::RotateY3D(180*CLHEP::deg));
+      GeoTrf::Transform3D endcapCTransform = m_geometryManager->partTransform("EndcapC");
+      transform = new GeoAlignableTransform(topTransform * endcapCTransform * GeoTrf::TranslateZ3D(-zpos) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
       
       GeoNameTag* tag  = new GeoNameTag("Pixel");
       world->add(tag);
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactorySR1.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorFactorySR1.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorFactorySR1.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.cxx
index 0ae6886735b602304041f28bd15c509367cc991d..bec8812f87e257b10b0dab61850d771448796d7d 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.cxx
@@ -3,17 +3,17 @@
 */
 
 
-#include "PixelGeoModel/PixelDetectorTool.h"
-#include "PixelGeoModel/PixelDetectorFactory.h" 
-#include "PixelGeoModel/PixelDetectorFactorySR1.h" 
-#include "PixelGeoModel/PixelDetectorFactoryDC2.h" 
-#include "PixelGeoModel/PixelGeometryManager.h" 
-#include "PixelGeoModel/PixelSwitches.h" 
+#include "PixelDetectorTool.h"
+#include "PixelDetectorFactory.h" 
+#include "PixelDetectorFactorySR1.h" 
+#include "PixelDetectorFactoryDC2.h" 
+#include "PixelGeometryManager.h" 
+#include "PixelSwitches.h" 
 #include "PixelGeoModel/IBLParameterSvc.h"
 #include "InDetReadoutGeometry/PixelDetectorManager.h" 
 #include "InDetReadoutGeometry/InDetDD_Defs.h"
 #include "DetDescrConditions/AlignableTransformContainer.h"
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
+#include "PixelGeoModelAthenaComps.h"
 #include "GeoModelUtilities/GeoModelExperiment.h"
 #include "GaudiKernel/ServiceHandle.h"
 #include "StoreGate/StoreGateSvc.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorTool.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelDetectorTool.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelDetectorTool.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.cxx
index 582da9124626fe5503f443133aa0ca6afd7f9592..b981d52691813b11e5155f228cdd831cd54fa19c 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
+#include "PixelGeoModelAthenaComps.h"
 
 PixelGeoModelAthenaComps::PixelGeoModelAthenaComps()
   : InDetDD::AthenaComps("PixelGeoModel"),
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelGeoModelAthenaComps.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelGeoModelAthenaComps.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeoModelAthenaComps.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.cxx
index 2af97ee9680b91b8a34caf0158278ec6cc9c400e..b8f2f517b62355d71bf5e27957a5345eb5ae0f26 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelGeometryManager.h"
+#include "PixelGeometryManager.h"
 
 using namespace std;
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelGeometryManager.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.h
similarity index 98%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelGeometryManager.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.h
index a576355b95687f207f5009f050c518d60f45bec8..6d29cd6f795ea9ee5891f814b6e117e0dc9eced7 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelGeometryManager.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelGeometryManager.h
@@ -8,10 +8,10 @@
 #include <string>
 #include <iostream>
 #include <map>
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Geometry/Vector3D.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "PixelGeoModel/PixelGeoModelAthenaComps.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "PixelGeoModelAthenaComps.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 
 class InDetMaterialManager;
@@ -268,7 +268,7 @@ public:
   virtual int PixelStaveIndex(int layer)=0;
 
   // Stave support (IBL)
-  virtual HepGeom::Point3D<double> IBLStaveRotationAxis()=0; 
+  virtual GeoTrf::Vector3D IBLStaveRotationAxis()=0; 
   virtual double IBLStaveRadius()=0;
   virtual double IBLStaveFacePlateThickness()=0; 
   virtual double IBLStaveMechanicalStaveWidth()=0;
@@ -611,7 +611,7 @@ public:
   virtual const PixelID * getIdHelper() = 0;
 
   // Top Level placements
-  virtual const HepGeom::Transform3D & partTransform(const std::string & partName) const = 0; 
+  virtual const GeoTrf::Transform3D & partTransform(const std::string & partName) const = 0; 
   virtual bool partPresent(const std::string & partName) const = 0;
  
   virtual std::string getMaterialName(const std::string & volumeName, int layerdisk = 0, int typenum = 0) = 0;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.cxx
index 1b721a886477e32c6657b91d1b41f73d0919daf2..1bd7b37a9ece6dfdb4da379e1f2aaca8f14917ff 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.cxx
@@ -3,11 +3,12 @@
 */
 
 
-#include "PixelGeoModel/PixelLegacyManager.h"
+#include "PixelLegacyManager.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <string>
@@ -88,36 +89,36 @@ int PixelLegacyManager::PixelBarrelNTFrame()
 double PixelLegacyManager::PixelBarrelBFrameWidth() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pfba)[0]->getDouble("WIDTH1")*CLHEP::cm;
+    return (*m_pfba)[0]->getDouble("WIDTH1")*GeoModelKernelUnits::cm;
   } else {
-    return (*m_pfec)[0]->getDouble("WIDTH1")*CLHEP::cm;
+    return (*m_pfec)[0]->getDouble("WIDTH1")*GeoModelKernelUnits::cm;
   }
 }
 
 double PixelLegacyManager::PixelBarrelTFrameWidth() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pfba)[0]->getDouble("WIDTH2")*CLHEP::cm;
+    return (*m_pfba)[0]->getDouble("WIDTH2")*GeoModelKernelUnits::cm;
   } else {
-    return (*m_pfec)[0]->getDouble("WIDTH2")*CLHEP::cm;
+    return (*m_pfec)[0]->getDouble("WIDTH2")*GeoModelKernelUnits::cm;
   }
 }
 
 double PixelLegacyManager::PixelBarrelFrameLength() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pfba)[0]->getDouble("LENGTH")*CLHEP::cm;
+    return (*m_pfba)[0]->getDouble("LENGTH")*GeoModelKernelUnits::cm;
   } else {
-    return (*m_pfec)[0]->getDouble("LENGTH")*CLHEP::cm;
+    return (*m_pfec)[0]->getDouble("LENGTH")*GeoModelKernelUnits::cm;
   }
 }
 
 double PixelLegacyManager::PixelBarrelFrameOffset() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pfba)[0]->getDouble("OFFSET")*CLHEP::cm;
+    return (*m_pfba)[0]->getDouble("OFFSET")*GeoModelKernelUnits::cm;
   } else {
-    return (*m_pfec)[0]->getDouble("OFFSET")*CLHEP::cm;
+    return (*m_pfec)[0]->getDouble("OFFSET")*GeoModelKernelUnits::cm;
   }
 }
 
@@ -134,33 +135,33 @@ int PixelLegacyManager::PixelEndcapNTFrame()
 
 double PixelLegacyManager::PixelEndcapBFrameWidth()
 {
-  return (*m_pecf)[0]->getDouble("WIDTH1")*CLHEP::cm;
+  return (*m_pecf)[0]->getDouble("WIDTH1")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelEndcapTFrameWidth() 
 {
-  return (*m_pecf)[0]->getDouble("WIDTH2")*CLHEP::cm;
+  return (*m_pecf)[0]->getDouble("WIDTH2")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelEndcapFrameLength() 
 {
-  return (*m_pecf)[0]->getDouble("LENGTH")*CLHEP::cm;
+  return (*m_pecf)[0]->getDouble("LENGTH")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelEndcapFrameOffset() 
 {
-  return (*m_pecf)[0]->getDouble("OFFSET")*CLHEP::cm;
+  return (*m_pecf)[0]->getDouble("OFFSET")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelBFrameHalfLength() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pbba)[0]->getDouble("DZ")*CLHEP::cm;
+    return (*m_pbba)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pecb)[0]->getDouble("DZ")*CLHEP::cm;
+      return (*m_pecb)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
     } else {
-      return (*m_pbec)[0]->getDouble("DZ")*CLHEP::cm;
+      return (*m_pbec)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
     }
   }
 }
@@ -168,12 +169,12 @@ double PixelLegacyManager::PixelBFrameHalfLength()
 double PixelLegacyManager::PixelBFrameHalfWidth() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pbba)[0]->getDouble("DY")*CLHEP::cm;
+    return (*m_pbba)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pecb)[0]->getDouble("DY")*CLHEP::cm;
+      return (*m_pecb)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
     } else {
-      return (*m_pbec)[0]->getDouble("DY")*CLHEP::cm;
+      return (*m_pbec)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
     }
   }
 }
@@ -181,12 +182,12 @@ double PixelLegacyManager::PixelBFrameHalfWidth()
 double PixelLegacyManager::PixelBFrameHalfThickness() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_pbba)[0]->getDouble("DX")*CLHEP::cm;
+    return (*m_pbba)[0]->getDouble("DX")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pecb)[0]->getDouble("DX")*CLHEP::cm;
+      return (*m_pecb)[0]->getDouble("DX")*GeoModelKernelUnits::cm;
     } else {
-      return (*m_pbec)[0]->getDouble("DX")*CLHEP::cm;
+      return (*m_pbec)[0]->getDouble("DX")*GeoModelKernelUnits::cm;
     }
   }
 }
@@ -194,15 +195,15 @@ double PixelLegacyManager::PixelBFrameHalfThickness()
 double PixelLegacyManager::PixelTFrameHalfLength() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_ptba)[0]->getDouble("DZ")*CLHEP::cm;
+    return (*m_ptba)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pect)[0]->getDouble("DZ")*CLHEP::cm;
+      return (*m_pect)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
     } else {
       if (m_EndConeSFrame) {
-        return (*m_pecn)[0]->getDouble("DZ")*CLHEP::cm;
+        return (*m_pecn)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
       } else {
-        return (*m_ptec)[0]->getDouble("DZ")*CLHEP::cm;
+        return (*m_ptec)[0]->getDouble("DZ")*GeoModelKernelUnits::cm;
       } 
     }
   }
@@ -211,15 +212,15 @@ double PixelLegacyManager::PixelTFrameHalfLength()
 double PixelLegacyManager::PixelTFrameHalfWidthY() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_ptba)[0]->getDouble("DY")*CLHEP::cm;
+    return (*m_ptba)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pect)[0]->getDouble("DY")*CLHEP::cm;
+      return (*m_pect)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
     } else {
       if (m_EndConeSFrame) {
-        return (*m_pecn)[0]->getDouble("DY")*CLHEP::cm;
+        return (*m_pecn)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
       } else {
-        return (*m_ptec)[0]->getDouble("DY")*CLHEP::cm;
+        return (*m_ptec)[0]->getDouble("DY")*GeoModelKernelUnits::cm;
       } 
     }
   }
@@ -228,15 +229,15 @@ double PixelLegacyManager::PixelTFrameHalfWidthY()
 double PixelLegacyManager::PixelTFrameHalfWidthXzn() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_ptba)[0]->getDouble("DX1")*CLHEP::cm;
+    return (*m_ptba)[0]->getDouble("DX1")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pect)[0]->getDouble("DX1")*CLHEP::cm;
+      return (*m_pect)[0]->getDouble("DX1")*GeoModelKernelUnits::cm;
     } else {    
       if (m_EndConeSFrame) {
-        return (*m_pecn)[0]->getDouble("DX1")*CLHEP::cm;
+        return (*m_pecn)[0]->getDouble("DX1")*GeoModelKernelUnits::cm;
       } else {
-        return (*m_ptec)[0]->getDouble("DX1")*CLHEP::cm;
+        return (*m_ptec)[0]->getDouble("DX1")*GeoModelKernelUnits::cm;
       } 
     }
   }
@@ -245,15 +246,15 @@ double PixelLegacyManager::PixelTFrameHalfWidthXzn()
 double PixelLegacyManager::PixelTFrameHalfWidthXzp() 
 {
   if (m_BarrelInSFrame) {
-    return (*m_ptba)[0]->getDouble("DX2")*CLHEP::cm;
+    return (*m_ptba)[0]->getDouble("DX2")*GeoModelKernelUnits::cm;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pect)[0]->getDouble("DX2")*CLHEP::cm;
+      return (*m_pect)[0]->getDouble("DX2")*GeoModelKernelUnits::cm;
     } else {
       if (m_EndConeSFrame) {
-        return (*m_pecn)[0]->getDouble("DX2")*CLHEP::cm;
+        return (*m_pecn)[0]->getDouble("DX2")*GeoModelKernelUnits::cm;
       } else {
-        return (*m_ptec)[0]->getDouble("DX2")*CLHEP::cm;
+        return (*m_ptec)[0]->getDouble("DX2")*GeoModelKernelUnits::cm;
       } 
     }
   }
@@ -262,15 +263,15 @@ double PixelLegacyManager::PixelTFrameHalfWidthXzp()
 double PixelLegacyManager::PixelTFrameDzDr()
 {
   if (m_BarrelInSFrame) {
-    return (*m_ptba)[0]->getDouble("DZDR")*CLHEP::deg;
+    return (*m_ptba)[0]->getDouble("DZDR")*GeoModelKernelUnits::deg;
   } else {
     if (m_EndcapInSFrame) {
-      return (*m_pect)[0]->getDouble("DZDR")*CLHEP::cm;
+      return (*m_pect)[0]->getDouble("DZDR")*GeoModelKernelUnits::cm;
     } else {
       if (m_EndConeSFrame) {
-        return (*m_pecn)[0]->getDouble("DZDR")*CLHEP::deg;
+        return (*m_pecn)[0]->getDouble("DZDR")*GeoModelKernelUnits::deg;
       } else {
-        return (*m_ptec)[0]->getDouble("DZDR")*CLHEP::deg;
+        return (*m_ptec)[0]->getDouble("DZDR")*GeoModelKernelUnits::deg;
       } 
     }
   }
@@ -278,33 +279,33 @@ double PixelLegacyManager::PixelTFrameDzDr()
 
 double PixelLegacyManager::PixelBarrelFrameECRadius()
 {
-  return (*m_pecn)[0]->getDouble("RADIUS")*CLHEP::cm;
+  return (*m_pecn)[0]->getDouble("RADIUS")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelBarrelFrameECZPos() 
 {
-  return (*m_pecn)[0]->getDouble("Z")*CLHEP::cm;
+  return (*m_pecn)[0]->getDouble("Z")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelBarrelFrameECAlphaX() 
 {
-  return (*m_pecn)[0]->getDouble("ANGLEX")*CLHEP::deg;
+  return (*m_pecn)[0]->getDouble("ANGLEX")*GeoModelKernelUnits::deg;
 }
 
 double PixelLegacyManager::PixelBarrelFrameECAlphaY() 
 {
-  return (*m_pecn)[0]->getDouble("ANGLEY")*CLHEP::deg;
+  return (*m_pecn)[0]->getDouble("ANGLEY")*GeoModelKernelUnits::deg;
 }
 
 
 double PixelLegacyManager::PixelLadderThickness() 
 {
-  return 2 * 1.48972*CLHEP::mm;
+  return 2 * 1.48972*GeoModelKernelUnits::mm;
 }
 
 double PixelLegacyManager::PixelLadderLength() 
 {
-  return 2 * (*m_pxbi)[0]->getDouble("DZLADDER")*CLHEP::cm;
+  return 2 * (*m_pxbi)[0]->getDouble("DZLADDER")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelLadderServicesX() 
@@ -314,28 +315,28 @@ double PixelLegacyManager::PixelLadderServicesX()
 
 double PixelLegacyManager::PixelLadderServicesY() 
 {
-  return 3*CLHEP::mm;
+  return 3*GeoModelKernelUnits::mm;
 }
 
 
 double PixelLegacyManager::PixelLadderCableOffsetX() 
 {
-  return 0.099*CLHEP::mm;
+  return 0.099*GeoModelKernelUnits::mm;
 }
 
 double PixelLegacyManager::PixelLadderCableOffsetY() 
 {
-  return 4*CLHEP::mm;
+  return 4*GeoModelKernelUnits::mm;
 }
 
 double PixelLegacyManager::PixelLadderConnectorOffsetX() 
 {
-  return -5.8*CLHEP::mm;
+  return -5.8*GeoModelKernelUnits::mm;
 }
 
 double PixelLegacyManager::PixelLadderPigtailOffsetY() 
 {
-  return -0.5*CLHEP::mm - PixelLadderCableOffsetY();
+  return -0.5*GeoModelKernelUnits::mm - PixelLadderCableOffsetY();
 }
 
 
@@ -352,34 +353,34 @@ double
 PixelLegacyManager::PixelCableZStart(int index)
 {
   // In old code two cables were connected to middle. Correction stops them touching.
-  double correction = (index == 7) ? 0.000001*CLHEP::cm : 0;
-  return ((*m_poci)[index]->getDouble("Z")  -  (*m_poci)[index]->getDouble("DZ")) * CLHEP::cm + correction;
+  double correction = (index == 7) ? 0.000001*GeoModelKernelUnits::cm : 0;
+  return ((*m_poci)[index]->getDouble("Z")  -  (*m_poci)[index]->getDouble("DZ")) * GeoModelKernelUnits::cm + correction;
 }
 
 double 
 PixelLegacyManager::PixelCableZEnd(int index)
 {
   // In old code two cables were connected to middle. Correction stops them touching.
-  double correction = (index == 7) ? 0.000001*CLHEP::cm : 0;
-  return ((*m_poci)[index]->getDouble("Z") +  (*m_poci)[index]->getDouble("DZ")) * CLHEP::cm + correction;
+  double correction = (index == 7) ? 0.000001*GeoModelKernelUnits::cm : 0;
+  return ((*m_poci)[index]->getDouble("Z") +  (*m_poci)[index]->getDouble("DZ")) * GeoModelKernelUnits::cm + correction;
 }
 
 double 
 PixelLegacyManager::PixelCableWidth(int index)
 {
-  return (*m_poci)[index]->getDouble("DY") * CLHEP::cm;
+  return (*m_poci)[index]->getDouble("DY") * GeoModelKernelUnits::cm;
 }
 
 double 
 PixelLegacyManager::PixelCableThickness(int index)
 {
-  return (*m_poci)[index]->getDouble("DX")*CLHEP::cm;
+  return (*m_poci)[index]->getDouble("DX")*GeoModelKernelUnits::cm;
 }
 
 double 
 PixelLegacyManager::PixelCableStackOffset(int index)
 {
-  return (*m_poci)[index]->getDouble("X")*CLHEP::cm;
+  return (*m_poci)[index]->getDouble("X")*GeoModelKernelUnits::cm;
 }
 
 
@@ -416,47 +417,47 @@ double PixelLegacyManager::PixelTMTVariable(int iPart, const std::string & varNa
 
 double PixelLegacyManager::PixelTMTDzdr(int iPart)
 {
-  return PixelTMTVariable(iPart, "DZDR") * CLHEP::deg;
+  return PixelTMTVariable(iPart, "DZDR") * GeoModelKernelUnits::deg;
 }
 
 
 double PixelLegacyManager::PixelTMTPosX(int iPart)
 {
-  return PixelTMTVariable(iPart, "X") * CLHEP::cm;
+  return PixelTMTVariable(iPart, "X") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTPosZ(int iPart)
 {
-  return PixelTMTVariable(iPart, "Z") * CLHEP::cm;
+  return PixelTMTVariable(iPart, "Z") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTLength(int iPart)
 {
-  return 2 * PixelTMTVariable(iPart, "DZ") * CLHEP::cm;
+  return 2 * PixelTMTVariable(iPart, "DZ") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTWidthX2(int iPart)
 {
-  return 2 * PixelTMTVariable(iPart, "DX2") * CLHEP::cm;
+  return 2 * PixelTMTVariable(iPart, "DX2") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTWidthX1(int iPart)
 {
-  return 2 * PixelTMTVariable(iPart, "DX1") * CLHEP::cm;
+  return 2 * PixelTMTVariable(iPart, "DX1") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTWidthY(int iPart)
 {
-  return 2 * PixelTMTVariable(iPart, "DY") * CLHEP::cm;
+  return 2 * PixelTMTVariable(iPart, "DY") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTBaseX1(int iPart)
 {
   double theta = PixelTMTDzdr(iPart);
   if (theta == 0) {
-    return PixelTMTVariable(iPart, "X")*CLHEP::cm + 0.25*(PixelTMTWidthX1(iPart)+PixelTMTWidthX2(iPart));
+    return PixelTMTVariable(iPart, "X")*GeoModelKernelUnits::cm + 0.25*(PixelTMTWidthX1(iPart)+PixelTMTWidthX2(iPart));
   } else {
-    return  PixelTMTVariable(iPart, "X")*CLHEP::cm - 0.5*PixelTMTLength(iPart) * tan(theta) + 0.5*PixelTMTWidthX1(iPart);
+    return  PixelTMTVariable(iPart, "X")*GeoModelKernelUnits::cm - 0.5*PixelTMTLength(iPart) * tan(theta) + 0.5*PixelTMTWidthX1(iPart);
   }
 }
 
@@ -464,15 +465,15 @@ double PixelLegacyManager::PixelTMTBaseX2(int iPart)
 {
   double theta = PixelTMTDzdr(iPart);
   if (theta == 0) {
-    return PixelTMTVariable(iPart, "X")*CLHEP::cm + 0.25*(PixelTMTWidthX1(iPart)+PixelTMTWidthX2(iPart));
+    return PixelTMTVariable(iPart, "X")*GeoModelKernelUnits::cm + 0.25*(PixelTMTWidthX1(iPart)+PixelTMTWidthX2(iPart));
   } else {
-    return PixelTMTVariable(iPart, "X")*CLHEP::cm + 0.5*PixelTMTLength(iPart) * tan(theta) + 0.5*PixelTMTWidthX2(iPart);
+    return PixelTMTVariable(iPart, "X")*GeoModelKernelUnits::cm + 0.5*PixelTMTLength(iPart) * tan(theta) + 0.5*PixelTMTWidthX2(iPart);
   }
 }
 
 double PixelLegacyManager::PixelTMTPosY(int iPart)
 {
-  return PixelTMTVariable(iPart, "Y") * CLHEP::cm;
+  return PixelTMTVariable(iPart, "Y") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelTMTPosZ1(int iPart)
@@ -497,52 +498,52 @@ bool PixelLegacyManager::PixelTMTPerModule(int iPart)
 //
 double PixelLegacyManager::PixelOmegaUpperBendX()
 {
-  return (*m_poti)[2]->getDouble("X") * CLHEP::cm;
+  return (*m_poti)[2]->getDouble("X") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaUpperBendY()
 {
-  return (*m_poti)[2]->getDouble("Y") * CLHEP::cm;
+  return (*m_poti)[2]->getDouble("Y") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaUpperBendRadius()
 {
-  return (*m_poti)[2]->getDouble("RMAX") * CLHEP::cm;
+  return (*m_poti)[2]->getDouble("RMAX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaLowerBendX()
 {
-  return (*m_poti)[0]->getDouble("X") * CLHEP::cm;
+  return (*m_poti)[0]->getDouble("X") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaLowerBendY()
 {
-  return (*m_poti)[0]->getDouble("Y") * CLHEP::cm;
+  return (*m_poti)[0]->getDouble("Y") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaLowerBendRadius()
 {
-  return (*m_poti)[0]->getDouble("RMAX") * CLHEP::cm;
+  return (*m_poti)[0]->getDouble("RMAX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaWallThickness()
 {
-  return ((*m_poti)[0]->getDouble("RMAX") - (*m_poti)[0]->getDouble("RMIN")) * CLHEP::cm;
+  return ((*m_poti)[0]->getDouble("RMAX") - (*m_poti)[0]->getDouble("RMIN")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaLength()
 {
-  return 2. * (*m_poti)[0]->getDouble("DZ") * CLHEP::cm;
+  return 2. * (*m_poti)[0]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaStartY()
 {
-  return ((*m_posi)[0]->getDouble("Y") + 0.5*(*m_posi)[0]->getDouble("DY")) * CLHEP::cm;
+  return ((*m_posi)[0]->getDouble("Y") + 0.5*(*m_posi)[0]->getDouble("DY")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaEndY()
 {
-  return ((*m_posi)[1]->getDouble("Y") - 0.5*(*m_posi)[1]->getDouble("DY")) * CLHEP::cm;
+  return ((*m_posi)[1]->getDouble("Y") - 0.5*(*m_posi)[1]->getDouble("DY")) * GeoModelKernelUnits::cm;
 }
 
 //
@@ -551,42 +552,42 @@ double PixelLegacyManager::PixelOmegaEndY()
 
 double PixelLegacyManager::PixelAlTubeUpperBendX()
 {
-  return (*m_poti)[5]->getDouble("X") * CLHEP::cm;
+  return (*m_poti)[5]->getDouble("X") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeUpperBendY()
 {
-  return (*m_poti)[5]->getDouble("Y") * CLHEP::cm;
+  return (*m_poti)[5]->getDouble("Y") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeUpperBendRadius()
 {
-  return (*m_poti)[5]->getDouble("RMAX") * CLHEP::cm;
+  return (*m_poti)[5]->getDouble("RMAX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeLowerBendX()
 {
-  return (*m_poti)[3]->getDouble("X") * CLHEP::cm;
+  return (*m_poti)[3]->getDouble("X") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeLowerBendY()
 {
-  return (*m_poti)[3]->getDouble("Y") * CLHEP::cm;
+  return (*m_poti)[3]->getDouble("Y") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeLowerBendRadius()
 {
-  return (*m_poti)[3]->getDouble("RMAX") * CLHEP::cm;
+  return (*m_poti)[3]->getDouble("RMAX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeWallThickness()
 {
-  return ((*m_poti)[3]->getDouble("RMAX") - (*m_poti)[3]->getDouble("RMIN")) * CLHEP::cm;
+  return ((*m_poti)[3]->getDouble("RMAX") - (*m_poti)[3]->getDouble("RMIN")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelAlTubeLength()
 {
-  return 2 * (*m_poti)[3]->getDouble("DZ") * CLHEP::cm;
+  return 2 * (*m_poti)[3]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 //
@@ -600,32 +601,32 @@ int PixelLegacyManager::PixelNumOmegaGlueElements()
 
 double PixelLegacyManager::PixelOmegaGlueStartX(int index)
 {
-  return ((*m_posi)[index+2]->getDouble("X") - 0.5*(*m_posi)[index+2]->getDouble("DX")) * CLHEP::cm;
+  return ((*m_posi)[index+2]->getDouble("X") - 0.5*(*m_posi)[index+2]->getDouble("DX")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaGlueThickness(int index)
 {
-  return (*m_posi)[index+2]->getDouble("DX") * CLHEP::cm;
+  return (*m_posi)[index+2]->getDouble("DX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaGlueStartY(int index)
 {
-  return ((*m_posi)[index+2]->getDouble("Y") - 0.5*(*m_posi)[index+2]->getDouble("DY")) * CLHEP::cm;
+  return ((*m_posi)[index+2]->getDouble("Y") - 0.5*(*m_posi)[index+2]->getDouble("DY")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaGlueEndY(int index)
 {
-  return ((*m_posi)[index+2]->getDouble("Y") + 0.5*(*m_posi)[index+2]->getDouble("DY")) * CLHEP::cm;
+  return ((*m_posi)[index+2]->getDouble("Y") + 0.5*(*m_posi)[index+2]->getDouble("DY")) * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaGlueLength(int index)
 {
-  return 2 * (*m_posi)[index+2]->getDouble("DZ") * CLHEP::cm;
+  return 2 * (*m_posi)[index+2]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelOmegaGluePosZ(int index)
 {
-  return (*m_posi)[index+2]->getDouble("Z") * CLHEP::cm;
+  return (*m_posi)[index+2]->getDouble("Z") * GeoModelKernelUnits::cm;
 }
 
 int PixelLegacyManager::PixelOmegaGlueTypeNum(int index)
@@ -639,24 +640,24 @@ int PixelLegacyManager::PixelOmegaGlueTypeNum(int index)
 
 double PixelLegacyManager::PixelFluidZ1(int index)
 {
-  double dz = (*m_pcff)[index%2]->getDouble("DZ")*CLHEP::cm;
-  double posz = (*m_pcff)[index%2]->getDouble("Z")*CLHEP::cm;
+  double dz = (*m_pcff)[index%2]->getDouble("DZ")*GeoModelKernelUnits::cm;
+  double posz = (*m_pcff)[index%2]->getDouble("Z")*GeoModelKernelUnits::cm;
   return posz-dz;
 }
 
 double PixelLegacyManager::PixelFluidZ2(int index)
 {
-  double dz = (*m_pcff)[index%2]->getDouble("DZ")*CLHEP::cm;
-  double posz = (*m_pcff)[index%2]->getDouble("Z")*CLHEP::cm;
+  double dz = (*m_pcff)[index%2]->getDouble("DZ")*GeoModelKernelUnits::cm;
+  double posz = (*m_pcff)[index%2]->getDouble("Z")*GeoModelKernelUnits::cm;
   return posz+dz;
 }
 
 double PixelLegacyManager::PixelFluidThick1(int index)
 {
   if (index < 2) {
-    return 2*(*m_pcff)[index%2]->getDouble("DX1")*CLHEP::cm;
+    return 2*(*m_pcff)[index%2]->getDouble("DX1")*GeoModelKernelUnits::cm;
   } else {
-    return 2*(*m_pcff)[index%2]->getDouble("DX2")*CLHEP::cm;
+    return 2*(*m_pcff)[index%2]->getDouble("DX2")*GeoModelKernelUnits::cm;
   }
 }
 
@@ -664,26 +665,26 @@ double PixelLegacyManager::PixelFluidThick1(int index)
 double PixelLegacyManager::PixelFluidThick2(int index)
 {
   if (index < 2) {
-    return 2*(*m_pcff)[index%2]->getDouble("DX2")*CLHEP::cm;
+    return 2*(*m_pcff)[index%2]->getDouble("DX2")*GeoModelKernelUnits::cm;
   } else {
-    return 2*(*m_pcff)[index%2]->getDouble("DX1")*CLHEP::cm;
+    return 2*(*m_pcff)[index%2]->getDouble("DX1")*GeoModelKernelUnits::cm;
   }
 }
 
 double PixelLegacyManager::PixelFluidWidth(int index)
 {
-  return 2*(*m_pcff)[index%2]->getDouble("DY")*CLHEP::cm;
+  return 2*(*m_pcff)[index%2]->getDouble("DY")*GeoModelKernelUnits::cm;
 }
 
 
 double PixelLegacyManager::PixelFluidX(int index)
 {
-  return (*m_pcff)[index%2]->getDouble("X")*CLHEP::cm;
+  return (*m_pcff)[index%2]->getDouble("X")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelFluidY(int index)
 {
-  return (*m_pcff)[index%2]->getDouble("Y")*CLHEP::cm;
+  return (*m_pcff)[index%2]->getDouble("Y")*GeoModelKernelUnits::cm;
 }
 
 int PixelLegacyManager::PixelFluidType(int index)
@@ -715,17 +716,17 @@ int PixelLegacyManager::PixelFluidOrient(int layer, int phi)
 //
 double PixelLegacyManager::PixelPigtailThickness()
 {
-  return (*m_poai)[0]->getDouble("DX") * CLHEP::cm;
+  return (*m_poai)[0]->getDouble("DX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailStartY()
 {
-  return -0.5*(*m_poai)[0]->getDouble("DY") * CLHEP::cm;
+  return -0.5*(*m_poai)[0]->getDouble("DY") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailEndY()
 {
-  return  0.5*(*m_poai)[0]->getDouble("DY") * CLHEP::cm;
+  return  0.5*(*m_poai)[0]->getDouble("DY") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailFlatWidthZ()
@@ -733,59 +734,59 @@ double PixelLegacyManager::PixelPigtailFlatWidthZ()
   // Assume its actually the full width but in old geometry it was interpreted as a half width so we
   // multiply by 2. This gives the flat section twice the width of the curved section which I don't think was the 
   // intention.
-  return 2*(*m_poai)[0]->getDouble("DZ") * CLHEP::cm;
+  return 2*(*m_poai)[0]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailWidthZ()
 {
-  return 2*(*m_pobi)[0]->getDouble("DZ") * CLHEP::cm;
+  return 2*(*m_pobi)[0]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 // FIXME some weird offset
 double PixelLegacyManager::PixelPigtailPosX()
 {
-  return (*m_poai)[0]->getDouble("X") * CLHEP::cm + PixelLadderConnectorOffsetX();
+  return (*m_poai)[0]->getDouble("X") * GeoModelKernelUnits::cm + PixelLadderConnectorOffsetX();
 }
 
 double PixelLegacyManager::PixelPigtailPosZ()
 {
-  return (*m_poai)[0]->getDouble("Z") * CLHEP::cm;
+  return (*m_poai)[0]->getDouble("Z") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailBendX()
 {
-  return (*m_pobi)[0]->getDouble("X") * CLHEP::cm + PixelLadderConnectorOffsetX();
+  return (*m_pobi)[0]->getDouble("X") * GeoModelKernelUnits::cm + PixelLadderConnectorOffsetX();
 }
 
 double PixelLegacyManager::PixelPigtailBendY()
 {
-  return (*m_pobi)[0]->getDouble("Y") * CLHEP::cm + PixelLadderPigtailOffsetY();
+  return (*m_pobi)[0]->getDouble("Y") * GeoModelKernelUnits::cm + PixelLadderPigtailOffsetY();
 }
 
 double PixelLegacyManager::PixelPigtailBendRMin()
 {
-  return (*m_pobi)[0]->getDouble("RMIN") * CLHEP::cm;
+  return (*m_pobi)[0]->getDouble("RMIN") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailBendRMax()
 {
-  return (*m_pobi)[0]->getDouble("RMAX") * CLHEP::cm;
+  return (*m_pobi)[0]->getDouble("RMAX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelPigtailBendPhiMin()
 {
-  return (*m_pobi)[0]->getDouble("PHI1") * CLHEP::deg;
+  return (*m_pobi)[0]->getDouble("PHI1") * GeoModelKernelUnits::deg;
 }
 
 double PixelLegacyManager::PixelPigtailBendPhiMax()
 {
-  return (*m_pobi)[0]->getDouble("PHI2") * CLHEP::deg;
+  return (*m_pobi)[0]->getDouble("PHI2") * GeoModelKernelUnits::deg;
 }
 
 double PixelLegacyManager::PixelPigtailEnvelopeLength()
 {
   // FIXME Check
-  return 2*(*m_posi)[9]->getDouble("DZ") * CLHEP::cm;
+  return 2*(*m_posi)[9]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 //
@@ -798,22 +799,22 @@ int PixelLegacyManager::PixelNumConnectorElements()
 
 double PixelLegacyManager::PixelConnectorWidthX(int index)
 {
-  return (*m_poai)[index+1]->getDouble("DX") * CLHEP::cm;
+  return (*m_poai)[index+1]->getDouble("DX") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelConnectorWidthY(int index)
 {
-  return (*m_poai)[index+1]->getDouble("DY") * CLHEP::cm;
+  return (*m_poai)[index+1]->getDouble("DY") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelConnectorWidthZ(int index)
 {
-  return 2*(*m_poai)[index+1]->getDouble("DZ") * CLHEP::cm;
+  return 2*(*m_poai)[index+1]->getDouble("DZ") * GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::PixelConnectorPosX(int index)
 {
-  return (*m_poai)[index+1]->getDouble("X") * CLHEP::cm + PixelLadderConnectorOffsetX();
+  return (*m_poai)[index+1]->getDouble("X") * GeoModelKernelUnits::cm + PixelLadderConnectorOffsetX();
 }
 
 double PixelLegacyManager::PixelConnectorPosY(int)
@@ -823,8 +824,8 @@ double PixelLegacyManager::PixelConnectorPosY(int)
 
 double PixelLegacyManager::PixelConnectorPosZ(int index)
 {
-  // same as  (*m_pobi)[0]->getDouble("Z") * CLHEP::cm;
-  return (*m_poai)[index+1]->getDouble("Z") * CLHEP::cm;
+  // same as  (*m_pobi)[0]->getDouble("Z") * GeoModelKernelUnits::cm;
+  return (*m_poai)[index+1]->getDouble("Z") * GeoModelKernelUnits::cm;
 }
 
 
@@ -907,19 +908,19 @@ int PixelLegacyManager::EmptyRowConnections(int index)
 
 double PixelLegacyManager::DesignRPActiveArea()
 {
-  return (*m_pxbi)[0]->getDouble("DYACTIVE")*CLHEP::cm;
+  return (*m_pxbi)[0]->getDouble("DYACTIVE")*GeoModelKernelUnits::cm;
 
 }
 
 double PixelLegacyManager::DesignZActiveArea()
 {
-  return (*m_pxbi)[0]->getDouble("DZELEB")*CLHEP::cm;
+  return (*m_pxbi)[0]->getDouble("DZELEB")*GeoModelKernelUnits::cm;
 }
     
 double PixelLegacyManager::DesignPitchRP(bool isBLayer)
 {
   int type = designType(isBLayer);
-  return (*m_pxbd)[type]->getDouble("PITCHRP")*CLHEP::cm;
+  return (*m_pxbd)[type]->getDouble("PITCHRP")*GeoModelKernelUnits::cm;
 }
 
 // FIXME m_dc1Geometry
@@ -929,9 +930,9 @@ double PixelLegacyManager::DesignPitchZ(bool isBLayer)
   double pitchZ;
   if(isBLayer && m_dc1Geometry) {
     // Override NOVA 
-    pitchZ = 300 * CLHEP::micrometer; 
+    pitchZ = 300 * GeoModelKernelUnits::micrometer; 
   } else {
-    pitchZ = (*m_pxbd)[type]->getDouble("PITCHZ") * CLHEP::cm;
+    pitchZ = (*m_pxbd)[type]->getDouble("PITCHZ") * GeoModelKernelUnits::cm;
   }
   return pitchZ;
 }
@@ -944,12 +945,12 @@ double PixelLegacyManager::DesignPitchZLong(bool isBLayer)
 
 double PixelLegacyManager::DesignGapRP()
 {
-  return (*m_pdch)[0]->getDouble("GAPRP")*CLHEP::cm;
+  return (*m_pdch)[0]->getDouble("GAPRP")*GeoModelKernelUnits::cm;
 }
 
 double PixelLegacyManager::DesignGapZ()
 {
-  return (*m_pdch)[0]->getDouble("GAPZ")*CLHEP::cm;
+  return (*m_pdch)[0]->getDouble("GAPZ")*GeoModelKernelUnits::cm;
 }
 
 int PixelLegacyManager::DesignCircuitsEta()
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelLegacyManager.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelLegacyManager.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelLegacyManager.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.cxx
index de8662a400b566067eeb010fb7360463ac5f3287..8ae48dc8c516cbceb14531b58d4bd2aa9c75b6b9 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelMaterialMap.h"
+#include "PixelMaterialMap.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelMaterialMap.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelMaterialMap.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelMaterialMap.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.cxx
index 1b09f63cf73adbe6b9d7657be45d1736c57154c2..c6fd36caa6c1b618cd5c2a6f4eb7058240a435f5 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelStaveTypes.h"
+#include "PixelStaveTypes.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
 
 #include "RDBAccessSvc/IRDBRecordset.h"
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelStaveTypes.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelStaveTypes.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelStaveTypes.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.cxx
index ee874fb791998efe53f8bbf0200a393e1ff5f9db..ee273c1f38afaf81c6058b8d6c5a1b73e5fca157 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "PixelGeoModel/PixelSwitches.h"
+#include "PixelSwitches.h"
 
 PixelSwitches::PixelSwitches()
   : m_services(true),
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelSwitches.h b/InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.h
similarity index 100%
rename from InnerDetector/InDetDetDescr/PixelGeoModel/PixelGeoModel/PixelSwitches.h
rename to InnerDetector/InDetDetDescr/PixelGeoModel/src/PixelSwitches.h
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/src/components/PixelGeoModel_entries.cxx b/InnerDetector/InDetDetDescr/PixelGeoModel/src/components/PixelGeoModel_entries.cxx
index 5e9ef7510a3c71633156db871247a7d5e736b83a..93750eecd121c2243aaab53671a6a7aee031acbd 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/src/components/PixelGeoModel_entries.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/src/components/PixelGeoModel_entries.cxx
@@ -1,4 +1,4 @@
-#include "PixelGeoModel/PixelDetectorTool.h"
+#include "../PixelDetectorTool.h"
 #include "PixelGeoModel/IBLParameterSvc.h"
 
 DECLARE_COMPONENT( PixelDetectorTool )
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/SCT_GeoModel/CMakeLists.txt
index 320b94bf0b9dff27919f7d86228a1220c6a518c0..edc57338d200d59973fab1aa4665782dfedbfbc2 100644
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/CMakeLists.txt
@@ -9,8 +9,8 @@ atlas_subdir( SCT_GeoModel )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel
                           InnerDetector/InDetDetDescr/InDetGeoModelUtils
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
@@ -26,22 +26,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
-atlas_add_library( SCT_GeoModelLib
-                   src/*.cxx
-                   PUBLIC_HEADERS SCT_GeoModel
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel InDetGeoModelUtils InDetReadoutGeometry StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES SGTools AthenaPoolUtilities DetDescrConditions Identifier InDetIdentifier )
-
 atlas_add_component( SCT_GeoModel
+		     src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions Identifier InDetIdentifier SCT_GeoModelLib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions Identifier InDetIdentifier )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_GeneralParameters.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_GeneralParameters.h
index 2f00b2724ef6931310aa034864e9f395be48fc87..922a69f6fce3319641cd226b17b9b0b0ecdf17bc 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_GeneralParameters.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_GeneralParameters.h
@@ -5,7 +5,7 @@
 #ifndef SCT_GeoModel_SCT_GeneralParameters_H
 #define SCT_GeoModel_SCT_GeneralParameters_H
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <map>
 #include <string>
@@ -31,7 +31,7 @@ public:
   double biasVoltage() const;
   double depletionVoltage() const;
 
-  const HepGeom::Transform3D & partTransform(const std::string & partName) const; 
+  const GeoTrf::Transform3D & partTransform(const std::string & partName) const; 
   bool partPresent(const std::string & partName) const;
   
 private:
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_InnerSide.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_InnerSide.h
index 44681ab41a5f89b971ae1250c0f2afd355064657..fd91a3788d0175bd1e4b52a075126bed8718858e 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_InnerSide.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_InnerSide.h
@@ -10,8 +10,9 @@
 #ifndef SCT_GEOMODEL_SCT_INNERSIDE_H
 #define SCT_GEOMODEL_SCT_INNERSIDE_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "SCT_GeoModel/SCT_ComponentFactory.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <string>
 
@@ -42,8 +43,8 @@ public:
   double width()     const {return m_width;}
   double length()    const {return m_length;}
 
-  CLHEP::Hep3Vector * env1RefPointVector() const {return m_env1RefPointVector;}
-  CLHEP::Hep3Vector * env2RefPointVector() const {return m_env2RefPointVector;}
+  GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
   // *** End of modified lines. ------------------ (00)*********************************
 
 
@@ -76,8 +77,8 @@ private:
 
   // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (02)*********************************
   // *** -->>                                      (02)*********************************
-  CLHEP::Hep3Vector * m_env1RefPointVector;
-  CLHEP::Hep3Vector * m_env2RefPointVector;
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
   // *** End of modified lines. ------------------ (02)*********************************
 
 };
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Module.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Module.h
index c0e27493b5dda77ed0400b0012a4c2ca82cb2d40..cd739b6b249d5f9ebeaffb8f3e6b61a3e5f184e9 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Module.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Module.h
@@ -5,10 +5,9 @@
 #ifndef SCT_GEOMODEL_SCT_MODULE_H
 #define SCT_GEOMODEL_SCT_MODULE_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "SCT_GeoModel/SCT_ComponentFactory.h"
-
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <string>
 
@@ -46,8 +45,8 @@ public:
   double env2Width()     const {return m_env2Width;}
   double env2Length()    const {return m_env2Length;}
 
-  CLHEP::Hep3Vector * env1RefPointVector() const {return m_env1RefPointVector;}
-  CLHEP::Hep3Vector * env2RefPointVector() const {return m_env2RefPointVector;}
+  GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
 
   double sensorGap()    const {return m_sensorGap;}
   double stereoInner()  const {return m_stereoInner;}
@@ -97,12 +96,12 @@ private:
   const SCT_BaseBoard * m_baseBoard;
   //const SCT_Sensor          * m_sensor; // 14:00 Thu 14th Jul 2005 D.Naito removed.
 
-  HepGeom::Transform3D * m_innerSidePos;
-  HepGeom::Transform3D * m_outerSidePos;
-  HepGeom::Translate3D * m_baseBoardPos; // 6th Apr 2005 S.Mima
+  GeoTrf::Transform3D * m_innerSidePos;
+  GeoTrf::Transform3D * m_outerSidePos;
+  GeoTrf::Translate3D * m_baseBoardPos; // 6th Apr 2005 S.Mima
 
-  CLHEP::Hep3Vector * m_env1RefPointVector;
-  CLHEP::Hep3Vector * m_env2RefPointVector;
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
 
 };
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_OuterSide.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_OuterSide.h
index cd458f9324e238d6cf970148d535f9c77dedcb1f..d3fd0dab87777e53379a9c22d98f25971cbfb637 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_OuterSide.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_OuterSide.h
@@ -5,9 +5,9 @@
 #ifndef SCT_GEOMODEL_SCT_OUTERSIDE_H
 #define SCT_GEOMODEL_SCT_OUTERSIDE_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "SCT_GeoModel/SCT_ComponentFactory.h"
-#include "CLHEP/Vector/ThreeVector.h"
-
+#include "GeoModelKernel/GeoDefinitions.h"
 #include <string>
 
 class GeoMaterial;
@@ -38,8 +38,8 @@ public:
   double width()     const {return m_width;}
   double length()    const {return m_length;}
 
-  CLHEP::Hep3Vector * env1RefPointVector() const {return m_env1RefPointVector;}
-  CLHEP::Hep3Vector * env2RefPointVector() const {return m_env2RefPointVector;}
+  GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
 
   const SCT_Hybrid       * hybrid() const {return m_hybrid;}
   const SCT_Pigtail      * pigtail()      const {return m_pigtail;}
@@ -67,8 +67,8 @@ private:
   GeoTransform * m_hybridPos;
   GeoTransform * m_pigtailPos;
   GeoTransform * m_sensorPos;
-  CLHEP::Hep3Vector * m_env1RefPointVector;
-  CLHEP::Hep3Vector * m_env2RefPointVector;
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
 
 };
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Ski.h b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Ski.h
index 71491fd9bc35db3d0ebd02baad8efef782da0c1f..63b035611703e85256e707e1b7d9c180e6a9c52e 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Ski.h
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/SCT_GeoModel/SCT_Ski.h
@@ -7,8 +7,8 @@
 
 #include "SCT_GeoModel/SCT_ComponentFactory.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
 #include <string>
 #include <vector>
@@ -58,8 +58,8 @@ public:
   const SCT_CoolingPipe * coolingPipe() const {return m_coolingPipe;}   
 
   GeoTransform * getRefPointTransform() const {return m_refPointTransform;}
-  CLHEP::Hep3Vector * env1RefPointVector() const {return m_env1RefPointVector;}
-  CLHEP::Hep3Vector * env2RefPointVector() const {return m_env2RefPointVector;}
+  GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
   double env1Thickness() const {return m_env1Thickness;}
   double env1Width()     const {return m_env1Width;}
   double env2Thickness() const {return m_env2Thickness;}
@@ -124,9 +124,9 @@ private:
   GeoTransform * m_coolingPipePos;
 
   //! For calculations of envelopes of SCT_DetailLayer.
-  CLHEP::Hep3Vector * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env1RefPointVector;
   //! For calculations of envelopes of SCT_DetailLayer.
-  CLHEP::Hep3Vector * m_env2RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
 
   double m_env1Thickness;
   double m_env1Width;
@@ -134,7 +134,7 @@ private:
   double m_env2Width;
 
   std::vector<GeoNameTag *> m_nameTag;
-  std::vector<HepGeom::Transform3D> m_modulePos;
+  std::vector<GeoTrf::Transform3D> m_modulePos;
   std::vector<GeoTransform *> m_doglegPos;
   std::vector<GeoTransform *> m_coolingBlockPos;
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Barrel.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Barrel.cxx
index d23c7c67504856eb81aa17879bee1e507bcf9b12..ce889524052db66238e836c5be1891775fd6147a 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Barrel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Barrel.cxx
@@ -33,7 +33,7 @@
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 
@@ -59,7 +59,7 @@ SCT_Barrel::getParameters()
   m_thermalShieldEndWallThickness = parameters->thermalShieldEndCapThickness();
 
   // Clearannce in z between layer and interlink.
-  m_zClearance = 1*CLHEP::mm;
+  m_zClearance = 1*GeoModelKernelUnits::mm;
 
   // Layer internal structure and services depend on geometry version
   m_isOldGeometry = parameters->isOldGeometry();
@@ -117,7 +117,7 @@ SCT_Barrel::build(SCT_Identifier id) const
     barrel->add(new GeoNameTag("Layer#"+intToString(iLayer)));
     barrel->add(new GeoIdentifierTag(iLayer)); // Identifier layer= iLayer
     id.setLayerDisk(iLayer); 
-    GeoAlignableTransform * transform = new GeoAlignableTransform(HepGeom::Transform3D());
+    GeoAlignableTransform * transform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
     barrel->add(transform);
     GeoVPhysVol * layerPV = layer.build(id);
     barrel->add(layerPV);
@@ -129,18 +129,18 @@ SCT_Barrel::build(SCT_Identifier id) const
   // Build and place the interlinks
   double interLinkZPos = 0.;
   interLinkZPos = 0.5 * layerLength + m_zClearance + 0.5 * interLink.length();
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(+interLinkZPos)));
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+interLinkZPos)));
   barrel->add(interLink.getVolume());
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(-interLinkZPos)));
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-interLinkZPos)));
   barrel->add(interLink.getVolume());
 
   // Build and place the cooling spiders
   double spiderZPos = 0.;
   SCT_Spider spider("Spider");
   spiderZPos =  interLinkZPos + 0.5*interLink.length() + 0.5*spider.length();
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(+spiderZPos)));
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+spiderZPos)));
   barrel->add(spider.getVolume());
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(-spiderZPos)));
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-spiderZPos)));
   barrel->add(spider.getVolume());
 
   // Build and place the thermal shield.
@@ -151,9 +151,9 @@ SCT_Barrel::build(SCT_Identifier id) const
 
   // Build and place SCT to Pixel attachment
   SCT_PixelAttachment pixelAttachment("AttachmentPixelToSCT");
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(+pixelAttachment.zPosition()))); // +ve z
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+pixelAttachment.zPosition()))); // +ve z
   barrel->add(pixelAttachment.getVolume());
-  barrel->add(new GeoTransform(HepGeom::TranslateZ3D(-pixelAttachment.zPosition()))); // -ve z
+  barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-pixelAttachment.zPosition()))); // -ve z
   barrel->add(pixelAttachment.getVolume());
 
   // Extra Material
@@ -204,8 +204,8 @@ void SCT_Barrel::buildThermalShield(GeoFullPhysVol * parent) const
   const GeoMaterial* bulkheadMaterial = materials.getMaterialForVolume(bulkheadMaterialName,bulkheadShape->volume());
   const GeoLogVol  * bulkheadLog = new GeoLogVol("ThShieldBulkhead", bulkheadShape, bulkheadMaterial);
   GeoPhysVol * bulkhead = new GeoPhysVol(bulkheadLog);
-  GeoTransform * bulkheadPosPlus  =  new GeoTransform(HepGeom::TranslateZ3D(+(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
-  GeoTransform * bulkheadPosMinus =  new GeoTransform(HepGeom::TranslateZ3D(-(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
+  GeoTransform * bulkheadPosPlus  =  new GeoTransform(GeoTrf::TranslateZ3D(+(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
+  GeoTransform * bulkheadPosMinus =  new GeoTransform(GeoTrf::TranslateZ3D(-(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
   parent->add(bulkheadPosPlus);
   parent->add(bulkhead);
   parent->add(bulkheadPosMinus);
@@ -216,8 +216,8 @@ void SCT_Barrel::buildThermalShield(GeoFullPhysVol * parent) const
   const GeoMaterial* endPanelMaterial = materials.getMaterialForVolume(endPanelMaterialName,endPanelShape->volume());
   const GeoLogVol  * endPanelLog = new GeoLogVol("ThShieldEndPanel", endPanelShape, endPanelMaterial);
   GeoPhysVol * endPanel = new GeoPhysVol(endPanelLog);
-  GeoTransform * endPanelPosPlus  =  new GeoTransform(HepGeom::TranslateZ3D(+(endPanelZMax-0.5*endPanelThickness)));
-  GeoTransform * endPanelPosMinus =  new GeoTransform(HepGeom::TranslateZ3D(-(endPanelZMax-0.5*endPanelThickness)));
+  GeoTransform * endPanelPosPlus  =  new GeoTransform(GeoTrf::TranslateZ3D(+(endPanelZMax-0.5*endPanelThickness)));
+  GeoTransform * endPanelPosMinus =  new GeoTransform(GeoTrf::TranslateZ3D(-(endPanelZMax-0.5*endPanelThickness)));
   parent->add(endPanelPosPlus);
   parent->add(endPanel);
   parent->add(endPanelPosMinus);
@@ -263,8 +263,8 @@ void SCT_Barrel::buildEMIShield(GeoFullPhysVol * parent) const
   } else {
     const GeoTube* cutOut = new GeoTube(innerRadius, outerRadius, 0.5*pixelAttachmentLength);
     //    std::cout << "Cut-out volume = " << cutOut->volume() << std::endl; 
-    const GeoShape* emiTemp = (GeoShape*)&(emiShieldTube->subtract(*cutOut << HepGeom::TranslateZ3D(pixelAttachmentZpos)));
-    emiShieldShape = (GeoShape*)&emiTemp->subtract(*cutOut << HepGeom::TranslateZ3D(-pixelAttachmentZpos));
+    const GeoShape* emiTemp = (GeoShape*)&(emiShieldTube->subtract(*cutOut << GeoTrf::TranslateZ3D(pixelAttachmentZpos)));
+    emiShieldShape = (GeoShape*)&emiTemp->subtract(*cutOut << GeoTrf::TranslateZ3D(-pixelAttachmentZpos));
     double emiVolume = emiShieldTube->volume() - 2. * cutOut->volume();
     //    std::cout << "EMI final volume = " << emiVolume << std::endl; 
     material = materials.getMaterialForVolume(materialName, emiVolume);
@@ -277,13 +277,13 @@ void SCT_Barrel::buildEMIShield(GeoFullPhysVol * parent) const
   if (!m_isOldGeometry) {
     double dphi = jointRPhi / outerRadius;
     const GeoTubs* emiJointTubs = new GeoTubs(outerRadius, outerRadius+jointDeltaR, 0.5*length,
-                                              -0.5 * dphi * CLHEP::radian, dphi * CLHEP::radian);
+                                              -0.5 * dphi * GeoModelKernelUnits::radian, dphi * GeoModelKernelUnits::radian);
     //    std::cout << "EMIJoint tubs volume = " << emiJointTubs->volume() << std::endl; 
     const GeoTubs* jointCutOut = new GeoTubs(outerRadius, outerRadius+jointDeltaR, 0.5*pixelAttachmentLength,
-                                             -0.5 * dphi * CLHEP::radian, dphi * CLHEP::radian);
+                                             -0.5 * dphi * GeoModelKernelUnits::radian, dphi * GeoModelKernelUnits::radian);
     //    std::cout << "Cut-out volume = " << jointCutOut->volume() << std::endl; 
-    const GeoShape* jointTemp = (GeoShape*)&(emiJointTubs->subtract(*jointCutOut << HepGeom::TranslateZ3D(pixelAttachmentZpos)));
-    const GeoShape* emiJointShape = (GeoShape*)&jointTemp->subtract(*jointCutOut << HepGeom::TranslateZ3D(-pixelAttachmentZpos));
+    const GeoShape* jointTemp = (GeoShape*)&(emiJointTubs->subtract(*jointCutOut << GeoTrf::TranslateZ3D(pixelAttachmentZpos)));
+    const GeoShape* emiJointShape = (GeoShape*)&jointTemp->subtract(*jointCutOut << GeoTrf::TranslateZ3D(-pixelAttachmentZpos));
     double jointVolume = emiJointTubs->volume() - 2. * jointCutOut->volume();
     //    std::cout << "EMIJoint final volume = " << jointVolume << std::endl; 
     const GeoMaterial * jointMaterial = materials.getMaterialForVolume(jointMaterialName, jointVolume);
@@ -291,8 +291,8 @@ void SCT_Barrel::buildEMIShield(GeoFullPhysVol * parent) const
     GeoPhysVol * emiJoint = new GeoPhysVol(emiJointLog);
     // Place 3 copies
     for (int i=0; i<3; i++) {
-      double angle = (90. + i * 120.) * CLHEP::degree;
-      parent->add(new GeoTransform(HepGeom::RotateZ3D(angle)));
+      double angle = (90. + i * 120.) * GeoModelKernelUnits::degree;
+      parent->add(new GeoTransform(GeoTrf::RotateZ3D(angle)));
       parent->add(emiJoint);
     }
   }
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelModuleParameters.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
index 526214f557ad46aa405bdf97ffb9868b35234d38..5e9b1e1dc34181b74d7d2c489666878de40ceff9 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
@@ -9,7 +9,7 @@
 
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -19,16 +19,16 @@ using std::abs;
 // A few hard wired numbers (some of which should go in NOVA)
 //
 /*
-const double SCT_MODULE_HYBRID_OFFSET = 5.0 * CLHEP::mm; // Planar distance from center of sensor to edge of hybrid.
+const double SCT_MODULE_HYBRID_OFFSET = 5.0 * GeoModelKernelUnits::mm; // Planar distance from center of sensor to edge of hybrid.
 const int STEREO_UPPER_SIGN = -1; // Sign of stereo rotation of upper sensor with axis going
                                   // from lower to upper  
 
 const double PITCH = 80 * micrometer;
-const double HALF_ACTIVE_STRIP_LENGTH = 31 * CLHEP::mm;
-const double NOMINAL_WAFER_LENGTH = 63.960 * CLHEP::mm;
-const double REF_DISTANCE_BETWEEN_FIDUCIALS = 2.19 * CLHEP::mm; 
-const double DISTANCE_CORNER_MARK_TO_CENTER = 31.750 * CLHEP::mm; 
-const double DISTANCE_CORNER_MARK_TO_FIDUCIAL = 0.8 * CLHEP::mm; 
+const double HALF_ACTIVE_STRIP_LENGTH = 31 * GeoModelKernelUnits::mm;
+const double NOMINAL_WAFER_LENGTH = 63.960 * GeoModelKernelUnits::mm;
+const double REF_DISTANCE_BETWEEN_FIDUCIALS = 2.19 * GeoModelKernelUnits::mm; 
+const double DISTANCE_CORNER_MARK_TO_CENTER = 31.750 * GeoModelKernelUnits::mm; 
+const double DISTANCE_CORNER_MARK_TO_FIDUCIAL = 0.8 * GeoModelKernelUnits::mm; 
 const double DISTANCE_CENTER_TO_CENTER = 2 * (DISTANCE_CORNER_MARK_TO_CENTER - 
                                               DISTANCE_CORNER_MARK_TO_FIDUCIAL)
                                          + REF_DISTANCE_BETWEEN_FIDUCIALS;
@@ -45,19 +45,19 @@ SCT_BarrelModuleParameters::SCT_BarrelModuleParameters()
 double 
 SCT_BarrelModuleParameters::sensorThickness() const 
 {
-  return m_rdb->brlSensor()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->brlSensor()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::sensorWidth() const 
 {
-  return m_rdb->brlSensor()->getDouble("WIDTH") * CLHEP::mm;
+  return m_rdb->brlSensor()->getDouble("WIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::sensorLength() const 
 {
-  return m_rdb->brlSensor()->getDouble("WAFERLENGTH") * CLHEP::mm;
+  return m_rdb->brlSensor()->getDouble("WAFERLENGTH") * GeoModelKernelUnits::mm;
 }
 
 int
@@ -75,20 +75,20 @@ SCT_BarrelModuleParameters::sensorMaterial() const
 double
 SCT_BarrelModuleParameters::sensorDistCenterToCenter() const 
 {
-  return 2 * m_rdb->brlSensor()->getDouble("CENTERTOFIDUCIAL") * CLHEP::mm 
-    + m_rdb->brlSensor()->getDouble("FIDUCIALSEP") * CLHEP::mm;
+  return 2 * m_rdb->brlSensor()->getDouble("CENTERTOFIDUCIAL") * GeoModelKernelUnits::mm 
+    + m_rdb->brlSensor()->getDouble("FIDUCIALSEP") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelModuleParameters::sensorStripLength() const
 {
-  return 2 * m_rdb->brlSensor()->getDouble("ACTIVEHALFLENGTH") * CLHEP::mm;
+  return 2 * m_rdb->brlSensor()->getDouble("ACTIVEHALFLENGTH") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelModuleParameters::sensorStripPitch() const
 {
-  return m_rdb->brlSensor()->getDouble("STRIPPITCH") * CLHEP::mm;
+  return m_rdb->brlSensor()->getDouble("STRIPPITCH") * GeoModelKernelUnits::mm;
 }
 
 int 
@@ -118,19 +118,19 @@ SCT_BarrelModuleParameters::sensorStripShift() const
 double 
 SCT_BarrelModuleParameters::baseBoardThickness() const 
 {
-  return m_rdb->brlModule()->getDouble("BASEBOARDTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("BASEBOARDTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::baseBoardWidth() const 
 {
-  return m_rdb->brlModule()->getDouble("BASEBOARDWIDTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("BASEBOARDWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::baseBoardLength() const 
 {
-  return m_rdb->brlModule()->getDouble("BASEBOARDLENGTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("BASEBOARDLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -142,13 +142,13 @@ SCT_BarrelModuleParameters::baseBoardMaterial() const
 double 
 SCT_BarrelModuleParameters::baseBoardOffsetY() const 
 {
-  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETY") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETY") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::baseBoardOffsetZ() const 
 {
-  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETZ") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETZ") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -157,19 +157,19 @@ SCT_BarrelModuleParameters::baseBoardOffsetZ() const
 double 
 SCT_BarrelModuleParameters::hybridThickness() const 
 {
-  return m_rdb->brlModule()->getDouble("HYBRIDTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("HYBRIDTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::hybridWidth() const 
 {
-  return m_rdb->brlModule()->getDouble("HYBRIDWIDTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("HYBRIDWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::hybridLength() const 
 {
-  return m_rdb->brlModule()->getDouble("HYBRIDLENGTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("HYBRIDLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -181,13 +181,13 @@ SCT_BarrelModuleParameters::hybridMaterial() const
 double 
 SCT_BarrelModuleParameters::hybridOffsetX() const 
 {
-  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETX") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETX") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::hybridOffsetZ() const 
 {
-  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETZ") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETZ") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -196,19 +196,19 @@ SCT_BarrelModuleParameters::hybridOffsetZ() const
 double 
 SCT_BarrelModuleParameters::pigtailThickness() const 
 {
-  return m_rdb->brlModule()->getDouble("PIGTAILTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("PIGTAILTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::pigtailWidth() const 
 {
-  return m_rdb->brlModule()->getDouble("PIGTAILWIDTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("PIGTAILWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelModuleParameters::pigtailLength() const 
 {
-  return m_rdb->brlModule()->getDouble("PIGTAILLENGTH") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("PIGTAILLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -242,14 +242,14 @@ SCT_BarrelModuleParameters::moduleUpperSideNumber() const
 double 
 SCT_BarrelModuleParameters::moduleStereoAngle() const
 {
-  return m_rdb->brlModule()->getDouble("STEREOANGLE") * CLHEP::milliradian;
+  return m_rdb->brlModule()->getDouble("STEREOANGLE") * GeoModelKernelUnits::milliradian;
 }
 
 
 double 
 SCT_BarrelModuleParameters::moduleSensorToSensorGap() const
 {
-  return m_rdb->brlModule()->getDouble("SENSORTOSENSORGAP") * CLHEP::mm;
+  return m_rdb->brlModule()->getDouble("SENSORTOSENSORGAP") * GeoModelKernelUnits::mm;
 }
 
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelParameters.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelParameters.cxx
index 8347fe542b024f4ea68d8703d7319bc5e3ddde59..ae69ebf0f092cf1424f73940fa36a9506880d487 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_BarrelParameters.cxx
@@ -8,9 +8,7 @@
 #include "SCT_GeoModel/SCT_DataBase.h"
 
 #include "RDBAccessSvc/IRDBRecord.h"
-
-
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <iostream>
@@ -34,7 +32,7 @@ SCT_BarrelParameters::skiFirstStagger() const
 double 
 SCT_BarrelParameters::skiRadialSep() const
 {
-  return m_rdb->brlSki()->getDouble("SKIRADIALSEP") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("SKIRADIALSEP") * GeoModelKernelUnits::mm;
 }
 
 int
@@ -46,7 +44,7 @@ SCT_BarrelParameters::modulesPerSki() const
 double 
 SCT_BarrelParameters::skiZPosition(int index) const
 {
-  return m_rdb->brlSkiZ(index)->getDouble("ZPOSITION") * CLHEP::mm;
+  return m_rdb->brlSkiZ(index)->getDouble("ZPOSITION") * GeoModelKernelUnits::mm;
 }
 
 int 
@@ -61,7 +59,7 @@ SCT_BarrelParameters::skiModuleIdentifier(int index) const
 double 
 SCT_BarrelParameters::tilt(int iLayer) const
 {
-  return m_rdb->brlLayer(iLayer)->getDouble("TILT") * CLHEP::degree;
+  return m_rdb->brlLayer(iLayer)->getDouble("TILT") * GeoModelKernelUnits::degree;
 }
 
 int 
@@ -74,7 +72,7 @@ SCT_BarrelParameters::layerStereoSign(int iLayer) const
 double 
 SCT_BarrelParameters::radius(int iLayer) const
 {
-  return m_rdb->brlLayer(iLayer)->getDouble("RADIUS") * CLHEP::mm;
+  return m_rdb->brlLayer(iLayer)->getDouble("RADIUS") * GeoModelKernelUnits::mm;
 }
 
 int 
@@ -86,7 +84,7 @@ SCT_BarrelParameters::skisPerLayer(int iLayer) const
 double 
 SCT_BarrelParameters::layerBracketPhiOffset(int iLayer) const
 {
-  return m_rdb->brlLayer(iLayer)->getDouble("BRACKETPHIOFFSET") * CLHEP::deg;
+  return m_rdb->brlLayer(iLayer)->getDouble("BRACKETPHIOFFSET") * GeoModelKernelUnits::deg;
 }
 
 double 
@@ -95,9 +93,9 @@ SCT_BarrelParameters::layerPhiOfRefModule(int iLayer) const
   // For backward compatibility, if field is null return (90 - tilt) 
   // as ref module is horizontal in old versions.
   if  (m_rdb->brlLayer(iLayer)->isFieldNull("PHIOFREFMODULE")) {
-    return 90*CLHEP::deg - tilt(iLayer);
+    return 90*GeoModelKernelUnits::deg - tilt(iLayer);
   }
-  return m_rdb->brlLayer(iLayer)->getDouble("PHIOFREFMODULE") * CLHEP::deg;
+  return m_rdb->brlLayer(iLayer)->getDouble("PHIOFREFMODULE") * GeoModelKernelUnits::deg;
 }
 
 
@@ -107,19 +105,19 @@ SCT_BarrelParameters::layerPhiOfRefModule(int iLayer) const
 double
 SCT_BarrelParameters::bracketThickness() const
 {
-  return m_rdb->brlSki()->getDouble("BRACKETTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("BRACKETTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::bracketWidth() const
 {
-  return m_rdb->brlSki()->getDouble("BRACKETWIDTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("BRACKETWIDTH") * GeoModelKernelUnits::mm;
 }
  
 double
 SCT_BarrelParameters::bracketLength() const
 {
-  return m_rdb->brlSki()->getDouble("BRACKETLENGTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("BRACKETLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -134,19 +132,19 @@ SCT_BarrelParameters::bracketMaterial() const
 double
 SCT_BarrelParameters::doglegThickness() const
 {
-  return m_rdb->brlSki()->getDouble("DOGLEGTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("DOGLEGTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::doglegWidth() const
 {
-  return m_rdb->brlSki()->getDouble("DOGLEGWIDTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("DOGLEGWIDTH") * GeoModelKernelUnits::mm;
 }
  
 double
 SCT_BarrelParameters::doglegLength() const
 {
-  return m_rdb->brlSki()->getDouble("DOGLEGLENGTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("DOGLEGLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -158,13 +156,13 @@ SCT_BarrelParameters::doglegMaterial() const
 double
 SCT_BarrelParameters::doglegOffsetX() const
 {
-  return m_rdb->brlSki()->getDouble("DOGLEGOFFSETX") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("DOGLEGOFFSETX") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::doglegOffsetY() const
 {
-  return m_rdb->brlSki()->getDouble("DOGLEGOFFSETY") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("DOGLEGOFFSETY") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -173,19 +171,19 @@ SCT_BarrelParameters::doglegOffsetY() const
 double
 SCT_BarrelParameters::coolingBlockThickness() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKTHICK") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKTHICK") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::coolingBlockWidth() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKWIDTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKWIDTH") * GeoModelKernelUnits::mm;
 }
  
 double
 SCT_BarrelParameters::coolingBlockLength() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKLENGTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKLENGTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -197,19 +195,19 @@ SCT_BarrelParameters::coolingBlockMaterial() const
 double
 SCT_BarrelParameters::coolingBlockOffsetX() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETX") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETX") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::coolingBlockOffsetY() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETY") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETY") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::coolingBlockOffsetZ() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETZ") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGBLOCKOFFSETZ") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -218,7 +216,7 @@ SCT_BarrelParameters::coolingBlockOffsetZ() const
 double
 SCT_BarrelParameters::coolingPipeRadius() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGPIPERADIUS") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGPIPERADIUS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -230,13 +228,13 @@ SCT_BarrelParameters::coolingPipeMaterial() const
 double
 SCT_BarrelParameters::coolingPipeOffsetX() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGPIPEOFFSETX") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGPIPEOFFSETX") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::coolingPipeOffsetY() const
 {
-  return m_rdb->brlSki()->getDouble("COOLINGPIPEOFFSETY") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("COOLINGPIPEOFFSETY") * GeoModelKernelUnits::mm;
 }
 
 
@@ -246,13 +244,13 @@ SCT_BarrelParameters::coolingPipeOffsetY() const
 double
 SCT_BarrelParameters::powerTapeThickness() const
 {
-  return m_rdb->brlSki()->getDouble("POWERTAPETHICKNESS") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("POWERTAPETHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::powerTapeWidth() const
 {
-  return m_rdb->brlSki()->getDouble("POWERTAPEWIDTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("POWERTAPEWIDTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -264,7 +262,7 @@ SCT_BarrelParameters::powerTapeMaterial() const
 double
 SCT_BarrelParameters::powerTapeStartPointOffset() const
 {
-  return m_rdb->brlSki()->getDouble("POWERTAPESTARTOFFSET") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("POWERTAPESTARTOFFSET") * GeoModelKernelUnits::mm;
 }
  
 //
@@ -273,13 +271,13 @@ SCT_BarrelParameters::powerTapeStartPointOffset() const
 double
 SCT_BarrelParameters::harnessThickness() const
 {
-  return m_rdb->brlSki()->getDouble("HARNESSTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("HARNESSTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::harnessWidth() const
 {
-  return m_rdb->brlSki()->getDouble("HARNESSWIDTH") * CLHEP::mm;
+  return m_rdb->brlSki()->getDouble("HARNESSWIDTH") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -294,7 +292,7 @@ SCT_BarrelParameters::harnessMaterial() const
 double 
 SCT_BarrelParameters::supportCylInnerRadius(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("SUPPORTCYLINNERRAD") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("SUPPORTCYLINNERRAD") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -306,7 +304,7 @@ SCT_BarrelParameters::supportCylOuterRadius(int iLayer) const
 double 
 SCT_BarrelParameters::supportCylDeltaR(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("SUPPORTCYLDELTAR") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("SUPPORTCYLDELTAR") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -322,13 +320,13 @@ SCT_BarrelParameters::supportCylMaterial(int iLayer) const
 double 
 SCT_BarrelParameters::flangeDeltaZ(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("FLANGEDELTAZ") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("FLANGEDELTAZ") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelParameters::flangeDeltaR(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("FLANGEDELTAR") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("FLANGEDELTAR") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -343,13 +341,13 @@ SCT_BarrelParameters::flangeMaterial(int iLayer) const
 double 
 SCT_BarrelParameters::clampDeltaZ(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLAMPDELTAZ") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLAMPDELTAZ") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelParameters::clampDeltaR(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLAMPDELTAR") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLAMPDELTAR") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -364,7 +362,7 @@ SCT_BarrelParameters::clampMaterial(int iLayer) const
 double 
 SCT_BarrelParameters::coolingEndDeltaR(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("COOLINGENDDELTAR") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("COOLINGENDDELTAR") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -379,7 +377,7 @@ SCT_BarrelParameters::coolingEndMaterial(int iLayer) const
 double 
 SCT_BarrelParameters::closeOutDeltaZ(int iLayer) const
 {
-  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLOSEOUTDELTAZ") * CLHEP::mm;
+  return m_rdb->brlServPerLayer(iLayer)->getDouble("CLOSEOUTDELTAZ") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -394,19 +392,19 @@ SCT_BarrelParameters::closeOutMaterial(int iLayer) const
 double 
 SCT_BarrelParameters::interLinkDeltaZ() const
 {
-  return m_rdb->brlServices()->getDouble("INTERLINKDELTAZ") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("INTERLINKDELTAZ") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::interLinkInnerRadius() const
 {
-  return m_rdb->brlServices()->getDouble("INTERLINKINNERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("INTERLINKINNERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::interLinkOuterRadius() const
 {
-  return m_rdb->brlServices()->getDouble("INTERLINKOUTERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("INTERLINKOUTERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -419,9 +417,9 @@ double
 SCT_BarrelParameters::interLinkDeltaPhi() const
 {
   if  (m_rdb->brlServices()->isFieldNull("INTERLINKDPHI")) {
-    return 360.*CLHEP::deg;
+    return 360.*GeoModelKernelUnits::deg;
   }
-  return m_rdb->brlServices()->getDouble("INTERLINKDPHI") * CLHEP::deg; 
+  return m_rdb->brlServices()->getDouble("INTERLINKDPHI") * GeoModelKernelUnits::deg; 
 }
 
 double 
@@ -430,7 +428,7 @@ SCT_BarrelParameters::interLinkPhiPos() const
   if  (m_rdb->brlServices()->isFieldNull("INTERLINKPHIPOS")) {
     return 0.;
   }
-  return m_rdb->brlServices()->getDouble("INTERLINKPHIPOS") * CLHEP::deg;
+  return m_rdb->brlServices()->getDouble("INTERLINKPHIPOS") * GeoModelKernelUnits::deg;
 }
 
 int
@@ -448,7 +446,7 @@ SCT_BarrelParameters::bearingDeltaPhi() const
   if  (m_rdb->brlServices()->isFieldNull("BEARINGDPHI")) {
     return 0.;
   }
-  return m_rdb->brlServices()->getDouble("BEARINGDPHI") * CLHEP::deg; 
+  return m_rdb->brlServices()->getDouble("BEARINGDPHI") * GeoModelKernelUnits::deg; 
 }
 
 double 
@@ -457,7 +455,7 @@ SCT_BarrelParameters::bearingPhiPos() const
   if  (m_rdb->brlServices()->isFieldNull("BEARINGPHIPOS")) {
     return 0.;
   }
-  return m_rdb->brlServices()->getDouble("BEARINGPHIPOS") * CLHEP::deg;
+  return m_rdb->brlServices()->getDouble("BEARINGPHIPOS") * GeoModelKernelUnits::deg;
 }
 
 int
@@ -491,13 +489,13 @@ SCT_BarrelParameters::includeFSI() const
 double 
 SCT_BarrelParameters::fsiFlangeInnerRadius() const
 {
-  return m_rdb->brlFSI()->getDouble("FLANGEINNERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("FLANGEINNERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::fsiFlangeOuterRadius() const
 {
-  return m_rdb->brlFSI()->getDouble("FLANGEOUTERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("FLANGEOUTERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -509,7 +507,7 @@ SCT_BarrelParameters::fsiFlangeMaterial() const
 double 
 SCT_BarrelParameters::fsiFibreMaskDeltaR() const
 {
-  return m_rdb->brlFSI()->getDouble("FIBREMASKDELTAR") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("FIBREMASKDELTAR") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -521,19 +519,19 @@ SCT_BarrelParameters::fsiFibreMaskMaterial() const
 double 
 SCT_BarrelParameters::fsiEndJewelRadialWidth() const
 {
-  return m_rdb->brlFSI()->getDouble("ENDJEWELRADIALWIDTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("ENDJEWELRADIALWIDTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::fsiEndJewelRPhiWidth() const
 {
-  return m_rdb->brlFSI()->getDouble("ENDJEWELRPHIWIDTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("ENDJEWELRPHIWIDTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::fsiEndJewelLength() const
 {
-  return m_rdb->brlFSI()->getDouble("ENDJEWELLENGTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("ENDJEWELLENGTH") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -551,31 +549,31 @@ SCT_BarrelParameters::fsiEndJewelNRepeat(int iLayer) const
 double 
 SCT_BarrelParameters::fsiEndJewelPhi(int iLayer) const
 {
-  return m_rdb->brlFSILocation(iLayer)->getDouble("ENDJEWELPHI") * CLHEP::degree;
+  return m_rdb->brlFSILocation(iLayer)->getDouble("ENDJEWELPHI") * GeoModelKernelUnits::degree;
 }
 
 double 
 SCT_BarrelParameters::fsiEndJewelZ(int iLayer) const
 {
-  return m_rdb->brlFSILocation(iLayer)->getDouble("ENDJEWELZ") * CLHEP::mm;
+  return m_rdb->brlFSILocation(iLayer)->getDouble("ENDJEWELZ") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelParameters::fsiScorpionRadialWidth() const
 {
-  return m_rdb->brlFSI()->getDouble("SCORPIONRADIALWIDTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("SCORPIONRADIALWIDTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::fsiScorpionRPhiWidth() const
 {
-  return m_rdb->brlFSI()->getDouble("SCORPIONRPHIWIDTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("SCORPIONRPHIWIDTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::fsiScorpionLength() const
 {
-  return m_rdb->brlFSI()->getDouble("SCORPIONLENGTH") * CLHEP::mm; 
+  return m_rdb->brlFSI()->getDouble("SCORPIONLENGTH") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -593,13 +591,13 @@ SCT_BarrelParameters::fsiScorpionNRepeat(int iLayer) const
 double 
 SCT_BarrelParameters::fsiScorpionPhi(int iLayer) const
 {
-  return m_rdb->brlFSILocation(iLayer)->getDouble("SCORPIONPHI") * CLHEP::degree;
+  return m_rdb->brlFSILocation(iLayer)->getDouble("SCORPIONPHI") * GeoModelKernelUnits::degree;
 }
 
 double 
 SCT_BarrelParameters::fsiScorpionZ(int iLayer) const
 {
-  return m_rdb->brlFSILocation(iLayer)->getDouble("SCORPIONZ") * CLHEP::mm;
+  return m_rdb->brlFSILocation(iLayer)->getDouble("SCORPIONZ") * GeoModelKernelUnits::mm;
 }
 
 
@@ -609,19 +607,19 @@ SCT_BarrelParameters::fsiScorpionZ(int iLayer) const
 double 
 SCT_BarrelParameters::spiderDeltaZ() const
 {
-  return m_rdb->brlServices()->getDouble("SPIDERDELTAZ") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("SPIDERDELTAZ") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::spiderInnerRadius() const
 {
-  return m_rdb->brlServices()->getDouble("SPIDERINNERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("SPIDERINNERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::spiderOuterRadius() const
 {
-  return m_rdb->brlServices()->getDouble("SPIDEROUTERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("SPIDEROUTERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -636,85 +634,85 @@ SCT_BarrelParameters::spiderMaterial() const
 double
 SCT_BarrelParameters::thermalShieldInnerRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldOuterRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldEndZMax() const
 {
-  return m_rdb->brlThermalShield()->getDouble("ENDZMAX") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("ENDZMAX") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldCylTotalThickness() const
 {
-  return m_rdb->brlThermalShield()->getDouble("CYLTOTALTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("CYLTOTALTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldCylInnerWallThickness() const
 {
-  return m_rdb->brlThermalShield()->getDouble("CYLINNERWALLTHICK") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("CYLINNERWALLTHICK") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldCylOuterWallThickness() const
 {
-  return m_rdb->brlThermalShield()->getDouble("CYLOUTERWALLTHICK") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("CYLOUTERWALLTHICK") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldSpacerZWidth() const
 {
-  return m_rdb->brlThermalShield()->getDouble("SPACERZWIDTH") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("SPACERZWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldFirstSpacerZMin() const
 {
-  return m_rdb->brlThermalShield()->getDouble("FIRSTSPACERZMIN") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("FIRSTSPACERZMIN") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldEndCapCylThickness() const
 {
-  return m_rdb->brlThermalShield()->getDouble("ENDCAPCYLTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("ENDCAPCYLTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldEndCapThickness() const
 {
-  return m_rdb->brlThermalShield()->getDouble("ENDCAPTHICKNESS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("ENDCAPTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldBulkheadInnerRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("BULKHEADINNERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("BULKHEADINNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldBulkheadOuterRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("BULKHEADOUTERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("BULKHEADOUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldEndPanelInnerRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("ENDPANELINNERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("ENDPANELINNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::thermalShieldEndPanelOuterRadius() const
 {
-  return m_rdb->brlThermalShield()->getDouble("ENDPANELOUTERRADIUS") * CLHEP::mm;
+  return m_rdb->brlThermalShield()->getDouble("ENDPANELOUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -747,19 +745,19 @@ SCT_BarrelParameters::thermalShieldMaterialInnerSect() const
 double
 SCT_BarrelParameters::emiShieldInnerRadius() const
 {
-  return m_rdb->brlServices()->getDouble("EMIINNERRADIUS") * CLHEP::mm;
+  return m_rdb->brlServices()->getDouble("EMIINNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::emiShieldDeltaR() const
 {
-  return m_rdb->brlServices()->getDouble("EMIDELTAR") * CLHEP::mm;
+  return m_rdb->brlServices()->getDouble("EMIDELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::emiShieldZMax() const
 {
-  return m_rdb->brlServices()->getDouble("EMIZMAX") * CLHEP::mm;
+  return m_rdb->brlServices()->getDouble("EMIZMAX") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -771,13 +769,13 @@ SCT_BarrelParameters::emiShieldMaterial() const
 double
 SCT_BarrelParameters::emiJointDeltaR() const
 {
-  return m_rdb->brlServices()->getDouble("EMIJOINTDELTAR") * CLHEP::mm;
+  return m_rdb->brlServices()->getDouble("EMIJOINTDELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_BarrelParameters::emiJointRPhi() const
 {
-  return m_rdb->brlServices()->getDouble("EMIJOINTRPHI") * CLHEP::mm;
+  return m_rdb->brlServices()->getDouble("EMIJOINTRPHI") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -794,25 +792,25 @@ SCT_BarrelParameters::emiJointMaterial() const
 double 
 SCT_BarrelParameters::pixelAttachmentInnerRadius() const
 {
-  return m_rdb->brlServices()->getDouble("PIXELATTACHINNERRAD") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("PIXELATTACHINNERRAD") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::pixelAttachmentOuterRadius() const
 {
-  return m_rdb->brlServices()->getDouble("PIXELATTACHOUTERRAD") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("PIXELATTACHOUTERRAD") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::pixelAttachmentZMin() const
 {
-  return m_rdb->brlServices()->getDouble("PIXELATTACHZMIN") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("PIXELATTACHZMIN") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::pixelAttachmentDeltaZ() const
 {
-  return m_rdb->brlServices()->getDouble("PIXELATTACHDELTAZ") * CLHEP::mm; 
+  return m_rdb->brlServices()->getDouble("PIXELATTACHDELTAZ") * GeoModelKernelUnits::mm; 
 }
 
 std::string 
@@ -833,31 +831,31 @@ SCT_BarrelParameters::numLayers() const
 double 
 SCT_BarrelParameters::barrelInnerRadius() const
 {
-  return m_rdb->brlGeneral()->getDouble("INNERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlGeneral()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::barrelOuterRadius() const
 {
-  return m_rdb->brlGeneral()->getDouble("OUTERRADIUS") * CLHEP::mm; 
+  return m_rdb->brlGeneral()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::barrelLength() const
 {
-  return m_rdb->brlGeneral()->getDouble("LENGTH") * CLHEP::mm; 
+  return m_rdb->brlGeneral()->getDouble("LENGTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::cylinderLength() const
 {
-  return m_rdb->brlGeneral()->getDouble("CYLINDERLENGTH") * CLHEP::mm; 
+  return m_rdb->brlGeneral()->getDouble("CYLINDERLENGTH") * GeoModelKernelUnits::mm; 
 }
 
 double 
 SCT_BarrelParameters::activeLength() const
 {
-  return m_rdb->brlGeneral()->getDouble("ACTIVELENGTH") * CLHEP::mm; 
+  return m_rdb->brlGeneral()->getDouble("ACTIVELENGTH") * GeoModelKernelUnits::mm; 
 }
 
 bool 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Bracket.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Bracket.cxx
index 1b31c5abc0f42bfa03aebffc3c02e65207d7807c..599d5081a5cf2a03085433b3e746c9dccca40a66 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Bracket.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Bracket.cxx
@@ -16,7 +16,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_Bracket::SCT_Bracket(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Clamp.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Clamp.cxx
index f32066bda0c4e40dc9cc2804341e0e35f17d514d..a85fb7efcdf376c2b353aa9bc4b91c288645c8f3 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Clamp.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Clamp.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_Clamp::SCT_Clamp(const std::string & name, int iLayer,
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CloseOut.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CloseOut.cxx
index 3058263df5c5ab4e8ae429976be318529fc2049d..b4b6db173cf9f9079c9ebd299f50e6ed4d54cf5c 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CloseOut.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CloseOut.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_CloseOut::SCT_CloseOut(const std::string & name, int iLayer)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ComponentFactory.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ComponentFactory.cxx
index 330e67bef7aed764ce42a3dbe8c5a44485403526..cf2f14e1296374157b889e61df0f66a00b9ce6ce 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ComponentFactory.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ComponentFactory.cxx
@@ -3,7 +3,7 @@
 */
 
 #include "SCT_GeoModel/SCT_ComponentFactory.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <string>
@@ -13,7 +13,7 @@ using InDetDD::SCT_DetectorManager;
 SCT_DetectorManager * SCT_ComponentFactory::s_detectorManager = 0;
 const SCT_GeometryManager * SCT_ComponentFactory::s_geometryManager = 0;
 
-double SCT_ComponentFactory::s_epsilon = 1.0e-6 * CLHEP::mm;
+double SCT_ComponentFactory::s_epsilon = 1.0e-6 * GeoModelKernelUnits::mm;
 
 SCT_ComponentFactory::SCT_ComponentFactory(const std::string & name) 
   : m_name(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingBlock.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingBlock.cxx
index c79fee013c935cb8d1a1211e1ff700f6eee89e05..5db571788fa8949b60130de4947ae25e2e8a78bd 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingBlock.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingBlock.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_CoolingBlock::SCT_CoolingBlock(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingEnd.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingEnd.cxx
index a8e06fefe1561ad73e2e73d732b7ecbb0a351f05..969f719c3ebb6f60807844ee522ab581aa20fdcd 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingEnd.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingEnd.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_CoolingEnd::SCT_CoolingEnd(const std::string & name, int iLayer,
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingPipe.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingPipe.cxx
index 71ecc0369c6bdded346e7106f844fd716c86c6ce..cf1d88eaa641bba281c0ad5480393737532ac93e 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingPipe.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_CoolingPipe.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_CoolingPipe::SCT_CoolingPipe(const std::string & name, double length)
   : SCT_SharedComponentFactory(name), m_length(length)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_DetectorFactory.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_DetectorFactory.cxx
index f14ae1944cf27663af1083d3f0f2503ca9f760a8..3a9fdd418ed61f896ef448c7910d3c8479fab9c6 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_DetectorFactory.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_DetectorFactory.cxx
@@ -49,9 +49,9 @@
 #include "StoreGate/StoreGateSvc.h"
 #include "GaudiKernel/ISvcLocator.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include "GeoModelKernel/Units.h"
 
 
 #include <iostream> 
@@ -153,7 +153,7 @@ void SCT_DetectorFactory::create(GeoPhysVol *world)
 
   const SCT_GeneralParameters * sctGeneral = m_geometryManager->generalParameters();
 
-  HepGeom::Transform3D sctTransform = sctGeneral->partTransform("SCT");
+  GeoTrf::Transform3D sctTransform = sctGeneral->partTransform("SCT");
 
   std::string barrelLabel = "Barrel";
   std::string forwardPlusLabel = "EndcapA";
@@ -211,9 +211,9 @@ void SCT_DetectorFactory::create(GeoPhysVol *world)
     SCT_Identifier idFwdPlus;
     idFwdPlus.setBarrelEC(2);
     GeoVPhysVol * forwardPlusPV = sctForwardPlus.build(idFwdPlus);
-    HepGeom::Transform3D fwdTransformPlus(sctTransform 
+    GeoTrf::Transform3D fwdTransformPlus(sctTransform 
                                           * sctGeneral->partTransform(forwardPlusLabel) 
-                                          * HepGeom::TranslateZ3D(sctForwardPlus.zCenter()));
+                                          * GeoTrf::TranslateZ3D(sctForwardPlus.zCenter()));
     GeoAlignableTransform * fwdGeoTransformPlus = new GeoAlignableTransform(fwdTransformPlus);
     
     //indet->add(new GeoNameTag("SCT_ForwardPlus"));
@@ -245,13 +245,13 @@ void SCT_DetectorFactory::create(GeoPhysVol *world)
     idFwdMinus.setBarrelEC(-2);
     GeoVPhysVol * forwardMinusPV = sctForwardMinus.build(idFwdMinus);
 
-    HepGeom::Transform3D rot;
-    rot = HepGeom::RotateY3D(180 * CLHEP::degree);
+    GeoTrf::Transform3D rot;
+    rot = GeoTrf::RotateY3D(180 * GeoModelKernelUnits::degree);
   
-    HepGeom::Transform3D fwdTransformMinus(sctTransform  
+    GeoTrf::Transform3D fwdTransformMinus(sctTransform  
                                            * sctGeneral->partTransform(forwardMinusLabel)  
                                            * rot  
-                                           * HepGeom::TranslateZ3D(sctForwardMinus.zCenter()));
+                                           * GeoTrf::TranslateZ3D(sctForwardMinus.zCenter()));
     GeoAlignableTransform * fwdGeoTransformMinus = new GeoAlignableTransform(fwdTransformMinus);
 
     //indet->add(new GeoNameTag("SCT_ForwardMinus"));
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Dogleg.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Dogleg.cxx
index ebf9e4fefee2cea8a8ee69ad5ead91cb1c298f15..e79d3211d0a27bae118b0241115ebaeb0b686ed3 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Dogleg.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Dogleg.cxx
@@ -16,7 +16,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_Dogleg::SCT_Dogleg(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIEndJewel.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIEndJewel.cxx
index 0a56ad8214ecf385de2a2c2b4fe645e8805010df..f05175588911f798bfaec00f44cd4f2cfd5884cd 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIEndJewel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIEndJewel.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_FSIEndJewel::SCT_FSIEndJewel(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIFibreMask.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIFibreMask.cxx
index d714b0b5e71b26ce46a8cd8841b7697c8f55b1af..96c53597a00d66b52e86cba972027de4ccfa111c 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIFibreMask.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIFibreMask.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FSIFibreMask::SCT_FSIFibreMask(const std::string & name, int iLayer, double length)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIHelper.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIHelper.cxx
index 18c1691472e73d1f19c993b28ad117cc7a886535..5b0b4e3c9bcd8958deb068f7602f5de83798ec73 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIHelper.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIHelper.cxx
@@ -6,7 +6,7 @@
 #include "SCT_GeoModel/SCT_FSIHelper.h"
 #include "SCT_GeoModel/SCT_DataBase.h"
 #include "RDBAccessSvc/IRDBRecord.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 
@@ -66,8 +66,8 @@ FSIHelper::fill()
   // Loop through location types
   for (int iLocIndex = 0; iLocIndex < m_rdb->fwdFSILocationSize(); iLocIndex++) {
     std::string locType =  m_rdb->fwdFSILocation(iLocIndex)->getString("LOCTYPE");
-    double radius =  m_rdb->fwdFSILocation(iLocIndex)->getDouble("LOCR") * CLHEP::mm;
-    double rphi = m_rdb->fwdFSILocation(iLocIndex)->getDouble("LOCPHI") * CLHEP::deg;
+    double radius =  m_rdb->fwdFSILocation(iLocIndex)->getDouble("LOCR") * GeoModelKernelUnits::mm;
+    double rphi = m_rdb->fwdFSILocation(iLocIndex)->getDouble("LOCPHI") * GeoModelKernelUnits::deg;
     int side =  m_rdb->fwdFSILocation(iLocIndex)->getInt("SIDE");
     FSILocation * location = new  FSILocation(locType, radius, rphi, side);
     m_locationTypes[locType] = location;
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIScorpion.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIScorpion.cxx
index ed7cdb1a6bd4b90260d014fbd51fbfe509f8db9f..57a8a419a60b2aecbbd29dbe299d3c4c5d2d5fe4 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIScorpion.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FSIScorpion.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_FSIScorpion::SCT_FSIScorpion(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Flange.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Flange.cxx
index dfac1d8135b85cbac7fe15931bfed897887d0944..4422b3f751c0a1da9299bb72d606d9279c8d6380 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Flange.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Flange.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_Flange::SCT_Flange(const std::string & name, int iLayer)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Forward.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Forward.cxx
index 6416d33b5498733c8a63af453decae918da45818..9282e83020c2c72473c71bc906fa689d9f4a6232 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Forward.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Forward.cxx
@@ -32,7 +32,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <cmath>
@@ -140,7 +140,7 @@ SCT_Forward::build(SCT_Identifier id) const
     //          << " at " << zpos << ", thickness = " << wheel->thickness() << std::endl;
     forward->add(new GeoNameTag(wheelName.str()));
     forward->add(new GeoIdentifierTag(iWheel));
-    GeoAlignableTransform * transform = new GeoAlignableTransform(HepGeom::TranslateZ3D(zpos));
+    GeoAlignableTransform * transform = new GeoAlignableTransform(GeoTrf::TranslateZ3D(zpos));
     forward->add(transform);
     id.setLayerDisk(iWheel);
     GeoVPhysVol * wheelPV = wheel->build(id);
@@ -155,7 +155,7 @@ SCT_Forward::build(SCT_Identifier id) const
   //
   SCT_FwdSupportFrame supportFrame("SupportFrame");
   double supportFrameZPos = supportFrame.zPosition() - zCenter();
-  forward->add(new GeoTransform(HepGeom::TranslateZ3D(supportFrameZPos)));
+  forward->add(new GeoTransform(GeoTrf::TranslateZ3D(supportFrameZPos)));
   forward->add(supportFrame.getVolume());
 
   // Make and Place Cylinder Services
@@ -167,7 +167,7 @@ SCT_Forward::build(SCT_Identifier id) const
                                              supportFrame.outerRadius(),
                                              m_outerRadiusCylinderServices,
                                              supportFrame.length());
-    forward->add(new GeoTransform(HepGeom::TranslateZ3D(supportFrameZPos)));
+    forward->add(new GeoTransform(GeoTrf::TranslateZ3D(supportFrameZPos)));
     forward->add(cylinderServices.getVolume());
 
   } else {
@@ -204,7 +204,7 @@ SCT_Forward::build(SCT_Identifier id) const
       
         // Place the cooling pipes
         double coolingPipeZPos = coolingPipe.zPosition() - zCenter();
-        forward->add(new GeoTransform(HepGeom::TranslateZ3D(coolingPipeZPos)));
+        forward->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingPipeZPos)));
         forward->add(coolingPipe.getVolume());
 
         // Set rStart for next cooling pipe equal to outer radius of this cooling pipe.
@@ -224,7 +224,7 @@ SCT_Forward::build(SCT_Identifier id) const
       // Calculate radius to start placing power tapes. This is half way bewteen outer radius
       // of support fram and outer radius of forward envelope.
       // The -1 mm is to avoid a clash with the thermal shield.
-      double innerRadiusPowerTapes = 0.5*(supportFrame.outerRadius() + m_outerRadius) - 1*CLHEP::mm;
+      double innerRadiusPowerTapes = 0.5*(supportFrame.outerRadius() + m_outerRadius) - 1*GeoModelKernelUnits::mm;
 
       // Inner radius of cylinder representing power tapes. Gets incremented for each wheel.
       double rStart = innerRadiusPowerTapes;
@@ -247,7 +247,7 @@ SCT_Forward::build(SCT_Identifier id) const
 
         // Place Power Tapes
         double powerTapeZPos = powerTape.zPosition() - zCenter();
-        forward->add(new GeoTransform(HepGeom::TranslateZ3D(powerTapeZPos)));
+        forward->add(new GeoTransform(GeoTrf::TranslateZ3D(powerTapeZPos)));
         forward->add(powerTape.getVolume());
             
         // Set rStart for next power tape equal to outer radius of this power tape.
@@ -263,7 +263,7 @@ SCT_Forward::build(SCT_Identifier id) const
     SCT_FwdThermalShieldElement thermalShieldElement("FwdThermalShieldElement"+intToString(iElement),
                                                      iElement);
     double elementZPos = thermalShieldElement.zPosition() - zCenter();
-    forward->add(new GeoTransform(HepGeom::TranslateZ3D(elementZPos)));
+    forward->add(new GeoTransform(GeoTrf::TranslateZ3D(elementZPos)));
     forward->add(thermalShieldElement.getVolume());
   }
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardModuleParameters.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardModuleParameters.cxx
index 639f97ce4876ee0ccde6c5c1b865038db39a85fb..d1617a10e14e585fccbe1b5109c23f366ceb2c9e 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardModuleParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardModuleParameters.cxx
@@ -9,7 +9,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -31,55 +31,55 @@ SCT_ForwardModuleParameters::fwdSensorNumWafers(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdSensorThickness(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("THICKNESS") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorInnerWidthNear(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHNEAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHNEAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorInnerWidthFar(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHFAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorOuterWidthNear(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHNEAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHNEAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorOuterWidthFar(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorLengthNear(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHNEAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHNEAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorLengthFar(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorRadiusNear(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("RADIUSNEAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("RADIUSNEAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorRadiusFar(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("RADIUSFAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("RADIUSFAR") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -109,19 +109,19 @@ SCT_ForwardModuleParameters::fwdSensorActiveFar(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdSensorActiveHalfLengthNear(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHNEAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHNEAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorActiveHalfLengthFar(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHFAR") * CLHEP::mm;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorAngularPitch(int iModuleType) const
 {
-  return  m_rdb->fwdSensor(iModuleType)->getDouble("ANGULARPITCH") * CLHEP::radian;
+  return  m_rdb->fwdSensor(iModuleType)->getDouble("ANGULARPITCH") * GeoModelKernelUnits::radian;
 }
 
 int
@@ -149,37 +149,37 @@ SCT_ForwardModuleParameters::fwdSensorStripShift(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdHybridThickness() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("THICKNESS") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdHybridInnerWidth() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("INNERWIDTH") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("INNERWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdHybridOuterWidth() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("OUTERWIDTH") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("OUTERWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdHybridLength() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("LENGTH") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("LENGTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdHybridLengthToCorner() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("LENGTHTOCORNER") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("LENGTHTOCORNER") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdHybridMountPointToInnerEdge() const
 {
-  return  m_rdb->fwdHybrid()->getDouble("MOUNTPOINTTOINEDGE") * CLHEP::mm;
+  return  m_rdb->fwdHybrid()->getDouble("MOUNTPOINTTOINEDGE") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -194,26 +194,26 @@ SCT_ForwardModuleParameters::fwdHybridMaterial() const
 double 
 SCT_ForwardModuleParameters::fwdSpineThickness(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("THICKNESS") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSpineWidth(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("WIDTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("WIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSpineEndToModuleCenter(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("ENDTOMODULECENTER") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("ENDTOMODULECENTER") * GeoModelKernelUnits::mm;
 }
 
 
 double 
 SCT_ForwardModuleParameters::fwdSpineEndLocatorToEndMount(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("ENDLOCATORTOENDMOUNT") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("ENDLOCATORTOENDMOUNT") * GeoModelKernelUnits::mm;
 }
 
 
@@ -230,55 +230,55 @@ SCT_ForwardModuleParameters::fwdSpineMaterial(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdSubSpineInnerWidth(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERWIDTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineInnerLength(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERLENGTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERLENGTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineInnerRefDist(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERREFDIST") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBINNERREFDIST") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineMiddleWidth(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLEWIDTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLEWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineMiddleLength(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLELENGTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLELENGTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineMiddleRefDist(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLEREFDIST") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBMIDDLEREFDIST") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineOuterWidth(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERWIDTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERWIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineOuterLength(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERLENGTH") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERLENGTH") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSubSpineOuterRefDist(int iModuleType) const
 {
-  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERREFDIST") * CLHEP::mm;
+  return  m_rdb->fwdSpine(iModuleType)->getDouble("SUBOUTERREFDIST") * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -301,7 +301,7 @@ SCT_ForwardModuleParameters::fwdModuleNumTypes() const
 double 
 SCT_ForwardModuleParameters::fwdModuleStereoAngle(int iModuleType) const
 {
-  return m_rdb->fwdModule(iModuleType)->getDouble("STEREOANGLE") * CLHEP::milliradian;
+  return m_rdb->fwdModule(iModuleType)->getDouble("STEREOANGLE") * GeoModelKernelUnits::milliradian;
 }
 
 int
@@ -323,25 +323,25 @@ SCT_ForwardModuleParameters::fwdModuleUpperSideNumber(int iModuleType) const
 double
 SCT_ForwardModuleParameters::fwdModuleGlueThickness(int iModuleType) const
 {
-  return m_rdb->fwdModule(iModuleType)->getDouble("GLUETHICKNESS") * CLHEP::mm;
+  return m_rdb->fwdModule(iModuleType)->getDouble("GLUETHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardModuleParameters::fwdModuleMountPoint(int iModuleType) const
 {
-  return m_rdb->fwdModule(iModuleType)->getDouble("MOUNTPOINT") * CLHEP::mm;
+  return m_rdb->fwdModule(iModuleType)->getDouble("MOUNTPOINT") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardModuleParameters::fwdModuleDistBtwMountPoints(int iModuleType) const
 {
-  return m_rdb->fwdModule(iModuleType)->getDouble("DISTBTWMOUNTPOINTS") * CLHEP::mm;
+  return m_rdb->fwdModule(iModuleType)->getDouble("DISTBTWMOUNTPOINTS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdModuleHybridEdgeToSpine(int iModuleType) const
 {
-  return m_rdb->fwdModule(iModuleType)->getDouble("HYBRIDEDGETOSPINE")*CLHEP::mm;
+  return m_rdb->fwdModule(iModuleType)->getDouble("HYBRIDEDGETOSPINE")*GeoModelKernelUnits::mm;
 }  
 
 bool 
@@ -367,19 +367,19 @@ SCT_ForwardModuleParameters::fwdModuleConnectorPresent() const
 double 
 SCT_ForwardModuleParameters::fwdModuleConnectorDeltaR() const
 {
-  return m_rdb->fwdModuleConnector()->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdModuleConnector()->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdModuleConnectorRPhi() const
 {
-  return m_rdb->fwdModuleConnector()->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdModuleConnector()->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdModuleConnectorThickness() const
 {
-  return m_rdb->fwdModuleConnector()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdModuleConnector()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardParameters.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardParameters.cxx
index a8069626575de9df7ffd021361e0eb8f7e253970..a56ae8177ae54af028955ea37b02c1ec7539175f 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_ForwardParameters.cxx
@@ -10,8 +10,7 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 
 #include "SCT_GeoModel/SCT_FSIHelper.h"
-
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 #include <cmath>
@@ -39,13 +38,13 @@ SCT_ForwardParameters::fwdRingNumModules(int iRing) const
 double
 SCT_ForwardParameters::fwdRingModuleStagger(int iRing) const
 {
-  return m_rdb->fwdRing(iRing)->getDouble("MODULESTAGGER") * CLHEP::mm;
+  return m_rdb->fwdRing(iRing)->getDouble("MODULESTAGGER") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingPhiOfRefModule(int iRing) const
 {
-  return m_rdb->fwdRing(iRing)->getDouble("PHIOFREFMODULE") * CLHEP::deg;
+  return m_rdb->fwdRing(iRing)->getDouble("PHIOFREFMODULE") * GeoModelKernelUnits::deg;
 }
 
 
@@ -58,7 +57,7 @@ SCT_ForwardParameters::fwdRingUsualRingSide(int iRing) const
 double
 SCT_ForwardParameters::fwdRingDistToDiscCenter(int iRing) const
 {
-  return m_rdb->fwdRing(iRing)->getDouble("RINGTODISCCENTER") * CLHEP::mm;
+  return m_rdb->fwdRing(iRing)->getDouble("RINGTODISCCENTER") * GeoModelKernelUnits::mm;
 }
 
 
@@ -69,7 +68,7 @@ SCT_ForwardParameters::fwdRingDistToDiscCenter(int iRing) const
 double
 SCT_ForwardParameters::fwdWheelZPosition(int iWheel) const
 {
-  return m_rdb->fwdWheel(iWheel)->getDouble("ZPOSITION") * CLHEP::mm;
+  return m_rdb->fwdWheel(iWheel)->getDouble("ZPOSITION") * GeoModelKernelUnits::mm;
 }
 
 // Returns +/-1 
@@ -168,19 +167,19 @@ SCT_ForwardParameters::fwdWheelModuleType(int iWheel, int iRing, int ec) const
 double
 SCT_ForwardParameters::fwdDiscSupportInnerRadius() const
 {
-  return m_rdb->fwdDiscSupport()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdDiscSupport()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdDiscSupportOuterRadius() const
 {
-  return m_rdb->fwdDiscSupport()->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdDiscSupport()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
  
 double
 SCT_ForwardParameters::fwdDiscSupportThickness() const
 {
-  return m_rdb->fwdDiscSupport()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdDiscSupport()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -207,7 +206,7 @@ SCT_ForwardParameters::fwdPatchPanelType(int iLoc) const
 double
 SCT_ForwardParameters::fwdPatchPanelLocAngle(int iLoc) const
 {
-  return m_rdb->fwdPatchPanelLoc(iLoc)->getDouble("LOCANGLE") * CLHEP::degree;
+  return m_rdb->fwdPatchPanelLoc(iLoc)->getDouble("LOCANGLE") * GeoModelKernelUnits::degree;
 }
 
 bool
@@ -225,26 +224,26 @@ SCT_ForwardParameters::fwdNumPatchPanelTypes() const
 double
 SCT_ForwardParameters::fwdPatchPanelThickness(int iType) const
 {
-  return m_rdb->fwdPatchPanel(iType)->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdPatchPanel(iType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPatchPanelMidRadius(int iType) const
 {
-  return m_rdb->fwdPatchPanel(iType)->getDouble("MIDRADIUS") * CLHEP::mm;
+  return m_rdb->fwdPatchPanel(iType)->getDouble("MIDRADIUS") * GeoModelKernelUnits::mm;
 }
 
  
 double
 SCT_ForwardParameters::fwdPatchPanelDeltaR(int iType) const
 {
-  return m_rdb->fwdPatchPanel(iType)->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdPatchPanel(iType)->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPatchPanelRPhi(int iType) const
 {
-  return m_rdb->fwdPatchPanel(iType)->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdPatchPanel(iType)->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -270,19 +269,19 @@ SCT_ForwardParameters::fwdPPConnectorPresent() const
 double
 SCT_ForwardParameters::fwdPPConnectorThickness() const
 {
-  return m_rdb->fwdPPConnector()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdPPConnector()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPPConnectorDeltaR() const
 {
-  return m_rdb->fwdPPConnector()->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdPPConnector()->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPPConnectorRPhi() const
 {
-  return m_rdb->fwdPPConnector()->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdPPConnector()->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -308,19 +307,19 @@ SCT_ForwardParameters::fwdPPCoolingPresent() const
 double
 SCT_ForwardParameters::fwdPPCoolingThickness() const
 {
-  return m_rdb->fwdPPCooling()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdPPCooling()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPPCoolingDeltaR() const
 {
-  return m_rdb->fwdPPCooling()->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdPPCooling()->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdPPCoolingRPhi() const
 {
-  return m_rdb->fwdPPCooling()->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdPPCooling()->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -348,25 +347,25 @@ SCT_ForwardParameters::fwdCoolingBlockMainOrSecondary(int iType) const
 double
 SCT_ForwardParameters::fwdCoolingBlockDeltaR(int iType) const
 {
-  return m_rdb->fwdCoolingBlock(iType)->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdCoolingBlock(iType)->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdCoolingBlockRPhi(int iType) const
 {
-  return m_rdb->fwdCoolingBlock(iType)->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdCoolingBlock(iType)->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdCoolingBlockThickness(int iType) const
 {
-  return m_rdb->fwdCoolingBlock(iType)->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdCoolingBlock(iType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdCoolingBlockOffsetFromDisc(int iType) const
 {
-  return m_rdb->fwdCoolingBlock(iType)->getDouble("OFFSETFROMDISC") * CLHEP::mm;
+  return m_rdb->fwdCoolingBlock(iType)->getDouble("OFFSETFROMDISC") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -382,19 +381,19 @@ SCT_ForwardParameters::fwdCoolingBlockMaterial(int iType) const
 double 
 SCT_ForwardParameters::fwdDiscPowerTapeInnerRadius(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEINNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEINNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdDiscPowerTapeOuterRadius(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEOUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEOUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdDiscPowerTapeThickness(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPETHICKNESS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPETHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -411,19 +410,19 @@ SCT_ForwardParameters::fwdDiscPowerTapeMaterial(int iRing) const
 double 
 SCT_ForwardParameters::fwdRingCoolingInnerRadius(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGINNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGINNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdRingCoolingOuterRadius(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGOUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGOUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdRingCoolingThickness(int iRing) const
 {
-  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGTHICKNESS") * CLHEP::mm;
+  return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGTHICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -449,13 +448,13 @@ SCT_ForwardParameters::fwdDiscFixationPresent() const
 double
 SCT_ForwardParameters::fwdDiscFixationThickness() const
 {
-  return m_rdb->fwdDiscFixation()->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdDiscFixation()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdDiscFixationRadius() const
 {
-  return m_rdb->fwdDiscFixation()->getDouble("RADIUS") * CLHEP::mm;
+  return m_rdb->fwdDiscFixation()->getDouble("RADIUS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -470,25 +469,25 @@ SCT_ForwardParameters::fwdDiscFixationMaterial() const
 double 
 SCT_ForwardParameters::fwdSupportFrameRadialThickness() const
 {
-  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEDELTAR") * CLHEP::mm;
+  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEDELTAR") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdSupportFrameInnerRadius() const
 {
-  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEINNERRAD") * CLHEP::mm;
+  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEINNERRAD") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdSupportFrameZMin() const 
 {
-  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMIN") * CLHEP::mm;
+  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMIN") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdSupportFrameZMax() const 
 {
-  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMAX") * CLHEP::mm;
+  return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMAX") * GeoModelKernelUnits::mm;
 } 
 
 std::string 
@@ -503,7 +502,7 @@ SCT_ForwardParameters::fwdSupportFrameMaterial() const
 double
 SCT_ForwardParameters::fwdCoolingPipeRadius() const
 {
-  return m_rdb->fwdServices()->getDouble("COOLINGPIPERADIUS") * CLHEP::mm;
+  return m_rdb->fwdServices()->getDouble("COOLINGPIPERADIUS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -518,7 +517,7 @@ SCT_ForwardParameters::fwdCoolingPipeMaterial() const
 double
 SCT_ForwardParameters::fwdPowerTapeCrossSectArea() const
 {
-  return m_rdb->fwdServices()->getDouble("POWERTAPECROSSSECT") * CLHEP::mm2;
+  return m_rdb->fwdServices()->getDouble("POWERTAPECROSSSECT") * GeoModelKernelUnits::mm2;
 }
 
 
@@ -540,21 +539,21 @@ SCT_ForwardParameters::fwdFSINumGeomTypes() const
 double
 SCT_ForwardParameters::fwdFSIGeomDeltaR(int iType) const
 {
-  return m_rdb->fwdFSIType(iType)->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdFSIType(iType)->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdFSIGeomRPhi(int iType) const
 {
-  return m_rdb->fwdFSIType(iType)->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdFSIType(iType)->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdFSIGeomThickness(int iType) const
 {
   // Fix for SCT-DC3-03. May be removed when ATLAS-DC3-07 is obsolete.
-  if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return  26*CLHEP::mm;
-  return m_rdb->fwdFSIType(iType)->getDouble("THICKNESS") * CLHEP::mm;
+  if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return  26*GeoModelKernelUnits::mm;
+  return m_rdb->fwdFSIType(iType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -567,8 +566,8 @@ double
 SCT_ForwardParameters::fwdFSIGeomZOffset(int iType) const
 {
   // Fix for SCT-DC3-03. May be removed when ATLAS-DC3-07 is obsolete.
-  if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return  22*CLHEP::mm;
-  return m_rdb->fwdFSIType(iType)->getDouble("ZOFFSET") * CLHEP::mm;
+  if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return  22*GeoModelKernelUnits::mm;
+  return m_rdb->fwdFSIType(iType)->getDouble("ZOFFSET") * GeoModelKernelUnits::mm;
 }
 
 
@@ -617,7 +616,7 @@ SCT_ForwardParameters::fwdCylinderServiceLocName(int iLoc) const
 double
 SCT_ForwardParameters::fwdCylinderServiceLocAngle(int iLoc) const
 {
-  return m_rdb->fwdCylServLoc(iLoc)->getDouble("LOCANGLE") * CLHEP::degree;
+  return m_rdb->fwdCylServLoc(iLoc)->getDouble("LOCANGLE") * GeoModelKernelUnits::degree;
 }
 
 int
@@ -641,13 +640,13 @@ SCT_ForwardParameters::fwdCylinderServiceMaterial(int iType) const
 double
 SCT_ForwardParameters::fwdCylinderServiceDeltaR(int iType) const
 {
-  return m_rdb->fwdCylServ(iType)->getDouble("DELTAR") * CLHEP::mm;
+  return m_rdb->fwdCylServ(iType)->getDouble("DELTAR") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdCylinderServiceRPhi(int iType) const
 {
-  return m_rdb->fwdCylServ(iType)->getDouble("RPHI") * CLHEP::mm;
+  return m_rdb->fwdCylServ(iType)->getDouble("RPHI") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -668,25 +667,25 @@ SCT_ForwardParameters::fwdThermalShieldMaterial(int iElement) const
 double
 SCT_ForwardParameters::fwdThermalShieldInnerRadius(int iElement) const
 {
-  return m_rdb->fwdThermalShield(iElement)->getDouble("INNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdThermalShield(iElement)->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdThermalShieldOuterRadius(int iElement) const
 {
-  return m_rdb->fwdThermalShield(iElement)->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdThermalShield(iElement)->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdThermalShieldZMin(int iElement) const 
 {
-  return m_rdb->fwdThermalShield(iElement)->getDouble("ZMIN") * CLHEP::mm;
+  return m_rdb->fwdThermalShield(iElement)->getDouble("ZMIN") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdThermalShieldZMax(int iElement) const 
 {
-  return m_rdb->fwdThermalShield(iElement)->getDouble("ZMAX") * CLHEP::mm;
+  return m_rdb->fwdThermalShield(iElement)->getDouble("ZMAX") * GeoModelKernelUnits::mm;
 } 
 
 
@@ -702,31 +701,31 @@ SCT_ForwardParameters::fwdNumWheels() const
 double
 SCT_ForwardParameters::fwdInnerRadius() const
 {
-  return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdOuterRadius() const
 {
-  return m_rdb->fwdGeneral()->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdGeneral()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdZMin() const
 {
-  return m_rdb->fwdGeneral()->getDouble("ZMIN") * CLHEP::mm;
+  return m_rdb->fwdGeneral()->getDouble("ZMIN") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdZMax() const
 {
-  return m_rdb->fwdGeneral()->getDouble("ZMAX") * CLHEP::mm;
+  return m_rdb->fwdGeneral()->getDouble("ZMAX") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdTrtGapPos() const
 {
-  return m_rdb->fwdGeneral()->getDouble("TRTGAPPOS") * CLHEP::mm;
+  return m_rdb->fwdGeneral()->getDouble("TRTGAPPOS") * GeoModelKernelUnits::mm;
 }
 
 //
@@ -752,19 +751,19 @@ SCT_ForwardParameters::fwdOptoHarnessDiscType(int index) const
 double 
 SCT_ForwardParameters::fwdOptoHarnessInnerRadius(int index) const
 {
-  return m_rdb->fwdOptoHarness(index)->getDouble("INNERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdOptoHarness(index)->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdOptoHarnessOuterRadius(int index) const
 {
-  return m_rdb->fwdOptoHarness(index)->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return m_rdb->fwdOptoHarness(index)->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardParameters::fwdOptoHarnessThickness(int index) const
 {
-  return m_rdb->fwdOptoHarness(index)->getDouble("THICKNESS") * CLHEP::mm;
+  return m_rdb->fwdOptoHarness(index)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingBlock.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingBlock.cxx
index 7bda26a10105c3bc8101ac2611e3e663fa5e6193..b3420cf13797aabf14b2c13852b2fb6eb2a869d2 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingBlock.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingBlock.cxx
@@ -13,7 +13,9 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include <iostream>
 
 SCT_FwdCoolingBlock::SCT_FwdCoolingBlock(const std::string & name, int hiLo, int mainOrSecondary)
   : SCT_SharedComponentFactory(name), m_hiLo(hiLo), m_mainSec(mainOrSecondary)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingPipe.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingPipe.cxx
index 490698dcc643e1a4fce38a28c8434f2ff33a1b07..2365854c61dfe46327ee4adacf05ede013b499bb 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingPipe.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCoolingPipe.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -47,13 +47,13 @@ GeoVPhysVol *
 SCT_FwdCoolingPipe::build() 
 {
   // Calculate the dimensions.
-  // area = CLHEP::pi*(pipeRadius)^2 * numPipes
-  // also area = 2*CLHEP::pi*r_ave*delta_r approx= 2 * CLHEP::pi * rMin * delta_r
+  // area = GeoModelKernelUnits::pi*(pipeRadius)^2 * numPipes
+  // also area = 2*GeoModelKernelUnits::pi*r_ave*delta_r approx= 2 * GeoModelKernelUnits::pi * rMin * delta_r
   // solve for delta_r
   // m_thickness = delta_r
 
-  double area = CLHEP::pi * sqr(m_pipeRadius) * m_numPipes;
-  m_thickness = area/(2. * CLHEP::pi * m_innerRadius);
+  double area = GeoModelKernelUnits::pi * sqr(m_pipeRadius) * m_numPipes;
+  m_thickness = area/(2. * GeoModelKernelUnits::pi * m_innerRadius);
   m_outerRadius = m_innerRadius +  m_thickness;
 
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCylinderServices.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCylinderServices.cxx
index 1be6a6d138bec23ea02343eef6457c9434b99b95..75544a45403829787034d4fe4cee5abe506c3bc8 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCylinderServices.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdCylinderServices.cxx
@@ -17,10 +17,10 @@
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 
 #include <sstream>
@@ -136,7 +136,7 @@ SCT_FwdCylinderServices::build()
   double coolingDPhi = m_coolingRPhi / coolingRmin;
   const GeoCons* coolingShape = new GeoCons(coolingRmin, coolingRmin, coolingRmax1, coolingRmax2, 
                                             0.5 * m_length, 
-                                            -0.5 * coolingDPhi * CLHEP::radian, coolingDPhi * CLHEP::radian);
+                                            -0.5 * coolingDPhi * GeoModelKernelUnits::radian, coolingDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * coolingLog = new GeoLogVol("CoolingPipe", coolingShape, materials.getMaterialForVolume(m_coolingMaterialName, coolingShape->volume()));
   GeoPhysVol * coolingPipe = new GeoPhysVol(coolingLog);
 
@@ -146,7 +146,7 @@ SCT_FwdCylinderServices::build()
   double lmtRmax2 = lmtRmin + 1.8 * m_lmtDeltaR;
   double lmtDPhi = m_lmtRPhi / lmtRmin;
   const GeoCons* lmtShape = new GeoCons(lmtRmin, lmtRmin, lmtRmax1, lmtRmax2, 0.5 * m_length, 
-                                        -0.5 * lmtDPhi * CLHEP::radian, lmtDPhi * CLHEP::radian);
+                                        -0.5 * lmtDPhi * GeoModelKernelUnits::radian, lmtDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * lmtLog = new GeoLogVol("LMT", lmtShape, materials.getMaterialForVolume(m_lmtMaterialName,lmtShape->volume()));
   GeoPhysVol * lmt = new GeoPhysVol(lmtLog);
 
@@ -156,7 +156,7 @@ SCT_FwdCylinderServices::build()
   double lmtCoolingDPhi = m_lmtCoolingRPhi / lmtCoolingRmin;
   double lmtLength = m_length - 2. * m_lmtCoolingZOffset;
   const GeoTubs* lmtCoolingShape = new GeoTubs(lmtCoolingRmin, lmtCoolingRmax, 0.5 * lmtLength, 
-                                               -0.5 * lmtCoolingDPhi * CLHEP::radian, lmtCoolingDPhi * CLHEP::radian);
+                                               -0.5 * lmtCoolingDPhi * GeoModelKernelUnits::radian, lmtCoolingDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * lmtCoolingLog = new GeoLogVol("LMTCooling", lmtCoolingShape, materials.getMaterialForVolume(m_lmtCoolingMaterialName,lmtCoolingShape->volume()));
   GeoPhysVol * lmtCooling = new GeoPhysVol(lmtCoolingLog);
 
@@ -166,7 +166,7 @@ SCT_FwdCylinderServices::build()
   double fibreRmax2 = fibreRmin + 1.8 * m_fibreDeltaR;
   double fibreDPhi = m_fibreRPhi / fibreRmin;
   const GeoCons* fibreShape = new GeoCons(fibreRmin, fibreRmin, fibreRmax1, fibreRmax2, 0.5 * m_length,
-                                          -0.5 * fibreDPhi * CLHEP::radian, fibreDPhi * CLHEP::radian);
+                                          -0.5 * fibreDPhi * GeoModelKernelUnits::radian, fibreDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * fibreLog = new GeoLogVol("Fibres", fibreShape, materials.getMaterialForVolume(m_fibreMaterialName,fibreShape->volume()));
   GeoPhysVol * fibres = new GeoPhysVol(fibreLog);
 
@@ -175,7 +175,7 @@ SCT_FwdCylinderServices::build()
   double nPipeRmax = nPipeRmin + m_nPipeDeltaR;
   double nPipeDPhi = m_nPipeRPhi / nPipeRmin;
   const GeoTubs* nPipeShape = new GeoTubs(nPipeRmin, nPipeRmax, 0.5 * m_length, 
-                                          -0.5 * nPipeDPhi * CLHEP::radian, nPipeDPhi * CLHEP::radian);
+                                          -0.5 * nPipeDPhi * GeoModelKernelUnits::radian, nPipeDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * nPipeLog = new GeoLogVol("NPipe", nPipeShape, materials.getMaterialForVolume(m_nPipeMaterialName,nPipeShape->volume()));
   GeoPhysVol * nPipe = new GeoPhysVol(nPipeLog);
 
@@ -184,7 +184,7 @@ SCT_FwdCylinderServices::build()
   double railRmax = railRmin + m_railDeltaR;
   double railDPhi = m_railRPhi / railRmin;
   const GeoTubs* railShape = new GeoTubs(railRmin, railRmax,
-                                         0.5 * m_length, -0.5 * railDPhi * CLHEP::radian, railDPhi * CLHEP::radian);
+                                         0.5 * m_length, -0.5 * railDPhi * GeoModelKernelUnits::radian, railDPhi * GeoModelKernelUnits::radian);
   const GeoLogVol * railLog = new GeoLogVol("Rail", railShape, materials.getMaterialForVolume(m_railMaterialName,railShape->volume()));
   GeoPhysVol * rail = new GeoPhysVol(railLog);
 
@@ -193,43 +193,43 @@ SCT_FwdCylinderServices::build()
 
     // Cooling pipe
     for (unsigned int iLoc = 0; iLoc < m_coolingLocAngle.size(); iLoc++) {
-      double coolingAngle = m_coolingLocAngle[iLoc] + iquad * 90*CLHEP::degree;
-      //      std::cout << "Placing cooling pipe at " << coolingAngle / CLHEP::degree << " CLHEP::degrees" << std::endl;
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(coolingAngle)));
+      double coolingAngle = m_coolingLocAngle[iLoc] + iquad * 90*GeoModelKernelUnits::degree;
+      //      std::cout << "Placing cooling pipe at " << coolingAngle / GeoModelKernelUnits::degree << " GeoModelKernelUnits::degrees" << std::endl;
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(coolingAngle)));
       cylinder->add(coolingPipe);
     }
 
     // Low Mass Tapes and LMT Cooling are at same phi positions
     for (unsigned int iLoc = 0; iLoc < m_lmtLocAngle.size(); iLoc++) {
-      double lmtAngle = m_lmtLocAngle[iLoc] + iquad * 90*CLHEP::degree;
-      //      std::cout << "Placing LMT at " << lmtAngle / CLHEP::degree << " CLHEP::degrees" << std::endl;
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(lmtAngle)));
+      double lmtAngle = m_lmtLocAngle[iLoc] + iquad * 90*GeoModelKernelUnits::degree;
+      //      std::cout << "Placing LMT at " << lmtAngle / GeoModelKernelUnits::degree << " GeoModelKernelUnits::degrees" << std::endl;
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)));
       cylinder->add(lmt);
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(lmtAngle)*HepGeom::TranslateZ3D(m_lmtCoolingZOffset)));
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)*GeoTrf::TranslateZ3D(m_lmtCoolingZOffset)));
       cylinder->add(lmtCooling);
     }
 
     // Fibres are between pairs of LMTs
     for (unsigned int iLoc = 0; iLoc < m_fibreLocAngle.size(); iLoc++) {
-      double fibreAngle = m_fibreLocAngle[iLoc] + iquad * 90*CLHEP::degree;
-      //      std::cout << "Placing fibres at " << fibreAngle / CLHEP::degree << " CLHEP::degrees" << std::endl;
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(fibreAngle)));
+      double fibreAngle = m_fibreLocAngle[iLoc] + iquad * 90*GeoModelKernelUnits::degree;
+      //      std::cout << "Placing fibres at " << fibreAngle / GeoModelKernelUnits::degree << " GeoModelKernelUnits::degrees" << std::endl;
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(fibreAngle)));
       cylinder->add(fibres);
     }
 
     // N2 Pipes
     for (unsigned int iLoc = 0; iLoc < m_nPipeLocAngle.size(); iLoc++) {
-      double nPipeAngle = m_nPipeLocAngle[iLoc] + iquad * 90*CLHEP::degree;
-      //      std::cout << "Placing N2 pipe at " << nPipeAngle / CLHEP::degree << " CLHEP::degrees" << std::endl;
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(nPipeAngle)));
+      double nPipeAngle = m_nPipeLocAngle[iLoc] + iquad * 90*GeoModelKernelUnits::degree;
+      //      std::cout << "Placing N2 pipe at " << nPipeAngle / GeoModelKernelUnits::degree << " GeoModelKernelUnits::degrees" << std::endl;
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(nPipeAngle)));
       cylinder->add(nPipe);
     }
 
     // Rails
     for (unsigned int iLoc = 0; iLoc < m_railLocAngle.size(); iLoc++) {
-      double railAngle = m_railLocAngle[iLoc] + iquad * 90*CLHEP::degree;
-      //      std::cout << "Placing rail at " << railAngle / CLHEP::degree << " CLHEP::degrees" << std::endl;
-      cylinder->add(new GeoTransform(HepGeom::RotateZ3D(railAngle)));
+      double railAngle = m_railLocAngle[iLoc] + iquad * 90*GeoModelKernelUnits::degree;
+      //      std::cout << "Placing rail at " << railAngle / GeoModelKernelUnits::degree << " GeoModelKernelUnits::degrees" << std::endl;
+      cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(railAngle)));
       cylinder->add(rail);
     }
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscFixation.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscFixation.cxx
index 734b3ee651809fe4b39eb605be3ad2e07b828b86..0bd1309dc1643f5384805c733315c037c983cd63 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscFixation.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscFixation.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdDiscFixation::SCT_FwdDiscFixation(const std::string & name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscPowerTape.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscPowerTape.cxx
index 930585f15a51a0672ac3db5849cd3f1eb5ff8be8..bb71f56acd3dcc47a878be091486c33df00c9741 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscPowerTape.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscPowerTape.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdDiscPowerTape::SCT_FwdDiscPowerTape(const std::string & name, int iRing)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscSupport.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscSupport.cxx
index 814773ea56d12c49e75adf6a14fcf3355edbcd3a..9e66dc2944b76834c3a4c3529ea72c8ab8ade1f6 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscSupport.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdDiscSupport.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_FwdDiscSupport::SCT_FwdDiscSupport(const std::string & name, int iWheel)
   : SCT_SharedComponentFactory(name), m_iWheel(iWheel)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdFSI.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdFSI.cxx
index 563e36f945147350503e0520a222812937544a50..98c77903a3f0ce3891165b5276435619e78a5446 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdFSI.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdFSI.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdFSI::SCT_FwdFSI(const std::string & name, int type)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdHybrid.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdHybrid.cxx
index 5da3902d00321a0a86c7953bfb571fed6c91e6c5..761b82e5d9d4bfb09830841a8ce4976dc523a73f 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdHybrid.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdHybrid.cxx
@@ -28,11 +28,11 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include <cmath>
 
@@ -54,9 +54,9 @@ SCT_FwdHybrid::getParameters()
 
   m_materialName  = parameters->fwdHybridMaterial();
 
-  //double CLHEP::radlength;
-  //CLHEP::radlength = 18.8 * CLHEP::cm;
-  // [CLHEP::cm] for carbon (Partickle Physics Booklet)
+  //double GeoModelKernelUnits::radlength;
+  //GeoModelKernelUnits::radlength = 18.8 * GeoModelKernelUnits::cm;
+  // [GeoModelKernelUnits::cm] for carbon (Partickle Physics Booklet)
 
   m_thickness  = parameters->fwdHybridThickness();
   m_thickness2 = m_thickness;
@@ -96,7 +96,7 @@ GeoVPhysVol * SCT_FwdHybrid::build()
   //  double position = zsmi[m_ringType].mountd - zhyb->hybysh + (zhyb->hyby - zhyb->hybycor) / 2.;
   if (m_ringType == 0) { position = -1 * position;  };  // outer module, hybrid in inner side
  
-  const GeoShape & hybridPos1 = (*hybridShape2 << HepGeom::TranslateZ3D(position));
+  const GeoShape & hybridPos1 = (*hybridShape2 << GeoTrf::TranslateZ3D(position));
   
   position = parameters->fwdModuleMountPoint(m_ringType) - (m_mountPointToInnerEdge) 
     + m_length - 0.5 * parameters->fwdHybridLengthToCorner();
@@ -105,10 +105,10 @@ GeoVPhysVol * SCT_FwdHybrid::build()
     position = -1 * position;  };
   
   double rotation = 0.;
-  if (m_ringType == 0)  rotation = 180. * CLHEP::deg;  
+  if (m_ringType == 0)  rotation = 180. * GeoModelKernelUnits::deg;  
   
-  const GeoShape & hybridPos2 = (*hybridShape1 << HepGeom::RotateX3D(rotation)
-                      << HepGeom::TranslateZ3D(position) );
+  const GeoShape & hybridPos2 = (*hybridShape1 << GeoTrf::RotateX3D(rotation)
+                      << GeoTrf::TranslateZ3D(position) );
   
 
   SCT_MaterialManager materials;
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModule.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModule.cxx
index ae995a69fb794baa8f9ebda3bc6914a54764fe3e..7c5baa4f2af3f18d3289ded5ce1c8ac49a39a911 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModule.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModule.cxx
@@ -37,11 +37,11 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+
+
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include <cmath>
 #include <sstream>
@@ -104,42 +104,42 @@ const GeoLogVol * SCT_FwdModule::preBuild()
   const SCT_GeneralParameters * generalParameters = geometryManager()->generalParameters();
   
   double safety = generalParameters->safety();
-  double safetyTmp = safety * CLHEP::cm; // For compatibility with minor bug in older version - safety already in CLHEP units;
+  double safetyTmp = safety * GeoModelKernelUnits::cm; // For compatibility with minor bug in older version - safety already in CLHEP units;
 
-  // module_length = (zhyb->hyby - zhyb->hybysh + zsmi[m_ringType].mountd2 + 0.33 ) * CLHEP::cm + safety;
+  // module_length = (zhyb->hyby - zhyb->hybysh + zsmi[m_ringType].mountd2 + 0.33 ) * GeoModelKernelUnits::cm + safety;
   // Distance from outer bybrid edge to outer spine edge.
-  // FIXME: The 1.05CLHEP::mm is not needed
-  double moduleLength = m_hybrid->mountPointToOuterEdge() + m_mountPointToCenter + m_spine->moduleCenterToEnd() + 1.05 * CLHEP::mm;
+  // FIXME: The 1.05GeoModelKernelUnits::mm is not needed
+  double moduleLength = m_hybrid->mountPointToOuterEdge() + m_mountPointToCenter + m_spine->moduleCenterToEnd() + 1.05 * GeoModelKernelUnits::mm;
   m_length = moduleLength + safety; // We add a bit of safety for the envelope
 
-  //  module_thickness = (zhyb->hybz0 * 2 + safety) * CLHEP::cm;
+  //  module_thickness = (zhyb->hybz0 * 2 + safety) * GeoModelKernelUnits::cm;
   double sensorEnvelopeThickness = 2 * m_sensor->thickness() + m_spine->thickness() + 2 * m_glueThickness;
   m_thickness = std::max(sensorEnvelopeThickness,  m_hybrid->thickness());
 
-  // module_widthInner = ((zsmo->subdq + zssp[m_ringType].ssp0l + 0.325) * 2.+ 0.7 + safety)*CLHEP::cm;   // upto to NOVA_760
-  // module_widthOuter = ((zsmo->subdq + zssp[m_ringType].ssp2l + 0.325) * 2.+ 0.7 + safety)*CLHEP::cm;   // upto to NOVA_760
+  // module_widthInner = ((zsmo->subdq + zssp[m_ringType].ssp0l + 0.325) * 2.+ 0.7 + safety)*GeoModelKernelUnits::cm;   // upto to NOVA_760
+  // module_widthOuter = ((zsmo->subdq + zssp[m_ringType].ssp2l + 0.325) * 2.+ 0.7 + safety)*GeoModelKernelUnits::cm;   // upto to NOVA_760
   
-  //module_widthInner = ((zsmo->subdq + zssp[m_ringType].ssp0l) * 2.+ 0.7 + safety)*CLHEP::cm;
-  //module_widthOuter = ((zsmo->subdq + zssp[m_ringType].ssp2l) * 2.+ 0.7 + safety)*CLHEP::cm;
+  //module_widthInner = ((zsmo->subdq + zssp[m_ringType].ssp0l) * 2.+ 0.7 + safety)*GeoModelKernelUnits::cm;
+  //module_widthOuter = ((zsmo->subdq + zssp[m_ringType].ssp2l) * 2.+ 0.7 + safety)*GeoModelKernelUnits::cm;
   
-  m_widthInner = (m_spine->width() + 2 * m_subspineL->innerWidth() + 0.7*CLHEP::cm) + safetyTmp; 
-  m_widthOuter = (m_spine->width() + 2 * m_subspineL->outerWidth() + 0.7*CLHEP::cm) + safetyTmp; 
+  m_widthInner = (m_spine->width() + 2 * m_subspineL->innerWidth() + 0.7*GeoModelKernelUnits::cm) + safetyTmp; 
+  m_widthOuter = (m_spine->width() + 2 * m_subspineL->outerWidth() + 0.7*GeoModelKernelUnits::cm) + safetyTmp; 
   
 
 
   if (m_ringType == 3 ) {
-    //  module_widthOuter = (( zsmo->subdq + zssp[m_ringType].ssp2l + 0.325) * 2.+ 1.6 + safety)*CLHEP::cm;  // upto to NOVA_760
-    //  module_widthOuter = (( zsmo->subdq + zssp[m_ringType].ssp2l) * 2.+ 1.6 + safety)*CLHEP::cm; 
-    m_widthOuter = m_spine->width() + 2 * m_subspineL->outerWidth() + 1.6*CLHEP::cm + safetyTmp; 
+    //  module_widthOuter = (( zsmo->subdq + zssp[m_ringType].ssp2l + 0.325) * 2.+ 1.6 + safety)*GeoModelKernelUnits::cm;  // upto to NOVA_760
+    //  module_widthOuter = (( zsmo->subdq + zssp[m_ringType].ssp2l) * 2.+ 1.6 + safety)*GeoModelKernelUnits::cm; 
+    m_widthOuter = m_spine->width() + 2 * m_subspineL->outerWidth() + 1.6*GeoModelKernelUnits::cm + safetyTmp; 
   }  
     
   // Calculate module shift. Distance between module physics center and center of envelope.  
   int hybridSign =  m_hybridIsOnInnerEdge ? +1: -1;
-  //module_shift = (zhyb->hyby - zhyb->hybysh + zsmi[m_ringType].mountd + 0.05)*CLHEP::cm;
+  //module_shift = (zhyb->hyby - zhyb->hybysh + zsmi[m_ringType].mountd + 0.05)*GeoModelKernelUnits::cm;
   //module_shift = hybrid * (module_length / 2. - module_shift);
 
-  double moduleCenterToHybridOuterEdge = m_hybrid->mountPointToOuterEdge() + m_mountPointToCenter + 0.5*CLHEP::mm;
-  //FIXME: Should be: (ie don't need the 0.5CLHEP::mm)
+  double moduleCenterToHybridOuterEdge = m_hybrid->mountPointToOuterEdge() + m_mountPointToCenter + 0.5*GeoModelKernelUnits::mm;
+  //FIXME: Should be: (ie don't need the 0.5GeoModelKernelUnits::mm)
   // double moduleCenterToHybridOuterEdge = m_hybrid->mountPointToOuterEdge() + m_mountPointToCenter ;
   m_moduleShift = hybridSign * (0.5 * m_length - moduleCenterToHybridOuterEdge);
 
@@ -161,7 +161,7 @@ const GeoLogVol * SCT_FwdModule::preBuild()
   const GeoTrd * moduleEnvelopeShape = new GeoTrd(0.5 * m_thickness, 0.5 * m_thickness,
                                                   0.5 * m_widthInner, 0.5 * m_widthOuter,  
                                                   0.5 * m_length);
-  const GeoShapeShift & moduleEnvelope = (*moduleEnvelopeShape << HepGeom::TranslateZ3D(m_moduleShift) );
+  const GeoShapeShift & moduleEnvelope = (*moduleEnvelopeShape << GeoTrf::TranslateZ3D(m_moduleShift) );
   
   SCT_MaterialManager materials;
   GeoLogVol * moduleLog =  new GeoLogVol(getName(), &moduleEnvelope, materials.gasMaterial());
@@ -194,14 +194,13 @@ GeoVPhysVol * SCT_FwdModule::build(SCT_Identifier id) const
   double rotation;
   positionX =-(0.5*m_spine->thickness() + m_glueThickness + 0.5*m_sensor->thickness());
   rotation = 0.5 * m_stereoAngle;
-  CLHEP::Hep3Vector vecB(positionX,0,0);
-  CLHEP::HepRotation rotB;
-  rotB.rotateZ(180*CLHEP::degree); // Rotate so that X axis goes from backside to implant side 
-  rotB.rotateX(rotation);
+  GeoTrf::Translation3D vecB(positionX,0,0);
+  // Rotate so that X axis goes from backside to implant side 
+  GeoTrf::Transform3D rotB = GeoTrf::RotateX3D(rotation)*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::degree);
   // First translate in z (only non-zero for truncated middle)
   // Then rotate and then translate in x.
   GeoAlignableTransform *bottomTransform
-    = new GeoAlignableTransform(HepGeom::Transform3D(rotB,vecB)*HepGeom::TranslateZ3D(positionZ));
+    = new GeoAlignableTransform(GeoTrf::Transform3D(vecB*rotB)*GeoTrf::TranslateZ3D(positionZ));
 
   int bottomSideNumber = (m_upperSide) ? 0 : 1; 
   id.setSide(bottomSideNumber);
@@ -216,21 +215,20 @@ GeoVPhysVol * SCT_FwdModule::build(SCT_Identifier id) const
 
   
   if (m_ringType == 2) { // Place glass pieces in place of sensor
-    module->add(new GeoTransform(HepGeom::Transform3D(rotB,vecB)));
+    module->add(new GeoTransform(GeoTrf::Transform3D(vecB*rotB)));
     module->add(m_sensor->getInactive());
   }
 
   // Position top (x>0) sensor
   positionX=-positionX;
   rotation=-rotation;
-  CLHEP::HepRotation rotT;
-  //rotT.rotateZ(180*CLHEP::degree); // Rotate so that X axis goes from implant side to backside 
-  rotT.rotateX(rotation);
-  CLHEP::Hep3Vector vecT(positionX,0,0);
+  GeoTrf::RotateX3D rotT(rotation);
+  //rotT.rotateZ(180*GeoModelKernelUnits::degree); // Rotate so that X axis goes from implant side to backside 
+  GeoTrf::Translation3D vecT(positionX,0,0);
   // First translate in z (only non-zero for truncated middle)
   // Then rotate and then translate in x.
   GeoAlignableTransform *topTransform  
-    = new GeoAlignableTransform(HepGeom::Transform3D(rotT,vecT)*HepGeom::TranslateZ3D(positionZ));
+    = new GeoAlignableTransform(GeoTrf::Transform3D(vecT*rotT)*GeoTrf::TranslateZ3D(positionZ));
        
   int topSideNumber = m_upperSide;
   id.setSide(topSideNumber);
@@ -244,7 +242,7 @@ GeoVPhysVol * SCT_FwdModule::build(SCT_Identifier id) const
   detectorManager()->addAlignableTransform(0, id.getWaferId(), topTransform, topSensorPV); 
 
   if (m_ringType == 2) { // Place glass pieces in place of sensor
-    module->add(new GeoTransform(HepGeom::Transform3D(rotT,vecT)));
+    module->add(new GeoTransform(GeoTrf::Transform3D(vecT*rotT)));
     module->add(m_sensor->getInactive());
   };  
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModuleConnector.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModuleConnector.cxx
index df662b0483bf80eea2f6e2cf6c9e8d63c372b801..d2428723b1e563db1698818b1d929e412ce32b8b 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModuleConnector.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdModuleConnector.cxx
@@ -14,8 +14,7 @@
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Units/PhysicalConstants.h" // For pi
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <iostream>
@@ -49,13 +48,13 @@ SCT_FwdModuleConnector::build()
   const GeoBox * moduleConnShape = new GeoBox(0.5 * m_thickness, 0.5 * m_rphi, 0.5 * m_deltaR);
   m_material = materials.getMaterialForVolume(m_materialName, moduleConnShape->volume());
   //  std::cout << "Material = " << m_material->getName() << std::endl;
-  //  std::cout << "Density = " << m_material->getDensity()/(gram/CLHEP::cm3) << std::endl;
+  //  std::cout << "Density = " << m_material->getDensity()/(gram/GeoModelKernelUnits::cm3) << std::endl;
 
   // Shift to correct position within module
   double xposition = 0.5 * (parameters->fwdHybridThickness() + m_thickness);
   double zposition = parameters->fwdModuleMountPoint(m_ringType) - parameters->fwdHybridMountPointToInnerEdge() + parameters->fwdHybridLength() - 0.5*(m_deltaR);
   if (m_ringType == 0) { zposition = -1 * zposition;  };  // outer module, hybrid in inner side
-  const GeoShape & connectorPos = (*moduleConnShape << HepGeom::Translate3D(xposition,0.,zposition));
+  const GeoShape & connectorPos = (*moduleConnShape << GeoTrf::Translate3D(xposition,0.,zposition));
 
 
   const GeoLogVol * moduleConnLog = new GeoLogVol(getName(), &connectorPos, m_material);
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdOptoHarness.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdOptoHarness.cxx
index deed889f44ec87eb541b847f5ee7b9f7d7a3fefa..422f0087e19c0869b35b9a8c25d6aba30f589e71 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdOptoHarness.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdOptoHarness.cxx
@@ -12,8 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Units/PhysicalConstants.h" // For pi
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <iostream>
@@ -59,7 +58,7 @@ SCT_FwdOptoHarness::build()
   m_material = materials.getMaterialForVolume(m_materialName, optoHarnessShape->volume());
   //  m_material = materials.getMaterial(m_materialName);
   //  cout << "Material = " << m_material->getName() << endl;
-  //  cout << "Density = " << m_material->getDensity()/(gram/CLHEP::cm3) << endl;
+  //  cout << "Density = " << m_material->getDensity()/(gram/GeoModelKernelUnits::cm3) << endl;
   const GeoLogVol * optoHarnessLog = new GeoLogVol(getName(), optoHarnessShape, m_material);
 
   GeoPhysVol * optoHarness = new GeoPhysVol(optoHarnessLog);
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPConnector.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPConnector.cxx
index 1598f0d413315e69cc497e5980d2a7d891db8f15..29b530629e481c1c1773e5e48197a28edd04c905 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPConnector.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPConnector.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdPPConnector::SCT_FwdPPConnector(const std::string & name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPCooling.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPCooling.cxx
index 0c4a4e0135d08cc90728bfe7f633747f278339ae..ef6c3b76ee745e00f9d99f57d538b72827b85493 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPCooling.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPPCooling.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdPPCooling::SCT_FwdPPCooling(const std::string & name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPatchPanel.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPatchPanel.cxx
index c7e3982af68cae85953b0361c6f5a936f313d83b..514a6bf0270a66836b51eccea72821be89e005c3 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPatchPanel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPatchPanel.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdPatchPanel::SCT_FwdPatchPanel(const std::string & name, int type)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPowerTape.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPowerTape.cxx
index 5bceb97faaacab8bab1ca4dbbb6e0066be425081..136cd3e68c9e3e7b2d40af2281d2e8cc8bbab7f5 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPowerTape.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdPowerTape.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -45,11 +45,11 @@ GeoVPhysVol *
 SCT_FwdPowerTape::build() 
 {
   // Calculate the dimensions.
-  // The area = 2*CLHEP::pi*r_ave*delta_r approx= 2 * CLHEP::pi * rMin * delta_r
+  // The area = 2*GeoModelKernelUnits::pi*r_ave*delta_r approx= 2 * GeoModelKernelUnits::pi * rMin * delta_r
   // where m_thickness = delta_r
 
   double area = m_crossSectArea * m_numModules;
-  m_thickness = area/(2. * CLHEP::pi * m_innerRadius);
+  m_thickness = area/(2. * GeoModelKernelUnits::pi * m_innerRadius);
   m_outerRadius = m_innerRadius +  m_thickness;
 
   // Make the support disk. A simple tube.
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRing.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRing.cxx
index 53d81d14de53c1dc23acc0fa341e1a7452b61238..d7194c036ad7787c3eb47ef65bc32839b9d35c79 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRing.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRing.cxx
@@ -25,10 +25,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <sstream>
 #include <cmath>
@@ -128,8 +128,8 @@ SCT_FwdRing::preBuild()
   // If disc is rotated then recalculate the angle.
   // It assumed the disc is rotated around the Y axis.  
   // TODO: Check this assumption. 
-  if (m_discRotated) angle = CLHEP::pi - angle;
-  double divisionAngle = 2*CLHEP::pi / m_numModules;
+  if (m_discRotated) angle = GeoModelKernelUnits::pi - angle;
+  double divisionAngle = 2*GeoModelKernelUnits::pi / m_numModules;
 
   // Now we choose module 0 as the first module with -0.5 * divAngle <  phi <=  0.5 * divAngle   
   double moduleCount = angle / divisionAngle;
@@ -140,7 +140,7 @@ SCT_FwdRing::preBuild()
   // Determine numbering for -ve endcap.
   // This is for a rotation around Y axis.
   // After rotation we want the first module closest to phi = 0.
-  double angleNegEC = CLHEP::pi - m_startAngle; 
+  double angleNegEC = GeoModelKernelUnits::pi - m_startAngle; 
   double moduleCountNegEC = angleNegEC / divisionAngle;
   m_moduleZero = static_cast<int>(floor(moduleCountNegEC + 0.5 - 0.0001));
   
@@ -151,16 +151,16 @@ SCT_FwdRing::preBuild()
 
   //   std::cout << "RingType, RingSide, Stereo, rotated = " << m_iRing << " " << m_ringSide << " "
   //          << m_stereoSign << " " << m_discRotated << std::endl;
-  //   std::cout << "Ref   Start angle and stagger " << m_refStartAngle/CLHEP::deg << " " << m_refFirstStagger << std::endl;
-  //   std::cout << "First Start angle and stagger " << m_startAngle/CLHEP::deg << " " << m_firstStagger << std::endl;
+  //   std::cout << "Ref   Start angle and stagger " << m_refStartAngle/GeoModelKernelUnits::deg << " " << m_refFirstStagger << std::endl;
+  //   std::cout << "First Start angle and stagger " << m_startAngle/GeoModelKernelUnits::deg << " " << m_firstStagger << std::endl;
   //   std::cout << "Module zero in -ve endcap " << m_moduleZero << std::endl;
 
 
   makeModuleServices();
 
   // Make envelope for ring
-  double moduleClearanceZ = 0.6 * CLHEP::mm; // Arbitrary choice
-  double moduleClearanceR = 0.5 * CLHEP::mm; 
+  double moduleClearanceZ = 0.6 * GeoModelKernelUnits::mm; // Arbitrary choice
+  double moduleClearanceR = 0.5 * GeoModelKernelUnits::mm; 
 
   m_innerRadius = m_module->innerRadius() - 0.5*m_module->stereoAngle()*(0.5*m_module->innerWidth()) - moduleClearanceR;
   m_outerRadius = sqrt(sqr(m_module->outerRadius()) + sqr(0.5*m_module->outerWidth())) 
@@ -168,15 +168,15 @@ SCT_FwdRing::preBuild()
 
   // Calculate clearance we have. NB. This is an approximate.
   //std::cout << "Module clearance (radial value does not take into account stereo rotation:" << std::endl;
-  //std::cout << " radial: " << moduleClearanceR/CLHEP::mm << " mm" << std::endl;
-  //std::cout << " away from disc in z " << moduleClearanceZ/CLHEP::mm << " mm" << std::endl;
+  //std::cout << " radial: " << moduleClearanceR/GeoModelKernelUnits::mm << " mm" << std::endl;
+  //std::cout << " away from disc in z " << moduleClearanceZ/GeoModelKernelUnits::mm << " mm" << std::endl;
   //std::cout << " Lo Module to cooling block: " << -m_moduleStagger-0.5*m_module->thickness() - m_moduleServicesLoOuterZPos << std::endl;
   //std::cout << " Hi Module to cooling block: " << +m_moduleStagger-0.5*m_module->thickness() - m_moduleServicesHiOuterZPos << std::endl;
   //std::cout << " Module to Module: " << m_moduleStagger-m_module->thickness() << std::endl;
   //std::cout << " towards disc in z "   
   //     << std::min(m_moduleStagger-m_module->thickness(), 
   //   std::min(-m_moduleStagger-0.5*m_module->thickness() - m_moduleServicesLoOuterZPos,
-  //     +m_moduleStagger-0.5*m_module->thickness() - m_moduleServicesHiOuterZPos)) / CLHEP::mm << " mm" << std::endl;
+  //     +m_moduleStagger-0.5*m_module->thickness() - m_moduleServicesHiOuterZPos)) / GeoModelKernelUnits::mm << " mm" << std::endl;
 
   m_thicknessOuter = 0.5 * m_module->thickness() + m_moduleStagger + moduleClearanceZ;
   m_thicknessInner = m_maxModuleServicesBaseToRingCenter + 2*m_safety;
@@ -190,7 +190,7 @@ SCT_FwdRing::preBuild()
 
   SCT_MaterialManager materials;
   const GeoTube * tmpShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_thickness);
-  const GeoShape & ringEnvelopeShape = (*tmpShape <<  HepGeom::Translate3D(0, 0, envelopeShift));
+  const GeoShape & ringEnvelopeShape = (*tmpShape <<  GeoTrf::Translate3D(0, 0, envelopeShift));
   GeoLogVol * ringLog = new GeoLogVol(getName(), &ringEnvelopeShape, materials.gasMaterial());
 
   //std::cout << "m_innerRadius = " << m_innerRadius << std::endl;
@@ -209,7 +209,7 @@ SCT_FwdRing::build(SCT_Identifier id) const
   // Physical volume for the half ring
   GeoPhysVol * ring = new GeoPhysVol(m_logVolume);
   
-  double deltaPhi = 360*CLHEP::degree / m_numModules;
+  double deltaPhi = 360*GeoModelKernelUnits::degree / m_numModules;
   bool negativeEndCap = (id.getBarrelEC() < 0);
   
   for (int i = 0; i < m_numModules; i++){
@@ -264,19 +264,18 @@ SCT_FwdRing::build(SCT_Identifier id) const
     //std::cout << "Endcap# = " <<id.getBarrelEC() 
     //       << ", idModule = " << idModule 
     //       << ", i = " << i 
-    //       << ", phi = " << phi/CLHEP::degree << std::endl;
+    //       << ", phi = " << phi/GeoModelKernelUnits::degree << std::endl;
 
-    CLHEP::HepRotation rot;
-    rot.rotateY(90*CLHEP::degree);    
+    GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(phi + 0.5 * m_module->stereoAngle() * m_stereoSign);
     if (m_ringSide > 0) {
-      rot.rotateX(180*CLHEP::degree);    
+      rot = rot*GeoTrf::RotateX3D(180*GeoModelKernelUnits::degree);
     }
-    rot.rotateZ(phi + 0.5 * m_module->stereoAngle() * m_stereoSign);
+    rot = rot*GeoTrf::RotateY3D(90*GeoModelKernelUnits::degree);
     
     double zPos =  staggerUpperLower * m_moduleStagger * m_ringSide;
-    CLHEP::Hep3Vector xyz(m_module->sensorCenterRadius(), 0, zPos);
-    xyz.rotateZ(phi);
-    HepGeom::Transform3D modulePos(rot,xyz);
+    GeoTrf::Vector3D xyz(m_module->sensorCenterRadius(), 0, zPos);
+    xyz = GeoTrf::RotateZ3D(phi)*xyz;
+    GeoTrf::Transform3D modulePos = GeoTrf::Translate3D(xyz.x(),xyz.y(),xyz.z())*rot;
 
     
     // Add the module
@@ -311,7 +310,7 @@ SCT_FwdRing::build(SCT_Identifier id) const
     }
       
     
-    ring->add(new GeoTransform(HepGeom::RotateZ3D(phi)*HepGeom::Translate3D(rModuleServices, 0, zModuleServices)));
+    ring->add(new GeoTransform(GeoTrf::RotateZ3D(phi)*GeoTrf::Translate3D(rModuleServices, 0, zModuleServices)));
     ring->add(moduleServices);
   
   }
@@ -390,15 +389,15 @@ SCT_FwdRing::makeModuleServices()
     
   // Add the cooling blocks
   // Main Upper
-  m_moduleServicesHi->add(new GeoTransform(HepGeom::Translate3D(coolingBlkMainR - m_moduleServicesHiRPos, 0, 0)));
+  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesHiRPos, 0, 0)));
   m_moduleServicesHi->add(m_coolingBlockHiMain->getVolume());
   // Secondary Upper
-  m_moduleServicesHi->add(new GeoTransform(HepGeom::Translate3D(coolingBlkHiSecRMid - m_moduleServicesHiRPos, 0, 0)));
+  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkHiSecRMid - m_moduleServicesHiRPos, 0, 0)));
   m_moduleServicesHi->add(m_coolingBlockHiSec->getVolume());
   // Main Lower
-  m_moduleServicesLo->add(new GeoTransform(HepGeom::Translate3D(coolingBlkMainR - m_moduleServicesLoRPos, 0, 0)));
+  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesLoRPos, 0, 0)));
   m_moduleServicesLo->add(m_coolingBlockLoMain->getVolume());
   // Secondary Lower
-  m_moduleServicesLo->add(new GeoTransform(HepGeom::Translate3D(coolingBlkLoSecRMid - m_moduleServicesLoRPos, 0, 0)));
+  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkLoSecRMid - m_moduleServicesLoRPos, 0, 0)));
   m_moduleServicesLo->add(m_coolingBlockLoSec->getVolume());
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRingCooling.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRingCooling.cxx
index 97bb03481542c2378b8e300e9118ec69e17cba33..4c321aa924e41565c6d3af50cbf3693d16c0ec7d 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRingCooling.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdRingCooling.cxx
@@ -12,8 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Units/PhysicalConstants.h" // For pi
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSensor.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSensor.cxx
index b8b9c54094b9170525d91e21b984c306bd1ee210..a681a2f0291dde7d5f2a3dc23f65d3de5a4ad7b1 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSensor.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSensor.cxx
@@ -31,11 +31,11 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include "InDetReadoutGeometry/SCT_DetectorManager.h"
 #include "InDetReadoutGeometry/SCT_ForwardModuleSideDesign.h"
@@ -157,10 +157,10 @@ const GeoLogVol * SCT_FwdSensor::preBuild()
     // define the sensor as a boolean volume of the two wafers.
     // relative position of near sensor 
     double positionNearZ = m_radiusN - m_sensorRadius;
-    const GeoShape & sensorPosN = (*sensorShapeN<< HepGeom::TranslateZ3D(positionNearZ)) ;
+    const GeoShape & sensorPosN = (*sensorShapeN<< GeoTrf::TranslateZ3D(positionNearZ)) ;
     // relative position of near sensor 
     double positionFarZ = m_radiusF - m_sensorRadius; 
-    const GeoShape & sensorPosF = (*sensorShapeF<< HepGeom::TranslateZ3D(positionFarZ) );
+    const GeoShape & sensorPosF = (*sensorShapeF<< GeoTrf::TranslateZ3D(positionFarZ) );
     sensorShape = &(sensorPosF.add(sensorPosN));
   }
 
@@ -172,7 +172,7 @@ const GeoLogVol * SCT_FwdSensor::preBuild()
   if (m_ringType == 2) {
     // Make inactive glass sensor. 
     double positionZ = m_radiusN - m_sensorRadius;
-    const GeoShape & sensorPosN = (*sensorShapeN<< HepGeom::TranslateZ3D(positionZ) );
+    const GeoShape & sensorPosN = (*sensorShapeN<< GeoTrf::TranslateZ3D(positionZ) );
     GeoLogVol * inactiveLog = new GeoLogVol(getName()+"Glass", &sensorPosN, m_materialGlass);
     m_inactive = new GeoPhysVol(inactiveLog);
     m_inactive->ref();
@@ -316,10 +316,10 @@ void SCT_FwdSensor::makeDesign()
   // This is the default and no action is required. 
   // Can force axes not to be swapped by setting to false.
   // 
-  // bool phiSyCLHEP::mmetric = true;
-  // bool etaSyCLHEP::mmetric = false; 
-  // bool depthSyCLHEP::mmetric = true;
-  // m_design->setSyCLHEP::mmetry(phiSyCLHEP::mmetric, etaSyCLHEP::mmetric, depthSyCLHEP::mmetric,
+  // bool phiSyGeoModelKernelUnits::mmetric = true;
+  // bool etaSyGeoModelKernelUnits::mmetric = false; 
+  // bool depthSyGeoModelKernelUnits::mmetric = true;
+  // m_design->setSyGeoModelKernelUnits::mmetry(phiSyGeoModelKernelUnits::mmetric, etaSyGeoModelKernelUnits::mmetric, depthSyGeoModelKernelUnits::mmetric,
   //
 
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSpine.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSpine.cxx
index c7291d18e0877ad0587225f9442973e8faedf4d8..7e01fc5b52f6548cf046ae052a65d293b794ec40 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSpine.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSpine.cxx
@@ -25,11 +25,11 @@
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include <cmath>
 
@@ -70,7 +70,7 @@ SCT_FwdSpine::getParameters()
     - parameters->fwdHybridMountPointToInnerEdge()
     - parameters->fwdModuleHybridEdgeToSpine(m_ringType);
    
-  // (zssp[m_ringType].spndox + zsmi[m_ringType].mountd - zhyb->hybysh - zhyb->hybgap0) * CLHEP::cm;
+  // (zssp[m_ringType].spndox + zsmi[m_ringType].mountd - zhyb->hybysh - zhyb->hybgap0) * GeoModelKernelUnits::cm;
 
 }
 
@@ -98,7 +98,7 @@ SCT_FwdSpine::build()
   
   SCT_MaterialManager materials;
 
-  const GeoShape & spinePosMain = (*spineShapeMain << HepGeom::TranslateZ3D(position) );
+  const GeoShape & spinePosMain = (*spineShapeMain << GeoTrf::TranslateZ3D(position) );
   m_material = materials.getMaterialForVolume(m_materialName, spineShapeMain->volume());  
   GeoLogVol * spineLog = new GeoLogVol(getName(), &spinePosMain, m_material);
   GeoPhysVol * spine = new GeoPhysVol(spineLog);
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSubSpine.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSubSpine.cxx
index bd8c0303a094743491e5401f5d2d170d80d57651..20b6b3db60229ba902f8649e3b3512e457d2eb4c 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSubSpine.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSubSpine.cxx
@@ -25,11 +25,11 @@
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include <cmath>
 
@@ -100,7 +100,7 @@ GeoVPhysVol * SCT_FwdSubSpine::build()
   position  = mountPosition - parameters->fwdSubSpineInnerRefDist(m_ringType) - 0.5*m_length1;
   position = position * HybPos;
   position2 = (widthMain + m_width1) / 2.;
-  const GeoShape & spinePos1 = (*spineShape1 << HepGeom::TranslateY3D(m_spineSide * position2) << HepGeom::TranslateZ3D(position) );
+  const GeoShape & spinePos1 = (*spineShape1 << GeoTrf::TranslateY3D(m_spineSide * position2) << GeoTrf::TranslateZ3D(position) );
   
 
   // Middle sub spine
@@ -109,7 +109,7 @@ GeoVPhysVol * SCT_FwdSubSpine::build()
     position  = mountPosition - parameters->fwdSubSpineMiddleRefDist(m_ringType) - 0.5*m_length2;
     position = position * HybPos;
     position2 = (widthMain + m_width2) / 2.;
-    const GeoShape & spinePos2 = (*spineShape2 << HepGeom::TranslateY3D(m_spineSide * position2) << HepGeom::TranslateZ3D(position) );
+    const GeoShape & spinePos2 = (*spineShape2 << GeoTrf::TranslateY3D(m_spineSide * position2) << GeoTrf::TranslateZ3D(position) );
     subSpineMiddle = &spinePos2;
   }
 
@@ -117,7 +117,7 @@ GeoVPhysVol * SCT_FwdSubSpine::build()
   position  = mountPosition - parameters->fwdSubSpineOuterRefDist(m_ringType) - 0.5*m_length3;
   position = position * HybPos;
   position2 = (widthMain + m_width3) / 2.;
-  const GeoShape & spinePos3 = (*spineShape3 << HepGeom::TranslateY3D(m_spineSide * position2) << HepGeom::TranslateZ3D(position) );
+  const GeoShape & spinePos3 = (*spineShape3 << GeoTrf::TranslateY3D(m_spineSide * position2) << GeoTrf::TranslateZ3D(position) );
 
   const GeoShapeUnion & spineTmp  = (spinePos1).add(spinePos3);
   if (m_ringType != 3) {
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSupportFrame.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSupportFrame.cxx
index 6da8b36f7f795b916aa18a8573a83281447d4803..cdac143bd99834bcc32bb06244b739f056eb32f0 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSupportFrame.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdSupportFrame.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_FwdSupportFrame::SCT_FwdSupportFrame(const std::string & name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdThermalShieldElement.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdThermalShieldElement.cxx
index 8c9f7518517eb68f694c9ef4f50de273b8753ab2..d956aca563facace248629163cb2cc25c90caa18 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdThermalShieldElement.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdThermalShieldElement.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdWheel.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdWheel.cxx
index 0e922091a4c2c72a29e825d5ee87a589bcfa73a5..c28934fe5d36caf00e71f560ac3c946e98596fe3 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdWheel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_FwdWheel.cxx
@@ -37,10 +37,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 
 #include <sstream>
@@ -111,12 +111,12 @@ SCT_FwdWheel::getParameters()
 
   // FIXME: Check and put these in DB or calculate them
   // We have a maximum width of 80.2. Make it 75 for some clearance.
-  //m_innerRadius = 267 * CLHEP::mm;
-  //m_outerRadius = 590 * CLHEP::mm;
-  //m_thickness = 100 * CLHEP::mm;
+  //m_innerRadius = 267 * GeoModelKernelUnits::mm;
+  //m_outerRadius = 590 * GeoModelKernelUnits::mm;
+  //m_thickness = 100 * GeoModelKernelUnits::mm;
   // These get swapped later if the wheel is rotated.
-  m_thicknessFront = 30 * CLHEP::mm;
-  m_thicknessBack  = 45 * CLHEP::mm;
+  m_thicknessFront = 30 * GeoModelKernelUnits::mm;
+  m_thicknessBack  = 45 * GeoModelKernelUnits::mm;
 
   m_numFSITypes = parameters->fwdFSINumGeomTypes();
   m_fsiVector =  &(parameters->fsiVector(m_iWheel));
@@ -207,7 +207,7 @@ SCT_FwdWheel::preBuild()
   // If first or last wheel there is nothing protruding beyond the rings so we reduce the
   // envelope size. Comes to about 20 mm. Note the front becomes the back later for the last wheel.
   if ((m_iWheel == 0) || (m_iWheel == m_numWheels - 1)) {
-     m_thicknessFront = maxModuleThickness + 1*CLHEP::mm; // We give plenty of safety as we have the room.
+     m_thicknessFront = maxModuleThickness + 1*GeoModelKernelUnits::mm; // We give plenty of safety as we have the room.
   // But now modified by disc fixations
      if(m_discFixationPresent) {
        m_thicknessFront = std::max(m_thicknessFront,m_discFixation->radius() + m_safety);
@@ -249,7 +249,7 @@ SCT_FwdWheel::preBuild()
 
   // TODO. Have to account for FSI and patch panels
   //m_thickness   = 2. * maxRingOffset + maxThickness; 
-  // m_thickness  = 100 * CLHEP::mm;
+  // m_thickness  = 100 * GeoModelKernelUnits::mm;
 
   //  std::cout << "Wheel " << m_iWheel << ":" << std::endl;
   //  std::cout << " innerRadius = " << m_innerRadius << std::endl;
@@ -261,7 +261,7 @@ SCT_FwdWheel::preBuild()
 
   double envelopeShift = 0.5*(m_thicknessBack - m_thicknessFront);
   const GeoTube * tmpShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_thickness);
-  const GeoShape & fwdWheelEnvelopeShape = *tmpShape <<  HepGeom::Translate3D(0, 0, envelopeShift);
+  const GeoShape & fwdWheelEnvelopeShape = *tmpShape <<  GeoTrf::Translate3D(0, 0, envelopeShift);
 
   const GeoLogVol * fwdWheelLog = 
     new GeoLogVol(getName(), &fwdWheelEnvelopeShape, materials.gasMaterial());
@@ -305,11 +305,10 @@ SCT_FwdWheel::build(SCT_Identifier id) const
     //    std::cout << " ring outer radius = " <<  ring->outerRadius() << std::endl;
 
 
-    CLHEP::Hep3Vector pos(0, 0, ringZpos);
     std::string ringNameTag = "Ring#" + intToString(ring->identifier());
     wheel->add(new GeoNameTag(ringNameTag));
     wheel->add(new GeoIdentifierTag(ring->identifier()));
-    wheel->add(new GeoTransform(HepGeom::Translate3D(pos)));    
+    wheel->add(new GeoTransform(GeoTrf::Translate3D(0, 0, ringZpos)));    
     id.setEtaModule(ring->identifier());
     wheel->add(ring->build(id));
 
@@ -319,7 +318,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
                                iRing);
     double coolingZpos = ring->ringSide() * (0.5*(m_discSupport->thickness() + cooling.thickness()));
     //std::cout << "coolingZpos, thickness = " <<  coolingZpos << ", " <<  cooling->thickness() << std::endl;
-    wheel->add(new GeoTransform(HepGeom::TranslateZ3D(coolingZpos)));
+    wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingZpos)));
     wheel->add(cooling.getVolume());
  
     // Power Tapes
@@ -356,7 +355,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
     //std::cout << "  modules min " <<  std::abs(ringZpos) -  0.5*ring->thicknessInner() << std::endl;
  
     //std::cout << "new powerTapeZpos, thickness = " <<  powerTapeZpos << ", " <<  powerTape->thickness() << std::endl;
-    wheel->add(new GeoTransform(HepGeom::TranslateZ3D(powerTapeZpos)));
+    wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(powerTapeZpos)));
     wheel->add(powerTape.getVolume());
   
 
@@ -392,7 +391,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
     for (int iRepeat = 0; iRepeat < numRepeat; iRepeat++) {
   
       // Calculate the location.
-      double patchPanelAngle = m_patchPanelLocAngle[iPPLoc] + iRepeat * 90*CLHEP::degree;
+      double patchPanelAngle = m_patchPanelLocAngle[iPPLoc] + iRepeat * 90*GeoModelKernelUnits::degree;
       double patchPanelZpos =  patchPanelSide * (powerTapeZMax + 0.5*m_patchPanel[ppType]->thickness() + m_safety);
       double patchPanelR = m_patchPanel[ppType]->midRadius();
 
@@ -404,7 +403,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
       }
   
       // Add it to the wheel
-      wheel->add(new GeoTransform(HepGeom::RotateZ3D(patchPanelAngle)*HepGeom::TranslateX3D(patchPanelR)*HepGeom::TranslateZ3D(patchPanelZpos)));
+      wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(patchPanelR)*GeoTrf::TranslateZ3D(patchPanelZpos)));
       wheel->add(m_patchPanel[ppType]->getVolume());
 
       // Make and add the connector for PPF0e (type 0)
@@ -419,7 +418,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
           std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
         }
         // Add it to the wheel
-      wheel->add(new GeoTransform(HepGeom::RotateZ3D(patchPanelAngle)*HepGeom::TranslateX3D(ppConnectorR)*HepGeom::TranslateZ3D(ppConnectorZpos)));
+      wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(ppConnectorR)*GeoTrf::TranslateZ3D(ppConnectorZpos)));
       wheel->add(m_pPConnector->getVolume());
       }
 
@@ -435,7 +434,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
           std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
         }
         // Add it to the wheel
-      wheel->add(new GeoTransform(HepGeom::RotateZ3D(patchPanelAngle)*HepGeom::TranslateX3D(ppCoolingR)*HepGeom::TranslateZ3D(ppCoolingZpos)));
+      wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(ppCoolingR)*GeoTrf::TranslateZ3D(ppCoolingZpos)));
       wheel->add(m_pPCooling->getVolume());
       }
     } 
@@ -454,7 +453,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
     if(m_numRings > 2) {optoharnessName+="I";}
     SCT_FwdOptoHarness optoharness(optoharnessName+"W"+intToString(m_iWheel),m_numRings);
     double optoHarnessZpos = 0.5*m_rotateWheel*(m_discSupport->thickness() + optoharness.thickness());
-    wheel->add(new GeoTransform(HepGeom::TranslateZ3D(optoHarnessZpos)));
+    wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(optoHarnessZpos)));
     wheel->add(optoharness.getVolume());
     optoHarnessZMax = optoHarnessZpos + 0.5*optoharness.thickness();
   }
@@ -472,8 +471,8 @@ SCT_FwdWheel::build(SCT_Identifier id) const
     //        << "Sim type: " << (*m_fsiVector)[iFSI]->simTypeString() << ", "
     //        << "Actual type: " << (*m_fsiVector)[iFSI]->actualType() << ", "
     //        << "Loc type: " << (*m_fsiVector)[iFSI]->locationType() << ", "
-    //        << "Radius(mm): " << fsiRadius/CLHEP::mm << ", "
-    //        << "Phi(deg): " << fsiPhi/CLHEP::deg << ", "
+    //        << "Radius(mm): " << fsiRadius/GeoModelKernelUnits::mm << ", "
+    //        << "Phi(deg): " << fsiPhi/GeoModelKernelUnits::deg << ", "
     //        << "Thickness(mm): " << m_fsiType[type]->thickness() << ", "
     //        << "ZOffset(mm): " << m_fsiType[type]->zOffset() << ", "
     //        << "RPhi(mm): " << m_fsiType[type]->rphi() << ", "
@@ -504,7 +503,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
       }
     }    
 
-    wheel->add(new GeoTransform(HepGeom::RotateZ3D(fsiPhi)*HepGeom::TranslateX3D(fsiRadius)*HepGeom::TranslateZ3D(fsiZpos)));
+    wheel->add(new GeoTransform(GeoTrf::RotateZ3D(fsiPhi)*GeoTrf::TranslateX3D(fsiRadius)*GeoTrf::TranslateZ3D(fsiZpos)));
     wheel->add(m_fsiType[type]->getVolume());    
 
 
@@ -516,7 +515,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
       // The disc fixations repeat in the four quadrants.
       for (int iRepeat = 0; iRepeat < 4; iRepeat++) {
         // Calculate the location.
-        double discFixationAngle = m_discFixationLocAngle[iLoc] + iRepeat * 90*CLHEP::degree;
+        double discFixationAngle = m_discFixationLocAngle[iLoc] + iRepeat * 90*GeoModelKernelUnits::degree;
         double discFixationR = m_ringMaxRadius + 0.5*m_discFixation->thickness() + m_safety;
         // Check is within wheel
         if (discFixationR + 0.5*m_discFixation->thickness() >= m_outerRadius) {
@@ -525,7 +524,7 @@ SCT_FwdWheel::build(SCT_Identifier id) const
           std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
         }
        // Add it to the wheel
-        wheel->add(new GeoTransform(HepGeom::RotateY3D(90.*CLHEP::degree)*HepGeom::RotateX3D(discFixationAngle)*HepGeom::TranslateZ3D(discFixationR)));
+        wheel->add(new GeoTransform(GeoTrf::RotateY3D(90.*GeoModelKernelUnits::degree)*GeoTrf::RotateX3D(discFixationAngle)*GeoTrf::TranslateZ3D(discFixationR)));
         wheel->add(m_discFixation->getVolume());
       }
     }
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_GeneralParameters.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_GeneralParameters.cxx
index b6039ef3e27f817a3fba896eb1818c5fb6de1fa9..f5ae06e737864ffeb8a0381c10b4e145c0118d10 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_GeneralParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_GeneralParameters.cxx
@@ -6,14 +6,14 @@
 #include "SCT_GeoModel/SCT_DataBase.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "InDetGeoModelUtils/TopLevelPlacements.h"
 
 #include <iostream>
 
 
-const double SCT_SAFETY = 0.01 * CLHEP::mm; // Used in some places to make envelopes slightly larger to ensure
+const double SCT_SAFETY = 0.01 * GeoModelKernelUnits::mm; // Used in some places to make envelopes slightly larger to ensure
                                      // no overlaps due to rounding errors.
 
 
@@ -30,7 +30,7 @@ SCT_GeneralParameters::~SCT_GeneralParameters()
 }
 
 
-const HepGeom::Transform3D & 
+const GeoTrf::Transform3D & 
 SCT_GeneralParameters::partTransform(const std::string & partName) const 
 {
   return m_placements->transform(partName);
@@ -62,9 +62,9 @@ double
 SCT_GeneralParameters::temperature() const
 {
   if (m_rdb->conditionsTable()->size() == 0) {
-    return 266.15 * CLHEP::kelvin; // -7 C
+    return 266.15 * GeoModelKernelUnits::kelvin; // -7 C
   }
-  return (m_rdb->conditions()->getDouble("TEMPERATURE") + 273.15) * CLHEP::kelvin;
+  return (m_rdb->conditions()->getDouble("TEMPERATURE") + 273.15) * GeoModelKernelUnits::kelvin;
 }
 
 
@@ -72,18 +72,18 @@ double
 SCT_GeneralParameters::biasVoltage() const
 {
   if (m_rdb->conditionsTable()->size() == 0) {
-    return 100 * CLHEP::volt;
+    return 100 * GeoModelKernelUnits::volt;
   }
-  return m_rdb->conditions()->getDouble("BIASVOLT") * CLHEP::volt;
+  return m_rdb->conditions()->getDouble("BIASVOLT") * GeoModelKernelUnits::volt;
 }
 
 double 
 SCT_GeneralParameters::depletionVoltage() const
 {
   if (m_rdb->conditionsTable()->size() == 0) {
-    return 20 * CLHEP::volt;
+    return 20 * GeoModelKernelUnits::volt;
   }
-  return m_rdb->conditions()->getDouble("DEPLETIONVOLT") * CLHEP::volt;
+  return m_rdb->conditions()->getDouble("DEPLETIONVOLT") * GeoModelKernelUnits::volt;
 }
 
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Harness.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Harness.cxx
index 8c712f019bad40fdeae2c91c84453dd539e25a15..a713cba01739d2a60d5b374a57cffed8c429912d 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Harness.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Harness.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_Harness::SCT_Harness(const std::string & name, double length)
   : SCT_SharedComponentFactory(name), m_length(length)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Hybrid.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Hybrid.cxx
index 6a4293a48aacb9942dd6eebe47bb6dd0070f9492..3572f1656085ffc753ec12284399aec1f029a100 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Hybrid.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Hybrid.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_Hybrid::SCT_Hybrid(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InnerSide.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InnerSide.cxx
index a50bb9c1e95a0798045ef3930a4e6daa31a8249f..b30430ed63fc0866dfe37422f720fedbf7f6ce6f 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InnerSide.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InnerSide.cxx
@@ -32,9 +32,8 @@
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -125,11 +124,11 @@ SCT_InnerSide::preBuild()
 
   // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (00)*********************************
   // *** -->>                                      (00)*********************************
-  m_env1RefPointVector = new CLHEP::Hep3Vector(0.0, 0.0, 0.0);
-  m_env2RefPointVector = new CLHEP::Hep3Vector(-ise2PosX, -ise2PosY, -ise2PosZ);
+  m_env1RefPointVector = new GeoTrf::Vector3D(0.0, 0.0, 0.0);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-ise2PosX, -ise2PosY, -ise2PosZ);
   // *** End of modified lines. ------------------ (00)*********************************
 
-  m_hybridPos             = new GeoTransform(HepGeom::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
+  m_hybridPos             = new GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
   m_hybridPos->ref();
 
   // The depth axis goes from the backside to the implant side 
@@ -142,11 +141,11 @@ SCT_InnerSide::preBuild()
   //
   // Shown is the outer side. The inner side is the same but with a rotation of 180 deg around the z-axis.       
   // 
-  //CLHEP::HepRotation rotSensor;
-  //rotSensor.rotateZ(180*CLHEP::deg);
-  //m_outerSidePos = new HepGeom::Transform3D(rotOuter, CLHEP::Hep3Vector(0.5 * (m_sensorGap + sectThickness), 0., 0.));
-  //m_sensorPos = new GeoTransform(HepGeom::Transform3D(rotSensor, CLHEP::Hep3Vector(sensorPosX, sensorPosY, sensorPosZ)));
-  m_sensorPos             = new GeoTransform(HepGeom::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
+  //GeoModelKernelUnits::HepRotation rotSensor;
+  //rotSensor.rotateZ(180*GeoModelKernelUnits::deg);
+  //m_outerSidePos = new GeoTrf::Transform3D(rotOuter, GeoTrf::Vector3D(0.5 * (m_sensorGap + sectThickness), 0., 0.));
+  //m_sensorPos = new GeoTransform(GeoTrf::Transform3D(rotSensor, GeoTrf::Vector3D(sensorPosX, sensorPosY, sensorPosZ)));
+  m_sensorPos             = new GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
   m_sensorPos->ref();
 
   //
@@ -160,7 +159,7 @@ SCT_InnerSide::preBuild()
                                         0.5 * l_ise2);
 
   const GeoShape & InnerSideEnvelopeShape = (*ise1Shape).
-    add(*ise2Shape << HepGeom::Translate3D(ise2PosX, ise2PosY, ise2PosZ));
+    add(*ise2Shape << GeoTrf::Translate3D(ise2PosX, ise2PosY, ise2PosZ));
 
   const GeoLogVol * InnerSideEnvelopeLog = new GeoLogVol("InnerSideEnvelope",
                                                          &InnerSideEnvelopeShape,
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InterLink.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InterLink.cxx
index 48a59aacabd65970a4472056d054697964562a79..a9694cdbc6893f09724ed807a2bb2ef505c1fa58 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InterLink.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_InterLink.cxx
@@ -14,7 +14,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoTransform.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_InterLink::SCT_InterLink(const std::string & name)
   : SCT_SharedComponentFactory(name),
@@ -109,28 +109,28 @@ SCT_InterLink::build()
     m_interLink->ref();
 
     // Interlink segments:
-    m_interLinkSegShape = new GeoTubs(m_innerRadius, m_outerRadius, 0.5*m_length, - 0.5*m_dPhi*CLHEP::radian, m_dPhi*CLHEP::radian);
+    m_interLinkSegShape = new GeoTubs(m_innerRadius, m_outerRadius, 0.5*m_length, - 0.5*m_dPhi*GeoModelKernelUnits::radian, m_dPhi*GeoModelKernelUnits::radian);
     m_interLinkSegLog = new GeoLogVol("InterlinkSegment", m_interLinkSegShape, materials.getMaterialForVolume(m_materialName, m_interLinkSegShape->volume()));
     m_interLinkSeg = new GeoPhysVol(m_interLinkSegLog);
     m_interLinkSeg->ref();
 
     for(int i=0; i<m_nRepeat; i++) {
-      double interlinkAngle = m_phiPos + (i * 360./m_nRepeat)*CLHEP::deg;
-      GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(interlinkAngle));
+      double interlinkAngle = m_phiPos + (i * 360./m_nRepeat)*GeoModelKernelUnits::deg;
+      GeoTransform* geoTransform = new GeoTransform(GeoTrf::RotateZ3D(interlinkAngle));
       m_geoTransforms.push_back(geoTransform);
       m_interLink->add(geoTransform);
       m_interLink->add(m_interLinkSeg);
     }
 
     // B6 bearings
-    m_bearingShape = new GeoTubs(m_innerRadiusBearing, m_outerRadiusBearing, 0.5*m_lengthBearing, - 0.5*m_dPhiBearing*CLHEP::radian, m_dPhiBearing*CLHEP::radian);
+    m_bearingShape = new GeoTubs(m_innerRadiusBearing, m_outerRadiusBearing, 0.5*m_lengthBearing, - 0.5*m_dPhiBearing*GeoModelKernelUnits::radian, m_dPhiBearing*GeoModelKernelUnits::radian);
     m_bearingLog = new GeoLogVol("Bearing", m_bearingShape, materials.getMaterialForVolume(m_materialNameBearing, m_bearingShape->volume()));
     m_bearing = new GeoPhysVol(m_bearingLog);
     m_bearing->ref();
 
     for(int i=0; i<m_nRepeatBearing; i++) {
-      double bearingAngle = m_phiPosBearing + (i * 360./m_nRepeatBearing)*CLHEP::deg;
-      GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(bearingAngle));
+      double bearingAngle = m_phiPosBearing + (i * 360./m_nRepeatBearing)*GeoModelKernelUnits::deg;
+      GeoTransform* geoTransform = new GeoTransform(GeoTrf::RotateZ3D(bearingAngle));
       m_geoTransforms.push_back(geoTransform);
       m_interLink->add(geoTransform);
       m_interLink->add(m_bearing);
@@ -139,16 +139,16 @@ SCT_InterLink::build()
     // FSI Flange segments:
     // These exactly fill gaps between interlink segments, with smaller radial extent
     if(m_includeFSIFlange) {
-      double dPhiFSI = (360./m_nRepeat)*CLHEP::deg - m_dPhi; 
-      m_FSIFlangeShape = new GeoTubs(m_innerRadiusFSIFlange, m_outerRadiusFSIFlange, 0.5*m_length, - 0.5*dPhiFSI*CLHEP::radian, dPhiFSI*CLHEP::radian);
+      double dPhiFSI = (360./m_nRepeat)*GeoModelKernelUnits::deg - m_dPhi; 
+      m_FSIFlangeShape = new GeoTubs(m_innerRadiusFSIFlange, m_outerRadiusFSIFlange, 0.5*m_length, - 0.5*dPhiFSI*GeoModelKernelUnits::radian, dPhiFSI*GeoModelKernelUnits::radian);
       m_FSIFlangeLog = new GeoLogVol("FSIFlangeSegment", m_FSIFlangeShape, materials.getMaterialForVolume(m_materialNameFSIFlange, m_FSIFlangeShape->volume()));
       m_FSIFlange = new GeoPhysVol(m_FSIFlangeLog);
       m_FSIFlange->ref();
 
       for(int i=0; i<m_nRepeat; i++) {
-        double phiPosFSI = m_phiPos + (180./m_nRepeat)*CLHEP::deg;
-        double FSIFlangeAngle = phiPosFSI + (i * 360./m_nRepeat)*CLHEP::deg;
-        GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(FSIFlangeAngle));
+        double phiPosFSI = m_phiPos + (180./m_nRepeat)*GeoModelKernelUnits::deg;
+        double FSIFlangeAngle = phiPosFSI + (i * 360./m_nRepeat)*GeoModelKernelUnits::deg;
+        GeoTransform* geoTransform = new GeoTransform(GeoTrf::RotateZ3D(FSIFlangeAngle));
         m_geoTransforms.push_back(geoTransform);
         m_interLink->add(geoTransform);
         m_interLink->add(m_FSIFlange);
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Layer.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Layer.cxx
index 7f7e191b456460eff4b2c5cb3dbf2e1e0edfcee9..d8fbdccbe6902c355b5320a2f810b84a31c71c04 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Layer.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Layer.cxx
@@ -39,10 +39,8 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <cmath>
@@ -151,7 +149,7 @@ SCT_Layer::preBuild()
   // Calculations for making active layer components - called ski.
   // This is the modules + doglegs + cooling blocks + coolingpipe 
   // 
-  double divisionAngle  = 360 * CLHEP::degree / m_skisPerLayer;
+  double divisionAngle  = 360 * GeoModelKernelUnits::degree / m_skisPerLayer;
 
   // We define here the first module(id = 0) as the nearest module to phi = 0 with positive phi.
   // We allow slightly negative in case of rounding errors.
@@ -201,7 +199,7 @@ SCT_Layer::preBuild()
   // Build the volume representing the cooling inlets, outlet and U-bends.
   // We cannot do this until we have the dimensions of the clamp
   double coolingInnerRadius = m_clamp->outerRadius();
-  double clearance = 1*CLHEP::mm;
+  double clearance = 1*GeoModelKernelUnits::mm;
   double coolingLength = 0.5*m_cylinderLength - 0.5*m_activeLength - clearance;
   m_coolingEnd = new SCT_CoolingEnd("CoolingEnd"+layerNumStr, m_iLayer, coolingInnerRadius, coolingLength);
 
@@ -273,7 +271,7 @@ SCT_Layer::build(SCT_Identifier id) const
   // We make this a fullPhysVol for alignment code.
   GeoFullPhysVol * layer = new GeoFullPhysVol(m_logVolume);
 
-  double divisionAngle  = 360 * CLHEP::degree / m_skisPerLayer;
+  double divisionAngle  = 360 * GeoModelKernelUnits::degree / m_skisPerLayer;
 
   //
   // Active Layer
@@ -292,17 +290,15 @@ SCT_Layer::build(SCT_Identifier id) const
    
     double phi = m_skiPhiStart + iSki * divisionAngle;
 
-    //    std::cout << "m_skiPhiStart = " << m_skiPhiStart/CLHEP::degree << ", phi = " << phi/CLHEP::degree << std::endl;
+    //    std::cout << "m_skiPhiStart = " << m_skiPhiStart/GeoModelKernelUnits::degree << ", phi = " << phi/GeoModelKernelUnits::degree << std::endl;
 
-    CLHEP::Hep3Vector pos(m_radius, 0, 0);
-    CLHEP::HepRotation rot;
-    rot.rotateZ(phi);
-    rot.rotateZ(m_tilt);
-    pos.rotateZ(phi);
+    GeoTrf::Vector3D pos(m_radius, 0, 0);
+    pos = GeoTrf::RotateZ3D(phi)*pos;
+    GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(m_tilt)*GeoTrf::RotateZ3D(phi);
     
     // Because the ski envelope center is not positioned at the rotation axis for the ski we must first
     // apply the inverse of refPointTransform() of the ski.
-    HepGeom::Transform3D trans(HepGeom::Transform3D(rot,pos) * m_ski->getRefPointTransform()->getTransform().inverse());
+    GeoTrf::Transform3D trans(GeoTrf::Transform3D(GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rot) * m_ski->getRefPointTransform()->getTransform().inverse());
 
     //    std::cout << "Adding ski at pos: " << pos << std::endl;
     //    std::cout << " StereoInner = " << m_module->stereoInner() << std::endl;
@@ -315,15 +311,15 @@ SCT_Layer::build(SCT_Identifier id) const
 
   // And add the service material 
   double clampZPos = 0.5 * m_cylinderLength - 0.5 *  m_clamp->length();
-  activeLayer->add(new GeoTransform(HepGeom::TranslateZ3D(clampZPos)));
+  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(clampZPos)));
   activeLayer->add(m_clamp->getVolume());
-  activeLayer->add(new GeoTransform(HepGeom::TranslateZ3D(-clampZPos)));
+  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-clampZPos)));
   activeLayer->add(m_clamp->getVolume());
 
   double coolingZPos = 0.5 * m_cylinderLength - 0.5 *  m_coolingEnd->length();
-  activeLayer->add(new GeoTransform(HepGeom::TranslateZ3D(coolingZPos)));
+  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingZPos)));
   activeLayer->add(m_coolingEnd->getVolume());
-  activeLayer->add(new GeoTransform(HepGeom::TranslateZ3D(-coolingZPos)));
+  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-coolingZPos)));
   activeLayer->add(m_coolingEnd->getVolume());
 
   //
@@ -341,9 +337,7 @@ SCT_Layer::build(SCT_Identifier id) const
   for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
     //for (int iSki = 0; iSki < 2; iSki++){
     double phi =  m_skiAuxPhiStart + iSki * divisionAngle;
-    CLHEP::HepRotation rot;
-    rot.rotateZ(phi);
-    auxLayer->add(new GeoTransform(HepGeom::Rotate3D(rot)));
+    auxLayer->add(new GeoTransform(GeoTrf::RotateZ3D(phi)));
     auxLayer->add(m_skiAux->getVolume());
   }
  
@@ -365,9 +359,9 @@ SCT_Layer::build(SCT_Identifier id) const
   
   // Position flanges. One at each end.
   double flangeZPos = 0.5 * m_cylinderLength - 0.5 *  m_flange->length();
-  supportLayer->add(new GeoTransform(HepGeom::TranslateZ3D(flangeZPos)));
+  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(flangeZPos)));
   supportLayer->add(m_flange->getVolume());
-  supportLayer->add(new GeoTransform(HepGeom::TranslateZ3D(-flangeZPos)));
+  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-flangeZPos)));
   supportLayer->add(m_flange->getVolume());
 
   // Position supportCyl
@@ -376,20 +370,20 @@ SCT_Layer::build(SCT_Identifier id) const
   if(m_includeFSI) {
     // Position FSI fibre masks
     double fibreMaskZPos = 0.5 * m_cylinderLength - m_flange->length() - 0.5 * m_fibreMask->length();
-    supportLayer->add(new GeoTransform(HepGeom::TranslateZ3D(fibreMaskZPos)));
+    supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(fibreMaskZPos)));
     supportLayer->add(m_fibreMask->getVolume());
-    supportLayer->add(new GeoTransform(HepGeom::TranslateZ3D(-fibreMaskZPos)));
+    supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-fibreMaskZPos)));
     supportLayer->add(m_fibreMask->getVolume());
 
     // Position FSI End jewels
     double jewelRadius = std::sqrt(m_fibreMask->innerRadius()*m_fibreMask->innerRadius() - 0.25 * m_endJewel->rPhiWidth()*m_endJewel->rPhiWidth()) - 0.5 * m_endJewel->radialWidth();
     //  std::cout << "jewelRadius = " << jewelRadius << std::endl;
     for ( int i=0; i<m_nRepeatEndJewel; i++) {
-      double jewelAngle = m_phiEndJewel + i * 360.*CLHEP::degree/m_nRepeatEndJewel;
+      double jewelAngle = m_phiEndJewel + i * 360.*GeoModelKernelUnits::degree/m_nRepeatEndJewel;
       //    std::cout << "jewelAngle = " << jewelAngle << std::endl;
-      supportLayer->add(new GeoTransform(HepGeom::RotateZ3D(jewelAngle)*HepGeom::TranslateX3D(jewelRadius)*HepGeom::TranslateZ3D(m_zEndJewel)));
+      supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(m_zEndJewel)));
       supportLayer->add(m_endJewel->getVolume());
-      supportLayer->add(new GeoTransform(HepGeom::RotateZ3D(jewelAngle)*HepGeom::TranslateX3D(jewelRadius)*HepGeom::TranslateZ3D(-m_zEndJewel)));
+      supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(-m_zEndJewel)));
       supportLayer->add(m_endJewel->getVolume());
     }
 
@@ -397,11 +391,11 @@ SCT_Layer::build(SCT_Identifier id) const
     double scorpionRadius = std::sqrt(m_supportCyl->innerRadius()*m_supportCyl->innerRadius() - 0.25 * m_scorpion->rPhiWidth()*m_scorpion->rPhiWidth()) - 0.5 * m_scorpion->radialWidth();
     //  std::cout << "scorpionRadius = " << scorpionRadius << std::endl;
     for ( int i=0; i<m_nRepeatScorpion; i++) {
-      double scorpionAngle = m_phiScorpion + i * 360.*CLHEP::degree/m_nRepeatScorpion;
+      double scorpionAngle = m_phiScorpion + i * 360.*GeoModelKernelUnits::degree/m_nRepeatScorpion;
       //    std::cout << "scorpionAngle = " << scorpionAngle << std::endl;
-      supportLayer->add(new GeoTransform(HepGeom::RotateZ3D(scorpionAngle)*HepGeom::TranslateX3D(scorpionRadius)*HepGeom::TranslateZ3D(m_zScorpion)));
+      supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(m_zScorpion)));
       supportLayer->add(m_scorpion->getVolume());
-      supportLayer->add(new GeoTransform(HepGeom::RotateZ3D(scorpionAngle)*HepGeom::TranslateX3D(scorpionRadius)*HepGeom::TranslateZ3D(-m_zScorpion)));
+      supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(-m_zScorpion)));
       supportLayer->add(m_scorpion->getVolume());
     }
   }
@@ -426,26 +420,26 @@ SCT_Layer::activeEnvelopeExtent(double & rmin, double & rmax)
   // These are the coordinates of the corners of the ski envelope.
   // x is in the radial direction and x is in the phi direction.
 
-  //CLHEP::Hep3Vector c0();
-  CLHEP::Hep3Vector c1(-(m_ski->env1RefPointVector()->x()) - 0.5*(m_ski->env1Thickness()),
+  //GeoTrf::Vector3D c0();
+  GeoTrf::Vector3D c1(-(m_ski->env1RefPointVector()->x()) - 0.5*(m_ski->env1Thickness()),
                        -(m_ski->env1RefPointVector()->y()) + 0.5*(m_ski->env1Width()),
                        0.0);
-  CLHEP::Hep3Vector c2(-(m_ski->env2RefPointVector()->x()) - 0.5*(m_ski->env2Thickness()),
+  GeoTrf::Vector3D c2(-(m_ski->env2RefPointVector()->x()) - 0.5*(m_ski->env2Thickness()),
                        -(m_ski->env2RefPointVector()->y()) + 0.5*(m_ski->env2Width()),
                        0.0);
-  //CLHEP::Hep3Vector c3();
-  CLHEP::Hep3Vector c4(-(m_ski->env1RefPointVector()->x()) + 0.5*(m_ski->env1Thickness()),
+  //GeoTrf::Vector3D c3();
+  GeoTrf::Vector3D c4(-(m_ski->env1RefPointVector()->x()) + 0.5*(m_ski->env1Thickness()),
                        -(m_ski->env1RefPointVector()->y()) - 0.5*(m_ski->env1Width()),
   0.0);
 
   //c0.rotateZ(m_tilt);
-  c1.rotateZ(m_tilt);
-  c2.rotateZ(m_tilt);
+  c1 = GeoTrf::RotateZ3D(m_tilt)*c1;
+  c2 = GeoTrf::RotateZ3D(m_tilt)*c2;
   //c3.rotateZ(m_tilt);
-  c4.rotateZ(m_tilt);
+  c4 = GeoTrf::RotateZ3D(m_tilt)*c4;
 
-  CLHEP::Hep3Vector vxmax = c4;
-  CLHEP::Hep3Vector vxmin;
+  GeoTrf::Vector3D vxmax = c4;
+  GeoTrf::Vector3D vxmin;
   if (c1.x() < c2.x()) {
     vxmin = c1;
   }
@@ -471,7 +465,7 @@ SCT_Layer::calcSkiPhiOffset()
 
   // First calculated for abs(m_tilt). 
 
-  double divisionAngle  = 360 * CLHEP::degree / m_skisPerLayer;
+  double divisionAngle  = 360 * GeoModelKernelUnits::degree / m_skisPerLayer;
 
   // double activeHalfWidth =     0.5 * m_skiAux->ski()->module()->activeWidth();
   // double moduleHalfThickness = 0.5 * m_skiAux->ski()->module()->thickness();
@@ -501,7 +495,7 @@ SCT_Layer::calcSkiPhiOffset()
   //// std::cout << "  Active width = " << m_skiAux->ski()->module()->activeWidth() << std::endl;
   //std::cout << "  Module width = " << m_module->width() << std::endl;
   //std::cout << "  Active width = " << m_module->activeWidth() << std::endl;
-  //std::cout << "  Division angle = " << divisionAngle/CLHEP::degree << " CLHEP::deg" << std::endl;
-  //std::cout << "  Ski phi offset = " << skiPhiOffset/CLHEP::degree  << " CLHEP::deg" << std::endl;
+  //std::cout << "  Division angle = " << divisionAngle/GeoModelKernelUnits::degree << " GeoModelKernelUnits::deg" << std::endl;
+  //std::cout << "  Ski phi offset = " << skiPhiOffset/GeoModelKernelUnits::degree  << " GeoModelKernelUnits::deg" << std::endl;
   return skiPhiOffset;
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_MaterialManager.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_MaterialManager.cxx
index b7c66278b1033098d16b526bddf441e0bdfd7d9a..d5d853261358a77f7fce44ca38483b0d8dd71c77 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_MaterialManager.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_MaterialManager.cxx
@@ -64,7 +64,7 @@ SCT_MaterialManager::loadMaterials()
   //const GeoMaterial *kapton   = getMaterial("std::Kapton"); // 30th Aug 2005 D.Naito added.
 
   // CuKapton for Low Mass Tapes
-  //GeoMaterial * matCuKapton   = new GeoMaterial("sct::CuKapton",2.94*gram/CLHEP::cm3);
+  //GeoMaterial * matCuKapton   = new GeoMaterial("sct::CuKapton",2.94*gram/GeoModelKernelUnits::cm3);
   //matCuKapton->add(const_cast<GeoElement*>(copper),  0.6142);
   //matCuKapton->add(const_cast<GeoMaterial*>(kapton), 0.3858);
   //addMaterial(matCuKapton);
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Module.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Module.cxx
index 487468c5c2a33840530d502adf30f8bac554bebf..dea79f0f86d192fd3bf633fe878a4c5b0617a4d8 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Module.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Module.cxx
@@ -32,14 +32,11 @@
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 // 8th Aug 2005 S.Mima modified.
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
-
 #include <cmath>
 
 SCT_Module::SCT_Module(const std::string & name) 
@@ -132,80 +129,80 @@ SCT_Module::preBuild()
 
   // Define constants for convenience.
   // for corner of outer side sensor.
-  CLHEP::Hep3Vector a(0.0, 0.5 * sensorWidth, 0.5 * sensorLength);
-  CLHEP::Hep3Vector b(0.0, -0.5 * sensorWidth, a.z());
-  CLHEP::Hep3Vector c(0.0, b.y(),-0.5 * sensorLength);
-  CLHEP::Hep3Vector d(0.0, a.y(), c.z());
+  GeoTrf::Vector3D a(0.0, 0.5 * sensorWidth, 0.5 * sensorLength);
+  GeoTrf::Vector3D b(0.0, -0.5 * sensorWidth, a.z());
+  GeoTrf::Vector3D c(0.0, b.y(),-0.5 * sensorLength);
+  GeoTrf::Vector3D d(0.0, a.y(), c.z());
 
   // for corner of inner side sensor.
-  CLHEP::Hep3Vector e(0.0, a.y(), a.z());
-  CLHEP::Hep3Vector f(0.0, b.y(), b.z());
-  CLHEP::Hep3Vector g(0.0, c.y(), c.z());
-  CLHEP::Hep3Vector h(0.0, d.y(), d.z());
+  GeoTrf::Vector3D e(0.0, a.y(), a.z());
+  GeoTrf::Vector3D f(0.0, b.y(), b.z());
+  GeoTrf::Vector3D g(0.0, c.y(), c.z());
+  GeoTrf::Vector3D h(0.0, d.y(), d.z());
 
   // for corner of base board.
-  CLHEP::Hep3Vector u(0.0,
+  GeoTrf::Vector3D u(0.0,
                       m_baseBoardOffsetY + 0.5*baseBoardWidth,
                       m_baseBoardOffsetZ + 0.5*baseBoardLength);
-  CLHEP::Hep3Vector v(0.0, m_baseBoardOffsetY - 0.5*baseBoardWidth, u.z());
-  CLHEP::Hep3Vector w(0.0, v.y(), m_baseBoardOffsetZ - 0.5*baseBoardLength);
-  CLHEP::Hep3Vector x(0.0, u.y(),w.z());
+  GeoTrf::Vector3D v(0.0, m_baseBoardOffsetY - 0.5*baseBoardWidth, u.z());
+  GeoTrf::Vector3D w(0.0, v.y(), m_baseBoardOffsetZ - 0.5*baseBoardLength);
+  GeoTrf::Vector3D x(0.0, u.y(),w.z());
   
   // for corner of hybrid, connectorouter and pigtail of outer side.
-  //CLHEP::Hep3Vector i(0.0, 
+  //GeoTrf::Vector3D i(0.0, 
   //        0.5*outerSideHybridWidth,
   //        m_outerSide->hybridOffsetZ() + 0.5*outerSideHybridLength);
-  //  CLHEP::Hep3Vector k(0.0,
+  //  GeoTrf::Vector3D k(0.0,
   //        -0.5*outerSideHybridWidth,
   //        m_outerSide->hybridOffsetZ() + 0.5*outerSidePigtailLength);
-  //CLHEP::Hep3Vector l(0.0,
+  //GeoTrf::Vector3D l(0.0,
   //        -0.5*outerSideHybridWidth - m_outerSide->pigtail()->width(), k.z());
-  //CLHEP::Hep3Vector m(0.0, l.y(),
+  //GeoTrf::Vector3D m(0.0, l.y(),
   //        m_outerSide->hybridOffsetZ() - 0.5*outerSidePigtailLength);
-  //CLHEP::Hep3Vector n(0.0, k.y(),m.z());
-  //CLHEP::Hep3Vector p(0.0, i.y(),
+  //GeoTrf::Vector3D n(0.0, k.y(),m.z());
+  //GeoTrf::Vector3D p(0.0, i.y(),
   //        m_outerSide->hybridOffsetZ() - 0.5*outerSideHybridLength);
 
-  CLHEP::Hep3Vector i(0.0, 
+  GeoTrf::Vector3D i(0.0, 
                       0.5*outerSideHybridWidth,
                       m_outerSide->hybridOffsetZ() + 0.5*outerSidePigtailLength);
-  CLHEP::Hep3Vector l(0.0,
+  GeoTrf::Vector3D l(0.0,
                       -0.5*outerSideHybridWidth - m_outerSide->pigtail()->width(), i.z());
-  CLHEP::Hep3Vector m(0.0, l.y(),
+  GeoTrf::Vector3D m(0.0, l.y(),
                       m_outerSide->hybridOffsetZ() - 0.5*outerSidePigtailLength);
-  CLHEP::Hep3Vector p(0.0, i.y(),
+  GeoTrf::Vector3D p(0.0, i.y(),
                       m.z());
 
 
 
   // for corner of hybrid and interConnect of inner side.
-  CLHEP::Hep3Vector q(0.0, 0.5*outerSideHybridWidth, m_outerSide->hybridOffsetZ() + 0.5*outerSideHybridLength );
-  CLHEP::Hep3Vector r(0.0, -0.5*innerSideHybridWidth, q.z());
-  CLHEP::Hep3Vector s(0.0, r.y(), m_innerSide->hybridOffsetZ() - 0.5*innerSideHybridLength);
-  CLHEP::Hep3Vector t(0.0, q.y(), s.z());
-
-  // All points turn +-20 mCLHEP::rad around physical center of module.
-  a.rotateX(m_stereoOuter/CLHEP::radian);
-  b.rotateX(m_stereoOuter/CLHEP::radian);
-  c.rotateX(m_stereoOuter/CLHEP::radian);
-  d.rotateX(m_stereoOuter/CLHEP::radian);
-
-  e.rotateX(m_stereoInner/CLHEP::radian);
-  f.rotateX(m_stereoInner/CLHEP::radian);
-  g.rotateX(m_stereoInner/CLHEP::radian);
-  h.rotateX(m_stereoInner/CLHEP::radian);
-
-  i.rotateX(m_stereoOuter/CLHEP::radian);
-  //k.rotateX(m_stereoOuter/CLHEP::radian);
-  l.rotateX(m_stereoOuter/CLHEP::radian);
-  m.rotateX(m_stereoOuter/CLHEP::radian);
-  //n.rotateX(m_stereoOuter/CLHEP::radian);
-  p.rotateX(m_stereoOuter/CLHEP::radian);
-
-  q.rotateX(m_stereoInner/CLHEP::radian);
-  r.rotateX(m_stereoInner/CLHEP::radian);
-  s.rotateX(m_stereoInner/CLHEP::radian);
-  t.rotateX(m_stereoInner/CLHEP::radian);
+  GeoTrf::Vector3D q(0.0, 0.5*outerSideHybridWidth, m_outerSide->hybridOffsetZ() + 0.5*outerSideHybridLength );
+  GeoTrf::Vector3D r(0.0, -0.5*innerSideHybridWidth, q.z());
+  GeoTrf::Vector3D s(0.0, r.y(), m_innerSide->hybridOffsetZ() - 0.5*innerSideHybridLength);
+  GeoTrf::Vector3D t(0.0, q.y(), s.z());
+
+  // All points turn +-20 mGeoModelKernelUnits::rad around physical center of module.
+  a = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*a;
+  b = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*b;
+  c = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*c;
+  d = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*d;
+
+  e = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*e;
+  f = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*f;
+  g = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*g;
+  h = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*h;
+
+  i = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*i;
+  //k.rotateX(m_stereoOuter/GeoModelKernelUnits::radian);
+  l = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*l;
+  m = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*m;
+  //n.rotateX(m_stereoOuter/GeoModelKernelUnits::radian);
+  p = GeoTrf::RotateX3D(m_stereoOuter/GeoModelKernelUnits::radian)*p;
+
+  q = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*q;
+  r = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*r;
+  s = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*s;
+  t = GeoTrf::RotateX3D(m_stereoInner/GeoModelKernelUnits::radian)*t;
 
   // Calculate demension of envelope1.
   const double z_ab = std::max(a.z(), b.z());
@@ -240,7 +237,7 @@ SCT_Module::preBuild()
   const double yCenterEnv1 = yminEnv1 + 0.5*widthEnv1;
   const double zCenterEnv1 = zmaxEnv1 - 0.5*lengthEnv1;
 
-  m_env1RefPointVector = new CLHEP::Hep3Vector(-xCenterEnv1, -yCenterEnv1, -zCenterEnv1);
+  m_env1RefPointVector = new GeoTrf::Vector3D(-xCenterEnv1, -yCenterEnv1, -zCenterEnv1);
 
   // Calculate demension of envelope2.
   const double z_ikl = std::max(i.z(), l.z());
@@ -271,7 +268,7 @@ SCT_Module::preBuild()
   const double yCenterEnv2 = ymaxEnv2 - 0.5*widthEnv2;
   const double zCenterEnv2 = zmaxEnv2 - 0.5*lengthEnv2;
 
-  m_env2RefPointVector = new CLHEP::Hep3Vector(-xCenterEnv2, -yCenterEnv2, -zCenterEnv2);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-xCenterEnv2, -yCenterEnv2, -zCenterEnv2);
 
   // 8th Aug 2005 S.Mima modified.
   // Calculate dimension of subbox 
@@ -324,28 +321,23 @@ SCT_Module::preBuild()
   const GeoBox * subBox = new GeoBox(0.5*thicknessSubBox, 0.5*widthSubBox, 0.6*lengthSubBox);
 
   // In the following, envelope1 and envelope2 are added and SUBBOX is pulled. 
-  const GeoShape & moduleEnvelope = (*envelope1 << HepGeom::Translate3D(xCenterEnv1, yCenterEnv1, zCenterEnv1)).
-    add(*envelope2 << HepGeom::Translate3D(xCenterEnv2, yCenterEnv2, zCenterEnv2)).
-    subtract(*subBox << HepGeom::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox));
+  const GeoShape & moduleEnvelope = (*envelope1 << GeoTrf::Translate3D(xCenterEnv1, yCenterEnv1, zCenterEnv1)).
+    add(*envelope2 << GeoTrf::Translate3D(xCenterEnv2, yCenterEnv2, zCenterEnv2)).
+    subtract(*subBox << GeoTrf::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox));
 
   const GeoLogVol * moduleLog           = new GeoLogVol(getName(), &moduleEnvelope, materials.gasMaterial());
   
   //
   // inner side
   //
-  CLHEP::HepRotation rotInner;
-  rotInner.rotateZ(180*CLHEP::deg);
-  rotInner.rotateX(m_stereoInner);
-  m_innerSidePos = new HepGeom::Transform3D(rotInner,
-                                            CLHEP::Hep3Vector(ISPosX, 0.0, 0.0));
+  GeoTrf::Transform3D rotInner = GeoTrf::RotateX3D(m_stereoInner) * GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg);
+  m_innerSidePos = new GeoTrf::Transform3D(GeoTrf::Transform3D(GeoTrf::Translation3D(ISPosX, 0.0, 0.0)*rotInner));
 
   //
   // outer side
   //
-  CLHEP::HepRotation rotOuter;
-  rotOuter.rotateX(m_stereoOuter);
-  m_outerSidePos = new HepGeom::Transform3D(rotOuter,
-                                            CLHEP::Hep3Vector(OSPosX, 0.0, 0.0));
+  GeoTrf::RotateX3D rotOuter(m_stereoOuter);
+  m_outerSidePos = new GeoTrf::Transform3D(GeoTrf::Transform3D(GeoTrf::Translation3D(OSPosX, 0.0, 0.0)*rotOuter));
 
   //
   // base board
@@ -353,7 +345,7 @@ SCT_Module::preBuild()
   //
   const double baseBoardPosY = m_baseBoardOffsetY;
   const double baseBoardPosZ = m_baseBoardOffsetZ;
-  m_baseBoardPos = new HepGeom::Translate3D(CLHEP::Hep3Vector( 0.0, baseBoardPosY, baseBoardPosZ));
+  m_baseBoardPos = new GeoTrf::Translate3D(0.0, baseBoardPosY, baseBoardPosZ);
 
 
   return moduleLog;
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_OuterSide.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_OuterSide.cxx
index e0acd61372e5e4668eac32c6869ff60af898ebce..b9b9a7b6e92c13a68e5dfc99e629d6ffd3d1988c 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_OuterSide.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_OuterSide.cxx
@@ -28,9 +28,9 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
 #include <cmath>
 
@@ -131,13 +131,13 @@ SCT_OuterSide::preBuild()
 
   // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (02)*********************************
   // *** -->>                                      (02)*********************************
-  m_env1RefPointVector = new CLHEP::Hep3Vector(0.0, 0.0, 0.0);
-  m_env2RefPointVector = new CLHEP::Hep3Vector(-ose2PosX, -ose2PosY, -ose2PosZ);
+  m_env1RefPointVector = new GeoTrf::Vector3D(0.0, 0.0, 0.0);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-ose2PosX, -ose2PosY, -ose2PosZ);
   // *** End of modified lines. ------------------ (02)*********************************
 
-  m_hybridPos             = new GeoTransform(HepGeom::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
+  m_hybridPos             = new GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
   m_hybridPos->ref();
-  m_pigtailPos            = new GeoTransform(HepGeom::Translate3D(pigtailPosX, pigtailPosY, pigtailPosZ));
+  m_pigtailPos            = new GeoTransform(GeoTrf::Translate3D(pigtailPosX, pigtailPosY, pigtailPosZ));
   m_pigtailPos->ref();
 
   // The depth axis goes from the backside to the implant side 
@@ -148,13 +148,13 @@ SCT_OuterSide::preBuild()
   //        ---   hybrid  | 
   //      ------- sensor  | x-axis
   //
-  // Shown is the outer side. The inner side is the same but with a rotation of 180 CLHEP::deg around the z-axis.       
+  // Shown is the outer side. The inner side is the same but with a rotation of 180 GeoModelKernelUnits::deg around the z-axis.       
   // 
-  //CLHEP::HepRotation rotSensor;
-  //rotSensor.rotateZ(180*CLHEP::deg);
-  //m_outerSidePos = new HepGeom::Transform3D(rotOuter, CLHEP::Hep3Vector(0.5 * (m_sensorGap + sectThickness), 0., 0.));
-  //m_sensorPos = new GeoTransform(HepGeom::Transform3D(rotSensor, CLHEP::Hep3Vector(sensorPosX, sensorPosY, sensorPosZ)));
-  m_sensorPos             = new GeoTransform(HepGeom::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
+  //GeoModelKernelUnits::HepRotation rotSensor;
+  //rotSensor.rotateZ(180*GeoModelKernelUnits::deg);
+  //m_outerSidePos = new GeoTrf::Transform3D(rotOuter, GeoTrf::Vector3D(0.5 * (m_sensorGap + sectThickness), 0., 0.));
+  //m_sensorPos = new GeoTransform(GeoTrf::Transform3D(rotSensor, GeoTrf::Vector3D(sensorPosX, sensorPosY, sensorPosZ)));
+  m_sensorPos             = new GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
   m_sensorPos->ref();
 
   //
@@ -168,7 +168,7 @@ SCT_OuterSide::preBuild()
                                         0.5 * l_ose2);
 
   const GeoShape & OuterSideEnvelopeShape = (*ose1Shape).
-    add(*ose2Shape << HepGeom::Translate3D(ose2PosX, ose2PosY, ose2PosZ));
+    add(*ose2Shape << GeoTrf::Translate3D(ose2PosX, ose2PosY, ose2PosZ));
 
   const GeoLogVol * OuterSideEnvelopeLog = new GeoLogVol("OuterSideEnvelope",
                                                          &OuterSideEnvelopeShape,
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Pigtail.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Pigtail.cxx
index 76023859d3f22c22d5f35d03763bb11733368015..11ae5d4618b0ca5ca6ec10a5cdfb2ecffea6c858 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Pigtail.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Pigtail.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_Pigtail::SCT_Pigtail(const std::string & name)
   : SCT_SharedComponentFactory(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PixelAttachment.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PixelAttachment.cxx
index 0c0f063603463d79b05ff3a64e6a60ccccf27537..3d3a11f4aba4a6ca84b395625c2755098b27cede 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PixelAttachment.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PixelAttachment.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 // This is the SCT to Pixel attachment. This was originally defined in the 
 // general indet services but it is in the SCT mother volume.
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PowerTape.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PowerTape.cxx
index c8a6db4f401ed46f33093fe6aa114daf515c4ca5..2449ed9c07c25ed709ab44912f415fa8a96ca3b8 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PowerTape.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_PowerTape.cxx
@@ -13,7 +13,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 SCT_PowerTape::SCT_PowerTape(const std::string & name, double length)
   : SCT_SharedComponentFactory(name), m_length(length)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Sensor.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Sensor.cxx
index 46b3c688a907a589797ff15a68fa2c5746af7713..6cc41f4ffb5cbc8dd69d2fbb3753e35de6a7c20c 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Sensor.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Sensor.cxx
@@ -21,7 +21,7 @@
 #include "InDetReadoutGeometry/SiCommonItems.h"
 
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 using namespace InDetDD;
 
@@ -122,10 +122,10 @@ SCT_Sensor::makeDesign()
   // This is the default and no action is required. 
   // Can force axes not to be swapped by setting to false.
   // 
-  // bool phiSyCLHEP::mmetric = true;
-  // bool etaSyCLHEP::mmetric = true; 
-  // bool depthSyCLHEP::mmetric = true;
-  // m_design->setSyCLHEP::mmetry(phiSyCLHEP::mmetric, etaSyCLHEP::mmetric, depthSyCLHEP::mmetric,
+  // bool phiSyGeoModelKernelUnits::mmetric = true;
+  // bool etaSyGeoModelKernelUnits::mmetric = true; 
+  // bool depthSyGeoModelKernelUnits::mmetric = true;
+  // m_design->setSyGeoModelKernelUnits::mmetry(phiSyGeoModelKernelUnits::mmetric, etaSyGeoModelKernelUnits::mmetric, depthSyGeoModelKernelUnits::mmetric,
   //
 }
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Ski.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Ski.cxx
index b7755133fa1be244d8503c71c2be85976c882707..bae8c9ba459f737137ecc625e981069b4a662a30 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Ski.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Ski.cxx
@@ -28,10 +28,8 @@
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <cmath>
@@ -104,8 +102,8 @@ SCT_Ski::getParameters()
 const GeoLogVol * 
 SCT_Ski::preBuild()
 {
-  const double rphiClearance = 0.5*CLHEP::mm;
-  const double radialClearance = 0.5*CLHEP::mm;
+  const double rphiClearance = 0.5*GeoModelKernelUnits::mm;
+  const double radialClearance = 0.5*GeoModelKernelUnits::mm;
 
 
   // Make components.
@@ -136,26 +134,26 @@ SCT_Ski::preBuild()
 
   // *** 18:00 Fri 27th May 2005 D.Naito put some comments.
   // I need to calculate moduleYMax and moduleYMin for yModuleOffset,
-  // because the modules is asyCLHEP::mmetry in y direction.
+  // because the modules is asyGeoModelKernelUnits::mmetry in y direction.
 
   //
   // These are coordinates of corners of module's envelopes.
   //
 
-  //CLHEP::Hep3Vector c0(0.0, 0.5*(m_module->env1Width()), 0.5*(m_module->env1Length()));
-  //CLHEP::Hep3Vector c1(0.0, -0.5*(m_module->env1Width()), 0.5*(m_module->env1Length()));
-  //CLHEP::Hep3Vector c2(0.0, -0.5*(m_module->env1Width()), -0.5*(m_module->env1Length()));
-  //CLHEP::Hep3Vector c3(0.0, 0.5*(m_module->env1Width()), -0.5*(m_module->env1Length()));
-  //CLHEP::Hep3Vector c4(0.0,
+  //GeoTrf::Vector3D c0(0.0, 0.5*(m_module->env1Width()), 0.5*(m_module->env1Length()));
+  //GeoTrf::Vector3D c1(0.0, -0.5*(m_module->env1Width()), 0.5*(m_module->env1Length()));
+  //GeoTrf::Vector3D c2(0.0, -0.5*(m_module->env1Width()), -0.5*(m_module->env1Length()));
+  //GeoTrf::Vector3D c3(0.0, 0.5*(m_module->env1Width()), -0.5*(m_module->env1Length()));
+  //GeoTrf::Vector3D c4(0.0,
   //  -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
   //  -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
-  //CLHEP::Hep3Vector c5(0.0,
+  //GeoTrf::Vector3D c5(0.0,
   //  -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
   //  -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
-  //CLHEP::Hep3Vector c6(0.0,
+  //GeoTrf::Vector3D c6(0.0,
   //  -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
   //  -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
-  //CLHEP::Hep3Vector c7(0.0,
+  //GeoTrf::Vector3D c7(0.0,
   //  -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
   //  -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
 
@@ -254,7 +252,7 @@ SCT_Ski::preBuild()
   double xCoolingPipePos = coolingPipeOffsetX() - m_coolingPipeRadialOffset;
   //double yCoolingPipePos = yCoolingBlockPosMin + m_coolingPipePhiOffset;
   double yCoolingPipePos = coolingPipeOffsetY() + m_coolingPipePhiOffset; 
-  m_coolingPipePos = new GeoTransform(HepGeom::Translate3D(xCoolingPipePos, yCoolingPipePos, 0));
+  m_coolingPipePos = new GeoTransform(GeoTrf::Translate3D(xCoolingPipePos, yCoolingPipePos, 0));
   m_coolingPipePos->ref();
   //
   //
@@ -275,13 +273,12 @@ SCT_Ski::preBuild()
     double yModulePos = yModuleOffset;
     // *** End of modified lines. ------------------ (04)*********************************
     double zModulePos = m_zPos[iModule];
-    CLHEP::HepRotation rot;
-
+    
     // There is only one type of module and this is rotated one way or the other
     // to get the phi-v (-ve), u-phi (+ve) orientations
-    rot.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-    CLHEP::Hep3Vector pos(xModulePos, yModulePos, zModulePos);
-    m_modulePos.push_back(HepGeom::Transform3D(rot, pos));
+    GeoTrf::RotateX3D rot(0.5 * m_stereoSign * m_module->stereoAngle());
+    GeoTrf::Translation3D pos(xModulePos, yModulePos, zModulePos);
+    m_modulePos.push_back(GeoTrf::Transform3D(pos*rot));
 
     //
     // Calculate position of cooling block
@@ -290,7 +287,7 @@ SCT_Ski::preBuild()
     double  xCoolingBlockPos = xCoolingBlockOffset + xModulePos;
     double  yCoolingBlockPos = yCoolingBlockOffset + yModulePos;
     double  zCoolingBlockPos = zCoolingBlockOffset + zModulePos;
-    m_coolingBlockPos.push_back(new GeoTransform(HepGeom::Translate3D(xCoolingBlockPos, yCoolingBlockPos, zCoolingBlockPos))); 
+    m_coolingBlockPos.push_back(new GeoTransform(GeoTrf::Translate3D(xCoolingBlockPos, yCoolingBlockPos, zCoolingBlockPos))); 
 
     
     //
@@ -299,7 +296,7 @@ SCT_Ski::preBuild()
     double xDoglegPos = xDoglegOffset + xModulePos; 
     double yDoglegPos = yDoglegOffset + yModulePos; 
     double zDoglegPos = zDoglegOffset + zModulePos;
-    m_doglegPos.push_back(new GeoTransform(HepGeom::Translate3D(xDoglegPos, yDoglegPos, zDoglegPos))); 
+    m_doglegPos.push_back(new GeoTransform(GeoTrf::Translate3D(xDoglegPos, yDoglegPos, zDoglegPos))); 
 
     // alternate staggering
     stagger_sign = - stagger_sign; 
@@ -312,41 +309,41 @@ SCT_Ski::preBuild()
   // These are coordinates of corners of module's envelopes.
   //
 
-  CLHEP::Hep3Vector c0(0.0,
+  GeoTrf::Vector3D c0(0.0,
                        -(m_module->env1RefPointVector()->y()) + 0.5*(m_module->env1Width()),
                        -(m_module->env1RefPointVector()->z()) + 0.5*(m_module->env1Length()));
-  CLHEP::Hep3Vector c1(0.0,
+  GeoTrf::Vector3D c1(0.0,
                        -(m_module->env1RefPointVector()->y()) - 0.5*(m_module->env1Width()),
                        -(m_module->env1RefPointVector()->z()) + 0.5*(m_module->env1Length()));
-  CLHEP::Hep3Vector c2(0.0,
+  GeoTrf::Vector3D c2(0.0,
                        -(m_module->env1RefPointVector()->y()) - 0.5*(m_module->env1Width()),
                        -(m_module->env1RefPointVector()->z()) - 0.5*(m_module->env1Length()));
-  CLHEP::Hep3Vector c3(0.0,
+  GeoTrf::Vector3D c3(0.0,
                        -(m_module->env1RefPointVector()->y()) + 0.5*(m_module->env1Width()),
                        -(m_module->env1RefPointVector()->z()) - 0.5*(m_module->env1Length()));
-  CLHEP::Hep3Vector c4(0.0,
+  GeoTrf::Vector3D c4(0.0,
                        -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
                        -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
-  CLHEP::Hep3Vector c5(0.0,
+  GeoTrf::Vector3D c5(0.0,
                        -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
                        -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
-  CLHEP::Hep3Vector c6(0.0,
+  GeoTrf::Vector3D c6(0.0,
                        -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
                        -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
-  CLHEP::Hep3Vector c7(0.0,
+  GeoTrf::Vector3D c7(0.0,
                        -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
                        -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
 
   double moduleYMax = c4.y();
   double moduleYMin = c5.y();
-  c0.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c1.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c2.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c3.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c4.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c5.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c6.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
-  c7.rotateX(0.5 * m_stereoSign * m_module->stereoAngle());
+  c0 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c0;
+  c1 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c1;
+  c2 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c2;
+  c3 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c3;
+  c4 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c4;
+  c5 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c5;
+  c6 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c6;
+  c7 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c7;
   
   moduleYMax = std::max(std::max(c0.y(), c4.y()), std::max(c7.y(), c3.y()));
   moduleYMin = std::min(std::min(c1.y(), c5.y()), std::min(c6.y(), c2.y()));
@@ -419,7 +416,7 @@ SCT_Ski::preBuild()
   //double xCoolingPipeShift = xCoolingPipePos - xCenter;
   //double yCoolingPipeShift = yCoolingPipePos - yCenter;
 
-  m_refPointTransform = new GeoTransform(HepGeom::Translate3D(-xCenter, -yCenter, 0));
+  m_refPointTransform = new GeoTransform(GeoTrf::Translate3D(-xCenter, -yCenter, 0));
   m_refPointTransform->ref();
   //  std::cout << "xCenter, yCenter = " << xCenter << "  " << yCenter << std::endl;
   //  std::cout << "xShift2, yShift2 = " << xShift2 << "  " << yShift2 << std::endl;
@@ -427,8 +424,8 @@ SCT_Ski::preBuild()
 
   // *** 10:00 Tue 31st May 2005 D.Naito modified. (14)*********************************
   // *** -->>                                      (14)*********************************
-  m_env1RefPointVector = new CLHEP::Hep3Vector(-xCenter, -yCenter, 0.0);
-  m_env2RefPointVector = new CLHEP::Hep3Vector(-xShift2, -yShift2, 0.0);
+  m_env1RefPointVector = new GeoTrf::Vector3D(-xCenter, -yCenter, 0.0);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-xShift2, -yShift2, 0.0);
   m_env1Thickness      = xmax1-xmin1;
   m_env1Width          = ymax1-ymin1;
   m_env2Thickness      = xmax2-xmin2;
@@ -441,7 +438,7 @@ SCT_Ski::preBuild()
   const GeoShape * skiEnvelopeShape = 0;
     
   const GeoShape & tmpShape = (*envelope1).
-    add(*envelope2 << HepGeom::Translate3D(xShift2, yShift2, 0));
+    add(*envelope2 << GeoTrf::Translate3D(xShift2, yShift2, 0));
   skiEnvelopeShape = &tmpShape;
   
   
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiAux.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiAux.cxx
index 67757c85e528057a2b9763ceb936e0875aa55c07..3c3d51e8e56c9e44ed7d03c1a5a033830c420a33 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiAux.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiAux.cxx
@@ -24,10 +24,8 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -198,30 +196,27 @@ SCT_SkiAux::build()
     // 15th Aug 2005 S.Mima modified.
     //    double baseBoardPosZ =  m_ski->zPos(iModule) + m_ski->module()->baseBoardCenter();
     double coolingCenterPosZ =  m_ski->zPos(iModule) + m_ski->coolingBlockOffsetZ();
-    CLHEP::Hep3Vector posBracket(xBracketPos, yBracketPos, coolingCenterPosZ);
-    CLHEP::HepRotation rotBracket;
-    rotBracket.rotateZ(m_bracketPhiOffset);
-    skiAux->add(new GeoTransform(HepGeom::Transform3D(rotBracket, posBracket)));
+    GeoTrf::Translation3D posBracket(xBracketPos, yBracketPos, coolingCenterPosZ);
+    GeoTrf::RotateZ3D rotBracket(m_bracketPhiOffset);
+    skiAux->add(new GeoTransform(GeoTrf::Transform3D(posBracket*rotBracket)));
     skiAux->add(m_bracket->getVolume());
   }
 
   // Position the harness
   if(m_harness != 0) {
-    CLHEP::Hep3Vector posHarness(xHarnessPos, yHarnessPos, 0);
-    CLHEP::HepRotation rotHarness;
-    rotHarness.rotateZ(m_powerTapePhiOffset);
-    skiAux->add(new GeoTransform(HepGeom::Transform3D(rotHarness,posHarness)));
+    GeoTrf::Translation3D posHarness(xHarnessPos, yHarnessPos, 0);
+    GeoTrf::RotateZ3D rotHarness(m_powerTapePhiOffset);
+    skiAux->add(new GeoTransform(GeoTrf::Transform3D(posHarness*rotHarness)));
     skiAux->add(m_harness->getVolume());
   }
 
   //
   // Position the power tapes
   //
-  CLHEP::Hep3Vector posTape(xTapePos, yTapePos, 0);
-  CLHEP::HepRotation rotTape;
-  rotTape.rotateZ(m_powerTapePhiOffset);
+  GeoTrf::Translation3D posTape(xTapePos, yTapePos, 0);
+  GeoTrf::RotateZ3D rotTape(m_powerTapePhiOffset);
   
-  skiAux->add(new GeoTransform(HepGeom::Transform3D(rotTape,posTape)));
+  skiAux->add(new GeoTransform(GeoTrf::Transform3D(posTape*rotTape)));
   skiAux->add(m_skiPowerTape->getVolume());
 
 
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiPowerTape.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiPowerTape.cxx
index c968b66209eba986d71e3a12f1c72d9817f59ee9..9b11aeb79d5cffaea02bd07a5eed36c749b92de5 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiPowerTape.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SkiPowerTape.cxx
@@ -25,17 +25,13 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
-
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include <iostream>
 #include <sstream>
 #include <cmath>
 
-#include "CLHEP/Units/SystemOfUnits.h"
-
-
 
 SCT_SkiPowerTape::SCT_SkiPowerTape(const std::string & name,
                                    const SCT_Ski * ski,
@@ -98,7 +94,7 @@ SCT_SkiPowerTape::build()
     
     // nPos is used to stack the power tapes. Modules closest to interlink are
     // furthest from support. The positive and negative z positions are 
-    // syCLHEP::mmetric. nPos = 5,4,3,2,1,0,0,1,2,3,4,5 for the 12 modules.
+    // syGeoModelKernelUnits::mmetric. nPos = 5,4,3,2,1,0,0,1,2,3,4,5 for the 12 modules.
     int nPos;
 
     // test sign of zpos to determine whether the tape runs to the
@@ -159,9 +155,9 @@ SCT_SkiPowerTape::build()
 
     
     // Position the tape
-    skiPowerTape->add(new GeoTransform(HepGeom::Translate3D(xTapePos, yTapePos, tapeMid)));
+    skiPowerTape->add(new GeoTransform(GeoTrf::Translate3D(xTapePos, yTapePos, tapeMid)));
     skiPowerTape->add(powerTape.getVolume());
-    mass += (powerTape.getVolume()->getLogVol()->getShape()->volume()/CLHEP::cm3)*(powerTape.material()->getDensity()/CLHEP::g/CLHEP::cm3);
+    mass += (powerTape.getVolume()->getLogVol()->getShape()->volume()/GeoModelKernelUnits::cm3)*(powerTape.material()->getDensity()/GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
     ltot += tapeLength;
 
   }    
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Spider.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Spider.cxx
index 6ac7338c91201f9211cf0c39723a4eaa41905dfa..fc375224b9d69127e7f360237a781f3d254b47ca 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Spider.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_Spider.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_Spider::SCT_Spider(const std::string & name)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SupportCyl.cxx b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SupportCyl.cxx
index eee354f84df7bde666911828c7985f2e4942b4e7..a9a81399933d6348d8c07ccf6fe2970f952f50ea 100755
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SupportCyl.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/src/SCT_SupportCyl.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 SCT_SupportCyl::SCT_SupportCyl(const std::string & name, int iLayer, double length)
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/CMakeLists.txt
index 85912db7009aabf2483d30b29209f26d5f933aae..24ba4ff519969bfafea1a48e8b699d41ad957903 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/CMakeLists.txt
@@ -18,27 +18,21 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/SGTools
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeometryDBSvc
+			  DetectorDescription/GeoPrimitives
                           InnerDetector/InDetConditions/InDetCondServices
                           InnerDetector/InDetDetDescr/InDetIdentifier )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
-atlas_add_library( SCT_SLHC_GeoModelLib
-                   src/*.cxx
-                   PUBLIC_HEADERS SCT_SLHC_GeoModel
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelUtilities Identifier GaudiKernel InDetGeoModelUtils InDetReadoutGeometry StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES SGTools GeoModelKernel InDetCondServices InDetIdentifier )
-
 atlas_add_component( SCT_SLHC_GeoModel
+                     src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelUtilities Identifier GaudiKernel InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests GeoModelKernel InDetCondServices InDetIdentifier SCT_SLHC_GeoModelLib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities Identifier GaudiKernel InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests InDetCondServices InDetIdentifier )
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_FwdRing.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_FwdRing.h
index 4056b1a373eb8fcd0d2a3f46e31e0541be422cd3..b0f51bd76a9eaf7615de2886f6bb3c1d30b371ef 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_FwdRing.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_FwdRing.h
@@ -6,8 +6,8 @@
 #define SCT_SLHC_GeoModel_SCT_FWDRING_H
 
 #include "SCT_SLHC_GeoModel/SCT_ComponentFactory.h"
-
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include <vector>
 
 class GeoNameTag;
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_GeneralParameters.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_GeneralParameters.h
index 85f4b3d2c736c1805ed38e4ccab0f16a39c6cb21..fbc29a9013823399ce05a90e38726d0260e235d0 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_GeneralParameters.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_GeneralParameters.h
@@ -5,7 +5,8 @@
 #ifndef SCT_SLHC_GeoModel_SCT_GeneralParameters_H
 #define SCT_SLHC_GeoModel_SCT_GeneralParameters_H
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "SCT_SLHC_GeoModel/SCT_ParametersBase.h"
 
 #include <string>
@@ -32,7 +33,7 @@ public:
   // General
   double safety() const;
 
-  const HepGeom::Transform3D & partTransform(const std::string & partName) const; 
+  const GeoTrf::Transform3D & partTransform(const std::string & partName) const; 
   bool partPresent(const std::string & partName) const;
  
   double envelopeRMin() const; 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_InnerSide.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_InnerSide.h
index 3c521a7cd552ad0220564b1215c5c01e52ee96a6..8ec86aea6a275185ca770b5c721c867651940581 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_InnerSide.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_InnerSide.h
@@ -14,7 +14,7 @@ class GeoMaterial;
 class GeoVPhysVol;
 class GeoLogVol;
 class GeoTransform;
-#include "CLHEP/Vector/ThreeVector.h"
+
 
 namespace InDetDDSLHC {
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Module.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Module.h
index 44145db0a7bb4d9856b01750048073092c41238f..c663fc6a59f4e86f4c55c613e1ceb843940b99f9 100755
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Module.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Module.h
@@ -7,8 +7,9 @@
 
 #include "SCT_SLHC_GeoModel/SCT_ComponentFactory.h"
 #include "SCT_SLHC_GeoModel/SCT_Identifier.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
 #include <string>
 
 class GeoMaterial;
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_OuterSide.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_OuterSide.h
index ada173f18459f520ffee412c716bdfd8b2e61df4..0a57bdcff7b74bab48867def24a71e5f9e49f00a 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_OuterSide.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_OuterSide.h
@@ -14,7 +14,7 @@ class GeoMaterial;
 class GeoVPhysVol;
 class GeoLogVol;
 class GeoTransform;
-#include "CLHEP/Vector/ThreeVector.h"
+
 
 namespace InDetDDSLHC {
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Ski.h b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Ski.h
index 80af0ab72137aba234de67c8a6853293b12775b4..90445eac049094d241109e1c401421423a8e7556 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Ski.h
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/SCT_SLHC_GeoModel/SCT_Ski.h
@@ -7,8 +7,8 @@
 
 #include "SCT_SLHC_GeoModel/SCT_ComponentFactory.h"
 #include "SCT_SLHC_GeoModel/SCT_Identifier.h"
-
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <string>
 #include <vector>
@@ -19,7 +19,7 @@ class GeoPhysVol;
 class GeoLogVol;
 class GeoNameTag;
 class GeoTransform;
-#include "CLHEP/Vector/ThreeVector.h"
+
 
 namespace InDetDDSLHC {
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Barrel.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Barrel.cxx
index c318fe92b8923e50ad587fd23bedecdd256ed334..3788efffe3facdfd078ae43cb6f17756e051cc08 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Barrel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Barrel.cxx
@@ -24,7 +24,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDDSLHC {
 
@@ -64,8 +64,8 @@ const GeoLogVol* SCT_Barrel::preBuild(){
     const GeoTube* sct_barrel_2 = new GeoTube(m_intermediateRadius, m_outerRadius, 0.25*(m_length-m_intermediateLength));
     //make a single envelope for sct barrel
     const GeoShape & barrelEnvelopeShape = (*sct_barrel_1).
-      add(*sct_barrel_2 << HepGeom::TranslateZ3D(0.25*(m_length+m_intermediateLength))).
-      add(*sct_barrel_2 << HepGeom::TranslateZ3D(-0.25*(m_length+m_intermediateLength)));
+      add(*sct_barrel_2 << GeoTrf::TranslateZ3D(0.25*(m_length+m_intermediateLength))).
+      add(*sct_barrel_2 << GeoTrf::TranslateZ3D(-0.25*(m_length+m_intermediateLength)));
     barrelLog = new GeoLogVol(getName(), &barrelEnvelopeShape, materials->gasMaterial());
   }else if(layoutType == 2){//same length barrels
     const GeoTube* barrelEnvelopeShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5*m_length);
@@ -91,7 +91,7 @@ GeoVPhysVol* SCT_Barrel::build(SCT_Identifier id) const{
     barrel->add(new GeoNameTag("Layer#"+intToString(iLayer))); 
     barrel->add(new GeoIdentifierTag(iLayer)); // Identifier layer= iLayer
     id.setLayerDisk(iLayer); 
-    GeoAlignableTransform* transform = new GeoAlignableTransform(HepGeom::Transform3D());
+    GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::Transform3D());
     barrel->add(transform);
     GeoVPhysVol* layerPV = layer.build(id);
     barrel->add(layerPV);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParameters.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParameters.cxx
index c8d43d9b13fe7ff39c832b1b61efda023166c059..5fed24ed9d449a3c992cfb083bbefa27eef3a7d5 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParameters.cxx
@@ -6,7 +6,7 @@
 #include "SCT_SLHC_GeoModel/SCT_GeometryManager.h"
 #include "SCT_SLHC_GeoModel/SCT_DataBase.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 
@@ -36,7 +36,7 @@ SCT_BarrelModuleParameters::SCT_BarrelModuleParameters(const SCT_DataBase * sctd
 double 
 SCT_BarrelModuleParameters::sensorThickness(int moduleType) const 
 {
-  double thickness = db()->getDouble(m_SctBrlSensor, "THICKNESS", moduleType) * CLHEP::mm;
+  double thickness = db()->getDouble(m_SctBrlSensor, "THICKNESS", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "-----------2 sensorThickness mod_typ("<<moduleType<<") = "<< thickness << endmsg;
   return thickness;
 }
@@ -44,7 +44,7 @@ SCT_BarrelModuleParameters::sensorThickness(int moduleType) const
 double 
 SCT_BarrelModuleParameters::sensorWidth(int moduleType) const 
 {
-  double width = db()->getDouble(m_SctBrlSensor, "WIDTH", moduleType) * CLHEP::mm;
+  double width = db()->getDouble(m_SctBrlSensor, "WIDTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 DXYZ2 sensorWidth mod_typ("<<moduleType<<") = "<< width <<endmsg;
   return width;
 }
@@ -52,7 +52,7 @@ SCT_BarrelModuleParameters::sensorWidth(int moduleType) const
 double 
 SCT_BarrelModuleParameters::sensorLength(int moduleType) const 
 {
-  double sensorLen = db()->getDouble(m_SctBrlSensor, "LENGTH", moduleType) * CLHEP::mm;
+  double sensorLen = db()->getDouble(m_SctBrlSensor, "LENGTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 SensorLength DXYZ3 mod_typ("<<moduleType<<") = "<<sensorLen <<endmsg;
   return sensorLen;
 }
@@ -81,7 +81,7 @@ double
 SCT_BarrelModuleParameters::baseBoardThickness(int moduleType) const 
 {
   //sprintf(paraName, "BRL_M%d_BBTHICK", moduleType);
-  double bbthick = db()->getDouble(m_SctBrlModule, "BASEBOARDTHICKNESS", moduleType) * CLHEP::mm;
+  double bbthick = db()->getDouble(m_SctBrlModule, "BASEBOARDTHICKNESS", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 baseBoardThickness BBTHICK mod_typ("<<moduleType<<") = "<< bbthick <<endmsg;
   return bbthick;
 }
@@ -89,13 +89,13 @@ SCT_BarrelModuleParameters::baseBoardThickness(int moduleType) const
 double 
 SCT_BarrelModuleParameters::baseBoardWidth(int moduleType) const 
 {
-  double bbwidth = db()->getDouble(m_SctBrlModule, "BASEBOARDWIDTH", moduleType) * CLHEP::mm;
+  double bbwidth = db()->getDouble(m_SctBrlModule, "BASEBOARDWIDTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 baseBoardWidth BBWID mod_typ("<<moduleType<<") = "<< bbwidth <<endmsg;
   return bbwidth;
 }
 
 double SCT_BarrelModuleParameters::baseBoardLength(int moduleType) const{
-  double bblength = db()->getDouble(m_SctBrlModule, "BASEBOARDLENGTH", moduleType) * CLHEP::mm;
+  double bblength = db()->getDouble(m_SctBrlModule, "BASEBOARDLENGTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 baseBoardLength BBLEN mod_typ("<<moduleType<<") = "<<bblength <<endmsg;
   return bblength;
 }
@@ -109,16 +109,16 @@ SCT_BarrelModuleParameters::baseBoardMaterial(int moduleType) const
 }
 double SCT_BarrelModuleParameters::baseBoardOffsetY(int /*moduleType*/) const{
   //if(moduleType == 1)
-    return -5.7*CLHEP::mm;
+    return -5.7*GeoModelKernelUnits::mm;
   //else
-  //  return -5.7*CLHEP::mm;
+  //  return -5.7*GeoModelKernelUnits::mm;
 }
 
 double SCT_BarrelModuleParameters::baseBoardOffsetZ(int moduleType) const{
   if(moduleType == 1)
-    return -7.1*CLHEP::mm;
+    return -7.1*GeoModelKernelUnits::mm;
   else
-    return -1.9*CLHEP::mm;
+    return -1.9*GeoModelKernelUnits::mm;
 }
 
 //
@@ -127,13 +127,13 @@ double SCT_BarrelModuleParameters::baseBoardOffsetZ(int moduleType) const{
 double 
 SCT_BarrelModuleParameters::moduleStereoAngle(int moduleType) const
 {
-  return db()->getDouble(m_SctBrlModule, "STEREOANGLE", moduleType) * CLHEP::mrad;
+  return db()->getDouble(m_SctBrlModule, "STEREOANGLE", moduleType) * GeoModelKernelUnits::mrad;
 }
 
 double 
 SCT_BarrelModuleParameters::moduleInterSidesGap(int moduleType) const
 {
-  return db()->getDouble(m_SctBrlModule, "INTERSIDESGAP", moduleType) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlModule, "INTERSIDESGAP", moduleType) * GeoModelKernelUnits::mm;
 }
 
 // Barrel Module Side Design
@@ -141,7 +141,7 @@ SCT_BarrelModuleParameters::moduleInterSidesGap(int moduleType) const
 double 
 SCT_BarrelModuleParameters::barrelModelSideStripPitch(int moduleType) const
 {
-  double pitch = db()->getDouble(m_SctBrlSensor, "STRIPPITCH", moduleType) * CLHEP::mm;
+  double pitch = db()->getDouble(m_SctBrlSensor, "STRIPPITCH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 barrelModelSideStripPitch PITCH mod_typ("<<moduleType<<") = "<<pitch <<endmsg;
   return pitch;
 }
@@ -149,7 +149,7 @@ SCT_BarrelModuleParameters::barrelModelSideStripPitch(int moduleType) const
 double
 SCT_BarrelModuleParameters::barrelModelSideStripLength(int moduleType) const
 {
-  double stripLen =  db()->getDouble(m_SctBrlSensor, "STRIPLENGTH", moduleType) * CLHEP::mm;
+  double stripLen =  db()->getDouble(m_SctBrlSensor, "STRIPLENGTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 barrelModelSideStripLength STRIPLEN mod_typ("<<moduleType<<") = "<<stripLen <<endmsg;
   return stripLen;
 }
@@ -157,7 +157,7 @@ SCT_BarrelModuleParameters::barrelModelSideStripLength(int moduleType) const
 double 
 SCT_BarrelModuleParameters::barrelModelSideTotalDeadLength(int moduleType) const
 {
-  double stripdeadLen = db()->getDouble(m_SctBrlSensor, "STRIPDEADLENGTH", moduleType) * CLHEP::mm;
+  double stripdeadLen = db()->getDouble(m_SctBrlSensor, "STRIPDEADLENGTH", moduleType) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"-----------2 barrelModelSideTotalDeadLength STRIPDEADLEN mod_typ("<<moduleType<<") = "<<stripdeadLen<<endmsg;
   return stripdeadLen;
 }
@@ -177,7 +177,7 @@ double
 SCT_BarrelModuleParameters::barrelModelSideSegmentGap(int moduleType) const
 {
   if (m_SctBrlSensor) {
-    return db()->getDouble(m_SctBrlSensor, "SEGMENTGAP", moduleType) * CLHEP::mm;
+    return db()->getDouble(m_SctBrlSensor, "SEGMENTGAP", moduleType) * GeoModelKernelUnits::mm;
   } else { 
     return 0;
   }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParametersOld.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParametersOld.cxx
index 912c04fdbaef8c9f30162a007f0bd460e5f444cd..e71ae56a28a0b1eea1ef97466d38ab2ad5f2668b 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParametersOld.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelModuleParametersOld.cxx
@@ -9,7 +9,7 @@
 #include "GaudiKernel/MsgStream.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <cstring>
@@ -41,12 +41,12 @@ void barrelModSplitString(const std::string& str, std::vector<std::string>& str_
 //
 
 
-const double PITCH = 80*CLHEP::micrometer;
-const double HALF_ACTIVE_STRIP_LENGTH = 31*CLHEP::mm;
-const double NOMINAL_WAFER_LENGTH = 63.960*CLHEP::mm;
-const double REF_DISTANCE_BETWEEN_FIDUCIALS = 2.19*CLHEP::mm; 
-const double DISTANCE_CORNER_MARK_TO_CENTER = 31.750*CLHEP::mm; 
-const double DISTANCE_CORNER_MARK_TO_FIDUCIAL = 0.8*CLHEP::mm; 
+const double PITCH = 80*GeoModelKernelUnits::micrometer;
+const double HALF_ACTIVE_STRIP_LENGTH = 31*GeoModelKernelUnits::mm;
+const double NOMINAL_WAFER_LENGTH = 63.960*GeoModelKernelUnits::mm;
+const double REF_DISTANCE_BETWEEN_FIDUCIALS = 2.19*GeoModelKernelUnits::mm; 
+const double DISTANCE_CORNER_MARK_TO_CENTER = 31.750*GeoModelKernelUnits::mm; 
+const double DISTANCE_CORNER_MARK_TO_FIDUCIAL = 0.8*GeoModelKernelUnits::mm; 
 const double DISTANCE_CENTER_TO_CENTER = 2*(DISTANCE_CORNER_MARK_TO_CENTER - 
 					      DISTANCE_CORNER_MARK_TO_FIDUCIAL)
                                          + REF_DISTANCE_BETWEEN_FIDUCIALS;
@@ -131,7 +131,7 @@ SCT_BarrelModuleParametersOld::sensorThickness(int moduleType) const
   char paraName[50];
   sprintf(paraName, "BRL_M%d_DXYZ1", moduleType);
   std::cout<<"-----------2 sensorThickness DXYZ1 mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second <<std::endl;
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
 }
 
 double 
@@ -139,8 +139,8 @@ SCT_BarrelModuleParametersOld::sensorWidth(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_DXYZ2", moduleType);
-  std::cout<<"-----------2 DXYZ2 sensorWidth mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*CLHEP::cm <<std::endl;
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  std::cout<<"-----------2 DXYZ2 sensorWidth mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm <<std::endl;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
 }
 
 double 
@@ -148,7 +148,7 @@ SCT_BarrelModuleParametersOld::sensorLength(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_DXYZ3", moduleType);
-  float sensorLen = (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  float sensorLen = (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
   std::cout<<"-----------2 SensorLentgh DXYZ3 mod_typ("<<moduleType<<") = "<<sensorLen <<std::endl;
   return sensorLen;
 }
@@ -171,8 +171,8 @@ SCT_BarrelModuleParametersOld::baseBoardThickness(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_BBTHICK", moduleType);
-  std::cout<<"-----------2 baseBoardThickness BBTHICK mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*CLHEP::cm <<std::endl;
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  std::cout<<"-----------2 baseBoardThickness BBTHICK mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm <<std::endl;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
 }
 
 double 
@@ -180,15 +180,15 @@ SCT_BarrelModuleParametersOld::baseBoardWidth(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_BBWID", moduleType);
-  std::cout<<"-----------2 baseBoardWidth BBWID mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*CLHEP::cm <<std::endl;
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  std::cout<<"-----------2 baseBoardWidth BBWID mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm <<std::endl;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
 }
 
 double SCT_BarrelModuleParametersOld::baseBoardLength(int moduleType) const{
   char paraName[50];  
   sprintf(paraName, "BRL_M%d_BBLEN", moduleType);
   std::cout<<"-----------2 baseBoardLength BBLEN mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second <<std::endl;
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
 }
 
 std::string 
@@ -202,16 +202,16 @@ SCT_BarrelModuleParametersOld::baseBoardMaterial(int moduleType) const
 }
 double SCT_BarrelModuleParametersOld::baseBoardOffsetY(int /*moduleType*/) const{
   //if(moduleType == 1)
-    return -5.7*CLHEP::mm;
+    return -5.7*GeoModelKernelUnits::mm;
   //else
-  //  return -5.7*CLHEP::mm;
+  //  return -5.7*GeoModelKernelUnits::mm;
 }
 
 double SCT_BarrelModuleParametersOld::baseBoardOffsetZ(int moduleType) const{
   if(moduleType == 1)
-    return -7.1*CLHEP::mm;
+    return -7.1*GeoModelKernelUnits::mm;
   else
-    return -1.9*CLHEP::mm;
+    return -1.9*GeoModelKernelUnits::mm;
 }
 
 //
@@ -222,7 +222,7 @@ SCT_BarrelModuleParametersOld::moduleStereoAngle(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_STEREOANGLE", moduleType);
-  return (m_SCT_Modules->find(paraName))->second*CLHEP::milliradian;
+  return (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::milliradian;
 }
 
 double 
@@ -230,7 +230,7 @@ SCT_BarrelModuleParametersOld::moduleInterSidesGap(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_INTERSIDESGAP", moduleType);
-  return (double)(m_SCT_Modules->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 // Barrel Module Side Design
@@ -240,8 +240,8 @@ SCT_BarrelModuleParametersOld::barrelModelSideStripPitch(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_PITCH", moduleType);
-  std::cout<<"-----------2 barrelModelSideStripPitch PITCH mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*CLHEP::micrometer <<std::endl;
-  return (double)(m_SCT_Modules->find(paraName))->second*CLHEP::micrometer;
+  std::cout<<"-----------2 barrelModelSideStripPitch PITCH mod_typ("<<moduleType<<") = "<<(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::micrometer <<std::endl;
+  return (double)(m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::micrometer;
 }
 
 double
@@ -249,7 +249,7 @@ SCT_BarrelModuleParametersOld::barrelModelSideStripLength(int moduleType) const
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_STRIPLEN", moduleType);
-  double stripLen = (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  double stripLen = (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
   std::cout<<"-----------2 barrelModelSideStripLength STRIPLEN mod_typ("<<moduleType<<") = "<<stripLen <<std::endl;
   return stripLen;
 }
@@ -259,7 +259,7 @@ SCT_BarrelModuleParametersOld::barrelModelSideTotalDeadLength(int moduleType) co
 {
   char paraName[50];
   sprintf(paraName, "BRL_M%d_STRIPDEADLEN", moduleType);
-  double stripdeadLen = (m_SCT_Modules->find(paraName))->second*CLHEP::cm;
+  double stripdeadLen = (m_SCT_Modules->find(paraName))->second*GeoModelKernelUnits::cm;
   std::cout<<"-----------2 barrelModelSideTotalDeadLength STRIPDEADLEN mod_typ("<<moduleType<<") = "<<stripdeadLen<<std::endl;
   return stripdeadLen;
 }
@@ -300,7 +300,7 @@ SCT_BarrelModuleParametersOld::barrelDeadEdge(int moduleType) const
   char paraName2[50];
   sprintf(paraName1, "BRL_M%d_DXYZ3", moduleType);
   sprintf(paraName2, "BRL_M%d_STRIPLEN", moduleType);
-  float deadEdge = 0.5*((m_SCT_Modules->find(paraName1))->second-(m_SCT_Modules->find(paraName2))->second)*CLHEP::mm;
+  float deadEdge = 0.5*((m_SCT_Modules->find(paraName1))->second-(m_SCT_Modules->find(paraName2))->second)*GeoModelKernelUnits::mm;
   std::cout<<"-----------2 barrelDeadEdge DEADED mod_typ("<<moduleType<<") = "<<deadEdge<<std::endl;
  return deadEdge;
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParameters.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParameters.cxx
index f49401d3009f4998adaf5bad49b15b347fa56e67..75881f23f5062447089e16fcfdaf0a1a5ed31e91 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParameters.cxx
@@ -6,7 +6,7 @@
 #include "SCT_SLHC_GeoModel/SCT_DataBase.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include <iostream>
 #include <cmath>
 
@@ -56,7 +56,7 @@ SCT_BarrelParameters::SCT_BarrelParameters(const SCT_DataBase * sctdb, const SCT
 	  moduleIdVec = new  std::vector<int>;
 	  m_moduleIdMap[type] = moduleIdVec;
 	}
-	zposVec->push_back(db()->getDouble(m_SctBrlSkiZ,"ZPOSITION",i)*CLHEP::mm);
+	zposVec->push_back(db()->getDouble(m_SctBrlSkiZ,"ZPOSITION",i)*GeoModelKernelUnits::mm);
 	moduleIdVec->push_back(db()->getInt(m_SctBrlSkiZ,"MODULEID",i));
       }
     }
@@ -100,9 +100,9 @@ SCT_BarrelParameters::skiFirstStagger() const{
 
 double 
 SCT_BarrelParameters::skiRadialSep(int ilayer) const{
-  // return 2.8*CLHEP::mm;//CLHEP::mm
+  // return 2.8*GeoModelKernelUnits::mm;//GeoModelKernelUnits::mm
   int ladType = ladderType(ilayer);
-  return db()->getDouble(m_SctBrlLadder,"MODULESRADIALSEP",ladType) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlLadder,"MODULESRADIALSEP",ladType) * GeoModelKernelUnits::mm;
 }
 
 
@@ -145,17 +145,17 @@ SCT_BarrelParameters::skiZPosition(int ilayer, int module) const{
       int break_mod = modulesPerSki(ilayer) / 2;
       double zsep = db()->getDouble(m_SctBrlLadder,"ZSEP",ladType);
       //CALCULATE NEGATIVE END POSITION FIRST, TO KEEP MODULE ORDERING THE SAME
-      double first_pos = (-cylInnerZMin(ilayer) - (break_mod - 0.5)*zsep) * CLHEP::mm;
+      double first_pos = (-cylInnerZMin(ilayer) - (break_mod - 0.5)*zsep) * GeoModelKernelUnits::mm;
       //PSOTION OF FIRST MODULE AFTER THE BREAK
-      double break_pos = cylInnerZMin(ilayer) * CLHEP::mm ;
+      double break_pos = cylInnerZMin(ilayer) * GeoModelKernelUnits::mm ;
       
-      if(module < break_mod ) zpos = first_pos + (zsep * module) * CLHEP::mm;
-      else zpos = (break_pos + (zsep * (module - break_mod + 0.5))) * CLHEP::mm;
+      if(module < break_mod ) zpos = first_pos + (zsep * module) * GeoModelKernelUnits::mm;
+      else zpos = (break_pos + (zsep * (module - break_mod + 0.5))) * GeoModelKernelUnits::mm;
     }
 
     else{
       int ladType = ladderType(ilayer);
-      zpos = db()->getDouble(m_SctBrlLadder,"ZSEP",ladType) * (module - 0.5*(modulesPerSki(ilayer) - 1)) * CLHEP::mm;
+      zpos = db()->getDouble(m_SctBrlLadder,"ZSEP",ladType) * (module - 0.5*(modulesPerSki(ilayer) - 1)) * GeoModelKernelUnits::mm;
     }
     } else {
     std::map<int, std::vector<double> *>::const_iterator iter = m_zpositionMap.find(zpostype);
@@ -208,25 +208,25 @@ SCT_BarrelParameters::skiModuleIdentifier(int ilayer, int module) const{
 //
 double 
 SCT_BarrelParameters::tilt(int ilayer) const{
-  double tilt = db()->getDouble(m_SctBrlLayer,"TILT",ilayer) * CLHEP::degree;
-  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 tilt layer TILT("<<ilayer<<") = "<< tilt/CLHEP::degree << endmsg;
+  double tilt = db()->getDouble(m_SctBrlLayer,"TILT",ilayer) * GeoModelKernelUnits::degree;
+  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 tilt layer TILT("<<ilayer<<") = "<< tilt/GeoModelKernelUnits::degree << endmsg;
   return tilt;
 }
 
 double SCT_BarrelParameters::radius(int ilayer) const{
-  double rlay = db()->getDouble(m_SctBrlLayer,"RADIUS",ilayer) * CLHEP::mm;
+  double rlay = db()->getDouble(m_SctBrlLayer,"RADIUS",ilayer) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 radius layer RLAY("<<ilayer<<") = "<<rlay<<endmsg;
   return rlay;
 }
 
 double 
 SCT_BarrelParameters::cylLength(int ilayer) const{
-  return db()->getDouble(m_SctBrlLayer,"CYLLENGTH",ilayer) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlLayer,"CYLLENGTH",ilayer) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_BarrelParameters::cylInnerZMin(int ilayer) const{
-  return db()->getDouble(m_SctBrlLayer,"CYLINNERZMIN",ilayer) * CLHEP::mm;
+  return db()->getDouble(m_SctBrlLayer,"CYLINNERZMIN",ilayer) * GeoModelKernelUnits::mm;
 }
 
 bool SCT_BarrelParameters::doubleSided(int ilayer) const{
@@ -257,7 +257,7 @@ SCT_BarrelParameters::staveLayout(int ilayer) const {
 double 
 SCT_BarrelParameters::stereoOuter(int ilayer) const {
   if (m_SctBrlLayer) {
-    return db()->getDouble(m_SctBrlLayer,"STEREOOUTER",ilayer) * CLHEP::mrad;
+    return db()->getDouble(m_SctBrlLayer,"STEREOOUTER",ilayer) * GeoModelKernelUnits::mrad;
   } else {
     return 0;
   }
@@ -266,7 +266,7 @@ SCT_BarrelParameters::stereoOuter(int ilayer) const {
 double 
 SCT_BarrelParameters::stereoInner(int ilayer) const{
   if (m_SctBrlLayer) {
-    return db()->getDouble(m_SctBrlLayer,"STEREOINNER",ilayer) * CLHEP::mrad;
+    return db()->getDouble(m_SctBrlLayer,"STEREOINNER",ilayer) * GeoModelKernelUnits::mrad;
   } else {
     return 0;
   }
@@ -277,7 +277,7 @@ SCT_BarrelParameters::staveSupportWidth(int ilayer) const{
   if (m_SctBrlLayer) {
     int ladType = ladderType(ilayer);
     if (db()->testField(m_SctBrlLadder,"SUPPORTWIDTH",ladType)) {
-      return db()->getDouble(m_SctBrlLadder,"SUPPORTWIDTH",ladType) * CLHEP::mm;
+      return db()->getDouble(m_SctBrlLadder,"SUPPORTWIDTH",ladType) * GeoModelKernelUnits::mm;
     } 
   }
   return 0;
@@ -289,7 +289,7 @@ SCT_BarrelParameters::staveSupportThickness(int ilayer) const{
   if (m_SctBrlLayer) {
     int ladType = ladderType(ilayer);
     if (db()->testField(m_SctBrlLadder,"SUPPORTTHICK",ladType)) {
-      return db()->getDouble(m_SctBrlLadder,"SUPPORTTHICK",ladType) * CLHEP::mm;
+      return db()->getDouble(m_SctBrlLadder,"SUPPORTTHICK",ladType) * GeoModelKernelUnits::mm;
     }
   }
   return 0;
@@ -308,14 +308,14 @@ SCT_BarrelParameters::staveSupportMaterial(int ilayer) const{
 
 double 
 SCT_BarrelParameters::supportCylInnerRadius(int ilayer) const{
-  double risup = db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLINNERRAD",ilayer) * CLHEP::mm;
+  double risup = db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLINNERRAD",ilayer) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 supportCylInnerRadius RISUP("<<ilayer<<") = "<< risup <<endmsg;
   return risup;
 }
 
 double 
 SCT_BarrelParameters::supportCylOuterRadius(int ilayer) const{
-  double rosup = db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLOUTERRAD",ilayer) * CLHEP::mm;
+  double rosup = db()->getDouble(m_SctBrlServPerLayer,"SUPPORTCYLOUTERRAD",ilayer) * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 supportCylOuterRadius ROSUP("<<ilayer<<") = "<<rosup<<endmsg;
   return rosup;
 }
@@ -337,35 +337,35 @@ SCT_BarrelParameters::numLayers() const{
 
 double 
 SCT_BarrelParameters::barrelInnerRadius() const{
-  double rmin = db()->getDouble(m_SctBrlGeneral,"INNERRADIUS") * CLHEP::mm;
+  double rmin = db()->getDouble(m_SctBrlGeneral,"INNERRADIUS") * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 barrelInnerRadius RMIN = "<<rmin<<endmsg;
   return rmin;
 }
 
 double 
 SCT_BarrelParameters::barrelIntermediateRadius() const{
-  double rinter = db()->getDouble(m_SctBrlGeneral,"RINTERMEDIATE") * CLHEP::mm;
+  double rinter = db()->getDouble(m_SctBrlGeneral,"RINTERMEDIATE") * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 barrelIntermediateRadius RINTERMEDIATE = "<<rinter<<endmsg;
   return  rinter;
 }
 
 double 
 SCT_BarrelParameters::barrelOuterRadius() const{
-  double rmax = db()->getDouble(m_SctBrlGeneral,"OUTERRADIUS") * CLHEP::mm;
+  double rmax = db()->getDouble(m_SctBrlGeneral,"OUTERRADIUS") * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 barrelOuterRadius RMAX = "<<rmax<<endmsg;
   return rmax;
 }
 
 double 
 SCT_BarrelParameters::barrelLength() const{
-  double length =  db()->getDouble(m_SctBrlGeneral,"LENGTH") * CLHEP::mm;
+  double length =  db()->getDouble(m_SctBrlGeneral,"LENGTH") * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 barrelLength B_LEN = "<<length<<endmsg;
   return length;
 }
 
 double 
 SCT_BarrelParameters::barrelIntermediateLength() const{
-  double interlen =  db()->getDouble(m_SctBrlGeneral,"INTERMEDIATELEN") * CLHEP::mm;
+  double interlen =  db()->getDouble(m_SctBrlGeneral,"INTERMEDIATELEN") * GeoModelKernelUnits::mm;
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"---------2 barrelIntermediateLength B_IntermediateLEN = "
 	   <<interlen<<endmsg;
   return interlen;
@@ -373,7 +373,7 @@ SCT_BarrelParameters::barrelIntermediateLength() const{
 
 double 
 SCT_BarrelParameters::barrelServicesMaterialCylinderLength() const {
-  return db()->getDouble(m_SctBrlGeneral,"BRLSERVMATTHICK") * CLHEP::mm;
+  return db()->getDouble(m_SctBrlGeneral,"BRLSERVMATTHICK") * GeoModelKernelUnits::mm;
 }
 
 double 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParametersOld.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParametersOld.cxx
index d4d52462db6064d27ba368db62462e03e97a42a5..d45829122a278293434afb3d042a5be0323420c1 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParametersOld.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BarrelParametersOld.cxx
@@ -5,7 +5,7 @@
 #include "SCT_SLHC_GeoModel/SCT_BarrelParametersOld.h"
 #include "SCT_SLHC_GeoModel/SCT_GeometryManager.h"
 #include "RDBAccessSvc/IRDBRecord.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include <iostream>
 #include <cmath>
 #include <stdio.h>
@@ -219,10 +219,10 @@ SCT_BarrelParametersOld::skiFirstStagger() const{
 
 double 
 SCT_BarrelParametersOld::skiRadialSep(int ilayer) const{
-  // return 2.8*CLHEP::mm;//mm
+  // return 2.8*GeoModelKernelUnits::mm;//mm
   char paraName[50];
   sprintf(paraName, "L%d_MODULESRADIALSEPARATION", ilayer);
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::mm;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::mm;
 }
 
 int
@@ -256,22 +256,22 @@ double
 SCT_BarrelParametersOld::tilt(int ilayer) const{
   char paraName[50];
  sprintf(paraName, "L%d_TILT", ilayer);
-  std::cout<<"---------2 tilt layer TILT("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*CLHEP::degree<<std::endl;
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::degree;
+  std::cout<<"---------2 tilt layer TILT("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*GeoModelKernelUnits::degree<<std::endl;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::degree;
 }
 
 double SCT_BarrelParametersOld::radius(int ilayer) const{
   char paraName[50];
   sprintf(paraName, "L%d_RLAY", ilayer);
-  std::cout<<"---------2 radius layer RLAY("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*CLHEP::cm<<std::endl;
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::cm;
+  std::cout<<"---------2 radius layer RLAY("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*GeoModelKernelUnits::cm<<std::endl;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::cylLength(int ilayer) const{
   char paraName[50];
   sprintf(paraName, "L%d_CYLLENTGH", ilayer);
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::cm;
 }
 
 bool SCT_BarrelParametersOld::doubleSided(int ilayer) const{
@@ -302,16 +302,16 @@ double
 SCT_BarrelParametersOld::supportCylInnerRadius(int ilayer) const{
   char paraName[50];
   sprintf(paraName, "L%d_RISUP", ilayer);
-  std::cout<<"---------2 supportCylInnerRadius RISUP("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*CLHEP::cm<<std::endl;
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::cm;
+  std::cout<<"---------2 supportCylInnerRadius RISUP("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*GeoModelKernelUnits::cm<<std::endl;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::supportCylOuterRadius(int ilayer) const{
   char paraName[50];
   sprintf(paraName, "L%d_ROSUP", ilayer);
-  std::cout<<"---------2 supportCylOuterRadius ROSUP("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*CLHEP::cm<<std::endl;
-  return (m_SCT_Parameters->find(paraName))->second * CLHEP::cm;
+  std::cout<<"---------2 supportCylOuterRadius ROSUP("<<ilayer<<") = "<<(m_SCT_Parameters->find(paraName))->second*GeoModelKernelUnits::cm<<std::endl;
+  return (m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::cm;
 }
 std::string 
 SCT_BarrelParametersOld::supportCylMaterial(int ilayer) const{
@@ -331,45 +331,45 @@ SCT_BarrelParametersOld::numLayers() const{
 
 double 
 SCT_BarrelParametersOld::barrelInnerRadius() const{
-  std::cout<<"---------2 barrelInnerRadius RMIN = "<<(m_SCT_Parameters->find("B_RMIN"))->second * CLHEP::cm<<std::endl;
+  std::cout<<"---------2 barrelInnerRadius RMIN = "<<(m_SCT_Parameters->find("B_RMIN"))->second * GeoModelKernelUnits::cm<<std::endl;
   
-  return (m_SCT_Parameters->find("B_RMIN"))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find("B_RMIN"))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::barrelIntermediateRadius() const{
-  std::cout<<"---------2 barrelIntermediateRadius RINTERMEDIATE = "<<(m_SCT_Parameters->find("B_RINTERMEDIATE"))->second * CLHEP::cm<<std::endl;
+  std::cout<<"---------2 barrelIntermediateRadius RINTERMEDIATE = "<<(m_SCT_Parameters->find("B_RINTERMEDIATE"))->second * GeoModelKernelUnits::cm<<std::endl;
   
-  return (m_SCT_Parameters->find("B_RINTERMEDIATE"))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find("B_RINTERMEDIATE"))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::barrelOuterRadius() const{
-  std::cout<<"---------2 barrelOuterRadius RMAX = "<<(m_SCT_Parameters->find("B_RMAX"))->second * CLHEP::cm<<std::endl;
+  std::cout<<"---------2 barrelOuterRadius RMAX = "<<(m_SCT_Parameters->find("B_RMAX"))->second * GeoModelKernelUnits::cm<<std::endl;
   
-  return (m_SCT_Parameters->find("B_RMAX"))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find("B_RMAX"))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::barrelLength() const{
   std::cout<<"---------2 barrelLength B_LEN = "
-	   <<(m_SCT_Parameters->find("B_LEN"))->second * CLHEP::cm<<std::endl;
+	   <<(m_SCT_Parameters->find("B_LEN"))->second * GeoModelKernelUnits::cm<<std::endl;
   
-  return (m_SCT_Parameters->find("B_LEN"))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find("B_LEN"))->second * GeoModelKernelUnits::cm;
 }
 
 double 
 SCT_BarrelParametersOld::barrelIntermediateLength() const{
   std::cout<<"---------2 barrelIntermediateLength B_IntermediateLEN = "
-	   <<(m_SCT_Parameters->find("B_INTERMEDIATELEN"))->second * CLHEP::cm<<std::endl;
+	   <<(m_SCT_Parameters->find("B_INTERMEDIATELEN"))->second * GeoModelKernelUnits::cm<<std::endl;
   
-  return (m_SCT_Parameters->find("B_INTERMEDIATELEN"))->second * CLHEP::cm;
+  return (m_SCT_Parameters->find("B_INTERMEDIATELEN"))->second * GeoModelKernelUnits::cm;
 }
 
 double SCT_BarrelParametersOld::barrelServicesMaterialCylinderLength() const {
   char paraName[50];
   sprintf(paraName, "BARRELSERVICESMATERIALCYLINDERLENGTH");
-  return (double)(m_SCT_Parameters->find(paraName))->second * CLHEP::cm;
+  return (double)(m_SCT_Parameters->find(paraName))->second * GeoModelKernelUnits::cm;
 }
 
 double SCT_BarrelParametersOld::barrelServicesMaterialIncreaseFactor() const {
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BaseBoard.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BaseBoard.cxx
index cf45d9b64dab1ffd3e42c9e336dd88e8d42cee06..b160d3404ecbc2a74b715f627e7119a67f0fff21 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BaseBoard.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_BaseBoard.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDDSLHC {
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ComponentFactory.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ComponentFactory.cxx
index 015cc69105ed803bc32e7d93d77325c26b70a302..7b22c81779b154dc456279b4946099cacfe005bb 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ComponentFactory.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ComponentFactory.cxx
@@ -3,7 +3,7 @@
 */
 
 #include "SCT_SLHC_GeoModel/SCT_ComponentFactory.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <string>
@@ -15,7 +15,7 @@ namespace InDetDDSLHC {
 SCT_DetectorManager * SCT_ComponentFactory::s_detectorManager = 0;
 const SCT_GeometryManager * SCT_ComponentFactory::s_geometryManager = 0;
 
-double SCT_ComponentFactory::s_epsilon = 1.0e-6 * CLHEP::mm;
+double SCT_ComponentFactory::s_epsilon = 1.0e-6 * GeoModelKernelUnits::mm;
 
 SCT_ComponentFactory::SCT_ComponentFactory(const std::string & name) 
   : m_name(name)
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_DetectorFactory.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_DetectorFactory.cxx
index 553563c259e32f7bc577e82edc4c73a936129a6f..3010efc905c8ab30e2d3ee1eed8055a87fdd17d0 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_DetectorFactory.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_DetectorFactory.cxx
@@ -44,9 +44,9 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include "GeoModelKernel/Units.h"
 
 #include <iostream> 
 #include <iomanip> 
@@ -156,8 +156,8 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
       new GeoTube(sctForward.innerRadius(), sctForward.outerRadius(), 0.5*sctForward.length());
     //make a single envelope (enveloping the barrel and endcaps)
     const GeoShape & sctEnvelopeTmp = (*sctBarrelEnvelop).
-      add(*sctForwardEnvelop << HepGeom::TranslateZ3D(sctForward.zCenter())).
-      add(*sctForwardEnvelop << HepGeom::TranslateZ3D(-sctForward.zCenter()));
+      add(*sctForwardEnvelop << GeoTrf::TranslateZ3D(sctForward.zCenter())).
+      add(*sctForwardEnvelop << GeoTrf::TranslateZ3D(-sctForward.zCenter()));
 
     sctEnvelope = &sctEnvelopeTmp;
   } else if (generalParameters->simpleEnvelope()) {
@@ -169,7 +169,7 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
     sctEnvelope = sctEnvelopeTmp;
   } else {
     // Build as PCon    
-    GeoPcon* sctEnvelopeTmp  = new GeoPcon(0.,2*CLHEP::pi);
+    GeoPcon* sctEnvelopeTmp  = new GeoPcon(0.,2*GeoModelKernelUnits::pi);
     // table contains +ve z values only and envelope is assumed to be symmetric around z.
     int numPlanes = generalParameters->envelopeNumPlanes();
     for (int i = 0; i < numPlanes * 2; i++) {
@@ -203,7 +203,7 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
     id.setBarrelEC(0);
     ///*---
     GeoVPhysVol* barrel = sctBarrel.build(id);
-    GeoAlignableTransform* barrelTransform = new GeoAlignableTransform(HepGeom::Transform3D());
+    GeoAlignableTransform* barrelTransform = new GeoAlignableTransform(GeoTrf::Transform3D());
     sct->add(new GeoNameTag("Barrel"));
     sct->add(barrelTransform);
     sct->add(barrel);
@@ -224,7 +224,7 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
     SCT_Identifier idFwdPlus;
     idFwdPlus.setBarrelEC(2);
     GeoVPhysVol* forwardPlus = sctForward.build(idFwdPlus);
-    HepGeom::Transform3D fwdTransformPlus(HepGeom::TranslateZ3D(sctForward.zCenter()));
+    GeoTrf::Transform3D fwdTransformPlus(GeoTrf::TranslateZ3D(sctForward.zCenter()));
     GeoAlignableTransform* fwdGeoTransformPlus = new GeoAlignableTransform(fwdTransformPlus);
     sct->add(new GeoNameTag("ForwardPlus"));
     sct->add(fwdGeoTransformPlus);
@@ -237,16 +237,16 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
     SCT_Identifier idFwdMinus;
     idFwdMinus.setBarrelEC(-2);
     GeoVPhysVol* forwardMinus = sctForward.build(idFwdMinus);
-    HepGeom::Transform3D rot;
-    rot = HepGeom::RotateY3D(180*CLHEP::degree);
-    HepGeom::Transform3D fwdTransformMinus = rot*fwdTransformPlus;
+    GeoTrf::Transform3D rot;
+    rot = GeoTrf::RotateY3D(180*GeoModelKernelUnits::degree);
+    GeoTrf::Transform3D fwdTransformMinus = rot*fwdTransformPlus;
     GeoAlignableTransform* fwdGeoTransformMinus = new GeoAlignableTransform(fwdTransformMinus);
     sct->add(new GeoNameTag("ForwardMinus"));
     sct->add(fwdGeoTransformMinus);
     sct->add(forwardMinus);
   
     //services material between barrel and endcap 
-    double safety = 1*CLHEP::mm;//1mm, just to avoid any clash
+    double safety = 1*GeoModelKernelUnits::mm;//1mm, just to avoid any clash
     double length = sctForward.zCenter()-0.5*sctForward.length()-0.5*sctBarrel.length()-safety;//
     double barrelServicesCylinderLength  = barrelParameters->barrelServicesMaterialCylinderLength();
     //use user lenght paramters only if small than the gap
@@ -264,23 +264,23 @@ void SCT_DetectorFactory::create(GeoPhysVol *world){
     double materialIncreaseFactor              = barrelParameters->barrelServicesMaterialIncreaseFactor();
 
     if (barrelServicesCylinderLength > 0 && materialIncreaseFactor > 0 && !barrelParameters->barrelServicesMaterial().empty()) {
-      //double cf_density                          = 0.189*materialIncreaseFactor*CLHEP::g/CLHEP::cm3;
-      //msg(MSG::INFO) <<"----length "<<barrelServicesCylinderLength<<" material "<<barrelParameters->barrelServicesMaterial()<<" IncreaseFactor "<<materialIncreaseFactor<<" cf_density (CLHEP::g/CLHEP::cm3) "<<cf_density/(CLHEP::g/CLHEP::cm3) << endmsg;
+      //double cf_density                          = 0.189*materialIncreaseFactor*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
+      //msg(MSG::INFO) <<"----length "<<barrelServicesCylinderLength<<" material "<<barrelParameters->barrelServicesMaterial()<<" IncreaseFactor "<<materialIncreaseFactor<<" cf_density (GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) "<<cf_density/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
       //const GeoMaterial* barrel_serivesMaterial = materials->getMaterial(barrelParameters->barrelServicesMaterial(), cf_density, "UpgradeSCTBarrel_ServicesMaterial");
       const GeoMaterial* barrel_serivesMaterial = materials->getMaterialScaled(barrelParameters->barrelServicesMaterial(), materialIncreaseFactor, "UpgradeSCTBarrel_ServicesMaterial");
-      msg(MSG::INFO) <<"----length "<<barrelServicesCylinderLength<<" material "<<barrelParameters->barrelServicesMaterial()<<" IncreaseFactor "<<materialIncreaseFactor<<" density (CLHEP::g/CLHEP::cm3) "<< barrel_serivesMaterial->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+      msg(MSG::INFO) <<"----length "<<barrelServicesCylinderLength<<" material "<<barrelParameters->barrelServicesMaterial()<<" IncreaseFactor "<<materialIncreaseFactor<<" density (GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) "<< barrel_serivesMaterial->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
   
     
       const GeoTube*   barrelPos_servicesMaterialShape    = new GeoTube(inner_radius, outer_radius, 0.5*barrelServicesCylinderLength);
       const GeoLogVol* barrelPos_servicesMaterialtLog  = new GeoLogVol("BarrelPos_ServicesMaterial",  barrelPos_servicesMaterialShape, barrel_serivesMaterial);
       GeoPhysVol*      barrelPos_servicesMaterial      = new GeoPhysVol(barrelPos_servicesMaterialtLog);
-      sct->add(new GeoTransform(HepGeom::TranslateZ3D(material_position)));
+      sct->add(new GeoTransform(GeoTrf::TranslateZ3D(material_position)));
       sct->add(barrelPos_servicesMaterial);
     
       const GeoTube*   barrelNeg_servicesMaterialShape    = new GeoTube(inner_radius, outer_radius, 0.5*barrelServicesCylinderLength);
       const GeoLogVol* barrelNeg_servicesMaterialtLog  = new GeoLogVol("BarrelNeg_ServicesMaterial",  barrelNeg_servicesMaterialShape, barrel_serivesMaterial);
       GeoPhysVol*      barrelNeg_servicesMaterial      = new GeoPhysVol(barrelNeg_servicesMaterialtLog);
-      sct->add(new GeoTransform(HepGeom::TranslateZ3D(-material_position)));
+      sct->add(new GeoTransform(GeoTrf::TranslateZ3D(-material_position)));
       sct->add(barrelNeg_servicesMaterial);
     }
     //Store alignable transform
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Forward.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Forward.cxx
index 8e0975b773b6821fcd4c0cd680d1bd12d1a1d09b..dd2b8484b02204738182bb35d5ddd6dac5aa675a 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Forward.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Forward.cxx
@@ -23,7 +23,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <sstream>
 #include <cmath>
@@ -74,8 +74,8 @@ const GeoLogVol* SCT_Forward::preBuild(){
     double len_2 = m_zMax-m_zIntermediate;
     const GeoTube* sct_fwd_2 = new GeoTube(m_innerRadius, m_outerRadius, 0.5*len_2);
     //make a single envelope for sct fwd: shift the two parts so that the midle stays at Z=0
-    const GeoShape & forwardEnvelopeShape = (*sct_fwd_1 << HepGeom::TranslateZ3D(-0.5*len_2)).
-      add(*sct_fwd_2 << HepGeom::TranslateZ3D(0.5*len_1));
+    const GeoShape & forwardEnvelopeShape = (*sct_fwd_1 << GeoTrf::TranslateZ3D(-0.5*len_2)).
+      add(*sct_fwd_2 << GeoTrf::TranslateZ3D(0.5*len_1));
     forwardLog =  new GeoLogVol(getName(), &forwardEnvelopeShape, materials->gasMaterial());
   }else if(layoutType == 2){//same length barrels
     const GeoTube* forwardEnvelopeShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5*m_length);
@@ -97,7 +97,7 @@ GeoVPhysVol* SCT_Forward::build(SCT_Identifier id) const{
     //std::cerr<<"endcap "<<id.getBarrelEC()<<", wheel "<<iWheel;
     id.setLayerDisk(iWheel);
     double zpos = wheel.zPosition() - zCenter();
-    GeoAlignableTransform* transform = new GeoAlignableTransform(HepGeom::TranslateZ3D(zpos));
+    GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::TranslateZ3D(zpos));
     forward->add(transform);
     GeoVPhysVol* wheelPV = wheel.build(id);
     forward->add(wheelPV);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParameters.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParameters.cxx
index 4a0f704475b0be90891b595c2c320f8377e9a874..fde5723f681371d9eb720cd24414cba6692e21ec 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParameters.cxx
@@ -7,7 +7,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <iostream>
@@ -42,55 +42,55 @@ SCT_ForwardModuleParameters::fwdSensorNumWafers(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::moduleInterSidesGap(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdModule,"INTERSIDESGAP",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdModule,"INTERSIDESGAP",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorThickness(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"THICKNESS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"THICKNESS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorLength(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"LENGTH",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"LENGTH",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorInnerWidth(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"INNERWIDTH",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"INNERWIDTH",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorOuterWidth(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"OUTERWIDTH",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"OUTERWIDTH",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorInnerRadius(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"INNERRADIUS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"INNERRADIUS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorOuterRadius(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"OUTERRADIUS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"OUTERRADIUS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorMiddleRadius(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"MIDDLERADIUS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"MIDDLERADIUS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSensorDeltaPhi(int iModuleType) const
 {
-   return db()->getDouble(m_SctFwdSensor,"DELTAPHI",iModuleType) * CLHEP::mm;
+   return db()->getDouble(m_SctFwdSensor,"DELTAPHI",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 std::string 
@@ -102,13 +102,13 @@ SCT_ForwardModuleParameters::fwdSensorMaterial(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdSensorActiveHalfLength(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"ACTIVEHALFLENGTH",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSensor,"ACTIVEHALFLENGTH",iModuleType) * GeoModelKernelUnits::mm;
 }  
 
 double 
 SCT_ForwardModuleParameters::fwdSensorAngularPitch(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSensor,"ANGULARPITCH",iModuleType) * CLHEP::radian;
+  return db()->getDouble(m_SctFwdSensor,"ANGULARPITCH",iModuleType) * GeoModelKernelUnits::radian;
 }
 
 int
@@ -120,7 +120,7 @@ SCT_ForwardModuleParameters::fwdSensorNumReadoutStrips(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdModuleStereoAngle(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdModule,"STEREOANGLE",iModuleType) * CLHEP::milliradian;
+  return db()->getDouble(m_SctFwdModule,"STEREOANGLE",iModuleType) * GeoModelKernelUnits::milliradian;
 }
 
 int 
@@ -138,24 +138,24 @@ SCT_ForwardModuleParameters::fwdSensorChargeCarrier(int iModuleType) const
 double 
 SCT_ForwardModuleParameters::fwdSpineThickness(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSpine,"THICKNESS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSpine,"THICKNESS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSpineLength(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSpine,"LENGTH",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSpine,"LENGTH",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSpineMiddleRadius(int iModuleType) const
 {
-  return db()->getDouble(m_SctFwdSpine,"MIDDLERADIUS",iModuleType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdSpine,"MIDDLERADIUS",iModuleType) * GeoModelKernelUnits::mm;
 }
 
 double 
 SCT_ForwardModuleParameters::fwdSpineDeltaPhi(int iModuleType) const{
-  return db()->getDouble(m_SctFwdSpine,"DELTAPHI",iModuleType) * CLHEP::radian;
+  return db()->getDouble(m_SctFwdSpine,"DELTAPHI",iModuleType) * GeoModelKernelUnits::radian;
 }
 
 std::string 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParametersOld.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParametersOld.cxx
index 0767086c1d29feab6ba03d686722297e52e50504..07e4cc36fd25602efc74523001e01f60f1c595f1 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParametersOld.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardModuleParametersOld.cxx
@@ -7,7 +7,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <cmath>
 #include <iostream>
@@ -116,7 +116,7 @@ SCT_ForwardModuleParametersOld::moduleInterSidesGap(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_INTERSIDESGAP", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 double 
@@ -124,9 +124,9 @@ SCT_ForwardModuleParametersOld::fwdSensorThickness(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORTHICKNESS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  2.0 * m_rdb->zsmo()->getDouble("DZSC") * CLHEP::cm;
- //---return  m_rdb->fwdSensor(iModuleType)->getDouble("THICKNESS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  2.0 * m_rdb->zsmo()->getDouble("DZSC") * GeoModelKernelUnits::cm;
+ //---return  m_rdb->fwdSensor(iModuleType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -134,23 +134,23 @@ SCT_ForwardModuleParametersOld::fwdSensorLength(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORLENGTH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("RLF") * CLHEP::cm;
-//---return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("RLF") * GeoModelKernelUnits::cm;
+//---return  m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * GeoModelKernelUnits::mm;
 }
 double 
 SCT_ForwardModuleParametersOld::fwdSensorInnerWidth(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORINNERWIDTH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 double 
 SCT_ForwardModuleParametersOld::fwdSensorOuterWidth(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSOROUTERWIDTH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 double 
@@ -158,9 +158,9 @@ SCT_ForwardModuleParametersOld::fwdSensorInnerRadius(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORINNERRADIUS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("RINNERF") * CLHEP::cm;
-  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHFAR") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("RINNERF") * GeoModelKernelUnits::cm;
+  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("INNERWIDTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -168,9 +168,9 @@ SCT_ForwardModuleParametersOld::fwdSensorOuterRadius(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSOROUTERRADIUS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("ROUTERF") * CLHEP::cm;
-  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("ROUTERF") * GeoModelKernelUnits::cm;
+  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -178,15 +178,15 @@ SCT_ForwardModuleParametersOld::fwdSensorMiddleRadius(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORMIDDLERADIUS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("ROUTERF") * CLHEP::cm;
-//---return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("ROUTERF") * GeoModelKernelUnits::cm;
+//---return  m_rdb->fwdSensor(iModuleType)->getDouble("OUTERWIDTHFAR") * GeoModelKernelUnits::mm;
 }
 double 
 SCT_ForwardModuleParametersOld::fwdSensorDeltaPhi(int iModuleType) const{
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SENSORDELTAPHI", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::radian;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::radian;
 }
 
 std::string 
@@ -203,9 +203,9 @@ SCT_ForwardModuleParametersOld::fwdSensorActiveHalfLength(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_ACTIVEHALFLENGTH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("RSEF") * CLHEP::cm;
- //---return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHFAR") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("RSEF") * GeoModelKernelUnits::cm;
+ //---return  m_rdb->fwdSensor(iModuleType)->getDouble("ACTIVEHALFLENGTHFAR") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -213,9 +213,9 @@ SCT_ForwardModuleParametersOld::fwdSensorAngularPitch(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_ANGULARPITCH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::radian;
-  //---return  m_rdb->zsmi(iModuleType)->getDouble("PHISTR") * CLHEP::radian;
-  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("ANGULARPITCH") * CLHEP::radian;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::radian;
+  //---return  m_rdb->zsmi(iModuleType)->getDouble("PHISTR") * GeoModelKernelUnits::radian;
+  //---return  m_rdb->fwdSensor(iModuleType)->getDouble("ANGULARPITCH") * GeoModelKernelUnits::radian;
 }
 
 int
@@ -233,9 +233,9 @@ SCT_ForwardModuleParametersOld::fwdModuleStereoAngle(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_STEREOANGLE", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::milliradian;
-  //---return 40 * CLHEP::milliradian;
-  //---return m_rdb->fwdModule(iModuleType)->getDouble("STEREOANGLE") * CLHEP::milliradian;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::milliradian;
+  //---return 40 * GeoModelKernelUnits::milliradian;
+  //---return m_rdb->fwdModule(iModuleType)->getDouble("STEREOANGLE") * GeoModelKernelUnits::milliradian;
 }
 
 //
@@ -246,9 +246,9 @@ SCT_ForwardModuleParametersOld::fwdSpineThickness(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SPINETHICKNESS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //---return 1*CLHEP::mm;
-  //---return  m_rdb->fwdSpine(iModuleType)->getDouble("THICKNESS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return 1*GeoModelKernelUnits::mm;
+  //---return  m_rdb->fwdSpine(iModuleType)->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -256,11 +256,11 @@ SCT_ForwardModuleParametersOld::fwdSpineLength(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SPINELENGTH", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
-  //return 8*CLHEP::cm;
-  //---  return (m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHNEAR") * CLHEP::mm
-  //---	  + m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * CLHEP::mm + 2*CLHEP::cm);
-//return  m_rdb->fwdSpine(iModuleType)->getDouble("WIDTH") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
+  //return 8*GeoModelKernelUnits::cm;
+  //---  return (m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHNEAR") * GeoModelKernelUnits::mm
+  //---	  + m_rdb->fwdSensor(iModuleType)->getDouble("LENGTHFAR") * GeoModelKernelUnits::mm + 2*GeoModelKernelUnits::cm);
+//return  m_rdb->fwdSpine(iModuleType)->getDouble("WIDTH") * GeoModelKernelUnits::mm;
 }
 
 double 
@@ -268,13 +268,13 @@ SCT_ForwardModuleParametersOld::fwdSpineMiddleRadius(int iModuleType) const
 {
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SPINEMIDDLERADIUS", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 double 
 SCT_ForwardModuleParametersOld::fwdSpineDeltaPhi(int iModuleType) const{
   char paraName[50];
   sprintf(paraName, "FWD_M%d_SPINEDELTAPHI", iModuleType);
-  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*CLHEP::radian;
+  return (double)(m_SCT_Fwd_Modules->find(paraName))->second*GeoModelKernelUnits::radian;
 }
 
 std::string 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParameters.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParameters.cxx
index 9c3a2bf2f165372981d3a1e0e97c71c114d810d3..7b9d76a7f0bd4def13a4789513cf5d2512dc6ba6 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParameters.cxx
@@ -9,7 +9,7 @@
 #include "GeometryDBSvc/IGeometryDBSvc.h"
 
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 #include <cmath>
@@ -72,7 +72,7 @@ SCT_ForwardParameters::fwdNumWheels() const
 double
 SCT_ForwardParameters::fwdWheelZPosition(int iWheel) const
 {
-  return db()->getDouble(m_SctFwdWheel,"ZPOSITION",iWheel) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdWheel,"ZPOSITION",iWheel) * GeoModelKernelUnits::mm;
 }
 
 int
@@ -107,19 +107,19 @@ SCT_ForwardParameters::getRingMapIndex(int iWheel, int iRingIndex) const
 double
 SCT_ForwardParameters::fwdDiscSupportInnerRadius(int iWheel) const
 {
-  return db()->getDouble(m_SctFwdDiscSupport,"INNERRADIUS",iWheel) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdDiscSupport,"INNERRADIUS",iWheel) * GeoModelKernelUnits::mm;
 } 
 
 double
 SCT_ForwardParameters::fwdDiscSupportOuterRadius(int iWheel) const
 {
-  return db()->getDouble(m_SctFwdDiscSupport,"OUTERRADIUS",iWheel) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdDiscSupport,"OUTERRADIUS",iWheel) * GeoModelKernelUnits::mm;
 }
  
 double
 SCT_ForwardParameters::fwdDiscSupportThickness(int iWheel) const
 {
-  return db()->getDouble(m_SctFwdDiscSupport,"THICKNESS",iWheel) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdDiscSupport,"THICKNESS",iWheel) * GeoModelKernelUnits::mm;
 } 
 
 std::string
@@ -142,37 +142,37 @@ SCT_ForwardParameters::fwdRingNumModules(int iRingType) const
 double
 SCT_ForwardParameters::fwdRingInnerRadius(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"INNERRADIUS",iRingType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdRing,"INNERRADIUS",iRingType) * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingMiddleRadius(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"MIDDLERADIUS",iRingType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdRing,"MIDDLERADIUS",iRingType) * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingOuterRadius(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"OUTERRADIUS",iRingType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdRing,"OUTERRADIUS",iRingType) * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingOffset(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"OFFSET",iRingType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdRing,"OFFSET",iRingType) * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingModuleStagger(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"MODULESTAGGER",iRingType) * CLHEP::mm;
+  return db()->getDouble(m_SctFwdRing,"MODULESTAGGER",iRingType) * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdRingPhiOfRefModule(int iRingType) const
 {
-  return db()->getDouble(m_SctFwdRing,"PHIOFREFMODULE",iRingType) * CLHEP::radian;
+  return db()->getDouble(m_SctFwdRing,"PHIOFREFMODULE",iRingType) * GeoModelKernelUnits::radian;
 }
 
 int
@@ -205,37 +205,37 @@ SCT_ForwardParameters::fwdWheelStereoType(m_iWheel, int iRing) const
 double
 SCT_ForwardParameters::fwdInnerRadius() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"INNERRADIUS") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdIntermediateRadius() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"RINTERMEDIATE") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"RINTERMEDIATE") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdOuterRadius() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"OUTERRADIUS") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdZMin() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"ZMIN") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"ZMIN") * GeoModelKernelUnits::mm;
 } 
 
 double
 SCT_ForwardParameters::fwdZIntermediate() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"ZINTERMEDIATE") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"ZINTERMEDIATE") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParameters::fwdZMax() const
 {
-  return db()->getDouble(m_SctFwdGeneral,"ZMAX") * CLHEP::mm;
+  return db()->getDouble(m_SctFwdGeneral,"ZMAX") * GeoModelKernelUnits::mm;
 }
 
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParametersOld.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParametersOld.cxx
index 7aa10b20def0d4a2d686f8d79360a43a4215a140..71ee405b5f419395574d2d4eafe726f5beb7ee8d 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParametersOld.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_ForwardParametersOld.cxx
@@ -10,7 +10,7 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 #include <iostream>
 #include <cmath>
@@ -190,8 +190,8 @@ SCT_ForwardParametersOld::fwdWheelZPosition(int iWheel) const
 {
   char paraName[50];
   sprintf(paraName, "W%d_DISKZPOSITION", iWheel);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
-  //return m_rdb->fwdWheel(iWheel)->getDouble("ZPOSITION") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
+  //return m_rdb->fwdWheel(iWheel)->getDouble("ZPOSITION") * GeoModelKernelUnits::mm;
 }
 
 int
@@ -217,8 +217,8 @@ SCT_ForwardParametersOld::fwdDiscSupportInnerRadius(int iWheel) const
 {
   char paraName[50];
   sprintf(paraName, "W%d_DISKINNERRADIUS", iWheel);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
-  //---return m_rdb->fwdDiscSupport()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return m_rdb->fwdDiscSupport()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
@@ -226,8 +226,8 @@ SCT_ForwardParametersOld::fwdDiscSupportOuterRadius(int iWheel) const
 {
   char paraName[50];
   sprintf(paraName, "W%d_DISKOUTERRADIUS", iWheel);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
-  //---return m_rdb->fwdDiscSupport()->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return m_rdb->fwdDiscSupport()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
  
 double
@@ -235,8 +235,8 @@ SCT_ForwardParametersOld::fwdDiscSupportThickness(int iWheel) const
 {
   char paraName[50];
   sprintf(paraName, "W%d_DISKTHICKNESS", iWheel);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
-  //---return m_rdb->fwdDiscSupport()->getDouble("THICKNESS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return m_rdb->fwdDiscSupport()->getDouble("THICKNESS") * GeoModelKernelUnits::mm;
 }
 
 std::string
@@ -267,7 +267,7 @@ SCT_ForwardParametersOld::fwdRingInnerRadius(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_INNERRADIUS", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 double
@@ -275,14 +275,14 @@ SCT_ForwardParametersOld::fwdRingMiddleRadius(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_MIDDLERADIUS", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 double
 SCT_ForwardParametersOld::fwdRingOuterRadius(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_OUTERRADIUS", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 double
@@ -290,7 +290,7 @@ SCT_ForwardParametersOld::fwdRingOffset(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_OFFSET", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
 }
 
 double
@@ -298,8 +298,8 @@ SCT_ForwardParametersOld::fwdRingModuleStagger(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_MODULESTAGGER", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::mm;
-  //---return m_rdb->fwdRing(iRing)->getDouble("MODULESTAGGER") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::mm;
+  //---return m_rdb->fwdRing(iRing)->getDouble("MODULESTAGGER") * GeoModelKernelUnits::mm;
 }
 
 double
@@ -307,8 +307,8 @@ SCT_ForwardParametersOld::fwdRingPhiOfRefModule(int iRing) const
 {
   char paraName[50];
   sprintf(paraName, "Ring_%d_PHIOFREFMODULE", iRing);
-  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*CLHEP::radian;
-  //---return m_rdb->fwdRing(iRing)->getDouble("PHIOFREFMODULE") * CLHEP::deg;
+  return (double)(m_SCT_Fwd_Parameters->find(paraName))->second*GeoModelKernelUnits::radian;
+  //---return m_rdb->fwdRing(iRing)->getDouble("PHIOFREFMODULE") * GeoModelKernelUnits::deg;
 }
 
 int
@@ -348,22 +348,22 @@ SCT_ForwardParametersOld::fwdWheelStereoType(m_iWheel, int iRing) const
 double
 SCT_ForwardParametersOld::fwdInnerRadius() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_INNERRADIUS"))->second*CLHEP::mm;
-  // return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_INNERRADIUS"))->second*GeoModelKernelUnits::mm;
+  // return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParametersOld::fwdIntermediateRadius() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_INTERMEDIATERADIUS"))->second*CLHEP::mm;
-  // return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_INTERMEDIATERADIUS"))->second*GeoModelKernelUnits::mm;
+  // return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParametersOld::fwdOuterRadius() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_OUTERRADIUS"))->second*CLHEP::mm;
-  // return m_rdb->fwdGeneral()->getDouble("OUTERRADIUS") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_OUTERRADIUS"))->second*GeoModelKernelUnits::mm;
+  // return m_rdb->fwdGeneral()->getDouble("OUTERRADIUS") * GeoModelKernelUnits::mm;
 }
 
 
@@ -372,22 +372,22 @@ SCT_ForwardParametersOld::fwdOuterRadius() const
 double
 SCT_ForwardParametersOld::fwdZMin() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZMIN"))->second*CLHEP::mm;
-  //return m_rdb->fwdGeneral()->getDouble("ZMIN") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZMIN"))->second*GeoModelKernelUnits::mm;
+  //return m_rdb->fwdGeneral()->getDouble("ZMIN") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParametersOld::fwdZIntermediate() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZINTERMEDIATE"))->second*CLHEP::mm;
-  //return m_rdb->fwdGeneral()->getDouble("ZMIN") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZINTERMEDIATE"))->second*GeoModelKernelUnits::mm;
+  //return m_rdb->fwdGeneral()->getDouble("ZMIN") * GeoModelKernelUnits::mm;
 }
 
 double
 SCT_ForwardParametersOld::fwdZMax() const
 {
-  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZMAX"))->second*CLHEP::mm;
-  //return m_rdb->fwdGeneral()->getDouble("ZMAX") * CLHEP::mm;
+  return (double)(m_SCT_Fwd_Parameters->find("FWD_ZMAX"))->second*GeoModelKernelUnits::mm;
+  //return m_rdb->fwdGeneral()->getDouble("ZMAX") * GeoModelKernelUnits::mm;
 }
 
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdDiscSupport.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdDiscSupport.cxx
index 14e838bfa42a3c424789c7b01f5312b0c291a138..7a409fbfa5b0abf1452313d76fe89d5696119030 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdDiscSupport.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdDiscSupport.cxx
@@ -10,7 +10,7 @@
 #include "GeoModelKernel/GeoTube.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDDSLHC {
 
@@ -31,7 +31,7 @@ void SCT_FwdDiscSupport::getParameters(){
   //m_material     = materials.getMaterial(parameters->fwdDiscSupportMaterial(m_iWheel));
   //0.1265 is taken from oracle database (DiskSupport)
   double materialIncreaseFactor = parameters->materialIncreaseFactor(m_iWheel);
-  //double cf_density = 0.1265*materialIncreaseFactor*CLHEP::g/CLHEP::cm3;
+  //double cf_density = 0.1265*materialIncreaseFactor*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
   //m_material = materials->getMaterial(parameters->fwdDiscSupportMaterial(m_iWheel), cf_density);
   m_material = materials->getMaterialScaled(parameters->fwdDiscSupportMaterial(m_iWheel), materialIncreaseFactor);
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdModule.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdModule.cxx
index 02996975524dcf09902f35565740cddbdcbacd6a..a6f5a6354ff77a866024a3a71c64e3da7cc0e69a 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdModule.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdModule.cxx
@@ -24,10 +24,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <cmath>
 #include <sstream>
@@ -71,23 +71,23 @@ const GeoLogVol * SCT_FwdModule::preBuild(){
   m_sensor = new SCT_FwdSensor("ECSensor0", m_ring);
 
   //prepare the module envelope volume
-  m_length       = std::max(m_sensor->length(), m_spine->length()) + 0.50*CLHEP::cm;//0.01mm safety necessary (for stereo angle)
+  m_length       = std::max(m_sensor->length(), m_spine->length()) + 0.50*GeoModelKernelUnits::cm;//0.01mm safety necessary (for stereo angle)
   m_middleRadius = m_sensor->middleRadius();
   m_innerRadius  = m_middleRadius - 0.5*m_length;
   m_outerRadius  = m_middleRadius + 0.5*m_length;
   m_deltaPhi    = std::max(m_sensor->deltaPhi(), m_spine->deltaPhi());
   if(m_doubleSided){
     double interSidesGap = std::max(m_spine->thickness(), m_interSidesGap);
-    m_thickness = 2*m_sensor->thickness() + interSidesGap + 0.01*CLHEP::mm;//0.01mm safety necessary
-    //the term 10*CLHEP::degree*3.14/180, is to accommodate the stereo rotation
-    m_deltaPhi    = m_deltaPhi + 10*CLHEP::degree*3.14/180.;
+    m_thickness = 2*m_sensor->thickness() + interSidesGap + 0.01*GeoModelKernelUnits::mm;//0.01mm safety necessary
+    //the term 10*GeoModelKernelUnits::degree*3.14/180, is to accommodate the stereo rotation
+    m_deltaPhi    = m_deltaPhi + 10*GeoModelKernelUnits::degree*3.14/180.;
     //add 1cm, to accomodate for stereo rotation (to be dealt correctly with later)
-    //m_innerRadius = m_innerRadius - 0.5*CLHEP::cm;
-    //m_outerRadius = m_outerRadius + 0.5*CLHEP::cm;
-    m_innerWidth = std::max(m_sensor->innerWidth(), m_spine->innerWidth()) + 2*CLHEP::cm; 
-    m_outerWidth = std::max(m_sensor->outerWidth(), m_spine->outerWidth()) + 2*CLHEP::cm; 
+    //m_innerRadius = m_innerRadius - 0.5*GeoModelKernelUnits::cm;
+    //m_outerRadius = m_outerRadius + 0.5*GeoModelKernelUnits::cm;
+    m_innerWidth = std::max(m_sensor->innerWidth(), m_spine->innerWidth()) + 2*GeoModelKernelUnits::cm; 
+    m_outerWidth = std::max(m_sensor->outerWidth(), m_spine->outerWidth()) + 2*GeoModelKernelUnits::cm; 
   }else{
-    m_thickness   = m_sensor->thickness() + m_spine->thickness() + 0.01*CLHEP::mm;//0.01mm safety necessary
+    m_thickness   = m_sensor->thickness() + m_spine->thickness() + 0.01*GeoModelKernelUnits::mm;//0.01mm safety necessary
     m_innerWidth = std::max(m_sensor->innerWidth(), m_spine->innerWidth()); 
     m_outerWidth = std::max(m_sensor->outerWidth(), m_spine->outerWidth());
   }
@@ -105,13 +105,13 @@ GeoVPhysVol* SCT_FwdModule::build(SCT_Identifier id) const{
   GeoFullPhysVol* module = new GeoFullPhysVol(m_logVolume);
 
   //first, calculate the module components positions
-  HepGeom::Transform3D innerSidePos, spinePos, outerSidePos;
+  GeoTrf::Transform3D innerSidePos(GeoTrf::Transform3D::Identity());
+  GeoTrf::Transform3D spinePos(GeoTrf::Transform3D::Identity());
+  GeoTrf::Transform3D outerSidePos(GeoTrf::Transform3D::Identity());
   if(m_doubleSided){
     //inner side position (shift this side towards the intreaction point, ie Z negative)
     //this is the thickness direction
-    CLHEP::HepRotation inner_Rot;
-    //inner_Rot.rotateZ(180*CLHEP::deg);
-    inner_Rot.rotateX(0.5*m_stereoAngle);
+    GeoTrf::RotateX3D inner_Rot(0.5*m_stereoAngle);
     double interSidesGap = std::max(m_spine->thickness(), m_interSidesGap);
     double Xpos = 0.5*( interSidesGap + m_sensor->thickness());
     //protection
@@ -122,14 +122,10 @@ GeoVPhysVol* SCT_FwdModule::build(SCT_Identifier id) const{
 	       <<". exit athena!"<<std::endl;
       exit(1);
     }
-    CLHEP::Hep3Vector  inner_Xpos = CLHEP::Hep3Vector(Xpos, 0.0, 0.0);
-    innerSidePos = HepGeom::Transform3D(inner_Rot, inner_Xpos);
-    //spine position (no shift)
-    spinePos = HepGeom::Translate3D(CLHEP::Hep3Vector( 0.0, 0.0, 0.0));
+    GeoTrf::Translation3D  inner_Xpos(Xpos, 0.0, 0.0);
+    innerSidePos = GeoTrf::Transform3D(inner_Xpos*inner_Rot);
     //outer side (shift towards X positive)
-    CLHEP::HepRotation outer_Rot;
-    outer_Rot.rotateZ(180*CLHEP::deg);
-    outer_Rot.rotateX(-0.5*m_stereoAngle);
+    GeoTrf::Transform3D outer_Rot = GeoTrf::RotateX3D(-0.5*m_stereoAngle)*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg);
     Xpos = -0.5*(interSidesGap + m_sensor->thickness());
     //protection
     if(fabs(Xpos)+0.5*m_sensor->thickness() > 0.5*m_thickness){
@@ -139,12 +135,10 @@ GeoVPhysVol* SCT_FwdModule::build(SCT_Identifier id) const{
 	       <<". exit athena!"<<std::endl;
       exit(1);
     }
-    CLHEP::Hep3Vector outer_Xpos = CLHEP::Hep3Vector(Xpos, 0.0, 0.0);
-    outerSidePos = HepGeom::Transform3D(outer_Rot, outer_Xpos);
+    GeoTrf::Translation3D outer_Xpos(Xpos, 0.0, 0.0);
+    outerSidePos = GeoTrf::Transform3D(outer_Xpos*outer_Rot);
   }else{
     //inner side position (shift this side towards the intreaction point, ie X negative)
-    CLHEP::HepRotation inner_Rot;
-    inner_Rot.rotateX(0);//don't rotate (only one side)
     double Xpos = 0.5*m_spine->thickness();
     //protection
     if(fabs(Xpos)+0.5*m_sensor->thickness() > 0.5*m_thickness){
@@ -154,8 +148,7 @@ GeoVPhysVol* SCT_FwdModule::build(SCT_Identifier id) const{
 	       <<". exit athena!"<<std::endl;
       exit(1);
     }
-    CLHEP::Hep3Vector  inner_Xpos = CLHEP::Hep3Vector(Xpos, 0.0, 0.0);
-    innerSidePos = HepGeom::Transform3D(inner_Rot, inner_Xpos);
+    innerSidePos = GeoTrf::Translate3D(Xpos, 0.0, 0.0);
     //spine position (shift towards Z positive)
     Xpos = -0.5*m_sensor->thickness();
     //protection!
@@ -166,7 +159,7 @@ GeoVPhysVol* SCT_FwdModule::build(SCT_Identifier id) const{
 	       <<". exit athena!"<<std::endl;
       exit(1);
     }
-    spinePos = HepGeom::Translate3D(CLHEP::Hep3Vector( Xpos, 0.0, 0.0));
+    spinePos = GeoTrf::Translate3D(Xpos, 0.0, 0.0);
   }
 
   //add the physical inner side to the mdoule
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdRing.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdRing.cxx
index a8721bc5584ac0f6560f8022f1abdea3f471684f..e1f6a79ada438ef050c2a33be078bffdda490572 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdRing.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdRing.cxx
@@ -20,10 +20,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <sstream>
 #include <cmath>
@@ -68,11 +68,11 @@ const GeoLogVol* SCT_FwdRing::preBuild(){
   m_module = new SCT_FwdModule("FwdModule"+intToString(m_iRing), 
 			       m_iRing, m_doubleSided); 
 
-  //m_innerRadius = m_innerRadius - 0.51*CLHEP::cm;//0.01mm safety necessary
-  //m_outerRadius = m_outerRadius + 0.51*CLHEP::cm;//0.01mm safety necessary
-  m_innerRadius = m_innerRadius - 5*CLHEP::mm;//0.01mm safety necessary
-  m_outerRadius = m_outerRadius + 7*CLHEP::mm;//0.01mm safety necessary
-  m_thickness   = m_module->thickness() + m_moduleStagger + 0.01*CLHEP::mm;//safety necessary
+  //m_innerRadius = m_innerRadius - 0.51*GeoModelKernelUnits::cm;//0.01mm safety necessary
+  //m_outerRadius = m_outerRadius + 0.51*GeoModelKernelUnits::cm;//0.01mm safety necessary
+  m_innerRadius = m_innerRadius - 5*GeoModelKernelUnits::mm;//0.01mm safety necessary
+  m_outerRadius = m_outerRadius + 7*GeoModelKernelUnits::mm;//0.01mm safety necessary
+  m_thickness   = m_module->thickness() + m_moduleStagger + 0.01*GeoModelKernelUnits::mm;//safety necessary
   m_length = m_outerRadius - m_innerRadius;
   //protection along R!
   if(m_length<m_module->length()){
@@ -101,7 +101,7 @@ GeoVPhysVol* SCT_FwdRing::build(SCT_Identifier id) const{
 
   // Physical volume for the half ring
   GeoPhysVol* ring = new GeoPhysVol(m_logVolume);
-  double divisionAngle     = 360*CLHEP::degree/m_numModules;
+  double divisionAngle     = 360*GeoModelKernelUnits::degree/m_numModules;
   bool   negativeEndCap    = (id.getBarrelEC() < 0);
   int    staggerUpperLower = m_firstStagger;
   for(int imod=0; imod<m_numModules; imod++){
@@ -120,25 +120,18 @@ GeoVPhysVol* SCT_FwdRing::build(SCT_Identifier id) const{
 
     double phi =  m_refStartAngle + imod*divisionAngle;
     //std::cerr<<"endcap "<<id.getBarrelEC()<<", ring "<<m_iRing<<", startAngle"<<m_refStartAngle<<", phi "<<phi<<std::endl;
-    CLHEP::HepRotation rot;
     //put the module along the radius of the ring, along X for example (remeber, it is along Z)
-    rot.rotateY(90*CLHEP::degree);    
+    GeoTrf::Transform3D rot = GeoTrf::RotateY3D(90*GeoModelKernelUnits::degree);
     if (negativeEndCap) {
       //rotate the module so that to keep the local frame orientation as in the positive end
-      //rot.rotateZ(180*CLHEP::degree);    
+      //rot.rotateZ(180*GeoModelKernelUnits::degree);    
       //start in the oppsite phi and turn in the oppsite direction
-      if(phi < CLHEP::pi)
-	phi = CLHEP::pi - phi;
+      if(phi < GeoModelKernelUnits::pi)
+	phi = GeoModelKernelUnits::pi - phi;
       else
-	phi = 3*CLHEP::pi - phi;
-    }
-    if(m_doubleSided){
-      //rot.rotateZ(phi + 0.5*m_stereoSign*m_module->stereoAngle());
-      // do not stereo angle since the wheel type is not given, may be need to change later(today: 05/09/08)
-      rot.rotateZ(phi);
-    }else{
-      rot.rotateZ(phi);
+	phi = 3*GeoModelKernelUnits::pi - phi;
     }
+    rot = GeoTrf::RotateZ3D(phi) * rot;
     //std::cerr<<"endcap "<<id.getBarrelEC()<<", wheel "<<m_iWheel<<", ring "<<m_iRing<<", mod "<<imod<<", phi "<<phi<<", startAng "<<m_refStartAngle<<std::endl;
     //the module stagger is opposite for oposite rings?! 
     double Zpos = staggerUpperLower*m_ringSide*0.5*m_moduleStagger;
@@ -150,11 +143,11 @@ GeoVPhysVol* SCT_FwdRing::build(SCT_Identifier id) const{
 	       <<". exit athena!"<<std::endl;
       exit(1);
     }
-    CLHEP::Hep3Vector xyz(m_middleRadius, 0, Zpos);
-    xyz.rotateZ(phi);
-    HepGeom::Transform3D modulePos(rot,xyz);
+    GeoTrf::Vector3D xyz(m_middleRadius, 0, Zpos);
+    xyz = GeoTrf::RotateZ3D(phi)*xyz;
+    GeoTrf::Transform3D modulePos = GeoTrf::Translate3D(xyz.x(),xyz.y(),xyz.z())*rot;
     //protection along R!
-    const double epsilon = 0.0001*CLHEP::mm; //beyound meansurment precision?!
+    const double epsilon = 0.0001*GeoModelKernelUnits::mm; //beyound meansurment precision?!
     if(m_innerRadius-epsilon>m_module->innerRadius() || 
        m_outerRadius+epsilon<m_module->outerRadius()){
       std::cout<<"SCT_FwdRing.cxx: problem with module position along R: "
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSensor.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSensor.cxx
index fd3a852a5f0c69474fcd5deff5bd16658dbb6d77..4adf6c3db309be8c3a95896b3cd33027ccaf1d22 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSensor.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSensor.cxx
@@ -19,11 +19,11 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include "InDetReadoutGeometry/SCT_DetectorManager.h"
 #include "InDetReadoutGeometry/SCT_ForwardModuleSideDesign.h"
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSpine.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSpine.cxx
index a454ba956c5adf723055c521468d8139402b8a4f..99953035a2a4c7f4bb70269d350c78dfa54bca64 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSpine.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdSpine.cxx
@@ -14,11 +14,11 @@
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
 
 #include <cmath>
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdWheel.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdWheel.cxx
index d41a38310568dad59333b750976394c163d3a324..6ce2e2b667784c33fd1f88ce8fc42851a91ba390 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdWheel.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_FwdWheel.cxx
@@ -22,10 +22,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 
 #include <sstream>
@@ -65,7 +65,7 @@ void SCT_FwdWheel::getParameters(){
     m_ringOffset.push_back(parameters->fwdRingOffset(ringType));
     m_ringTypes.push_back(ringType);
   }
-  m_staggerGap = 0.001* CLHEP::mm;
+  m_staggerGap = 0.001* GeoModelKernelUnits::mm;
 
   // Set numerology
   detectorManager()->numerology().setNumRingsForDisk(m_iWheel,m_numRings);  
@@ -85,10 +85,10 @@ const GeoLogVol* SCT_FwdWheel::preBuild(){
   }
   //Calculate the extent of the envelope  
   //start the support disc
-  //m_outerRadius = m_discSupport->outerRadius() + 0.52*CLHEP::cm;//0.01mm safety necessary
-  //m_innerRadius = m_discSupport->innerRadius() - 0.52*CLHEP::cm;//0.01mm safety necessary
-  m_outerRadius = m_discSupport->outerRadius() + 9*CLHEP::mm;//0.01mm safety necessary
-  m_innerRadius = m_discSupport->innerRadius() - 9*CLHEP::mm;//0.01mm safety necessary
+  //m_outerRadius = m_discSupport->outerRadius() + 0.52*GeoModelKernelUnits::cm;//0.01mm safety necessary
+  //m_innerRadius = m_discSupport->innerRadius() - 0.52*GeoModelKernelUnits::cm;//0.01mm safety necessary
+  m_outerRadius = m_discSupport->outerRadius() + 9*GeoModelKernelUnits::mm;//0.01mm safety necessary
+  m_innerRadius = m_discSupport->innerRadius() - 9*GeoModelKernelUnits::mm;//0.01mm safety necessary
   //then comsider rings
   double wheelThickness_neg = -1.0;//negative value! see code below
   double wheelThickness_pos = -1.0;
@@ -165,8 +165,7 @@ GeoVPhysVol* SCT_FwdWheel::build(SCT_Identifier id) const{
 
   GeoFullPhysVol* wheel = new GeoFullPhysVol(m_logVolume);
   //support disc
-  CLHEP::Hep3Vector disc_pos(0, 0, m_discSupportZpos);
-  wheel->add(new GeoTransform(HepGeom::Translate3D(disc_pos)));
+  wheel->add(new GeoTransform(GeoTrf::Translate3D(0, 0, m_discSupportZpos)));
   wheel->add(m_discSupport->getVolume());
 
   //rings
@@ -226,7 +225,6 @@ GeoVPhysVol* SCT_FwdWheel::build(SCT_Identifier id) const{
 	       <<std::endl;
       exit(1);
     }
-    CLHEP::Hep3Vector ring_pos(0, 0, ring_z_pos);
     //each wheel drops a ring, that's why ring_id (ie eta) is calculated in the following way
     //(ie the second ring from a wheel and the first ring from a following wheel in a region 
     //(SS or LS) have the same eta.
@@ -234,7 +232,7 @@ GeoVPhysVol* SCT_FwdWheel::build(SCT_Identifier id) const{
     int ring_id = iRing;
     wheel->add(new GeoNameTag("Ring#" + intToString(ring_id)));
     wheel->add(new GeoIdentifierTag(ring_id));
-    wheel->add(new GeoTransform(HepGeom::Translate3D(ring_pos)));
+    wheel->add(new GeoTransform(GeoTrf::Translate3D(0, 0, ring_z_pos)));
     //std::cerr<<", ring "<<ring_id;
     id.setEtaModule(ring_id);
     //--id.setEtaModule(iRing);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_GeneralParameters.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_GeneralParameters.cxx
index 4233afc1f7a7bd0e3eb044e6094242dfb5efddd9..3a3a28a4f8e3d48f1378329e634e90ba39d3c663 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_GeneralParameters.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_GeneralParameters.cxx
@@ -7,15 +7,15 @@
 #include "SCT_SLHC_GeoModel/SCT_DataBase.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeometryDBSvc/IGeometryDBSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "InDetGeoModelUtils/TopLevelPlacements.h"
 
 #include <iostream>
 
 namespace InDetDDSLHC {
 
-const double SCT_SAFETY = 0.01 * CLHEP::mm; // Used in some places to make envelopes slightly larger to ensure
+const double SCT_SAFETY = 0.01 * GeoModelKernelUnits::mm; // Used in some places to make envelopes slightly larger to ensure
                                      // no overlaps due to rounding errors.
 
 SCT_GeneralParameters::SCT_GeneralParameters(const SCT_DataBase * sctdb, const SCT_GeoModelAthenaComps * athenaComps)
@@ -32,7 +32,7 @@ SCT_GeneralParameters::~SCT_GeneralParameters()
 }
 
 
-const HepGeom::Transform3D & 
+const GeoTrf::Transform3D & 
 SCT_GeneralParameters::partTransform(const std::string & partName) const 
 {
   return m_placements->transform(partName);
@@ -124,19 +124,19 @@ unsigned int SCT_GeneralParameters::envelopeNumPlanes() const
 
 double SCT_GeneralParameters::envelopeZ(int i) const 
 {
-  double zmin =  db()->getDouble(m_SctEnvelope,"Z",i) * CLHEP::mm;
+  double zmin =  db()->getDouble(m_SctEnvelope,"Z",i) * GeoModelKernelUnits::mm;
   if (zmin < 0) msg(MSG::ERROR) << "SctEnvelope table should only contain +ve z values" << endmsg;
   return std::abs(zmin);
 }
 
 double SCT_GeneralParameters::envelopeRMin(int i) const 
 {
-  return db()->getDouble(m_SctEnvelope,"RMIN",i) * CLHEP::mm;
+  return db()->getDouble(m_SctEnvelope,"RMIN",i) * GeoModelKernelUnits::mm;
 }
 
 double SCT_GeneralParameters::envelopeRMax(int i) const
 {
-  return db()->getDouble(m_SctEnvelope,"RMAX",i) * CLHEP::mm;
+  return db()->getDouble(m_SctEnvelope,"RMAX",i) * GeoModelKernelUnits::mm;
 }
 
 
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_InnerSide.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_InnerSide.cxx
index 6e55cab68b45d9b0d81bd392f09b2151095d43ff..567f7cc9ff0d2a579ca9677280c50b7a4d08731f 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_InnerSide.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_InnerSide.cxx
@@ -22,9 +22,9 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h" 
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+ 
 
 #include <cmath>
 
@@ -82,7 +82,7 @@ const GeoLogVol* SCT_InnerSide::preBuild(){
   //positions with respect to the center of the inner side box
   double innerSensorXPos = 0;
   //Position sensor
-  m_sensorPos = new GeoTransform(HepGeom::TranslateX3D(innerSensorXPos));
+  m_sensorPos = new GeoTransform(GeoTrf::TranslateX3D(innerSensorXPos));
   m_sensorPos->ref();
   return InnerSideLogV;
 }
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Layer.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Layer.cxx
index 5c6fbe5bf031a6204eb472e16f7c421c1783c16c..83c6076022c600d80139ed453d0dbf3d2e1a3fc4 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Layer.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Layer.cxx
@@ -23,10 +23,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <sstream>
 #include <cmath>
@@ -72,7 +72,7 @@ void SCT_Layer::getParameters(){
   //---m_supportMaterial = materials->getMaterial(parameters->supportCylMaterial(m_iLayer));
   //0.189 is taken from oracle database (CFiberSupport)
   double materialIncreaseFactor = parameters->materialIncreaseFactor(m_iLayer);
-  //double cf_density = 0.189*materialIncreaseFactor*CLHEP::g/CLHEP::cm3;
+  //double cf_density = 0.189*materialIncreaseFactor*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
   //m_supportMaterial = materials->getMaterial(parameters->supportCylMaterial(m_iLayer), cf_density);
   m_supportMaterial = materials->getMaterialScaled(parameters->supportCylMaterial(m_iLayer), materialIncreaseFactor);
 
@@ -93,7 +93,7 @@ const GeoLogVol* SCT_Layer::preBuild(){
   //Create the logical volume: a sphape + material
   std::string layerNumStr = intToString(m_iLayer);
   //Calculations to make the ski(s)
-  double divisionAngle  = 360*CLHEP::degree/m_skisPerLayer;
+  double divisionAngle  = 360*GeoModelKernelUnits::degree/m_skisPerLayer;
   m_skiPhiStart = 0.5*divisionAngle;
   //Make the ski: this is made from modules 
   m_ski = new SCT_Ski("Ski"+layerNumStr, m_modulesPerSki, m_iLayer, 
@@ -134,7 +134,7 @@ GeoVPhysVol* SCT_Layer::build(SCT_Identifier id) const{
   SCT_MaterialManager * materials = geometryManager()->materialManager();
   //We make this a fullPhysVol for alignment code.
   GeoFullPhysVol* layer = new GeoFullPhysVol(m_logVolume);
-  double divisionAngle  = 360*CLHEP::degree/m_skisPerLayer;
+  double divisionAngle  = 360*GeoModelKernelUnits::degree/m_skisPerLayer;
   //Make envelope for active layer
   const GeoTube* activeLayerEnvelope = new GeoTube(m_activeInnerRadius, 
 							m_activeOuterRadius, 0.5*m_cylLength);
@@ -148,17 +148,15 @@ GeoVPhysVol* SCT_Layer::build(SCT_Identifier id) const{
     //first, rotate the ski to have the right orientation (by default the ski is put in 
     //the center of the layer cylinder with thickness along X, width along Y and length
     //along Z. the rotation is done along the cylinder Z axis.
-    CLHEP::HepRotation rot;
-    rot.rotateZ(phi);
-    rot.rotateZ(m_tilt);
+    GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(m_tilt)*GeoTrf::RotateZ3D(phi);
     //then translate the ski to (R, Phi) position
-    CLHEP::Hep3Vector pos(m_radius, 0, 0);
-    pos.rotateZ(phi);
+    GeoTrf::Vector3D pos(m_radius, 0, 0);
+    pos = GeoTrf::RotateZ3D(phi)*pos;
     //Because the ski envelope center is not positioned at the rotation axis for the ski
     //we must first apply the inverse of refPointTransform() of the ski.
-    //---HepGeom::Transform3D trans(HepGeom::Transform3D(rot,pos)*m_ski->getRefPointTransform()
+    //---GeoTrf::Transform3D trans(GeoTrf::Transform3D(rot,pos)*m_ski->getRefPointTransform()
     //--- ->getTransform().inverse());
-    HepGeom::Transform3D trans(HepGeom::Transform3D(rot,pos));
+    GeoTrf::Transform3D trans = GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rot;
     activeLayer->add(new GeoAlignableTransform(trans));
     activeLayer->add(new GeoNameTag(name.str()));
     activeLayer->add(new GeoIdentifierTag(iSki));
@@ -198,9 +196,9 @@ void SCT_Layer::activeEnvelopeExtent(double & rmin, double & rmax){
   double thickness = 0.5*m_ski->thickness();
   double width = 0.5*m_ski->width();
   double tilt = std::abs(m_tilt);
-  double width_rot = width * cos(tilt/CLHEP::radian) - thickness * sin(tilt/CLHEP::radian);
+  double width_rot = width * cos(tilt/GeoModelKernelUnits::radian) - thickness * sin(tilt/GeoModelKernelUnits::radian);
   
-  double thickness_rot = width * sin(tilt/CLHEP::radian) + thickness * cos(tilt/CLHEP::radian);
+  double thickness_rot = width * sin(tilt/GeoModelKernelUnits::radian) + thickness * cos(tilt/GeoModelKernelUnits::radian);
 
   rmax = sqrt(sqr(m_radius + thickness_rot) + sqr(width_rot)); 
   rmin = sqrt(sqr(m_radius - thickness_rot) + sqr(width_rot));
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_MaterialManager.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_MaterialManager.cxx
index a0329a676201e8c45a2fded5a210a105c8430d1d..ded6eb732035bf5662d89f2ab273a4bbf8c92221 100755
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_MaterialManager.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_MaterialManager.cxx
@@ -35,7 +35,7 @@ SCT_MaterialManager::loadMaterials()
   //const GeoMaterial *kapton   = getMaterial("std::Kapton"); // 30th Aug 2005 D.Naito added.
 
   // CuKapton for Low Mass Tapes
-  //GeoMaterial * matCuKapton   = new GeoMaterial("sct::CuKapton",2.94*CLHEP::gram/CLHEP::cm3);
+  //GeoMaterial * matCuKapton   = new GeoMaterial("sct::CuKapton",2.94*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   //matCuKapton->add(const_cast<GeoElement*>(copper),  0.6142);
   //matCuKapton->add(const_cast<GeoMaterial*>(kapton), 0.3858);
   //addMaterial(matCuKapton);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Module.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Module.cxx
index 73d5b0d93591acead687ab75cd7a38d529f8cda0..e08c43799a20287c925bb88b241d2751befd6a36 100755
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Module.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Module.cxx
@@ -25,10 +25,10 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <cmath>
 
@@ -83,13 +83,13 @@ const GeoLogVol* SCT_Module::preBuild(){
     // Sensor only if placing sensors directly on stave
     m_width   = m_innerSide->width();
     m_length  = m_innerSide->length();
-    m_thickness = m_innerSide->thickness() + 0.01*CLHEP::mm;// Not really necessary but doesn't hurt
+    m_thickness = m_innerSide->thickness() + 0.01*GeoModelKernelUnits::mm;// Not really necessary but doesn't hurt
   } else if(m_doubleSided){
     sideWidth  = std::max(m_innerSide->width(), m_outerSide->width());
     sideLength = std::max(m_innerSide->length(), m_outerSide->length());
-    m_width    = std::max(sideWidth*cos(half_stereo/CLHEP::radian) + sideLength*sin(half_stereo/CLHEP::radian),
+    m_width    = std::max(sideWidth*cos(half_stereo/GeoModelKernelUnits::radian) + sideLength*sin(half_stereo/GeoModelKernelUnits::radian),
 			  m_baseBoard->width());
-    m_length   = std::max(sideWidth*sin(half_stereo/CLHEP::radian) + sideLength*cos(half_stereo/CLHEP::radian), 
+    m_length   = std::max(sideWidth*sin(half_stereo/GeoModelKernelUnits::radian) + sideLength*cos(half_stereo/GeoModelKernelUnits::radian), 
 			  m_baseBoard->length());
     double interSidesGap = std::max(m_baseBoard->thickness(), m_interSidesGap);
     m_thickness = m_innerSide->thickness() + m_outerSide->thickness() + interSidesGap + 0.01;//0.01mm safety necessary
@@ -122,12 +122,12 @@ GeoVPhysVol* SCT_Module::build(SCT_Identifier id) const{
     }
     GeoFullPhysVol* module = new GeoFullPhysVol(m_logVolume); 
     //first, calculate the module components position
-    HepGeom::Transform3D innerSidePos, baseBoardPos, outerSidePos;
+    GeoTrf::Transform3D innerSidePos(GeoTrf::Transform3D::Identity());
+    GeoTrf::Transform3D baseBoardPos(GeoTrf::Transform3D::Identity());
+    GeoTrf::Transform3D outerSidePos(GeoTrf::Transform3D::Identity());
     if (m_doubleSided){
       //inner side position (shift this side towards the intreaction point, ie X negative)
-      CLHEP::HepRotation inner_Rot;
-      inner_Rot.rotateZ(180*CLHEP::deg);
-      inner_Rot.rotateX(-0.5*m_stereoAngle);
+      GeoTrf::Transform3D inner_Rot = GeoTrf::RotateX3D(-0.5*m_stereoAngle)*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg);
       double interSidesGap = std::max(m_baseBoard->thickness(), m_interSidesGap);
       double Xpos = -0.5*(interSidesGap + m_innerSide->thickness());
       //std::cerr<<"inner Xpos "<<Xpos<<" thickness "<<m_innerSide->thickness()<<std::endl;
@@ -139,13 +139,11 @@ GeoVPhysVol* SCT_Module::build(SCT_Identifier id) const{
 		    <<". exit athena!"<<std::endl;
 	      exit(1);
       }
-      CLHEP::Hep3Vector  inner_Xpos = CLHEP::Hep3Vector(Xpos, 0., 0.);
-      innerSidePos = HepGeom::Transform3D(inner_Rot, inner_Xpos);
+      GeoTrf::Translation3D  inner_Xpos(Xpos, 0., 0.);
+      innerSidePos = GeoTrf::Transform3D(inner_Xpos*inner_Rot);
       //basebord position (no shift)
-      baseBoardPos = HepGeom::Translate3D(CLHEP::Hep3Vector( 0.0, 0.0, 0.0));
       //outer side (shift towards X positive)
-      CLHEP::HepRotation outer_Rot;
-      outer_Rot.rotateX(+0.5*m_stereoAngle);
+      GeoTrf::RotateX3D outer_Rot(+0.5*m_stereoAngle);
       Xpos = 0.5*(interSidesGap + m_outerSide->thickness());
       //std::cerr<<"inner Xpos "<<Xpos<<" thickness "<<m_outerSide->thickness()<<std::endl;
       //protection
@@ -156,13 +154,11 @@ GeoVPhysVol* SCT_Module::build(SCT_Identifier id) const{
 		    <<". exit athena!"<<std::endl;
 	      exit(1);
       }
-      CLHEP::Hep3Vector outer_Xpos = CLHEP::Hep3Vector(Xpos, 0., 0.);
-      outerSidePos = HepGeom::Transform3D(outer_Rot, outer_Xpos);
+      GeoTrf::Translation3D outer_Xpos(Xpos, 0., 0.);
+      outerSidePos = GeoTrf::Transform3D(outer_Xpos*outer_Rot);
     } else {
       //inner side position (shift this side towards the intreaction point, ie X negative)
-      CLHEP::HepRotation inner_Rot;
-      inner_Rot.rotateZ(180*CLHEP::deg);
-      inner_Rot.rotateX(0);//don't rotate (only one side)
+      GeoTrf::RotateZ3D inner_Rot(180*GeoModelKernelUnits::deg);
       double Xpos = -0.5*m_baseBoard->thickness();
       //protection
       if(fabs(Xpos)+0.5*m_innerSide->thickness() > 0.5*m_thickness){
@@ -172,8 +168,8 @@ GeoVPhysVol* SCT_Module::build(SCT_Identifier id) const{
 		    <<". exit athena!"<<std::endl;
 	     exit(1);
       }
-      CLHEP::Hep3Vector  inner_Xpos = CLHEP::Hep3Vector(Xpos, 0., 0.);
-      innerSidePos = HepGeom::Transform3D(inner_Rot, inner_Xpos);
+      GeoTrf::Translation3D  inner_Xpos(Xpos, 0., 0.);
+      innerSidePos = GeoTrf::Transform3D(inner_Xpos*inner_Rot);
       //basebord position (shift towards X positive)
       Xpos = 0.5*m_innerSide->thickness();
       //protection!
@@ -184,7 +180,7 @@ GeoVPhysVol* SCT_Module::build(SCT_Identifier id) const{
 		      <<". exit athena!"<<std::endl;
 	      exit(1);
       }
-      baseBoardPos = HepGeom::Translate3D(CLHEP::Hep3Vector(Xpos, 0.0, 0.0));
+      baseBoardPos = GeoTrf::Translate3D(Xpos, 0.0, 0.0);
     }
     
     //Add physical innerside to the module
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_OuterSide.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_OuterSide.cxx
index d103326b333d4c8828e44e61fce9718e3c63d257..bf6c162a238bb4d27b4bb71a94ad1b0fad717f87 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_OuterSide.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_OuterSide.cxx
@@ -22,9 +22,9 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h" 
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+ 
 
 #include <cmath>
 
@@ -78,7 +78,7 @@ const GeoLogVol* SCT_OuterSide::preBuild(){
   //positions with respect to the center of the outer side box
   double outerSensorXPos = 0;
   //Position sensor
-  m_sensorPos = new GeoTransform(HepGeom::TranslateX3D(outerSensorXPos));
+  m_sensorPos = new GeoTransform(GeoTrf::TranslateX3D(outerSensorXPos));
   m_sensorPos->ref();
 
   return OuterSideLogV;
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Sensor.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Sensor.cxx
index 49b6f575779eb1014f16d53f46e2498f1a57fa5b..eeeec98686f7792a56644136a360dc14176fed4c 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Sensor.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Sensor.cxx
@@ -23,7 +23,7 @@
 #include "InDetReadoutGeometry/SiCommonItems.h"
 
 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 using namespace InDetDD;
 
@@ -78,7 +78,7 @@ SCT_Sensor::preBuild()
     
     // Build the subsensor logical volume (same for all segments).
     // We reduce the size by a small amount to avoid touching volumes. 
-    double epsilon = 1e-7*CLHEP::mm;
+    double epsilon = 1e-7*GeoModelKernelUnits::mm;
     const GeoBox * subSensorShape = new GeoBox(0.5*m_thickness-epsilon, 0.5*m_width-epsilon, 0.5*m_subSensorLength-epsilon);
     m_subSensorLog = new GeoLogVol(getName(), subSensorShape, m_material);  
     m_subSensorLog->ref();
@@ -153,7 +153,7 @@ GeoVPhysVol* SCT_Sensor::build(SCT_Identifier id) const{
     if (m_numSegments > 1) {
       double zpos = (iSegment - 0.5*(m_numSegments-1)) * m_subSensorLength;
       subSensor = new GeoFullPhysVol(m_subSensorLog);
-      GeoTransform * trans = new GeoTransform(HepGeom::TranslateZ3D(zpos));
+      GeoTransform * trans = new GeoTransform(GeoTrf::TranslateZ3D(zpos));
       GeoIdentifierTag * idTag = new GeoIdentifierTag(1200+iSegment);
       GeoNameTag * nameTag = new GeoNameTag("SubSensor#"+intToString(iSegment));
       sensor->add(trans);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Ski.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Ski.cxx
index 5b4cb330ebfee24da3d8d204e7725ce2eb9915fc..d814453a02f24202d5999dde1d6400c6a5229a65 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Ski.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_Ski.cxx
@@ -24,10 +24,10 @@
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Units/SystemOfUnits.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Vector/Rotation.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+
 
 #include <sstream>
 #include <cmath>
@@ -172,9 +172,7 @@ GeoVPhysVol* SCT_Ski::build(SCT_Identifier id) const{
 
    if ((m_staveLayout==2) && m_staveSupport_pos && m_staveSupport_pos->getVolume()) {
     // centered.
-    CLHEP::Hep3Vector pos_pos(0.0, 0.0, (m_length*0.5 - m_cylInnerZMin - m_safety)*0.5 + m_cylInnerZMin);
-    CLHEP::HepRotation pos_rot;
-    HepGeom::Transform3D modulePos_pos = HepGeom::Transform3D(pos_rot, pos_pos);
+    GeoTrf::Translate3D modulePos_pos(0.0, 0.0, (m_length*0.5 - m_cylInnerZMin - m_safety)*0.5 + m_cylInnerZMin);
     GeoTransform* supportTransform_pos = new GeoTransform(modulePos_pos);
     ski->add(supportTransform_pos);
     ski->add(m_staveSupport_pos->getVolume());
@@ -182,9 +180,7 @@ GeoVPhysVol* SCT_Ski::build(SCT_Identifier id) const{
   
   if ((m_staveLayout==2) && m_staveSupport_neg && m_staveSupport_neg->getVolume()) {
     // centered.
-     CLHEP::Hep3Vector neg_pos(0.0, 0.0,-(m_length*0.5 - m_cylInnerZMin - m_safety)*0.5 - m_cylInnerZMin);
-    CLHEP::HepRotation neg_rot;
-    HepGeom::Transform3D modulePos_neg = HepGeom::Transform3D(neg_rot, neg_pos);
+    GeoTrf::Translate3D modulePos_neg(0.0, 0.0,-(m_length*0.5 - m_cylInnerZMin - m_safety)*0.5 - m_cylInnerZMin);
     GeoTransform* supportTransform_neg = new GeoTransform(modulePos_neg);
     ski->add(supportTransform_neg);
     ski->add(m_staveSupport_neg->getVolume());
@@ -221,12 +217,11 @@ SCT_Ski::placeModule(GeoPhysVol * ski, SCT_Identifier id, int iModule, int side,
     //Don't exit as this breaks some existing geometries.
     //exit(1);
   }
-  CLHEP::HepRotation rot;
+  GeoTrf::Transform3D rot = GeoTrf::RotateX3D(stereoAngle);
   //the module is rotated, around X axis, one way or the other (u or v)
-  if (flip) rot.rotateZ(180*CLHEP::deg);
-  rot.rotateX(stereoAngle);
-  CLHEP::Hep3Vector pos(xModulePos, 0.0, zModulePos);
-  HepGeom::Transform3D modulePos = HepGeom::Transform3D(rot, pos);
+  if (flip) rot = rot * GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg);
+  GeoTrf::Translation3D pos(xModulePos, 0.0, zModulePos);
+  GeoTrf::Transform3D modulePos = GeoTrf::Transform3D(pos*rot);
 
   //Add modules. 
   GeoAlignableTransform* moduleTransform = new GeoAlignableTransform(modulePos);
diff --git a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_StaveSupport.cxx b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_StaveSupport.cxx
index 94968f717b163f0ea3c6254cfe32292956ac6789..52b9475c4e56f6cb1de238754bade81a06214edb 100644
--- a/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_StaveSupport.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_SLHC_GeoModel/src/SCT_StaveSupport.cxx
@@ -12,7 +12,7 @@
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 namespace InDetDDSLHC {
 
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/CMakeLists.txt b/InnerDetector/InDetDetDescr/TRT_GeoModel/CMakeLists.txt
index 89c041c9aacbf554ed3335ce2120f5ff793e7b62..bb2815df1d421d5bdb167682ee4986afaaae4763 100644
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/CMakeLists.txt
@@ -20,7 +20,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Database/AthenaPOOL/AthenaPoolUtilities
                           DetectorDescription/DetDescrCond/DetDescrConditions
 			  DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
+			  DetectorDescription/GeoPrimitives
                           DetectorDescription/GeometryDBSvc
                           DetectorDescription/IdDictDetDescr
                           InnerDetector/InDetConditions/TRT_ConditionsData
@@ -28,13 +28,14 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( TRT_GeoModel
 		     src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel TRT_ConditionsServicesLib InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions GeoModelKernel IdDictDetDescr TRT_ConditionsData InDetIdentifier )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel TRT_ConditionsServicesLib InDetGeoModelUtils InDetReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions IdDictDetDescr TRT_ConditionsData InDetIdentifier )
 
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.cxx b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.cxx
index fd18bacfeca231fe612d23eae8260500a7012d30..40e90d059c8af5acf6b1ae52b8577ab565ef4aef 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.cxx
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.cxx
@@ -4,7 +4,7 @@
 
 #include "ArrayFunction.h"
 
-namespace Genfun {
+namespace GeoGenfun {
 
 FUNCTION_OBJECT_IMP(ArrayFunction)
   
@@ -17,7 +17,7 @@ ArrayFunction::~ArrayFunction(){}
   
 // Copy constructor
 ArrayFunction::ArrayFunction(const ArrayFunction &right):
-  Genfun::AbsFunction(), m_values(right.m_values) {}
+  GeoGenfun::AbsFunction(), m_values(right.m_values) {}
   
   // Retrieve function value
 double ArrayFunction::operator ()(double argument) const {
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.h b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.h
index a0f6f8cbd1b4910cafdc8c1533ca165bad131c45..3d556b84d572712bf569360a37d36dd0c49fa8ca 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.h
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/ArrayFunction.h
@@ -10,9 +10,9 @@
 //-------------------------------------------------------//
 
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
 #include <vector>
-namespace Genfun {
+namespace GeoGenfun {
 class ArrayFunction : public AbsFunction  {
   
   FUNCTION_OBJECT_DEF(ArrayFunction)
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.cxx b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.cxx
index 06181d15fe1e6490c45521ec3e5b5d119b3d56d3..7cb171c6813eccba3df79ff3eb1f452922a05503 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.cxx
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.cxx
@@ -2,6 +2,7 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TRTDetectorFactory_Full.h"
 #include "TRT_DetDescrDB_ParameterInterface.h"
 
@@ -39,13 +40,13 @@
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoElement.h"
 #include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/Vector/TwoVector.h"
-#include "CLHEP/Vector/ThreeVector.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 
 #include "AthenaPoolUtilities/CondAttrListCollection.h"
 #include "DetDescrConditions/AlignableTransformContainer.h"
@@ -53,13 +54,33 @@
 
 #include <vector>
 #include <sstream>
+#include <cmath>
 
-//TK: get rid of these and use Genfun:: and GeoXF:: instead
-using namespace Genfun;
+//TK: get rid of these and use GeoGenfun:: and GeoXF:: instead
+using namespace GeoGenfun;
 using namespace GeoXF;
 
+// Helper functions. Temporarily here (hopefully)
+void rotate(double angler, GeoTrf::Vector2D& vector)
+{
+  double s1 = std::sin(angler);
+  double c = std::cos(angler);
+  double xx = vector.x();
+  double yy = vector.y();
+  vector.x() = c*xx - s1*yy;
+  vector.y() = s1*xx + c*yy;
+}
 
+double angle(const GeoTrf::Vector2D& a, const GeoTrf::Vector2D& b)
+{
+  double ptot2 = a.mag2()*b.mag2();
+  return ptot2 <= 0.0 ? 0.0 : std::acos(a.dot(b)/std::sqrt(ptot2));
+}
 
+double magn(GeoTrf::Vector2D& vector)
+{
+  return std::sqrt(vector.x()*vector.x() + vector.y()*vector.y());
+}
 /////////////////////////////////// Constructor //////////////////////////////////
 //
 TRTDetectorFactory_Full::TRTDetectorFactory_Full(const InDetDD::AthenaComps * athenaComps,
@@ -252,7 +273,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
   bool endcapCPlusPresent    = m_data->partPresent(endcapA_WheelC_Label);
   bool endcapCMinusPresent   = m_data->partPresent(endcapC_WheelC_Label);
   // Overall transform (probably will always be identifty - but just in case)
-  HepGeom::Transform3D trtTransform =  m_data->partTransform("TRT");
+  GeoTrf::Transform3D trtTransform =  m_data->partTransform("TRT");
 
   // For old configurations we need to set which parts are  present.
   //
@@ -379,7 +400,6 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
   //---------------------- Top level volumes ------------------------//
 
-  // This is used by HepVis.
   GeoNameTag * topLevelNameTag = new GeoNameTag("TRT");
   topLevelNameTag->ref(); //(sar) Set this up for deletion if it never gets added
   // The top level volumes
@@ -432,7 +452,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 						       m_data->outerRadiusOfEndCapVolumeAB,
 						       m_data->lengthOfEndCapVolumeAB/2.);
     const GeoShape & sEndCapVolumeAB
-      = ( *sEndCapVolumeAB_unshifted << HepGeom::TranslateZ3D(m_data->positionOfEndCapVolumeAB));
+      = ( *sEndCapVolumeAB_unshifted << GeoTrf::TranslateZ3D(m_data->positionOfEndCapVolumeAB));
 
     lEndCapVolumeAB = new GeoLogVol("TRTEndcapWheelAB", &sEndCapVolumeAB, m_materialManager->getMaterial("trt::CO2"));
   }
@@ -456,7 +476,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     pEndCapABMinus = new GeoFullPhysVol(lEndCapVolumeAB);
 
     GeoAlignableTransform * transform =
-      new GeoAlignableTransform(trtTransform * m_data->partTransform(endcapC_WheelAB_Label) * HepGeom::RotateY3D(180*CLHEP::deg));
+      new GeoAlignableTransform(trtTransform * m_data->partTransform(endcapC_WheelAB_Label) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
 
     world->add(topLevelNameTag);
     world->add(transform);
@@ -476,7 +496,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 						      m_data->outerRadiusOfEndCapVolumeC,
 						      m_data->lengthOfEndCapVolumeC/2.);
     const GeoShape & sEndCapVolumeC
-      = ( *sEndCapVolumeC_unshifted << HepGeom::TranslateZ3D(m_data->positionOfEndCapVolumeC));
+      = ( *sEndCapVolumeC_unshifted << GeoTrf::TranslateZ3D(m_data->positionOfEndCapVolumeC));
 
     lEndCapVolumeC = new GeoLogVol("TRTEndcapWheelC", &sEndCapVolumeC, m_materialManager->getMaterial("trt::CO2"));
   }
@@ -498,7 +518,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     pEndCapCMinus = new GeoFullPhysVol(lEndCapVolumeC);
 
     GeoAlignableTransform * transform =
-      new GeoAlignableTransform(trtTransform * m_data->partTransform(endcapC_WheelC_Label) * HepGeom::RotateY3D(180*CLHEP::deg));
+      new GeoAlignableTransform(trtTransform * m_data->partTransform(endcapC_WheelC_Label) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
 
     world->add(topLevelNameTag);
     world->add(transform);
@@ -611,8 +631,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       GeoPhysVol *pEndFlangeRegion = new GeoPhysVol(lEndFlangeRegion);
 
       double zPosEndFlange = (m_data->barFlangeZMin+m_data->barFlangeZMax)/2;
-      GeoTransform *xfEndFlangeRegionPlus  = new GeoTransform(HepGeom::TranslateZ3D(zPosEndFlange));
-      GeoTransform *xfEndFlangeRegionMinus = new GeoTransform(HepGeom::TranslateZ3D(-zPosEndFlange));
+      GeoTransform *xfEndFlangeRegionPlus  = new GeoTransform(GeoTrf::TranslateZ3D(zPosEndFlange));
+      GeoTransform *xfEndFlangeRegionMinus = new GeoTransform(GeoTrf::TranslateZ3D(-zPosEndFlange));
 
       pBarrelVol->add(xfEndFlangeRegionPlus);
       pBarrelVol->add(pEndFlangeRegion);
@@ -634,8 +654,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       GeoPhysVol *pServices = new GeoPhysVol(lServices);
 
       double zPosServices = (m_data->barServicesZMin+m_data->barServicesZMax)/2;
-      GeoTransform *xfServicesPlus = new GeoTransform(HepGeom::TranslateZ3D(zPosServices));
-      GeoTransform *xfServicesMinus = new GeoTransform(HepGeom::TranslateZ3D(-zPosServices));
+      GeoTransform *xfServicesPlus = new GeoTransform(GeoTrf::TranslateZ3D(zPosServices));
+      GeoTransform *xfServicesMinus = new GeoTransform(GeoTrf::TranslateZ3D(-zPosServices));
 
       pBarrelVol->add(xfServicesPlus);
       pBarrelVol->add(pServices);
@@ -701,15 +721,15 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       // The shell volume:
       std::ostringstream shellstream;
       shellstream << "Shell" << iABC;
-      CLHEP::Hep2Vector shellCorner1(m_data->shellCornerXPosition[iABC][0],m_data->shellCornerYPosition[iABC][0]);
-      CLHEP::Hep2Vector shellCorner2(m_data->shellCornerXPosition[iABC][1],m_data->shellCornerYPosition[iABC][1]);
-      CLHEP::Hep2Vector shellCorner3(m_data->shellCornerXPosition[iABC][2],m_data->shellCornerYPosition[iABC][2]);
-      CLHEP::Hep2Vector shellCorner4(m_data->shellCornerXPosition[iABC][3],m_data->shellCornerYPosition[iABC][3]);
-      HepGeom::Transform3D shellPosition;
-      if ( shellCorner1 <= 0 ) { msg(MSG::DEBUG) << "shellCorner1 is <= 0 (" << shellCorner1 << ")" << endmsg; }
-      if ( shellCorner2 <= 0 ) { msg(MSG::DEBUG) << "shellCorner2 is <= 0 (" << shellCorner2 << ")" << endmsg; }
-      if ( shellCorner3 <= 0 ) { msg(MSG::DEBUG) << "shellCorner3 is <= 0 (" << shellCorner3 << ")" << endmsg; }
-      if ( shellCorner4 <= 0 ) { msg(MSG::DEBUG) << "shellCorner4 is <= 0 (" << shellCorner4 << ")" << endmsg; }
+      GeoTrf::Vector2D shellCorner1(m_data->shellCornerXPosition[iABC][0],m_data->shellCornerYPosition[iABC][0]);
+      GeoTrf::Vector2D shellCorner2(m_data->shellCornerXPosition[iABC][1],m_data->shellCornerYPosition[iABC][1]);
+      GeoTrf::Vector2D shellCorner3(m_data->shellCornerXPosition[iABC][2],m_data->shellCornerYPosition[iABC][2]);
+      GeoTrf::Vector2D shellCorner4(m_data->shellCornerXPosition[iABC][3],m_data->shellCornerYPosition[iABC][3]);
+      GeoTrf::Transform3D shellPosition(GeoTrf::Transform3D::Identity());
+      if ( shellCorner1.y() <= 0 ) { msg(MSG::DEBUG) << "shellCorner1 is <= 0 (" << shellCorner1 << ")" << endmsg; }
+      if ( shellCorner2.y() <= 0 ) { msg(MSG::DEBUG) << "shellCorner2 is <= 0 (" << shellCorner2 << ")" << endmsg; }
+      if ( shellCorner3.y() <= 0 ) { msg(MSG::DEBUG) << "shellCorner3 is <= 0 (" << shellCorner3 << ")" << endmsg; }
+      if ( shellCorner4.y() <= 0 ) { msg(MSG::DEBUG) << "shellCorner4 is <= 0 (" << shellCorner4 << ")" << endmsg; }
       const GeoShape * sShell = makeModule(m_data->lengthOfBarrelVolume,
 					   shellCorner1,shellCorner2,shellCorner3,shellCorner4,shellPosition);
 
@@ -728,7 +748,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       // Some shared stuff for all of the modules within a layer:
 
       // Make a Radiator
-      HepGeom::Transform3D radAbsolutePosition;
+      GeoTrf::Transform3D radAbsolutePosition(GeoTrf::Transform3D::Identity());
       const GeoShape * sRad = makeModule(m_data->lengthOfBarrelVolume,
 					 shellCorner1,shellCorner2,shellCorner3,shellCorner4,
 					 radAbsolutePosition,m_data->barrelThicknessOfModuleWalls);
@@ -752,9 +772,9 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       // Place the cooling tubes in the Radiator
 
       GeoTransform  *xCool1 = new GeoTransform(shellPosition.inverse()
-					       *HepGeom::Translate3D(m_data->barrelXOfCoolingTube[iABC][0],m_data->barrelYOfCoolingTube[iABC][0],0));
+					       *GeoTrf::Translate3D(m_data->barrelXOfCoolingTube[iABC][0],m_data->barrelYOfCoolingTube[iABC][0],0));
       GeoTransform  *xCool2 = new GeoTransform(shellPosition.inverse()
-					       *HepGeom::Translate3D(m_data->barrelXOfCoolingTube[iABC][1],m_data->barrelYOfCoolingTube[iABC][1],0));
+					       *GeoTrf::Translate3D(m_data->barrelXOfCoolingTube[iABC][1],m_data->barrelYOfCoolingTube[iABC][1],0));
 
       pRad->add(xCool1);
       pRad->add(pCoolingTube);
@@ -787,8 +807,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       }
     
       // Generators:
-      HepGeom::TranslateX3D Xx(1.0);
-      HepGeom::TranslateY3D Xy(1.0);
+      GeoTrf::TranslateX3D Xx(1.0);
+      GeoTrf::TranslateY3D Xy(1.0);
 
       GENFUNCTION  fx = ArrayFunction(&m_data->strawXPosition[iABC][0+nStrawsWithLargeDeadRegion],
 				      &m_data->strawXPosition[iABC][0]+m_data->barrelNumberOfStrawsInModule[iABC]);
@@ -814,24 +834,26 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       //First get the global and local positions of the two alignment straws:
       //USE HEP2VECTORS!!!
 
-      CLHEP::Hep3Vector Align1Global(m_data->barrelXOfFirstGlobalAlignmentStraw[iABC],  m_data->barrelYOfFirstGlobalAlignmentStraw[iABC], 0);
-      CLHEP::Hep3Vector Align2Global(m_data->barrelXOfSecondGlobalAlignmentStraw[iABC], m_data->barrelYOfSecondGlobalAlignmentStraw[iABC],0);
-      CLHEP::Hep3Vector Align1Local(m_data->strawXPosition[iABC][0],m_data->strawYPosition[iABC][0],0);
-      CLHEP::Hep3Vector Align2Local(m_data->strawXPosition[iABC][m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],
-			     m_data->strawYPosition[iABC][m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],0);
+      GeoTrf::Vector3D Align1Global(m_data->barrelXOfFirstGlobalAlignmentStraw[iABC],  m_data->barrelYOfFirstGlobalAlignmentStraw[iABC], 0);
+      GeoTrf::Vector3D Align2Global(m_data->barrelXOfSecondGlobalAlignmentStraw[iABC], m_data->barrelYOfSecondGlobalAlignmentStraw[iABC],0);
+      GeoTrf::Vector3D Align1Local(m_data->strawXPosition[iABC][0],m_data->strawYPosition[iABC][0],0);
+      GeoTrf::Vector3D Align2Local(m_data->strawXPosition[iABC][m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],
+				   m_data->strawYPosition[iABC][m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],0);
 
       //We need to make first a translation which puts the first alignment straw into place:
 
       //And we need to make a rotation which puts the second one on its position:
 
-      CLHEP::Hep2Vector local12     = CLHEP::Hep2Vector( Align2Local  - Align1Local  );
-      CLHEP::Hep2Vector global12    = CLHEP::Hep2Vector( Align2Global - Align1Global );
+      GeoTrf::Vector2D local12((Align2Local - Align1Local).x(),(Align2Local  - Align1Local).y());
+      GeoTrf::Vector2D global12((Align2Global - Align1Global).x(),(Align2Global - Align1Global).y());
       double zrotang = global12.phi()-local12.phi();
 
-      //Here we combine these two into a HepGeom::Transform3D:
+      //Here we combine these two into a GeoTrf::Transform3D:
+
+      GeoTrf::Transform3D absStrawXForm = GeoTrf::Translate3D(Align1Global.x(),Align1Global.y(),Align1Global.z())
+	*GeoTrf::RotateZ3D( zrotang )
+	*GeoTrf::Translate3D(-Align1Local.x(),-Align1Local.y(),-Align1Local.z());
 
-      HepGeom::Transform3D absStrawXForm = HepGeom::Translate3D(Align1Global)*HepGeom::RotateZ3D( zrotang )*HepGeom::Translate3D((-Align1Local));
-    
       //
       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -884,22 +906,22 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       if (m_doKrypton) pRadKR->add(serialTransformerKR);
 
       // Adds one straw from each layer (reformulate..) (should be done via m_data from database)
-      double oldx=-999*CLHEP::cm, oldz=-999*CLHEP::cm;
+      double oldx=-999*GeoModelKernelUnits::cm, oldz=-999*GeoModelKernelUnits::cm;
       unsigned int c=0;
       size_t iLayer=0;
       while (c< m_data->barrelNumberOfStrawsInModule[iABC] ) {
 
-	HepGeom::Point3D<double> p;
+	GeoTrf::Vector3D p(0,0,0);
 	if (iABC==0)
-	  p = tx2All(c)*HepGeom::Point3D<double>(0,0,0);
+	  p = tx2All(c)*p;
 	else
-	  p = tx2(c)*HepGeom::Point3D<double>(0,0,0);
+	  p = tx2(c)*p;
 
 	double x = p.x();
 	double z = p.z();
 
 	//TK: use arrays!! update this...
-	if (sqrt((x-oldx)*(x-oldx)+ (z-oldz)*(z-oldz))> 5*CLHEP::cm) {
+	if (sqrt((x-oldx)*(x-oldx)+ (z-oldz)*(z-oldz))> 5*GeoModelKernelUnits::cm) {
 	  iLayer++;
 	  bDescriptor.push_back(new InDetDD::TRT_BarrelDescriptor());
 	  bDescriptor.back()->setStrawTransformField(m_detectorManager->barrelTransformField(iABC),c);
@@ -937,7 +959,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       // Now create m_data->nBarrelModulesUsed unique modules within each layer.
       pBarrelVol->add(new GeoSerialIdentifier(0));
       for (size_t iMod = 0; iMod<m_data->nBarrelModulesUsed;iMod++) {
-	double delta = iMod*360*CLHEP::deg/m_data->nBarrelModules;
+	double delta = iMod*360*GeoModelKernelUnits::deg/m_data->nBarrelModules;
 
          
 
@@ -945,8 +967,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	GeoFullPhysVol * pShell = new GeoFullPhysVol(lShell);
 
 	// This is where the shell is pushed out to its place
-	//GeoTransform * xfx1 = new GeoTransform(HepGeom::RotateZ3D(delta)*shellPosition);
-	GeoAlignableTransform * xfx1 = new GeoAlignableTransform(HepGeom::RotateZ3D(delta)*shellPosition);
+	//GeoTransform * xfx1 = new GeoTransform(GeoTrf::RotateZ3D(delta)*shellPosition);
+	GeoAlignableTransform * xfx1 = new GeoAlignableTransform(GeoTrf::RotateZ3D(delta)*shellPosition);
 	pBarrelVol->add(xfx1);
 	pBarrelVol->add(pShell);
 
@@ -1194,7 +1216,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     GeoLogVol* lWheelA  = new GeoLogVol("WheelA", sWheelA,  m_materialManager->getMaterial("trt::CO2"));
 
     // This is the straw pitch.
-    double deltaPhiForStrawsA = 360.*CLHEP::deg/m_data->endcapNumberOfStrawsInStrawLayer_AWheels;
+    double deltaPhiForStrawsA = 360.*GeoModelKernelUnits::deg/m_data->endcapNumberOfStrawsInStrawLayer_AWheels;
 
 
     // In reality the positive and negative endcaps are built identical, both in 
@@ -1257,7 +1279,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		if (iiPlane % 4 == 0) {
 		  // Register alignable node
 		  int barrel_ec = (iiSide) ? -2 : +2;
-		  xfAlignableModule = new GeoAlignableTransform(HepGeom::Transform3D());
+		  xfAlignableModule = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
 		  Identifier idSubModule = idHelper->layer_id(barrel_ec, 0, iiWheel, iiPlane); 
 		  // We pass the parent volume as the local delta for this correction is the same as a local delta
 		  // on the transformation of the wheel.
@@ -1305,7 +1327,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
       }
 
 
-		xfPlane = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionA[iiPlane] - m_data->endCapLengthOfWheelsA/2)*HepGeom::RotateZ3D(phiPlane));
+		xfPlane = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionA[iiPlane] - m_data->endCapLengthOfWheelsA/2)*GeoTrf::RotateZ3D(phiPlane));
 
 		if (xfAlignableModule) pWheelA->add(xfAlignableModule);
 		pWheelA->add(xfPlane);
@@ -1330,12 +1352,12 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		      // it then gets rotated 180 around y axis 
 		      //   phi -> pi - phi
 		      if (iiSide) {
-			startPhi = CLHEP::pi - (startPhi + pDescriptor->strawPitch() * (pDescriptor->nStraws() - 1));
+			startPhi = GeoModelKernelUnits::pi - (startPhi + pDescriptor->strawPitch() * (pDescriptor->nStraws() - 1));
 		      }
 		      
 		      // Make sure its between -pi and pi.
-		      if (startPhi <= -CLHEP::pi) startPhi += 2*CLHEP::pi;
-		      if (startPhi > CLHEP::pi) startPhi -= 2*CLHEP::pi;
+		      if (startPhi <= -GeoModelKernelUnits::pi) startPhi += 2*GeoModelKernelUnits::pi;
+		      if (startPhi > GeoModelKernelUnits::pi) startPhi -= 2*GeoModelKernelUnits::pi;
 		      
 		      pDescriptor->startPhi() = startPhi;
 		      
@@ -1371,7 +1393,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	      {
 		if (counter % 4 == 1)
 		  {
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
 								  - m_data->outerRadiusOfStraw - m_data->endCapThinRadiatorThicknessA/2));
 		    pWheelA->add(xfRadiator);
 		    pWheelA->add(pThinRadiatorA);
@@ -1379,14 +1401,14 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 		if (counter % 4 == 0)
 		  {
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
 								  + m_data->outerRadiusOfStraw  + m_data->endCapThinRadiatorThicknessA/2));
 		    pWheelA->add(xfRadiator);
 		    pWheelA->add(pThinRadiatorA);
 		    continue;
 		  }
 
-		xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
+		xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionA[counter-1] - m_data->endCapLengthOfWheelsA/2
 							      + m_data->outerRadiusOfStraw  + m_data->endCapMainRadiatorThicknessA/2));
 		pWheelA->add(xfRadiator);
 		pWheelA->add(pMainRadiatorA);
@@ -1396,7 +1418,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	    pWheelA->add(pOuterSupportA);
 	  
 	    // Place wheel in the Endcap Volume
-	    GeoAlignableTransform * xfWheel = new GeoAlignableTransform( HepGeom::TranslateZ3D(WheelPlacerA) );
+	    GeoAlignableTransform * xfWheel = new GeoAlignableTransform( GeoTrf::TranslateZ3D(WheelPlacerA) );
 
 	    pCommonEndcapAB[iiSide]->add(xfWheel);
 	    pCommonEndcapAB[iiSide]->add(new GeoIdentifierTag(iiWheel));
@@ -1441,10 +1463,10 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 	      if(iiWheel<=firstIndexOfB-1) 
 		{ 
-		  xfFaradayFoilFront = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerA 
+		  xfFaradayFoilFront = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerA 
 									- m_data->endCapLengthOfWheelsA/2
 									- m_data->endCapFaradayFoilThickness/2.0));
-		  xfFaradayFoilBack = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerA 
+		  xfFaradayFoilBack = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerA 
 								       + m_data->endCapLengthOfWheelsA/2
 								       + m_data->endCapFaradayFoilThickness/2.0));
 		  pCommonEndcapAB[iiSide]->add(xfFaradayFoilFront);
@@ -1457,18 +1479,18 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
               // Ditto for Inner/OuterSupportGapper 
 	      if(iiWheel<firstIndexOfB-1) 
 		{
-		  xfHeatExchanger = new GeoTransform(HepGeom::TranslateZ3D( WheelPlacerA
+		  xfHeatExchanger = new GeoTransform(GeoTrf::TranslateZ3D( WheelPlacerA
 								      + m_data->endCapLengthOfWheelsA/2
 								      + m_data->endCapFaradayFoilThickness
 								      + m_data->endCapHeatExchangerThicknessA/2));
 		  pCommonEndcapAB[iiSide]->add(xfHeatExchanger);
 		  pCommonEndcapAB[iiSide]->add(pHeatExchangerA);
 
-		  xfInnerSupportGapperA = new GeoTransform(HepGeom::TranslateZ3D( WheelPlacerA
+		  xfInnerSupportGapperA = new GeoTransform(GeoTrf::TranslateZ3D( WheelPlacerA
 								      + m_data->endCapLengthOfWheelsA/2
 								      + m_data->endCapFaradayFoilThickness
 								      + m_data->endCapHeatExchangerThicknessA/2));
-		  xfOuterSupportGapperA = new GeoTransform(HepGeom::TranslateZ3D( WheelPlacerA
+		  xfOuterSupportGapperA = new GeoTransform(GeoTrf::TranslateZ3D( WheelPlacerA
 								      + m_data->endCapLengthOfWheelsA/2
 								      + m_data->endCapFaradayFoilThickness
 								      + m_data->endCapHeatExchangerThicknessA/2));
@@ -1545,7 +1567,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     GeoLogVol* lWheelB  = new GeoLogVol("WheelB", sWheelB,  m_materialManager->getMaterial("trt::CO2"));
 
     // This is the straw pitch.
-    double deltaPhiForStrawsB = 360.*CLHEP::deg/m_data->endcapNumberOfStrawsInStrawLayer_BWheels;
+    double deltaPhiForStrawsB = 360.*GeoModelKernelUnits::deg/m_data->endcapNumberOfStrawsInStrawLayer_BWheels;
 
     for(iiSide=0; iiSide<nSides; iiSide++) {
 
@@ -1573,7 +1595,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		if (iiPlane % 4 == 0) {
 		  // Register alignable node
 		  int barrel_ec = (iiSide) ? -2 : +2;
-		  xfAlignableModule = new GeoAlignableTransform(HepGeom::Transform3D());
+		  xfAlignableModule = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
 		  Identifier idSubModule = idHelper->layer_id(barrel_ec, 0, iiWheel, iiPlane); 
 		  // We pass the parent volume as the local delta for this correction is the same as a local delta
 		  // on the transformation of the wheel.
@@ -1622,8 +1644,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		  phiPlane +=  deltaPhiForStrawsB;
 		}
 
-		xfPlane = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionB[iiPlane]
-							   - m_data->endCapLengthOfWheelsB/2)*HepGeom::RotateZ3D(phiPlane));
+		xfPlane = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionB[iiPlane]
+							   - m_data->endCapLengthOfWheelsB/2)*GeoTrf::RotateZ3D(phiPlane));
 
 		if (xfAlignableModule) pWheelB->add(xfAlignableModule);
 		pWheelB->add(xfPlane);
@@ -1656,7 +1678,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		// Main radiators
 		if (counter % 4 != 0)
 		  {
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2
 								  + m_data->outerRadiusOfStraw  + m_data->endCapMainRadiatorThicknessB/2));
 		    pWheelB->add(xfRadiator);
 		    pWheelB->add(pMainRadiatorB);
@@ -1666,7 +1688,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		if (counter == 1 || counter == 8)
 		  {
 		    sign = counter == 1? -1 : 1;
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2 + sign*(m_data->outerRadiusOfStraw  + m_data->endCapThinRadiatorThicknessB/2)));
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2 + sign*(m_data->outerRadiusOfStraw  + m_data->endCapThinRadiatorThicknessB/2)));
 		    pWheelB->add(xfRadiator);
 		    pWheelB->add(pThinRadiatorB);
 		  }
@@ -1675,7 +1697,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		if (counter == 4 || counter == 5)
 		  {
 		    sign = counter == 4 ? 1 : -1;
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2 + sign*(m_data->outerRadiusOfStraw  + m_data->endCapMiddleRadiatorThicknessB/2)));
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionB[counter-1] - m_data->endCapLengthOfWheelsB/2 + sign*(m_data->outerRadiusOfStraw  + m_data->endCapMiddleRadiatorThicknessB/2)));
 		    pWheelB->add(xfRadiator);
 		    pWheelB->add(pMiddleRadiatorB);
 		  }
@@ -1686,7 +1708,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	    pWheelB->add(pOuterSupportB);
 
 	    // Place wheel in the Endcap Volume
-	    GeoAlignableTransform * xfWheel = new GeoAlignableTransform(HepGeom::TranslateZ3D( WheelPlacerB ));
+	    GeoAlignableTransform * xfWheel = new GeoAlignableTransform(GeoTrf::TranslateZ3D( WheelPlacerB ));
 
 
 	    pCommonEndcapAB[iiSide]->add(xfWheel);
@@ -1736,10 +1758,10 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	      // Place kapton foils on a wheel just like a sandwitch 
 	      if(iiWheel-firstIndexOfB<firstIndexOfC-firstIndexOfB)
 		    { 
-		  xfFaradayFoilFront = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerB 
+		  xfFaradayFoilFront = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerB 
 									- m_data->endCapLengthOfWheelsB/2
 									- m_data->endCapFaradayFoilThickness/2.0));
-		  xfFaradayFoilBack = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerB 
+		  xfFaradayFoilBack = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerB 
 								       + m_data->endCapLengthOfWheelsB/2
 								       + m_data->endCapFaradayFoilThickness/2.0));
 		  
@@ -1753,19 +1775,19 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
               // Ditto for Inner/OuterSupportGapper 
 	      if(iiWheel-firstIndexOfB<firstIndexOfC-firstIndexOfB-1) 
 	      {
-		xfHeatExchanger = new GeoTransform(HepGeom::TranslateZ3D( WheelPlacerB
+		xfHeatExchanger = new GeoTransform(GeoTrf::TranslateZ3D( WheelPlacerB
 								    + m_data->endCapLengthOfWheelsB/2
 								    + m_data->endCapFaradayFoilThickness
 								    + m_data->endCapHeatExchangerThicknessB/2));
 		pCommonEndcapAB[iiSide]->add(xfHeatExchanger);
 		pCommonEndcapAB[iiSide]->add(pHeatExchangerB);
 
-		xfInnerSupportGapperB = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerB
+		xfInnerSupportGapperB = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerB
 								    + m_data->endCapLengthOfWheelsB/2
 								    + m_data->endCapFaradayFoilThickness
 								    + m_data->endCapHeatExchangerThicknessB/2)); 
 
-		xfOuterSupportGapperB = new GeoTransform(HepGeom::TranslateZ3D(WheelPlacerB
+		xfOuterSupportGapperB = new GeoTransform(GeoTrf::TranslateZ3D(WheelPlacerB
 								    + m_data->endCapLengthOfWheelsB/2
 								    + m_data->endCapFaradayFoilThickness
 								    + m_data->endCapHeatExchangerThicknessB/2));
@@ -1801,10 +1823,10 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     GeoLogVol* lMbrane = new GeoLogVol("Membrane", sMbrane, m_materialManager->getMaterial("trt::EndCapMbrane"));
     GeoPhysVol* pMbrane = new GeoPhysVol(lMbrane);
     
-    GeoTransform *xfMbraneWheelA1 = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapZMinOfMbraneWheelA1 + m_data->endCapThicknessOfMbrane/2.0));
-    GeoTransform *xfMbraneWheelA2 = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapZMinOfMbraneWheelA2 + m_data->endCapThicknessOfMbrane/2.0));
-    GeoTransform *xfMbraneWheelB1 = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapZMinOfMbraneWheelB1 + m_data->endCapThicknessOfMbrane/2.0));
-    GeoTransform *xfMbraneWheelB2 = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapZMinOfMbraneWheelB2 + m_data->endCapThicknessOfMbrane/2.0));
+    GeoTransform *xfMbraneWheelA1 = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapZMinOfMbraneWheelA1 + m_data->endCapThicknessOfMbrane/2.0));
+    GeoTransform *xfMbraneWheelA2 = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapZMinOfMbraneWheelA2 + m_data->endCapThicknessOfMbrane/2.0));
+    GeoTransform *xfMbraneWheelB1 = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapZMinOfMbraneWheelB1 + m_data->endCapThicknessOfMbrane/2.0));
+    GeoTransform *xfMbraneWheelB2 = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapZMinOfMbraneWheelB2 + m_data->endCapThicknessOfMbrane/2.0));
     
     for(iiSide=0; iiSide<nSides; iiSide++) {   
       pCommonEndcapAB[iiSide]->add(xfMbraneWheelA1);     
@@ -1856,7 +1878,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
     GeoLogVol* lWheelC  = new GeoLogVol("WheelC", sWheelC,  m_materialManager->getMaterial("trt::CO2"));
 
     // This is the straw pitch.
-    double deltaPhiForStrawsC = 360.*CLHEP::deg/m_data->endcapNumberOfStrawsInStrawLayer_CWheels;
+    double deltaPhiForStrawsC = 360.*GeoModelKernelUnits::deg/m_data->endcapNumberOfStrawsInStrawLayer_CWheels;
   
     for(iiSide=0; iiSide<nSides; iiSide++) {
       // Wheel C
@@ -1879,8 +1901,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 		childPlane = pStrawPlaneC->clone();
 
-		xfPlane = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionC[iiPlane]
-							   - m_data->endCapLengthOfWheelsC/2)*HepGeom::RotateZ3D(phiPlane));
+		xfPlane = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionC[iiPlane]
+							   - m_data->endCapLengthOfWheelsC/2)*GeoTrf::RotateZ3D(phiPlane));
 		pWheelC->add(xfPlane);
 		pWheelC->add(new GeoIdentifierTag(iiPlane));
 		pWheelC->add(childPlane);
@@ -1901,12 +1923,12 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 		      // For negative endcap the startPhi is the last straw in the physical sector, it then gets
 		      // rotated 180 around y axis (phi -> pi - phi)
 		      if (iiSide) {
-			startPhi = CLHEP::pi - (startPhi + pDescriptor->strawPitch() * (pDescriptor->nStraws() - 1));
+			startPhi = GeoModelKernelUnits::pi - (startPhi + pDescriptor->strawPitch() * (pDescriptor->nStraws() - 1));
 		      }
 		      
 		      // Make sure its between -pi and pi.
-		      if (startPhi <= -CLHEP::pi) startPhi += 2*CLHEP::pi;
-		      if (startPhi > CLHEP::pi) startPhi -= 2*CLHEP::pi;
+		      if (startPhi <= -GeoModelKernelUnits::pi) startPhi += 2*GeoModelKernelUnits::pi;
+		      if (startPhi > GeoModelKernelUnits::pi) startPhi -= 2*GeoModelKernelUnits::pi;
 		      
 		 		      
 		      pDescriptor->startPhi() = startPhi;
@@ -1945,7 +1967,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 	      {
 		if (counter % 4 == 1)
 		  {
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
 								  - m_data->lengthOfDeadRegion  - m_data->endCapThinRadiatorThicknessC/2));
 		    pWheelC->add(xfRadiator);
 		    pWheelC->add(pThinRadiatorC);
@@ -1953,14 +1975,14 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 		if (counter % 4 == 0)
 		  {
-		    xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
+		    xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
 								  + m_data->outerRadiusOfStraw  + m_data->endCapThinRadiatorThicknessC/2));
 		    pWheelC->add(xfRadiator);
 		    pWheelC->add(pThinRadiatorC);
 		    continue;
 		  }
 
-		xfRadiator = new GeoTransform(HepGeom::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
+		xfRadiator = new GeoTransform(GeoTrf::TranslateZ3D(m_data->endCapLayerZPositionC[counter-1] - m_data->endCapLengthOfWheelsC/2
 							      + m_data->outerRadiusOfStraw  + m_data->endCapMainRadiatorThicknessC/2));
 		pWheelC->add(xfRadiator);
 		pWheelC->add(pMainRadiatorC);
@@ -1972,7 +1994,7 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 	    // Place wheel in the Endcap Volume
 	    GeoAlignableTransform * xfWheel 
-	      = new GeoAlignableTransform(HepGeom::TranslateZ3D(m_data->endCapPositionOfFirstWheelC
+	      = new GeoAlignableTransform(GeoTrf::TranslateZ3D(m_data->endCapPositionOfFirstWheelC
 							  + (iiWheel - firstIndexOfC)*m_data->endCapDistanceBetweenWheelCentersC));
 
 	    pCommonEndcapC[iiSide]->add(xfWheel);
@@ -2028,8 +2050,8 @@ void TRTDetectorFactory_Full::create(GeoPhysVol *world)
 
 /////////////////////////////////// makeModule ///////////////////////////////////
 //
-const GeoShape * TRTDetectorFactory_Full::makeModule ( double length, CLHEP::Hep2Vector corner1, CLHEP::Hep2Vector corner2,
-						       CLHEP::Hep2Vector corner3, CLHEP::Hep2Vector corner4, HepGeom::Transform3D & modulePosition, double shrinkDist/*=0*/) const {
+const GeoShape * TRTDetectorFactory_Full::makeModule ( double length, GeoTrf::Vector2D corner1, GeoTrf::Vector2D corner2,
+						       GeoTrf::Vector2D corner3, GeoTrf::Vector2D corner4, GeoTrf::Transform3D & modulePosition, double shrinkDist/*=0*/) const {
 
 
   // This method takes the absolute coordinates of the four corners,
@@ -2046,25 +2068,25 @@ const GeoShape * TRTDetectorFactory_Full::makeModule ( double length, CLHEP::Hep
 
   // First we calculate the relative vectors of the edges:
 
-  CLHEP::Hep2Vector delta12 = corner1 - corner2;   CLHEP::Hep2Vector delta23 = corner2 - corner3;
-  CLHEP::Hep2Vector delta34 = corner3 - corner4;   CLHEP::Hep2Vector delta14 = corner1 - corner4;
+  GeoTrf::Vector2D delta12 = corner1 - corner2;   GeoTrf::Vector2D delta23 = corner2 - corner3;
+  GeoTrf::Vector2D delta34 = corner3 - corner4;   GeoTrf::Vector2D delta14 = corner1 - corner4;
 
   // We also need the diagonals.
-  CLHEP::Hep2Vector delta24 = corner2 - corner4;
-  CLHEP::Hep2Vector delta13 = corner1 - corner3;
+  GeoTrf::Vector2D delta24 = corner2 - corner4;
+  GeoTrf::Vector2D delta13 = corner1 - corner3;
 
   // Then we find out which way the module bends (NB: .angle returns the UNSIGNED angle!).
-  double openingAngleOfFirstCorner= delta12.angle(delta14);
-  int sign = ( openingAngleOfFirstCorner < 90*CLHEP::deg ? 1 : -1);
+  double openingAngleOfFirstCorner= angle(delta12,delta14);
+  int sign = ( openingAngleOfFirstCorner < 90*GeoModelKernelUnits::deg ? 1 : -1);
 
   // If our approximation with triangles were correct, three of the
   // lengths (of edges and diagonals) would be equal. We force this
   // instead.
   //
   // (Whether the involved diagonal is 2-4 or 1-3 depends on the sign).
-  double commonSide = (delta14.mag() + delta23.mag() + (sign==1?delta24.mag():delta13.mag()) ) / 3.;
-  double base1 = delta12.mag(); // Inner base
-  double base2 = delta34.mag(); // Outer base
+  double commonSide = (magn(delta14) + magn(delta23) + (sign==1?magn(delta24):magn(delta13)) ) / 3.;
+  double base1 = magn(delta12); // Inner base
+  double base2 = magn(delta34); // Outer base
 
   if (shrinkDist!=0) {
     // Since the moving corners bit above doesnt work, we do this instead:
@@ -2077,13 +2099,13 @@ const GeoShape * TRTDetectorFactory_Full::makeModule ( double length, CLHEP::Hep
   double height1 = sqrt (commonSide*commonSide-0.25*base1*base1);
   double height2 = sqrt (commonSide*commonSide-0.25*base2*base2);
   double rot     = atan(base2/height2/2)-atan(base1/height1/2);
-  double epsilon = 1*CLHEP::micrometer; // needed to ensure perfect overlaps.
+  double epsilon = 1*GeoModelKernelUnits::micrometer; // needed to ensure perfect overlaps.
   GeoTrd *trd1 = new GeoTrd(base1/2+epsilon, epsilon, length/2, length/2, height1/2);
   GeoTrd *trd2 = new GeoTrd(epsilon, base2/2+epsilon, length/2, length/2, height2/2);
 
   double gamma = atan((base2/2+epsilon)*2/height2);
   double r = sqrt((base2/2+epsilon)*(base2/2+epsilon) + height2*height2/4);
-  HepGeom::Transform3D xForm=HepGeom::Translate3D(r*sin(sign*(gamma-rot)),0,height1/2-r*cos(gamma-rot))*HepGeom::RotateY3D(sign*rot);
+  GeoTrf::Transform3D xForm=GeoTrf::Translate3D(r*sin(sign*(gamma-rot)),0,height1/2-r*cos(gamma-rot))*GeoTrf::RotateY3D(sign*rot);
   const GeoShape & sShell = (*trd1).add((*trd2)<<xForm);
 
   //  We now have the shape we want. We only have left to transform
@@ -2091,52 +2113,52 @@ const GeoShape * TRTDetectorFactory_Full::makeModule ( double length, CLHEP::Hep
   //
   //  First, the actual positions of the four corners of
   //  the constructed shape.
-  CLHEP::Hep2Vector actualCorner1, actualCorner2, actualCorner3, actualCorner4;
+  GeoTrf::Vector2D actualCorner1, actualCorner2, actualCorner3, actualCorner4;
   actualCorner1 = corner1;
-  actualCorner2 = corner1 + CLHEP::Hep2Vector(0,base1);
+  actualCorner2 = corner1 + GeoTrf::Vector2D(0,base1);
   if (sign==1) {
-    actualCorner4 = corner1 + CLHEP::Hep2Vector(height1,base1/2);
-    actualCorner3 = actualCorner4 + CLHEP::Hep2Vector(-base2*sin(rot),base2*cos(rot));
+    actualCorner4 = corner1 + GeoTrf::Vector2D(height1,base1/2);
+    actualCorner3 = actualCorner4 + GeoTrf::Vector2D(-base2*sin(rot),base2*cos(rot));
   } else {
-    actualCorner3 = corner1 + CLHEP::Hep2Vector(height1,base1/2);
-    actualCorner4 = actualCorner3 + CLHEP::Hep2Vector(-base2*sin(rot),-base2*cos(rot));
+    actualCorner3 = corner1 + GeoTrf::Vector2D(height1,base1/2);
+    actualCorner4 = actualCorner3 + GeoTrf::Vector2D(-base2*sin(rot),-base2*cos(rot));
   }
   // The center of our shape is at
-  CLHEP::Hep2Vector center= corner1 + CLHEP::Hep2Vector(height1/2,base1/2);
+  GeoTrf::Vector2D center= corner1 + GeoTrf::Vector2D(height1/2,base1/2);
 
   //  Let us turn the whole module
-  double modRot = (-delta12).phi()-CLHEP::Hep2Vector(0,1).phi();
+  double modRot = (-delta12).phi()-GeoTrf::Vector2D(0,1).phi();
 
-  //  std::cout << "TK: modRot : "<< modRot/CLHEP::degree<<" degrees"<<std::endl;
-  actualCorner1.rotate(modRot);
-  actualCorner2.rotate(modRot);
-  actualCorner3.rotate(modRot);
-  actualCorner4.rotate(modRot);
-  center.rotate(modRot);
+  //  std::cout << "TK: modRot : "<< modRot/GeoModelKernelUnits::degree<<" degrees"<<std::endl;
+  rotate(modRot,actualCorner1);
+  rotate(modRot,actualCorner2);
+  rotate(modRot,actualCorner3);
+  rotate(modRot,actualCorner4);
+  rotate(modRot,center);
 
   // Finally, the shape is moved where it fits best with the original corner coordinates.
 
-  CLHEP::Hep2Vector displacement =  0.25*( (corner1+corner2+corner3+corner4) - (actualCorner1+actualCorner2+actualCorner3+actualCorner4) );
-  //  .. << ::DEBUG << std::cout << "TK: makeModule : moving a total of (micrometer) " << displacement.mag()/CLHEP::micrometer<< std::endl;
-  //  std::cout << "TK: makeModule : moving due to 1 (micrometer) " << 0.25*(corner1-actualCorner1).mag()/CLHEP::micrometer<< std::endl;
-  //  std::cout << "TK: makeModule : moving due to 2 (micrometer) " << 0.25*(corner2-actualCorner2).mag()/CLHEP::micrometer<< std::endl;
-  //  std::cout << "TK: makeModule : moving due to 3 (micrometer) " << 0.25*(corner3-actualCorner3).mag()/CLHEP::micrometer<< std::endl;
-  //  std::cout << "TK: makeModule : moving due to 4 (micrometer) " << 0.25*(corner4-actualCorner4).mag()/CLHEP::micrometer<< std::endl;
+  GeoTrf::Vector2D displacement =  0.25*( (corner1+corner2+corner3+corner4) - (actualCorner1+actualCorner2+actualCorner3+actualCorner4) );
+  //  .. << ::DEBUG << std::cout << "TK: makeModule : moving a total of (micrometer) " << displacement.mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //  std::cout << "TK: makeModule : moving due to 1 (micrometer) " << 0.25*(corner1-actualCorner1).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //  std::cout << "TK: makeModule : moving due to 2 (micrometer) " << 0.25*(corner2-actualCorner2).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //  std::cout << "TK: makeModule : moving due to 3 (micrometer) " << 0.25*(corner3-actualCorner3).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //  std::cout << "TK: makeModule : moving due to 4 (micrometer) " << 0.25*(corner4-actualCorner4).mag()/GeoModelKernelUnits::micrometer<< std::endl;
   center += displacement;
   actualCorner1 += displacement;
   actualCorner2 += displacement;
   actualCorner3 += displacement;
   actualCorner4 += displacement;
 
-  CLHEP::Hep2Vector remainingOffset =  -0.25*( (corner1+corner2+corner3+corner4) - (actualCorner1+actualCorner2+actualCorner3+actualCorner4) );
-  //   std::cout << "TK: makeModule : remaining total offset (should be zero) (micrometer) " << remainingOffset.mag()/CLHEP::micrometer<< std::endl;
-  //   std::cout << "TK: makeModule : 1 remaining offset (micrometer) " << (corner1-actualCorner1).mag()/CLHEP::micrometer<< std::endl;
-  //   std::cout << "TK: makeModule : 2 remaining offset (micrometer) " << (corner2-actualCorner2).mag()/CLHEP::micrometer<< std::endl;
-  //   std::cout << "TK: makeModule : 3 remaining offset (micrometer) " << (corner3-actualCorner3).mag()/CLHEP::micrometer<< std::endl;
-  //   std::cout << "TK: makeModule : 4 remaining offset (micrometer) " << (corner4-actualCorner4).mag()/CLHEP::micrometer<< std::endl;
+  //  GeoTrf::Vector2D remainingOffset =  -0.25*( (corner1+corner2+corner3+corner4) - (actualCorner1+actualCorner2+actualCorner3+actualCorner4) );
+  //   std::cout << "TK: makeModule : remaining total offset (should be zero) (micrometer) " << remainingOffset.mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //   std::cout << "TK: makeModule : 1 remaining offset (micrometer) " << (corner1-actualCorner1).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //   std::cout << "TK: makeModule : 2 remaining offset (micrometer) " << (corner2-actualCorner2).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //   std::cout << "TK: makeModule : 3 remaining offset (micrometer) " << (corner3-actualCorner3).mag()/GeoModelKernelUnits::micrometer<< std::endl;
+  //   std::cout << "TK: makeModule : 4 remaining offset (micrometer) " << (corner4-actualCorner4).mag()/GeoModelKernelUnits::micrometer<< std::endl;
 
   //  The final positioning includes a few 90deg rotations because the axis's in the GeoTrd's are different from the actual axis's.
-  modulePosition = HepGeom::TranslateY3D(center.y())*HepGeom::TranslateX3D(center.x())*HepGeom::RotateZ3D(90.0*CLHEP::deg)*HepGeom::RotateX3D(90.0*CLHEP::deg)*HepGeom::RotateY3D(modRot);
+  modulePosition = GeoTrf::TranslateY3D(center.y())*GeoTrf::TranslateX3D(center.x())*GeoTrf::RotateZ3D(90.0*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90.0*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(modRot);
 
   return &sShell;
 }
@@ -2212,9 +2234,9 @@ GeoPhysVol * TRTDetectorFactory_Full::makeStraw( double& activeGasZPosition, boo
   else
     lGasMA = new GeoLogVol("GasMA", sGasMA, m_materialManager->getMaterial((m_useOldActiveGasMixture ? "trt:XeCO2CF4" : "trt::XeCO2O2")));
   GeoNameTag   *nGasMAPos = new GeoNameTag("GasMAPos");
-  GeoTransform *xGasMAPos = new GeoTransform(HepGeom::RotateY3D(M_PI)*HepGeom::TranslateZ3D(-posA));//the rotation of pi is to... digitization (TK)
+  GeoTransform *xGasMAPos = new GeoTransform(GeoTrf::RotateY3D(M_PI)*GeoTrf::TranslateZ3D(-posA));//the rotation of pi is to... digitization (TK)
   GeoNameTag   *nGasMANeg = new GeoNameTag("GasMANeg");
-  GeoTransform *xGasMANeg = new GeoTransform(HepGeom::TranslateZ3D(-posA));
+  GeoTransform *xGasMANeg = new GeoTransform(GeoTrf::TranslateZ3D(-posA));
   GeoPhysVol   *pGasMA    = new GeoPhysVol(lGasMA);
 
   // Assemble gas within straws
@@ -2229,8 +2251,8 @@ GeoPhysVol * TRTDetectorFactory_Full::makeStraw( double& activeGasZPosition, boo
 
   // Outer Dead region for mixed straws, part II:
   GeoSerialDenominator   *nDeadMA    = new GeoSerialDenominator("DeadRegionL");
-  GeoTransform           *xDeadPosMA = new GeoTransform(HepGeom::TranslateZ3D(+(m_data->barrelLengthOfStraw-m_data->lengthOfDeadRegion)/2.0));
-  GeoTransform           *xDeadNegMA = new GeoTransform(HepGeom::TranslateZ3D(-(m_data->barrelLengthOfStraw-m_data->lengthOfDeadRegion)/2.0));
+  GeoTransform           *xDeadPosMA = new GeoTransform(GeoTrf::TranslateZ3D(+(m_data->barrelLengthOfStraw-m_data->lengthOfDeadRegion)/2.0));
+  GeoTransform           *xDeadNegMA = new GeoTransform(GeoTrf::TranslateZ3D(-(m_data->barrelLengthOfStraw-m_data->lengthOfDeadRegion)/2.0));
 
   // Assemble dead regions within straws:
   pStrawMixed->add(nDeadMA);
@@ -2241,8 +2263,8 @@ GeoPhysVol * TRTDetectorFactory_Full::makeStraw( double& activeGasZPosition, boo
 
   // InnerDeadRegions, part III:
   GeoSerialDenominator   *nInnerDeadMA    = new GeoSerialDenominator("InnerDeadRegionL");
-  GeoTransform           *xInnerDeadPosMA = new GeoTransform(HepGeom::TranslateZ3D(+posInnerDeadRegion));
-  GeoTransform           *xInnerDeadNegMA = new GeoTransform(HepGeom::TranslateZ3D(-posInnerDeadRegion));
+  GeoTransform           *xInnerDeadPosMA = new GeoTransform(GeoTrf::TranslateZ3D(+posInnerDeadRegion));
+  GeoTransform           *xInnerDeadNegMA = new GeoTransform(GeoTrf::TranslateZ3D(-posInnerDeadRegion));
   // add to mixedStraw:
   pStrawMixed->add(nInnerDeadMA);
   pStrawMixed->add(xInnerDeadPosMA);
@@ -2341,13 +2363,13 @@ GeoFullPhysVol * TRTDetectorFactory_Full::makeStrawPlane(size_t w, ActiveGasMixt
 
   // Positioning of straws :
   double dphi = 2*M_PI/ nstraws;
-  HepGeom::RotateZ3D    Rz(1.0);// Radians!
-  HepGeom::TranslateX3D Tx(1.0);// MM! TK: actually this doesnt need to be interpreted as mm? Just as a dimensionless 1. (i guess)
-  HepGeom::TranslateY3D Ty(1.0);// MM!
+  GeoTrf::RotateZ3D    Rz(1.0);// Radians!
+  GeoTrf::TranslateX3D Tx(1.0);// MM! TK: actually this doesnt need to be interpreted as mm? Just as a dimensionless 1. (i guess)
+  GeoTrf::TranslateY3D Ty(1.0);// MM!
   Variable    i;
   Sin sin;
   Cos cos;
-  TRANSFUNCTION tx =  Pow(Tx,pos*cos(dphi*i))*Pow(Ty,pos*sin(dphi*i))*Pow(Rz,dphi*i)*HepGeom::RotateY3D(-90*CLHEP::deg);
+  TRANSFUNCTION tx =  Pow(Tx,pos*cos(dphi*i))*Pow(Ty,pos*sin(dphi*i))*Pow(Rz,dphi*i)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *serialTransformer=new GeoSerialTransformer(pStraw, &tx, nstraws);
   pStrawPlane->add(new GeoSerialIdentifier(0));
   pStrawPlane->add(serialTransformer);
@@ -2385,8 +2407,8 @@ GeoFullPhysVol * TRTDetectorFactory_Full::makeStrawPlane(size_t w, ActiveGasMixt
     lDeadRegion = new GeoLogVol("DeadRegion",sDeadRegion,m_materialManager->getMaterial((m_useOldActiveGasMixture ? "trt::XeCO2CF4" : "trt::XeCO2O2")));
   GeoPhysVol *pDeadRegion = new GeoPhysVol(lDeadRegion);
 
-  GeoTransform *xDeadPos = new GeoTransform(HepGeom::TranslateZ3D(+(Length/2-ldead/2)));
-  GeoTransform *xDeadNeg = new GeoTransform(HepGeom::TranslateZ3D(-(Length/2-ldead/2)));
+  GeoTransform *xDeadPos = new GeoTransform(GeoTrf::TranslateZ3D(+(Length/2-ldead/2)));
+  GeoTransform *xDeadNeg = new GeoTransform(GeoTrf::TranslateZ3D(-(Length/2-ldead/2)));
   pStraw->add(xDeadPos);
   pStraw->add(pDeadRegion);
   pStraw->add(xDeadNeg);
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.h b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.h
index dfc5d5326a405c72c01565e92ff689364fcadb8c..3eca85be3c03256b002af6c4ee077232ad920d2d 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.h
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTDetectorFactory_Full.h
@@ -19,14 +19,13 @@
 
 #include "TRT_ConditionsServices/ITRT_StrawStatusSummarySvc.h" //for Argon
 #include "GaudiKernel/ServiceHandle.h"
-
-#include "CLHEP/Vector/TwoVector.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include <string>
 
 class GeoPhysVol;
 class GeoFullPhysVol;
-//class CLHEP::Hep2Vector;
 class TRTParameterInterface;
 class InDetMaterialManager;
 
@@ -84,8 +83,8 @@ class TRTDetectorFactory_Full : public InDetDD::DetectorFactoryBase  {
   ActiveGasMixture DecideGasMixture(int strawStatusHT);
 
   // private helper methods:
-  const GeoShape * makeModule ( double length, CLHEP::Hep2Vector corner1 ,  CLHEP::Hep2Vector corner2, CLHEP::Hep2Vector corner3,
-				CLHEP::Hep2Vector corner4, HepGeom::Transform3D & absolutePosition, double shrinkDist=0 ) const;
+  const GeoShape * makeModule ( double length, GeoTrf::Vector2D corner1 ,  GeoTrf::Vector2D corner2, GeoTrf::Vector2D corner3,
+				GeoTrf::Vector2D corner4, GeoTrf::Transform3D & absolutePosition, double shrinkDist=0 ) const;
   //GeoPhysVol * makeStraw( double& activeGasZPosition, bool hasLargeDeadRegion=false ) const;
   GeoPhysVol * makeStraw( double& activeGasZPosition, bool hasLargeDeadRegion=false, ActiveGasMixture gasMixture = GM_XENON) const;
   //GeoFullPhysVol  *makeStrawPlane( size_t w ) const;
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTParameterInterface.h b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTParameterInterface.h
index 1f7d20eb3cb505d51c6a3bcd7ac80d6f9903e327..b5e2e20eea3f73b291df0f546cf3beb3eb2b925d 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTParameterInterface.h
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRTParameterInterface.h
@@ -5,7 +5,8 @@
 #ifndef TRT_GEOMODEL_TRTPARAMETERINTERFACE_H
 #define TRT_GEOMODEL_TRTPARAMETERINTERFACE_H
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include <string>
 
 namespace InDetDD {
@@ -30,7 +31,7 @@ public:
   ///////////////////////////////////////////////////////////
   //                 Top Level Placements                  //
   ///////////////////////////////////////////////////////////
-  virtual const HepGeom::Transform3D & partTransform(const std::string & partName) const = 0;
+  virtual const GeoTrf::Transform3D & partTransform(const std::string & partName) const = 0;
   virtual bool partPresent(const std::string & partName) const = 0;
 
   ///////////////////////////////////////////////////////////
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.cxx b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.cxx
index e45c8552f5a7ebc012be0d04f50af2923f69d1ee..1111e90d1eccd97bd41c8f8eff6f8387eeb2e9f2 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.cxx
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.cxx
@@ -3,7 +3,7 @@
 */
 
 #include "TRT_DetDescrDB_ParameterInterface.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelInterfaces/IGeoDbTagSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -140,10 +140,10 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   IRDBRecordset_ptr RDB_CommonPars  = iAccessSvc->getRecordsetPtr("TRTCommonPars",detectorKey,detectorNode);
   const IRDBRecord* RDBVars_CommonPars = (*RDB_CommonPars)[0];
 
-  lengthOfDeadRegion = RDBVars_CommonPars->getFloat("LENGTHOFDEADREGION")*CLHEP::mm;
-  outerRadiusOfWire  = RDBVars_CommonPars->getFloat("OUTERRADIUSOFWIRE")*CLHEP::mm;
-  innerRadiusOfStraw = RDBVars_CommonPars->getFloat("INNERRADIUSOFSTRAW")*CLHEP::mm;
-  outerRadiusOfStraw = RDBVars_CommonPars->getFloat("OUTERRADIUSOFSTRAW")*CLHEP::mm;
+  lengthOfDeadRegion = RDBVars_CommonPars->getFloat("LENGTHOFDEADREGION")*GeoModelKernelUnits::mm;
+  outerRadiusOfWire  = RDBVars_CommonPars->getFloat("OUTERRADIUSOFWIRE")*GeoModelKernelUnits::mm;
+  innerRadiusOfStraw = RDBVars_CommonPars->getFloat("INNERRADIUSOFSTRAW")*GeoModelKernelUnits::mm;
+  outerRadiusOfStraw = RDBVars_CommonPars->getFloat("OUTERRADIUSOFSTRAW")*GeoModelKernelUnits::mm;
 
   /////////////////////////////////////////////////////////////////////////////////////////
   //                        Variables related to the Barrel part                         //
@@ -161,15 +161,15 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   if (includeBarServiceAndFlange) {
 
     const IRDBRecord* RDBVars_BarrelServices = (*RDB_BarrelServices)[0];
-    barFlangeZMin = RDBVars_BarrelServices->getDouble("BARFLANGEZMIN")*CLHEP::mm;
-    barFlangeZMax = RDBVars_BarrelServices->getDouble("BARFLANGEZMAX")*CLHEP::mm;
-    barFlangeRMin = RDBVars_BarrelServices->getDouble("BARFLANGERMIN")*CLHEP::mm;
-    barFlangeRMax = RDBVars_BarrelServices->getDouble("BARFLANGERMAX")*CLHEP::mm;
+    barFlangeZMin = RDBVars_BarrelServices->getDouble("BARFLANGEZMIN")*GeoModelKernelUnits::mm;
+    barFlangeZMax = RDBVars_BarrelServices->getDouble("BARFLANGEZMAX")*GeoModelKernelUnits::mm;
+    barFlangeRMin = RDBVars_BarrelServices->getDouble("BARFLANGERMIN")*GeoModelKernelUnits::mm;
+    barFlangeRMax = RDBVars_BarrelServices->getDouble("BARFLANGERMAX")*GeoModelKernelUnits::mm;
 
-    barServicesZMin = RDBVars_BarrelServices->getDouble("BARSERVICESZMIN")*CLHEP::mm;
-    barServicesZMax = RDBVars_BarrelServices->getDouble("BARSERVICESZMAX")*CLHEP::mm;
-    barServicesRMin = RDBVars_BarrelServices->getDouble("BARSERVICESRMIN")*CLHEP::mm;
-    barServicesRMax = RDBVars_BarrelServices->getDouble("BARSERVICESRMAX")*CLHEP::mm;
+    barServicesZMin = RDBVars_BarrelServices->getDouble("BARSERVICESZMIN")*GeoModelKernelUnits::mm;
+    barServicesZMax = RDBVars_BarrelServices->getDouble("BARSERVICESZMAX")*GeoModelKernelUnits::mm;
+    barServicesRMin = RDBVars_BarrelServices->getDouble("BARSERVICESRMIN")*GeoModelKernelUnits::mm;
+    barServicesRMax = RDBVars_BarrelServices->getDouble("BARSERVICESRMAX")*GeoModelKernelUnits::mm;
 
   } else if (!includeBarServiceAndFlange) {
 
@@ -185,25 +185,25 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   }
 
   if (!RDBVars_BarrelOverallPars->isFieldNull("BRLVIRTVOLZCLEARANCE")) {
-    barrelVirtualVolumeZClearance    =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLZCLEARANCE")*CLHEP::mm;
-    barrelVirtualVolumeRMinClearance =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLRMINCLEAR")*CLHEP::mm;
-    barrelVirtualVolumeRMaxClearance =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLRMAXCLEAR")*CLHEP::mm;
+    barrelVirtualVolumeZClearance    =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLZCLEARANCE")*GeoModelKernelUnits::mm;
+    barrelVirtualVolumeRMinClearance =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLRMINCLEAR")*GeoModelKernelUnits::mm;
+    barrelVirtualVolumeRMaxClearance =  RDBVars_BarrelOverallPars->getFloat("BRLVIRTVOLRMAXCLEAR")*GeoModelKernelUnits::mm;
   } else {
-    barrelVirtualVolumeZClearance    = 0.001*CLHEP::micrometer;//fixme: use epsilon(?).
-    barrelVirtualVolumeRMinClearance = 0.001*CLHEP::micrometer;
-    barrelVirtualVolumeRMaxClearance = 0.001*CLHEP::micrometer;
+    barrelVirtualVolumeZClearance    = 0.001*GeoModelKernelUnits::micrometer;//fixme: use epsilon(?).
+    barrelVirtualVolumeRMinClearance = 0.001*GeoModelKernelUnits::micrometer;
+    barrelVirtualVolumeRMaxClearance = 0.001*GeoModelKernelUnits::micrometer;
   }
 
-  innerRadiusOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("INNRADIUSOFBARRELVOL")*CLHEP::mm;
-  outerRadiusOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFBARRELVOL")*CLHEP::mm;
-  lengthOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("LENGTHOFBARRELVOLUME")*CLHEP::mm;
-  barrelOuterRadiusOfCoolingTube = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFCOOLTUBE")*CLHEP::mm;
-  barrelInnerRadiusOfCoolingTube = RDBVars_BarrelOverallPars->getFloat("INNRADIUSOFCOOLTUBE")*CLHEP::mm;
-  barrelThicknessOfModuleWalls = RDBVars_BarrelOverallPars->getFloat("THICKOFMODULEWALLS")*CLHEP::mm;
+  innerRadiusOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("INNRADIUSOFBARRELVOL")*GeoModelKernelUnits::mm;
+  outerRadiusOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFBARRELVOL")*GeoModelKernelUnits::mm;
+  lengthOfBarrelVolume = RDBVars_BarrelOverallPars->getFloat("LENGTHOFBARRELVOLUME")*GeoModelKernelUnits::mm;
+  barrelOuterRadiusOfCoolingTube = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFCOOLTUBE")*GeoModelKernelUnits::mm;
+  barrelInnerRadiusOfCoolingTube = RDBVars_BarrelOverallPars->getFloat("INNRADIUSOFCOOLTUBE")*GeoModelKernelUnits::mm;
+  barrelThicknessOfModuleWalls = RDBVars_BarrelOverallPars->getFloat("THICKOFMODULEWALLS")*GeoModelKernelUnits::mm;
   barrelNumberOfLayersWithLargeDeadRegion = RDBVars_BarrelOverallPars->getInt("NLAYWTHLRGDEADREGION");
-  thicknessOfBarrelInnerSupport = RDBVars_BarrelOverallPars->getFloat("THICKOFBRLINNSUPPORT")*CLHEP::mm;
-  thicknessOfBarrelOuterSupport = RDBVars_BarrelOverallPars->getFloat("THICKOFBRLOUTSUPPORT")*CLHEP::mm;
-  barrelOuterRadiusOfStrawHole = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFSTRAWHOLE")*CLHEP::mm;
+  thicknessOfBarrelInnerSupport = RDBVars_BarrelOverallPars->getFloat("THICKOFBRLINNSUPPORT")*GeoModelKernelUnits::mm;
+  thicknessOfBarrelOuterSupport = RDBVars_BarrelOverallPars->getFloat("THICKOFBRLOUTSUPPORT")*GeoModelKernelUnits::mm;
+  barrelOuterRadiusOfStrawHole = RDBVars_BarrelOverallPars->getFloat("OUTRADIUSOFSTRAWHOLE")*GeoModelKernelUnits::mm;
 
   virtualBarrelVolumeLength = std::max(std::max(barFlangeZMax,barServicesZMax),lengthOfBarrelVolume/2)
     + barrelVirtualVolumeZClearance;
@@ -219,9 +219,9 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   nBarrelModulesUsed = nBarrelModules; //Hardwired to be all modules. Silly variable anyway.
   nBarrelPhi = RDBVars_BarrelOverallPars->getInt("NBARRELPHI");
 
-  barrelLengthOfStraw  = RDBVars_BarrelOverallPars->getFloat("LENGTHOFSTRAW")*CLHEP::mm;
-  barrelLengthOfTwister         = RDBVars_BarrelOverallPars->getFloat("LENGTHOFTWISTER")*CLHEP::mm;
-  barrelLengthOfLargeDeadRegion = RDBVars_BarrelOverallPars->getFloat("LENLARGEDEADREGION")*CLHEP::mm;
+  barrelLengthOfStraw  = RDBVars_BarrelOverallPars->getFloat("LENGTHOFSTRAW")*GeoModelKernelUnits::mm;
+  barrelLengthOfTwister         = RDBVars_BarrelOverallPars->getFloat("LENGTHOFTWISTER")*GeoModelKernelUnits::mm;
+  barrelLengthOfLargeDeadRegion = RDBVars_BarrelOverallPars->getFloat("LENLARGEDEADREGION")*GeoModelKernelUnits::mm;
 
   barrelNumberOfStrawLayersInModule = new unsigned int[nBarrelRings];
   for (unsigned int i=0; i<nBarrelRings; i++) {
@@ -261,32 +261,32 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
 
   for (unsigned int iRing = 0; iRing < nBarrelRings; iRing++) {
     const IRDBRecord* row = (*RDB_BarrelRingDepPars)[iRing];
-    barrelXOfFirstGlobalAlignmentStraw[iRing]  = row->getFloat("XOFGLOBALALIGNSTRW1")*CLHEP::mm;
-    barrelYOfFirstGlobalAlignmentStraw[iRing]  = row->getFloat("YOFGLOBALALIGNSTRW1")*CLHEP::mm;
-    barrelXOfSecondGlobalAlignmentStraw[iRing] = row->getFloat("XOFGLOBALALIGNSTRW2")*CLHEP::mm;
-    barrelYOfSecondGlobalAlignmentStraw[iRing] = row->getFloat("YOFGLOBALALIGNSTRW2")*CLHEP::mm;
+    barrelXOfFirstGlobalAlignmentStraw[iRing]  = row->getFloat("XOFGLOBALALIGNSTRW1")*GeoModelKernelUnits::mm;
+    barrelYOfFirstGlobalAlignmentStraw[iRing]  = row->getFloat("YOFGLOBALALIGNSTRW1")*GeoModelKernelUnits::mm;
+    barrelXOfSecondGlobalAlignmentStraw[iRing] = row->getFloat("XOFGLOBALALIGNSTRW2")*GeoModelKernelUnits::mm;
+    barrelYOfSecondGlobalAlignmentStraw[iRing] = row->getFloat("YOFGLOBALALIGNSTRW2")*GeoModelKernelUnits::mm;
     barrelIndexOfSecondGlobalAlignmentStraw[iRing] = row->getInt("INDEX2NDGLBALGNSTRW");
     barrelNumberOfStrawsInModule[iRing] = row->getInt("NSTRAWSINMODULE");
 
     barrelXOfCoolingTube[iRing] = new double[nCoolingTubes];
-    barrelXOfCoolingTube[iRing][0] = row->getFloat("XOFCOOLINGTUBE1")*CLHEP::mm;
-    barrelXOfCoolingTube[iRing][1] = row->getFloat("XOFCOOLINGTUBE2")*CLHEP::mm;
+    barrelXOfCoolingTube[iRing][0] = row->getFloat("XOFCOOLINGTUBE1")*GeoModelKernelUnits::mm;
+    barrelXOfCoolingTube[iRing][1] = row->getFloat("XOFCOOLINGTUBE2")*GeoModelKernelUnits::mm;
 
     barrelYOfCoolingTube[iRing] = new double[nCoolingTubes];
-    barrelYOfCoolingTube[iRing][0] = row->getFloat("YOFCOOLINGTUBE1")*CLHEP::mm;
-    barrelYOfCoolingTube[iRing][1] = row->getFloat("YOFCOOLINGTUBE2")*CLHEP::mm;
+    barrelYOfCoolingTube[iRing][0] = row->getFloat("YOFCOOLINGTUBE1")*GeoModelKernelUnits::mm;
+    barrelYOfCoolingTube[iRing][1] = row->getFloat("YOFCOOLINGTUBE2")*GeoModelKernelUnits::mm;
 
     shellCornerXPosition[iRing] = new double[nShellCorners];
-    shellCornerXPosition[iRing][0] = row->getFloat("SHELLCORNERXPOS1")*CLHEP::mm;
-    shellCornerXPosition[iRing][1] = row->getFloat("SHELLCORNERXPOS2")*CLHEP::mm;
-    shellCornerXPosition[iRing][2] = row->getFloat("SHELLCORNERXPOS3")*CLHEP::mm;
-    shellCornerXPosition[iRing][3] = row->getFloat("SHELLCORNERXPOS4")*CLHEP::mm;
+    shellCornerXPosition[iRing][0] = row->getFloat("SHELLCORNERXPOS1")*GeoModelKernelUnits::mm;
+    shellCornerXPosition[iRing][1] = row->getFloat("SHELLCORNERXPOS2")*GeoModelKernelUnits::mm;
+    shellCornerXPosition[iRing][2] = row->getFloat("SHELLCORNERXPOS3")*GeoModelKernelUnits::mm;
+    shellCornerXPosition[iRing][3] = row->getFloat("SHELLCORNERXPOS4")*GeoModelKernelUnits::mm;
 
     shellCornerYPosition[iRing] = new double[nShellCorners];
-    shellCornerYPosition[iRing][0] = row->getFloat("SHELLCORNERYPOS1")*CLHEP::mm;
-    shellCornerYPosition[iRing][1] = row->getFloat("SHELLCORNERYPOS2")*CLHEP::mm;
-    shellCornerYPosition[iRing][2] = row->getFloat("SHELLCORNERYPOS3")*CLHEP::mm;
-    shellCornerYPosition[iRing][3] = row->getFloat("SHELLCORNERYPOS4")*CLHEP::mm;
+    shellCornerYPosition[iRing][0] = row->getFloat("SHELLCORNERYPOS1")*GeoModelKernelUnits::mm;
+    shellCornerYPosition[iRing][1] = row->getFloat("SHELLCORNERYPOS2")*GeoModelKernelUnits::mm;
+    shellCornerYPosition[iRing][2] = row->getFloat("SHELLCORNERYPOS3")*GeoModelKernelUnits::mm;
+    shellCornerYPosition[iRing][3] = row->getFloat("SHELLCORNERYPOS4")*GeoModelKernelUnits::mm;
 
   };
 
@@ -296,8 +296,8 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
     strawYPosition[i] = new double[ barrelNumberOfStrawsInModule[i] ];
     for (unsigned int j = 0; j < barrelNumberOfStrawsInModule[i]; j++) {
       const IRDBRecord* row = (*RDB_BarrelStrawCoord)[cumulativeStrawNumber++];
-      strawXPosition[i][j]=row->getFloat("STRAWXPOSITION")*CLHEP::mm;
-      strawYPosition[i][j]=row->getFloat("STRAWYPOSITION")*CLHEP::mm;
+      strawXPosition[i][j]=row->getFloat("STRAWXPOSITION")*GeoModelKernelUnits::mm;
+      strawYPosition[i][j]=row->getFloat("STRAWYPOSITION")*GeoModelKernelUnits::mm;
     };
   };
 
@@ -318,67 +318,67 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   IRDBRecordset_ptr RDB_ECWheelDepPars = iAccessSvc->getRecordsetPtr("TRTECWheelDepPars",detectorKey,detectorNode);
   IRDBRecordset_ptr RDB_ECEndCapDepPars = iAccessSvc->getRecordsetPtr("TRTECEndCapDepPars",detectorKey,detectorNode);
 
-  innerRadiusOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("INNERRADIUSOFECVOLAB")*CLHEP::mm;
-  outerRadiusOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("OUTERRADIUSOFECVOLAB")*CLHEP::mm;
-  innerRadiusOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("INNERRADIUSOFECVOLC")*CLHEP::mm;
-  outerRadiusOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("OUTERRADIUSOFECVOLC")*CLHEP::mm;
-  lengthOfEndCapVolumeAB    = RDBVars_EndCapOverallPars->getFloat("LENGTHOFENDCAPVOLAB")*CLHEP::mm; 
-  positionOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("POSFORENDCAPVOLAB")*CLHEP::mm;
-  lengthOfEndCapVolumeC    = RDBVars_EndCapOverallPars->getFloat("LENGTHOFENDCAPVOLC")*CLHEP::mm;
-  positionOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("POSITIONOFENDCAPVOLC")*CLHEP::mm;//rename!!!
+  innerRadiusOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("INNERRADIUSOFECVOLAB")*GeoModelKernelUnits::mm;
+  outerRadiusOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("OUTERRADIUSOFECVOLAB")*GeoModelKernelUnits::mm;
+  innerRadiusOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("INNERRADIUSOFECVOLC")*GeoModelKernelUnits::mm;
+  outerRadiusOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("OUTERRADIUSOFECVOLC")*GeoModelKernelUnits::mm;
+  lengthOfEndCapVolumeAB    = RDBVars_EndCapOverallPars->getFloat("LENGTHOFENDCAPVOLAB")*GeoModelKernelUnits::mm; 
+  positionOfEndCapVolumeAB = RDBVars_EndCapOverallPars->getFloat("POSFORENDCAPVOLAB")*GeoModelKernelUnits::mm;
+  lengthOfEndCapVolumeC    = RDBVars_EndCapOverallPars->getFloat("LENGTHOFENDCAPVOLC")*GeoModelKernelUnits::mm;
+  positionOfEndCapVolumeC  = RDBVars_EndCapOverallPars->getFloat("POSITIONOFENDCAPVOLC")*GeoModelKernelUnits::mm;//rename!!!
 
   if ( RDBVars_A_Wheel->getFloat("OUTERRADIUSOFINNERSUP") != RDBVars_B_Wheel->getFloat("OUTERRADIUSOFINNERSUP") )
     msg(MSG::WARNING) << "DD Database indicates different outer radii of inner support for A and B wheels." << " The code assumes otherwise. Using value of A wheel for both!" << endmsg;
   if ( RDBVars_A_Wheel->getFloat("INNERRADIUSOFOUTERSUP") != RDBVars_B_Wheel->getFloat("INNERRADIUSOFOUTERSUP") )
     msg(MSG::WARNING) << "DD Database indicates different inner radii of outer support for A and B wheels." << " The code assumes otherwise. Using value of A wheel for both!" << endmsg;
-  endcapOuterRadiusOfInnerSupport_wheelAB = RDBVars_A_Wheel->getFloat("OUTERRADIUSOFINNERSUP")*CLHEP::mm;
-  endcapInnerRadiusOfOuterSupport_wheelAB = RDBVars_A_Wheel->getFloat("INNERRADIUSOFOUTERSUP")*CLHEP::mm;
-  endcapOuterRadiusOfInnerSupport_wheelC  = RDBVars_C_Wheel->getFloat("OUTERRADIUSOFINNERSUP")*CLHEP::mm;
-  endcapInnerRadiusOfOuterSupport_wheelC  = RDBVars_C_Wheel->getFloat("INNERRADIUSOFOUTERSUP")*CLHEP::mm;
+  endcapOuterRadiusOfInnerSupport_wheelAB = RDBVars_A_Wheel->getFloat("OUTERRADIUSOFINNERSUP")*GeoModelKernelUnits::mm;
+  endcapInnerRadiusOfOuterSupport_wheelAB = RDBVars_A_Wheel->getFloat("INNERRADIUSOFOUTERSUP")*GeoModelKernelUnits::mm;
+  endcapOuterRadiusOfInnerSupport_wheelC  = RDBVars_C_Wheel->getFloat("OUTERRADIUSOFINNERSUP")*GeoModelKernelUnits::mm;
+  endcapInnerRadiusOfOuterSupport_wheelC  = RDBVars_C_Wheel->getFloat("INNERRADIUSOFOUTERSUP")*GeoModelKernelUnits::mm;
 
-  endCapShiftForEachRotation = RDBVars_EndCapOverallPars->getFloat("SHIFTFOREACHROTATION")*CLHEP::radian;
+  endCapShiftForEachRotation = RDBVars_EndCapOverallPars->getFloat("SHIFTFOREACHROTATION")*GeoModelKernelUnits::radian;
 
   endCapPhiOfFirstStraw = 0; // Temporary
 
  
-  endCapInnerRadiusOfSupportA = RDBVars_A_Wheel->getFloat("INNERRADIUSOFSUPPORT")*CLHEP::mm;
-  endCapInnerRadiusOfSupportB = RDBVars_B_Wheel->getFloat("INNERRADIUSOFSUPPORT")*CLHEP::mm;
-  endCapInnerRadiusOfSupportC = RDBVars_C_Wheel->getFloat("INNERRADIUSOFSUPPORT")*CLHEP::mm;
+  endCapInnerRadiusOfSupportA = RDBVars_A_Wheel->getFloat("INNERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
+  endCapInnerRadiusOfSupportB = RDBVars_B_Wheel->getFloat("INNERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
+  endCapInnerRadiusOfSupportC = RDBVars_C_Wheel->getFloat("INNERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
 
-  endCapOuterRadiusOfSupportA = RDBVars_A_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*CLHEP::mm;
-  endCapOuterRadiusOfSupportB = RDBVars_B_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*CLHEP::mm;
-  endCapOuterRadiusOfSupportC = RDBVars_C_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*CLHEP::mm;
+  endCapOuterRadiusOfSupportA = RDBVars_A_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
+  endCapOuterRadiusOfSupportB = RDBVars_B_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
+  endCapOuterRadiusOfSupportC = RDBVars_C_Wheel->getFloat("OUTERRADIUSOFSUPPORT")*GeoModelKernelUnits::mm;
 
-  endCapRadialThicknessOfInnerSupportA = RDBVars_A_Wheel->getFloat("RADIALTHICKOFINNERSUP")*CLHEP::mm;
-  endCapRadialThicknessOfInnerSupportB = RDBVars_B_Wheel->getFloat("RADIALTHICKOFINNERSUP")*CLHEP::mm;
-  endCapRadialThicknessOfInnerSupportC = RDBVars_C_Wheel->getFloat("RADIALTHICKOFINNERSUP")*CLHEP::mm;
+  endCapRadialThicknessOfInnerSupportA = RDBVars_A_Wheel->getFloat("RADIALTHICKOFINNERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialThicknessOfInnerSupportB = RDBVars_B_Wheel->getFloat("RADIALTHICKOFINNERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialThicknessOfInnerSupportC = RDBVars_C_Wheel->getFloat("RADIALTHICKOFINNERSUP")*GeoModelKernelUnits::mm;
 
-  endCapRadialThicknessOfOuterSupportA = RDBVars_A_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*CLHEP::mm;
-  endCapRadialThicknessOfOuterSupportB = RDBVars_B_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*CLHEP::mm;
-  endCapRadialThicknessOfOuterSupportC = RDBVars_C_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*CLHEP::mm;
+  endCapRadialThicknessOfOuterSupportA = RDBVars_A_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialThicknessOfOuterSupportB = RDBVars_B_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialThicknessOfOuterSupportC = RDBVars_C_Wheel->getFloat("RADIALTHICKOFOUTERSUP")*GeoModelKernelUnits::mm;
 
-  endCapRadialDistFromRadToOuterSupportA = RDBVars_A_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*CLHEP::mm;
-  endCapRadialDistFromRadToOuterSupportB = RDBVars_B_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*CLHEP::mm;
-  endCapRadialDistFromRadToOuterSupportC = RDBVars_C_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*CLHEP::mm;
+  endCapRadialDistFromRadToOuterSupportA = RDBVars_A_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialDistFromRadToOuterSupportB = RDBVars_B_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*GeoModelKernelUnits::mm;
+  endCapRadialDistFromRadToOuterSupportC = RDBVars_C_Wheel->getFloat("RADIALDISTRADTOOUTERSUP")*GeoModelKernelUnits::mm;
 
-  endCapMainRadiatorThicknessA = RDBVars_A_Wheel->getFloat("MAINRADIATORTHICK")*CLHEP::mm;
-  endCapMainRadiatorThicknessB = RDBVars_B_Wheel->getFloat("MAINRADIATORTHICK")*CLHEP::mm;
-  endCapMainRadiatorThicknessC = RDBVars_C_Wheel->getFloat("MAINRADIATORTHICK")*CLHEP::mm;
+  endCapMainRadiatorThicknessA = RDBVars_A_Wheel->getFloat("MAINRADIATORTHICK")*GeoModelKernelUnits::mm;
+  endCapMainRadiatorThicknessB = RDBVars_B_Wheel->getFloat("MAINRADIATORTHICK")*GeoModelKernelUnits::mm;
+  endCapMainRadiatorThicknessC = RDBVars_C_Wheel->getFloat("MAINRADIATORTHICK")*GeoModelKernelUnits::mm;
 
-  endCapThinRadiatorThicknessA = RDBVars_A_Wheel->getFloat("THINRADIATORTHICK")*CLHEP::mm;
-  endCapThinRadiatorThicknessB = RDBVars_B_Wheel->getFloat("THINRADIATORTHICK")*CLHEP::mm;
-  endCapThinRadiatorThicknessC = RDBVars_C_Wheel->getFloat("THINRADIATORTHICK")*CLHEP::mm;
+  endCapThinRadiatorThicknessA = RDBVars_A_Wheel->getFloat("THINRADIATORTHICK")*GeoModelKernelUnits::mm;
+  endCapThinRadiatorThicknessB = RDBVars_B_Wheel->getFloat("THINRADIATORTHICK")*GeoModelKernelUnits::mm;
+  endCapThinRadiatorThicknessC = RDBVars_C_Wheel->getFloat("THINRADIATORTHICK")*GeoModelKernelUnits::mm;
 
-  endCapMiddleRadiatorThicknessB = RDBVars_B_Wheel->getFloat("MIDDLERADIATORTHICK")*CLHEP::mm;
-  if ( RDBVars_A_Wheel->getFloat("MIDDLERADIATORTHICK")*CLHEP::mm != 0 )
+  endCapMiddleRadiatorThicknessB = RDBVars_B_Wheel->getFloat("MIDDLERADIATORTHICK")*GeoModelKernelUnits::mm;
+  if ( RDBVars_A_Wheel->getFloat("MIDDLERADIATORTHICK")*GeoModelKernelUnits::mm != 0 )
     msg(MSG::WARNING) << "DD Database indicates a nonzero middle radiator thickness in the A wheel" << " where middle radiators doesn't exist. Ignoring parameter." << endmsg;
-  if ( RDBVars_C_Wheel->getFloat("MIDDLERADIATORTHICK")*CLHEP::mm != 0 )
+  if ( RDBVars_C_Wheel->getFloat("MIDDLERADIATORTHICK")*GeoModelKernelUnits::mm != 0 )
     msg(MSG::WARNING) << "DD Database indicates a nonzero middle radiator thickness in the C wheel" << " where middle radiators doesn't exist. Ignoring parameter." << endmsg;
 
-  endCapLengthOfWheelsA = RDBVars_A_Wheel->getFloat("LENGTHOFWHEELS")*CLHEP::mm; 
-  endCapLengthOfWheelsB = RDBVars_B_Wheel->getFloat("LENGTHOFWHEELS")*CLHEP::mm; 
+  endCapLengthOfWheelsA = RDBVars_A_Wheel->getFloat("LENGTHOFWHEELS")*GeoModelKernelUnits::mm; 
+  endCapLengthOfWheelsB = RDBVars_B_Wheel->getFloat("LENGTHOFWHEELS")*GeoModelKernelUnits::mm; 
 
-  endCapLengthOfWheelsC = RDBVars_C_Wheel->getFloat("LENGTHOFWHEELS")*CLHEP::mm;
+  endCapLengthOfWheelsC = RDBVars_C_Wheel->getFloat("LENGTHOFWHEELS")*GeoModelKernelUnits::mm;
 
   endCapNumberOfStrawLayersPerWheelA = RDBVars_A_Wheel->getInt("NSTRAWLAYERSPERWHEEL");
   endCapNumberOfStrawLayersPerWheelB = RDBVars_B_Wheel->getInt("NSTRAWLAYERSPERWHEEL");
@@ -404,43 +404,43 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   
 
     
-    endCapPositionOfFirstWheelA[0] =  RDBECEndCapDepPars_EndCap_A->getDouble("ZPOSOFFIRSTAWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelA[1] =  RDBECEndCapDepPars_EndCap_C->getDouble("ZPOSOFFIRSTAWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelB[0] =  RDBECEndCapDepPars_EndCap_A->getDouble("ZPOSOFFIRSTBWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelB[1] =  RDBECEndCapDepPars_EndCap_C->getDouble("ZPOSOFFIRSTBWHEEL")*CLHEP::mm;
+    endCapPositionOfFirstWheelA[0] =  RDBECEndCapDepPars_EndCap_A->getDouble("ZPOSOFFIRSTAWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelA[1] =  RDBECEndCapDepPars_EndCap_C->getDouble("ZPOSOFFIRSTAWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelB[0] =  RDBECEndCapDepPars_EndCap_A->getDouble("ZPOSOFFIRSTBWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelB[1] =  RDBECEndCapDepPars_EndCap_C->getDouble("ZPOSOFFIRSTBWHEEL")*GeoModelKernelUnits::mm;
 
     for (unsigned int iiWheel = 0; iiWheel < endcapNumberOfAWheels; iiWheel++) {
       const IRDBRecord* row = (*RDB_ECWheelDepPars)[iiWheel];
-      endCapDistanceBetweenWheelCentersA[0][iiWheel]=row->getDouble("DISTBETWWHEELCENTECC")*CLHEP::mm;
-      endCapDistanceBetweenWheelCentersA[1][iiWheel]=row->getDouble("DISTBETWWHEELCENTECA")*CLHEP::mm;
+      endCapDistanceBetweenWheelCentersA[0][iiWheel]=row->getDouble("DISTBETWWHEELCENTECC")*GeoModelKernelUnits::mm;
+      endCapDistanceBetweenWheelCentersA[1][iiWheel]=row->getDouble("DISTBETWWHEELCENTECA")*GeoModelKernelUnits::mm;
     };
     for (unsigned int iiWheel = endcapNumberOfAWheels; iiWheel < (endcapNumberOfAWheels+endcapNumberOfBWheels); iiWheel++) {
       const IRDBRecord* row = (*RDB_ECWheelDepPars)[iiWheel];
-      endCapDistanceBetweenWheelCentersB[0][iiWheel]=row->getDouble("DISTBETWWHEELCENTECC")*CLHEP::mm;
-      endCapDistanceBetweenWheelCentersB[1][iiWheel]=row->getDouble("DISTBETWWHEELCENTECA")*CLHEP::mm;
+      endCapDistanceBetweenWheelCentersB[0][iiWheel]=row->getDouble("DISTBETWWHEELCENTECC")*GeoModelKernelUnits::mm;
+      endCapDistanceBetweenWheelCentersB[1][iiWheel]=row->getDouble("DISTBETWWHEELCENTECA")*GeoModelKernelUnits::mm;
     };
   } else {
     
-    endCapPositionOfFirstWheelA[0] = RDBVars_A_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelA[1] = RDBVars_A_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelB[0] = RDBVars_B_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*CLHEP::mm;
-    endCapPositionOfFirstWheelB[1] = RDBVars_B_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*CLHEP::mm;
+    endCapPositionOfFirstWheelA[0] = RDBVars_A_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelA[1] = RDBVars_A_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelB[0] = RDBVars_B_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*GeoModelKernelUnits::mm;
+    endCapPositionOfFirstWheelB[1] = RDBVars_B_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*GeoModelKernelUnits::mm;
     endCapDistanceBetweenWheelCentersA[0][0]=0.;
     endCapDistanceBetweenWheelCentersA[1][0]=0.;
     endCapDistanceBetweenWheelCentersB[0][endcapNumberOfAWheels]=0.;
     endCapDistanceBetweenWheelCentersB[1][endcapNumberOfAWheels]=0.;
     for (unsigned int iiWheel = 1; iiWheel < endcapNumberOfAWheels; iiWheel++) {
-      endCapDistanceBetweenWheelCentersA[0][iiWheel]=RDBVars_A_Wheel->getFloat("DISTBETWWHEELCENTERS")*CLHEP::mm;
-      endCapDistanceBetweenWheelCentersA[1][iiWheel]=RDBVars_A_Wheel->getFloat("DISTBETWWHEELCENTERS")*CLHEP::mm;
+      endCapDistanceBetweenWheelCentersA[0][iiWheel]=RDBVars_A_Wheel->getFloat("DISTBETWWHEELCENTERS")*GeoModelKernelUnits::mm;
+      endCapDistanceBetweenWheelCentersA[1][iiWheel]=RDBVars_A_Wheel->getFloat("DISTBETWWHEELCENTERS")*GeoModelKernelUnits::mm;
     };
     for (unsigned int iiWheel = (endcapNumberOfAWheels+1); iiWheel < (endcapNumberOfAWheels+endcapNumberOfBWheels); iiWheel++) {
-      endCapDistanceBetweenWheelCentersB[0][iiWheel]=RDBVars_B_Wheel->getFloat("DISTBETWWHEELCENTERS")*CLHEP::mm;
-      endCapDistanceBetweenWheelCentersB[1][iiWheel]=RDBVars_B_Wheel->getFloat("DISTBETWWHEELCENTERS")*CLHEP::mm;
+      endCapDistanceBetweenWheelCentersB[0][iiWheel]=RDBVars_B_Wheel->getFloat("DISTBETWWHEELCENTERS")*GeoModelKernelUnits::mm;
+      endCapDistanceBetweenWheelCentersB[1][iiWheel]=RDBVars_B_Wheel->getFloat("DISTBETWWHEELCENTERS")*GeoModelKernelUnits::mm;
     };
   };
   
-  endCapDistanceBetweenWheelCentersC = RDBVars_C_Wheel->getFloat("DISTBETWWHEELCENTERS")*CLHEP::mm;
-  endCapPositionOfFirstWheelC = RDBVars_C_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*CLHEP::mm;
+  endCapDistanceBetweenWheelCentersC = RDBVars_C_Wheel->getFloat("DISTBETWWHEELCENTERS")*GeoModelKernelUnits::mm;
+  endCapPositionOfFirstWheelC = RDBVars_C_Wheel->getFloat("POSITIONOFFIRSTWHEEL")*GeoModelKernelUnits::mm;
   
   
   endCapLayerZPositionA = new double[endCapNumberOfStrawLayersPerWheelA];
@@ -449,15 +449,15 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
   
   for (unsigned int iiPlane = 0; iiPlane < endCapNumberOfStrawLayersPerWheelA; iiPlane++) {
     const IRDBRecord* row = (*RDB_EndCapStrwLayZPos)[iiPlane];
-    endCapLayerZPositionA[iiPlane] = row->getFloat("LAYERZPOSAWHEELS")*CLHEP::mm; 
+    endCapLayerZPositionA[iiPlane] = row->getFloat("LAYERZPOSAWHEELS")*GeoModelKernelUnits::mm; 
   };
   for (unsigned int iiPlane = 0; iiPlane < endCapNumberOfStrawLayersPerWheelB; iiPlane++) {
     const IRDBRecord* row = (*RDB_EndCapStrwLayZPos)[iiPlane];
-    endCapLayerZPositionB[iiPlane] = row->getFloat("LAYERZPOSBWHEELS")*CLHEP::mm; 
+    endCapLayerZPositionB[iiPlane] = row->getFloat("LAYERZPOSBWHEELS")*GeoModelKernelUnits::mm; 
   };
   for (unsigned int iiPlane = 0; iiPlane < endCapNumberOfStrawLayersPerWheelC; iiPlane++) {
     const IRDBRecord* row = (*RDB_EndCapStrwLayZPos)[iiPlane];
-    endCapLayerZPositionC[iiPlane] = row->getFloat("LAYERZPOSCWHEELS")*CLHEP::mm;
+    endCapLayerZPositionC[iiPlane] = row->getFloat("LAYERZPOSCWHEELS")*GeoModelKernelUnits::mm;
   };
  
 
@@ -467,27 +467,27 @@ void TRT_DetDescrDB_ParameterInterface::SetValues() {
     const IRDBRecord* RDBVars_ECHeatExchAndFoil = (*RDB_ECHeatExchAndFoil)[0];
 
     // Faraday foils kapton
-    endCapFaradayFoilThickness = RDBVars_ECHeatExchAndFoil->getDouble("ECFARADAYFOILTHICK")*CLHEP::mm;
+    endCapFaradayFoilThickness = RDBVars_ECHeatExchAndFoil->getDouble("ECFARADAYFOILTHICK")*GeoModelKernelUnits::mm;
     
     // Heat Exchanger
-    endCapRMinOfHeatExchanger  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHANGERRMIN")*CLHEP::mm;
-    endCapRMaxOfHeatExchanger  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHANGERRMAX")*CLHEP::mm;
-    endCapHeatExchangerThicknessA  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHTHICKNESSA")*CLHEP::mm;
-    endCapHeatExchangerThicknessB  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHTHICKNESSB")*CLHEP::mm;
+    endCapRMinOfHeatExchanger  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHANGERRMIN")*GeoModelKernelUnits::mm;
+    endCapRMaxOfHeatExchanger  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHANGERRMAX")*GeoModelKernelUnits::mm;
+    endCapHeatExchangerThicknessA  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHTHICKNESSA")*GeoModelKernelUnits::mm;
+    endCapHeatExchangerThicknessB  = RDBVars_ECHeatExchAndFoil->getDouble("ECHEATEXCHTHICKNESSB")*GeoModelKernelUnits::mm;
     
     // Membranes 
     const IRDBRecord* RDBVars_ECMembranePars = (*RDB_ECMembranePars)[0];
 
-    endCapRMinOfMbrane = RDBVars_ECMembranePars->getDouble("RMINOFENDCAPMBRANE")*CLHEP::mm;
-    endCapRMaxOfMbrane = RDBVars_ECMembranePars->getDouble("RMAXOFENDCAPMBRANE")*CLHEP::mm;
-    endCapZMinOfMbraneWheelA1 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELA1")*CLHEP::mm;
-    endCapZMaxOfMbraneWheelA1 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELA1")*CLHEP::mm;
-    endCapZMinOfMbraneWheelA2 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELA2")*CLHEP::mm;
-    endCapZMaxOfMbraneWheelA2 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELA2")*CLHEP::mm;
-    endCapZMinOfMbraneWheelB1 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELB1")*CLHEP::mm;
-    endCapZMaxOfMbraneWheelB1 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELB1")*CLHEP::mm;
-    endCapZMinOfMbraneWheelB2 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELB2")*CLHEP::mm;
-    endCapZMaxOfMbraneWheelB2 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELB2")*CLHEP::mm;
+    endCapRMinOfMbrane = RDBVars_ECMembranePars->getDouble("RMINOFENDCAPMBRANE")*GeoModelKernelUnits::mm;
+    endCapRMaxOfMbrane = RDBVars_ECMembranePars->getDouble("RMAXOFENDCAPMBRANE")*GeoModelKernelUnits::mm;
+    endCapZMinOfMbraneWheelA1 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELA1")*GeoModelKernelUnits::mm;
+    endCapZMaxOfMbraneWheelA1 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELA1")*GeoModelKernelUnits::mm;
+    endCapZMinOfMbraneWheelA2 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELA2")*GeoModelKernelUnits::mm;
+    endCapZMaxOfMbraneWheelA2 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELA2")*GeoModelKernelUnits::mm;
+    endCapZMinOfMbraneWheelB1 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELB1")*GeoModelKernelUnits::mm;
+    endCapZMaxOfMbraneWheelB1 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELB1")*GeoModelKernelUnits::mm;
+    endCapZMinOfMbraneWheelB2 = RDBVars_ECMembranePars->getDouble("ZMINPOSMBRANEWHEELB2")*GeoModelKernelUnits::mm;
+    endCapZMaxOfMbraneWheelB2 = RDBVars_ECMembranePars->getDouble("ZMAXPOSMBRANEWHEELB2")*GeoModelKernelUnits::mm;
 
     endCapThicknessOfMbrane = endCapZMaxOfMbraneWheelA1 - endCapZMinOfMbraneWheelA1;
 
@@ -499,11 +499,11 @@ TRT_DetDescrDB_ParameterInterface::distortedMatManager() const
   return m_distortedMatManager;
 }
 
-const HepGeom::Transform3D &
+const GeoTrf::Transform3D &
 TRT_DetDescrDB_ParameterInterface::partTransform(const std::string & partName) const
 {
   if (m_placements) return m_placements->transform(partName);
-  static HepGeom::Transform3D unitTransform = HepGeom::Transform3D();
+  static GeoTrf::Transform3D unitTransform = GeoTrf::Transform3D::Identity();
   return unitTransform;
 }
 
diff --git a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.h b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.h
index fa76e2f5ada61b3fd2dbb605306b11b32689cd4a..bf9e5a4aec3409318e2d5f073f889f72ab9d98c6 100755
--- a/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.h
+++ b/InnerDetector/InDetDetDescr/TRT_GeoModel/src/TRT_DetDescrDB_ParameterInterface.h
@@ -30,7 +30,7 @@ public:
   // delete assignment
   TRT_DetDescrDB_ParameterInterface & operator=(const TRT_DetDescrDB_ParameterInterface &) = delete;
   //
-  virtual const HepGeom::Transform3D & partTransform(const std::string & partName) const;
+  virtual const GeoTrf::Transform3D & partTransform(const std::string & partName) const;
   virtual bool partPresent(const std::string & partName) const;
   virtual const InDetDD::DistortedMaterialManager * distortedMatManager() const;
 
diff --git a/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx b/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
index 4afd4454b305ce409508878427f1fac8b91516e3..2d6e5d0a7be7779f7022a8480ab5ba69ac00d666 100644
--- a/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
+++ b/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
@@ -1090,7 +1090,7 @@ StatusCode SiSmearedDigitizationTool::digitize()
       } else {
         const Trk::Surface* hitSurface = &hitPlanarDetElement->surface();
         const Amg::Transform3D& sTransform = hitSurface->transform().inverse();
-        const Amg::Transform3D& hitTransform = Amg::CLHEPTransformToEigen(hitPlanarDetElement->transformHit());
+        const Amg::Transform3D& hitTransform = hitPlanarDetElement->transformHit();
         Amg::Vector3D localStartPosition(pix_localStartPosition.x(), pix_localStartPosition.y(), pix_localStartPosition.z());
         Amg::Vector3D localEndPosition(pix_localEndPosition.x(), pix_localEndPosition.y(), pix_localEndPosition.z());
         Amg::Vector3D localEntry(sTransform*(hitTransform*localStartPosition));
@@ -1124,7 +1124,7 @@ StatusCode SiSmearedDigitizationTool::digitize()
         } else {
           const Trk::Surface* hitSurface = &hitPlanarDetElement->surface();
           const Amg::Transform3D& sTransform = hitSurface->transform().inverse();
-          const Amg::Transform3D& hitTransform = Amg::CLHEPTransformToEigen( hitPlanarDetElement->transformHit());
+          const Amg::Transform3D& hitTransform = hitPlanarDetElement->transformHit();
           Amg::Vector3D localStartPosition(sct_localStartPosition.x(), sct_localStartPosition.y(), sct_localStartPosition.z());
           ATH_MSG_DEBUG( "--- SiSmearedDigitizationTool: SCT local start position --- " << localStartPosition.x() << ",  " << localStartPosition.y() << ",  " << localStartPosition.z());
           Amg::Vector3D localEndPosition(sct_localEndPosition.x(), sct_localEndPosition.y(), sct_localEndPosition.z());
diff --git a/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/CMakeLists.txt b/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/CMakeLists.txt
index c9dc1faa8e82a4ce94a098b269a67c5b85a92316..25d25e764a97c304322aaf7489501b29e76bcb44 100644
--- a/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/CMakeLists.txt
+++ b/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/CMakeLists.txt
@@ -17,13 +17,14 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread MathMore Minuit Minuit2 Matrix Physics HistPainter Rint RooFitCore RooFit Graf Graf3d Gpad Html Postscript Gui GX11TTF GX11 )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( InDetDiMuonMonitoring
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaMonitoringLib xAODMuon xAODTracking GaudiKernel StoreGateLib SGtests EventInfo )
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaMonitoringLib xAODMuon xAODTracking GaudiKernel StoreGateLib SGtests EventInfo )
 
 # Install files from the package:
 atlas_install_headers( InDetDiMuonMonitoring )
diff --git a/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/src/DiMuMon.cxx b/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/src/DiMuMon.cxx
index 1b7d402ae8ffebf1dc6117004a2cd43325a8e03c..56e829944baa733865b184a5fdf99b8feedc5180 100644
--- a/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/src/DiMuMon.cxx
+++ b/InnerDetector/InDetMonitoring/InDetDiMuonMonitoring/src/DiMuMon.cxx
@@ -6,6 +6,7 @@
 #include "GaudiKernel/IJobOptionsSvc.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/StatusCode.h"
+#include "GeoModelKernel/Units.h"
 
 #include "StoreGate/StoreGateSvc.h"
 #include "InDetDiMuonMonitoring/DiMuMon.h"
@@ -102,10 +103,10 @@ StatusCode DiMuMon::initialize(){
 
   //resonance independent
   // for eta these are filled as the histograms are declared due to the dependence between region and eta
-  m_varRanges["phi"] = std::make_pair(-CLHEP::pi,CLHEP::pi);
-  m_varRanges["phiAll"] = std::make_pair(-CLHEP::pi,CLHEP::pi);
-  m_varRanges["phiPos"] = std::make_pair(-CLHEP::pi,CLHEP::pi);
-  m_varRanges["phiNeg"] = std::make_pair(-CLHEP::pi,CLHEP::pi);
+  m_varRanges["phi"] = std::make_pair(-GeoModelKernelUnits::pi,GeoModelKernelUnits::pi);
+  m_varRanges["phiAll"] = std::make_pair(-GeoModelKernelUnits::pi,GeoModelKernelUnits::pi);
+  m_varRanges["phiPos"] = std::make_pair(-GeoModelKernelUnits::pi,GeoModelKernelUnits::pi);
+  m_varRanges["phiNeg"] = std::make_pair(-GeoModelKernelUnits::pi,GeoModelKernelUnits::pi);
   m_varRanges["etaSumm"] = std::make_pair(-5.,5.);
 
   //resonance dependent
@@ -120,7 +121,7 @@ StatusCode DiMuMon::initialize(){
     ptMax = 18.;
   } else if (m_resonName=="Zmumu") {
     m_varRanges["eta"] = std::make_pair(-5.,5.);
-    m_varRanges["phiDiff"] = std::make_pair(0.,CLHEP::pi);
+    m_varRanges["phiDiff"] = std::make_pair(0.,GeoModelKernelUnits::pi);
     m_varRanges["etaDiff"] = std::make_pair(-3.,3.);
     m_varRanges["crtDiff"] = std::make_pair(-0.03,0.03);
     m_varRanges["phiSumm"] = std::make_pair(-3.5,3.5);
@@ -261,7 +262,7 @@ StatusCode DiMuMon::fillHistograms()
 
   //  if (m_lumiBlockNum<402 || m_lumiBlockNum>1330) return StatusCode::SUCCESS;
 
-  double muonMass = 105.66*CLHEP::MeV;
+  double muonMass = 105.66*GeoModelKernelUnits::MeV;
   //retrieve all muons
   const xAOD::MuonContainer* muons(0);
   StatusCode sc = evtStore()->retrieve(muons, m_muonCollection);
@@ -356,15 +357,15 @@ StatusCode DiMuMon::fillHistograms()
 	double phiNeg = idNeg->phi();
 	m_varValues["phiNeg"] = phiNeg;
 	m_varValues["pt"] = getPt(idPos,idNeg);
-	double ptPos = idPos->pt()/CLHEP::GeV;
+	double ptPos = idPos->pt()/GeoModelKernelUnits::GeV;
 	m_varValues["ptPos"] = ptPos;
-	double ptNeg = idNeg->pt()/CLHEP::GeV;
+	double ptNeg = idNeg->pt()/GeoModelKernelUnits::GeV;
 	m_varValues["ptNeg"] = ptNeg;
 
 	m_varValues["crtDiff"] = getCrtDiff(idPos,idNeg);
 	m_varValues["etaDiff"] = etaPos - etaNeg;
 	double phiDiff = fabs(phiPos - phiNeg);
-	if (phiDiff>CLHEP::pi) phiDiff = 2*(CLHEP::pi) - phiDiff;
+	if (phiDiff>GeoModelKernelUnits::pi) phiDiff = 2*(GeoModelKernelUnits::pi) - phiDiff;
 	m_varValues["phiDiff"] = phiDiff;
 	m_varValues["etaSumm"] = etaPos + etaNeg;
 	m_varValues["phiSumm"] = phiPos + phiNeg;
@@ -661,7 +662,7 @@ double DiMuMon::getInvmass(const xAOD::TrackParticle* id1, const xAOD::TrackPart
   particle1.SetPtEtaPhiE(id1->pt(),id1->eta(),id1->phi(),sqrt(pow(Mass,2)+pow(id1->p4().Px(),2)+pow(id1->p4().Py(),2)+pow(id1->p4().Pz(),2)));
   particle2.SetPtEtaPhiE(id2->pt(),id2->eta(),id2->phi(),sqrt(pow(Mass,2)+pow(id2->p4().Px(),2)+pow(id2->p4().Py(),2)+pow(id2->p4().Pz(),2)));
   v=particle1+particle2;
-  double invmass = v.Mag()/CLHEP::GeV;
+  double invmass = v.Mag()/GeoModelKernelUnits::GeV;
   return invmass;
 }
 
@@ -670,7 +671,7 @@ double DiMuMon::getPt(const xAOD::TrackParticle* id1, const xAOD::TrackParticle*
   double px = id1->p4().Px()+id2->p4().Px();
   double py = id1->p4().Py()+id2->p4().Py();
   transmom=sqrt(px*px+py*py);
-  return transmom/CLHEP::GeV;  //Gev
+  return transmom/GeoModelKernelUnits::GeV;  //Gev
 }
 
 double DiMuMon::getEta(const xAOD::TrackParticle* id1, const xAOD::TrackParticle* id2 ) const {
diff --git a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/MuonSelector.cxx b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/MuonSelector.cxx
index 3284a786125daa7c67a7c8828127af8c941ebb34..17f6c041a0d7cd10c285b1527690259b2d81df51 100644
--- a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/MuonSelector.cxx
+++ b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/MuonSelector.cxx
@@ -22,6 +22,7 @@
 // ATLAS headers
 #include "StoreGate/StoreGateSvc.h"
 #include "CLHEP/Random/RandFlat.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "GaudiKernel/IToolSvc.h"
 
diff --git a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/ZmumuEvent.cxx b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/ZmumuEvent.cxx
index b6c48e41003288bbe890cf1a958939072a1f3c6a..6718df59a6b3e5643e249d27a96955c6e64ea02b 100644
--- a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/ZmumuEvent.cxx
+++ b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/src/ZmumuEvent.cxx
@@ -17,6 +17,7 @@
 // ATLAS headers
 #include "StoreGate/StoreGateSvc.h"
 #include "CLHEP/Random/RandFlat.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "xAODMuon/Muon.h"
 #include "xAODMuon/MuonContainer.h"
diff --git a/InnerDetector/InDetRecAlgs/TRT_StandaloneTrackFinder/src/TRT_StandaloneTrackFinder.cxx b/InnerDetector/InDetRecAlgs/TRT_StandaloneTrackFinder/src/TRT_StandaloneTrackFinder.cxx
index 531993710f08e2ab3fa014265f56dfee5cba4465..73694907705ba20c75c1f83df8439b4812384e85 100644
--- a/InnerDetector/InDetRecAlgs/TRT_StandaloneTrackFinder/src/TRT_StandaloneTrackFinder.cxx
+++ b/InnerDetector/InDetRecAlgs/TRT_StandaloneTrackFinder/src/TRT_StandaloneTrackFinder.cxx
@@ -22,7 +22,8 @@
 
 #include "InDetRecToolInterfaces/ITRT_SegmentToTrackTool.h"
 #include "CxxUtils/make_unique.h"
-using CLHEP::GeV;
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
 
 ///////////////////////////////////////////////////////////////////
 // Constructor
diff --git a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/SingleTrackConversionTool.cxx b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/SingleTrackConversionTool.cxx
index b2d7e42aa12f4e7652b1ea57c7ae136fa4447454..7fad19481998c628c155363d185035c0c2cdfef0 100644
--- a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/SingleTrackConversionTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/SingleTrackConversionTool.cxx
@@ -31,6 +31,7 @@
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/VertexContainer.h"
 
+#include "CLHEP/Geometry/Transform3D.h"
 using HepGeom::Transform3D;
 
 namespace InDet {
diff --git a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/VertexPointEstimator.cxx b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/VertexPointEstimator.cxx
index 473aaf47f6f442b9e8fc62a6c2f454e2d4da1248..4f637ca66ec0943e616ff9f070d5f55840ef74a5 100644
--- a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/VertexPointEstimator.cxx
+++ b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/VertexPointEstimator.cxx
@@ -11,6 +11,7 @@
 		changes : M.ELSING
 ***************************************************************************/ 
 #include "InDetConversionFinderTools/VertexPointEstimator.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 #include "TMath.h"
 
 //Do we need to replace this?
diff --git a/InnerDetector/InDetRecTools/InDetDNASeparator/src/InDetDNASeparator.cxx b/InnerDetector/InDetRecTools/InDetDNASeparator/src/InDetDNASeparator.cxx
index 2c5ca2a7a87db861f74c64611a5041ba58e48c6f..02693ea89f4593d4b5be8381ed641bda1c20abe3 100644
--- a/InnerDetector/InDetRecTools/InDetDNASeparator/src/InDetDNASeparator.cxx
+++ b/InnerDetector/InDetRecTools/InDetDNASeparator/src/InDetDNASeparator.cxx
@@ -15,6 +15,7 @@
 #include "TrkMeasurementBase/MeasurementBase.h"
 #include "TrkSurfaces/Surface.h"
 #include "TrkFitterUtils/DNA_MaterialEffects.h"
+#include "GaudiKernel/SystemOfUnits.h""
 //#include "TrkParameters/MeasuredTrackParameters.h"
 // #include "TrkFitterUtils/ProtoTrajectoryUtility.h"
 
@@ -28,7 +29,7 @@ InDet::InDetDNASeparator::InDetDNASeparator(const std::string& t,
   :
   AthAlgTool(t,n,p),
   m_kutoff(4.50),
-  m_floorseparation_drr(4.00*CLHEP::mm),
+  m_floorseparation_drr(4.00*Gaudi::Units::mm),
   // Initialization of ID SCT helper
   m_SCT_Tool(nullptr),
   // Initialization of ID Pixel helper
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
index cfa203f2f25240af0ff617d2efdc21ded4813d17..c19de8a07677a8233619bdefae4105d70733a257 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
@@ -23,6 +23,7 @@
 
 // normal includes
 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
+#include "CLHEP/Units/SystemOfUnits.h"
 #include "TrkSurfaces/PerigeeSurface.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "EventPrimitives/EventPrimitives.h"
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetIsoTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetIsoTrackSelectorTool.cxx
index 006dbe6a78da397f7a67fffcd5fa618f9511158c..41ca00683acdc83d87ceccfa97b3a4ea3082eab0 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetIsoTrackSelectorTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetIsoTrackSelectorTool.cxx
@@ -9,6 +9,7 @@
 #include "TrkTrack/Track.h"
 #include "TrkParticleBase/TrackParticleBase.h"
 #include "TrkSurfaces/StraightLineSurface.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 using CLHEP::mm;
 
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetTrackSelectorTool.cxx
index 763e4e9a0900721c8ccc11dc495d28a550666b8b..163628087547ac41995a61b5024320893afbc011 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetTrackSelectorTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetTrackSelectorTool.cxx
@@ -12,6 +12,7 @@
 // normal includes
 #include "TrkTrackSummary/TrackSummary.h"
 #include "CLHEP/Matrix/Vector.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 using CLHEP::mm;
 
diff --git a/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/src/SimpleTRT_SeededSpacePointFinder_ATL.cxx b/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/src/SimpleTRT_SeededSpacePointFinder_ATL.cxx
index a47d7fa5d4b033191fc780e63a5f6318e1b5953f..40b34315b7335167268b254ece4f6a5a9d1dac89 100755
--- a/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/src/SimpleTRT_SeededSpacePointFinder_ATL.cxx
+++ b/InnerDetector/InDetRecTools/TRT_SeededSpacePointFinderTool/src/SimpleTRT_SeededSpacePointFinder_ATL.cxx
@@ -17,6 +17,7 @@
 #include "GaudiKernel/MsgStream.h"
 //#include "StoreGate/StoreGateSvc.h"
 #include "CLHEP/Vector/ThreeVector.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 #include "TrkSpacePoint/SpacePointCLASS_DEF.h" 
 #include "TRT_SeededSpacePointFinderTool/SimpleTRT_SeededSpacePointFinder_ATL.h"
 #include "InDetIdentifier/SCT_ID.h"
diff --git a/InnerDetector/InDetValidation/InDetRecStatistics/src/TrackStatHelper.cxx b/InnerDetector/InDetValidation/InDetRecStatistics/src/TrackStatHelper.cxx
index 7de23e1600d431f92ea84f5930ff1a01c9c88f1f..64cbe9f0ff7988fbf60d71d7f48ea93e0328e1d5 100755
--- a/InnerDetector/InDetValidation/InDetRecStatistics/src/TrackStatHelper.cxx
+++ b/InnerDetector/InDetValidation/InDetRecStatistics/src/TrackStatHelper.cxx
@@ -33,6 +33,7 @@
 #include <map>
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
+#include "CLHEP/Geometry/Point3D.h"
 
 namespace Trk {
 
diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt
index 47f633e2902a5ccf8a8d7209005f698b2ea1d1f7..f8a6ffa440113540020cc0722a4a201e7274c37d 100644
--- a/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt
+++ b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt
@@ -34,7 +34,6 @@ atlas_depends_on_subdirs(
    InnerDetector/InDetConditions/TRT_ConditionsServices
    InnerDetector/InDetDetDescr/InDetIdentifier
    InnerDetector/InDetDetDescr/InDetReadoutGeometry
-   InnerDetector/InDetDetDescr/PixelGeoModel
    InnerDetector/InDetDetDescr/SCT_Cabling
    InnerDetector/InDetRecEvent/InDetRIO_OnTrack
    InnerDetector/InDetValidation/InDetTrackSplitterTool
@@ -60,5 +59,4 @@ atlas_add_component( InDetTrackValidation
    EventPrimitives GeneratorObjects TRT_ConditionsData
    TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry SCT_CablingLib
    InDetRIO_OnTrack TrkSurfaces TrkEventPrimitives TrkMeasurementBase
-   TrkPrepRawData TrkRIO_OnTrack TrkToolInterfaces
-   PixelGeoModelLib )
+   TrkPrepRawData TrkRIO_OnTrack TrkToolInterfaces )
diff --git a/LArCalorimeter/LArDetDescr/CMakeLists.txt b/LArCalorimeter/LArDetDescr/CMakeLists.txt
index 173c20bf3e9ff8ff391775ed9513e838a1f8242b..f08de4493a0393fa1be04a98137b5c27214a1bcf 100644
--- a/LArCalorimeter/LArDetDescr/CMakeLists.txt
+++ b/LArCalorimeter/LArDetDescr/CMakeLists.txt
@@ -11,7 +11,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloGeoHelpers
                           Control/AthenaBaseComps
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/Identifier
                           GaudiKernel
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
@@ -28,13 +27,14 @@ find_package( Boost COMPONENTS filesystem thread system )
 find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArDetDescr
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel CaloDetDescrLib CaloGeoHelpers AthenaBaseComps GeoModelKernel Identifier GaudiKernel LArReadoutGeometry CaloIdentifier StoreGateLib SGtests GeoModelUtilities GeoPrimitives )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel CaloDetDescrLib CaloGeoHelpers AthenaBaseComps Identifier GaudiKernel LArReadoutGeometry CaloIdentifier StoreGateLib SGtests GeoModelUtilities GeoPrimitives )
 
 # Install files from the package:
 atlas_install_headers( LArDetDescr )
diff --git a/LArCalorimeter/LArDetDescr/LArDetDescr/FindVolAction.h b/LArCalorimeter/LArDetDescr/LArDetDescr/FindVolAction.h
deleted file mode 100755
index 8736bfe7ccdeec7f0b96107b6a7dc0c2069c11b5..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArDetDescr/LArDetDescr/FindVolAction.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FINDVOLACTION_H
-#define FINDVOLACTION_H
-
-#include "GeoModelKernel/GeoVolumeAction.h"
-
-class FindVolAction :public GeoVolumeAction
-{
- public:
-    //constructor
-    FindVolAction (PVConstLink startPV,
-		   std::string volumeName,
-		   int identifier);
-
-    //desctructor
-    ~FindVolAction ();
-
-    // volume with this name exists
-    bool volumeExists() const;
-
-    // Returns the selected physical volume or NULL if not found
-    PVConstLink getVolume () const;
-
-    // Returns the global transformation to the volume
-    HepGeom::Transform3D getGlobalTransform () const;
- private:
-
-    bool                                  m_volumeExists;
-    std::string                           m_volumeName;
-    int                                   m_identifier;
-    HepGeom::Transform3D                        m_globalTransform;
-    PVConstLink                           m_volume;
-
-    void handleVPhysVol (const GeoVPhysVol *);
-    
-};
-
-
-#endif 
diff --git a/LArCalorimeter/LArDetDescr/src/FindVolAction.cxx b/LArCalorimeter/LArDetDescr/src/FindVolAction.cxx
deleted file mode 100755
index 9d7b54448791bd41d49747eb0cf2aa368b9062f5..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArDetDescr/src/FindVolAction.cxx
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "LArDetDescr/FindVolAction.h"
-
-FindVolAction::FindVolAction (PVConstLink startPV,
-			      std::string volumeName,
-			      int identifier)
-  :GeoVolumeAction (GeoVolumeAction::TOP_DOWN),
-   m_volumeExists(false),
-   m_volumeName(volumeName),
-   m_identifier(identifier),
-   m_volume(0)
-{
-  //std::cout << " ---> FindVolAction constructed\n";
-  startPV->apply(this);
-}
-
-FindVolAction::~FindVolAction ()
-{
-}
-
-PVConstLink FindVolAction::getVolume () const
-{
-  return m_volume;
-}
-
-HepGeom::Transform3D FindVolAction::getGlobalTransform () const
-{
-  return m_globalTransform;
-}
-
-bool FindVolAction::volumeExists() const
-{
-  return m_volumeExists;
-}
-
-void FindVolAction::handleVPhysVol (const GeoVPhysVol *pv) 
-{
-  GeoTraversalState* state = getState();
-  Query<int> Qint = state->getId();
-  std::string pvName = state->getName();
-  std::string lvName = pv->getLogVol()->getName();
-  
-  // Print out :
-  /*
-  std::cout << " VOL ACTION. Visiting = " << pvName
-	    << " " << lvName << " ";
-  if(Qint.isValid())
-    std::cout << Qint;
-  else
-    std::cout << "xxx";
-  std::cout << "\n";
-  */
-  
-  // If there is a copy number use it :
-  if ( m_identifier >= 0 ) {
-    
-    if((pvName==m_volumeName || lvName==m_volumeName) &&
-       Qint.isValid() && Qint == m_identifier)
-      {
-	//std::cout << " ***  FOUND! " << "\n";
-	m_volumeExists = true;
-	m_globalTransform = state->getAbsoluteTransform();
-	m_volume = pv;
-	terminate();
-      }
-  }
-  // If not :
-  else {
-    
-    if((pvName==m_volumeName || lvName==m_volumeName) ) {
-      //std::cout << " ***  FOUND! " << "\n";
-      m_volumeExists = true;
-      m_globalTransform = state->getAbsoluteTransform();
-      m_volume = pv;
-      terminate();
-    } 
-  }
-}
-
-
diff --git a/LArCalorimeter/LArDetDescr/src/LArNumberHelper.cxx b/LArCalorimeter/LArDetDescr/src/LArNumberHelper.cxx
index 62aea79b58c851c2eb1aa60d87f453368a35ef7e..b2df85629c45e7e3d76d345566cc564ada65ec7b 100755
--- a/LArCalorimeter/LArDetDescr/src/LArNumberHelper.cxx
+++ b/LArCalorimeter/LArDetDescr/src/LArNumberHelper.cxx
@@ -16,7 +16,6 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 
 #include "CLHEP/Geometry/Point3D.h"
-#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "CaloIdentifier/CaloID.h"
 #include "CaloIdentifier/CaloIdManager.h"
@@ -24,7 +23,7 @@
 #include "LArDetDescr/LArCellVolumes.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
-
+#include "GeoModelKernel/Units.h"
 
 LArNumberHelper::LArNumberHelper(const std::string geometry) :
   m_geometry(geometry),
@@ -496,49 +495,49 @@ LArNumberHelper::db_nb_em()
   //std::cout << " ----- in db_nb_em tags are : " << m_tag << " " << m_node << std::endl;
 
   // PS
-  // m_emb_psin = 141.23*CLHEP::cm;    // this is the TDR number 1385 mm + 27.3 mm   
+  // m_emb_psin = 141.23*GeoModelKernelUnits::cm;    // this is the TDR number 1385 mm + 27.3 mm   
   //  ----> overwritten
 
   m_lar = m_iAccessSvc->getRecordsetPtr("PresamplerGeometry","ATLAS-00","ATLAS");
 
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];
-    m_emb_psin = m_rec->getDouble("RACTIVE")*CLHEP::cm;
+    m_emb_psin = m_rec->getDouble("RACTIVE")*GeoModelKernelUnits::cm;
   }
 
   // ACCG :
-  // m_accg_rin_ac = 144.73*CLHEP::cm; // 1385mm + 27.3mm + 35mm
-  // m_accg_rout_ac = 200.35*CLHEP::cm; // end of active material
+  // m_accg_rin_ac = 144.73*GeoModelKernelUnits::cm; // 1385mm + 27.3mm + 35mm
+  // m_accg_rout_ac = 200.35*GeoModelKernelUnits::cm; // end of active material
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("BarrelGeometry",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_accg_rin_ac = m_rec->getDouble("RMIN") *CLHEP::cm;
-    m_accg_rout_ac = m_rec->getDouble("RMAX") *CLHEP::cm;
+    m_accg_rin_ac = m_rec->getDouble("RMIN") *GeoModelKernelUnits::cm;
+    m_accg_rout_ac = m_rec->getDouble("RMAX") *GeoModelKernelUnits::cm;
   }
 
   // ACCO :
   m_acco_rmx12.resize (8,(double) 0.); 
-  // m_acco_rmx12[0] = 158.6*CLHEP::cm;
-  // m_acco_rmx12[1] = 158.6*CLHEP::cm;
-  // m_acco_rmx12[2] = 157.07*CLHEP::cm;
-  // m_acco_rmx12[3] = 157.07*CLHEP::cm;
-  // m_acco_rmx12[4] = 154.83*CLHEP::cm;
-  // m_acco_rmx12[5] = 154.83*CLHEP::cm;
-  // m_acco_rmx12[6] = 153.23*CLHEP::cm;
-  // m_acco_rmx12[7] = 153.23*CLHEP::cm;
+  // m_acco_rmx12[0] = 158.6*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[1] = 158.6*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[2] = 157.07*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[3] = 157.07*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[4] = 154.83*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[5] = 154.83*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[6] = 153.23*GeoModelKernelUnits::cm;
+  // m_acco_rmx12[7] = 153.23*GeoModelKernelUnits::cm;
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("BarrelLongDiv",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_acco_rmx12[0] = m_rec->getDouble("RMX12_0")*CLHEP::cm;
-    m_acco_rmx12[1] = m_rec->getDouble("RMX12_1")*CLHEP::cm;
-    m_acco_rmx12[2] = m_rec->getDouble("RMX12_2")*CLHEP::cm;
-    m_acco_rmx12[3] = m_rec->getDouble("RMX12_3")*CLHEP::cm;
-    m_acco_rmx12[4] = m_rec->getDouble("RMX12_4")*CLHEP::cm;
-    m_acco_rmx12[5] = m_rec->getDouble("RMX12_5")*CLHEP::cm;
-    m_acco_rmx12[6] = m_rec->getDouble("RMX12_6")*CLHEP::cm;
-    m_acco_rmx12[7] = m_rec->getDouble("RMX12_7")*CLHEP::cm;
+    m_acco_rmx12[0] = m_rec->getDouble("RMX12_0")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[1] = m_rec->getDouble("RMX12_1")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[2] = m_rec->getDouble("RMX12_2")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[3] = m_rec->getDouble("RMX12_3")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[4] = m_rec->getDouble("RMX12_4")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[5] = m_rec->getDouble("RMX12_5")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[6] = m_rec->getDouble("RMX12_6")*GeoModelKernelUnits::cm;
+    m_acco_rmx12[7] = m_rec->getDouble("RMX12_7")*GeoModelKernelUnits::cm;
   }
 
   m_acco_ee12.resize (8,(double) 0.); 
@@ -566,84 +565,84 @@ LArNumberHelper::db_nb_em()
 
   m_acco_rmx23.resize (53,(double) 0.); 
   /*
-    m_acco_rmx23[0] = 192.83*CLHEP::cm;  ... up to :
-    m_acco_rmx23[52] = 178.89*CLHEP::cm;
+    m_acco_rmx23[0] = 192.83*GeoModelKernelUnits::cm;  ... up to :
+    m_acco_rmx23[52] = 178.89*GeoModelKernelUnits::cm;
   */
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("BarrelLongDiv",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_acco_rmx23[0] = m_rec->getDouble("RMX23_0")*CLHEP::cm;
-    m_acco_rmx23[1] = m_rec->getDouble("RMX23_1")*CLHEP::cm;
-    m_acco_rmx23[2] = m_rec->getDouble("RMX23_2")*CLHEP::cm;
-    m_acco_rmx23[3] = m_rec->getDouble("RMX23_3")*CLHEP::cm;
-    m_acco_rmx23[4] = m_rec->getDouble("RMX23_4")*CLHEP::cm;
-    m_acco_rmx23[5] = m_rec->getDouble("RMX23_5")*CLHEP::cm;
-    m_acco_rmx23[6] = m_rec->getDouble("RMX23_6")*CLHEP::cm;
-    m_acco_rmx23[7] = m_rec->getDouble("RMX23_7")*CLHEP::cm;
-    m_acco_rmx23[8] = m_rec->getDouble("RMX23_8")*CLHEP::cm;
-    m_acco_rmx23[9] = m_rec->getDouble("RMX23_9")*CLHEP::cm;
-    m_acco_rmx23[10] = m_rec->getDouble("RMX23_10")*CLHEP::cm;
-    m_acco_rmx23[11] = m_rec->getDouble("RMX23_11")*CLHEP::cm;
-    m_acco_rmx23[12] = m_rec->getDouble("RMX23_12")*CLHEP::cm;
-    m_acco_rmx23[13] = m_rec->getDouble("RMX23_13")*CLHEP::cm;
-    m_acco_rmx23[14] = m_rec->getDouble("RMX23_14")*CLHEP::cm;
-    m_acco_rmx23[15] = m_rec->getDouble("RMX23_15")*CLHEP::cm;
-    m_acco_rmx23[16] = m_rec->getDouble("RMX23_16")*CLHEP::cm;
-    m_acco_rmx23[17] = m_rec->getDouble("RMX23_17")*CLHEP::cm;
-    m_acco_rmx23[18] = m_rec->getDouble("RMX23_18")*CLHEP::cm;
-    m_acco_rmx23[19] = m_rec->getDouble("RMX23_19")*CLHEP::cm;
-    m_acco_rmx23[20] = m_rec->getDouble("RMX23_20")*CLHEP::cm;
-    m_acco_rmx23[21] = m_rec->getDouble("RMX23_21")*CLHEP::cm;
-    m_acco_rmx23[22] = m_rec->getDouble("RMX23_22")*CLHEP::cm;
-    m_acco_rmx23[23] = m_rec->getDouble("RMX23_23")*CLHEP::cm;
-    m_acco_rmx23[24] = m_rec->getDouble("RMX23_24")*CLHEP::cm;
-    m_acco_rmx23[25] = m_rec->getDouble("RMX23_25")*CLHEP::cm;
-    m_acco_rmx23[26] = m_rec->getDouble("RMX23_26")*CLHEP::cm;
-    m_acco_rmx23[27] = m_rec->getDouble("RMX23_27")*CLHEP::cm;
-    m_acco_rmx23[28] = m_rec->getDouble("RMX23_28")*CLHEP::cm;
-    m_acco_rmx23[29] = m_rec->getDouble("RMX23_29")*CLHEP::cm;
-    m_acco_rmx23[30] = m_rec->getDouble("RMX23_30")*CLHEP::cm;
-    m_acco_rmx23[31] = m_rec->getDouble("RMX23_31")*CLHEP::cm;
-    m_acco_rmx23[32] = m_rec->getDouble("RMX23_32")*CLHEP::cm;
-    m_acco_rmx23[33] = m_rec->getDouble("RMX23_33")*CLHEP::cm;
-    m_acco_rmx23[34] = m_rec->getDouble("RMX23_34")*CLHEP::cm;
-    m_acco_rmx23[35] = m_rec->getDouble("RMX23_35")*CLHEP::cm;
-    m_acco_rmx23[36] = m_rec->getDouble("RMX23_36")*CLHEP::cm;
-    m_acco_rmx23[37] = m_rec->getDouble("RMX23_37")*CLHEP::cm;
-    m_acco_rmx23[38] = m_rec->getDouble("RMX23_38")*CLHEP::cm;
-    m_acco_rmx23[39] = m_rec->getDouble("RMX23_39")*CLHEP::cm;
-    m_acco_rmx23[40] = m_rec->getDouble("RMX23_40")*CLHEP::cm;
-    m_acco_rmx23[41] = m_rec->getDouble("RMX23_41")*CLHEP::cm;
-    m_acco_rmx23[42] = m_rec->getDouble("RMX23_42")*CLHEP::cm;
-    m_acco_rmx23[43] = m_rec->getDouble("RMX23_43")*CLHEP::cm;
-    m_acco_rmx23[44] = m_rec->getDouble("RMX23_44")*CLHEP::cm;
-    m_acco_rmx23[45] = m_rec->getDouble("RMX23_45")*CLHEP::cm;
-    m_acco_rmx23[46] = m_rec->getDouble("RMX23_46")*CLHEP::cm;
-    m_acco_rmx23[47] = m_rec->getDouble("RMX23_47")*CLHEP::cm;
-    m_acco_rmx23[48] = m_rec->getDouble("RMX23_48")*CLHEP::cm;
-    m_acco_rmx23[49] = m_rec->getDouble("RMX23_49")*CLHEP::cm;
-    m_acco_rmx23[50] = m_rec->getDouble("RMX23_50")*CLHEP::cm;
-    m_acco_rmx23[51] = m_rec->getDouble("RMX23_51")*CLHEP::cm;
-    m_acco_rmx23[52] = m_rec->getDouble("RMX23_52")*CLHEP::cm;
+    m_acco_rmx23[0] = m_rec->getDouble("RMX23_0")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[1] = m_rec->getDouble("RMX23_1")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[2] = m_rec->getDouble("RMX23_2")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[3] = m_rec->getDouble("RMX23_3")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[4] = m_rec->getDouble("RMX23_4")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[5] = m_rec->getDouble("RMX23_5")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[6] = m_rec->getDouble("RMX23_6")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[7] = m_rec->getDouble("RMX23_7")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[8] = m_rec->getDouble("RMX23_8")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[9] = m_rec->getDouble("RMX23_9")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[10] = m_rec->getDouble("RMX23_10")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[11] = m_rec->getDouble("RMX23_11")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[12] = m_rec->getDouble("RMX23_12")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[13] = m_rec->getDouble("RMX23_13")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[14] = m_rec->getDouble("RMX23_14")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[15] = m_rec->getDouble("RMX23_15")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[16] = m_rec->getDouble("RMX23_16")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[17] = m_rec->getDouble("RMX23_17")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[18] = m_rec->getDouble("RMX23_18")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[19] = m_rec->getDouble("RMX23_19")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[20] = m_rec->getDouble("RMX23_20")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[21] = m_rec->getDouble("RMX23_21")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[22] = m_rec->getDouble("RMX23_22")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[23] = m_rec->getDouble("RMX23_23")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[24] = m_rec->getDouble("RMX23_24")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[25] = m_rec->getDouble("RMX23_25")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[26] = m_rec->getDouble("RMX23_26")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[27] = m_rec->getDouble("RMX23_27")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[28] = m_rec->getDouble("RMX23_28")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[29] = m_rec->getDouble("RMX23_29")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[30] = m_rec->getDouble("RMX23_30")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[31] = m_rec->getDouble("RMX23_31")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[32] = m_rec->getDouble("RMX23_32")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[33] = m_rec->getDouble("RMX23_33")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[34] = m_rec->getDouble("RMX23_34")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[35] = m_rec->getDouble("RMX23_35")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[36] = m_rec->getDouble("RMX23_36")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[37] = m_rec->getDouble("RMX23_37")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[38] = m_rec->getDouble("RMX23_38")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[39] = m_rec->getDouble("RMX23_39")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[40] = m_rec->getDouble("RMX23_40")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[41] = m_rec->getDouble("RMX23_41")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[42] = m_rec->getDouble("RMX23_42")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[43] = m_rec->getDouble("RMX23_43")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[44] = m_rec->getDouble("RMX23_44")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[45] = m_rec->getDouble("RMX23_45")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[46] = m_rec->getDouble("RMX23_46")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[47] = m_rec->getDouble("RMX23_47")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[48] = m_rec->getDouble("RMX23_48")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[49] = m_rec->getDouble("RMX23_49")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[50] = m_rec->getDouble("RMX23_50")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[51] = m_rec->getDouble("RMX23_51")*GeoModelKernelUnits::cm;
+    m_acco_rmx23[52] = m_rec->getDouble("RMX23_52")*GeoModelKernelUnits::cm;
   }
 
   // ENDG
-  // m_endg_zorig = 369.1*CLHEP::cm; // this is the NOVA/Oracle number
-  // m_emb_iwout = 422.7*CLHEP::cm;  // 369.1*CLHEP::cm + 53.6*CLHEP::cm is the end of the active part
-  // m_emec_out = 422.7*CLHEP::cm;  // 369.1*CLHEP::cm + 53.6*CLHEP::cm is the end of the active part
+  // m_endg_zorig = 369.1*GeoModelKernelUnits::cm; // this is the NOVA/Oracle number
+  // m_emb_iwout = 422.7*GeoModelKernelUnits::cm;  // 369.1*GeoModelKernelUnits::cm + 53.6*GeoModelKernelUnits::cm is the end of the active part
+  // m_emec_out = 422.7*GeoModelKernelUnits::cm;  // 369.1*GeoModelKernelUnits::cm + 53.6*GeoModelKernelUnits::cm is the end of the active part
   m_lar = m_iAccessSvc->getRecordsetPtr("EmecGeometry",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];
-    m_endg_zorig = m_rec->getDouble("Z1")*CLHEP::cm;
-    double epaisseurTotale =  m_rec->getDouble("ETOT")*CLHEP::cm;
+    m_endg_zorig = m_rec->getDouble("Z1")*GeoModelKernelUnits::cm;
+    double epaisseurTotale =  m_rec->getDouble("ETOT")*GeoModelKernelUnits::cm;
     m_emb_iwout = m_endg_zorig + epaisseurTotale;
     m_emec_out  = m_endg_zorig + epaisseurTotale;
 
   } 
 
   // Cryostat
-  // m_emec_psin = 362.5*CLHEP::cm; // notch in cold wall of cryostat
+  // m_emec_psin = 362.5*GeoModelKernelUnits::cm; // notch in cold wall of cryostat
   if ( m_geometry == "Atlas" ) {
     DecodeVersionKey detectorKeyAtl = DecodeVersionKey(m_geoModelSvc, "ATLAS");
     m_lar = m_iAccessSvc->getRecordsetPtr("PresamplerPosition",detectorKeyAtl.tag(),detectorKeyAtl.node());
@@ -653,74 +652,74 @@ LArNumberHelper::db_nb_em()
   }
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];
-    m_emec_psin = m_rec->getDouble("ZPOS")*CLHEP::cm;
+    m_emec_psin = m_rec->getDouble("ZPOS")*GeoModelKernelUnits::cm;
   } 
 
   // ESEP
   m_esep_iw23.resize(7, (double) 0.); 
-  // m_esep_iw23[0] = 413.934*CLHEP::cm;
-  // m_esep_iw23[1] = 412.518*CLHEP::cm;
-  // m_esep_iw23[2] = 411.792*CLHEP::cm;
-  // m_esep_iw23[3] = 409.545*CLHEP::cm;
-  // m_esep_iw23[4] = 407.987*CLHEP::cm;
-  // m_esep_iw23[5] = 407.510*CLHEP::cm;
-  // m_esep_iw23[6] = 404.730*CLHEP::cm;
+  // m_esep_iw23[0] = 413.934*GeoModelKernelUnits::cm;
+  // m_esep_iw23[1] = 412.518*GeoModelKernelUnits::cm;
+  // m_esep_iw23[2] = 411.792*GeoModelKernelUnits::cm;
+  // m_esep_iw23[3] = 409.545*GeoModelKernelUnits::cm;
+  // m_esep_iw23[4] = 407.987*GeoModelKernelUnits::cm;
+  // m_esep_iw23[5] = 407.510*GeoModelKernelUnits::cm;
+  // m_esep_iw23[6] = 404.730*GeoModelKernelUnits::cm;
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("EmecSamplingSep",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_esep_iw23[0] = m_rec->getDouble("ZIW_0")*CLHEP::cm;
-    m_esep_iw23[1] = m_rec->getDouble("ZIW_1")*CLHEP::cm;
-    m_esep_iw23[2] = m_rec->getDouble("ZIW_2")*CLHEP::cm;
-    m_esep_iw23[3] = m_rec->getDouble("ZIW_3")*CLHEP::cm;
-    m_esep_iw23[4] = m_rec->getDouble("ZIW_4")*CLHEP::cm;
-    m_esep_iw23[5] = m_rec->getDouble("ZIW_5")*CLHEP::cm;
-    m_esep_iw23[6] = m_rec->getDouble("ZIW_6")*CLHEP::cm;
+    m_esep_iw23[0] = m_rec->getDouble("ZIW_0")*GeoModelKernelUnits::cm;
+    m_esep_iw23[1] = m_rec->getDouble("ZIW_1")*GeoModelKernelUnits::cm;
+    m_esep_iw23[2] = m_rec->getDouble("ZIW_2")*GeoModelKernelUnits::cm;
+    m_esep_iw23[3] = m_rec->getDouble("ZIW_3")*GeoModelKernelUnits::cm;
+    m_esep_iw23[4] = m_rec->getDouble("ZIW_4")*GeoModelKernelUnits::cm;
+    m_esep_iw23[5] = m_rec->getDouble("ZIW_5")*GeoModelKernelUnits::cm;
+    m_esep_iw23[6] = m_rec->getDouble("ZIW_6")*GeoModelKernelUnits::cm;
 }
 
-  // m_esep_zsep12 = 378.398*CLHEP::cm;   
+  // m_esep_zsep12 = 378.398*GeoModelKernelUnits::cm;   
   // Note that in the gometryDB this is an array, but
   // of very similar numbers -> Zebra was using 1rst value only
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("EmecSamplingSep",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_esep_zsep12 = m_rec->getDouble("ZSEP12_0")*CLHEP::cm;
+    m_esep_zsep12 = m_rec->getDouble("ZSEP12_0")*GeoModelKernelUnits::cm;
   }
 
   m_esep_zsep23.resize(22, (double) 0.); 
   /*
-  m_esep_zsep23 [0] = 999.999*CLHEP::cm;       // inheritance from Zebra.
-  m_esep_zsep23 [1] = 999.999*CLHEP::cm;       // will be skipped in hard_em
-  m_esep_zsep23 [2] = 413.205*CLHEP::cm;   ... up to :
-  m_esep_zsep23 [21] = 401.153*CLHEP::cm;
+  m_esep_zsep23 [0] = 999.999*GeoModelKernelUnits::cm;       // inheritance from Zebra.
+  m_esep_zsep23 [1] = 999.999*GeoModelKernelUnits::cm;       // will be skipped in hard_em
+  m_esep_zsep23 [2] = 413.205*GeoModelKernelUnits::cm;   ... up to :
+  m_esep_zsep23 [21] = 401.153*GeoModelKernelUnits::cm;
   */
   //  ----> overwritten
   m_lar = m_iAccessSvc->getRecordsetPtr("EmecSamplingSep",m_tag,m_node);
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];  
-    m_esep_zsep23 [0] = m_rec->getDouble("ZSEP23_0")*CLHEP::cm;
-    m_esep_zsep23 [1] = m_rec->getDouble("ZSEP23_1")*CLHEP::cm;
-    m_esep_zsep23 [2] = m_rec->getDouble("ZSEP23_2")*CLHEP::cm;
-    m_esep_zsep23 [3] = m_rec->getDouble("ZSEP23_3")*CLHEP::cm;
-    m_esep_zsep23 [4] = m_rec->getDouble("ZSEP23_4")*CLHEP::cm;
-    m_esep_zsep23 [5] = m_rec->getDouble("ZSEP23_5")*CLHEP::cm;
-    m_esep_zsep23 [6] = m_rec->getDouble("ZSEP23_6")*CLHEP::cm;
-    m_esep_zsep23 [7] = m_rec->getDouble("ZSEP23_7")*CLHEP::cm;
-    m_esep_zsep23 [8] = m_rec->getDouble("ZSEP23_8")*CLHEP::cm;
-    m_esep_zsep23 [9] = m_rec->getDouble("ZSEP23_9")*CLHEP::cm;
-    m_esep_zsep23 [10] = m_rec->getDouble("ZSEP23_10")*CLHEP::cm;
-    m_esep_zsep23 [11] = m_rec->getDouble("ZSEP23_11")*CLHEP::cm;
-    m_esep_zsep23 [12] = m_rec->getDouble("ZSEP23_12")*CLHEP::cm;
-    m_esep_zsep23 [13] = m_rec->getDouble("ZSEP23_13")*CLHEP::cm;
-    m_esep_zsep23 [14] = m_rec->getDouble("ZSEP23_14")*CLHEP::cm;
-    m_esep_zsep23 [15] = m_rec->getDouble("ZSEP23_15")*CLHEP::cm;
-    m_esep_zsep23 [16] = m_rec->getDouble("ZSEP23_16")*CLHEP::cm;
-    m_esep_zsep23 [17] = m_rec->getDouble("ZSEP23_17")*CLHEP::cm;
-    m_esep_zsep23 [18] = m_rec->getDouble("ZSEP23_18")*CLHEP::cm;
-    m_esep_zsep23 [19] = m_rec->getDouble("ZSEP23_19")*CLHEP::cm;
-    m_esep_zsep23 [20] = m_rec->getDouble("ZSEP23_20")*CLHEP::cm;
-    m_esep_zsep23 [21] = m_rec->getDouble("ZSEP23_21")*CLHEP::cm;
+    m_esep_zsep23 [0] = m_rec->getDouble("ZSEP23_0")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [1] = m_rec->getDouble("ZSEP23_1")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [2] = m_rec->getDouble("ZSEP23_2")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [3] = m_rec->getDouble("ZSEP23_3")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [4] = m_rec->getDouble("ZSEP23_4")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [5] = m_rec->getDouble("ZSEP23_5")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [6] = m_rec->getDouble("ZSEP23_6")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [7] = m_rec->getDouble("ZSEP23_7")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [8] = m_rec->getDouble("ZSEP23_8")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [9] = m_rec->getDouble("ZSEP23_9")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [10] = m_rec->getDouble("ZSEP23_10")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [11] = m_rec->getDouble("ZSEP23_11")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [12] = m_rec->getDouble("ZSEP23_12")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [13] = m_rec->getDouble("ZSEP23_13")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [14] = m_rec->getDouble("ZSEP23_14")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [15] = m_rec->getDouble("ZSEP23_15")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [16] = m_rec->getDouble("ZSEP23_16")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [17] = m_rec->getDouble("ZSEP23_17")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [18] = m_rec->getDouble("ZSEP23_18")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [19] = m_rec->getDouble("ZSEP23_19")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [20] = m_rec->getDouble("ZSEP23_20")*GeoModelKernelUnits::cm;
+    m_esep_zsep23 [21] = m_rec->getDouble("ZSEP23_21")*GeoModelKernelUnits::cm;
   }
 
 }
@@ -731,17 +730,17 @@ LArNumberHelper::db_nb_hec()
   
   // ---- Set default :
   /*  
-  m_hec_in0 = 427.70*CLHEP::cm;  // z_start
-  m_hec_in1 = 455.75*CLHEP::cm;  // z_start+ 28.05*CLHEP::cm
-  m_hec_in2 = 513.40*CLHEP::cm;  // z_start + 28.05*CLHEP::cm + 26.8*CLHEP::cm + 26.8*CLHEP::cm + 4.05*CLHEP::cm
-  m_hec_in3 = 562.70*CLHEP::cm;  // z_start + 28.05*CLHEP::cm + 26.8*CLHEP::cm + 26.8*CLHEP::cm + 4.05*CLHEP::cm 
-                          //        + 25.9*CLHEP::cm + 23.4*CLHEP::cm
-  m_hec_gap = 4.05*CLHEP::cm;    // gap between the two HEC wheels  
+  m_hec_in0 = 427.70*GeoModelKernelUnits::cm;  // z_start
+  m_hec_in1 = 455.75*GeoModelKernelUnits::cm;  // z_start+ 28.05*GeoModelKernelUnits::cm
+  m_hec_in2 = 513.40*GeoModelKernelUnits::cm;  // z_start + 28.05*GeoModelKernelUnits::cm + 26.8*GeoModelKernelUnits::cm + 26.8*GeoModelKernelUnits::cm + 4.05*GeoModelKernelUnits::cm
+  m_hec_in3 = 562.70*GeoModelKernelUnits::cm;  // z_start + 28.05*GeoModelKernelUnits::cm + 26.8*GeoModelKernelUnits::cm + 26.8*GeoModelKernelUnits::cm + 4.05*GeoModelKernelUnits::cm 
+                          //        + 25.9*GeoModelKernelUnits::cm + 23.4*GeoModelKernelUnits::cm
+  m_hec_gap = 4.05*GeoModelKernelUnits::cm;    // gap between the two HEC wheels  
   
   // Comment from Sven Menke :
   // I don't know why the the Nova Z_end is 2.5cm more, but the active
   // volume must be the sum of all blocks plus the gap - thus it's 609.5*cm
-  m_hec_out = 609.5*CLHEP::cm;  // z_end - 2.5*CLHEP::cm (or z_orig + all blocks)
+  m_hec_out = 609.5*GeoModelKernelUnits::cm;  // z_end - 2.5*GeoModelKernelUnits::cm (or z_orig + all blocks)
   */
 
   //std::cout << " ----- in db_nb_hec tags are : " << m_tag << " " << m_node << std::endl;
@@ -758,31 +757,31 @@ LArNumberHelper::db_nb_hec()
     // Block0 = 1.25 cm Front Plate + 
     //          8 times (0.85 cm LAr gap + 2.50 cm Plate) = 28.05 cm 
     double Block0 = ( m_rec->getDouble("PLATE_0")/2. 
-		      + 8*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_0")))*CLHEP::cm;
+		      + 8*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_0")))*GeoModelKernelUnits::cm;
     
     // HEC1 is Block1 + Block2
     // Block1 = 8 times (0.85 cm LAr gap + 2.50 cm Plate) 
     //         = 26.80 cm
-    double Block1 = 8*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_0"))*CLHEP::cm;
+    double Block1 = 8*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_0"))*GeoModelKernelUnits::cm;
     double Block2 = Block1 ;
 
     // Gap     = 4.05 cm
-    m_hec_gap = m_rec->getDouble("GAPWHL") *CLHEP::cm;
+    m_hec_gap = m_rec->getDouble("GAPWHL") *GeoModelKernelUnits::cm;
     
     // HEC2 is  Block 3 + Block 4
     // Block3 = 2.5 cm Front Plate + 
     //      4 times (0.85 cm LAr gap + 5.00 cm Plate) = 25.90 cm 
     double Block3 =  ( m_rec->getDouble("PLATE_1")/2. 
-		       + 4*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_1")))*CLHEP::cm;
+		       + 4*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_1")))*GeoModelKernelUnits::cm;
     
     // Block4 = 4 times (0.85 cm LAr gap + 5.00 cm Plate) = 23.40 cm 
-    double Block4 = 4*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_1"))*CLHEP::cm;
+    double Block4 = 4*(m_rec->getDouble("LARG") + m_rec->getDouble("PLATE_1"))*GeoModelKernelUnits::cm;
     
     // HEC3 is  Block 5 + Block 6
     double Block5 = Block4 ;
     double Block6 = Block4;
     
-    double zstart =  m_rec->getDouble("ZSTART") *CLHEP::cm;
+    double zstart =  m_rec->getDouble("ZSTART") *GeoModelKernelUnits::cm;
     
     m_hec_in0 = zstart;
     m_hec_in1 = m_hec_in0 + Block0  ;
@@ -1057,10 +1056,10 @@ LArNumberHelper::hard_fcal()
 
   // x and y are taken from drawings in the TDR
   for ( unsigned int i=0; i < m_fcal_id->module_hash_max(); i++ ) {
-    m_x_min_fcal [i] = 8.6*CLHEP::cm;
-    m_x_max_fcal [i] = 47.5*CLHEP::cm;
+    m_x_min_fcal [i] = 8.6*GeoModelKernelUnits::cm;
+    m_x_max_fcal [i] = 47.5*GeoModelKernelUnits::cm;
     m_y_min_fcal [i] = 8.6;
-    m_y_max_fcal [i] = 47.5*CLHEP::cm;
+    m_y_max_fcal [i] = 47.5*GeoModelKernelUnits::cm;
     m_phi_min_fcal[i] = 0.;
     m_phi_max_fcal[i] = 6.28;   // when too close to 2pi pb
 
@@ -1070,35 +1069,35 @@ LArNumberHelper::hard_fcal()
     //int pos_neg = m_fcal_id->pos_neg (m_region_id_fcal[i]);
     
     if ( mod == 1 ) {
-      m_dx_fcal [i] = 3.*CLHEP::cm;
-      m_dy_fcal [i] = 2.598*CLHEP::cm;
-      z_loc_in [0] = 466.85*CLHEP::cm;
-      z_loc_out [0] = z_loc_in [0]+45.*CLHEP::cm;
+      m_dx_fcal [i] = 3.*GeoModelKernelUnits::cm;
+      m_dy_fcal [i] = 2.598*GeoModelKernelUnits::cm;
+      z_loc_in [0] = 466.85*GeoModelKernelUnits::cm;
+      z_loc_out [0] = z_loc_in [0]+45.*GeoModelKernelUnits::cm;
 
     }
     else if ( mod == 2 ) {
-      m_dx_fcal [i] = 3.272*CLHEP::cm;
-      m_dy_fcal [i] = 4.25*CLHEP::cm;
-      z_loc_in [0] = 512.3*CLHEP::cm;
-      z_loc_out [0] = z_loc_in [0]+45.*CLHEP::cm;
+      m_dx_fcal [i] = 3.272*GeoModelKernelUnits::cm;
+      m_dy_fcal [i] = 4.25*GeoModelKernelUnits::cm;
+      z_loc_in [0] = 512.3*GeoModelKernelUnits::cm;
+      z_loc_out [0] = z_loc_in [0]+45.*GeoModelKernelUnits::cm;
 
     }
     else if ( mod == 3 ) {
-      m_dx_fcal [i] = 5.4*CLHEP::cm;
-      m_dy_fcal [i] = 4.677*CLHEP::cm;
-      z_loc_in [0] = 559.75*CLHEP::cm;
-      z_loc_out [0] = z_loc_in [0]+45.*CLHEP::cm;
+      m_dx_fcal [i] = 5.4*GeoModelKernelUnits::cm;
+      m_dy_fcal [i] = 4.677*GeoModelKernelUnits::cm;
+      z_loc_in [0] = 559.75*GeoModelKernelUnits::cm;
+      z_loc_out [0] = z_loc_in [0]+45.*GeoModelKernelUnits::cm;
 
     }
     else  {
       m_dx_fcal [i] = 0.;
       m_dy_fcal [i] = 0.;
       z_loc_in [0] = 0.;
-      z_loc_out [0] = z_loc_in [0]+45.*CLHEP::cm;
+      z_loc_out [0] = z_loc_in [0]+45.*GeoModelKernelUnits::cm;
     }
 
     m_z_min_fcal [i] = z_loc_in [0];
-    m_z_max_fcal [i] = m_z_min_fcal [i] + 45.*CLHEP::cm ;
+    m_z_max_fcal [i] = m_z_min_fcal [i] + 45.*GeoModelKernelUnits::cm ;
 
     double z = m_z_min_fcal [i];
     double r = m_x_max_fcal [i];
@@ -1125,21 +1124,21 @@ LArNumberHelper::sagging_param( std::vector<double>& Rhocen, std::vector<double>
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];
 
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_0")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_1")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_2")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_3")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_4")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_5")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_6")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_7")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_8")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_9")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_10")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_11")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_12")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_13")*CLHEP::cm);
-    Rhocen.push_back(m_rec->getDouble("RHOCEN_14")*CLHEP::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_0")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_1")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_2")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_3")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_4")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_5")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_6")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_7")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_8")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_9")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_10")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_11")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_12")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_13")*GeoModelKernelUnits::cm);
+    Rhocen.push_back(m_rec->getDouble("RHOCEN_14")*GeoModelKernelUnits::cm);
   }
  
   m_lar = m_iAccessSvc->getRecordsetPtr("BarrelSagging",m_tag,m_node);
@@ -1147,21 +1146,21 @@ LArNumberHelper::sagging_param( std::vector<double>& Rhocen, std::vector<double>
   if (m_lar->size()) {
     m_rec = (*m_lar)[0];
 
-    Sag.push_back(m_rec->getDouble("SAG_0")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_1")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_2")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_3")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_4")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_5")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_6")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_7")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_8")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_9")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_10")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_11")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_12")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_13")*CLHEP::cm);
-    Sag.push_back(m_rec->getDouble("SAG_14")*CLHEP::cm);
+    Sag.push_back(m_rec->getDouble("SAG_0")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_1")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_2")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_3")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_4")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_5")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_6")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_7")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_8")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_9")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_10")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_11")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_12")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_13")*GeoModelKernelUnits::cm);
+    Sag.push_back(m_rec->getDouble("SAG_14")*GeoModelKernelUnits::cm);
 
   }
 
diff --git a/LArCalorimeter/LArDetDescr/src/LArRecoMaterialTool.cxx b/LArCalorimeter/LArDetDescr/src/LArRecoMaterialTool.cxx
index 4e6a5b1b37bbd21905218decd3e2d1aed5a45f10..c2ce91bbfa0186359e50e138e096c90d80d2e852 100755
--- a/LArCalorimeter/LArDetDescr/src/LArRecoMaterialTool.cxx
+++ b/LArCalorimeter/LArDetDescr/src/LArRecoMaterialTool.cxx
@@ -19,6 +19,7 @@
 
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/Units.h"
 
 #include "CaloIdentifier/CaloIdManager.h"
 #include "CaloIdentifier/CaloCell_ID.h"
@@ -342,7 +343,7 @@ LArRecoMaterialTool::ScanCRYO(CaloSubdetNames::ALIGNVOL alvol,
 			  childX0, childDeDx,
 			  childAverageA, childAverageZ, childRho );
     
-    mass =  childMass/CLHEP::gram;
+    mass =  childMass/GeoModelKernelUnits::gram;
     x0 = childX0;
     dEdx = childDeDx;
     aveA = childAverageA;
@@ -501,7 +502,7 @@ LArRecoMaterialTool::ScanPS(CaloSubdetNames::ALIGNVOL alvol,
 			  childX0, childDeDx,
 			  childAverageA, childAverageZ, childRho );
     
-    mass =  childMass*(1./CLHEP::gram);
+    mass =  childMass*(1./GeoModelKernelUnits::gram);
     x0 = childX0;
     dEdx = childDeDx;
     aveA = childAverageA;
@@ -656,7 +657,7 @@ LArRecoMaterialTool::ScanEMB(CaloSubdetNames::ALIGNVOL alvol,
 			  childX0, childDeDx,
 			  childAverageA, childAverageZ, childRho );
     
-    mass =  childMass*(1./CLHEP::gram);
+    mass =  childMass*(1./GeoModelKernelUnits::gram);
     x0 = childX0;
     dEdx = childDeDx;
     aveA = childAverageA;
@@ -852,7 +853,7 @@ LArRecoMaterialTool::ScanHEC(CaloSubdetNames::ALIGNVOL alvol,
 			  childX0, childDeDx,
 			  childAverageA, childAverageZ, childRho );
     
-    mass =  childMass*(1./CLHEP::gram);
+    mass =  childMass*(1./GeoModelKernelUnits::gram);
     x0 = childX0;
     dEdx = childDeDx;
     aveA = childAverageA;
@@ -1030,7 +1031,7 @@ LArRecoMaterialTool::ScanFCAL(CaloSubdetNames::ALIGNVOL alvol,
 			  childX0, childDeDx,
 			  childAverageA, childAverageZ, childRho );
     
-    mass =  childMass*(1./CLHEP::gram);
+    mass =  childMass*(1./GeoModelKernelUnits::gram);
     x0 = childX0;
     dEdx = childDeDx;
     aveA = childAverageA;
@@ -1096,13 +1097,13 @@ LArRecoMaterialTool::addMaterialFraction(const GeoLogVol& geoVol,
      double fraction = childMaterial->getFraction(iEl);
 
      ATH_MSG_DEBUG ("         direct child : " << geoEl->getName() << " fraction = " << fraction 
-                    << " A= " << geoEl->getA()*(1./CLHEP::gram) << " Z= " << geoEl->getZ());
+                    << " A= " << geoEl->getA()*(1./GeoModelKernelUnits::gram) << " Z= " << geoEl->getZ());
 
      volume.push_back(fraction*childVolume);
      mass.push_back(fraction*childVolume*childRho);
      x0.push_back(fraction*childX0);
      dEdX.push_back(fraction*childDeDx);
-     aveA.push_back(fraction*(geoEl->getA()*(1./CLHEP::gram)));
+     aveA.push_back(fraction*(geoEl->getA()*(1./GeoModelKernelUnits::gram)));
      aveZ.push_back(fraction*(geoEl->getZ()));             
    }
    
@@ -1145,12 +1146,12 @@ LArRecoMaterialTool::averageFraction (std::vector<double>& volumeFractions,
     childAverageZ  += massfrac * averageZFractions[ivolfrac];
   }  
     
-  childRho = childMass/(CLHEP::gram*childVolume);
+  childRho = childMass/(GeoModelKernelUnits::gram*childVolume);
   
   ATH_MSG_DEBUG ("");
   ATH_MSG_DEBUG ("  + averaged over " << parsedVolumes << " volumes ");
   ATH_MSG_DEBUG ("    - volume   [mm^3]        : " << childVolume);
-  ATH_MSG_DEBUG ("    - mass     [gram]        : " << childMass*(1./CLHEP::gram));
+  ATH_MSG_DEBUG ("    - mass     [gram]        : " << childMass*(1./GeoModelKernelUnits::gram));
   ATH_MSG_DEBUG ("    - rho      [gram/mm^3]   : " << childRho);
   ATH_MSG_DEBUG ("    - X0                     : " << childX0);
   ATH_MSG_DEBUG ("    - DeDx                   : " << childDeDx);
diff --git a/LArCalorimeter/LArDetDescr/src/LArRecoSimpleGeomTool.cxx b/LArCalorimeter/LArDetDescr/src/LArRecoSimpleGeomTool.cxx
index 3ecf687c3a291d55455b4c0ae2a3a44cfeed25fb..7019b56fcf54085ca14c9febdc5e2fa79fe2c89a 100755
--- a/LArCalorimeter/LArDetDescr/src/LArRecoSimpleGeomTool.cxx
+++ b/LArCalorimeter/LArDetDescr/src/LArRecoSimpleGeomTool.cxx
@@ -20,8 +20,6 @@
 #include "CaloDetDescr/CaloDetDescriptor.h"
 #include "CaloGeoHelpers/CaloPhiRange.h"
 
-#include "CLHEP/Units/SystemOfUnits.h"
-
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
@@ -29,6 +27,8 @@
 #include "GeoModelUtilities/DecodeVersionKey.h"
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
@@ -155,9 +155,7 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
   }
 
   GeoFullPhysVol* fullPV  = storedPV->getPhysVol();
-  //const AMG::Transform3D trf_eigen=fullPV->get
-  htrans =  Amg::CLHEPTransformToEigen(fullPV->getAbsoluteTransform())*   
-    Amg::CLHEPTransformToEigen(fullPV->getDefAbsoluteTransform()).inverse();
+  htrans =  fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
 
   hphi = m_phi_range.twopi();
 
@@ -172,17 +170,17 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
     if (lar->size()<14) return false;
 
     const IRDBRecord* rec = (*lar)[11];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    len =  rec->getDouble("DZ")*CLHEP::cm /2.;
-    dep =  rec->getDouble("DR")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    len =  rec->getDouble("DZ")*GeoModelKernelUnits::cm /2.;
+    dep =  rec->getDouble("DR")*GeoModelKernelUnits::cm;
     rec = (*lar)[12];
-    dep =  dep +rec->getDouble("DR")*CLHEP::cm;
+    dep =  dep +rec->getDouble("DR")*GeoModelKernelUnits::cm;
     rec = (*lar)[13];
-    dep =  dep +rec->getDouble("DR")*CLHEP::cm;
+    dep =  dep +rec->getDouble("DR")*GeoModelKernelUnits::cm;
 
-    //rad = 124.18*CLHEP::cm;
-    //dep = (.305 + 1.38 + .47 )*CLHEP::cm;
-    //len = 270.*CLHEP::cm;
+    //rad = 124.18*GeoModelKernelUnits::cm;
+    //dep = (.305 + 1.38 + .47 )*GeoModelKernelUnits::cm;
+    //len = 270.*GeoModelKernelUnits::cm;
     
     radius.push_back( rad + dep/2.);
     depth.push_back( dep/2. );
@@ -199,13 +197,13 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     //  CryoMother nb 10
     const IRDBRecord* rec = (*lar)[10];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    len =  rec->getDouble("DZ")*CLHEP::cm /2.;
-    dep =  rec->getDouble("DR")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    len =  rec->getDouble("DZ")*GeoModelKernelUnits::cm /2.;
+    dep =  rec->getDouble("DR")*GeoModelKernelUnits::cm;
 
-    //rad = 122.9*CLHEP::cm;
-    //dep = 1.28*CLHEP::cm;
-    //len = 270.*CLHEP::cm;
+    //rad = 122.9*GeoModelKernelUnits::cm;
+    //dep = 1.28*GeoModelKernelUnits::cm;
+    //len = 270.*GeoModelKernelUnits::cm;
 
     radius.push_back( rad + dep/2. );
     depth.push_back( dep /2.);
@@ -213,13 +211,13 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     //  CryoMother nb 14
     rec = (*lar)[14];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    len =  rec->getDouble("DZ")*CLHEP::cm /2.;
-    dep =  rec->getDouble("DR")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    len =  rec->getDouble("DZ")*GeoModelKernelUnits::cm /2.;
+    dep =  rec->getDouble("DR")*GeoModelKernelUnits::cm;
 
-    //rad = 126.335*CLHEP::cm;
-    //dep = 1.2*CLHEP::cm;
-    //len = 284.*CLHEP::cm;
+    //rad = 126.335*GeoModelKernelUnits::cm;
+    //dep = 1.2*GeoModelKernelUnits::cm;
+    //len = 284.*GeoModelKernelUnits::cm;
 
     radius.push_back( rad  + dep/2.);
     depth.push_back( dep /2.);
@@ -227,13 +225,13 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     // CryoMother nb 0
     rec = (*lar)[0];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    len =  rec->getDouble("DZ")*CLHEP::cm /2.;
-    dep =  rec->getDouble("DR")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    len =  rec->getDouble("DZ")*GeoModelKernelUnits::cm /2.;
+    dep =  rec->getDouble("DR")*GeoModelKernelUnits::cm;
 
     //rad = 2140*mm;
     //dep = 30*mm;
-    //len = 299.6*CLHEP::cm;
+    //len = 299.6*GeoModelKernelUnits::cm;
 
     radius.push_back( rad + dep/2. );
     depth.push_back( dep /2.);
@@ -241,13 +239,13 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     //  CryoMother nb 5
     rec = (*lar)[5];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    len =  rec->getDouble("DZ")*CLHEP::cm /2.;
-    dep =  rec->getDouble("DR")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    len =  rec->getDouble("DZ")*GeoModelKernelUnits::cm /2.;
+    dep =  rec->getDouble("DR")*GeoModelKernelUnits::cm;
 
     //rad = 2220*mm;
     //dep = 30*mm;
-    //len = 285*CLHEP::cm;
+    //len = 285*GeoModelKernelUnits::cm;
 
     radius.push_back( rad + dep/2. );
     depth.push_back( dep /2.);
@@ -264,18 +262,18 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
     if (lar->size()==0) return false;
     
     const IRDBRecord* rec = (*lar)[0];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    dep =  rec->getDouble("RMAX")*CLHEP::cm - rad;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    dep =  rec->getDouble("RMAX")*GeoModelKernelUnits::cm - rad;
 	
     lar = m_recBarrGeo;
     if ( !lar || lar->size()==0) return false;
 
     rec = (*lar)[0];
-    len =  rec->getDouble("ZMAX")*CLHEP::cm;
+    len =  rec->getDouble("ZMAX")*GeoModelKernelUnits::cm;
 
-    //rad = 138.5*CLHEP::cm;
-    //dep = (144.7 - 138.5)*CLHEP::cm;
-    //len = 316.5*CLHEP::cm;
+    //rad = 138.5*GeoModelKernelUnits::cm;
+    //dep = (144.7 - 138.5)*GeoModelKernelUnits::cm;
+    //len = 316.5*GeoModelKernelUnits::cm;
 
     radius.push_back( rad  + dep/2.);
     depth.push_back( dep /2.);
@@ -292,13 +290,13 @@ LArRecoSimpleGeomTool::get_cylinder_surface (CaloSubdetNames::ALIGNVOL alvol,
     if (lar->size()==0) return false;
 
     const IRDBRecord* rec = (*lar)[0];
-    rad =  rec->getDouble("RMIN")*CLHEP::cm;
-    dep =  rec->getDouble("RMAX")*CLHEP::cm - rad;
-    len =  rec->getDouble("ZMAX")*CLHEP::cm;
+    rad =  rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    dep =  rec->getDouble("RMAX")*GeoModelKernelUnits::cm - rad;
+    len =  rec->getDouble("ZMAX")*GeoModelKernelUnits::cm;
 
-    //rad = 1447.3*CLHEP::cm;
-    //dep = (2003.35 - 1447.3)*CLHEP::cm;
-    //len = 316.5*CLHEP::cm;
+    //rad = 1447.3*GeoModelKernelUnits::cm;
+    //dep = (2003.35 - 1447.3)*GeoModelKernelUnits::cm;
+    //len = 316.5*GeoModelKernelUnits::cm;
 
     radius.push_back( rad  + dep/2.);
     depth.push_back( dep /2.);
@@ -335,10 +333,7 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
   }
 
   GeoFullPhysVol* fullPV  = storedPV->getPhysVol();
-  //htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
-  htrans =  Amg::CLHEPTransformToEigen(fullPV->getAbsoluteTransform())*
-    Amg::CLHEPTransformToEigen(fullPV->getDefAbsoluteTransform()).inverse();
-
+  htrans =  fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
 
   hphi = m_phi_range.twopi();
   z.clear();
@@ -358,16 +353,16 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     const IRDBRecord* rec = (*lar)[49];
 
-    ri = rec->getDouble("RMIN")*CLHEP::cm;
-    ra = ri + rec->getDouble("DR")*CLHEP::cm;
-    dep = rec->getDouble("DZ")*CLHEP::cm;
-    zcent = rec->getDouble("ZMIN")*CLHEP::cm + dep/2.;
+    ri = rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    ra = ri + rec->getDouble("DR")*GeoModelKernelUnits::cm;
+    dep = rec->getDouble("DZ")*GeoModelKernelUnits::cm;
+    zcent = rec->getDouble("ZMIN")*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::LARCRYO_EC_NEG) zcent = -1. * zcent;
 
-    //ri = 22.1*CLHEP::cm;
-    //ra = (22.1 + 194.4)*CLHEP::cm;
-    //dep = 6.5*CLHEP::cm;
-    //zcent = (356.1 + dep/2.)*CLHEP::cm;
+    //ri = 22.1*GeoModelKernelUnits::cm;
+    //ra = (22.1 + 194.4)*GeoModelKernelUnits::cm;
+    //dep = 6.5*GeoModelKernelUnits::cm;
+    //zcent = (356.1 + dep/2.)*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -377,16 +372,16 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
     // DDDb : LAr / CryoCylinders / Endcap nb 6
     rec = (*lar)[44];
 
-    ri = rec->getDouble("RMIN")*CLHEP::cm;
-    ra = ri + rec->getDouble("DR")*CLHEP::cm;
-    dep = rec->getDouble("DZ")*CLHEP::cm;
-    zcent = rec->getDouble("ZMIN")*CLHEP::cm + dep/2.;
+    ri = rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    ra = ri + rec->getDouble("DR")*GeoModelKernelUnits::cm;
+    dep = rec->getDouble("DZ")*GeoModelKernelUnits::cm;
+    zcent = rec->getDouble("ZMIN")*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::LARCRYO_EC_NEG) zcent = -1. * zcent;
 
-    //ri = 79.*CLHEP::cm;
-    //ra = (ri + 173.)*CLHEP::cm;
-    //dep = 6.*CLHEP::cm;
-    //zcent = (660.5 + dep/2.)*CLHEP::cm;
+    //ri = 79.*GeoModelKernelUnits::cm;
+    //ra = (ri + 173.)*GeoModelKernelUnits::cm;
+    //dep = 6.*GeoModelKernelUnits::cm;
+    //zcent = (660.5 + dep/2.)*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -404,16 +399,16 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     const IRDBRecord* rec = (*lar)[0];
 
-    ri = rec->getDouble("RMIN")*CLHEP::cm;
-    ra = rec->getDouble("RMAX")*CLHEP::cm;
-    dep = rec->getDouble("TCK")*CLHEP::cm;
-    zcent = rec->getDouble("ZPOS")*CLHEP::cm + dep/2.;
+    ri = rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    ra = rec->getDouble("RMAX")*GeoModelKernelUnits::cm;
+    dep = rec->getDouble("TCK")*GeoModelKernelUnits::cm;
+    zcent = rec->getDouble("ZPOS")*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::PRESAMPLER_EC_NEG) zcent = -1. * zcent;
 
-    //ri = 123.174*CLHEP::cm;
-    //ra = 170.2*CLHEP::cm;
-    //dep = 0.4*CLHEP::cm;
-    //zcent = (362.4 + dep/2.)*CLHEP::cm;
+    //ri = 123.174*GeoModelKernelUnits::cm;
+    //ra = 170.2*GeoModelKernelUnits::cm;
+    //dep = 0.4*GeoModelKernelUnits::cm;
+    //zcent = (362.4 + dep/2.)*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -431,16 +426,16 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     const IRDBRecord* rec = (*lar)[0];
 
-    ri = rec->getDouble("RMIN")*CLHEP::cm;
-    ra = rec->getDouble("RMAX")*CLHEP::cm;
-    dep = rec->getDouble("ETOT")*CLHEP::cm;
-    zcent = rec->getDouble("Z1")*CLHEP::cm + dep/2.;
+    ri = rec->getDouble("RMIN")*GeoModelKernelUnits::cm;
+    ra = rec->getDouble("RMAX")*GeoModelKernelUnits::cm;
+    dep = rec->getDouble("ETOT")*GeoModelKernelUnits::cm;
+    zcent = rec->getDouble("Z1")*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::EMEC_NEG) zcent = -1. * zcent;
 
-    //ri = 29.*CLHEP::cm;
-    //ra = 210.*CLHEP::cm;
-    //dep = 53.6*CLHEP::cm;
-    //zcent = (369.1 + dep/2.)*CLHEP::cm;
+    //ri = 29.*GeoModelKernelUnits::cm;
+    //ra = 210.*GeoModelKernelUnits::cm;
+    //dep = 53.6*GeoModelKernelUnits::cm;
+    //zcent = (369.1 + dep/2.)*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -459,19 +454,19 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     const IRDBRecord* rec = (*lar)[0];
 
-    ri = rec->getDouble("ROORIG")*CLHEP::cm;
-    ra = rec->getDouble("REND")*CLHEP::cm;
+    ri = rec->getDouble("ROORIG")*GeoModelKernelUnits::cm;
+    ra = rec->getDouble("REND")*GeoModelKernelUnits::cm;
     // Block0+Block1+Block2
     dep = rec->getDouble("PLATE_0")/2. 
       + 3*8*(rec->getDouble("LARG") + rec->getDouble("PLATE_0"));
-    dep = dep*CLHEP::cm;
-    zcent = rec->getDouble("ZSTART")*CLHEP::cm + dep/2.;
+    dep = dep*GeoModelKernelUnits::cm;
+    zcent = rec->getDouble("ZSTART")*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::HEC1_NEG) zcent = -1. * zcent;
 
-    //ri = 37.2*CLHEP::cm;
-    //ra = 213.0*CLHEP::cm;
-    //dep = (513.4 - 4.05 - 427.7)*CLHEP::cm;
-    //zcent = 427.7*CLHEP::cm;
+    //ri = 37.2*GeoModelKernelUnits::cm;
+    //ra = 213.0*GeoModelKernelUnits::cm;
+    //dep = (513.4 - 4.05 - 427.7)*GeoModelKernelUnits::cm;
+    //zcent = 427.7*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -491,24 +486,24 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
 
     const IRDBRecord* rec = (*lar)[0];
 
-    ri = rec->getDouble("ROORIG")*CLHEP::cm;
-    ra = rec->getDouble("REND")*CLHEP::cm;
+    ri = rec->getDouble("ROORIG")*GeoModelKernelUnits::cm;
+    ra = rec->getDouble("REND")*GeoModelKernelUnits::cm;
     // Block 3 + Block 4 + Block 5 + Block 6
     dep =  rec->getDouble("PLATE_1")/2. 
       + 4*4*(rec->getDouble("LARG") + rec->getDouble("PLATE_1"));
-    dep = dep*CLHEP::cm;
+    dep = dep*GeoModelKernelUnits::cm;
     // start+depth of HEC1 + gap
     zcent =  rec->getDouble("ZSTART") 
       + rec->getDouble("PLATE_0")/2. 
       + 3*8*(rec->getDouble("LARG") + rec->getDouble("PLATE_0"))
       +  rec->getDouble("GAPWHL") ;
-    zcent = zcent*CLHEP::cm + dep/2.;
+    zcent = zcent*GeoModelKernelUnits::cm + dep/2.;
     if (alvol == CaloSubdetNames::HEC2_NEG) zcent = -1. * zcent;
 
-    //ri = 37.2*CLHEP::cm;
-    //ra = 213.0*CLHEP::cm;
-    //dep = (609.5 - 513.4)*CLHEP::cm;
-    //zcent = (513.4 + dep/2.)*CLHEP::cm;
+    //ri = 37.2*GeoModelKernelUnits::cm;
+    //ra = 213.0*GeoModelKernelUnits::cm;
+    //dep = (609.5 - 513.4)*GeoModelKernelUnits::cm;
+    //zcent = (513.4 + dep/2.)*GeoModelKernelUnits::cm;
 
     rmin.push_back( ri );
     rmax.push_back( ra );
@@ -522,15 +517,15 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
     
     // see LArNumberHelper
 
-    nb = 8.6*CLHEP::cm;
+    nb = 8.6*GeoModelKernelUnits::cm;
     rmin.push_back( nb );
-    nb = 47.5*CLHEP::cm;
+    nb = 47.5*GeoModelKernelUnits::cm;
     rmax.push_back( nb );
 
-    nb = 45.*CLHEP::cm;
+    nb = 45.*GeoModelKernelUnits::cm;
     depth.push_back( nb/2. );
 
-    nb = (466.85 + nb/2. )*CLHEP::cm;
+    nb = (466.85 + nb/2. )*GeoModelKernelUnits::cm;
     if (alvol == CaloSubdetNames::FCAL1_NEG) nb = -1. * nb;
     z.push_back( nb );
 
@@ -541,15 +536,15 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
     
     // see LArNumberHelper
 
-    nb = 8.6*CLHEP::cm;
+    nb = 8.6*GeoModelKernelUnits::cm;
     rmin.push_back( nb );
-    nb = 47.5*CLHEP::cm;
+    nb = 47.5*GeoModelKernelUnits::cm;
     rmax.push_back( nb );
 
-    nb = 45.*CLHEP::cm;
+    nb = 45.*GeoModelKernelUnits::cm;
     depth.push_back( nb/2. );
 
-    nb = (512.3 + nb/2. )*CLHEP::cm;
+    nb = (512.3 + nb/2. )*GeoModelKernelUnits::cm;
     if (alvol == CaloSubdetNames::FCAL2_NEG) nb = -1. * nb;
     z.push_back( nb );
 
@@ -560,15 +555,15 @@ LArRecoSimpleGeomTool::get_disk_surface (CaloSubdetNames::ALIGNVOL alvol,
     
     // see LArNumberHelper
 
-    nb = 8.6*CLHEP::cm;
+    nb = 8.6*GeoModelKernelUnits::cm;
     rmin.push_back( nb );
-    nb = 47.5*CLHEP::cm;
+    nb = 47.5*GeoModelKernelUnits::cm;
     rmax.push_back( nb );
 
-    nb = 45.*CLHEP::cm;
+    nb = 45.*GeoModelKernelUnits::cm;
     depth.push_back( nb/2. );
 
-    nb = (559.75 + nb/2. )*CLHEP::cm;
+    nb = (559.75 + nb/2. )*GeoModelKernelUnits::cm;
     if (alvol == CaloSubdetNames::FCAL3_NEG) nb = -1. * nb;
     z.push_back( nb );
 
@@ -605,10 +600,7 @@ LArRecoSimpleGeomTool::ScanBarrelCryo(CaloSubdetNames::ALIGNVOL alvol,
   }
 
   GeoFullPhysVol* fullPV  = storedPV->getPhysVol();
-  htrans =  Amg::CLHEPTransformToEigen(fullPV->getAbsoluteTransform())*
-    Amg::CLHEPTransformToEigen(fullPV->getDefAbsoluteTransform()).inverse();
-
-  //htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
+  htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
 
   hphi = m_phi_range.twopi();
   radius.clear();
@@ -640,9 +632,7 @@ LArRecoSimpleGeomTool::ScanEMB(CaloSubdetNames::ALIGNVOL alvol,
   }
 
   GeoFullPhysVol* fullPV  = storedPV->getPhysVol();
-  //htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
-  htrans =  Amg::CLHEPTransformToEigen(fullPV->getAbsoluteTransform())*
-    Amg::CLHEPTransformToEigen(fullPV->getDefAbsoluteTransform()).inverse();
+  htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
 
   hphi = m_phi_range.twopi();
   radius.clear();
diff --git a/LArCalorimeter/LArG4/LArG4FastSimulation/CMakeLists.txt b/LArCalorimeter/LArG4/LArG4FastSimulation/CMakeLists.txt
index ad1415072a1d24d44a173e1ea12ce86e22876f8c..64fea221b12b38adfca61dbd1268bb1b57a6ee33 100644
--- a/LArCalorimeter/LArG4/LArG4FastSimulation/CMakeLists.txt
+++ b/LArCalorimeter/LArG4/LArG4FastSimulation/CMakeLists.txt
@@ -10,8 +10,8 @@ atlas_depends_on_subdirs( PUBLIC
                           GaudiKernel
                           PRIVATE
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoSpecialShapes
+			  DetectorDescription/GeoPrimitives
                           LArCalorimeter/LArG4/LArG4Code
                           LArCalorimeter/LArG4/LArG4ShowerLibSvc
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
@@ -24,6 +24,7 @@ find_package( Geant4 )
 find_package( HepMC )
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread Table MathMore Minuit Minuit2 Matrix Physics HistPainter Rint Graf Graf3d Gpad Html Postscript Gui GX11TTF GX11 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # tag ROOTBasicLibs was not recognized in automatic conversion in cmt2cmake
 
@@ -33,8 +34,8 @@ find_package( XercesC )
 atlas_add_component( LArG4FastSimulation
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} GaudiKernel StoreGateLib SGtests GeoModelKernel GeoSpecialShapes LArG4Code LArReadoutGeometry LArSimEvent G4AtlasToolsLib )
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} ${GEOMODEL_LIBRARIES} GaudiKernel StoreGateLib SGtests GeoSpecialShapes LArG4Code LArReadoutGeometry LArSimEvent G4AtlasToolsLib GeoPrimitives )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/LArCalorimeter/LArG4/LArG4FastSimulation/src/BarrelFastSimDedicatedSD.cxx b/LArCalorimeter/LArG4/LArG4FastSimulation/src/BarrelFastSimDedicatedSD.cxx
index 8e424d99fc4a95dbc5189915e663d7a12ffa6b97..14e2c54e6c35ba9900ba941067c08c191ed1b422 100644
--- a/LArCalorimeter/LArG4/LArG4FastSimulation/src/BarrelFastSimDedicatedSD.cxx
+++ b/LArCalorimeter/LArG4/LArG4FastSimulation/src/BarrelFastSimDedicatedSD.cxx
@@ -11,6 +11,9 @@
 #include "LArReadoutGeometry/GeoStraightAccSection.h"
 #include "LArG4Code/EnergySpot.h"
 #include "StoreGate/StoreGateSvc.h"
+#include "CLHEP/Geometry/Point3D.h"
+#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 using HepGeom::Point3D;
 using HepGeom::Transform3D;
@@ -37,8 +40,8 @@ void BarrelFastSimDedicatedSD::ProcessSpot(const EnergySpot  & spot){
   // Fill the identifier.
   Point3D<double> globalPosition=spot.GetPosition();
 
-  static Transform3D xfNeg = m_embManager->getDetectorRegion(0,0,0)->getAbsoluteTransform().inverse();
-  static Transform3D xfPos = m_embManager->getDetectorRegion(1,0,0)->getAbsoluteTransform().inverse();
+  static Transform3D xfNeg = Amg::EigenTransformToCLHEP(m_embManager->getDetectorRegion(0,0,0)->getAbsoluteTransform().inverse());
+  static Transform3D xfPos = Amg::EigenTransformToCLHEP(m_embManager->getDetectorRegion(1,0,0)->getAbsoluteTransform().inverse());
 
   Point3D<double> localPosition = globalPosition.z()<0 ? xfNeg*globalPosition : xfPos*globalPosition;
   int zIndex = globalPosition.z() <0 ? 0:1;
diff --git a/LArCalorimeter/LArG4/LArG4FastSimulation/src/EndcapFastSimDedicatedSD.cxx b/LArCalorimeter/LArG4/LArG4FastSimulation/src/EndcapFastSimDedicatedSD.cxx
index 4b8f0082eb02638ff1765755c58d3a26360f57f7..f8d45b3582280a68bebcd8127cabdb94d2a581d3 100644
--- a/LArCalorimeter/LArG4/LArG4FastSimulation/src/EndcapFastSimDedicatedSD.cxx
+++ b/LArCalorimeter/LArG4/LArG4FastSimulation/src/EndcapFastSimDedicatedSD.cxx
@@ -11,6 +11,9 @@
 #include "LArSimEvent/LArHitContainer.h"
 #include "GeoSpecialShapes/LArWheelCalculator.h"
 #include "StoreGate/StoreGateSvc.h"
+#include "CLHEP/Geometry/Point3D.h"
+#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 using HepGeom::Point3D;
 using HepGeom::Transform3D;
@@ -40,8 +43,8 @@ void EndcapFastSimDedicatedSD::ProcessSpot(const EnergySpot  & spot){
   // Fill the identifier.
   Point3D<double> globalPosition=spot.GetPosition();
 
-  static Transform3D xfPos = m_emecManager->getDetectorRegion(1,1,0,0)->getAbsoluteTransform().inverse();
-  static Transform3D xfNeg = m_emecManager->getDetectorRegion(0,1,0,0)->getAbsoluteTransform().inverse();
+  static Transform3D xfPos = Amg::EigenTransformToCLHEP(m_emecManager->getDetectorRegion(1,1,0,0)->getAbsoluteTransform().inverse());
+  static Transform3D xfNeg = Amg::EigenTransformToCLHEP(m_emecManager->getDetectorRegion(0,1,0,0)->getAbsoluteTransform().inverse());
 
 
   Point3D<double> localPosition        = globalPosition.z()<0 ? xfNeg*globalPosition : xfPos*globalPosition;
diff --git a/LArCalorimeter/LArG4/LArG4FastSimulation/src/FCALFastSimDedicatedSD.cxx b/LArCalorimeter/LArG4/LArG4FastSimulation/src/FCALFastSimDedicatedSD.cxx
index 9b3847a23f4c7e8dda5f8fbbf44fdd838f60f750..8bf38caf18f002fbb7dca94b497d0a1b4cc0e374 100644
--- a/LArCalorimeter/LArG4/LArG4FastSimulation/src/FCALFastSimDedicatedSD.cxx
+++ b/LArCalorimeter/LArG4/LArG4FastSimulation/src/FCALFastSimDedicatedSD.cxx
@@ -11,6 +11,9 @@
 #include "LArSimEvent/LArHitContainer.h"
 #include "GeoModelKernel/GeoTubs.h"
 #include "StoreGate/StoreGateSvc.h"
+#include "CLHEP/Geometry/Transform3D.h"
+#include "CLHEP/Geometry/Point3D.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 using HepGeom::Transform3D;
 using HepGeom::Point3D;
@@ -31,14 +34,14 @@ void FCALFastSimDedicatedSD::ProcessSpot(const EnergySpot  & spot){
   // Fill the identifier.
 
   static Transform3D xfNeg[3] = {
-    m_fcalManager->getFCAL(FCALModule::Module(1),FCALModule::Endcap(0))->getAbsoluteTransform().inverse(),
-    m_fcalManager->getFCAL(FCALModule::Module(2),FCALModule::Endcap(0))->getAbsoluteTransform().inverse(),
-    m_fcalManager->getFCAL(FCALModule::Module(3),FCALModule::Endcap(0))->getAbsoluteTransform().inverse()};
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(1),FCALModule::Endcap(0))->getAbsoluteTransform().inverse()),
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(2),FCALModule::Endcap(0))->getAbsoluteTransform().inverse()),
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(3),FCALModule::Endcap(0))->getAbsoluteTransform().inverse())};
 
   static Transform3D xfPos[3] = {
-    m_fcalManager->getFCAL(FCALModule::Module(1),FCALModule::Endcap(1))->getAbsoluteTransform().inverse(),
-    m_fcalManager->getFCAL(FCALModule::Module(2),FCALModule::Endcap(1))->getAbsoluteTransform().inverse(),
-    m_fcalManager->getFCAL(FCALModule::Module(3),FCALModule::Endcap(1))->getAbsoluteTransform().inverse()};
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(1),FCALModule::Endcap(1))->getAbsoluteTransform().inverse()),
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(2),FCALModule::Endcap(1))->getAbsoluteTransform().inverse()),
+    Amg::EigenTransformToCLHEP(m_fcalManager->getFCAL(FCALModule::Module(3),FCALModule::Endcap(1))->getAbsoluteTransform().inverse())};
 
   static const GeoTubs * fcalTubs[3] = {
     (const GeoTubs *) m_fcalManager->getFCAL(FCALModule::Module(1),FCALModule::Endcap(0))->getMaterialGeom()->getLogVol()->getShape(),
diff --git a/LArCalorimeter/LArG4/LArG4Validation/CMakeLists.txt b/LArCalorimeter/LArG4/LArG4Validation/CMakeLists.txt
index 9bc68503a7b3666ccd2e47e762c0ef50a3963301..7195106ef9093e2a43584c1a5465bb7dad3b7bd3 100644
--- a/LArCalorimeter/LArG4/LArG4Validation/CMakeLists.txt
+++ b/LArCalorimeter/LArG4/LArG4Validation/CMakeLists.txt
@@ -15,7 +15,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoAdaptors
-                          DetectorDescription/GeoModel/GeoModelKernel
                           Event/EventInfo
                           Generators/GeneratorObjects
                           LArCalorimeter/LArSimEvent
@@ -32,8 +31,8 @@ find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
 atlas_add_component( LArG4Validation
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} GaudiKernel CaloDetDescrLib CaloIdentifier AthenaBaseComps StoreGateLib SGtests GeoAdaptors GeoModelKernel EventInfo GeneratorObjects LArSimEvent MagFieldInterfaces egammaEvent )
+                     INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} GaudiKernel CaloDetDescrLib CaloIdentifier AthenaBaseComps StoreGateLib SGtests GeoAdaptors EventInfo GeneratorObjects LArSimEvent MagFieldInterfaces egammaEvent )
 
 # Install files from the package:
 atlas_install_headers( LArG4Validation )
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoXPEngine.cxx b/LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.cxx
similarity index 98%
rename from DetectorDescription/GeoModel/GeoModelKernel/src/GeoXPEngine.cxx
rename to LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.cxx
index ad32b1ecea5675ece680b4a2d4cb4819c73995b4..7b4080386e94876bb30c97a6a28ebbce574881b3 100755
--- a/DetectorDescription/GeoModel/GeoModelKernel/src/GeoXPEngine.cxx
+++ b/LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "GeoModelKernel/GeoXPEngine.h"
+#include "GeoXPEngine.h"
 #include "CLHEP/GenericFunctions/Variable.hh"
 #include "CLHEP/GenericFunctions/FixedConstant.hh"
 #include "CLHEP/GenericFunctions/RKIntegrator.hh"
diff --git a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXPEngine.h b/LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.h
similarity index 93%
rename from DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXPEngine.h
rename to LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.h
index 0056fb5ea4f18a6e5731adf70ffb3d2577506ddb..37b0468d4d31ca068ca1e6adc641297adcc414f9 100755
--- a/DetectorDescription/GeoModel/GeoModelKernel/GeoModelKernel/GeoXPEngine.h
+++ b/LArCalorimeter/LArG4/LArG4Validation/src/GeoXPEngine.h
@@ -9,17 +9,16 @@
 // This class does a Runge-Kutta integration of a particle in a magnetic     //
 // field, without any slowing due to interactions with matter.               //
 // --------------------------------------------------------------------------//
-#ifndef GEOMODELKERNEL_GEOXPENGINE_H
-#define GEOMODELKERNEL_GEOXPENGINE_H
+
+#ifndef LARG4VALIDATION_GEOXPENGINE_H
+#define LARG4VALIDATION_GEOXPENGINE_H
 #include <CLHEP/Geometry/Point3D.h>
 #include <CLHEP/Vector/LorentzVector.h>
-////class HepGeom::Point3D<double>;
-////class CLHEP::HepLorentzVector;
+
 namespace Genfun {
   class AbsFunction;
 }
 
-
 class GeoXPEngine {
 
  public:
@@ -60,8 +59,6 @@ class GeoXPEngine {
   const Genfun::AbsFunction       *m_py;
   const Genfun::AbsFunction       *m_pz;
 
-  
-
 };
 
 #endif
diff --git a/LArCalorimeter/LArG4/LArG4Validation/src/SingleTrackValidation.cxx b/LArCalorimeter/LArG4/LArG4Validation/src/SingleTrackValidation.cxx
index f54fd7c96713bc71cda0338bd0ea7830a860147f..ca57b57ffb124bc3c06cf5ad8a8b18e574d14454 100755
--- a/LArCalorimeter/LArG4/LArG4Validation/src/SingleTrackValidation.cxx
+++ b/LArCalorimeter/LArG4/LArG4Validation/src/SingleTrackValidation.cxx
@@ -23,7 +23,7 @@
 
 // To extrapolate:
 #include "AtlasBComponent.h"
-#include "GeoModelKernel/GeoXPEngine.h"
+#include "GeoXPEngine.h"
 
 // To interpret LAr Geometry information:
 #include "CaloDetDescr/CaloDetDescrManager.h"
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
index 581fc4239833e9b63ee69f18f4d3d81ac969de01..70a9c43cde37c79c248b6ea828e79dd017c085af 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( LArGeoAlgsNV )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/IOVSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
@@ -18,6 +17,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Database/RDBAccessSvc
                           DetectorDescription/DetDescrCond/DetDescrConditions
                           DetectorDescription/GeoModel/GeoModelInterfaces
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel
                           LArCalorimeter/LArGeoModel/LArGeoBarrel
                           LArCalorimeter/LArGeoModel/LArGeoCode
@@ -30,13 +30,15 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArGeoAlgsNV
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} IOVSvcLib GeoModelKernel GeoModelUtilities LArReadoutGeometry SGTools StoreGateLib SGtests DetDescrConditions GaudiKernel LArGeoBarrel LArGeoCode LArGeoEndcap LArGeoRAL LArGeoTBBarrel LArHV )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} ${EIGEN_LIBRARIES} IOVSvcLib GeoModelUtilities LArReadoutGeometry SGTools StoreGateLib SGtests DetDescrConditions GaudiKernel LArGeoBarrel LArGeoCode LArGeoEndcap LArGeoRAL LArGeoTBBarrel LArHV )
 
 # Install files from the package:
 atlas_install_headers( LArGeoAlgsNV )
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
index a7084dbe85275e9b2cdffef6b0ec4d4997820bdd..3ff752ce74b884a6e5be9e2a56bae3a07a4c9e9a 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
@@ -16,6 +16,8 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include "CLHEP/Geometry/Transform3D.h" 
 
@@ -181,7 +183,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // --- Barrel
 	    const IRDBRecord *barrelRec = GeoDBUtils::getTransformRecord(larPosition,"LARCRYO_B"); 
 	    if(!barrelRec) throw std::runtime_error("Error, no lar position record in the database");
-	    HepGeom::Transform3D xfBarrel = GeoDBUtils::getTransform(barrelRec);
+	    GeoTrf::Transform3D xfBarrel = GeoDBUtils::getTransform(barrelRec);
 	    GeoAlignableTransform* barrelAlXf = new GeoAlignableTransform(xfBarrel);
 
 	    {
@@ -201,7 +203,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // --- Endcap Pos
 	    const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, "LARCRYO_EC_POS");
 	    if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	    HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	    GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
 	    GeoAlignableTransform *xfEndcapPos = new GeoAlignableTransform(xfPos);
 
 	    {
@@ -217,7 +219,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // --- Endcap Neg
 	    const IRDBRecord *negRec = GeoDBUtils::getTransformRecord(larPosition, "LARCRYO_EC_NEG");
 	    if (!negRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	    HepGeom::Transform3D xfNeg = GeoDBUtils::getTransform(negRec);
+	    GeoTrf::Transform3D xfNeg = GeoDBUtils::getTransform(negRec);
 	    GeoAlignableTransform *xfEndcapNeg = new GeoAlignableTransform(xfNeg);
 
 	    {
@@ -235,7 +237,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    a_container->add(endcapEnvelopePos);
 	    a_container->add( new GeoNameTag("LArEndcapNeg"));
 	    a_container->add(xfEndcapNeg);
-	    a_container->add( new GeoTransform(HepGeom::RotateY3D(180.0*CLHEP::deg)));
+	    a_container->add( new GeoTransform(GeoTrf::RotateY3D(180.0*GeoModelKernelUnits::deg)));
 	    a_container->add(endcapEnvelopeNeg);
 	  }
 	else if(!m_buildEndcap)
@@ -243,7 +245,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // -- Build the Barrel only
 	    const IRDBRecord *barrelRec = GeoDBUtils::getTransformRecord(larPosition,"LARCRYO_B"); 
 	    if(!barrelRec) throw std::runtime_error("Error, no lar position record in the database");
-	    HepGeom::Transform3D xfBarrel = GeoDBUtils::getTransform(barrelRec);
+	    GeoTrf::Transform3D xfBarrel = GeoDBUtils::getTransform(barrelRec);
 	    GeoAlignableTransform* barrelAlXf = new GeoAlignableTransform(xfBarrel);
 
 	    {
@@ -266,7 +268,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // --- Endcap Pos
 	    const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, "LARCRYO_EC_POS");
 	    if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	    HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	    GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
 	    GeoAlignableTransform *xfEndcapPos = new GeoAlignableTransform(xfPos);
 
 	    {
@@ -282,7 +284,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    // --- Endcap Neg
 	    const IRDBRecord *negRec = GeoDBUtils::getTransformRecord(larPosition, "LARCRYO_EC_NEG");
 	    if (!negRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	    HepGeom::Transform3D xfNeg = GeoDBUtils::getTransform(negRec);
+	    GeoTrf::Transform3D xfNeg = GeoDBUtils::getTransform(negRec);
 	    GeoAlignableTransform *xfEndcapNeg = new GeoAlignableTransform(xfNeg);
 
 	    {
@@ -300,7 +302,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 	    a_container->add(endcapEnvelopePos);
 	    a_container->add( new GeoNameTag("LArEndcapNeg"));
 	    a_container->add(xfEndcapNeg);
-	    a_container->add( new GeoTransform(HepGeom::RotateY3D(180.0*CLHEP::deg)));
+	    a_container->add( new GeoTransform(GeoTrf::RotateY3D(180.0*GeoModelKernelUnits::deg)));
 	    a_container->add(endcapEnvelopeNeg);
       
 	  }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.h b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.h
index 497b3e31760e5b1384eea6fb430ba747dec2be63..78f814b3bc419bbafb8337d5d58f63eb40e80a32 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.h
@@ -10,8 +10,8 @@
  * $Id: LArDetectorFactory.h,v 1.4 2009-02-10 16:43:17 tsulaia Exp $
  */
 
-#ifndef LArGeo_LArDetectorFactory_h
-#define LArGeo_LArDetectorFactory_h
+#ifndef LARGEOALGSNV_LARDETECTORFACTORY_H
+#define LARGEOALGSNV_LARDETECTORFACTORY_H
 #include "LArReadoutGeometry/LArDetectorManager.h"
 #include "GeoModelKernel/GeoVDetectorFactory.h"
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
index 3649ee7794598a9d77d0ec5f1ec7eff205b4e558..0d85ea1426c731f322d99fb0c98282c825e4863b 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
@@ -21,6 +21,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoGraphNode.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
 #include "DetDescrConditions/DetCondKeyTrans.h"
 
@@ -41,17 +42,18 @@
 #define LAR_ALIGN "/LAR/Align"
 
 
-LArDetectorToolNV::LArDetectorToolNV(const std::string& type, 
-				     const std::string& name, 
-				     const IInterface* parent)
-  : GeoModelTool(type,name,parent), 
-    m_barrelSaggingOn(false),
-    m_barrelVisLimit(-1),
-    m_fcalVisLimit(-1),
-    m_buildBarrel(true),
-    m_buildEndcap(true),
-    m_applyAlignments(false),
-    m_geometryConfig("FULL")
+LArDetectorToolNV::LArDetectorToolNV(const std::string& type
+				     , const std::string& name
+				     , const IInterface* parent)
+  : GeoModelTool(type,name,parent) 
+  , m_barrelSaggingOn(false)
+  , m_barrelVisLimit(-1)
+  , m_fcalVisLimit(-1)
+  , m_buildBarrel(true)
+  , m_buildEndcap(true)
+  , m_applyAlignments(false)
+  , m_manager{nullptr}
+  , m_geometryConfig("FULL")
 {
   declareProperty("SaggingBarrelAccordeon",m_barrelSaggingOn);
   declareProperty("BarrelCellVisLimit",    m_barrelVisLimit);
@@ -61,8 +63,6 @@ LArDetectorToolNV::LArDetectorToolNV(const std::string& type,
   declareProperty("BuildEndcap",           m_buildEndcap);
   declareProperty("ApplyAlignments",       m_applyAlignments);
   declareProperty("GeometryConfig",        m_geometryConfig);
-  m_manager = 0;
-
 }
 
 LArDetectorToolNV::~LArDetectorToolNV()
@@ -73,13 +73,6 @@ LArDetectorToolNV::~LArDetectorToolNV()
 
 StatusCode LArDetectorToolNV::create()
 { 
-  IMessageSvc* msgSvc;
-  if(StatusCode::FAILURE==service ("MessageSvc",msgSvc))
-  {
-    std::cerr << "LArDetectorToolNV::create ERROR unable to get message service!\n";
-    return StatusCode::FAILURE;
-  }
-
   // Initialize the HV System:
   const EMBHVManager *embHV=new EMBHVManager();
   const EMECHVManager *emecHVI= new EMECHVManager(EMECHVModule::INNER);
@@ -89,80 +82,60 @@ StatusCode LArDetectorToolNV::create()
   const EMBPresamplerHVManager *embPSHV = new EMBPresamplerHVManager();
   const EMECPresamplerHVManager *emecPSHV = new EMECPresamplerHVManager();
 
-
   LArHVManager *hvManager= new LArHVManager(embHV,emecHVI, emecHVO, hecHV, fcalHV,embPSHV, emecPSHV);
 
-
-  MsgStream log(msgSvc, name()); 
-  if (StatusCode::SUCCESS != detStore()->record(hvManager,"LArHVManager")) {
-     log << MSG::ERROR << "Unable to record LArHVManager in detector store " << endmsg;
-     return StatusCode::FAILURE;
-  }
-  
+  ATH_CHECK(detStore()->record(hvManager,"LArHVManager"));  
 
   // Get the detector configuration.
-  IGeoDbTagSvc *geoDbTag;
-  if(StatusCode::FAILURE==service ("GeoDbTagSvc",geoDbTag))
-  {
-    log << MSG::ERROR << "Unable to get GeoDbTag service" <<  endmsg;
-    return StatusCode::FAILURE;
-  }
+  ServiceHandle<IGeoDbTagSvc> geoDbTag("GeoDbTagSvc",name());
+  ATH_CHECK(geoDbTag.retrieve());
 
   std::string AtlasVersion = geoDbTag->atlasVersion();
   std::string LArVersion   = geoDbTag->LAr_VersionOverride();
 
-  IRDBAccessSvc *accessSvc;
-  if(StatusCode::FAILURE==service("RDBAccessSvc",accessSvc))
-  {
-    log << MSG::ERROR << "Unable to get RDBAccess service" <<  endmsg;
-    return StatusCode::FAILURE;
-  }
+  ServiceHandle<IRDBAccessSvc> accessSvc("RDBAccessSvc",name());
+  ATH_CHECK(accessSvc.retrieve());
 
   std::string detectorKey  = LArVersion.empty() ? AtlasVersion : LArVersion;
   std::string detectorNode = LArVersion.empty() ? "ATLAS" : "LAr";
-  log << MSG::INFO << "Keys for LAr are "  << detectorKey  << "  " << detectorNode << endmsg;
-  log << MSG::INFO << "Building LAr version " << geoDbTag->LAr_Version()
-      << " while ATLAS version is " <<  AtlasVersion << endmsg;
-
-  if(LArVersion=="CUSTOM") 
-  {
-    log << MSG::WARNING << "LArDetectorToolNV:  Detector Information coming from a custom configuration!!" 
-	<< endmsg;
+  ATH_MSG_INFO("Keys for LAr are "  << detectorKey  << "  " << detectorNode);
+  ATH_MSG_INFO("Building LAr version " << geoDbTag->LAr_Version()
+      << " while ATLAS version is " <<  AtlasVersion);
+
+  if(LArVersion=="CUSTOM") {
+    ATH_MSG_WARNING("LArDetectorToolNV:  Detector Information coming from a custom configuration!!");
   } 
-  else 
-  {
+  else {
     IRDBRecordset_ptr switchSet = accessSvc->getRecordsetPtr("LArSwitches", detectorKey, detectorNode);
-    if ((*switchSet).size()==0) return StatusCode::FAILURE;
+    if ((*switchSet).size()==0) {
+      ATH_MSG_ERROR("Unable to retrieve LArSwitches from Geometry DB");
+      return StatusCode::FAILURE;
+    }
     const IRDBRecord    *switches   = (*switchSet)[0];
-    
     m_barrelSaggingOn           = switches->getInt("SAGGING");
 
-    try
-    {
-      if (!switches->isFieldNull("BARREL_ON"))
+    try {
+      if (!switches->isFieldNull("BARREL_ON")) {
 	m_buildBarrel = switches->getInt("BARREL_ON");
+      }
       
-      if (!switches->isFieldNull("ENDCAP_ON"))
+      if (!switches->isFieldNull("ENDCAP_ON")) {
 	m_buildEndcap = switches->getInt("ENDCAP_ON");
+      }
     }
-    catch(std::exception& e)
-    {
-      log << MSG::DEBUG << e.what() << endmsg;
+    catch(const std::exception& e) {
+      ATH_MSG_DEBUG(e.what());
     }
   }
 
-  log << MSG::INFO  << "LAr Geometry Options:"   << endmsg;
-  log << MSG::INFO  << "  Sagging           = "  << (m_barrelSaggingOn ? "true" : "false") << endmsg;
-  log << MSG::INFO  << "  Barrel            = "  << (m_buildBarrel ? "ON" : "OFF") << endmsg;
-  log << MSG::INFO  << "  Endcap            = "  << (m_buildEndcap ? "ON" : "OFF") << endmsg;
+  ATH_MSG_INFO("LAr Geometry Options:"  );
+  ATH_MSG_INFO("  Sagging           = "  << (m_barrelSaggingOn ? "true" : "false"));
+  ATH_MSG_INFO("  Barrel            = "  << (m_buildBarrel ? "ON" : "OFF"));
+  ATH_MSG_INFO("  Endcap            = "  << (m_buildEndcap ? "ON" : "OFF"));
 
   // Locate the top level experiment node 
-  GeoModelExperiment* theExpt = nullptr;
-  if (StatusCode::SUCCESS != detStore()->retrieve( theExpt, "ATLAS" )) 
-  { 
-    log << MSG::ERROR << "Could not find GeoModelExperiment ATLAS" << endmsg; 
-    return (StatusCode::FAILURE); 
-  } 
+  DataHandle<GeoModelExperiment> theExpt; 
+  ATH_CHECK(detStore()->retrieve(theExpt,"ATLAS"));
 
   // determine the geometry layout - Atlas/Testbeam
   std::string geometryLayout = "Atlas";
@@ -171,7 +144,6 @@ StatusCode LArDetectorToolNV::create()
   // testbeam=1  H8 test beam => build GeoModel in LArDetectorFactory
   // testbeam=2  H6 test beam => don't build GeoModel in LArDetectorFactory
 
-
   std::string LArTag = accessSvc->getChildTag("LAr",detectorKey,detectorNode);
 
   if(LArTag.find("H8")!=std::string::npos) {
@@ -182,8 +154,9 @@ StatusCode LArDetectorToolNV::create()
     geometryLayout = "H6";
     testbeam = 2 ;
   }
-  else if(LArTag.find("G3")!=std::string::npos)
+  else if(LArTag.find("G3")!=std::string::npos) {
     geometryLayout = "G3";
+  }
 
   LArGeo::LArDetectorFactory theLArFactory(testbeam,m_geometryConfig=="FULL");
 
@@ -193,30 +166,17 @@ StatusCode LArDetectorToolNV::create()
   theLArFactory.setBuildBarrel(m_buildBarrel);
   theLArFactory.setBuildEndcap(m_buildEndcap);
 
-
-
-  if (0 == m_detector) 
-  {
+  if(m_detector==nullptr) {
     GeoPhysVol *world=&*theExpt->getPhysVol();
     theLArFactory.create(world);
     m_manager = theLArFactory.getDetectorManager();
-    if (StatusCode::SUCCESS != detStore()->record(theLArFactory.getDetectorManager(),
-						theLArFactory.getDetectorManager()->getName())) 
-      { 
-	log << MSG::ERROR << "Could not record" << endmsg; 
-	return (StatusCode::FAILURE); 
-      } 
-
+    ATH_CHECK(detStore()->record(theLArFactory.getDetectorManager(),theLArFactory.getDetectorManager()->getName()));
     theExpt->addManager(theLArFactory.getDetectorManager());
 
     // Release RDB Recordsets if we are inside reco job
-    if(m_geometryConfig=="RECO")
-      LArGeo::VDetectorParameters::SetInstance(0);
-
+    if(m_geometryConfig=="RECO") LArGeo::VDetectorParameters::SetInstance(0);
     return StatusCode::SUCCESS;
   }
-
-
   return StatusCode::FAILURE;
 }
 
@@ -224,14 +184,14 @@ StatusCode LArDetectorToolNV::clear()
 {
   std::vector<std::string>::const_iterator itStored;
 
-  StoredPhysVol* storedPV(0);
+  StoredPhysVol* storedPV{nullptr};
   StatusCode status(StatusCode::SUCCESS);
   std::vector<std::string> sgkeysFPV = detStore()->keys<StoredPhysVol>();
   // First loop over all Full Physical volumes and initialize their global position informations
   for(itStored=sgkeysFPV.begin();itStored!=sgkeysFPV.end();itStored++) {
     status = detStore()->retrieve(storedPV,*itStored);
     if(status.isFailure()) {
-      storedPV = 0;
+      storedPV = nullptr;
       continue;
     }
 
@@ -244,7 +204,7 @@ StatusCode LArDetectorToolNV::clear()
   for(itStored=sgkeysFPV.begin();itStored!=sgkeysFPV.end();itStored++) {
     status = detStore()->retrieve(storedPV,*itStored);
     if(status.isFailure()) {
-      storedPV = 0;
+      storedPV = nullptr;
       continue;
     }
 
@@ -257,15 +217,14 @@ StatusCode LArDetectorToolNV::clear()
   std::vector<std::string> sgkeysAXF = detStore()->keys<StoredAlignX>();
   for(itStored=sgkeysAXF.begin();itStored!=sgkeysAXF.end();itStored++) {
     SG::DataProxy* proxy = detStore()->proxy(ClassID_traits<StoredAlignX>::ID(),*itStored);
-    if(proxy)
-      proxy->reset();
+    if(proxy) proxy->reset();
   }
 
   // Release manager from the detector store
   SG::DataProxy* proxy = detStore()->proxy(ClassID_traits<LArDetectorManager>::ID(),m_manager->getName());
   if(proxy) {
     proxy->reset();
-    m_manager = 0;
+    m_manager = nullptr;
   }
 
   return StatusCode::SUCCESS;
@@ -274,224 +233,212 @@ StatusCode LArDetectorToolNV::clear()
 StatusCode LArDetectorToolNV::registerCallback()
 {
   // Return FAILURE if no callbacks have been registered
-  MsgStream log(msgSvc(), name());
- 
-  if(!m_applyAlignments)
-  {
-    log << MSG::DEBUG << "LAr alignments switched OFF" << endmsg;
+  if(!m_applyAlignments) {
+    ATH_MSG_DEBUG("LAr alignments switched OFF");
     return StatusCode::FAILURE;
   }
 
   std::string folderName = "/LAR/Align";
 
   const DataHandle<DetCondKeyTrans> dckt;
-  log << MSG::DEBUG << "Registering callback on DetCondKeyTrans with folder " << folderName << endmsg;
+  ATH_MSG_DEBUG("Registering callback on DetCondKeyTrans with folder " << folderName);
   StatusCode sc = detStore()->regFcn(&IGeoModelTool::align, dynamic_cast<IGeoModelTool *>(this), dckt, folderName); 
-  if(sc.isSuccess())
-    log << MSG::DEBUG << " Successfully registered " << endmsg;
-  else
-    log << MSG::DEBUG << " Registration failed " << endmsg;
+  if(sc.isSuccess()) {
+    ATH_MSG_DEBUG(" Successfully registered ");
+  }
+  else {
+    ATH_MSG_DEBUG(" Registration failed ");
+  }
 
   return sc;
 }
 
 StatusCode LArDetectorToolNV::align(IOVSVC_CALLBACK_ARGS)
 {
-  MsgStream log(msgSvc(), name()); 
-
-  if(!m_applyAlignments)
-  {
-    log << MSG::DEBUG << "LAr alignments switched OFF" << endmsg;
+  if(!m_applyAlignments) {
+    ATH_MSG_DEBUG("LAr alignments switched OFF");
     return StatusCode::SUCCESS;
   }
 
-  // !!! To Do --->
-  // Find a better solution for this
-
-  std::vector< std::string > alignNames;
-  alignNames.push_back("LARCRYO_B");
-  alignNames.push_back("LARCRYO_EC_POS");
-  alignNames.push_back("LARCRYO_EC_NEG");
-  alignNames.push_back("PRESAMPLER_B_POS");
-  alignNames.push_back("PRESAMPLER_B_NEG");
-  alignNames.push_back("EMB_POS");
-  alignNames.push_back("EMB_NEG");
-  alignNames.push_back("PRESAMPLER_EC_POS");
-  alignNames.push_back("PRESAMPLER_EC_NEG");
-  alignNames.push_back("EMEC_POS");
-  alignNames.push_back("EMEC_NEG");
-  alignNames.push_back("HEC_POS");  // Policy:  either HEC_POS is present or HEC1_POS and HEC2_POS
-  alignNames.push_back("HEC_NEG");  // Same with HEC_NEG.  Now in recent releases if HEC_POS is found
-  alignNames.push_back("HEC1_POS"); // it will be applied to both HEC1 and HEC2...
-  alignNames.push_back("HEC1_NEG");
-  alignNames.push_back("HEC2_POS");
-  alignNames.push_back("HEC2_NEG");
-  alignNames.push_back("FCAL1_POS");
-  alignNames.push_back("FCAL1_NEG");
-  alignNames.push_back("FCAL2_POS");
-  alignNames.push_back("FCAL2_NEG");
-  alignNames.push_back("FCAL3_POS");
-  alignNames.push_back("FCAL3_NEG");
-  alignNames.push_back("SOLENOID");
-
-  // <--- !!! To Do
-
-  if(0 == m_manager) 
-  {
-    log << MSG::WARNING << " LArDetDescrManager not created yet, cannot align !" << endmsg;
+  std::vector<std::string> alignNames {
+    "LARCRYO_B"
+      ,"LARCRYO_EC_POS"
+      ,"LARCRYO_EC_NEG"
+      ,"PRESAMPLER_B_POS"
+      ,"PRESAMPLER_B_NEG"
+      ,"EMB_POS"
+      ,"EMB_NEG"
+      ,"PRESAMPLER_EC_POS"
+      ,"PRESAMPLER_EC_NEG"
+      ,"EMEC_POS"
+      ,"EMEC_NEG"
+      ,"HEC_POS"  // Policy:  either HEC_POS is present or HEC1_POS and HEC2_POS
+      ,"HEC_NEG"  // Same with HEC_NEG.  Now in recent releases if HEC_POS is found
+      ,"HEC1_POS" // it will be applied to both HEC1 and HEC2...
+      ,"HEC1_NEG"
+      ,"HEC2_POS"
+      ,"HEC2_NEG"
+      ,"FCAL1_POS"
+      ,"FCAL1_NEG"
+      ,"FCAL2_POS"
+      ,"FCAL2_NEG"
+      ,"FCAL3_POS"
+      ,"FCAL3_NEG"
+      ,"SOLENOID"
+      };
+
+  if(m_manager==nullptr) {
+    ATH_MSG_ERROR(" LArDetDescrManager not created yet, cannot align !");
     return StatusCode::FAILURE;
   }
 
   const DetCondKeyTrans* align=0;
-  if(detStore()->contains<DetCondKeyTrans>(LAR_ALIGN))
-  {
+  if(detStore()->contains<DetCondKeyTrans>(LAR_ALIGN)) {
     StatusCode sc = detStore()->retrieve(align, LAR_ALIGN);
   
-    if(sc.isFailure())
-    {
-      log << MSG::WARNING << " Could not retrieve LAr DetCondKeyTrans " << endmsg;
+    if(sc.isFailure()) {
+      ATH_MSG_ERROR(" Could not retrieve LAr DetCondKeyTrans ");
       return sc;
     }
 
-    if(0 == align) 
-    {
-      log << MSG::WARNING <<" LAr DetCondKeyTrans ptr is 0" << endmsg;
+    if(0 == align) {
+      ATH_MSG_ERROR(" LAr DetCondKeyTrans ptr is 0");
       return StatusCode::FAILURE;
     }
 
-    log << MSG::DEBUG << " LAr DetCondKeyTrans retrieved " << endmsg;
+    ATH_MSG_DEBUG(" LAr DetCondKeyTrans retrieved ");
 
     // Special treatment for the HEC:
-    StoredAlignX *hec1AlxPos=0;
-    StoredAlignX *hec2AlxPos=0;
-    StoredAlignX *hec1AlxNeg=0;
-    StoredAlignX *hec2AlxNeg=0;
+    StoredAlignX *hec1AlxPos{nullptr};
+    StoredAlignX *hec2AlxPos{nullptr};
+    StoredAlignX *hec1AlxNeg{nullptr};
+    StoredAlignX *hec2AlxNeg{nullptr};
     if (detStore()->contains<StoredAlignX> ("HEC1_POS")) {
       if (detStore()->retrieve(hec1AlxPos,"HEC1_POS")!=StatusCode::SUCCESS) {
-	log << MSG::WARNING << " Unable to retrieve StoredAlignX for the key HEC1_POS" << endmsg;
+	ATH_MSG_WARNING(" Unable to retrieve StoredAlignX for the key HEC1_POS");
       }
     }
     if (detStore()->contains<StoredAlignX> ("HEC1_NEG")) {
       if (detStore()->retrieve(hec1AlxNeg,"HEC1_NEG")!=StatusCode::SUCCESS) {
-	log << MSG::WARNING << " Unable to retrieve StoredAlignX for the key HEC1_NEG" << endmsg;
+	ATH_MSG_WARNING(" Unable to retrieve StoredAlignX for the key HEC1_NEG");
       }
     }
     if (detStore()->contains<StoredAlignX> ("HEC2_POS")) {
       if (detStore()->retrieve(hec2AlxPos,"HEC2_POS")!=StatusCode::SUCCESS) {
-	log << MSG::WARNING << " Unable to retrieve StoredAlignX for the key HEC2_POS" << endmsg;
+	ATH_MSG_WARNING(" Unable to retrieve StoredAlignX for the key HEC2_POS");
       }
     }
     if (detStore()->contains<StoredAlignX> ("HEC2_NEG")) {
       if (detStore()->retrieve(hec2AlxNeg,"HEC2_NEG")!=StatusCode::SUCCESS) {
-	log << MSG::WARNING << " Unable to retrieve StoredAlignX for the key HEC2_NEG" << endmsg;
+	ATH_MSG_WARNING(" Unable to retrieve StoredAlignX for the key HEC2_NEG");
       }
     }
-    GeoAlignableTransform *hec1GatPos = hec1AlxPos ? hec1AlxPos->getAlignX(): NULL;
-    GeoAlignableTransform *hec1GatNeg = hec1AlxPos ? hec1AlxNeg->getAlignX(): NULL;
-    GeoAlignableTransform *hec2GatPos = hec2AlxPos ? hec2AlxPos->getAlignX(): NULL;
-    GeoAlignableTransform *hec2GatNeg = hec2AlxPos ? hec2AlxNeg->getAlignX(): NULL;
+    GeoAlignableTransform *hec1GatPos = hec1AlxPos ? hec1AlxPos->getAlignX(): nullptr;
+    GeoAlignableTransform *hec1GatNeg = hec1AlxPos ? hec1AlxNeg->getAlignX(): nullptr;
+    GeoAlignableTransform *hec2GatPos = hec2AlxPos ? hec2AlxPos->getAlignX(): nullptr;
+    GeoAlignableTransform *hec2GatNeg = hec2AlxPos ? hec2AlxNeg->getAlignX(): nullptr;
     
     // loop over align names
     // if the transform presented alter its delta
     // if the transform is not presented clear its delta
-    for(unsigned int i=0; i<alignNames.size(); i++)
-    {
+    for(unsigned int i=0; i<alignNames.size(); i++) {
       std::string alignName = alignNames[i];
+      HepGeom::Transform3D newDelta;
       // First try to retrieve StoredAlignX
-      if(detStore()->contains<StoredAlignX>(alignName))
-      {
-	StoredAlignX* alignX = 0;
+      if(detStore()->contains<StoredAlignX>(alignName)) {
+	StoredAlignX* alignX{nullptr};
 	sc = detStore()->retrieve(alignX,alignName);
 
-	if(sc.isFailure())
-	{
-	  log << MSG::WARNING << " Unable to retrieve StoredAlignX for the key " << alignName << endmsg;
+	if(sc.isFailure()) {
+	  ATH_MSG_ERROR(" Unable to retrieve StoredAlignX for the key " << alignName);
 	  return sc;
 	}
 
-	if(!alignX)
-	{
-	  log << MSG::WARNING << " 0 pointer to StoredAlignX for the key " << alignName << endmsg;
+	if(!alignX) {
+	  ATH_MSG_ERROR(" 0 pointer to StoredAlignX for the key " << alignName);
 	  return StatusCode::FAILURE;
 	}
 
 	GeoAlignableTransform* gat = alignX->getAlignX();
-	if(!gat)
-	{
-	  log << MSG::WARNING << " 0 pointer to GeoAlignableTransform for the key " << alignName << endmsg;
+	if(!gat) {
+	  ATH_MSG_ERROR(" 0 pointer to GeoAlignableTransform for the key " << alignName);
 	  return StatusCode::FAILURE;
 	}
 
 	// check existence of new delta in DetCondKeyTrans
-	HepGeom::Transform3D newDelta;
-	if(align->getTransform(alignName,newDelta))
-	  gat->setDelta(newDelta);
-	else
+	if(align->getTransform(alignName,newDelta)) {
+	  gat->setDelta(Amg::CLHEPTransformToEigen(newDelta));
+	}
+	else {
 	  gat->clearDelta();
+	}
       }
       else if (alignName=="HEC_POS") {
 	if (hec1GatPos) {
-	  HepGeom::Transform3D newDelta;
-	  if(align->getTransform(alignName,newDelta))
-	    hec1GatPos->setDelta(newDelta);
-	  else
+	  if(align->getTransform(alignName,newDelta)) {
+	    hec1GatPos->setDelta(Amg::CLHEPTransformToEigen(newDelta));
+	  }
+	  else {
 	    hec1GatPos->clearDelta();
+	  }
 	}
 	if (hec2GatPos) {
-	  HepGeom::Transform3D newDelta;
-	  if(align->getTransform(alignName,newDelta))
-	    hec2GatPos->setDelta(newDelta);
-	  else
+	  if(align->getTransform(alignName,newDelta)) {
+	    hec2GatPos->setDelta(Amg::CLHEPTransformToEigen(newDelta));
+	  }
+	  else {
 	    hec2GatPos->clearDelta();
+	  }
 	}
       }
       else if (alignName=="HEC_NEG") {
 	if (hec1GatNeg) {
-	  HepGeom::Transform3D newDelta;
-	  if(align->getTransform(alignName,newDelta))
-	    hec1GatNeg->setDelta(newDelta);
-	  else
+	  if(align->getTransform(alignName,newDelta)) {
+	    hec1GatNeg->setDelta(Amg::CLHEPTransformToEigen(newDelta));
+	  }
+	  else {
 	    hec1GatNeg->clearDelta();
+	  }
 	}
 	if (hec2GatNeg) {
-	  HepGeom::Transform3D newDelta;
-	  if(align->getTransform(alignName,newDelta))
-	    hec2GatNeg->setDelta(newDelta);
-	  else
+	  if(align->getTransform(alignName,newDelta)) {
+	    hec2GatNeg->setDelta(Amg::CLHEPTransformToEigen(newDelta));
+	  }
+	  else {
 	    hec2GatNeg->clearDelta();
+	  }
 	}
       }
-      else
-	log << MSG::DEBUG << " No StoredAlignX for the key " << alignName << endmsg;
+      else {
+	ATH_MSG_DEBUG(" No StoredAlignX for the key " << alignName);
+      }
     } // for
   }
-  else
-    log << MSG::DEBUG << " No LAr DetCondKeyTrans in SG, skipping align() " << endmsg;
-
+  else {
+    ATH_MSG_DEBUG(" No LAr DetCondKeyTrans in SG, skipping align() ");
+  }
   
   // debug printout of global positions:
-  for(unsigned int i=0; i<alignNames.size(); i++)
-  {
-    std::string alignName = alignNames[i];
-    if(detStore()->contains<StoredPhysVol>(alignName))
-    {
-	StoredPhysVol* storedPV = 0;
-	StatusCode sc = detStore()->retrieve(storedPV,alignName);
-	if(sc.isSuccess())
-	{
-	  const GeoFullPhysVol* fullPV = storedPV->getPhysVol();
-	  const HepGeom::Transform3D& xf =  fullPV->getAbsoluteTransform();
-	  CLHEP::Hep3Vector trans=xf.getTranslation();
-	  CLHEP::HepRotation rot=xf.getRotation();
-	  log << MSG::DEBUG << "Dump Absolute Transform:" << endmsg;
-	  log << MSG::DEBUG << "Key " << alignName << " transl [" << trans.x()
-               << "," << trans.y() << "," << trans.z() << "] rotation ("
-               << rot.phi() << "," << rot.theta() << "," <<  rot.psi() << ")"
-               << endmsg;
-	}
+//  for(unsigned int i=0; i<alignNames.size(); i++) 
+  for(const std::string& alignName : alignNames) {
+    if(detStore()->contains<StoredPhysVol>(alignName)) {
+      StoredPhysVol* storedPV{nullptr};
+      StatusCode sc = detStore()->retrieve(storedPV,alignName);
+      if(sc.isSuccess()) {
+	const GeoFullPhysVol* fullPV = storedPV->getPhysVol();
+	const GeoTrf::Transform3D& xf =  fullPV->getAbsoluteTransform();
+	GeoTrf::Vector3D trans=xf.translation();
+	GeoTrf::RotationMatrix3D rot=xf.rotation();
+	ATH_MSG_DEBUG("Dump Absolute Transform:");
+	ATH_MSG_DEBUG("Key " << alignName << " transl [" << trans.x()
+		      << "," << trans.y() << "," << trans.z() << "] rotation \n("
+		      << rot(0,0) << "," << rot(0,1) << "," << rot(0,2) << "\n"
+		      << rot(1,0) << "," << rot(1,1) << "," << rot(1,2) << "\n"
+		      << rot(2,0) << "," << rot(2,1) << "," << rot(2,2) << ")");
+      }
     }
   }
-
+  
   return StatusCode::SUCCESS;
 }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorToolNV.h b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorToolNV.h
index 84ac7c84cd823a8863be8a31b8d55cdd48a144e9..23cc4298ad1dd6e5e1f292cc8f5443259cc82c72 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorToolNV.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorToolNV.h
@@ -10,11 +10,12 @@
  * $Id: LArDetectorToolNV.h,v 1.8 2009-05-13 15:47:48 tsulaia Exp $
  */
 
-#ifndef LARGEOMODEL_LARDETECTORTOOL_H
-#define LARGEOMODEL_LARDETECTORTOOL_H
+#ifndef LARGEOALGSNV_LARDETECTORTOOLNV_H
+#define LARGEOALGSNV_LARDETECTORTOOLNV_H
 
 #include "GeoModelUtilities/GeoModelTool.h"
 #include "IOVSvc/IOVSvc.h"
+
 class LArDetectorManager;
 class StoreGateSvc;
 
@@ -23,10 +24,9 @@ class StoreGateSvc;
     stores LArDetectorManager to the Detector Store and also registers a callback function
     align() which applies misalignments on top of the 'regular' geometry.
 */
-class LArDetectorToolNV : public GeoModelTool {
-
-public:
 
+class LArDetectorToolNV : public GeoModelTool {
+ public:
     // Standard Constructor
     LArDetectorToolNV( const std::string& type, const std::string& name, const IInterface* parent );
 
@@ -46,7 +46,6 @@ public:
     virtual StatusCode align(IOVSVC_CALLBACK_ARGS) override final;
 	
  private:
-
     bool m_barrelSaggingOn;
     int  m_barrelVisLimit;
     int  m_fcalVisLimit;
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
index c3661e59011558b308d92b7db4ab2a5bdf911fed..1fc3b3e246cb48823ad3331cccf0b5d959f3a4f5 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( LArGeoBarrel )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           LArCalorimeter/LArGeoModel/LArGeoCode
                           PRIVATE
                           Control/StoreGate
@@ -19,16 +18,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoBarrel
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoBarrel
-                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
+                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel LArGeoCode StoreGateLib SGtests
+                   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} LArGeoCode StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} GeoModelUtilities GaudiKernel LArReadoutGeometry )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelConstruction.h
index cc6f43bca74dec585582f9ade680851d2eea8dd7..6a4445778b1ea323ca0e0d11170a164eec250d32 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelConstruction.h
@@ -11,7 +11,7 @@
 
 #include "LArGeoCode/VDetectorParameters.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
-#include "CLHEP/GenericFunctions/FunctionNoop.hh"
+#include "GeoGenericFunctions/FunctionNoop.h"
 
 
 namespace LArGeo {
@@ -48,25 +48,25 @@ namespace LArGeo {
 
     // Three auxiliary functions:------------------------------------//
     //                                                               //
-    Genfun::FunctionNoop Fx( double r,                               //
-			       Genfun::GENFUNCTION G,                //
+    GeoGenfun::FunctionNoop Fx( double r,                               //
+			       GeoGenfun::GENFUNCTION G,                //
 			       const double Cenx[],                  //
 			       const double Ceny[] ) const;          //
       //                                                             //
-      Genfun::FunctionNoop Fy( double r,                             //
-			       Genfun::GENFUNCTION G,                //
+      GeoGenfun::FunctionNoop Fy( double r,                             //
+			       GeoGenfun::GENFUNCTION G,                //
 			       const double Cenx[],                  //
 			       const double Ceny[] ) const;          //
       //                                                             //
-      Genfun::FunctionNoop Dely(Genfun::GENFUNCTION G ) const;       //
-      Genfun::FunctionNoop Del1(Genfun::GENFUNCTION G ) const;       //
-      Genfun::FunctionNoop Del2(Genfun::GENFUNCTION G ) const;       //
+      GeoGenfun::FunctionNoop Dely(GeoGenfun::GENFUNCTION G ) const;       //
+      GeoGenfun::FunctionNoop Del1(GeoGenfun::GENFUNCTION G ) const;       //
+      GeoGenfun::FunctionNoop Del2(GeoGenfun::GENFUNCTION G ) const;       //
 
       //-------------------------------------------------------------//
 
       // Atan2 for Generic Functions..:------------------------------//
-      Genfun::FunctionNoop ATan2(Genfun::GENFUNCTION y,              //
-				 Genfun::GENFUNCTION x) const;       //
+      GeoGenfun::FunctionNoop ATan2(GeoGenfun::GENFUNCTION y,              //
+				 GeoGenfun::GENFUNCTION x) const;       //
       //-------------------------------------------------------------//
 
       // Detector parameters ACCG, ACCA, ACMB, ACCO
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelPresamplerConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelPresamplerConstruction.h
index 2e60c5fdce3ec13404a85b9518838336a473f9a9..0e65a99eee97194d63a76177905ab148dcb257c3 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelPresamplerConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/LArGeoBarrel/BarrelPresamplerConstruction.h
@@ -15,7 +15,7 @@
 
 #include "LArGeoCode/VDetectorParameters.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
-#include "CLHEP/GenericFunctions/FunctionNoop.hh"
+#include "GeoGenericFunctions/FunctionNoop.h"
 
 // Forward declarations
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelConstruction.cxx
index e44bc1b243026fb45a4398341a5dafa28721c815..25ca516e9cda1bf94cda8cf3c9ec136f8ad31ea7 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelConstruction.cxx
@@ -45,15 +45,15 @@
 #include "CLHEP/Geometry/Transform3D.h"
 #include "CLHEP/Vector/Rotation.h"
 // For functions:
-#include "CLHEP/GenericFunctions/Abs.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/GenericFunctions/Sqrt.hh"
-#include "CLHEP/GenericFunctions/ATan.hh"
-#include "CLHEP/GenericFunctions/Rectangular.hh"
-#include "CLHEP/GenericFunctions/Mod.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/FixedConstant.hh"
+#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"
 // For units:
 #include "CLHEP/Units/PhysicalConstants.h"
 #include "GaudiKernel/MsgStream.h"
@@ -196,12 +196,12 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   log << MSG::INFO << "  Use sagging in geometry  ? " << m_A_SAGGING << endmsg;
 
 
-  Genfun::Cos  Cos;
-  Genfun::Sin  Sin;
-  Genfun::Sqrt Sqrt;
-  Genfun::ATan ATan;
+  GeoGenfun::Cos  Cos;
+  GeoGenfun::Sin  Sin;
+  GeoGenfun::Sqrt Sqrt;
+  GeoGenfun::ATan ATan;
 
-  double twopi64 = CLHEP::pi/32.;
+  double twopi64 = GeoModelKernelUnits::pi/32.;
   double twopi32 = 2.*twopi64;  
 
 
@@ -316,13 +316,13 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   double Moth_outer_radius = m_parameters->GetValue("LArEMBMotherRmax");
 
   double Moth_Phi_Min = 0.;
-  double Moth_Phi_Max = m_parameters->GetValue("LArEMBphiMaxBarrel")*CLHEP::deg;
+  double Moth_Phi_Max = m_parameters->GetValue("LArEMBphiMaxBarrel")*GeoModelKernelUnits::deg;
 
 #ifdef DEBUGGEO
   std::cout << " *** Mother volume (Ecam) parameters " << std::endl;
   std::cout << "  Rmin/Rmax " << Moth_inner_radius << " " << Moth_outer_radius << std::endl;
   std::cout << "  Zmin/Zmax " << Moth_Z_min << " " << Moth_Z_max << std::endl;
-  std::cout << "  phi1,Dphi (CLHEP::deg)" << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+  std::cout << "  phi1,Dphi (GeoModelKernelUnits::deg)" << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
 #endif
 
   // number of zigs for accordion
@@ -371,9 +371,9 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 	(double) (m_parameters->GetValue("LArEMBPhiAtCurvature",idat));
       Delta[idat]  =
 	(double) (m_parameters->GetValue("LArEMBDeltaZigAngle",idat));
-      if(idat == 14) Delta[idat]  = (90.0) * CLHEP::deg; 
+      if(idat == 14) Delta[idat]  = (90.0) * GeoModelKernelUnits::deg; 
 
-  // Maximum SAGGING displacement for each of the fifteen folds in CLHEP::mm
+  // Maximum SAGGING displacement for each of the fifteen folds in GeoModelKernelUnits::mm
   // (should be 0.0, 0.17, 0.30, 0.63, 0.78, 1.06, 1.09, 1.21, 1.07, 1.03, 0.74, 0.61, 0.27, 0.20, 0.0)
 //GUtmp sagging amplied by 10
       if (m_A_SAGGING)  {
@@ -393,8 +393,8 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 
 // #ifdef DEBUGGEO
        log << MSG::DEBUG << "idat " << idat << " Rhocen/Phice/Delta/deltay/deltax/etatrans "
-	   << Rhocen[idat] << " " << Phicen[idat]*(1./CLHEP::deg) << " "
-	   << Delta[idat]*(1./CLHEP::deg) << " " << deltay[idat] << " " << deltax[idat]
+	   << Rhocen[idat] << " " << Phicen[idat]*(1./GeoModelKernelUnits::deg) << " "
+	   << Delta[idat]*(1./GeoModelKernelUnits::deg) << " " << deltay[idat] << " " << deltax[idat]
 	   << " " << etaTrans << endmsg;
 // #endif
 
@@ -452,10 +452,10 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   //  very confused at the common surface between ECAM and STAC)
   //-----------------ECAM---------------------------------------------------------//
   {                                                                               //
-    double Moth_Phi_Min2 = (Ncell == 64) ? -1.555*CLHEP::deg : 0.;                       //
-    double Moth_Phi_Max2 = (Ncell == 64) ? 25.61*CLHEP::deg  : 2*M_PI;                   //
+    double Moth_Phi_Min2 = (Ncell == 64) ? -1.555*GeoModelKernelUnits::deg : 0.;                       //
+    double Moth_Phi_Max2 = (Ncell == 64) ? 25.61*GeoModelKernelUnits::deg  : 2*M_PI;                   //
                                                                                   //
-    double safety_rhocen1 = 0.040*CLHEP::mm;                                             //
+    double safety_rhocen1 = 0.040*GeoModelKernelUnits::mm;                                             //
     double Zplan[] = {Bar_Z_min-Zp0,Bar_Z_cut-Zp0,Bar_Z_max-Zp0};                 //
     double Riacc[] = {Moth_inner_radius,Moth_inner_radius, Rhocen1-safety_rhocen1};  //
     double Roacc[] = {Moth_outer_radius,Moth_outer_radius,Moth_outer_radius};     //
@@ -465,7 +465,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
      std::cout << "  Zplan " << Zplan[0] << " " << Zplan[1] << " " << Zplan[2] << std::endl;
      std::cout << "  Rin   " << Riacc[0] << " " << Riacc[1] << " " << Riacc[2] << std::endl;
      std::cout << "  Rout  " << Roacc[0] << " " << Roacc[1] << " " << Roacc[2] << std::endl;
-     std::cout << " PhiMin,Dphi " << Moth_Phi_Min2/CLHEP::deg << " " << Moth_Phi_Max2/CLHEP::deg << std::endl;
+     std::cout << " PhiMin,Dphi " << Moth_Phi_Min2/GeoModelKernelUnits::deg << " " << Moth_Phi_Max2/GeoModelKernelUnits::deg << std::endl;
 #endif
     int ecamArraySize = sizeof(Zplan) / sizeof(double);                           //
     std::string name = baseName + "ECAM";                                         //
@@ -510,19 +510,19 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   GeoPhysVol *Elnicsf_phys=NULL;
   double Xel1f;
   {
-    // WARNING : this "hard_coded" 0.010*CLHEP::mm is a "security" to avoid
+    // WARNING : this "hard_coded" 0.010*GeoModelKernelUnits::mm is a "security" to avoid
     //           fake "overlapping" diagnostics with "DAVID"
-    Xel1f = m_parameters->GetValue("LArEMBInnerElectronics");       // 23.*CLHEP::mm
+    Xel1f = m_parameters->GetValue("LArEMBInnerElectronics");       // 23.*GeoModelKernelUnits::mm
     double DeltaZ = Zhalfc;
     double Zpos = Zhalfc+Bar_Z_min; 
-    double Rmini =  Moth_inner_radius + 0.010*CLHEP::mm;
-    double Rmaxi = Rmini+Xel1f - 0.010*CLHEP::mm;
+    double Rmini =  Moth_inner_radius + 0.010*GeoModelKernelUnits::mm;
+    double Rmaxi = Rmini+Xel1f - 0.010*GeoModelKernelUnits::mm;
     std::string name = baseName + "TELF";
 #ifdef DEBUGGEO
     std::cout << " *** parameters for TELF tubs " << std::endl;
     std::cout << " DeltaZ      " << DeltaZ << std::endl;
     std::cout << " Rmin/Rmax   " << Rmini << " " << Rmaxi << std::endl,
-    std::cout << " PhiMin,Dphi " << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+    std::cout << " PhiMin,Dphi " << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
     std::cout << " Zpos in ECAM " << Zpos << std::endl;
 #endif
     GeoTubs* tubs = new GeoTubs(Rmini,          // rmin
@@ -532,9 +532,9 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 				Moth_Phi_Max);  //  deltaphi
     const GeoLogVol* logVol  = new GeoLogVol(name,tubs,LAr);
     Elnicsf_phys = new GeoPhysVol(logVol);
-    m_ecamPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));
+    m_ecamPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));
     m_ecamPhysicalPos->add(Elnicsf_phys);
-    m_ecamPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));
+    m_ecamPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));
     m_ecamPhysicalNeg->add(Elnicsf_phys);
   }
   //------------------------------------------------------------------------------//
@@ -545,9 +545,9 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   //  (follow mixture described in Pascal Perrodo note
   GeoPhysVol *Sumb_phys=NULL;
   {
-    double ThickSum = 10.*CLHEP::mm;    // FIXME should be in geometry database
+    double ThickSum = 10.*GeoModelKernelUnits::mm;    // FIXME should be in geometry database
     double Rmini = Moth_inner_radius+Xel1f-ThickSum;
-    double Rmaxi = Moth_inner_radius+Xel1f -0.020*CLHEP::mm;    // safety margin
+    double Rmaxi = Moth_inner_radius+Xel1f -0.020*GeoModelKernelUnits::mm;    // safety margin
     double DeltaZ = Zhalfc;
     double Zpos=0.;
     std::string name = baseName + "SUMB";
@@ -555,14 +555,14 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     std::cout << " *** parameters for SUMB tubs " << std::endl;
     std::cout << " DeltaZ      " << DeltaZ << std::endl;
     std::cout << " Rmin/Rmax   " << Rmini << " " << Rmaxi << std::endl,
-    std::cout << " PhiMin,Dphi " << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+    std::cout << " PhiMin,Dphi " << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
     std::cout << " Zpos in TELF " << Zpos << std::endl;
 #endif
 
     GeoTubs * tubs = new GeoTubs(Rmini,Rmaxi,DeltaZ,Moth_Phi_Min,Moth_Phi_Max);
     const GeoLogVol* logVol = new GeoLogVol(name,tubs,Sumb);
     Sumb_phys = new GeoPhysVol(logVol);
-    Elnicsf_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));
+    Elnicsf_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));
     Elnicsf_phys->add(Sumb_phys);
   }
 
@@ -571,9 +571,9 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   {
     double ClearancePS = m_parameters->GetValue("LArEMBMoBoclearfrPS");
     double RhoPosB = Moth_inner_radius + ClearancePS;
-    double bdx = .5*(m_parameters->GetValue("LArEMBMoBoTchickness")); // 4.3/2.*CLHEP::mm
-    double bdy = .5*(m_parameters->GetValue("LArEMBMoBoHeight"));     // 72.3/2.*CLHEP::mm;
-    double bdz = Zhalfc - 0.007*CLHEP::mm;
+    double bdx = .5*(m_parameters->GetValue("LArEMBMoBoTchickness")); // 4.3/2.*GeoModelKernelUnits::mm
+    double bdy = .5*(m_parameters->GetValue("LArEMBMoBoHeight"));     // 72.3/2.*GeoModelKernelUnits::mm;
+    double bdz = Zhalfc - 0.007*GeoModelKernelUnits::mm;
     
     //------------------------MOTHERBOARDS--------------------------------------------//
     // JFB Make & Place the motherboards inside overall tube                          //
@@ -587,18 +587,18 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
       std::cout << " *** parameters for MotherBoard (box)" << std::endl;
       std::cout << "  dx,dy,dz  " << bdx << " " << bdy << " " << bdz << std::endl;
       std::cout << " Radius pos " << RhoPosB << std::endl;
-      std::cout << " Phi0,Dphi  " << PhiPos0/CLHEP::deg << " " << twopi32/CLHEP::deg << std::endl;
+      std::cout << " Phi0,Dphi  " << PhiPos0/GeoModelKernelUnits::deg << " " << twopi32/GeoModelKernelUnits::deg << std::endl;
 #endif
       GeoBox               * box    = new GeoBox(bdx,bdy,bdz);                        //
       const GeoLogVol      * logVol = new GeoLogVol(name,box,Moth_elect);             //
       GeoPhysVol           * pV     = new GeoPhysVol(logVol);                         //
       GeoSerialIdentifier  * iD     = new GeoSerialIdentifier(0);                     //
-      Genfun::Variable     c;                                                         //
-      Genfun::GENFUNCTION  PhiPos = PhiPos0 + twopi32*c;                              //
+      GeoGenfun::Variable     c;                                                         //
+      GeoGenfun::GENFUNCTION  PhiPos = PhiPos0 + twopi32*c;                              //
       GeoXF::TRANSFUNCTION TX =                                                       //
-	GeoXF::Pow(HepGeom::TranslateX3D(1.0),RhoPosB*Cos(PhiPos))*                         //
-	GeoXF::Pow(HepGeom::TranslateY3D(1.0),RhoPosB*Sin(PhiPos))*                         //
-	GeoXF::Pow(HepGeom::RotateZ3D(1.0),PhiPos);                                         //
+	GeoXF::Pow(GeoTrf::TranslateX3D(1.0),RhoPosB*Cos(PhiPos))*                         //
+	GeoXF::Pow(GeoTrf::TranslateY3D(1.0),RhoPosB*Sin(PhiPos))*                         //
+	GeoXF::Pow(GeoTrf::RotateZ3D(1.0),PhiPos);                                         //
       GeoSerialTransformer *st = new GeoSerialTransformer(pV, &TX, NoOFboard);        //
       Elnicsf_phys->add(iD);                                                          //
       Elnicsf_phys->add(st);                                                          //
@@ -616,11 +616,11 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     // JFB Place the cables                                                           //
     {                                                                                 //
       //                                                                              //
-      double Dzc = Zhalfc - 0.007*CLHEP::mm;                                                 //
-      double Dx1 = .5*(m_parameters->GetValue("LArEMBCablethickat0"));                // 1./2.*CLHEP::mm
+      double Dzc = Zhalfc - 0.007*GeoModelKernelUnits::mm;                                                 //
+      double Dx1 = .5*(m_parameters->GetValue("LArEMBCablethickat0"));                // 1./2.*GeoModelKernelUnits::mm
       double Dx2 = .5*Bar_Eta_cut*(m_parameters->GetValue("LArEMBthickincrfac"));     //
-      // Dx2 should be  5.17/2.*Bar_Eta_cut*CLHEP::mm Trapezoid's side linear with Eta       //
-      double Dy1 = .5*(m_parameters->GetValue("LArEMBCableEtaheight"));               // 70./2.*CLHEP::mm
+      // Dx2 should be  5.17/2.*Bar_Eta_cut*GeoModelKernelUnits::mm Trapezoid's side linear with Eta       //
+      double Dy1 = .5*(m_parameters->GetValue("LArEMBCableEtaheight"));               // 70./2.*GeoModelKernelUnits::mm
       double Dy2 = Dy1;                                                               //
       //                                                                              //
       int NoOFcable = (int) m_parameters->GetValue("LArEMBnoOFcableBundle");          // 64
@@ -645,34 +645,34 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 #ifdef DEBUGGEO
       std::cout << " PhiPos0 " << PhiPos0 << std::endl;
 #endif
-      Genfun::Variable I;                                                             //
+      GeoGenfun::Variable I;                                                             //
       //                                                                              //
       // -------------Make a Kronecker Delta Here--------//                           //
-      Genfun::Rectangular KDelta;                        //                           //
+      GeoGenfun::Rectangular KDelta;                        //                           //
       KDelta.baseline().setValue(0.0);                   //                           //
       KDelta.height().setValue(1.0);                     //                           //
       KDelta.x0().setValue(-0.5);                        //                           //
       KDelta.x1().setValue(0.5);                         //                           //
       //-------------------------------------------------//                           //
       //                                                                              //
-      Genfun::Mod Mod1(1.0),Mod2(2.0),Mod4(4.0);                                      //
-      Genfun::GENFUNCTION Int = I - Mod1;                                             //
-      Genfun::GENFUNCTION Ccopy    = Int(I + 0.5);                                    //
-      Genfun::GENFUNCTION PhiOrig  = 22.5*CLHEP::deg*Int(Ccopy/4);                           //
-      Genfun::GENFUNCTION PhiPos1  = PhiPos0 + PhiOrig;                               //
-      Genfun::GENFUNCTION PhiPos2  = twopi32 - PhiPos0 + PhiOrig;                     //
-      Genfun::GENFUNCTION PhiPos00 =                                                  //
+      GeoGenfun::Mod Mod1(1.0),Mod2(2.0),Mod4(4.0);                                      //
+      GeoGenfun::GENFUNCTION Int = I - Mod1;                                             //
+      GeoGenfun::GENFUNCTION Ccopy    = Int(I + 0.5);                                    //
+      GeoGenfun::GENFUNCTION PhiOrig  = 22.5*GeoModelKernelUnits::deg*Int(Ccopy/4);                           //
+      GeoGenfun::GENFUNCTION PhiPos1  = PhiPos0 + PhiOrig;                               //
+      GeoGenfun::GENFUNCTION PhiPos2  = twopi32 - PhiPos0 + PhiOrig;                     //
+      GeoGenfun::GENFUNCTION PhiPos00 =                                                  //
 	(KDelta(Mod4(Ccopy)-2) + KDelta(Mod4(Ccopy)-3))*PhiPos2 +                     //
 	(1.0-KDelta(Mod4(Ccopy)-2)-KDelta(Mod4(Ccopy)-3))*PhiPos1;                    //
-      Genfun::GENFUNCTION PhiPos   = PhiPos00 + Mod2(Ccopy)*twopi32;                  //
+      GeoGenfun::GENFUNCTION PhiPos   = PhiPos00 + Mod2(Ccopy)*twopi32;                  //
       GeoXF::TRANSFUNCTION TX =                                                       //
-	GeoXF::Pow(HepGeom::TranslateX3D(1.0),RhoPosC*Cos(PhiPos))*                         //
-	GeoXF::Pow(HepGeom::TranslateY3D(1.0),RhoPosC*Sin(PhiPos))*                         //
-	GeoXF::Pow(HepGeom::RotateZ3D(1.0),PhiPos);                                         //
+	GeoXF::Pow(GeoTrf::TranslateX3D(1.0),RhoPosC*Cos(PhiPos))*                         //
+	GeoXF::Pow(GeoTrf::TranslateY3D(1.0),RhoPosC*Sin(PhiPos))*                         //
+	GeoXF::Pow(GeoTrf::RotateZ3D(1.0),PhiPos);                                         //
       GeoSerialTransformer *st = new GeoSerialTransformer(pV, &TX, NoOFcable);        //
 #ifdef DEBUGGEO
       for (int ii=0;ii<NoOFcable;ii++) {
-       std::cout << "copy, phi " << ii << " " << PhiPos(ii)/CLHEP::deg << std::endl;
+       std::cout << "copy, phi " << ii << " " << PhiPos(ii)/GeoModelKernelUnits::deg << std::endl;
       }
 #endif
       Elnicsf_phys->add(iD);                                                          //
@@ -683,10 +683,10 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   }
 #endif // BUILD_FRONT_ELECTRONICS
 
-    // add 1.3 CLHEP::mm in z to allow cleareance for absorber with non                    //
+    // add 1.3 GeoModelKernelUnits::mm in z to allow cleareance for absorber with non                    //
     // 0 thickness, at eta=1.475, low r part of the barrel                          //
     // this affects STAC and TELB volumes                                           //
-    double clearance = 1.3*CLHEP::mm;     
+    double clearance = 1.3*GeoModelKernelUnits::mm;     
 
 #ifdef BUILD_HIGHETA_ELECTRONICS
 
@@ -702,29 +702,29 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     // GU fix of TELB                                                               //
     double ze1=  zmax1_Stac+clearance;                                              //
     double ze2 = Bar_Z_max;                                                         //
-    double safety = 0.05*CLHEP::mm;
+    double safety = 0.05*GeoModelKernelUnits::mm;
     double DeltaZ = 0.5*(ze2-ze1)-safety;                           // 50 micron for safety.
     double Zpos = ze1+DeltaZ+0.5*safety;                                            // 
-    double Rmini1 = Rhocen[0] - .030*CLHEP::mm;                                            //
-    double Rmaxi1 = Rhocen[0] - .020*CLHEP::mm;                                            //
-    double Rmini2 = Rhocen[0] - .030*CLHEP::mm;                                            //
-    double Rmaxi2 = Bar_Rcmx - clearance - .070*CLHEP::mm;                                 //
+    double Rmini1 = Rhocen[0] - .030*GeoModelKernelUnits::mm;                                            //
+    double Rmaxi1 = Rhocen[0] - .020*GeoModelKernelUnits::mm;                                            //
+    double Rmini2 = Rhocen[0] - .030*GeoModelKernelUnits::mm;                                            //
+    double Rmaxi2 = Bar_Rcmx - clearance - .070*GeoModelKernelUnits::mm;                                 //
     std::string name = baseName + "TELB";                                           //
 #ifdef DEBUGGEO
     std::cout << " *** Parameters for high eta electronics (Cons) " <<std::endl;
     std::cout << " Rmini1,Rmini2,Rmaxi1,Rmaxi2 " << Rmini1 << " " << Rmini2 << " "
        << Rmaxi1 << " " << Rmaxi2 << std::endl,
     std::cout << " DeltaZ " << DeltaZ << std::endl;
-    std::cout << " Phi_Min,Dphi " << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+    std::cout << " Phi_Min,Dphi " << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
     std::cout << " Zpos " << Zpos << std::endl;
 #endif
     GeoCons* cons = new GeoCons(Rmini1,Rmini2,Rmaxi1,Rmaxi2,                        //
 				DeltaZ,Moth_Phi_Min,Moth_Phi_Max);                  //
     const GeoLogVol* logVol = new GeoLogVol(name,cons,Cable_elect);                 //
     GeoPhysVol* physVol = new GeoPhysVol(logVol);                                   //
-    m_ecamPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));                //
+    m_ecamPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));                //
     m_ecamPhysicalPos->add(physVol);                                                //
-    m_ecamPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));                //
+    m_ecamPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));                //
     m_ecamPhysicalNeg->add(physVol);                                                //
     //                                                                              //
   }                                                                                 //
@@ -742,8 +742,8 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   
   //---------------------------------FRONT G10-------------------------------------//
   {                                                                                //
-    double Xel1f = m_parameters->GetValue("LArEMBInnerElectronics");               // 23.*CLHEP::mm
-    double Xg10f = m_parameters->GetValue("LArEMBG10SupportBarsIn");               // 20.*CLHEP::mm
+    double Xel1f = m_parameters->GetValue("LArEMBInnerElectronics");               // 23.*GeoModelKernelUnits::mm
+    double Xg10f = m_parameters->GetValue("LArEMBG10SupportBarsIn");               // 20.*GeoModelKernelUnits::mm
     double DeltaZ = 0.5* m_parameters->GetValue("LArEMBG10FrontDeltaZ");           //
     double Zpos = DeltaZ+Bar_Z_min;                                                //
     double Rmini = Moth_inner_radius + Xel1f;                                      //
@@ -753,15 +753,15 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     std::cout << " *** parameters for front G10 ring (tubs) " << std::endl;
     std::cout << " Rmini,Rmaxi " << Rmini << " " << Rmaxi << std::endl;
     std::cout << " DeltaZ " << DeltaZ << std::endl;
-    std::cout << " phimin,dphi " << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+    std::cout << " phimin,dphi " << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
     std::cout << " Zpos " << Zpos << std::endl;
 #endif
     GeoTubs* tubs = new GeoTubs(Rmini,Rmaxi,DeltaZ,Moth_Phi_Min,Moth_Phi_Max);     //
     const GeoLogVol* logVol = new GeoLogVol(name,tubs,G10_bar);                    //
     GeoPhysVol* physVol = new GeoPhysVol(logVol);                                  //
-    m_ecamPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));               //
+    m_ecamPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));               //
     m_ecamPhysicalPos->add(physVol);                                               //
-    m_ecamPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));               //
+    m_ecamPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));               //
     m_ecamPhysicalNeg->add(physVol);                                               //
 
     IRDBRecordset_ptr extraCones = rdbAccess->getRecordsetPtr("LArCones",          
@@ -789,7 +789,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                                extra_dz,extra_phi0,extra_dphi);                     
          const GeoLogVol* logVol = new GeoLogVol(name,cons,Lead);                         
          GeoPhysVol* physVol2 = new GeoPhysVol(logVol);                                   
-         physVol->add(new GeoTransform(HepGeom::TranslateZ3D(extra_zpos)));                    
+         physVol->add(new GeoTransform(GeoTrf::TranslateZ3D(extra_zpos)));                    
          physVol->add(physVol2);                                                           
 
         }
@@ -806,27 +806,27 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   {                                                                               //
     double DeltaZ = Zhalf;                                                        //
     double Zpos = Zhalf+Bar_Z_min;                                                //
-    double Xtal  = m_parameters->GetValue("LArEMBLArGapTail")+ 0.1*CLHEP::mm;            // 13.*CLHEP::mm
+    double Xtal  = m_parameters->GetValue("LArEMBLArGapTail")+ 0.1*GeoModelKernelUnits::mm;            // 13.*GeoModelKernelUnits::mm
     double Rmini = Rhocen[Nbrt]+Xtal; //                                          //
     // GU to be sure that GTENB does not go outside mother ECAM volume            //
     //  Rmaxi = Rmini+Xg10b;                                                      //
-    double   Rmaxi = Moth_outer_radius-0.01*CLHEP::mm;   // 10 microns for more safety.. //
+    double   Rmaxi = Moth_outer_radius-0.01*GeoModelKernelUnits::mm;   // 10 microns for more safety.. //
     //                                                                            //
     std::string name = baseName +"GTENB";                                         //
 #ifdef DEBUGGEO 
     std::cout << " *** parameters for back G10 ring (tubs) " << std::endl;
     std::cout << " Rmini,Rmaxi " << Rmini << " " << Rmaxi << std::endl;
     std::cout << " DeltaZ  " << DeltaZ << std::endl;
-    std::cout << " phimin,dphi " << Moth_Phi_Min/CLHEP::deg << " " << Moth_Phi_Max/CLHEP::deg << std::endl;
+    std::cout << " phimin,dphi " << Moth_Phi_Min/GeoModelKernelUnits::deg << " " << Moth_Phi_Max/GeoModelKernelUnits::deg << std::endl;
     std::cout << " Zpos " << Zpos << std::endl;
 #endif
 
     GeoTubs* tubs = new GeoTubs(Rmini,Rmaxi,DeltaZ,Moth_Phi_Min,Moth_Phi_Max);    //
     const GeoLogVol* logVol = new GeoLogVol(name,tubs,G10_bar);                       //
     GeoPhysVol* physVol = new GeoPhysVol(logVol);                                 //
-    m_ecamPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));              //
+    m_ecamPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));              //
     m_ecamPhysicalPos->add(physVol);                                              //
-    m_ecamPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(Zpos)));              //
+    m_ecamPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(Zpos)));              //
     m_ecamPhysicalNeg->add(physVol);                                              //
   }                                                                               //
   //------------------------------------------------------------------------------//
@@ -841,8 +841,8 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
   //  (i.e. a little bit wider than one calorimeter module)
   {                                                                             //
 
-    double Moth_Phi_Min2 = (Ncell == 64) ? -1.055*CLHEP::deg : 0.;                     //
-    double Moth_Phi_Max2 = (Ncell == 64) ? 24.61*CLHEP::deg  : 2*M_PI;                 //
+    double Moth_Phi_Min2 = (Ncell == 64) ? -1.055*GeoModelKernelUnits::deg : 0.;                     //
+    double Moth_Phi_Max2 = (Ncell == 64) ? 24.61*GeoModelKernelUnits::deg  : 2*M_PI;                 //
 
     double Zplan1[] = {Bar_Z_min,zmax1_Stac+clearance,Bar_Z_max};                //
     double Riacc1[] = {Rhocen[0],Rhocen[0], Bar_Rcmx-clearance};                //
@@ -854,16 +854,16 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
      std::cout << "  Zplan " << Zplan1[0] << " " << Zplan1[1] << " " << Zplan1[2] << std::endl;
      std::cout << "  Rin   " << Riacc1[0] << " " << Riacc1[1] << " " << Riacc1[2] << std::endl;
      std::cout << "  Rout  " << Roacc1[0] << " " << Roacc1[1] << " " << Roacc1[2] << std::endl;
-     std::cout << " PhiMin,Dphi " << Moth_Phi_Min2/CLHEP::deg << " " << Moth_Phi_Max2/CLHEP::deg << std::endl;
+     std::cout << " PhiMin,Dphi " << Moth_Phi_Min2/GeoModelKernelUnits::deg << " " << Moth_Phi_Max2/GeoModelKernelUnits::deg << std::endl;
      std::cout << " Zpos " << -Zp0 << std::endl;
 #endif
     GeoPcon* pCone = new GeoPcon(Moth_Phi_Min2,Moth_Phi_Max2);                  //
     for (int i=0; i<3; i++) pCone->addPlane(Zplan1[i],Riacc1[i],Roacc1[i]);     //
     const GeoLogVol* logVol = new GeoLogVol(name,pCone,LAr);                    //
     stacPhysical = new GeoPhysVol(logVol);                                      //
-    m_ecamPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(-Zp0)));            //
+    m_ecamPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(-Zp0)));            //
     m_ecamPhysicalPos->add(stacPhysical);                                       //
-    m_ecamPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(-Zp0)));            //
+    m_ecamPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(-Zp0)));            //
     m_ecamPhysicalNeg->add(stacPhysical);                                       //
   }                                                                             //
   //----------------------------------------------------------------------------//
@@ -882,7 +882,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     double Thpb_thin  = m_parameters->GetValue("LArEMBThinAbsLead");
     double Thcu       = m_parameters->GetValue("LArEMBThickElecCopper");
     double Thfg       = m_parameters->GetValue("LArEMBThickElecKapton");
-    double Psi        = m_parameters->GetValue("LArEMBPhiGapAperture");   // 360.*CLHEP::deg/1024
+    double Psi        = m_parameters->GetValue("LArEMBPhiGapAperture");   // 360.*GeoModelKernelUnits::deg/1024
     double Contract   = m_parameters->GetValue("LArEMBAbsorberContraction");
 
     double Thce = (Thpb+Thgl+Thfe)*Contract;
@@ -906,7 +906,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     double Zcp1l[14],Zcp1h[14],Zcp2l[14],Zcp2h[14];
     double Rhol[14],Rhoh[14];
 
-    double safety_along = 0.007*CLHEP::mm;
+    double safety_along = 0.007*GeoModelKernelUnits::mm;
  
    
     // Compute centers of curvature coordinates in a local frame.
@@ -979,9 +979,9 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 
     double Gama0      = m_parameters->GetValue("LArEMBAbsPhiFirst");
    
-    Genfun::Variable icopy;
-    Genfun::GENFUNCTION Game = Gama0 + Psi/2 + Alfa*icopy;
-    Genfun::GENFUNCTION Gama = Gama0 + Alfa*icopy;
+    GeoGenfun::Variable icopy;
+    GeoGenfun::GENFUNCTION Game = Gama0 + Psi/2 + Alfa*icopy;
+    GeoGenfun::GENFUNCTION Gama = Gama0 + Alfa*icopy;
    
     // Creation of the straight absorber parts. Front (TIPB) & Back (TIPC)
     // Creation of the straight electrode parts. Front (TIPK) & Back (TIPL)
@@ -999,7 +999,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 	// Absorber (thick, thin)
 	{
 	  double radius =  fb==FRONT ? Cenx[0] - Xtip_pb/2    : Cenx[Nbrt] + Xtipt/2;
-	  double Xhalfb  = fb==FRONT ? Xtip_pb/2 -0.002*CLHEP::mm    : Xtipt/2 - .004*CLHEP::mm;
+	  double Xhalfb  = fb==FRONT ? Xtip_pb/2 -0.002*GeoModelKernelUnits::mm    : Xtipt/2 - .004*GeoModelKernelUnits::mm;
 	  double Zhalfb  = fb==FRONT ? (Bar_Z_cut-Zmin)/2. : (Zmax-Zmin)/2.;
 	  double dz01 = (std::min(Zcp1[irl],Zmax)-Zmin)/2.;  // half lenght for thick lead
 
@@ -1010,18 +1010,18 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 	  const GeoLogVol *logVol2 = new GeoLogVol(name,box2,Thick_abs);
 	  GeoPhysVol* physVol      = new GeoPhysVol(logVol);
 	  GeoPhysVol* physVol2     = new GeoPhysVol(logVol2);
-	  physVol->add(new GeoTransform(HepGeom::Translate3D(0.,0.,dz01-Zhalfb)));
+	  physVol->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,dz01-Zhalfb)));
 	  physVol->add(physVol2);
-	  Genfun::GENFUNCTION Xcd = radius*Cos(Gama);
-	  Genfun::GENFUNCTION Ycd = radius*Sin(Gama);
-	  Genfun::GENFUNCTION Zcd = Genfun::FixedConstant(Zmin+Zhalfb);
+	  GeoGenfun::GENFUNCTION Xcd = radius*Cos(Gama);
+	  GeoGenfun::GENFUNCTION Ycd = radius*Sin(Gama);
+	  GeoGenfun::GENFUNCTION Zcd = GeoGenfun::FixedConstant(Zmin+Zhalfb);
 	 
 	 
 	  GeoXF::TRANSFUNCTION TX = 
-	    GeoXF::Pow(HepGeom::TranslateX3D(1.0),Xcd) *
-	    GeoXF::Pow(HepGeom::TranslateY3D(1.0),Ycd) *
-	    GeoXF::Pow(HepGeom::TranslateZ3D(1.0),Zcd) * 
-	    GeoXF::Pow(HepGeom::RotateZ3D(1.0),Gama);
+	    GeoXF::Pow(GeoTrf::TranslateX3D(1.0),Xcd) *
+	    GeoXF::Pow(GeoTrf::TranslateY3D(1.0),Ycd) *
+	    GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),Zcd) * 
+	    GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Gama);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol, &TX, Nabsorber);     
 	  m_ecamPhysicalPos->add(st);
 	  m_ecamPhysicalNeg->add(st);
@@ -1032,14 +1032,14 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
           std::cout << " Thick Abs Box " << Xhalfb << " " << Thce/2. << " " << dz01 << std::endl;
           std::cout << " Z position thick in thin " << dz01-Zhalfb << std::endl;
           std::cout << " Radial position " << radius << std::endl;
-          std::cout << " Phi0 (CLHEP::deg) " << Gama(0)/CLHEP::deg << std::endl;
+          std::cout << " Phi0 (GeoModelKernelUnits::deg) " << Gama(0)/GeoModelKernelUnits::deg << std::endl;
           std::cout << " Z position in ECAM " << Zmin+Zhalfb << std::endl;
 #endif
 	}
 	// G10 (only for front part)
 	if (fb==FRONT)
 	{
-	  double Xhalfbg = Xtip_gt/2-0.002*CLHEP::mm;
+	  double Xhalfbg = Xtip_gt/2-0.002*GeoModelKernelUnits::mm;
 	  double radiusg = Cenx[0]-Xtip_pb/2. - Xtips/2   ;   
 	  double Zhalfbg = (Bar_Z_cut-Zmin)/2.    ;
 	  std::string name        = baseName + "FrontBack::G10";
@@ -1066,49 +1066,49 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 #ifdef DEBUGGEO
           std::cout << "  Position Iron in G10 at y = +- " << 0.5*(+Thce-Tgfe/2.) << std::endl;
 #endif
-          physVol->add(new GeoTransform(HepGeom::Translate3D(0.,0.5*(-Thce+Tgfe/2.),0.))); 
+          physVol->add(new GeoTransform(GeoTrf::Translate3D(0.,0.5*(-Thce+Tgfe/2.),0.))); 
           physVol->add(physVol2);
-          physVol->add(new GeoTransform(HepGeom::Translate3D(0.,0.5*(+Thce-Tgfe/2.),0.)));
+          physVol->add(new GeoTransform(GeoTrf::Translate3D(0.,0.5*(+Thce-Tgfe/2.),0.)));
           physVol->add(physVol2);
 #endif   // build_front_steel
 
 // position of G10+Steel inside LAr bath
-	  Genfun::GENFUNCTION Xcd = radiusg*Cos(Gama);
-	  Genfun::GENFUNCTION Ycd = radiusg*Sin(Gama);
-	  Genfun::GENFUNCTION Zcd = Genfun::FixedConstant(Zhalfbg+Zmin);
+	  GeoGenfun::GENFUNCTION Xcd = radiusg*Cos(Gama);
+	  GeoGenfun::GENFUNCTION Ycd = radiusg*Sin(Gama);
+	  GeoGenfun::GENFUNCTION Zcd = GeoGenfun::FixedConstant(Zhalfbg+Zmin);
 	  GeoXF::TRANSFUNCTION TX = 
-	    GeoXF::Pow(HepGeom::TranslateX3D(1.0),Xcd) *
-	    GeoXF::Pow(HepGeom::TranslateY3D(1.0),Ycd) *
-	    GeoXF::Pow(HepGeom::TranslateZ3D(1.0),Zcd) * 
-	    GeoXF::Pow(HepGeom::RotateZ3D(1.0),Gama);
+	    GeoXF::Pow(GeoTrf::TranslateX3D(1.0),Xcd) *
+	    GeoXF::Pow(GeoTrf::TranslateY3D(1.0),Ycd) *
+	    GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),Zcd) * 
+	    GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Gama);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol, &TX, Nabsorber);     
 	  m_ecamPhysicalPos->add(st);
 	  m_ecamPhysicalNeg->add(st);
 #ifdef DEBUGGEO
           std::cout << "  Radial position G10 tip " << radiusg << std::endl;
-          std::cout << "  Phi0 (CLHEP::deg)" << Gama(0)/CLHEP::deg << std::endl;
+          std::cout << "  Phi0 (GeoModelKernelUnits::deg)" << Gama(0)/GeoModelKernelUnits::deg << std::endl;
           std::cout << "  Zposition in ECAM " << Zmin+Zhalfbg << std::endl;
 #endif
 
 	}
 	// Electrode
 	{
-	  double Xhalfbe = fb==FRONT ? Xtips/2 -0.002*CLHEP::mm      : Xtipt/2 - .004*CLHEP::mm;
+	  double Xhalfbe = fb==FRONT ? Xtips/2 -0.002*GeoModelKernelUnits::mm      : Xtipt/2 - .004*GeoModelKernelUnits::mm;
 	  double Zhalfbe = fb==FRONT ? (Bar_Z_cut-Zmin)/2.    : (Zmax - Zmin)/2;
 	  double radiuse = fb==FRONT ? Cenx[0] - Xtips/2   : Cenx[Nbrt] + Xtipt/2;
 	  std::string name        = baseName + "FrontBack::Electrode";
 	  GeoBox *box             = new GeoBox(Xhalfbe,Thel/2,Zhalfbe);
 	  const GeoLogVol *logVol = new GeoLogVol(name,box,Kapton_Cu);
 	  GeoPhysVol* physVol     = new GeoPhysVol(logVol);
-	  Genfun::GENFUNCTION Xcd  = radiuse*Cos(Game);
-	  Genfun::GENFUNCTION Ycd  = radiuse*Sin(Game);
-	  Genfun::GENFUNCTION Zcd  = Genfun::FixedConstant(Zmin+Zhalfbe);
+	  GeoGenfun::GENFUNCTION Xcd  = radiuse*Cos(Game);
+	  GeoGenfun::GENFUNCTION Ycd  = radiuse*Sin(Game);
+	  GeoGenfun::GENFUNCTION Zcd  = GeoGenfun::FixedConstant(Zmin+Zhalfbe);
 	 
 	  GeoXF::TRANSFUNCTION TX = 
-	    GeoXF::Pow(HepGeom::TranslateX3D(1.0),Xcd) *
-	    GeoXF::Pow(HepGeom::TranslateY3D(1.0),Ycd) *
-	    GeoXF::Pow(HepGeom::TranslateZ3D(1.0),Zcd) * 
-	    GeoXF::Pow(HepGeom::RotateZ3D(1.0),Game);
+	    GeoXF::Pow(GeoTrf::TranslateX3D(1.0),Xcd) *
+	    GeoXF::Pow(GeoTrf::TranslateY3D(1.0),Ycd) *
+	    GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),Zcd) * 
+	    GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Game);
 	 
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol, &TX, Nelectrode);     
 	  m_ecamPhysicalPos->add(st);
@@ -1119,7 +1119,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
           else           std::cout << " *** Back  tip electrode " << std::endl;
           std::cout << " Box " << Xhalfbe << " " << Thel/2. << " " << Zhalfbe << std::endl;
           std::cout << " Radial position " << radiuse << std::endl;
-          std::cout << " Phi0 (CLHEP::deg)" << Game(0)/CLHEP::deg << std::endl;
+          std::cout << " Phi0 (GeoModelKernelUnits::deg)" << Game(0)/GeoModelKernelUnits::deg << std::endl;
           std::cout << " Z position in ECAM " << Zmin+Zhalfbe << std::endl;
 #endif
 
@@ -1136,7 +1136,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
     //
 
 // GU 09/06/2004 add some safety in z size
-    double safety_zlen=0.050*CLHEP::mm;
+    double safety_zlen=0.050*GeoModelKernelUnits::mm;
    
     for(int irl=0; irl<Nbrt; irl++)   // loop over zig-zag in radius
       {
@@ -1212,32 +1212,32 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 	      double Dz = Thce/2.;
 	   
 	      // For absorbers
-	      Genfun::GENFUNCTION x1a = Fx(irl+0., Gama, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION x1a = Fx(irl+0., Gama, Cenx, Ceny)
                                            +deltay[irl]*Del1(Gama)
                                            +deltax[irl]*Del2(Gama);
-	      Genfun::GENFUNCTION x2a = Fx(irl+1., Gama, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION x2a = Fx(irl+1., Gama, Cenx, Ceny)
                                            +deltay[irl+1]*Del1(Gama)
                                            +deltax[irl+1]*Del2(Gama);
-	      Genfun::GENFUNCTION y1a = Fy(irl+0., Gama, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION y1a = Fy(irl+0., Gama, Cenx, Ceny)
                                            -deltay[irl]*Del2(Gama)
                                            +deltax[irl]*Del1(Gama);
-	      Genfun::GENFUNCTION y2a = Fy(irl+1., Gama, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION y2a = Fy(irl+1., Gama, Cenx, Ceny)
                                            -deltay[irl+1]*Del2(Gama)
                                            +deltax[irl+1]*Del1(Gama);
-	      Genfun::GENFUNCTION dx = x2a - x1a;
-	      Genfun::GENFUNCTION dy = y2a - y1a;
+	      GeoGenfun::GENFUNCTION dx = x2a - x1a;
+	      GeoGenfun::GENFUNCTION dy = y2a - y1a;
 	   
 	      // Da the two fold centers distance, da straight part length
 	   
-	      Genfun::GENFUNCTION Da = Sqrt ( dx*dx + dy*dy );
-	      Genfun::GENFUNCTION da = Sqrt ( (Da - 2.*Rint)*(Da + 2.*Rint) );
+	      GeoGenfun::GENFUNCTION Da = Sqrt ( dx*dx + dy*dy );
+	      GeoGenfun::GENFUNCTION da = Sqrt ( (Da - 2.*Rint)*(Da + 2.*Rint) );
 	   
 	      // newalpha (slant angle) value of the rotation angle around Z_axis
-	      Genfun::GENFUNCTION cosalfa = (da*dx -iparit*2.*Rint*dy)/Da/Da;
-	      Genfun::GENFUNCTION sinalfa = (da*dy +iparit*2.*Rint*dx)/Da/Da;
-	      Genfun::GENFUNCTION newalpha = ATan2(sinalfa,cosalfa);       
+	      GeoGenfun::GENFUNCTION cosalfa = (da*dx -iparit*2.*Rint*dy)/Da/Da;
+	      GeoGenfun::GENFUNCTION sinalfa = (da*dy +iparit*2.*Rint*dx)/Da/Da;
+	      GeoGenfun::GENFUNCTION newalpha = ATan2(sinalfa,cosalfa);       
 	   
-	      Genfun::GENFUNCTION h1 = da/2. * frac  - .007*CLHEP::mm;
+	      GeoGenfun::GENFUNCTION h1 = da/2. * frac  - .007*GeoModelKernelUnits::mm;
 	   
 	      double Zx0 = (tl1+bl1)/2.;
 // thick absorber pieces
@@ -1259,7 +1259,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                 } 
               }
 	    // translation in x to include thick absorber into thin absorber
-	      double Xtrans = (Xb1+Xt1)/2.-Zx0 + .007*CLHEP::mm;    
+	      double Xtrans = (Xb1+Xt1)/2.-Zx0 + .007*GeoModelKernelUnits::mm;    
 
             // lengths that remain to be covered with the thin absorber
               double Xt2 = tl1-Xt1;
@@ -1267,12 +1267,12 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 
              // trabslation that would be needed to include think absorber only into overall thin+thick volume
               double Xtrans2 =  Zx0 - (Xb2+Xt2)/2.;
-              Xt2 = Xt2 -0.007*CLHEP::mm;
-              Xb2 = Xb2 -0.007*CLHEP::mm;
+              Xt2 = Xt2 -0.007*GeoModelKernelUnits::mm;
+              Xb2 = Xb2 -0.007*GeoModelKernelUnits::mm;
            
 	   
-	      Genfun::GENFUNCTION alpha = ATan(0.5*(bl1-tl1)/h1);
-	      Genfun::GENFUNCTION alpha_t = ATan(0.5*(Xb1-Xt1)/h1);     
+	      GeoGenfun::GENFUNCTION alpha = ATan(0.5*(bl1-tl1)/h1);
+	      GeoGenfun::GENFUNCTION alpha_t = ATan(0.5*(Xb1-Xt1)/h1);     
 
             // angle that would be needed for trap do describe only thin absorber
             //     ------------------|---------X---------|
@@ -1284,24 +1284,24 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
             //     ---------------|--------X---------|
             // alpha = (-) angle between X's
             //   tan(alpha) = delta X size / width,   deltaX size = 2*tl1-Xt2-(2*bl1-Xb2),  width = 2.*h1  
-	      Genfun::GENFUNCTION alpha_2 = ATan((2.*bl1-Xb2-(2.*tl1-Xt2))/(2.*h1));      
+	      GeoGenfun::GENFUNCTION alpha_2 = ATan((2.*bl1-Xb2-(2.*tl1-Xt2))/(2.*h1));      
 	   
 	   
 	    // .newalpha is already computed angle wrt z axis
 	    // P/2 rotation is to get absorber aligned along local x axis
 	    // instead of y, then rotate with angle newalpha
-	      Genfun::GENFUNCTION alfrot =  -M_PI/2. - newalpha;
+	      GeoGenfun::GENFUNCTION alfrot =  -M_PI/2. - newalpha;
 
-	      Genfun::GENFUNCTION Xcd    = (x1a + x2a)/2. + (2.*idivi-1.)*(1.-frac)*da/2.*cosalfa;
-	      Genfun::GENFUNCTION Ycd    = (y1a + y2a)/2. + (2.*idivi-1.)*(1.-frac)*da/2.*sinalfa;
-	      Genfun::GENFUNCTION Zcd    = Genfun::FixedConstant(Zmin+(tl1+bl1)/2.+safety_zlen);
+	      GeoGenfun::GENFUNCTION Xcd    = (x1a + x2a)/2. + (2.*idivi-1.)*(1.-frac)*da/2.*cosalfa;
+	      GeoGenfun::GENFUNCTION Ycd    = (y1a + y2a)/2. + (2.*idivi-1.)*(1.-frac)*da/2.*sinalfa;
+	      GeoGenfun::GENFUNCTION Zcd    = GeoGenfun::FixedConstant(Zmin+(tl1+bl1)/2.+safety_zlen);
 	   
 	      GeoXF::TRANSFUNCTION TX = 
-	        GeoXF::Pow(HepGeom::TranslateX3D(1.0),Xcd) *
-	        GeoXF::Pow(HepGeom::TranslateY3D(1.0),Ycd) *
-	        GeoXF::Pow(HepGeom::TranslateZ3D(1.0),Zcd) * 
-	        GeoXF::Pow(HepGeom::RotateZ3D(1.0),-alfrot)*
-	        HepGeom::RotateY3D(-90*CLHEP::deg);                    
+	        GeoXF::Pow(GeoTrf::TranslateX3D(1.0),Xcd) *
+	        GeoXF::Pow(GeoTrf::TranslateY3D(1.0),Ycd) *
+	        GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),Zcd) * 
+	        GeoXF::Pow(GeoTrf::RotateZ3D(1.0),-alfrot)*
+	        GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);                    
 
 	    // 
 
@@ -1345,7 +1345,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 		  const GeoLogVol* thickLog =  new GeoLogVol(thickName,thickTrap,Thick_abs);
                   GeoPhysVol* thickPhys = new GeoPhysVol(thickLog);
 		  // put thick absorber in straight_phys
-		  thinPhys->add(new GeoTransform(HepGeom::TranslateX3D(Xtrans)));
+		  thinPhys->add(new GeoTransform(GeoTrf::TranslateX3D(Xtrans)));
 		  thinPhys->add(thickPhys);
 
 #ifdef DEBUGGEO
@@ -1374,7 +1374,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                    std::string thickGlueName = baseName + "ThickAbsGlue::Straight";
                    const GeoLogVol* thickTrapGlueLog = new GeoLogVol(thickGlueName,thickTrapGlue, Glue);
                    GeoPhysVol * thickTrapGluePhys = new GeoPhysVol(thickTrapGlueLog);
-                   thinPhys->add(new GeoTransform(HepGeom::Translate3D(0.,0.,0.)));
+                   thinPhys->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)));
                    thinPhys->add(thickTrapGluePhys);
 
                    // inside glue put lead, Dz size = 0.5*Thpb*Contract, 2 separate volumes for eta<0.8 and eta>0.8
@@ -1388,7 +1388,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                    std::string thickLeadName= baseName+"ThickAbsLead::Straight";
                    const GeoLogVol* thickTrapLeadLog = new GeoLogVol(thickLeadName,thickTrapLead, myLead);
                    GeoPhysVol * thickTrapLeadPhys = new GeoPhysVol(thickTrapLeadLog);
-                   thickTrapGluePhys->add(new GeoTransform(HepGeom::TranslateX3D(Xtrans)));
+                   thickTrapGluePhys->add(new GeoTransform(GeoTrf::TranslateX3D(Xtrans)));
                    thickTrapGluePhys->add(thickTrapLeadPhys);
 
                    double dz_lead_thin = 0.5*Thpb_thin*Contract;
@@ -1401,7 +1401,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                    std::string thinLeadName = baseName+"ThinAbsLead::Straight";
                    const GeoLogVol* thinTrapLeadLog = new GeoLogVol(thinLeadName,thinTrapLead, myLead);
                    GeoPhysVol * thinTrapLeadPhys = new GeoPhysVol(thinTrapLeadLog);
-                   thickTrapGluePhys->add(new GeoTransform(HepGeom::TranslateX3D(Xtrans2)));
+                   thickTrapGluePhys->add(new GeoTransform(GeoTrf::TranslateX3D(Xtrans2)));
                    thickTrapGluePhys->add(thinTrapLeadPhys);
 
                     
@@ -1414,10 +1414,10 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 		//------------------------------------------------------------------------
 		if (m_A_SAGGING) {
 		  if (!gStraightAbsorbers) gStraightAbsorbers = new GeoStraightAccSection();
-		  gStraightAbsorbers->XCent(instance,irl)=TX(instance).dx();
-		  gStraightAbsorbers->YCent(instance,irl)=TX(instance).dy();
-		  gStraightAbsorbers->Cosu(instance,irl)    =-(TX(instance).xy());
-		  gStraightAbsorbers->Sinu(instance,irl)    = (TX(instance).xz());
+		  gStraightAbsorbers->XCent(instance,irl)=TX(instance)(0,3); //dx
+		  gStraightAbsorbers->YCent(instance,irl)=TX(instance)(1,3); //dy
+		  gStraightAbsorbers->Cosu(instance,irl)    =-(TX(instance)(0,1)); //xy
+		  gStraightAbsorbers->Sinu(instance,irl)    = (TX(instance)(0,2)); //xz
 		  gStraightAbsorbers->HalfLength(instance,irl) = thinTrap->getDydzn();
 
 		  stacPhysical->add(new GeoTransform(TX(instance)));
@@ -1453,21 +1453,21 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 // get slant angle for the previous zig-zag
                  int iirl=jrl-1;
                  if (iirl<0) iirl=1;
-                 Genfun::GENFUNCTION x0a = Fx(iirl, Gama, Cenx, Ceny)
+                 GeoGenfun::GENFUNCTION x0a = Fx(iirl, Gama, Cenx, Ceny)
                                            +deltay[iirl]*Del1(Gama)
                                            +deltax[iirl]*Del2(Gama);
-                 Genfun::GENFUNCTION y0a = Fy(iirl, Gama, Cenx, Ceny)
+                 GeoGenfun::GENFUNCTION y0a = Fy(iirl, Gama, Cenx, Ceny)
                                            -deltay[iirl]*Del2(Gama)
                                            +deltax[iirl]*Del1(Gama);
-                 Genfun::GENFUNCTION dx0 = x1a - x0a;
-                 Genfun::GENFUNCTION dy0 = y1a - y0a;
+                 GeoGenfun::GENFUNCTION dx0 = x1a - x0a;
+                 GeoGenfun::GENFUNCTION dy0 = y1a - y0a;
               // Da the two fold centers distance, da straight part length
-                 Genfun::GENFUNCTION Da0 = Sqrt ( dx0*dx0 + dy0*dy0 );
-                 Genfun::GENFUNCTION da0 = Sqrt ( (Da0 - 2.*Rint)*(Da0 + 2.*Rint) );
+                 GeoGenfun::GENFUNCTION Da0 = Sqrt ( dx0*dx0 + dy0*dy0 );
+                 GeoGenfun::GENFUNCTION da0 = Sqrt ( (Da0 - 2.*Rint)*(Da0 + 2.*Rint) );
               // newalpha (slant angle) value of the rotation angle around Z_axis
-                 Genfun::GENFUNCTION cosalfa0 = (da0*dx0 +iparit*2.*Rint*dy0)/Da0/Da0;
-                 Genfun::GENFUNCTION sinalfa0 = (da0*dy0 -iparit*2.*Rint*dx0)/Da0/Da0;
-                 Genfun::GENFUNCTION alpha_prev = ATan2(sinalfa0,cosalfa0);
+                 GeoGenfun::GENFUNCTION cosalfa0 = (da0*dx0 +iparit*2.*Rint*dy0)/Da0/Da0;
+                 GeoGenfun::GENFUNCTION sinalfa0 = (da0*dy0 -iparit*2.*Rint*dx0)/Da0/Da0;
+                 GeoGenfun::GENFUNCTION alpha_prev = ATan2(sinalfa0,cosalfa0);
 
 #ifdef DEBUGGEO
                 if (jrl>0 && jrl<Nbrt) {
@@ -1477,26 +1477,26 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                            << alpha_prev(0) << std::endl;
                 }
 #endif
-                Genfun::Mod Mod2Pi(2*M_PI);
+                GeoGenfun::Mod Mod2Pi(2*M_PI);
 // down folds  (add +M_PI and then rotate by -M_PI to follow same logic as old code)
-                 Genfun::GENFUNCTION phi0_dfold_0 = 
-                  Genfun::FixedConstant(M_PI/2.+phi0_safety);
-                 Genfun::GENFUNCTION dphi_dfold_0 = Mod2Pi(newalpha-phi0_safety - Gama);
-                 Genfun::GENFUNCTION phi0_dfold_1 = Mod2Pi(M_PI/2.+ alpha_prev - Gama);
-                 Genfun::GENFUNCTION dphi_dfold_1  = Mod2Pi(newalpha-alpha_prev);
-                 Genfun::GENFUNCTION phi0_dfold_2 =  Mod2Pi(M_PI/2.+ newalpha - Gama);
-                 Genfun::GENFUNCTION dphi_dfold_2 = Mod2Pi(- newalpha + Gama);
+                 GeoGenfun::GENFUNCTION phi0_dfold_0 = 
+                  GeoGenfun::FixedConstant(M_PI/2.+phi0_safety);
+                 GeoGenfun::GENFUNCTION dphi_dfold_0 = Mod2Pi(newalpha-phi0_safety - Gama);
+                 GeoGenfun::GENFUNCTION phi0_dfold_1 = Mod2Pi(M_PI/2.+ alpha_prev - Gama);
+                 GeoGenfun::GENFUNCTION dphi_dfold_1  = Mod2Pi(newalpha-alpha_prev);
+                 GeoGenfun::GENFUNCTION phi0_dfold_2 =  Mod2Pi(M_PI/2.+ newalpha - Gama);
+                 GeoGenfun::GENFUNCTION dphi_dfold_2 = Mod2Pi(- newalpha + Gama);
 // up folds
-                 Genfun::GENFUNCTION phi0_ufold_0 =
+                 GeoGenfun::GENFUNCTION phi0_ufold_0 =
                   Mod2Pi(M_PI/2.+newalpha-Gama);
-                 Genfun::GENFUNCTION dphi_ufold_0 = Mod2Pi(-newalpha+Gama-phi0_safety);
-                 Genfun::GENFUNCTION phi0_ufold_1 = Mod2Pi(M_PI/2. + newalpha - Gama);
-                 Genfun::GENFUNCTION dphi_ufold_1 =  Mod2Pi(alpha_prev - newalpha);
-                 Genfun::GENFUNCTION phi0_ufold_2 = Genfun::FixedConstant(M_PI/2.);
-                 Genfun::GENFUNCTION dphi_ufold_2 = Mod2Pi(newalpha-Gama);
-
-                 const Genfun::AbsFunction* phi0_fold=0;
-                 const Genfun::AbsFunction* dphi_fold=0;
+                 GeoGenfun::GENFUNCTION dphi_ufold_0 = Mod2Pi(-newalpha+Gama-phi0_safety);
+                 GeoGenfun::GENFUNCTION phi0_ufold_1 = Mod2Pi(M_PI/2. + newalpha - Gama);
+                 GeoGenfun::GENFUNCTION dphi_ufold_1 =  Mod2Pi(alpha_prev - newalpha);
+                 GeoGenfun::GENFUNCTION phi0_ufold_2 = GeoGenfun::FixedConstant(M_PI/2.);
+                 GeoGenfun::GENFUNCTION dphi_ufold_2 = Mod2Pi(newalpha-Gama);
+
+                 const GeoGenfun::AbsFunction* phi0_fold=0;
+                 const GeoGenfun::AbsFunction* dphi_fold=0;
                  const GeoXF::Function* TXfold=0;
 
                  std::string thinName;
@@ -1522,19 +1522,19 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                  } 
 
 
-                 Genfun::GENFUNCTION zpos     = Genfun::FixedConstant(Zmin+dz0);
+                 GeoGenfun::GENFUNCTION zpos     = GeoGenfun::FixedConstant(Zmin+dz0);
                  double phirot=0;
                  if (jrl%2==checkParity) phirot = -M_PI;
                  GeoXF::TRANSFUNCTION TXfold1=
-                   GeoXF::Pow(HepGeom::TranslateX3D(1.0),x1a) *
-                   GeoXF::Pow(HepGeom::TranslateY3D(1.0),y1a) *
-                   GeoXF::Pow(HepGeom::TranslateZ3D(1.0),zpos) *
-                   GeoXF::Pow(HepGeom::RotateZ3D(1.0),Gama+phirot);
+                   GeoXF::Pow(GeoTrf::TranslateX3D(1.0),x1a) *
+                   GeoXF::Pow(GeoTrf::TranslateY3D(1.0),y1a) *
+                   GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),zpos) *
+                   GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Gama+phirot);
                  GeoXF::TRANSFUNCTION TXfold2 =
-                   GeoXF::Pow(HepGeom::TranslateX3D(1.0),x2a) *
-                   GeoXF::Pow(HepGeom::TranslateY3D(1.0),y2a) *
-                   GeoXF::Pow(HepGeom::TranslateZ3D(1.0),zpos) *
-                   GeoXF::Pow(HepGeom::RotateZ3D(1.0),Gama+phirot);
+                   GeoXF::Pow(GeoTrf::TranslateX3D(1.0),x2a) *
+                   GeoXF::Pow(GeoTrf::TranslateY3D(1.0),y2a) *
+                   GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),zpos) *
+                   GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Gama+phirot);
 
 // first fown fold
                  if (jrl==0 && checkParity==0) {
@@ -1603,7 +1603,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                      thinPhys   = new GeoPhysVol(thinLog);
                      GeoPhysVol* thickPhys  = new GeoPhysVol(thickLog);
 
-                     thinPhys->add(new GeoTransform(HepGeom::TranslateZ3D(ddz01-ddz0)));
+                     thinPhys->add(new GeoTransform(GeoTrf::TranslateZ3D(ddz01-ddz0)));
                      thinPhys->add(thickPhys);
 #ifdef DEBUGGEO
                   std::cout << "  Position Thick fold in Thin  Z = " << ddz01-ddz0 << std::endl;
@@ -1629,7 +1629,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                      std::string foldGlueName = baseName+"Glue::Fold";
                      const GeoLogVol* glueTubsLog = new GeoLogVol(foldGlueName,glueTubs,Glue);
                      GeoPhysVol* glueTubsPhys = new GeoPhysVol(glueTubsLog);
-                     thinPhys->add(new GeoTransform(HepGeom::TranslateZ3D(0.)));
+                     thinPhys->add(new GeoTransform(GeoTrf::TranslateZ3D(0.)));
                      thinPhys->add(glueTubsPhys); 
 #ifdef DEBUGGEO
                      std::cout << "  glue fold volume " << Rcmin+0.5*Thfe*Contract << " " << Rcmax-0.5*Thfe*Contract << " " << ddz0 << std::endl;
@@ -1643,7 +1643,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                      std::string foldThickLeadName = baseName+"ThickLead::Fold";
                      const GeoLogVol* thickLeadLog = new GeoLogVol(foldThickLeadName,thickLeadTubs,myLead);
                      GeoPhysVol* thickLeadPhys = new GeoPhysVol(thickLeadLog);
-                     glueTubsPhys->add(new GeoTransform(HepGeom::TranslateZ3D(ddz01-ddz0)));
+                     glueTubsPhys->add(new GeoTransform(GeoTrf::TranslateZ3D(ddz01-ddz0)));
                      glueTubsPhys->add(thickLeadPhys);
 #ifdef DEBUGGEO
                      std::cout << " thick lead volume " << Rint-Thpb*Contract << " " << Rint+Thpb*Contract << " " << ddz01 << std::endl;
@@ -1656,7 +1656,7 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                      std::string foldThinLeadName = baseName+"ThinLead::Fold";
                      const GeoLogVol* thinLeadLog = new GeoLogVol(foldThinLeadName,thinLeadTubs,myLead);
                      GeoPhysVol* thinLeadPhys = new GeoPhysVol(thinLeadLog);
-                     glueTubsPhys->add(new GeoTransform(HepGeom::TranslateZ3D(ddz01))); 
+                     glueTubsPhys->add(new GeoTransform(GeoTrf::TranslateZ3D(ddz01))); 
                      glueTubsPhys->add(thinLeadPhys);
 
 #ifdef DEBUGGEO
@@ -1705,50 +1705,50 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 	      double Dze = Thel/2.;
 	   
 	      // For electrodes
-	      Genfun::GENFUNCTION x1e = Fx(irl+0., Game, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION x1e = Fx(irl+0., Game, Cenx, Ceny)
                                            +deltay[irl]*Del1(Game)
                                            +deltax[irl]*Del2(Game);
-	      Genfun::GENFUNCTION x2e = Fx(irl+1., Game, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION x2e = Fx(irl+1., Game, Cenx, Ceny)
                                            +deltay[irl+1]*Del1(Game)
                                            +deltax[irl+1]*Del2(Game);
-	      Genfun::GENFUNCTION y1e = Fy(irl+0., Game, Cenx, Ceny) 
+	      GeoGenfun::GENFUNCTION y1e = Fy(irl+0., Game, Cenx, Ceny) 
                                            -deltay[irl]*Del2(Game)
                                            +deltax[irl]*Del1(Game);
-	      Genfun::GENFUNCTION y2e = Fy(irl+1., Game, Cenx, Ceny)
+	      GeoGenfun::GENFUNCTION y2e = Fy(irl+1., Game, Cenx, Ceny)
                                            -deltay[irl+1]*Del2(Game)
                                            +deltax[irl+1]*Del1(Game);
-	      Genfun::GENFUNCTION dxe = x2e - x1e;
-	      Genfun::GENFUNCTION dye = y2e - y1e;
+	      GeoGenfun::GENFUNCTION dxe = x2e - x1e;
+	      GeoGenfun::GENFUNCTION dye = y2e - y1e;
 	    // De the two fold centers distance, de straight part length
-	      Genfun::GENFUNCTION De = Sqrt ( dxe*dxe + dye*dye );
-	      Genfun::GENFUNCTION de = Sqrt ( (De - 2.*Rint)*(De + 2.*Rint) );
+	      GeoGenfun::GENFUNCTION De = Sqrt ( dxe*dxe + dye*dye );
+	      GeoGenfun::GENFUNCTION de = Sqrt ( (De - 2.*Rint)*(De + 2.*Rint) );
 	   
 	    //newalphe (slant angle) value of the rotation angle around Z_axis
-	      Genfun::GENFUNCTION cosalfae = (de*dxe -iparit*2.*Rint*dye)/De/De;
-	      Genfun::GENFUNCTION sinalfae = (de*dye +iparit*2.*Rint*dxe)/De/De;
-	      Genfun::GENFUNCTION newalphe = ATan2(sinalfae,cosalfae);
+	      GeoGenfun::GENFUNCTION cosalfae = (de*dxe -iparit*2.*Rint*dye)/De/De;
+	      GeoGenfun::GENFUNCTION sinalfae = (de*dye +iparit*2.*Rint*dxe)/De/De;
+	      GeoGenfun::GENFUNCTION newalphe = ATan2(sinalfae,cosalfae);
 	   
 	   
 	    // newalphae is already computed angle wrt z axis
 	    // P/2 rotation is to get absorber aligned along local x axis
 	    // instead of y, then rotate with angle newalpha
-	      Genfun::GENFUNCTION alfrote = -M_PI/2. - newalphe;
+	      GeoGenfun::GENFUNCTION alfrote = -M_PI/2. - newalphe;
 	   
-	      Genfun::GENFUNCTION Xcde    = (x1e + x2e)/2.+ (2.*idivi-1.)*(1.-frac)*de/2.*cosalfae;
-	      Genfun::GENFUNCTION Ycde    = (y1e + y2e)/2.+ (2.*idivi-1.)*(1.-frac)*de/2.*sinalfae;
-	      Genfun::GENFUNCTION Zcde       = Genfun::FixedConstant(Zmin+(tl1+bl1)/2.+safety_zlen);
+	      GeoGenfun::GENFUNCTION Xcde    = (x1e + x2e)/2.+ (2.*idivi-1.)*(1.-frac)*de/2.*cosalfae;
+	      GeoGenfun::GENFUNCTION Ycde    = (y1e + y2e)/2.+ (2.*idivi-1.)*(1.-frac)*de/2.*sinalfae;
+	      GeoGenfun::GENFUNCTION Zcde       = GeoGenfun::FixedConstant(Zmin+(tl1+bl1)/2.+safety_zlen);
 	   
 	   
-	      Genfun::GENFUNCTION h1e      = de/2.*frac - .007*CLHEP::mm;
-	      Genfun::GENFUNCTION alpha_e  = ATan(0.5*(bl1-tl1)/h1e); 
+	      GeoGenfun::GENFUNCTION h1e      = de/2.*frac - .007*GeoModelKernelUnits::mm;
+	      GeoGenfun::GENFUNCTION alpha_e  = ATan(0.5*(bl1-tl1)/h1e); 
 	   
 	   
 	      GeoXF::TRANSFUNCTION TXE = 
-	        GeoXF::Pow(HepGeom::TranslateX3D(1.0),Xcde) *
-	        GeoXF::Pow(HepGeom::TranslateY3D(1.0),Ycde) *
-	        GeoXF::Pow(HepGeom::TranslateZ3D(1.0),Zcde) * 
-	        GeoXF::Pow(HepGeom::RotateZ3D(1.0),-alfrote)*
-	        HepGeom::RotateY3D(-90*CLHEP::deg);                    
+	        GeoXF::Pow(GeoTrf::TranslateX3D(1.0),Xcde) *
+	        GeoXF::Pow(GeoTrf::TranslateY3D(1.0),Ycde) *
+	        GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),Zcde) * 
+	        GeoXF::Pow(GeoTrf::RotateZ3D(1.0),-alfrote)*
+	        GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);                    
 	   
 	   
 	      for (int instance = 0; instance < Nelectrode; instance++) 
@@ -1778,10 +1778,10 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 		//------------------------------------------------------------------------
 		if (m_A_SAGGING) {
 		  if (!gStraightElectrodes) gStraightElectrodes = new GeoStraightAccSection();
-		  gStraightElectrodes->XCent(instance,irl)=TXE(instance).dx();
-		  gStraightElectrodes->YCent(instance,irl)=TXE(instance).dy();
-		  gStraightElectrodes->Cosu(instance,irl)    =-(TXE(instance).xy());
-		  gStraightElectrodes->Sinu(instance,irl)    = (TXE(instance).xz());
+		  gStraightElectrodes->XCent(instance,irl)=TXE(instance)(0,3); //dx
+		  gStraightElectrodes->YCent(instance,irl)=TXE(instance)(1,3); //dy
+		  gStraightElectrodes->Cosu(instance,irl)    =-(TXE(instance)(0,1)); //xy
+		  gStraightElectrodes->Sinu(instance,irl)    = (TXE(instance)(0,2)); //xz
 		  gStraightElectrodes->HalfLength(instance,irl) = trap->getDydzn();
 
 		  stacPhysical->add(new GeoTransform(TXE(instance)));
@@ -1818,21 +1818,21 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 // get slant angle for the previous zig-zag
                  int iirl=jrl-1;
                  if (iirl<0) iirl=1;
-                 Genfun::GENFUNCTION x0e = Fx(iirl, Game, Cenx, Ceny)
+                 GeoGenfun::GENFUNCTION x0e = Fx(iirl, Game, Cenx, Ceny)
                                            +deltay[iirl]*Del1(Game)
                                            +deltax[iirl]*Del2(Game);
-                 Genfun::GENFUNCTION y0e = Fy(iirl, Game, Cenx, Ceny)
+                 GeoGenfun::GENFUNCTION y0e = Fy(iirl, Game, Cenx, Ceny)
                                            -deltay[iirl]*Del2(Game)
                                            +deltax[iirl]*Del1(Game);
-                 Genfun::GENFUNCTION dx0 = x1e - x0e;
-                 Genfun::GENFUNCTION dy0 = y1e - y0e;
+                 GeoGenfun::GENFUNCTION dx0 = x1e - x0e;
+                 GeoGenfun::GENFUNCTION dy0 = y1e - y0e;
               // Da the two fold centers distance, da straight part length
-                 Genfun::GENFUNCTION Da0 = Sqrt ( dx0*dx0 + dy0*dy0 );
-                 Genfun::GENFUNCTION da0 = Sqrt ( (Da0 - 2.*Rint)*(Da0 + 2.*Rint) );
+                 GeoGenfun::GENFUNCTION Da0 = Sqrt ( dx0*dx0 + dy0*dy0 );
+                 GeoGenfun::GENFUNCTION da0 = Sqrt ( (Da0 - 2.*Rint)*(Da0 + 2.*Rint) );
               // newalpha (slant angle) value of the rotation angle around Z_axis
-                 Genfun::GENFUNCTION cosalfa0 = (da0*dx0 +iparit*2.*Rint*dy0)/Da0/Da0;
-                 Genfun::GENFUNCTION sinalfa0 = (da0*dy0 -iparit*2.*Rint*dx0)/Da0/Da0;
-                 Genfun::GENFUNCTION alphe_prev = ATan2(sinalfa0,cosalfa0);
+                 GeoGenfun::GENFUNCTION cosalfa0 = (da0*dx0 +iparit*2.*Rint*dy0)/Da0/Da0;
+                 GeoGenfun::GENFUNCTION sinalfa0 = (da0*dy0 -iparit*2.*Rint*dx0)/Da0/Da0;
+                 GeoGenfun::GENFUNCTION alphe_prev = ATan2(sinalfa0,cosalfa0);
 
 #ifdef DEBUGGEO
                 if (jrl>0 && jrl<Nbrt) {
@@ -1842,25 +1842,25 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 #endif
 
 // down folds (add +M_PI and then rotate by -M_PI to follow same logic as old code)
-                 Genfun::Mod Mod2Pi(2*M_PI);
-                 Genfun::GENFUNCTION phi0_dfold_0 = 
-                                       Genfun::FixedConstant(M_PI/2.+phi0_safety);
-                 Genfun::GENFUNCTION dphi_dfold_0 = Mod2Pi(newalphe-phi0_safety-Game);
-                 Genfun::GENFUNCTION phi0_dfold_1 = Mod2Pi(M_PI/2.+ alphe_prev - Game);
-                 Genfun::GENFUNCTION dphi_dfold_1  = Mod2Pi(newalphe-alphe_prev);
-                 Genfun::GENFUNCTION phi0_dfold_2 =  Mod2Pi(M_PI/2.+ newalphe - Game);
-                 Genfun::GENFUNCTION dphi_dfold_2 = Mod2Pi(- newalphe + Game);  
+                 GeoGenfun::Mod Mod2Pi(2*M_PI);
+                 GeoGenfun::GENFUNCTION phi0_dfold_0 = 
+                                       GeoGenfun::FixedConstant(M_PI/2.+phi0_safety);
+                 GeoGenfun::GENFUNCTION dphi_dfold_0 = Mod2Pi(newalphe-phi0_safety-Game);
+                 GeoGenfun::GENFUNCTION phi0_dfold_1 = Mod2Pi(M_PI/2.+ alphe_prev - Game);
+                 GeoGenfun::GENFUNCTION dphi_dfold_1  = Mod2Pi(newalphe-alphe_prev);
+                 GeoGenfun::GENFUNCTION phi0_dfold_2 =  Mod2Pi(M_PI/2.+ newalphe - Game);
+                 GeoGenfun::GENFUNCTION dphi_dfold_2 = Mod2Pi(- newalphe + Game);  
 // up folds
-                 Genfun::GENFUNCTION phi0_ufold_0 =
+                 GeoGenfun::GENFUNCTION phi0_ufold_0 =
                   Mod2Pi(M_PI/2.+newalphe-Game);
-                 Genfun::GENFUNCTION dphi_ufold_0 = Mod2Pi(-newalphe+Game-phi0_safety);
-                 Genfun::GENFUNCTION phi0_ufold_1 = Mod2Pi(M_PI/2. + newalphe - Game);
-                 Genfun::GENFUNCTION dphi_ufold_1 =  Mod2Pi(alphe_prev - newalphe);
-                 Genfun::GENFUNCTION phi0_ufold_2 = Genfun::FixedConstant(M_PI/2.);
-                 Genfun::GENFUNCTION dphi_ufold_2 = Mod2Pi(newalphe - Game);
-
-                 const Genfun::AbsFunction* phi0_fold=0;
-                 const Genfun::AbsFunction* dphi_fold=0;
+                 GeoGenfun::GENFUNCTION dphi_ufold_0 = Mod2Pi(-newalphe+Game-phi0_safety);
+                 GeoGenfun::GENFUNCTION phi0_ufold_1 = Mod2Pi(M_PI/2. + newalphe - Game);
+                 GeoGenfun::GENFUNCTION dphi_ufold_1 =  Mod2Pi(alphe_prev - newalphe);
+                 GeoGenfun::GENFUNCTION phi0_ufold_2 = GeoGenfun::FixedConstant(M_PI/2.);
+                 GeoGenfun::GENFUNCTION dphi_ufold_2 = Mod2Pi(newalphe - Game);
+
+                 const GeoGenfun::AbsFunction* phi0_fold=0;
+                 const GeoGenfun::AbsFunction* dphi_fold=0;
                  const GeoXF::Function* TXfold=0;
 
                  std::string eName;
@@ -1880,19 +1880,19 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
                    ddz0 = dza - safety_zlen;
                  }
 
-                 Genfun::GENFUNCTION zpos     = Genfun::FixedConstant(Zmin+dz0);
+                 GeoGenfun::GENFUNCTION zpos     = GeoGenfun::FixedConstant(Zmin+dz0);
                  double phirot = 0;
                  if (jrl%2==checkParity)  phirot = -M_PI;
                  GeoXF::TRANSFUNCTION TXfold1=
-                   GeoXF::Pow(HepGeom::TranslateX3D(1.0),x1e) *
-                   GeoXF::Pow(HepGeom::TranslateY3D(1.0),y1e) *
-                   GeoXF::Pow(HepGeom::TranslateZ3D(1.0),zpos) *
-                   GeoXF::Pow(HepGeom::RotateZ3D(1.0),Game+phirot);
+                   GeoXF::Pow(GeoTrf::TranslateX3D(1.0),x1e) *
+                   GeoXF::Pow(GeoTrf::TranslateY3D(1.0),y1e) *
+                   GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),zpos) *
+                   GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Game+phirot);
                  GeoXF::TRANSFUNCTION TXfold2 =
-                   GeoXF::Pow(HepGeom::TranslateX3D(1.0),x2e) *
-                   GeoXF::Pow(HepGeom::TranslateY3D(1.0),y2e) *
-                   GeoXF::Pow(HepGeom::TranslateZ3D(1.0),zpos) *
-                   GeoXF::Pow(HepGeom::RotateZ3D(1.0),Game+phirot);
+                   GeoXF::Pow(GeoTrf::TranslateX3D(1.0),x2e) *
+                   GeoXF::Pow(GeoTrf::TranslateY3D(1.0),y2e) *
+                   GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),zpos) *
+                   GeoXF::Pow(GeoTrf::RotateZ3D(1.0),Game+phirot);
 
 // first fown fold
                  if (jrl==0 && checkParity==0) {
@@ -2005,60 +2005,60 @@ void LArGeo::BarrelConstruction::MakeEnvelope()
 
 // Generic Function Versions
 
-Genfun::FunctionNoop LArGeo::BarrelConstruction::Fx(double r, Genfun::GENFUNCTION G, const double Cenx[], const double Ceny[] ) const
+GeoGenfun::FunctionNoop LArGeo::BarrelConstruction::Fx(double r, GeoGenfun::GENFUNCTION G, const double Cenx[], const double Ceny[] ) const
 {
-  Genfun::Cos Cos;
-  Genfun::Sin Sin;
+  GeoGenfun::Cos Cos;
+  GeoGenfun::Sin Sin;
   int i = (int)rint(r-.1), j = (int)rint(r+.1) ;
-  Genfun::GENFUNCTION result =  (Cos(G)*(Cenx[i]+Cenx[j])/2-Sin(G)*(Ceny[i]+Ceny[j])/2) ;
-  return Genfun::FunctionNoop(&result);
+  GeoGenfun::GENFUNCTION result =  (Cos(G)*(Cenx[i]+Cenx[j])/2-Sin(G)*(Ceny[i]+Ceny[j])/2) ;
+  return GeoGenfun::FunctionNoop(&result);
 }
 
-Genfun::FunctionNoop LArGeo::BarrelConstruction::Fy(double r, Genfun::GENFUNCTION G, const double Cenx[], const double Ceny[] ) const
+GeoGenfun::FunctionNoop LArGeo::BarrelConstruction::Fy(double r, GeoGenfun::GENFUNCTION G, const double Cenx[], const double Ceny[] ) const
 {
-  Genfun::Cos Cos;
-  Genfun::Sin Sin;
+  GeoGenfun::Cos Cos;
+  GeoGenfun::Sin Sin;
   int i = (int)rint(r-.1), j = (int)rint(r+.1) ;
-  Genfun::GENFUNCTION result = (Sin(G)*(Cenx[i]+Cenx[j])/2+Cos(G)*(Ceny[i]+Ceny[j])/2) ;
-  return Genfun::FunctionNoop(&result);
+  GeoGenfun::GENFUNCTION result = (Sin(G)*(Cenx[i]+Cenx[j])/2+Cos(G)*(Ceny[i]+Ceny[j])/2) ;
+  return GeoGenfun::FunctionNoop(&result);
 }
 
-Genfun::FunctionNoop LArGeo::BarrelConstruction::Del1(Genfun::GENFUNCTION G) const
+GeoGenfun::FunctionNoop LArGeo::BarrelConstruction::Del1(GeoGenfun::GENFUNCTION G) const
 {
-  Genfun::Cos Cos;
-  Genfun::Sin Sin;
-  Genfun::GENFUNCTION result = (Cos(  G ) * Sin( G ) );
-  return Genfun::FunctionNoop(&result);
+  GeoGenfun::Cos Cos;
+  GeoGenfun::Sin Sin;
+  GeoGenfun::GENFUNCTION result = (Cos(  G ) * Sin( G ) );
+  return GeoGenfun::FunctionNoop(&result);
 }
 
-Genfun::FunctionNoop LArGeo::BarrelConstruction::Del2(Genfun::GENFUNCTION G) const
+GeoGenfun::FunctionNoop LArGeo::BarrelConstruction::Del2(GeoGenfun::GENFUNCTION G) const
 {
-  Genfun::Cos Cos;
-  Genfun::GENFUNCTION result = (Cos(  G ) * Cos( G ) );
-  return Genfun::FunctionNoop(&result);
+  GeoGenfun::Cos Cos;
+  GeoGenfun::GENFUNCTION result = (Cos(  G ) * Cos( G ) );
+  return GeoGenfun::FunctionNoop(&result);
 }
 
 
-Genfun::FunctionNoop LArGeo::BarrelConstruction::ATan2(Genfun::GENFUNCTION y, Genfun::GENFUNCTION x) const {
+GeoGenfun::FunctionNoop LArGeo::BarrelConstruction::ATan2(GeoGenfun::GENFUNCTION y, GeoGenfun::GENFUNCTION x) const {
 
   // Manufacture a Theta Function:
-  Genfun::Rectangular Theta;
+  GeoGenfun::Rectangular Theta;
   Theta.x0().setValue(0.0);
   Theta.x1().setValue(DBL_MAX);
   Theta.baseline().setValue(0.0);
   Theta.height().setValue(1.0);
 
   // Manufacture an ATan function:
-  Genfun::ATan ATan;
+  GeoGenfun::ATan ATan;
   
 
   // Manufacture a Mod function, putting this on the range (0-2PI)
-  Genfun::Mod Mod2Pi(2*M_PI);
+  GeoGenfun::Mod Mod2Pi(2*M_PI);
 
   // Now take ATan if x is positive 
   
-  Genfun::GENFUNCTION result = Theta(x)*ATan(y/x) + Theta(-x)*(Mod2Pi(ATan(y/x)+M_PI)); 
-  return Genfun::FunctionNoop(&result);
+  GeoGenfun::GENFUNCTION result = Theta(x)*ATan(y/x) + Theta(-x)*(Mod2Pi(ATan(y/x)+M_PI)); 
+  return GeoGenfun::FunctionNoop(&result);
 
 }
 
@@ -2111,7 +2111,7 @@ void LArGeo::BarrelConstruction::printParams()
        m_parameters->GetValue("LArEMBphiMaxBarrel") << std::endl;
   std::cout << "Number of zigs          " <<  
      m_parameters->GetValue("LArEMBnoOFAccZigs") << std::endl;
-  std::cout << "Fold CLHEP::rad of curvature   " << 
+  std::cout << "Fold GeoModelKernelUnits::rad of curvature   " << 
      m_parameters->GetValue("LArEMBNeutFiberRadius") << std::endl;
   for (int i=0;i<15;i++) {
     std::cout << "Fold " << i << " radius " <<  
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
index ba3a3b001725b43ea52142c358a3efc16f3f70b5..9aeeec35266d8d4cdbf685e3e7a93286e1042956 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelCryostatConstruction.cxx
@@ -51,13 +51,13 @@
 // For units:
 #include "CLHEP/Units/PhysicalConstants.h"
 // For Transformation Fields:
-#include "CLHEP/GenericFunctions/Abs.hh" 
-#include "CLHEP/GenericFunctions/Mod.hh"
-#include "CLHEP/GenericFunctions/Rectangular.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/FixedConstant.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoGenericFunctions/Abs.h" 
+#include "GeoGenericFunctions/Mod.h"
+#include "GeoGenericFunctions/Rectangular.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/FixedConstant.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 
 #include <string>
 #include <cmath>
@@ -65,7 +65,7 @@
 #include <climits>
 #include <stdexcept>
 using namespace GeoXF;
-using namespace Genfun;
+using namespace GeoGenfun;
 
 // The objects for mapping plane indexes in Pcon to the record index
 // in RDBRecordset
@@ -169,7 +169,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 
     const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, names[n]);
     if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-    HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+    GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
     xf[n] = new GeoAlignableTransform(xfPos);
 
     StoredAlignX *sAlignX = new StoredAlignX(xf[n]);
@@ -243,9 +243,9 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
   // (LArVDetectorParameters) and adjust the volume geometry
   // accordingly.
 
-  //  double cryoMotherRin[]   = {1149.8*CLHEP::mm, 1149.8*CLHEP::mm,1149.8*CLHEP::mm,1149.8*CLHEP::mm,1149.8*CLHEP::mm,1149.8*CLHEP::mm};
-  //  double cryoMotherRout[]  = {2890. *CLHEP::mm, 2890. *CLHEP::mm,2250. *CLHEP::mm,2250. *CLHEP::mm,2890. *CLHEP::mm,2890. *CLHEP::mm};  
-  //  double cryoMotherZplan[] = {-3490.*CLHEP::mm,-2850.*CLHEP::mm,-2849.*CLHEP::mm, 2849.*CLHEP::mm, 2850.*CLHEP::mm, 3490.*CLHEP::mm};
+  //  double cryoMotherRin[]   = {1149.8*GeoModelKernelUnits::mm, 1149.8*GeoModelKernelUnits::mm,1149.8*GeoModelKernelUnits::mm,1149.8*GeoModelKernelUnits::mm,1149.8*GeoModelKernelUnits::mm,1149.8*GeoModelKernelUnits::mm};
+  //  double cryoMotherRout[]  = {2890. *GeoModelKernelUnits::mm, 2890. *GeoModelKernelUnits::mm,2250. *GeoModelKernelUnits::mm,2250. *GeoModelKernelUnits::mm,2890. *GeoModelKernelUnits::mm,2890. *GeoModelKernelUnits::mm};  
+  //  double cryoMotherZplan[] = {-3490.*GeoModelKernelUnits::mm,-2850.*GeoModelKernelUnits::mm,-2849.*GeoModelKernelUnits::mm, 2849.*GeoModelKernelUnits::mm, 2850.*GeoModelKernelUnits::mm, 3490.*GeoModelKernelUnits::mm};
 
   // Access source of detector parameters.
   //  VDetectorParameters* parameters = VDetectorParameters::GetInstance();
@@ -322,8 +322,8 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
       std::string cylName= cylStream.str();
 
       int cylNumber = currentRecord->getInt("CYL_NUMBER");
-      double zMin = currentRecord->getDouble("ZMIN")*CLHEP::cm;
-      double dZ   = currentRecord->getDouble("DZ")*CLHEP::cm;
+      double zMin = currentRecord->getDouble("ZMIN")*GeoModelKernelUnits::cm;
+      double dZ   = currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm;
       double zInCryostat = zMin + dZ / 2.;
       
       if(m_fullGeo){
@@ -347,12 +347,12 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 
 	  m_cryoMotherPhysical->add(new GeoNameTag(std::string("CryostatEarForward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	  m_cryoMotherPhysical->add(earPhysVol);
 
 	  m_cryoMotherPhysical->add(new GeoNameTag(cylName+std::string("CryostatEarBackward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(-zInCryostat)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(-zInCryostat)));
 	  m_cryoMotherPhysical->add(earPhysVol);                
 	}
       
@@ -370,7 +370,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 				       -angle*(M_PI/180.0),
 				       M_PI  + 2*angle*(M_PI/180));
 
-	  HepGeom::TranslateY3D  offset(rmax-yvert);
+	  GeoTrf::TranslateY3D  offset(rmax-yvert);
 	  GeoBox * box =  new GeoBox(rmax,rmax, rmax);
 	  const GeoShape & shape = tubs->subtract((*box)<<offset);
 	  
@@ -379,12 +379,12 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	
 	  m_cryoMotherPhysical->add(new GeoNameTag(std::string("CryostatLegForward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat+zthick)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat+zthick)));
 	  m_cryoMotherPhysical->add(legPhysVol);
 	  
 	  m_cryoMotherPhysical->add(new GeoNameTag(cylName+std::string("CryostatLegBackward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(-zInCryostat-zthick)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(-zInCryostat-zthick)));
 	  m_cryoMotherPhysical->add(legPhysVol);                
 	}
       }
@@ -395,9 +395,9 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
       // For Reco Geometry construct only solenoid cylinders
       if(m_fullGeo || (10<=cylID && cylID<=14)) {
 	solidBarrelCylinder
-	  = new GeoTubs(currentRecord->getDouble("RMIN")*CLHEP::cm,
-			currentRecord->getDouble("RMIN")*CLHEP::cm + currentRecord->getDouble("DR")*CLHEP::cm,
-			currentRecord->getDouble("DZ")*CLHEP::cm / 2.,
+	  = new GeoTubs(currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DR")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.,
 			(double) 0.,
 			dphi_all);
 
@@ -418,7 +418,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	  if(10<=cylID && cylID<=14)
 	    m_cryoMotherPhysical->add(xfSolenoid);
 
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	  m_cryoMotherPhysical->add(physBarrelCylinder);
 
 	  
@@ -436,12 +436,12 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	  
 	  m_cryoMotherPhysical->add(new GeoNameTag(cylName+std::string("PhysForward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	  m_cryoMotherPhysical->add(physBarrelCylinder);
 	  
 	  m_cryoMotherPhysical->add(new GeoNameTag(cylName+std::string("PhysBackward")));
 	  m_cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(-zInCryostat)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(-zInCryostat)));
 	  m_cryoMotherPhysical->add(physBarrelCylinder);                
 	}           
       }                           
@@ -532,17 +532,17 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
           double xxVis=((double)(Nvis));
           double ZposB=0.5*(z1+z2);
           double twopi128 = 2.*M_PI/xxVis;
-          Genfun::Variable      i;                                                        
-          Genfun::Mod Mod1(1.0),Mod128(xxVis),Mod2(2.0);                                  
-          Genfun::GENFUNCTION  PhiPos = PhiPos0 + twopi128*Mod128(i);                
-          Genfun::GENFUNCTION Int = i - Mod1;
-          Genfun::Cos  Cos;
-          Genfun::Sin  Sin;
+          GeoGenfun::Variable      i;                                                        
+          GeoGenfun::Mod Mod1(1.0),Mod128(xxVis),Mod2(2.0);                                  
+          GeoGenfun::GENFUNCTION  PhiPos = PhiPos0 + twopi128*Mod128(i);                
+          GeoGenfun::GENFUNCTION Int = i - Mod1;
+          GeoGenfun::Cos  Cos;
+          GeoGenfun::Sin  Sin;
           GeoXF::TRANSFUNCTION TX =                                                       
-            GeoXF::Pow(HepGeom::TranslateX3D(1.0),RhoPosB*Cos(PhiPos))*                         
-            GeoXF::Pow(HepGeom::TranslateY3D(1.0),RhoPosB*Sin(PhiPos))*                         
-            GeoXF::Pow(HepGeom::TranslateZ3D(2*ZposB),Int(i/128))*
-            HepGeom::TranslateZ3D(-ZposB);                                         
+            GeoXF::Pow(GeoTrf::TranslateX3D(1.0),RhoPosB*Cos(PhiPos))*                         
+            GeoXF::Pow(GeoTrf::TranslateY3D(1.0),RhoPosB*Sin(PhiPos))*                         
+            GeoXF::Pow(GeoTrf::TranslateZ3D(2*ZposB),Int(i/128))*
+            GeoTrf::TranslateZ3D(-ZposB);                                         
           GeoSerialTransformer *st = new GeoSerialTransformer(phys_vis, &TX, 2*Nvis);
           innerWallPhys->add(st);
         }
@@ -588,7 +588,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	  
 	  GeoLogVol* extraLog = new GeoLogVol(extraName,extraCons,Aluminium);
 	  GeoPhysVol* extraPhys = new GeoPhysVol(extraLog);
-	  m_cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(extra_zpos)));
+	  m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(extra_zpos)));
 	  m_cryoMotherPhysical->add(extraPhys); 
 	}
       }
@@ -649,31 +649,31 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
         double pos  = -z+width/2 + distFromRidge;
 // position of bumpers in new description
         if  (newBlocks->size() >0) {
-          Genfun::Variable      i;                                                        //
-          Genfun::Mod Mod1(1.0),Mod2(2.0);                                                //
-          Genfun::GENFUNCTION Truncate = i - Mod1(i);                                     //
-          Genfun::GENFUNCTION AngleZ = -angle/2.+angle*Truncate(Mod2(i/2))+ 2.*M_PI/(1.0*nPairTot)*Truncate(i/4) + 2*M_PI/(2.*nPairTot);
-          Genfun::GENFUNCTION TransZ = -pos + 2.*pos*Mod2(i);
+          GeoGenfun::Variable      i;                                                        //
+          GeoGenfun::Mod Mod1(1.0),Mod2(2.0);                                                //
+          GeoGenfun::GENFUNCTION Truncate = i - Mod1(i);                                     //
+          GeoGenfun::GENFUNCTION AngleZ = -angle/2.+angle*Truncate(Mod2(i/2))+ 2.*M_PI/(1.0*nPairTot)*Truncate(i/4) + 2*M_PI/(2.*nPairTot);
+          GeoGenfun::GENFUNCTION TransZ = -pos + 2.*pos*Mod2(i);
       
           TRANSFUNCTION tx = 
-            GeoXF::Pow(HepGeom::TranslateZ3D(1.0),TransZ)*
-            GeoXF::Pow(HepGeom::RotateZ3D(1.0),AngleZ)*
-            HepGeom::Translate3D(0.,r+height/2,0.);
+            GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),TransZ)*
+            GeoXF::Pow(GeoTrf::RotateZ3D(1.0),AngleZ)*
+            GeoTrf::Translate3D(0.,r+height/2,0.);
           GeoSerialTransformer *t  = new GeoSerialTransformer(physVol, &tx, nPairTot*4);
           m_cryoMotherPhysical->add(t);
         }
 // position of bumper in old description
         else {
-          Genfun::Variable      i;                                                        //
-          Genfun::Mod Mod1(1.0),Mod2(2.0);                                                //
-          Genfun::GENFUNCTION Truncate = i - Mod1(i);                                     //
+          GeoGenfun::Variable      i;                                                        //
+          GeoGenfun::Mod Mod1(1.0),Mod2(2.0);                                                //
+          GeoGenfun::GENFUNCTION Truncate = i - Mod1(i);                                     //
       
           TRANSFUNCTION tx = 
-           Pow(HepGeom::RotateZ3D(2*M_PI/nPairTot),Truncate(i/4))*
-           Pow(HepGeom::RotateZ3D(angle),Mod2(i/2))*
-           HepGeom::RotateZ3D(-angle/2)*
-           Pow(HepGeom::TranslateZ3D(2*pos),Mod2(i))*
-           HepGeom::Translate3D(0,r+height/2, -pos);
+           Pow(GeoTrf::RotateZ3D(2*M_PI/nPairTot),Truncate(i/4))*
+           Pow(GeoTrf::RotateZ3D(angle),Mod2(i/2))*
+           GeoTrf::RotateZ3D(-angle/2)*
+           Pow(GeoTrf::TranslateZ3D(2*pos),Mod2(i))*
+           GeoTrf::Translate3D(0,r+height/2, -pos);
           GeoSerialTransformer *t  = new GeoSerialTransformer(physVol, &tx, nPairTot*4);
           m_cryoMotherPhysical->add(t);
         }
@@ -707,7 +707,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
       m_cryoMotherPhysical->add(new GeoNameTag(std::string("Barrel Cryo InnerEndWall Phys")));
       GeoPhysVol *innerEndWallPhys = new GeoPhysVol(innerEndWallLog);
       m_cryoMotherPhysical->add(innerEndWallPhys);
-      m_cryoMotherPhysical->add(new GeoTransform(HepGeom::RotateY3D(M_PI)));
+      m_cryoMotherPhysical->add(new GeoTransform(GeoTrf::RotateY3D(M_PI)));
       m_cryoMotherPhysical->add(innerEndWallPhys);
     }
 
@@ -722,9 +722,9 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
   // sub-divided into sensitive-detector regions in the detector
   // routine.
 
-  //  double totalLArRin[]   = { 1565.5*CLHEP::mm, 1385.*CLHEP::mm, 1385.*CLHEP::mm, 1565.5*CLHEP::mm };
-  //  double totalLArRout[]  = { 2140. *CLHEP::mm, 2140.*CLHEP::mm, 2140.*CLHEP::mm, 2140. *CLHEP::mm };  
-  //  double totalLArZplan[] = {-3267. *CLHEP::mm,-3101.*CLHEP::mm, 3101.*CLHEP::mm, 3267. *CLHEP::mm };
+  //  double totalLArRin[]   = { 1565.5*GeoModelKernelUnits::mm, 1385.*GeoModelKernelUnits::mm, 1385.*GeoModelKernelUnits::mm, 1565.5*GeoModelKernelUnits::mm };
+  //  double totalLArRout[]  = { 2140. *GeoModelKernelUnits::mm, 2140.*GeoModelKernelUnits::mm, 2140.*GeoModelKernelUnits::mm, 2140. *GeoModelKernelUnits::mm };  
+  //  double totalLArZplan[] = {-3267. *GeoModelKernelUnits::mm,-3101.*GeoModelKernelUnits::mm, 3101.*GeoModelKernelUnits::mm, 3267. *GeoModelKernelUnits::mm };
     
   GeoPcon* totalLArShape =
     new GeoPcon(0.,                     // starting phi
@@ -763,11 +763,11 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
   // to this shape to allow for mis-alignments in other dimensions.)
 
   // increase internal radius to allow misalignments
-  // -----------------------------------------------  double rInShift = 0.*CLHEP::mm;
+  // -----------------------------------------------  double rInShift = 0.*GeoModelKernelUnits::mm;
 
-  //  double halfLArZplan[] = { 3.0 *CLHEP::mm, 3101.*CLHEP::mm, 3267. *CLHEP::mm };
-  //  double halfLArRin[]   = {1385.*CLHEP::mm + rInShift, 1385.*CLHEP::mm + rInShift, 1565.5*CLHEP::mm  + rInShift};
-  //  double halfLArRout[]  = {2140.*CLHEP::mm, 2140.*CLHEP::mm, 2140. *CLHEP::mm };  
+  //  double halfLArZplan[] = { 3.0 *GeoModelKernelUnits::mm, 3101.*GeoModelKernelUnits::mm, 3267. *GeoModelKernelUnits::mm };
+  //  double halfLArRin[]   = {1385.*GeoModelKernelUnits::mm + rInShift, 1385.*GeoModelKernelUnits::mm + rInShift, 1565.5*GeoModelKernelUnits::mm  + rInShift};
+  //  double halfLArRout[]  = {2140.*GeoModelKernelUnits::mm, 2140.*GeoModelKernelUnits::mm, 2140. *GeoModelKernelUnits::mm };  
     
   std::string halfLArName = "LAr::Barrel::Cryostat::HalfLAr";
   GeoPcon* halfLArShape =
@@ -810,7 +810,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 
   // add alignable transform
   totalLArPhysical->add(xfHalfLArNeg);
-  totalLArPhysical->add( new GeoTransform(HepGeom::RotateY3D(180.*CLHEP::deg)) );
+  totalLArPhysical->add( new GeoTransform(GeoTrf::RotateY3D(180.*GeoModelKernelUnits::deg)) );
   totalLArPhysical->add(halfLArPhysicalNeg);
   
   {
@@ -865,9 +865,9 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	  std::string cylName= cylStream.str(); 
 
 	  GeoTubs* solidBarrelCylinder 
-	  = new GeoTubs(currentRecord->getDouble("RMIN")*CLHEP::cm,
-			currentRecord->getDouble("RMIN")*CLHEP::cm + currentRecord->getDouble("DR")*CLHEP::cm,
-			currentRecord->getDouble("DZ")*CLHEP::cm / 2.,
+	  = new GeoTubs(currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DR")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.,
 			(double) 0.,
 			dphi_all);
     
@@ -876,7 +876,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	  
 	  GeoPhysVol* physBarrelCylinder = new GeoPhysVol(logicBarrelCylinder);
 	  
-	  double zInCryostat = currentRecord->getDouble("ZMIN")*CLHEP::cm + currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
+	  double zInCryostat = currentRecord->getDouble("ZMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
 	  
 	  int cylNumber = currentRecord->getInt("CYL_NUMBER");
 	  
@@ -886,23 +886,23 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
 	    halfLArPhysicalPos->add(new GeoNameTag(cylName+std::string("PhysForward")));
 	    halfLArPhysicalPos->add(new GeoIdentifierTag(cylNumber));
 	    //	  halfLArPhysicalPos->add(xfPos);
-	    halfLArPhysicalPos->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	    halfLArPhysicalPos->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	    halfLArPhysicalPos->add(physBarrelCylinder);
 	    
 	    halfLArPhysicalNeg->add(new GeoNameTag(cylName+std::string("PhysBackward")));
 	    halfLArPhysicalNeg->add(new GeoIdentifierTag(cylNumber));
 	    //	  halfLArPhysicalNeg->add(xfNeg);
-	    halfLArPhysicalNeg->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	    halfLArPhysicalNeg->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	    halfLArPhysicalNeg->add(physBarrelCylinder);
 	  } else {
 	    totalLArPhysical->add(new GeoNameTag(cylName+std::string("PhysForward")));
 	    totalLArPhysical->add(new GeoIdentifierTag(cylNumber));
-	    totalLArPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	    totalLArPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
 	    totalLArPhysical->add(physBarrelCylinder);
 
 	    totalLArPhysical->add(new GeoNameTag(cylName+std::string("PhysBackward")));
 	    totalLArPhysical->add(new GeoIdentifierTag(cylNumber));
-	    totalLArPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(-zInCryostat)));
+	    totalLArPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(-zInCryostat)));
 	    totalLArPhysical->add(physBarrelCylinder);
 	  }
 	}
@@ -913,13 +913,13 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
   }
   {
     // ----- Presampler ------    
-    double PresamplerMother_length = 1549.0*CLHEP::mm;  // Copied from PresParameterDef.icc
-    double presamplerShift = 3.*CLHEP::mm;
+    double PresamplerMother_length = 1549.0*GeoModelKernelUnits::mm;  // Copied from PresParameterDef.icc
+    double presamplerShift = 3.*GeoModelKernelUnits::mm;
     BarrelPresamplerConstruction barrelPSConstruction(m_fullGeo);
     
     // The "envelope" determined by the EMB should be a GeoFullPhysVol.
     GeoFullPhysVol* barrelPSPosEnvelope = barrelPSConstruction.GetPositiveEnvelope();
-    GeoTransform *xfPos = new GeoTransform(HepGeom::Transform3D(HepGeom::TranslateZ3D(PresamplerMother_length+presamplerShift)));
+    GeoTransform *xfPos = new GeoTransform(GeoTrf::Transform3D(GeoTrf::TranslateZ3D(PresamplerMother_length+presamplerShift)));
     {
       halfLArPhysicalPos->add(xfPos);
       //halfLArPhysicalPos->add(new GeoNameTag("PositivePSBarrel"));
@@ -931,7 +931,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
     }
     // The "envelope" determined by the EMB should be a GeoFullPhysVol.
     GeoFullPhysVol* barrelPSNegEnvelope = barrelPSConstruction.GetNegativeEnvelope();
-    GeoTransform *xfNeg = new GeoTransform(HepGeom::Transform3D(HepGeom::TranslateZ3D(PresamplerMother_length+presamplerShift)));
+    GeoTransform *xfNeg = new GeoTransform(GeoTrf::Transform3D(GeoTrf::TranslateZ3D(PresamplerMother_length+presamplerShift)));
     {
       halfLArPhysicalNeg->add(xfNeg);
       //halfLArPhysicalPos->add(new GeoNameTag("NegativePSBarrel"));
@@ -957,7 +957,7 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
       throw std::runtime_error(message.c_str());
     }
 
-    GeoPcon* pcon = new GeoPcon(startPhi*CLHEP::deg,dPhi*CLHEP::deg);
+    GeoPcon* pcon = new GeoPcon(startPhi*GeoModelKernelUnits::deg,dPhi*GeoModelKernelUnits::deg);
 
     for(unsigned int ii=0; ii<sctEcCoolingPlanes.size(); ii++) {
       iter = sctEcCoolingPlanes.find(ii);
@@ -978,10 +978,10 @@ GeoFullPhysVol* LArGeo::BarrelCryostatConstruction::GetEnvelope()
     const GeoLogVol* sctCiCoolingLog = new GeoLogVol("LAr::Barrel::Cryostat::SctCiCooling",pcon,material);
     GeoPhysVol* sctCiCoolingPhys = new GeoPhysVol(sctCiCoolingLog);
 
-    GeoTransform* xfPos1 = new GeoTransform(HepGeom::Transform3D());
-    GeoTransform* xfPos2 = new GeoTransform(HepGeom::RotateZ3D(180*CLHEP::deg));
-    GeoTransform* xfNeg1 = new GeoTransform(HepGeom::RotateZ3D((180+2*centerPhi)*CLHEP::deg)*HepGeom::RotateY3D(180*CLHEP::deg));
-    GeoTransform* xfNeg2 = new GeoTransform(HepGeom::RotateZ3D(2*centerPhi*CLHEP::deg)*HepGeom::RotateY3D(180*CLHEP::deg));
+    GeoTransform* xfPos1 = new GeoTransform(GeoTrf::Transform3D::Identity());
+    GeoTransform* xfPos2 = new GeoTransform(GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg));
+    GeoTransform* xfNeg1 = new GeoTransform(GeoTrf::RotateZ3D((180+2*centerPhi)*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
+    GeoTransform* xfNeg2 = new GeoTransform(GeoTrf::RotateZ3D(2*centerPhi*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg));
     
     m_cryoMotherPhysical->add(xfPos1);
     m_cryoMotherPhysical->add(sctCiCoolingPhys);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx
index 04fc2df01cd834707f8d44bdfc12a6f93a86edb2..eb57b265ddd48c77297c26686ca6a3601b92985f 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelDMConstruction.cxx
@@ -51,17 +51,17 @@
 // For Functions:
 
 // For functions:
-#include "CLHEP/GenericFunctions/Abs.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/GenericFunctions/Sqrt.hh"
-#include "CLHEP/GenericFunctions/ATan.hh"
-#include "CLHEP/GenericFunctions/Rectangular.hh"
-#include "CLHEP/GenericFunctions/Mod.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/FixedConstant.hh"
-
-using namespace Genfun;
+#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;
 
 
@@ -71,7 +71,7 @@ namespace BarrelDM {
 
 
 static const unsigned int NCrates=16;
-static const double Alfa=360*CLHEP::deg/NCrates;
+static const double Alfa=360*GeoModelKernelUnits::deg/NCrates;
 static const double Enda=1155;
 static const double Endb=1695.2;
 static const double Endc=2771.6;
@@ -169,24 +169,24 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   double Spb2ytr = BarrelDMTraps[recordIndex]->getDouble("YTR");
   double Spb2ztr = BarrelDMTraps[recordIndex]->getDouble("ZTR");
 
-  const GeoMaterial* matLArServices17  = materialManager.getMaterial("LAr::LArServices17");// 0.035*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices18  = materialManager.getMaterial("LAr::LArServices18");// 0.240*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices19  = materialManager.getMaterial("LAr::LArServices19");// 0.469*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices20  = materialManager.getMaterial("LAr::LArServices20");// 0.353*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial *alu               = materialManager.getMaterial("std::Aluminium"); //2.7 CLHEP::g/CLHEP::cm3
-  const GeoMaterial *air               = materialManager.getMaterial("std::Air"); //0.001214 CLHEP::g/CLHEP::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
 
-  HepGeom::Transform3D Cut3Boxe  = HepGeom::Translate3D(Boxxtr, Boxytr, Boxztr)*HepGeom::RotateX3D(-20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-  HepGeom::Transform3D Cut4Boxe  = HepGeom::Translate3D(Boxxtr, -Boxytr,Boxztr)*HepGeom::RotateX3D(20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+  GeoTrf::Transform3D Cut3Boxe  = GeoTrf::Translate3D(Boxxtr, Boxytr, Boxztr)*GeoTrf::RotateX3D(-20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D Cut4Boxe  = GeoTrf::Translate3D(Boxxtr, -Boxytr,Boxztr)*GeoTrf::RotateX3D(20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
   // build 5 instances of SectorEnvelopes1 with 3 different materials!
   GeoTrd   *Trdair2  = new GeoTrd(SecE2xhlen1, SecE2xhlen2, DYb, DYc, (Endc-Endb)/2);
   const GeoShape & SectorEnvelope= ((*Trdair2).
-                                    subtract((*Box)  <<HepGeom::Transform3D(Cut3Boxe)).
-                                    subtract((*Box)  <<HepGeom::Transform3D(Cut4Boxe)));
+                                    subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxe)).
+                                    subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxe)));
     
   const GeoShape & SectorEnvelopes= ((SectorEnvelope).
-                                     add(SectorEnvelope  << HepGeom::TranslateY3D(-(DYb+DYc)*cos(Alfa/2)*cos(Alfa/2))*HepGeom::TranslateZ3D(-(DYb+DYc)*0.5*sin(Alfa))*HepGeom::RotateX3D(Alfa))); 
+                                     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,matLArServices20);
   GeoPhysVol *sectorenvelopes2r    = new GeoPhysVol(lvse2r);  // for right-handed splice boxes 
@@ -195,28 +195,28 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   GeoPhysVol *sectorenvelopes2l    = new GeoPhysVol(lvse2l);  // for left-handed splice boxes
     
   GeoLogVol  *lvse2h          = new GeoLogVol("LAr::DM::SectorEnvelopes2h",&SectorEnvelopes,matLArServices19);
-  GeoPhysVol *sectorenvelopes2h    = new GeoPhysVol(lvse2h);  // no splice boxes horizontal at 0 & 180 CLHEP::deg.
+  GeoPhysVol *sectorenvelopes2h    = new GeoPhysVol(lvse2h);  // no splice boxes horizontal at 0 & 180 GeoModelKernelUnits::deg.
     
   GeoLogVol  *lvse2vup          = new GeoLogVol("LAr::DM::SectorEnvelopes2vup",&SectorEnvelopes,matLArServices17);
-  GeoPhysVol *sectorenvelopes2vup    = new GeoPhysVol(lvse2vup);  // no splice boxes vertical up at 90 CLHEP::deg
+  GeoPhysVol *sectorenvelopes2vup    = new GeoPhysVol(lvse2vup);  // no splice boxes vertical up at 90 GeoModelKernelUnits::deg
     
   GeoLogVol  *lvse2vd          = new GeoLogVol("LAr::DM::SectorEnvelopes2Vd",&SectorEnvelopes,matLArServices18);
-  GeoPhysVol *sectorenvelopes2vd    = new GeoPhysVol(lvse2vd);  // no splice boxes vertical down at 270 CLHEP::deg
+  GeoPhysVol *sectorenvelopes2vd    = new GeoPhysVol(lvse2vd);  // no splice boxes vertical down at 270 GeoModelKernelUnits::deg
 
   //---------- Build Splice boxes for InDet optical fibers--------
     
   GeoTrap  *GeoTrap1  = new GeoTrap(Spb1zhlen, Spb1theta, Spb1phi, Spb1yzn, Spb1xynzn, Spb1xypzn, Spb1angn, Spb1yzp, Spb1xynzp, Spb1xypzp, Spb1angp);
   GeoBox   *Box1   = new GeoBox(SplBoxhlen, SplBoxhwdt, SplBoxhhgt);  
   const GeoShape & SpliceBox = ((*GeoTrap1).
-                                subtract(*Box1 << HepGeom::TranslateZ3D(SplBoxztr)*HepGeom::TranslateY3D(-SplBoxytr)*HepGeom::RotateX3D(SplBoxxrot*CLHEP::deg)));
+                                subtract(*Box1 << GeoTrf::TranslateZ3D(SplBoxztr)*GeoTrf::TranslateY3D(-SplBoxytr)*GeoTrf::RotateX3D(SplBoxxrot*GeoModelKernelUnits::deg)));
     
-  GeoTransform *xtr = new GeoTransform (HepGeom::TranslateZ3D(Spb1ztr)*HepGeom::TranslateY3D(-Spb1ytr)*HepGeom::TranslateX3D(Spb1xtr)*HepGeom::RotateX3D(Spb1xrot*CLHEP::deg));
+  GeoTransform *xtr = new GeoTransform (GeoTrf::TranslateZ3D(Spb1ztr)*GeoTrf::TranslateY3D(-Spb1ytr)*GeoTrf::TranslateX3D(Spb1xtr)*GeoTrf::RotateX3D(Spb1xrot*GeoModelKernelUnits::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 (HepGeom::TranslateZ3D(Spb1ztr)*HepGeom::TranslateY3D(-Spb1ytr)*HepGeom::TranslateX3D(Spb1xtr)*HepGeom::RotateY3D(-180*CLHEP::deg)*HepGeom::RotateX3D(-(Alfa/2)));
+  GeoTransform *xtl = new GeoTransform (GeoTrf::TranslateZ3D(Spb1ztr)*GeoTrf::TranslateY3D(-Spb1ytr)*GeoTrf::TranslateX3D(Spb1xtr)*GeoTrf::RotateY3D(-180*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-(Alfa/2)));
   sectorenvelopes2l->add(xtl);
   GeoLogVol  *lvspbl     = new GeoLogVol("LAr::DM::SpliceBoxl",&SpliceBox,alu);  
   GeoPhysVol *spliceboxl       = new GeoPhysVol(lvspbl);
@@ -227,7 +227,7 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   GeoTrap  *GeoTrap2  = new GeoTrap(Spb2zhlen, Spb2theta, Spb2phi, Spb2yzn, Spb2xynzn, Spb2xypzn, Spb2angn, Spb2yzp, Spb2xynzp, Spb2xypzp, Spb2angp);
   GeoTrap  *GeoTrap3  = new GeoTrap(Spb3zhlen, Spb3theta, Spb3phi, Spb3yzn, Spb3xynzn, Spb3xypzn, Spb3angn, Spb3yzp, Spb3xynzp, Spb3xypzp, Spb3angp);
     
-  GeoTransform *xt1 = new GeoTransform (HepGeom::TranslateY3D(-Spb0ytr)*HepGeom::RotateX3D(Spb0xrot*CLHEP::deg));
+  GeoTransform *xt1 = new GeoTransform (GeoTrf::TranslateY3D(-Spb0ytr)*GeoTrf::RotateX3D(Spb0xrot*GeoModelKernelUnits::deg));
   spliceboxr->add(xt1);
   spliceboxl->add(xt1);
   GeoLogVol  *lt1     = new GeoLogVol("LAr::DM::TBox1",Trd1,air);
@@ -235,7 +235,7 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   spliceboxr->add(tbox1);
   spliceboxl->add(tbox1);
     
-  GeoTransform *xt2 = new GeoTransform (HepGeom::TranslateZ3D(Spb2ztr)*HepGeom::TranslateY3D(Spb2ytr));
+  GeoTransform *xt2 = new GeoTransform (GeoTrf::TranslateZ3D(Spb2ztr)*GeoTrf::TranslateY3D(Spb2ytr));
   spliceboxr->add(xt2);
   spliceboxl->add(xt2);
   GeoLogVol  *lt2     = new GeoLogVol("LAr::DM::TBox2",GeoTrap2,air);
@@ -243,7 +243,7 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
   spliceboxr->add(tbox2);
   spliceboxl->add(tbox2);
     
-  GeoTransform *xt3 = new GeoTransform (HepGeom::TranslateZ3D(-Spb3ztr)); 
+  GeoTransform *xt3 = new GeoTransform (GeoTrf::TranslateZ3D(-Spb3ztr)); 
   spliceboxr->add(xt3);
   spliceboxl->add(xt3);
   GeoLogVol  *lt3     = new GeoLogVol("LAr::DM::TBox3",GeoTrap3,air);
@@ -253,16 +253,16 @@ createSectorEnvelopes2FromDB (GeoFullPhysVol* envelope,
 
   //-------------- Place volumes in LAr Envelope -------------------
 
-  TRANSFUNCTION seA2r = Pow(HepGeom::RotateZ3D(1.0),8*f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2l = Pow(HepGeom::RotateZ3D(1.0),8*f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2r = Pow(HepGeom::RotateZ3D(1.0),8*f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2l = Pow(HepGeom::RotateZ3D(1.0),8*f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2Vup = Pow(HepGeom::RotateZ3D(1.0),f+(9*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2Vd = Pow(HepGeom::RotateZ3D(1.0),f-(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2H = Pow(HepGeom::RotateZ3D(1.0),8*f+(Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2Vup = Pow(HepGeom::RotateZ3D(1.0),f+(9*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2Vd = Pow(HepGeom::RotateZ3D(1.0),f-(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2H = Pow(HepGeom::RotateZ3D(1.0),8*f+(Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-SecE2ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION seA2r = Pow(GeoTrf::RotateZ3D(1.0),8*f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA2l = Pow(GeoTrf::RotateZ3D(1.0),8*f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2r = Pow(GeoTrf::RotateZ3D(1.0),8*f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2l = Pow(GeoTrf::RotateZ3D(1.0),8*f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA2Vup = Pow(GeoTrf::RotateZ3D(1.0),f+(9*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA2Vd = Pow(GeoTrf::RotateZ3D(1.0),f-(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA2H = Pow(GeoTrf::RotateZ3D(1.0),8*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2Vup = Pow(GeoTrf::RotateZ3D(1.0),f+(9*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2Vd = Pow(GeoTrf::RotateZ3D(1.0),f-(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2H = Pow(GeoTrf::RotateZ3D(1.0),8*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-SecE2ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
   GeoSerialTransformer *setA2r = new GeoSerialTransformer(sectorenvelopes2r,&seA2r, 2);
   GeoSerialTransformer *setA2l = new GeoSerialTransformer(sectorenvelopes2l,&seA2l, 2);
@@ -311,12 +311,12 @@ createBridgeEnvelopesFromDB (GeoFullPhysVol* envelope,
   double BridgeExtr = r->getDouble("XTR");
   double BridgeEztr = r->getDouble("ZTR");
 
-  GeoTrap  *Trapair  = new GeoTrap(BridgeEzhlen, BridgeEtheta*CLHEP::deg, BridgeEphi, BridgeEyzn, BridgeExynzn, BridgeExypzn, BridgeEangn, BridgeEyzp, BridgeExynzp, BridgeExypzp, BridgeEangp);
+  GeoTrap  *Trapair  = new GeoTrap(BridgeEzhlen, BridgeEtheta*GeoModelKernelUnits::deg, BridgeEphi, BridgeEyzn, BridgeExynzn, BridgeExypzn, BridgeEangn, BridgeEyzp, BridgeExynzp, BridgeExypzp, BridgeEangp);
   GeoLogVol  *lvbre        = new GeoLogVol("LAr::DM::BridgeEnvelopes",Trapair,matLArServices8);//In the end Density at least >= than SE1 because of Cryo Pipes
   GeoPhysVol *bridgeenvelopes    = new GeoPhysVol(lvbre);
 
-  TRANSFUNCTION breA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(BridgeExtr)*HepGeom::TranslateZ3D(BridgeEztr)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg);
-  TRANSFUNCTION breC = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(BridgeExtr)*HepGeom::TranslateZ3D(-BridgeEztr)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);
+  TRANSFUNCTION breA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(BridgeExtr)*GeoTrf::TranslateZ3D(BridgeEztr)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION breC = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(BridgeExtr)*GeoTrf::TranslateZ3D(-BridgeEztr)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *bretA = new GeoSerialTransformer(bridgeenvelopes,&breA, NCrates);
   GeoSerialTransformer *bretC = new GeoSerialTransformer(bridgeenvelopes,&breC, NCrates);
   envelope->add(bretA);
@@ -345,8 +345,8 @@ createBaseEnvelopesFromDB (GeoFullPhysVol* envelope,
   GeoLogVol  *lvbe          = new GeoLogVol("LAr::DM::BaseEnvelopes",Trd1air,matLArServices8); //In the end Density at least >= than SE1 because of Cryo Pipes
   GeoPhysVol *baseenvelopes    = new GeoPhysVol(lvbe);
 
-  TRANSFUNCTION beA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(BaseExtr)*HepGeom::TranslateZ3D(BaseEztr)*HepGeom::RotateY3D(90*CLHEP::deg); 
-  TRANSFUNCTION beC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(BaseExtr)*HepGeom::TranslateZ3D(-BaseEztr)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION beA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(BaseExtr)*GeoTrf::TranslateZ3D(BaseEztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION beC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(BaseExtr)*GeoTrf::TranslateZ3D(-BaseEztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *betA = new GeoSerialTransformer(baseenvelopes,&beA, NCrates);
   GeoSerialTransformer *betC = new GeoSerialTransformer(baseenvelopes,&beC, NCrates);
   envelope->add(betA);
@@ -394,24 +394,24 @@ void createFromDB (GeoFullPhysVol* envelope,
   unsigned int recordIndex;
     
   // Get materials
-  const GeoMaterial *alu               = materialManager.getMaterial("std::Aluminium"); //2.7 CLHEP::g/CLHEP::cm3
-  const GeoMaterial* matBoardsEnvelope = materialManager.getMaterial("LAr::BoardsEnvelope");// 0.932*CLHEP::gram/CLHEP::cm3);
-  const GeoMaterial* matLArServices1   = materialManager.getMaterial("LAr::LArServices1");// 1.020*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices2   = materialManager.getMaterial("LAr::LArServices2");// 0.955*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices3   = materialManager.getMaterial("LAr::LArServices3");// 1.005*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices4   = materialManager.getMaterial("LAr::LArServices4");// 0.460*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices5   = materialManager.getMaterial("LAr::LArServices5");// 0.480*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices6   = materialManager.getMaterial("LAr::LArServices6");// 1.000*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices7   = materialManager.getMaterial("LAr::LArServices7");// 0.935*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices8   = materialManager.getMaterial("LAr::LArServices8");// 1.070*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices9   = materialManager.getMaterial("LAr::LArServices9");// 1.020*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices10  = materialManager.getMaterial("LAr::LArServices10");// 0.995*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices11  = materialManager.getMaterial("LAr::LArServices11");// 0.835*CLHEP::gram/CLHEP::cm3 
-  const GeoMaterial* matLArServices12  = materialManager.getMaterial("LAr::LArServices12");// 0.640*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices13  = materialManager.getMaterial("LAr::LArServices13");// 0.690*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices14  = materialManager.getMaterial("LAr::LArServices14");// 0.825*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices15  = materialManager.getMaterial("LAr::LArServices15");// 0.875*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial* matLArServices16  = materialManager.getMaterial("LAr::LArServices16");// 1.035*CLHEP::gram/CLHEP::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;
@@ -476,9 +476,9 @@ void createFromDB (GeoFullPhysVol* envelope,
   GeoTube    *Ped2     = new GeoTube(ped2minr, ped2maxr, ped2zhlen);
   GeoTube    *Ped3     = new GeoTube(ped3minr,ped3maxr , ped3zhlen);  
   const GeoShape & CratePed=((*Pedestal).subtract(*Ped1).
-                             subtract((*Ped2)  <<HepGeom::TranslateY3D(-ped2ytr)*HepGeom::RotateY3D(90*CLHEP::deg)).
-                             subtract((*Ped3)  <<HepGeom::TranslateX3D(-ped3xtr)).
-                             subtract((*Ped2)  <<HepGeom::TranslateY3D(ped2ytr)*HepGeom::RotateY3D(90*CLHEP::deg)));
+                             subtract((*Ped2)  <<GeoTrf::TranslateY3D(-ped2ytr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)).
+                             subtract((*Ped3)  <<GeoTrf::TranslateX3D(-ped3xtr)).
+                             subtract((*Ped2)  <<GeoTrf::TranslateY3D(ped2ytr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)));
   
   GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::Ped",&CratePed,alu);
   GeoPhysVol *pedestal   = new GeoPhysVol(lvped);
@@ -487,7 +487,7 @@ void createFromDB (GeoFullPhysVol* envelope,
   GeoBox     *Crate1   = new GeoBox(crate1hlen, crate1hwdt, crate1hhgt);
   GeoBox     *Crate2   = new GeoBox(crate2hlen, crate2hwdt, crate2hhgt);
   GeoBox     *Crate3   = new GeoBox(crate3hlen, crate3hwdt, crate3hhgt);
-  const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<HepGeom::TranslateX3D(-crate3xtr));
+  const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<GeoTrf::TranslateX3D(-crate3xtr));
     
   GeoLogVol  *lvcrate = new GeoLogVol("LAr::DM::Crate",&FEBCrate,alu);
   GeoPhysVol *crate   = new GeoPhysVol(lvcrate);
@@ -500,26 +500,26 @@ void createFromDB (GeoFullPhysVol* envelope,
   //-------------- Place volumes in envelope ----------------------------
     
   //Crates
-  TRANSFUNCTION crA = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(crate1xtr)*HepGeom::TranslateZ3D(crate1ztr); 
-  TRANSFUNCTION crC = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(crate1xtr)*HepGeom::TranslateZ3D(-crate1ztr);
+  TRANSFUNCTION crA = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(crate1xtr)*GeoTrf::TranslateZ3D(crate1ztr); 
+  TRANSFUNCTION crC = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(crate1xtr)*GeoTrf::TranslateZ3D(-crate1ztr);
   GeoSerialTransformer *crtA = new GeoSerialTransformer(crate,&crA, NCrates);
   GeoSerialTransformer *crtC = new GeoSerialTransformer(crate,&crC, NCrates);
   envelope->add(crtA);
   envelope->add(crtC);
     
   //Pedestals
-  TRANSFUNCTION pedA = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(pedestxtr)*HepGeom::TranslateZ3D(pedestztr); 
-  TRANSFUNCTION pedC = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(pedestxtr)*HepGeom::TranslateZ3D(-pedestztr);
+  TRANSFUNCTION pedA = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(pedestxtr)*GeoTrf::TranslateZ3D(pedestztr); 
+  TRANSFUNCTION pedC = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(pedestxtr)*GeoTrf::TranslateZ3D(-pedestztr);
   GeoSerialTransformer *pedtA = new GeoSerialTransformer(pedestal,&pedA, NCrates);
   GeoSerialTransformer *pedtC = new GeoSerialTransformer(pedestal,&pedC, NCrates);
   envelope->add(pedtA);
   envelope->add(pedtC);
     
   //FEBoards
-  TRANSFUNCTION feb1A = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(BoardEztr);
-  TRANSFUNCTION feb2A = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(BoardEztr);
-  TRANSFUNCTION feb1C = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(-BoardEztr);
-  TRANSFUNCTION feb2C = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(-BoardEztr);
+  TRANSFUNCTION feb1A = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(BoardEztr);
+  TRANSFUNCTION feb2A = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(BoardEztr);
+  TRANSFUNCTION feb1C = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(-BoardEztr);
+  TRANSFUNCTION feb2C = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(-BoardEztr);
   GeoSerialTransformer *febt1A = new GeoSerialTransformer(boardenvelope,&feb1A, NCrates);
   GeoSerialTransformer *febt1C = new GeoSerialTransformer(boardenvelope,&feb1C, NCrates);
   GeoSerialTransformer *febt2A = new GeoSerialTransformer(boardenvelope,&feb2A, NCrates);
@@ -568,8 +568,8 @@ void createFromDB (GeoFullPhysVol* envelope,
   // transforms
   GeoBox   *Box   = new GeoBox(Boxhlen, Boxhwdt, Boxhhgt);
  
-  HepGeom::Transform3D Cut3Boxp  = HepGeom::Translate3D(Boxxtr, Boxytr, Boxxrot)*HepGeom::RotateX3D(-20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-  HepGeom::Transform3D Cut4Boxp  = HepGeom::Translate3D(Boxxtr, -Boxytr,Boxxrot)*HepGeom::RotateX3D(20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+  GeoTrf::Transform3D Cut3Boxp  = GeoTrf::Translate3D(Boxxtr, Boxytr, Boxxrot)*GeoTrf::RotateX3D(-20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D Cut4Boxp  = GeoTrf::Translate3D(Boxxtr, -Boxytr,Boxxrot)*GeoTrf::RotateX3D(20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
   // ----- build sector envelopes -----
   // build 16 instances of SectorEnvelopes1 each with its own material!
@@ -668,7 +668,7 @@ void createFromDB (GeoFullPhysVol* envelope,
       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(HepGeom::TranslateZ3D(zpos)));
+        se1List[isect]->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
         se1List[isect]->add(extraMatPhys);
       }
     }
@@ -707,7 +707,7 @@ void createFromDB (GeoFullPhysVol* envelope,
         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(HepGeom::Translate3D(xpos,ypos,zpos)));
+          se1List[isect]->add(new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos)));
           se1List[isect]->add(ppf1Phys);
         }
       }
@@ -723,7 +723,7 @@ void createFromDB (GeoFullPhysVol* envelope,
   GeoPhysVol *baseplates    = new GeoPhysVol(lvbp);
     
   // ----- build bridge plates -----
-  GeoTrap  *Trapalu  = new GeoTrap(BridgePzhlen, BridgePtheta*CLHEP::deg, BridgePphi, BridgePyzn, BridgePxynzn, BridgePxypzn, BridgePangn, BridgePyzp, BridgePxynzp, BridgePxypzp, BridgePangp); 
+  GeoTrap  *Trapalu  = new GeoTrap(BridgePzhlen, BridgePtheta*GeoModelKernelUnits::deg, BridgePphi, BridgePyzn, BridgePxynzn, BridgePxypzn, BridgePangn, BridgePyzp, BridgePxynzp, BridgePxypzp, BridgePangp); 
   GeoLogVol  *lvbrp          = new GeoLogVol("LAr::DM::BridgePlates",Trapalu,alu);
   GeoPhysVol *bridgeplates    = new GeoPhysVol(lvbrp);
     
@@ -731,8 +731,8 @@ void createFromDB (GeoFullPhysVol* envelope,
   // ----- build sector plates -----
   GeoTrd   *Trd2alu  = new GeoTrd(SecPxhlen1, SecPxhlen2, SecPyhlen1, SecPyhlen2, SecPzhlen );///
   const GeoShape & SectorPlates= ((*Trd2alu).
-                                  subtract((*Box)  <<HepGeom::Transform3D(Cut3Boxp)).
-                                  subtract((*Box)  <<HepGeom::Transform3D(Cut4Boxp)));
+                                  subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxp)).
+                                  subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxp)));
   GeoLogVol  *lvsp          = new GeoLogVol("LAr::DM::SectorPlates",&SectorPlates,alu);
   GeoPhysVol *sectorplates    = new GeoPhysVol(lvsp);
     
@@ -740,18 +740,18 @@ void createFromDB (GeoFullPhysVol* envelope,
   //-------------- Place volumes in LAr Envelope -------------------
     
   //sectorPlates
-  TRANSFUNCTION spA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(SecPxtr)*HepGeom::TranslateZ3D(SecPztr)*HepGeom::RotateY3D(90*CLHEP::deg);///
-  TRANSFUNCTION spC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(SecPxtr)*HepGeom::TranslateZ3D(-SecPztr)*HepGeom::RotateY3D(90*CLHEP::deg);///
+  TRANSFUNCTION spA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(SecPxtr)*GeoTrf::TranslateZ3D(SecPztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);///
+  TRANSFUNCTION spC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(SecPxtr)*GeoTrf::TranslateZ3D(-SecPztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D(BridgePxtr)*HepGeom::TranslateZ3D(BridgePztr)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg);
-  TRANSFUNCTION brpA2 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D(BridgePxtr)*HepGeom::TranslateZ3D(BridgePztr)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg); 
-  TRANSFUNCTION brpC1 = Pow(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D(BridgePxtr)*HepGeom::TranslateZ3D(-BridgePztr)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);
-  TRANSFUNCTION brpC2 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D(BridgePxtr)*HepGeom::TranslateZ3D(-BridgePztr)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);   GeoSerialTransformer *brptA1 = new GeoSerialTransformer(bridgeplates,&brpA1, 5);
+  TRANSFUNCTION brpA1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(BridgePxtr)*GeoTrf::TranslateZ3D(BridgePztr)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION brpA2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(BridgePxtr)*GeoTrf::TranslateZ3D(BridgePztr)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION brpC1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(BridgePxtr)*GeoTrf::TranslateZ3D(-BridgePztr)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION brpC2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(BridgePxtr)*GeoTrf::TranslateZ3D(-BridgePztr)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::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);
@@ -761,8 +761,8 @@ void createFromDB (GeoFullPhysVol* envelope,
   envelope->add(brptC2);
     
   //basePlates
-  TRANSFUNCTION bpA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(BasePxtr)*HepGeom::TranslateZ3D(BasePztr)*HepGeom::RotateY3D(90*CLHEP::deg); 
-  TRANSFUNCTION bpC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(BasePxtr)*HepGeom::TranslateZ3D(-BasePztr)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION bpA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(BasePxtr)*GeoTrf::TranslateZ3D(BasePztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION bpC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(BasePxtr)*GeoTrf::TranslateZ3D(-BasePztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *bptA = new GeoSerialTransformer(baseplates,&bpA, NCrates);
   GeoSerialTransformer *bptC = new GeoSerialTransformer(baseplates,&bpC, NCrates);
   envelope->add(bptA);
@@ -770,39 +770,39 @@ void createFromDB (GeoFullPhysVol* envelope,
     
   //sectorEnvelopes1
   //counter-clockwise from top if taking sideA for reference (clockwise for sideC)
-  TRANSFUNCTION seA1G5 = Pow(HepGeom::RotateZ3D(1.0),f+(9*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G5 = Pow(HepGeom::RotateZ3D(1.0),f+(9*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G6 = Pow(HepGeom::RotateZ3D(1.0),f+(11*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G6 = Pow(HepGeom::RotateZ3D(1.0),f+(11*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G7 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G7 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G8 = Pow(HepGeom::RotateZ3D(1.0),f+(15*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G8 = Pow(HepGeom::RotateZ3D(1.0),f+(15*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G9 = Pow(HepGeom::RotateZ3D(1.0),f+(17*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G9 = Pow(HepGeom::RotateZ3D(1.0),f+(17*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G10 = Pow(HepGeom::RotateZ3D(1.0),f+(19*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G10 = Pow(HepGeom::RotateZ3D(1.0),f+(19*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G11 = Pow(HepGeom::RotateZ3D(1.0),f+(21*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G11 = Pow(HepGeom::RotateZ3D(1.0),f+(21*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G12 = Pow(HepGeom::RotateZ3D(1.0),f+(23*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G12 = Pow(HepGeom::RotateZ3D(1.0),f+(23*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION seA1G5 = Pow(GeoTrf::RotateZ3D(1.0),f+(9*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G5 = Pow(GeoTrf::RotateZ3D(1.0),f+(9*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G6 = Pow(GeoTrf::RotateZ3D(1.0),f+(11*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G6 = Pow(GeoTrf::RotateZ3D(1.0),f+(11*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G7 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G7 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G8 = Pow(GeoTrf::RotateZ3D(1.0),f+(15*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G8 = Pow(GeoTrf::RotateZ3D(1.0),f+(15*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G9 = Pow(GeoTrf::RotateZ3D(1.0),f+(17*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G9 = Pow(GeoTrf::RotateZ3D(1.0),f+(17*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G10 = Pow(GeoTrf::RotateZ3D(1.0),f+(19*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G10 = Pow(GeoTrf::RotateZ3D(1.0),f+(19*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G11 = Pow(GeoTrf::RotateZ3D(1.0),f+(21*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G11 = Pow(GeoTrf::RotateZ3D(1.0),f+(21*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G12 = Pow(GeoTrf::RotateZ3D(1.0),f+(23*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G12 = Pow(GeoTrf::RotateZ3D(1.0),f+(23*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
   //clockwise from top if taking sideA for reference (counter-clockwise for sideC)
-  TRANSFUNCTION seA1G4 = Pow(HepGeom::RotateZ3D(1.0),f+(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G4 = Pow(HepGeom::RotateZ3D(1.0),f+(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G3 = Pow(HepGeom::RotateZ3D(1.0),f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G3 = Pow(HepGeom::RotateZ3D(1.0),f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G2 = Pow(HepGeom::RotateZ3D(1.0),f+(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G2 = Pow(HepGeom::RotateZ3D(1.0),f+(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G1 = Pow(HepGeom::RotateZ3D(1.0),f+(1*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G1 = Pow(HepGeom::RotateZ3D(1.0),f+(1*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G16 = Pow(HepGeom::RotateZ3D(1.0),f-(1*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G16 = Pow(HepGeom::RotateZ3D(1.0),f-(1*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G15 = Pow(HepGeom::RotateZ3D(1.0),f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G15 = Pow(HepGeom::RotateZ3D(1.0),f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G14 = Pow(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G14 = Pow(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA1G13 = Pow(HepGeom::RotateZ3D(1.0),f-(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1G13 = Pow(HepGeom::RotateZ3D(1.0),f-(7*Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-SecE1ztr)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION seA1G4 = Pow(GeoTrf::RotateZ3D(1.0),f+(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G4 = Pow(GeoTrf::RotateZ3D(1.0),f+(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G3 = Pow(GeoTrf::RotateZ3D(1.0),f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G3 = Pow(GeoTrf::RotateZ3D(1.0),f+(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G2 = Pow(GeoTrf::RotateZ3D(1.0),f+(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G2 = Pow(GeoTrf::RotateZ3D(1.0),f+(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G1 = Pow(GeoTrf::RotateZ3D(1.0),f+(1*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G1 = Pow(GeoTrf::RotateZ3D(1.0),f+(1*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G16 = Pow(GeoTrf::RotateZ3D(1.0),f-(1*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G16 = Pow(GeoTrf::RotateZ3D(1.0),f-(1*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G15 = Pow(GeoTrf::RotateZ3D(1.0),f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G15 = Pow(GeoTrf::RotateZ3D(1.0),f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G14 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G14 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA1G13 = Pow(GeoTrf::RotateZ3D(1.0),f-(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1G13 = Pow(GeoTrf::RotateZ3D(1.0),f-(7*Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-SecE1ztr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
   GeoSerialTransformer *setA1G5 = new GeoSerialTransformer(sectorenvelopes1g5,&seA1G5, 1);
   GeoSerialTransformer *setC1G5 = new GeoSerialTransformer(sectorenvelopes1g5,&seC1G5, 1);
@@ -976,13 +976,13 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     
     // Define some custom materials - That will move to the GeomDB
     //Fiberglass
-    GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial *matEpoxyResin = new GeoMaterial("Epoxy", 1.9*GeoModelKernelUnits::gram/GeoModelKernelUnits::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()));
@@ -990,7 +990,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     matEpoxyResin->lock();
 
     //FEBBoards
-    GeoMaterial *matFEBBoards = new GeoMaterial("FEBBoards", 4.03*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial *matFEBBoards = new GeoMaterial("FEBBoards", 4.03*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
     matFEBBoards->add(matFiberglass, 0.52);
     matFEBBoards->add(copper, 0.28);
     matFEBBoards->add(matEpoxyResin, 0.20);
@@ -999,13 +999,13 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     //SERVICES:CABLES, TUBES ETC...//
     
     //Water
-    GeoMaterial *matWater = new GeoMaterial("Water", 1*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial *matWater = new GeoMaterial("Water", 1*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+    GeoMaterial* matLArServices = new GeoMaterial("LArServices", 4.03*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
     matLArServices->add(shieldSteel, 0.20);
     matLArServices->add(copper, 0.60);
     matLArServices->add(matRubber, 0.10);
@@ -1021,16 +1021,16 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     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*CLHEP::deg, 150*CLHEP::deg); // 0, 2775, 300, -8.2*CLHEP::deg, 16.4*CLHEP::deg)
+    GeoTube    *Ped3     = new GeoTube(0, 2775, 300);   //, -75*GeoModelKernelUnits::deg, 150*GeoModelKernelUnits::deg); // 0, 2775, 300, -8.2*GeoModelKernelUnits::deg, 16.4*GeoModelKernelUnits::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)  <<HepGeom::TranslateY3D(-200.025)*HepGeom::RotateY3D(90*CLHEP::deg)).
-			       subtract((*Ped3)  <<HepGeom::TranslateX3D(-2815)).
-			       subtract((*Ped2)  <<HepGeom::TranslateY3D(200.025)*HepGeom::RotateY3D(90*CLHEP::deg)));
+			       subtract((*Ped2)  <<GeoTrf::TranslateY3D(-200.025)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)).
+			       subtract((*Ped3)  <<GeoTrf::TranslateX3D(-2815)).
+			       subtract((*Ped2)  <<GeoTrf::TranslateY3D(200.025)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)));
     
     
     GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::PED",&CratePed,air);
@@ -1040,7 +1040,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     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)  <<HepGeom::TranslateX3D(-6.7));
+    const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<GeoTrf::TranslateX3D(-6.7));
     
     
     GeoLogVol  *lvcrate = new GeoLogVol("LAr::DM::CRATE",&FEBCrate,alu);
@@ -1072,9 +1072,9 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     
     const unsigned int NCrates=16;
     Variable       i;
-    GENFUNCTION    f = (360*CLHEP::deg/NCrates)*i;
-    GENFUNCTION    f1 = (360*CLHEP::deg/NCrates)*i+315*CLHEP::deg;
-    GENFUNCTION    f2 = (360*CLHEP::deg/NCrates)*i+157.5*CLHEP::deg;
+    GENFUNCTION    f = (360*GeoModelKernelUnits::deg/NCrates)*i;
+    GENFUNCTION    f1 = (360*GeoModelKernelUnits::deg/NCrates)*i+315*GeoModelKernelUnits::deg;
+    GENFUNCTION    f2 = (360*GeoModelKernelUnits::deg/NCrates)*i+157.5*GeoModelKernelUnits::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)
@@ -1082,48 +1082,48 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     //-------------- Place volumes in envelope ----------------------------
     
     //boards
-    TRANSFUNCTION xfb1 = Pow(HepGeom::TranslateY3D(1.0),g)*HepGeom::TranslateY3D(19.685);
-    TRANSFUNCTION xfb2 = Pow(HepGeom::TranslateY3D(1.0),-g)*HepGeom::TranslateY3D(-19.685);
+    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(HepGeom::TranslateY3D(1.0),g)*HepGeom::TranslateY3D(19.685);
-    TRANSFUNCTION xfcp2 = Pow(HepGeom::TranslateY3D(1.0),-g)*HepGeom::TranslateY3D(-19.685);
+    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(HepGeom::TranslateY3D(1.0),g)*HepGeom::TranslateY3D(19.685)*HepGeom::TranslateX3D(204.972);
-    TRANSFUNCTION xfp2 = Pow(HepGeom::TranslateY3D(1.0),-g)*HepGeom::TranslateY3D(-19.685)*HepGeom::TranslateX3D(204.972);
+    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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3141.25)*HepGeom::TranslateZ3D(3135.05); 
-    TRANSFUNCTION xfc2 = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3141.25)*HepGeom::TranslateZ3D(-3135.05);
+    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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(2825.75)*HepGeom::TranslateZ3D(3135.05); 
-    TRANSFUNCTION xfped2 = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(2825.75)*HepGeom::TranslateZ3D(-3135.05);
+    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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3180.278)*HepGeom::TranslateZ3D(3135.05);
-    TRANSFUNCTION xfe2 = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3180.278)*HepGeom::TranslateZ3D(-3135.05);
+    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);
@@ -1133,65 +1133,65 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
     //----------- 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*CLHEP::deg, 0, 167, 53.5, 53.5, 0, 167, 123.5, 123.5, 0);
+    GeoTrap  *Trapair  = new GeoTrap(178.33, 39.596*GeoModelKernelUnits::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*CLHEP::deg, 0, 167, 5, 5, 0, 167, 5, 5, 0);
+    GeoTrap  *Trapalu  = new GeoTrap(178.33, 45.5*GeoModelKernelUnits::deg, 0, 167, 5, 5, 0, 167, 5, 5, 0);
     GeoTrd   *Trd2alu  = new GeoTrd(5, 5, 280, 548, 677.5);
     
-    HepGeom::Transform3D Cut1Box  = HepGeom::Translate3D(-295.5, 500, -473.563)*HepGeom::RotateX3D(-20*CLHEP::deg);
-    HepGeom::Transform3D Cut2Box  = HepGeom::Translate3D(-295.5, -500, -473.563)*HepGeom::RotateX3D(20*CLHEP::deg);
+    GeoTrf::Transform3D Cut1Box  = GeoTrf::Translate3D(-295.5, 500, -473.563)*GeoTrf::RotateX3D(-20*GeoModelKernelUnits::deg);
+    GeoTrf::Transform3D Cut2Box  = GeoTrf::Translate3D(-295.5, -500, -473.563)*GeoTrf::RotateX3D(20*GeoModelKernelUnits::deg);
     
     
     
     const GeoShape & Envelopes= (*Trd1air).
-      // add((*Trapair)  <<HepGeom::Translate3D(-147.5, 0, -295.25)).
-      add((*Trd2air)  <<HepGeom::Translate3D(-295.5, 0,  -1151.063)). 
-      subtract((*Box)  <<HepGeom::Transform3D(Cut1Box)).
-      subtract((*Box)  <<HepGeom::Transform3D(Cut2Box)).
-      add((*Trapair)  <<HepGeom::Translate3D(-147.5, 0, -295.25));
+      // 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)  <<HepGeom::Translate3D(-180.5, 0, -295.25));
+    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)  <<HepGeom::Translate3D(-366, 0, -1151.063)).
-      subtract((*Box)  <<HepGeom::Transform3D(Cut1Box)).
-      subtract((*Box)  <<HepGeom::Transform3D(Cut2Box));
+    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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-631.63)*HepGeom::TranslateX3D(3175.44)*HepGeom::TranslateZ3D(3165.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xf4a = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(631.63)*HepGeom::TranslateX3D(-3175.44)*HepGeom::TranslateZ3D(-3165.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg);
+    TRANSFUNCTION xf3a = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3165.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f1)*HepGeom::TranslateY3D(-631.63)*HepGeom::TranslateX3D(3175.44)*HepGeom::TranslateZ3D(3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xf4b = Pow(HepGeom::RotateZ3D(1.0),(f1+22.5*CLHEP::deg))*HepGeom::TranslateY3D(631.63)*HepGeom::TranslateX3D(-3175.44)*HepGeom::TranslateZ3D(-3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg);
+    TRANSFUNCTION xf3b = Pow(GeoTrf::RotateZ3D(1.0),f1)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xf4b = Pow(GeoTrf::RotateZ3D(1.0),(f1+22.5*GeoModelKernelUnits::deg))*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3044.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f2)*HepGeom::TranslateY3D(-631.63)*HepGeom::TranslateX3D(3175.44)*HepGeom::TranslateZ3D(3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xf6b = Pow(HepGeom::RotateZ3D(1.0),(f2-22.5*CLHEP::deg))*HepGeom::TranslateY3D(631.63)*HepGeom::TranslateX3D(-3175.44)*HepGeom::TranslateZ3D(-3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg);
+    TRANSFUNCTION xf5b = Pow(GeoTrf::RotateZ3D(1.0),f2)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xf6b = Pow(GeoTrf::RotateZ3D(1.0),(f2-22.5*GeoModelKernelUnits::deg))*GeoTrf::TranslateY3D(631.63)*GeoTrf::TranslateX3D(-3175.44)*GeoTrf::TranslateZ3D(-3044.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-631.63)*HepGeom::TranslateX3D(3175.44)*HepGeom::TranslateZ3D(3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xf4bb = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(631.63)*HepGeom::TranslateX3D(-3175.44)*HepGeom::TranslateZ3D(-3044.5)*HepGeom::RotateZ3D(-11.25*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg);
+    TRANSFUNCTION xf3bb = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateY3D(-631.63)*GeoTrf::TranslateX3D(3175.44)*GeoTrf::TranslateZ3D(3044.5)*GeoTrf::RotateZ3D(-11.25*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
     GeoSerialTransformer *st3biss = new GeoSerialTransformer(sectorplates,&xf3bb, NCrates);
     GeoSerialTransformer *st4biss = new GeoSerialTransformer(sectorplates,&xf4bb, NCrates);
     envelope->add(st3biss);
@@ -1200,12 +1200,12 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   else if(strDMTopTag=="LArBarrelDM-01" || strDMTopTag=="LArBarrelDM-02")
   {
   // Get some standard materials
-  const GeoMaterial *air        = materialManager->getMaterial("std::Air"); //0.001214 CLHEP::g/CLHEP::cm3
-  const GeoMaterial *alu        = materialManager->getMaterial("std::Aluminium"); //2.7 CLHEP::g/CLHEP::cm3
-  const GeoMaterial *shieldSteel = materialManager->getMaterial("shield::ShieldSteel"); //8 CLHEP::g/CLHEP::cm3
-  const GeoMaterial *matCO2 = materialManager->getMaterial("trt::CO2"); //0.001842 CLHEP::g/CLHEP::cm3
-  const GeoMaterial *matKapton = materialManager->getMaterial("std::Kapton"); // 1.42*CLHEP::gram/CLHEP::cm3
-  const GeoMaterial *matC3F8 = materialManager->getMaterial("std::C3F8"); //1.032*CLHEP::gram/CLHEP::cm3
+  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("trt::CO2"); //0.001842 g/cm3
+  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");
@@ -1220,30 +1220,30 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
 
   
   //C6F14
-  GeoMaterial *matC6F14 = new GeoMaterial("C6F14",1.68*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matC6F14 = new GeoMaterial("C6F14",1.68*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matWater = new GeoMaterial("Water", 1*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matN2 = new GeoMaterial("N2", 0.0012506*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   matN2->add(nitrogen,1);
   matN2->lock();
 
   //Fiberglass
-  GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matFiberglass = new GeoMaterial("SiO2",2.20*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matEpoxyResin = new GeoMaterial("Epoxy:C8H14O4Si", 1.9*GeoModelKernelUnits::gram/GeoModelKernelUnits::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()));
@@ -1251,14 +1251,14 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   matEpoxyResin->lock();
 
   //FEBoards
-  GeoMaterial *matFEBoards = new GeoMaterial("FEBoards", 4.03*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial *matFEBoards = new GeoMaterial("FEBoards", 4.03*GeoModelKernelUnits::gram/GeoModelKernelUnits::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*CLHEP::gram/CLHEP::cm3);
+  GeoMaterial* matBoardsEnvelope = new GeoMaterial("BoardsEnvelope", 0.932*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
   matBoardsEnvelope->add(matFEBoards, 0.4147);
   matBoardsEnvelope->add(matWater, 0.0736);
   matBoardsEnvelope->add(air, 0.0008);
@@ -1266,8 +1266,8 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   matBoardsEnvelope->lock();
   
   //InDetServices !!! Provisoire !!!
-  double density1 = 1.*CLHEP::gram/CLHEP::cm3;
-  if (strDMTopTag=="LArBarrelDM-02") density1 = 1.7*CLHEP::gram/CLHEP::cm3;
+  double density1 = 1.*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
+  if (strDMTopTag=="LArBarrelDM-02") density1 = 1.7*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
   GeoMaterial* matLArServices1 = new GeoMaterial("LArServices1", density1);
   matLArServices1->add(copper, .60);
   matLArServices1->add(shieldSteel, .05);
@@ -1280,8 +1280,8 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   matLArServices1->lock();
 
   //InDetServices !!! Provisoire !!!
-  double density2 = 2.*CLHEP::gram/CLHEP::cm3;
-  if (strDMTopTag=="LArBarrelDM-02") density2 = 3.4*CLHEP::gram/CLHEP::cm3;
+  double density2 = 2.*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
+  if (strDMTopTag=="LArBarrelDM-02") density2 = 3.4*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3;
   GeoMaterial* matLArServices2 = new GeoMaterial("LArServices2", density2);
   matLArServices2->add(copper, .60);
   matLArServices2->add(shieldSteel, .05);
@@ -1299,7 +1299,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
 //     << matLArServices2->getRadLength() << " " << matLArServices2->getIntLength() << std::endl;
   
   const unsigned int NCrates=16;
-  const double Alfa=360*CLHEP::deg/NCrates;
+  const double Alfa=360*GeoModelKernelUnits::deg/NCrates;
   const double Enda=1155;
   const double Endb=1695.2;
   const double Endc=2771.6;
@@ -1318,9 +1318,9 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   GeoTube    *Ped2     = new GeoTube(0, 150, 75);
   GeoTube    *Ped3     = new GeoTube(0, 2775, 300);  
   const GeoShape & CratePed=((*Pedestal).subtract(*Ped1).
-			     subtract((*Ped2)  <<HepGeom::TranslateY3D(-200.025)*HepGeom::RotateY3D(90*CLHEP::deg)).
-			     subtract((*Ped3)  <<HepGeom::TranslateX3D(-2800)).
-		             subtract((*Ped2)  <<HepGeom::TranslateY3D(200.025)*HepGeom::RotateY3D(90*CLHEP::deg)));
+			     subtract((*Ped2)  <<GeoTrf::TranslateY3D(-200.025)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)).
+			     subtract((*Ped3)  <<GeoTrf::TranslateX3D(-2800)).
+		             subtract((*Ped2)  <<GeoTrf::TranslateY3D(200.025)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)));
   
   GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::Ped",&CratePed,alu);
   GeoPhysVol *pedestal   = new GeoPhysVol(lvped);
@@ -1329,7 +1329,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   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)  <<HepGeom::TranslateX3D(-6.7));
+  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);
@@ -1343,26 +1343,26 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   //-------------- Place volumes in envelope ----------------------------
 
   //Crates
-  TRANSFUNCTION crA = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3141.25)*HepGeom::TranslateZ3D(3135.05); 
-  TRANSFUNCTION crC = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(3141.25)*HepGeom::TranslateZ3D(-3135.05);
+  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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(2825.75)*HepGeom::TranslateZ3D(3135.05); 
-  TRANSFUNCTION pedC = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(2825.75)*HepGeom::TranslateZ3D(-3135.05);
+  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(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(200.25)*HepGeom::TranslateX3D(3181.25)*HepGeom::TranslateZ3D(3135.05);
-  TRANSFUNCTION feb2A = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-200.25)*HepGeom::TranslateX3D(3181.25)*HepGeom::TranslateZ3D(3135.05);
-  TRANSFUNCTION feb1C = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(200.25)*HepGeom::TranslateX3D(3181.25)*HepGeom::TranslateZ3D(-3135.05);
-  TRANSFUNCTION feb2C = Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateY3D(-200.25)*HepGeom::TranslateX3D(3181.25)*HepGeom::TranslateZ3D(-3135.05);
+  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);
@@ -1377,10 +1377,10 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   // transforms
   GeoBox   *Box   = new GeoBox(280, 280, 100);
  
-  HepGeom::Transform3D Cut3Boxe  = HepGeom::Translate3D(0, 548, 711)*HepGeom::RotateX3D(-20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-  HepGeom::Transform3D Cut4Boxe  = HepGeom::Translate3D(0, -548,711)*HepGeom::RotateX3D(20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-  HepGeom::Transform3D Cut3Boxp  = HepGeom::Translate3D(0, 548, 850)*HepGeom::RotateX3D(-20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-  HepGeom::Transform3D Cut4Boxp  = HepGeom::Translate3D(0, -548,850)*HepGeom::RotateX3D(20*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+  GeoTrf::Transform3D Cut3Boxe  = GeoTrf::Translate3D(0, 548, 711)*GeoTrf::RotateX3D(-20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D Cut4Boxe  = GeoTrf::Translate3D(0, -548,711)*GeoTrf::RotateX3D(20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D Cut3Boxp  = GeoTrf::Translate3D(0, 548, 850)*GeoTrf::RotateX3D(-20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D Cut4Boxp  = GeoTrf::Translate3D(0, -548,850)*GeoTrf::RotateX3D(20*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
   // ----- build base envelopes -----
   GeoTrd   *Trd1air  = new GeoTrd(123.5, 123.5, 167, 305, 287.5); 
@@ -1388,7 +1388,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   GeoPhysVol *baseenvelopes    = new GeoPhysVol(lvbe);
 
   // ----- build bridge envelopes -----
-  GeoTrap  *Trapair  = new GeoTrap(201.70, 45.35*CLHEP::deg, 0, 160, 52.95, 52.95, 0, 160, 123.5, 123.5, 0);
+  GeoTrap  *Trapair  = new GeoTrap(201.70, 45.35*GeoModelKernelUnits::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);
 
@@ -1400,11 +1400,11 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
 
   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)  <<HepGeom::Transform3D(Cut3Boxe)).
-				     subtract((*Box)  <<HepGeom::Transform3D(Cut4Boxe)));
+				     subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxe)).
+				     subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxe)));
 
   const GeoShape & SectorEnvelopes= ((SectorEnvelope).
-                                    add(SectorEnvelope  << HepGeom::TranslateY3D(-(DYb+DYc)*cos(Alfa/2)*cos(Alfa/2))*HepGeom::TranslateZ3D(-(DYb+DYc)*0.5*sin(Alfa))*HepGeom::RotateX3D(Alfa))); 
+                                    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
@@ -1421,7 +1421,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   GeoPhysVol *baseplates    = new GeoPhysVol(lvbp);
 
   // ----- build bridge plates -----
-  GeoTrap  *Trapalu  = new GeoTrap(201.70, 49.92*CLHEP::deg, 0, 160, 5, 5, 0, 160, 5, 5, 0); 
+  GeoTrap  *Trapalu  = new GeoTrap(201.70, 49.92*GeoModelKernelUnits::deg, 0, 160, 5, 5, 0, 160, 5, 5, 0); 
   GeoLogVol  *lvbrp          = new GeoLogVol("LAr::DM::BridgePlates",Trapalu,alu);
   GeoPhysVol *bridgeplates    = new GeoPhysVol(lvbrp);
   
@@ -1429,8 +1429,8 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   // ----- build sector plates -----
   GeoTrd   *Trd2alu  = new GeoTrd(5, 5, 280, 548, 677.5);
   const GeoShape & SectorPlates= ((*Trd2alu).
-                                   subtract((*Box)  <<HepGeom::Transform3D(Cut3Boxp)).
-				   subtract((*Box)  <<HepGeom::Transform3D(Cut4Boxp)));
+                                   subtract((*Box)  <<GeoTrf::Transform3D(Cut3Boxp)).
+				   subtract((*Box)  <<GeoTrf::Transform3D(Cut4Boxp)));
   GeoLogVol  *lvsp          = new GeoLogVol("LAr::DM::SectorPlates",&SectorPlates,alu);
   GeoPhysVol *sectorplates    = new GeoPhysVol(lvsp);
 
@@ -1439,15 +1439,15 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   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 << HepGeom::TranslateZ3D(193.88)*HepGeom::TranslateY3D(-223.49)*HepGeom::RotateX3D(41.592*CLHEP::deg)));
+				subtract(*Box1 << GeoTrf::TranslateZ3D(193.88)*GeoTrf::TranslateY3D(-223.49)*GeoTrf::RotateX3D(41.592*GeoModelKernelUnits::deg)));
 
-  GeoTransform *xtr = new GeoTransform (HepGeom::TranslateZ3D(39.57)*HepGeom::TranslateY3D(-452.12)*HepGeom::TranslateX3D(5.40)*HepGeom::RotateX3D(191.25*CLHEP::deg));
+  GeoTransform *xtr = new GeoTransform (GeoTrf::TranslateZ3D(39.57)*GeoTrf::TranslateY3D(-452.12)*GeoTrf::TranslateX3D(5.40)*GeoTrf::RotateX3D(191.25*GeoModelKernelUnits::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 (HepGeom::TranslateZ3D(39.57)*HepGeom::TranslateY3D(-452.12)*HepGeom::TranslateX3D(5.40)*HepGeom::RotateY3D(-180*CLHEP::deg)*HepGeom::RotateX3D(-(Alfa/2)));
+  GeoTransform *xtl = new GeoTransform (GeoTrf::TranslateZ3D(39.57)*GeoTrf::TranslateY3D(-452.12)*GeoTrf::TranslateX3D(5.40)*GeoTrf::RotateY3D(-180*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-(Alfa/2)));
   sectorenvelopes2l->add(xtl);
   GeoLogVol  *lvspbl     = new GeoLogVol("LAr::DM::SpliceBoxl",&SpliceBox,alu);  
   GeoPhysVol *spliceboxl       = new GeoPhysVol(lvspbl);
@@ -1459,7 +1459,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   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 (HepGeom::TranslateY3D(-53)*HepGeom::RotateX3D(42.25*CLHEP::deg));
+  GeoTransform *xt1 = new GeoTransform (GeoTrf::TranslateY3D(-53)*GeoTrf::RotateX3D(42.25*GeoModelKernelUnits::deg));
   spliceboxr->add(xt1);
   spliceboxl->add(xt1);
   GeoLogVol  *lt1     = new GeoLogVol("LAr::DM::TBox1",Trd1,air);
@@ -1467,7 +1467,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   spliceboxr->add(tbox1);
   spliceboxl->add(tbox1);
   
-  GeoTransform *xt2 = new GeoTransform (HepGeom::TranslateZ3D(78)*HepGeom::TranslateY3D(154));
+  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);
@@ -1475,7 +1475,7 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   spliceboxr->add(tbox2);
   spliceboxl->add(tbox2);
   
-  GeoTransform *xt3 = new GeoTransform (HepGeom::TranslateZ3D(-155.81)); 
+  GeoTransform *xt3 = new GeoTransform (GeoTrf::TranslateZ3D(-155.81)); 
   spliceboxr->add(xt3);
   spliceboxl->add(xt3);
   GeoLogVol  *lt3     = new GeoLogVol("LAr::DM::TBox3",GeoTrap3,air);
@@ -1487,18 +1487,18 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   //-------------- Place volumes in LAr Envelope -------------------
  
   //sectorPlates
-  TRANSFUNCTION spA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(2095)*HepGeom::TranslateZ3D(3410.1)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION spC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(2095)*HepGeom::TranslateZ3D(-3410.1)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION spA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2095)*GeoTrf::TranslateZ3D(3410.1)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION spC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(2095)*GeoTrf::TranslateZ3D(-3410.1)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D(2974.5)*HepGeom::TranslateZ3D(3170.1)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg);
-  TRANSFUNCTION brpA2 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D(2974.5)*HepGeom::TranslateZ3D(3170.1)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg); 
-  TRANSFUNCTION brpC1 = Pow(HepGeom::RotateZ3D(1.0),f-(5*Alfa/2))*HepGeom::TranslateX3D(2974.5)*HepGeom::TranslateZ3D(-3170.1)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);
-  TRANSFUNCTION brpC2 = Pow(HepGeom::RotateZ3D(1.0),f+(13*Alfa/2))*HepGeom::TranslateX3D(2974.5)*HepGeom::TranslateZ3D(-3170.1)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);   GeoSerialTransformer *brptA1 = new GeoSerialTransformer(bridgeplates,&brpA1, 5);
+  TRANSFUNCTION brpA1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(3170.1)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION brpA2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(3170.1)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION brpC1 = Pow(GeoTrf::RotateZ3D(1.0),f-(5*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(-3170.1)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION brpC2 = Pow(GeoTrf::RotateZ3D(1.0),f+(13*Alfa/2))*GeoTrf::TranslateX3D(2974.5)*GeoTrf::TranslateZ3D(-3170.1)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::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);
@@ -1508,27 +1508,27 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   envelope->add(brptC2);
 
   //basePlates
-  TRANSFUNCTION bpA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(3464)*HepGeom::TranslateZ3D(2930.6)*HepGeom::RotateY3D(90*CLHEP::deg); 
-  TRANSFUNCTION bpC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(3464)*HepGeom::TranslateZ3D(-2930.6)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION bpA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(2930.6)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION bpC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(-2930.6)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC1 = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D((Endb+Enda)/2)*HepGeom::TranslateZ3D(-3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION seA1 = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC1 = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D((Endb+Enda)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *setA1 = new GeoSerialTransformer(sectorenvelopes1,&seA1, NCrates);
   GeoSerialTransformer *setC1 = new GeoSerialTransformer(sectorenvelopes1,&seC1, NCrates);
   envelope->add(setA1); 
   envelope->add(setC1);
   
-  TRANSFUNCTION seA2r = Pow(HepGeom::RotateZ3D(1.0),8*f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2l = Pow(HepGeom::RotateZ3D(1.0),8*f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seA2 = Pow(HepGeom::RotateZ3D(1.0),4*f+(Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2 = Pow(HepGeom::RotateZ3D(1.0),4*f+(Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2r = Pow(HepGeom::RotateZ3D(1.0),8*f-(3*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
-  TRANSFUNCTION seC2l = Pow(HepGeom::RotateZ3D(1.0),8*f+(5*Alfa/2))*HepGeom::TranslateX3D((Endb+Endc)/2)*HepGeom::TranslateZ3D(-3468.05)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION seA2r = Pow(GeoTrf::RotateZ3D(1.0),8*f-(3*Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seA2 = Pow(GeoTrf::RotateZ3D(1.0),4*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(3468.05)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION seC2 = Pow(GeoTrf::RotateZ3D(1.0),4*f+(Alfa/2))*GeoTrf::TranslateX3D((Endb+Endc)/2)*GeoTrf::TranslateZ3D(-3468.05)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::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*GeoModelKernelUnits::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*GeoModelKernelUnits::deg);
   GeoSerialTransformer *setA2r = new GeoSerialTransformer(sectorenvelopes2r,&seA2r, 2);
   GeoSerialTransformer *setA2l = new GeoSerialTransformer(sectorenvelopes2l,&seA2l, 2);
   GeoSerialTransformer *setA2 = new GeoSerialTransformer(sectorenvelopes2,&seA2, 4);
@@ -1543,16 +1543,16 @@ void LArGeo::BarrelDMConstruction::create(GeoFullPhysVol* envelope)
   envelope->add(setC2l);
 
   //bridgeEnvelopes
-  TRANSFUNCTION breA = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(2974.532)*HepGeom::TranslateZ3D(3263.65)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg);
-  TRANSFUNCTION breC = Pow(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(2974.532)*HepGeom::TranslateZ3D(-3263.65)*HepGeom::RotateZ3D(-90*CLHEP::deg)*HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(-90*CLHEP::deg);
+  TRANSFUNCTION breA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2974.532)*GeoTrf::TranslateZ3D(3263.65)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg);
+  TRANSFUNCTION breC = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(2974.532)*GeoTrf::TranslateZ3D(-3263.65)*GeoTrf::RotateZ3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(-90*GeoModelKernelUnits::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(HepGeom::RotateZ3D(1.0),f-(Alfa/2))*HepGeom::TranslateX3D(3464)*HepGeom::TranslateZ3D(3059.2)*HepGeom::RotateY3D(90*CLHEP::deg); 
-  TRANSFUNCTION beC = Pow(HepGeom::RotateZ3D(1.0),f+(Alfa/2))*HepGeom::TranslateX3D(3464)*HepGeom::TranslateZ3D(-3059.2)*HepGeom::RotateY3D(90*CLHEP::deg);
+  TRANSFUNCTION beA = Pow(GeoTrf::RotateZ3D(1.0),f-(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(3059.2)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg); 
+  TRANSFUNCTION beC = Pow(GeoTrf::RotateZ3D(1.0),f+(Alfa/2))*GeoTrf::TranslateX3D(3464)*GeoTrf::TranslateZ3D(-3059.2)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
   GeoSerialTransformer *betA = new GeoSerialTransformer(baseenvelopes,&beA, NCrates);
   GeoSerialTransformer *betC = new GeoSerialTransformer(baseenvelopes,&beC, NCrates);
   envelope->add(betA);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelPresamplerConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelPresamplerConstruction.cxx
index c35aac31d91176783bb7469e2a11de95814b4b73..8d31d8851e2c164165da862cbe4437edabeb0dfc 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelPresamplerConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoBarrel/src/BarrelPresamplerConstruction.cxx
@@ -41,15 +41,15 @@
 // For Functions:
 
 // For functions:
-#include "CLHEP/GenericFunctions/Abs.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/GenericFunctions/Sqrt.hh"
-#include "CLHEP/GenericFunctions/ATan.hh"
-#include "CLHEP/GenericFunctions/Rectangular.hh"
-#include "CLHEP/GenericFunctions/Mod.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/FixedConstant.hh"
+#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"
 
 // Constructor;
 LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo, int itb):
@@ -123,17 +123,17 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 
   const GeoMaterial *ConnecMat  = materialManager->getMaterial("LAr::ConnecMat");
   if (!ConnecMat) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::ConnecMat is not found.");
-  //  double rMinPresamplerMother   =1385*CLHEP::mm;
-  double rMinPresamplerMother   =1410*CLHEP::mm;
-  double rMaxPresamplerMother   =1447*CLHEP::mm-0.001*CLHEP::mm;
-  double presamplerMother_length=1549*CLHEP::mm;
-  double Phi_min=0.*CLHEP::deg;
-  double Phi_span=360.*CLHEP::deg;
+  //  double rMinPresamplerMother   =1385*GeoModelKernelUnits::mm;
+  double rMinPresamplerMother   =1410*GeoModelKernelUnits::mm;
+  double rMaxPresamplerMother   =1447*GeoModelKernelUnits::mm-0.001*GeoModelKernelUnits::mm;
+  double presamplerMother_length=1549*GeoModelKernelUnits::mm;
+  double Phi_min=0.*GeoModelKernelUnits::deg;
+  double Phi_span=360.*GeoModelKernelUnits::deg;
   int nbsectors=32;
 
   if (itb==1) {
-     Phi_min=-0.5*CLHEP::deg;
-     Phi_span=23.5*CLHEP::deg;
+     Phi_min=-0.5*GeoModelKernelUnits::deg;
+     Phi_span=23.5*GeoModelKernelUnits::deg;
      nbsectors=2;
   }
 
@@ -209,42 +209,42 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
   // Make a presampler sector:
   if(m_fullGeo){
     // ?    
-    double  epsil = 0.007*CLHEP::mm;
+    double  epsil = 0.007*GeoModelKernelUnits::mm;
 
     //  contraction factor 
-    double  cmm = (1-0.0026)*CLHEP::mm;
+    double  cmm = (1-0.0026)*GeoModelKernelUnits::mm;
  
     double  mod_leng[8];
     for(int ii=0; ii<8; ii++ ) mod_leng[ii]=mod[ii][0]*cmm+2*epsil;
 
     double  mod_heig[8];
-    double larheight = 13*CLHEP::mm;
+    double larheight = 13*GeoModelKernelUnits::mm;
 
-    double prep1_th = 1.*CLHEP::mm;                 // bottom prepreg layer 
-    double prep2_th = 4.5*CLHEP::mm;   
-    double smallLength = 275.6*CLHEP::mm;
+    double prep1_th = 1.*GeoModelKernelUnits::mm;                 // bottom prepreg layer 
+    double prep2_th = 4.5*GeoModelKernelUnits::mm;   
+    double smallLength = 275.6*GeoModelKernelUnits::mm;
     double bigLength = 277.5;
     double prep1_height = (smallLength/2+1.)*cmm;
-    double larheight2 = larheight*cos(-mod[1][3]*CLHEP::deg)*CLHEP::mm;
+    double larheight2 = larheight*cos(-mod[1][3]*GeoModelKernelUnits::deg)*GeoModelKernelUnits::mm;
     mod_heig[0]= (larheight+prep1_th+prep2_th)*cmm+4*epsil;
     mod_heig[1]= (larheight2+prep1_th+prep2_th)*cmm+5.*epsil;
     for(int  i=2; i<8; i++ ) mod_heig[i] = mod_heig[0];
 
-    double shell_th = 0.4*CLHEP::mm; 
-    double rail_th  = 8.6*CLHEP::mm;
-    double mech_clear = 0.5*CLHEP::mm;
+    double shell_th = 0.4*GeoModelKernelUnits::mm; 
+    double rail_th  = 8.6*GeoModelKernelUnits::mm;
+    double mech_clear = 0.5*GeoModelKernelUnits::mm;
 
 
     double  mb_length = 3100.3;
     double  sector_length =  mb_length*cmm +9.*epsil;
-    double  sector_height =  mod_heig[0]+(shell_th+rail_th)*cmm+mech_clear*CLHEP::mm+3*epsil; 
+    double  sector_height =  mod_heig[0]+(shell_th+rail_th)*cmm+mech_clear*GeoModelKernelUnits::mm+3*epsil; 
 
     unsigned int nsectors=32;
     double mod_xm = prep1_height+epsil;
-    double mod_xp = (bigLength/2+1.+prep2_th*tan((360./(2*nsectors))*CLHEP::deg))*cmm;
+    double mod_xp = (bigLength/2+1.+prep2_th*tan((360./(2*nsectors))*GeoModelKernelUnits::deg))*cmm;
     double sect_xm = mod_xm+epsil;
-    double sect_xp = sect_xm+sector_height*tan((360./(2*nsectors))*CLHEP::deg);	    
-    double rpres = 1426.*CLHEP::mm;
+    double sect_xp = sect_xm+sector_height*tan((360./(2*nsectors))*GeoModelKernelUnits::deg);	    
+    double rpres = 1426.*GeoModelKernelUnits::mm;
 
     double zpres = -presamplerMother_length+sector_length/2+epsil;
 
@@ -253,10 +253,10 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
     GeoLogVol   *logVol        = new GeoLogVol (basename+"::Sector",trd,LAr);
     GeoPhysVol  *sectorPhysVol = new GeoPhysVol(logVol);
 
-    Genfun::Variable I;
-    double dphiSector = (360.*CLHEP::deg)/nsectors;
-    Genfun::GENFUNCTION  f = dphiSector*I+0.5*dphiSector;
-    GeoXF::TRANSFUNCTION t = GeoXF::Pow(HepGeom::RotateZ3D(1.0),f)*HepGeom::TranslateX3D(rpres)*HepGeom::TranslateZ3D(zpres)*HepGeom::RotateZ3D(90*CLHEP::deg)*HepGeom::RotateX3D(90*CLHEP::deg);
+    GeoGenfun::Variable I;
+    double dphiSector = (360.*GeoModelKernelUnits::deg)/nsectors;
+    GeoGenfun::GENFUNCTION  f = dphiSector*I+0.5*dphiSector;
+    GeoXF::TRANSFUNCTION t = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(rpres)*GeoTrf::TranslateZ3D(zpres)*GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg);
     GeoSerialTransformer *st = new GeoSerialTransformer(sectorPhysVol,&t, nbsectors);
 
     m_psPhysicalPos->add(st);
@@ -271,7 +271,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
     // recompute length of module 0 and 1 to have avoid overshoorting of first cathode of module 1
     // into module 0  => reduce module 0 length by 0.5*lar_height*tan(tilt angle)
     //                    and increase module 1 length by same amount
-    double delta01 =  0.5*larheight*tan(-mod[1][3]*CLHEP::deg);   // delta01 is >0
+    double delta01 =  0.5*larheight*tan(-mod[1][3]*GeoModelKernelUnits::deg);   // delta01 is >0
     mod_leng[0]=mod_leng[0]-delta01; 
     mod_leng[1]=mod_leng[1]+delta01; 
     GeoPhysVol* pvModule[8];
@@ -291,7 +291,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 	GeoLogVol *logVol = new GeoLogVol(basename+"::Module",trd,LAr);
 	pvModule[m] = new GeoPhysVol(logVol);
 
-	GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(0.0, modY, modZ)); 
+	GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(0.0, modY, modZ)); 
 	sectorPhysVol->add(xf);
 	sectorPhysVol->add(pvModule[m]);
 
@@ -303,7 +303,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 
     double shell_leng = mod[0][0]+mod[1][0]+mod[2][0]+mod[3][0]+mod[4][0]+mod[5][0]+mod[6][0]+mod[7][0];
     double prot_y = (shell_leng/2)*cmm;
-    double glX = 0.*CLHEP::mm;
+    double glX = 0.*GeoModelKernelUnits::mm;
     double glY = -sector_length/2+prot_y+epsil;
 
     //-----------------------------A Protection Shell--------------------------//
@@ -314,7 +314,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 
       double glZ = -sector_height/2+(shell_th/2)*cmm+epsil;
       
-      GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(glX,glY, glZ));
+      GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(glX,glY, glZ));
       sectorPhysVol->add(xf);
       sectorPhysVol->add(physVol);
     }
@@ -345,7 +345,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
       GeoLogVol *logVol=new GeoLogVol(basename+"::MotherBoard",MB,MBMat);
       GeoPhysVol *physVol = new GeoPhysVol(logVol);
 
-      GeoTransform* xf = new GeoTransform(HepGeom::TranslateZ3D(mbZ));
+      GeoTransform* xf = new GeoTransform(GeoTrf::TranslateZ3D(mbZ));
       sectorPhysVol->add(xf);
       sectorPhysVol->add(physVol);
     }
@@ -360,7 +360,7 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
       GeoLogVol *logVol=new GeoLogVol(basename+"::ProtectionPlate",plate,FR4);
       GeoPhysVol *physVol = new GeoPhysVol(logVol);
 
-      GeoTransform* xf = new GeoTransform(HepGeom::Translate3D(glX,glY,mbZ+(mb_th/2+heightOut+prot_th/2)*cmm+2*epsil));
+      GeoTransform* xf = new GeoTransform(GeoTrf::Translate3D(glX,glY,mbZ+(mb_th/2+heightOut+prot_th/2)*cmm+2*epsil));
       sectorPhysVol->add(xf);
       sectorPhysVol->add(physVol);
     }
@@ -378,8 +378,8 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
       GeoPhysVol *physVol = new GeoPhysVol(logVol);
 
       double connZ = mbZ+(mb_th/2+heightOut/2)*cmm+epsil;
-      GeoTransform* xf1 = new GeoTransform(HepGeom::TranslateZ3D(connZ));
-      GeoTransform* xf2 = new GeoTransform(HepGeom::RotateX3D(-90*CLHEP::deg));
+      GeoTransform* xf1 = new GeoTransform(GeoTrf::TranslateZ3D(connZ));
+      GeoTransform* xf2 = new GeoTransform(GeoTrf::RotateX3D(-90*GeoModelKernelUnits::deg));
 
       sectorPhysVol->add(xf1);
       sectorPhysVol->add(xf2);
@@ -395,8 +395,8 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
       double railX = (bigLength/2+1-rail_pos-rail_width/2)*cmm+epsil;
       double railZ = modz[0]+mod_heig[0]/2+(rail_th/2)*cmm+epsil;
 
-      GeoTransform* xf1 = new GeoTransform(HepGeom::Translate3D(railX,glY,railZ));
-      GeoTransform* xf2 = new GeoTransform(HepGeom::Translate3D(-railX,glY,railZ));
+      GeoTransform* xf1 = new GeoTransform(GeoTrf::Translate3D(railX,glY,railZ));
+      GeoTransform* xf2 = new GeoTransform(GeoTrf::Translate3D(-railX,glY,railZ));
 
       sectorPhysVol->add(xf1);
       sectorPhysVol->add(physVol);
@@ -413,8 +413,8 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
     double anode_th = 0.330;
     double cathode_th = 0.270;
 
-    double heig_elec1 = (larheight/cos(-mod[0][3]*CLHEP::deg)-0.5*anode_th/cos(mod[0][3]*CLHEP::deg))*cmm;
-    double heig_elec3 = (larheight-0.5*cathode_th/cos(mod[1][3]*CLHEP::deg))*cmm;
+    double heig_elec1 = (larheight/cos(-mod[0][3]*GeoModelKernelUnits::deg)-0.5*anode_th/cos(mod[0][3]*GeoModelKernelUnits::deg))*cmm;
+    double heig_elec3 = (larheight-0.5*cathode_th/cos(mod[1][3]*GeoModelKernelUnits::deg))*cmm;
 
     GeoTrd* catho1 = new GeoTrd(smallLength/2*cmm,bigLength/2*cmm,cathode_th/2*cmm,cathode_th/2*cmm,heig_elec1/2*cmm);
     GeoLogVol* LV_catho1 = new GeoLogVol(basename+"::Cathode1",catho1,CathodeMat);
@@ -477,8 +477,8 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 
     for(int i=0; i<8; i++)
     {
-      GeoTransform* xfPrep1 = new GeoTransform(HepGeom::TranslateZ3D(prep1_pos[i]));
-      GeoTransform* xfPrep2 = new GeoTransform(HepGeom::TranslateZ3D(prep2_pos[i]));
+      GeoTransform* xfPrep1 = new GeoTransform(GeoTrf::TranslateZ3D(prep1_pos[i]));
+      GeoTransform* xfPrep2 = new GeoTransform(GeoTrf::TranslateZ3D(prep2_pos[i]));
 
       pvModule[i]->add(xfPrep1);
       pvModule[i]->add(PV_Prep1[i]);
@@ -488,12 +488,12 @@ LArGeo::BarrelPresamplerConstruction ::BarrelPresamplerConstruction(bool fullGeo
 
       // Parameterizations for electrodes
 
-      Genfun::Variable I;
-      Genfun::GENFUNCTION cathoGF = YStartC[i]+I*mod[i][4]*cmm;
-      Genfun::GENFUNCTION anoGF = YStartA[i]+I*mod[i][4]*cmm;
+      GeoGenfun::Variable I;
+      GeoGenfun::GENFUNCTION cathoGF = YStartC[i]+I*mod[i][4]*cmm;
+      GeoGenfun::GENFUNCTION anoGF = YStartA[i]+I*mod[i][4]*cmm;
 
-      GeoXF::TRANSFUNCTION cathoTF = GeoXF::Pow(HepGeom::TranslateY3D(1.),cathoGF)*HepGeom::TranslateZ3D(elec_trans)*HepGeom::RotateX3D(-mod[i][3]*CLHEP::deg);
-      GeoXF::TRANSFUNCTION anoTF = GeoXF::Pow(HepGeom::TranslateY3D(1.),anoGF)*HepGeom::TranslateZ3D(elec_trans)*HepGeom::RotateX3D(-mod[i][3]*CLHEP::deg);
+      GeoXF::TRANSFUNCTION cathoTF = GeoXF::Pow(GeoTrf::TranslateY3D(1.),cathoGF)*GeoTrf::TranslateZ3D(elec_trans)*GeoTrf::RotateX3D(-mod[i][3]*GeoModelKernelUnits::deg);
+      GeoXF::TRANSFUNCTION anoTF = GeoXF::Pow(GeoTrf::TranslateY3D(1.),anoGF)*GeoTrf::TranslateZ3D(elec_trans)*GeoTrf::RotateX3D(-mod[i][3]*GeoModelKernelUnits::deg);
 
 
       GeoSerialTransformer *cathoST,*anoST;
diff --git a/LArCalorimeter/LArGeoModel/LArGeoCode/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoCode/CMakeLists.txt
index 92304b5376cc9574b170867f53e9f0e5a7e11a1b..04fc3d7f526412de9944941b2519829ceb26ed71 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoCode/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoCode/CMakeLists.txt
@@ -10,20 +10,18 @@ atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoCode
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoCode
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    LINK_LIBRARIES StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GaudiKernel )
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} GaudiKernel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoCode/src/LArMaterialManager.cxx b/LArCalorimeter/LArGeoModel/LArGeoCode/src/LArMaterialManager.cxx
index 7dd801739093ae4789f8bac193e5d5f052265a0f..967131032979dab160b98a89da730fff6f1672d1 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoCode/src/LArMaterialManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoCode/src/LArMaterialManager.cxx
@@ -5,9 +5,9 @@
 #include "LArGeoCode/LArMaterialManager.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoElement.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGate.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "CLHEP/Units/PhysicalConstants.h"
 #include "GaudiKernel/Bootstrap.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -49,7 +49,7 @@ void LArMaterialManager::buildMaterials()
   if (!Copper) throw std::runtime_error("Error in LArMaterialManager, std::Copper is not found.");
 #ifdef DEBUGGEO
   msg << "Copper radiation length " << Copper->getRadLength() << " "
-            << Copper->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+            << Copper->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
 #endif
 
 
@@ -60,7 +60,7 @@ void LArMaterialManager::buildMaterials()
   if (!Lead) throw std::runtime_error("Error in LArMaterialManager, std::Lead is not found.");
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "Lead radiation length " << Lead->getRadLength() << " "
-             << Lead->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+             << Lead->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
 #endif
 
 
@@ -69,7 +69,7 @@ void LArMaterialManager::buildMaterials()
 
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "LAr radiation length " << LAr->getRadLength() << " "
-            << LAr->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+            << LAr->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
 #endif
 
   const GeoMaterial *Air  = m_storedManager->getMaterial("std::Air");
@@ -79,7 +79,7 @@ void LArMaterialManager::buildMaterials()
   if (!Kapton) throw std::runtime_error("Error in LArMaterialManager, std::Kapton is not found.");
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "Kapton radiation length " << Kapton->getRadLength() <<  " "
-            << Kapton->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+            << Kapton->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
   for (size_t i = 0; i< Kapton->getNumElements();i++) {
     msg << MSG::INFO << int (Kapton->getFraction(i)*100) << "% \t"  << Kapton->getElement(i)->getName() << endmsg;
     }
@@ -91,7 +91,7 @@ void LArMaterialManager::buildMaterials()
   if (!Glue) throw std::runtime_error("Error in LArMaterialManager, LAr::Glue is not found.");
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "Glue   radiation length " << Glue->getRadLength() << " "
-            << Glue->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+            << Glue->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
   for (size_t i = 0; i< Glue->getNumElements();i++) {
     msg << MSG::INFO << int (Glue->getFraction(i)*100) << "% \t"  << Glue->getElement(i)->getName() << endmsg;
     }
@@ -102,7 +102,7 @@ void LArMaterialManager::buildMaterials()
   if (!G10) throw std::runtime_error("Error in LArMaterialManager, LAr::G10 is not found.");
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "G10    radiation length " << G10->getRadLength() << " "
-            << G10->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+            << G10->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
   for (size_t i = 0; i< G10->getNumElements();i++) {
     msg << MSG::INFO << int (G10->getFraction(i)*100) << "% \t"  << G10->getElement(i)->getName() << endmsg;
     }
@@ -128,9 +128,9 @@ void LArMaterialManager::buildMaterials()
     double contract=dB.getDouble("ColdContraction","ColdContraction-00", "ABSORBERCONTRACTION"); // LArEMBAbsorberContraction
 
     // first thin absorbers
-    Tggl=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGGL")*CLHEP::cm*contract; // LArEMBThinAbsGlue
-    Tgfe=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGFE")*CLHEP::cm*contract; // LArEMBThinAbsIron
-    Tgpb=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGPB")*CLHEP::cm*contract; // LArEMBThinAbsLead
+    Tggl=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGGL")*GeoModelKernelUnits::cm*contract; // LArEMBThinAbsGlue
+    Tgfe=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGFE")*GeoModelKernelUnits::cm*contract; // LArEMBThinAbsIron
+    Tgpb=dB.getDouble("BarrelGeometry","BarrelGeometry-00","TGPB")*GeoModelKernelUnits::cm*contract; // LArEMBThinAbsLead
     Totalthick = Tggl+Tgfe+Tgpb;
     Totalmass = (Tgpb*Lead->getDensity()+Tgfe*Iron->getDensity()+Tggl*Glue->getDensity());
     //***GU below are the fraction per mass
@@ -143,7 +143,7 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"  Fraction pb,fe,gl: "<<Fracpb<<","<<Fracfe<<"," <<Fracgl<< endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness: "<<Totalmass<<" ," <<Totalthick<< endmsg;
     msg << MSG::DEBUG<<" Contraction " << contract << endmsg;
-    msg << MSG::DEBUG <<"  Thinabs Density =  "<< density*(CLHEP::cm3/CLHEP::g) << endmsg;
+    msg << MSG::DEBUG <<"  Thinabs Density =  "<< density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) << endmsg;
 
     GeoMaterial* Thin_abs = new GeoMaterial("Thinabs",density);
     Thin_abs->add(Lead,Fracpb);
@@ -156,9 +156,9 @@ void LArMaterialManager::buildMaterials()
 #endif
 
     // then thick absorbers
-    Thgl=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THGL")*CLHEP::cm*contract; // LArEMBThickAbsGlue
-    Thfe=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THFE")*CLHEP::cm*contract; // LArEMBThickAbsIron
-    Thpb=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THPB")*CLHEP::cm*contract; // LArEMBThickAbsLead
+    Thgl=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THGL")*GeoModelKernelUnits::cm*contract; // LArEMBThickAbsGlue
+    Thfe=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THFE")*GeoModelKernelUnits::cm*contract; // LArEMBThickAbsIron
+    Thpb=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THPB")*GeoModelKernelUnits::cm*contract; // LArEMBThickAbsLead
 
     Totalthick = Thgl+Thfe+Thpb;
     Totalmass = (Thpb*Lead->getDensity()+Thfe*Iron->getDensity()+Thgl*Glue->getDensity());
@@ -171,7 +171,7 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"---- THICK absorber characteristics: ----" << endmsg;
     msg << MSG::DEBUG <<"  Fraction pb,fe,gl: "<<Fracpb<<","<<Fracfe<<","<<Fracgl << endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness: "<<Totalmass<<" ,"<<Totalthick << endmsg;
-    msg << MSG::DEBUG <<"  Thickabs Density =  " << density*(CLHEP::cm3/CLHEP::g) << endmsg;
+    msg << MSG::DEBUG <<"  Thickabs Density =  " << density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) << endmsg;
 
     GeoMaterial* Thick_abs = new GeoMaterial("Thickabs",density);
     Thick_abs->add(Lead,Fracpb);
@@ -183,8 +183,8 @@ void LArMaterialManager::buildMaterials()
 #endif
 
     // electrode =mixture Kapton+Cu
-    Thcu=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THCU")*CLHEP::cm; // LArEMBThickElecCopper
-    Thfg=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THFG")*CLHEP::cm; // LArEMBThickElecKapton
+    Thcu=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THCU")*GeoModelKernelUnits::cm; // LArEMBThickElecCopper
+    Thfg=dB.getDouble("BarrelGeometry","BarrelGeometry-00","THFG")*GeoModelKernelUnits::cm; // LArEMBThickElecKapton
     Totalthicke = Thcu+Thfg;
     Totalmasse = (Thcu*Copper->getDensity()+Thfg*Kapton->getDensity());
     //**GU below are the fractions per mass
@@ -198,7 +198,7 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"---- Electrode characteristics: ----" << endmsg;
     msg << MSG::DEBUG <<"  Fraction Cu, Kapton: " << FracCu << ","<< FracKap << endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness:"<<Totalmasse<<" ,"<<Totalthicke<< endmsg;
-    msg << MSG::DEBUG <<"  Electrode Density =  " << density*(CLHEP::cm3/CLHEP::g) << endmsg;
+    msg << MSG::DEBUG <<"  Electrode Density =  " << density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) << endmsg;
 
     GeoMaterial* Kapton_Cu = new GeoMaterial("KaptonC",density);
     Kapton_Cu->add(Copper,FracCu);
@@ -209,7 +209,7 @@ void LArMaterialManager::buildMaterials()
 #endif
 
     //  material for Cables/electronics (mixture of Kapton and copper)
-    //  density = 2.440*CLHEP::g/CLHEP::cm3;
+    //  density = 2.440*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
     //**GU get fractions per mass
     double frmassCu = dB.getDouble("BarrelAccordionCables","BarrelAccordionCables-00","PERCU");  // LArEMBmasspercentCu
     double frmassKap= dB.getDouble("BarrelAccordionCables","BarrelAccordionCables-00","PERKAP"); // LArEMBmasspercentKap
@@ -219,8 +219,8 @@ void LArMaterialManager::buildMaterials()
              /(1.+frmassKapOverCu*Copper->getDensity()/Kapton->getDensity());
     GeoMaterial* Cable_elect = new GeoMaterial("Cables",density);
     double fractionmass;
-    Cable_elect->add(Copper, fractionmass=frmassCu*CLHEP::perCent);
-    Cable_elect->add(Kapton, fractionmass=frmassKap*CLHEP::perCent);
+    Cable_elect->add(Copper, fractionmass=frmassCu*GeoModelKernelUnits::perCent);
+    Cable_elect->add(Kapton, fractionmass=frmassKap*GeoModelKernelUnits::perCent);
     m_storedManager->addMaterial("LAr", Cable_elect);
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "Cable radiation length " << Cable_elect->getRadLength() << endmsg;
@@ -228,8 +228,8 @@ void LArMaterialManager::buildMaterials()
 
     // material for motherboard
     // Mother_board is defined as a mixture of epox_G10 (C8 H14 O4) and Copper
-    ThMBcu  = dB.getDouble("BarrelMotherboards","BarrelMotherboards-00","THICU")*CLHEP::cm;  // LArEMBCuThickness
-    ThMBG10 = dB.getDouble("BarrelMotherboards","BarrelMotherboards-00","THIG10")*CLHEP::cm; // LArEMBG10Thickness
+    ThMBcu  = dB.getDouble("BarrelMotherboards","BarrelMotherboards-00","THICU")*GeoModelKernelUnits::cm;  // LArEMBCuThickness
+    ThMBG10 = dB.getDouble("BarrelMotherboards","BarrelMotherboards-00","THIG10")*GeoModelKernelUnits::cm; // LArEMBG10Thickness
     double TotalthickMBe = ThMBcu+ThMBG10;
     double TotalmassMBe = (ThMBcu*Copper->getDensity()+ThMBG10*G10->getDensity());
     double FracMBCu = (ThMBcu*Copper->getDensity())/TotalmassMBe;
@@ -240,7 +240,7 @@ void LArMaterialManager::buildMaterials()
 	             << FracMBG10 << endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness:"
 	             << TotalmassMBe <<" ," <<TotalthickMBe<< endmsg;
-    msg << MSG::DEBUG <<"  M_board Density =  "<<density*(CLHEP::cm3/CLHEP::g) << endmsg;
+    msg << MSG::DEBUG <<"  M_board Density =  "<<density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) << endmsg;
     GeoMaterial*  Moth_elect = new GeoMaterial("MBoards",density);
     // ****GU:   use fraction per masses of G10 and Cu
     Moth_elect->add(G10,FracMBG10);
@@ -255,7 +255,7 @@ void LArMaterialManager::buildMaterials()
     const GeoElement* Si = m_storedManager->getElement("Silicon");
     const GeoElement *O = m_storedManager->getElement("Oxygen");
 
-    density = dB.getDouble("BarrelMotherboards", "BarrelMotherboards-00", "DG10")*(CLHEP::g/CLHEP::cm3);   //LArEMBEpoxyVolumicMass
+    density = dB.getDouble("BarrelMotherboards", "BarrelMotherboards-00", "DG10")*(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);   //LArEMBEpoxyVolumicMass
     GeoMaterial* SiO2 = new GeoMaterial("SiO2",density);
     double fractionSi=28.09/(28.09+2*16.0);
     SiO2->add(Si,fractionSi);
@@ -263,21 +263,21 @@ void LArMaterialManager::buildMaterials()
     SiO2->add(O,fractionO);
     SiO2->lock();
 // Gten for the bars of the calorimeter= mixture of regular G10 and SiO2
-    density=1.72*CLHEP::g/CLHEP::cm3;    // should be replaced by number from database
+    density=1.72*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;    // should be replaced by number from database
     GeoMaterial* Gten_bar = new GeoMaterial("G10_bar",density);
     Gten_bar->add(G10,0.38);    // should be replaced by number from database
     Gten_bar->add(SiO2,0.62);   // should be replaced by number from database
     m_storedManager->addMaterial("LAr",Gten_bar);
 #ifdef DEBUGGEO
   msg << MSG::INFO<< "fracionSi,fracionO2 " << fractionSi << " " << fractionO << endmsg;
-  msg << MSG::INFO<< "SiO2 density " << SiO2->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+  msg << MSG::INFO<< "SiO2 density " << SiO2->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
   msg << MSG::INFO<< "SiO2   radiation length " << SiO2->getRadLength() << endmsg;
   msg << MSG::INFO<< "G10bar radiation length " << Gten_bar->getRadLength() << endmsg;
 #endif
 
 // material for the effective M_PIn+summing board effect
-    double ThSBCu = 0.28*CLHEP::mm;      // should be replaced by number from database
-    double ThSBAr = 9.72*CLHEP::mm;      // should be replaced by number from database
+    double ThSBCu = 0.28*GeoModelKernelUnits::mm;      // should be replaced by number from database
+    double ThSBAr = 9.72*GeoModelKernelUnits::mm;      // should be replaced by number from database
     double TotalThickSB = ThSBCu+ThSBAr;
     double dcu = Copper->getDensity();
     double dar = LAr->getDensity();
@@ -312,12 +312,12 @@ void LArMaterialManager::buildMaterials()
 
     const GeoElement *H = m_storedManager->getElement( "Hydrogen" );
 
-    GeoMaterial *Vacuum = new GeoMaterial( "Vacuum", CLHEP::universe_mean_density );
+    GeoMaterial *Vacuum = new GeoMaterial( "Vacuum", GeoModelKernelUnits::universe_mean_density );
     Vacuum->add( H, 1. );
     m_storedManager->addMaterial("LAr", Vacuum );
 #ifdef DEBUGGEO
     msg << MSG::INFO<< "Vacuum radiation length " << Vacuum->getRadLength() << " "
-                    << Vacuum->getDensity()/(CLHEP::g/CLHEP::cm3) << endmsg;
+                    << Vacuum->getDensity()/(GeoModelKernelUnits::g/GeoModelKernelUnits::cm3) << endmsg;
 #endif
 
 
@@ -335,13 +335,13 @@ void LArMaterialManager::buildMaterials()
     // EMEC thin absorbers
     //
 
-/*  Tggl = 0.30 * CLHEP::mm;
-    Tgfe = 0.40 * CLHEP::mm;
-    Tgpb = 1.70 * CLHEP::mm; */
+/*  Tggl = 0.30 * GeoModelKernelUnits::mm;
+    Tgfe = 0.40 * GeoModelKernelUnits::mm;
+    Tgpb = 1.70 * GeoModelKernelUnits::mm; */
 
-    Tggl = 0.20 * CLHEP::mm;
-    Tgfe = 0.40 * CLHEP::mm;
-    Tgpb = 1.69 * CLHEP::mm;
+    Tggl = 0.20 * GeoModelKernelUnits::mm;
+    Tgfe = 0.40 * GeoModelKernelUnits::mm;
+    Tgpb = 1.69 * GeoModelKernelUnits::mm;
 
     Totalthick = Tggl+Tgfe+Tgpb;
     Totalmass = (Tgpb*Lead->getDensity()+Tgfe*Iron->getDensity()+Tggl*Glue->getDensity());
@@ -354,13 +354,13 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"  Thickness pb,fe,gl,[mm]="<<Tgpb<<" "<<Tgfe<<" "<<Tggl << endmsg;
     msg << MSG::DEBUG <<"  Fraction  pb,fe,gl     ="<<Fracpb<<","<<Fracfe<<"," <<Fracgl << endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness  ="<<Totalmass<<" ," <<Totalthick << endmsg;
-    msg << MSG::DEBUG <<"  Thinabs Density        ="<< density*(CLHEP::cm3/CLHEP::g) << endmsg;
+    msg << MSG::DEBUG <<"  Thinabs Density        ="<< density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) << endmsg;
 
     msg << MSG::DEBUG << "---- EMEC THIN absorber characteristics: ----" << endmsg;
     msg << MSG::DEBUG <<"  Thickness pb,fe,gl,[mm]="<<Tgpb<<" "<<Tgfe<<" "<<Tggl  << endmsg;
     msg << MSG::DEBUG <<"  Fraction  pb,fe,gl     ="<<Fracpb<<","<<Fracfe<<"," <<Fracgl  << endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness  ="<<Totalmass<<" ," <<Totalthick  << endmsg;
-    msg << MSG::DEBUG <<"  Thinabs Density        ="<< density*(CLHEP::cm3/CLHEP::g)  << endmsg;
+    msg << MSG::DEBUG <<"  Thinabs Density        ="<< density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g)  << endmsg;
 
 
     GeoMaterial* Thin_abs = new GeoMaterial("EMEC_Thinabs",density);
@@ -377,13 +377,13 @@ void LArMaterialManager::buildMaterials()
     // EMEC thick absorbers
     //
 
-/*    Thgl = 0.30 * CLHEP::mm;
-    Thfe = 0.40 * CLHEP::mm;
-    Thpb = 2.20 * CLHEP::mm; */
+/*    Thgl = 0.30 * GeoModelKernelUnits::mm;
+    Thfe = 0.40 * GeoModelKernelUnits::mm;
+    Thpb = 2.20 * GeoModelKernelUnits::mm; */
 
-    Thgl = 0.20 * CLHEP::mm;
-    Thfe = 0.40 * CLHEP::mm;
-    Thpb = 2.20 * CLHEP::mm;
+    Thgl = 0.20 * GeoModelKernelUnits::mm;
+    Thfe = 0.40 * GeoModelKernelUnits::mm;
+    Thpb = 2.20 * GeoModelKernelUnits::mm;
 
     Totalthick = Thgl+Thfe+Thpb;
     Totalmass = (Thpb*Lead->getDensity()+Thfe*Iron->getDensity()+Thgl*Glue->getDensity());
@@ -397,7 +397,7 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"  Thickness pb,fe,gl[mm]="<<Thpb<<" "<<Thfe<<" "<<Thgl<<endmsg;
     msg << MSG::DEBUG <<"  Fraction  pb,fe,gl:    "<<Fracpb<<","<<Fracfe<<","<<Fracgl<<endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness: "<<Totalmass<<" ,"<<Totalthick<<endmsg;
-    msg << MSG::DEBUG <<"  Thickabs Density =     "<<density*(CLHEP::cm3/CLHEP::g) <<endmsg;
+    msg << MSG::DEBUG <<"  Thickabs Density =     "<<density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) <<endmsg;
 
     GeoMaterial* Thick_abs = new GeoMaterial("EMEC_Thickabs",density);
     Thick_abs->add(Lead,Fracpb);
@@ -411,8 +411,8 @@ void LArMaterialManager::buildMaterials()
 	//
 	// EMEC shell = iron + glue, identical for inner and outer absorbers
 	//
-    Thgl = 0.20 * CLHEP::mm;
-    Thfe = 0.40 * CLHEP::mm;
+    Thgl = 0.20 * GeoModelKernelUnits::mm;
+    Thfe = 0.40 * GeoModelKernelUnits::mm;
 
     Totalthick = Thgl+Thfe;
     Totalmass = (Thfe*Iron->getDensity()+Thgl*Glue->getDensity());
@@ -425,7 +425,7 @@ void LArMaterialManager::buildMaterials()
     msg << MSG::DEBUG <<"  Thickness fe,gl[mm]="<<Thfe<<" "<<Thgl<<endmsg;
     msg << MSG::DEBUG <<"  Fraction  fe,gl:    "<<Fracfe<<","<<Fracgl<<endmsg;
     msg << MSG::DEBUG <<"  Total mass, Thickness: "<<Totalmass<<" ,"<<Totalthick<<endmsg;
-    msg << MSG::DEBUG <<"  Thickabs Density =     "<<density*(CLHEP::cm3/CLHEP::g) <<endmsg;
+    msg << MSG::DEBUG <<"  Thickabs Density =     "<<density*(GeoModelKernelUnits::cm3/GeoModelKernelUnits::g) <<endmsg;
 
     GeoMaterial* EMEC_shell = new GeoMaterial("EMEC_shell",density);
     EMEC_shell->add(Iron,Fracfe);
@@ -446,13 +446,13 @@ void LArMaterialManager::buildMaterials()
 
     //!! Check whether G10 or G10_bar is to be used!!!!
 
-/*    Tggl = 0.30 * CLHEP::mm;
-    Tgfe = 0.40 * CLHEP::mm;
-    TgG10 =1.70 * CLHEP::mm;*/
+/*    Tggl = 0.30 * GeoModelKernelUnits::mm;
+    Tgfe = 0.40 * GeoModelKernelUnits::mm;
+    TgG10 =1.70 * GeoModelKernelUnits::mm;*/
 
-    Tggl = 0.20 * CLHEP::mm;
-    Tgfe = 0.40 * CLHEP::mm;
-    TgG10 =1.69 * CLHEP::mm;
+    Tggl = 0.20 * GeoModelKernelUnits::mm;
+    Tgfe = 0.40 * GeoModelKernelUnits::mm;
+    TgG10 =1.69 * GeoModelKernelUnits::mm;
 
     Totalthick = Tggl+Tgfe+TgG10;
     Totalmass = (TgG10*G10->getDensity()+Tgfe*Iron->getDensity()+Tggl*Glue->getDensity());
@@ -477,13 +477,13 @@ void LArMaterialManager::buildMaterials()
     // EMEC Inner Wheel barrette
     //
 
-/*    Thgl = 0.30 * CLHEP::mm;
-    Thfe = 0.40 * CLHEP::mm;
-    ThG10 =2.20 * CLHEP::mm;*/
+/*    Thgl = 0.30 * GeoModelKernelUnits::mm;
+    Thfe = 0.40 * GeoModelKernelUnits::mm;
+    ThG10 =2.20 * GeoModelKernelUnits::mm;*/
 
-    Thgl = 0.20 * CLHEP::mm;
-    Thfe = 0.40 * CLHEP::mm;
-    ThG10 =2.20 * CLHEP::mm;
+    Thgl = 0.20 * GeoModelKernelUnits::mm;
+    Thfe = 0.40 * GeoModelKernelUnits::mm;
+    ThG10 =2.20 * GeoModelKernelUnits::mm;
 
     Totalthick = Thgl+Thfe+ThG10;
     Totalmass = (ThG10*G10->getDensity()+Thfe*Iron->getDensity()+Thgl*Glue->getDensity());
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoEndcap/CMakeLists.txt
index 9821db9d1d78aeac5e515b3642a2cc7d7050d669..c12d3f7581fb9ce7d5d590e0fc2920449eeedee3 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( LArGeoEndcap )
 atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           LArCalorimeter/LArGeoModel/LArGeoFcal
                           LArCalorimeter/LArGeoModel/LArGeoHec
                           PRIVATE
@@ -24,15 +23,15 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoEndcap
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoEndcap
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel LArGeoFcal LArGeoHec StoreGateLib SGtests CaloDetDescrLib
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} LArGeoFcal LArGeoHec StoreGateLib SGtests CaloDetDescrLib
                    PRIVATE_LINK_LIBRARIES CaloIdentifier GeoModelUtilities GeoSpecialShapes GaudiKernel LArGeoCode LArGeoMiniFcal )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EMECConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EMECConstruction.h
index 941a7ff1219993b3a578c26bbecd0228deaac7f5..4be8fc0f8a657fb2042635811dcce3e6e0363795 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EMECConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EMECConstruction.h
@@ -10,8 +10,8 @@
  * $Id: EMECConstruction.h,v 1.9 2009-02-10 16:50:53 tsulaia Exp $
  */
 
-#ifndef __EMECConstruction_H__
-#define __EMECConstruction_H__
+#ifndef LARGEOENDCAP_EMECCONSTRUCTION_H
+#define LARGEOENDCAP_EMECCONSTRUCTION_H
 
 class GeoFullPhysVol;
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerConstruction.h
index 4bc37b172960fb201b220da4f5d0ea2856978ffd..f999cff27ccc95e44a426b33d97ccc6138ed73bd 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerConstruction.h
@@ -14,7 +14,7 @@
 #define LARGEOENDCAP_ENDCAPPRESAMPLERCONSTRUCTION_H
 
 #include "GeoModelKernel/GeoFullPhysVol.h"
-#include "CLHEP/GenericFunctions/FunctionNoop.hh"
+#include "GeoGenericFunctions/FunctionNoop.h"
 
 // Forward declarations
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerGeometryHelper.h b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerGeometryHelper.h
index 8fec1ae90fb0437003bd286acb5145a9ec9e0841..e7da0ad2f4dafd86ae435d54e7dcc071452cb8b4 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerGeometryHelper.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/LArGeoEndcap/EndcapPresamplerGeometryHelper.h
@@ -9,8 +9,8 @@
 // It provides any separate calculations or constants for the endcap
 // presampler geometry.
 
-#ifndef __EndcapPresamplerGeometryHelper_H__
-#define __EndcapPresamplerGeometryHelper_H__
+#ifndef LARGEOENDCAP_ENDCAPPRESAMPLERGEOMETRYHELPER_H
+#define LARGEOENDCAP_ENDCAPPRESAMPLERGEOMETRYHELPER_H
 
 namespace LArGeo {
 
@@ -24,7 +24,7 @@ namespace LArGeo {
     // Accessor for pointer to the singleton.
     static EndcapPresamplerGeometryHelper* GetInstance();
 
-    // "zShift" is the z-distance (CLHEP::cm) that the EM endcap is shifted
+    // "zShift" is the z-distance (GeoModelKernelUnits::cm) that the EM endcap is shifted
     // (due to cabling, etc.)
     float zShift() const { return m_zShift; }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECConstruction.cxx
index 0c866b27039aea4712ddecebb0c097797943c5c2..3f4ea5cacf40d53131a833284f5ad41712912331 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECConstruction.cxx
@@ -60,6 +60,8 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -68,7 +70,6 @@
 #include "GaudiKernel/IService.h"
 #include "GaudiKernel/ISvcLocator.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
 
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBRecord.h"
@@ -218,19 +219,19 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
   double phiPosition, phiSize;
 
   if(m_isTB) {
-    phiPosition = CLHEP::halfpi*CLHEP::rad;
-    phiSize = M_PI*CLHEP::rad / 8. + 0.065*CLHEP::rad; // half-angle of inner part of module
+    phiPosition = GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad;
+    phiSize = M_PI*GeoModelKernelUnits::rad / 8. + 0.065*GeoModelKernelUnits::rad; // half-angle of inner part of module
   }
   else {
-    phiPosition = M_PI*CLHEP::rad;
-    phiSize = M_PI*CLHEP::rad; // half-angle of a full wheel
+    phiPosition = M_PI*GeoModelKernelUnits::rad;
+    phiSize = M_PI*GeoModelKernelUnits::rad; // half-angle of a full wheel
   }
 
   // Define the mother volume for the emec.  Everything
   // else in the emec (wheels,structure, etc.) should be
   // placed inside here.
 
-   //double emecMotherZplan[] = {3641.*CLHEP::mm,4273.*CLHEP::mm};           //warm
+   //double emecMotherZplan[] = {3641.*GeoModelKernelUnits::mm,4273.*GeoModelKernelUnits::mm};           //warm
 
   // 21-Jul-2005, C.S. : above line valid in warm, below is in cold.
   // The latter one should apply, othervise SupportMotherVolumes cross
@@ -245,17 +246,17 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 	  cryoPcons = pAccessSvc->getRecordsetPtr("CryoPcons", "CryoPcons-EMEC-00");
 	}
 
-  //double emecMotherZplan[] = {3639.5*CLHEP::mm,3639.5*CLHEP::mm+630.*CLHEP::mm};    //cold (J.T)
-  //                                  // Zplane[0]=endg_z0*CLHEP::cm-50*CLHEP::mm
-  //                                  // Zplane[1]=Zplane[0]+endg_dzende*CLHEP::cm-2.CLHEP::mm
-  //double emecMotherRin[]   = { 279.*CLHEP::mm, 324*CLHEP::mm};	//{  302.*CLHEP::mm,  302.*CLHEP::mm };
-  //double emecMotherRout[]  = {(2077.-7)*CLHEP::mm,(2077.-7)*CLHEP::mm};  	// -7 for cold
+  //double emecMotherZplan[] = {3639.5*GeoModelKernelUnits::mm,3639.5*GeoModelKernelUnits::mm+630.*GeoModelKernelUnits::mm};    //cold (J.T)
+  //                                  // Zplane[0]=endg_z0*GeoModelKernelUnits::cm-50*GeoModelKernelUnits::mm
+  //                                  // Zplane[1]=Zplane[0]+endg_dzende*GeoModelKernelUnits::cm-2.GeoModelKernelUnits::mm
+  //double emecMotherRin[]   = { 279.*GeoModelKernelUnits::mm, 324*GeoModelKernelUnits::mm};	//{  302.*GeoModelKernelUnits::mm,  302.*GeoModelKernelUnits::mm };
+  //double emecMotherRout[]  = {(2077.-7)*GeoModelKernelUnits::mm,(2077.-7)*GeoModelKernelUnits::mm};  	// -7 for cold
   //int lastPlaneEmec = (sizeof(emecMotherZplan) / sizeof(double));
 
 	std::string emecMotherName = baseName + "::Mother"; //+ extension;
 
 	GeoTransform *refSystemTransform = 0;
-	double zTrans = 0.*CLHEP::mm, zMSTrans = 0.*CLHEP::mm;
+	double zTrans = 0.*GeoModelKernelUnits::mm, zMSTrans = 0.*GeoModelKernelUnits::mm;
 
 	GeoPcon* emecMotherShape = new GeoPcon(phiPosition - phiSize, 2.*phiSize);  //start phi,total phi
 	for(unsigned int i = 0; i < cryoPcons->size(); ++ i){
@@ -263,13 +264,13 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 		if(currentRecord->getString("PCON") == "EMEC::Mother"){
 			if(!refSystemTransform){
 				if(m_isTB){
-					zTrans = -3700.5*CLHEP::mm;
+					zTrans = -3700.5*GeoModelKernelUnits::mm;
 					zMSTrans = zTrans;
 				} else {
-					zTrans = currentRecord->getDouble("ZPLANE") - 3639.5*CLHEP::mm;
-					zMSTrans = 0.*CLHEP::mm;
+					zTrans = currentRecord->getDouble("ZPLANE") - 3639.5*GeoModelKernelUnits::mm;
+					zMSTrans = 0.*GeoModelKernelUnits::mm;
 				}
-				refSystemTransform =  new GeoTransform(HepGeom::TranslateZ3D(zTrans));
+				refSystemTransform =  new GeoTransform(GeoTrf::TranslateZ3D(zTrans));
 			}
 			emecMotherShape->addPlane(currentRecord->getDouble("ZPLANE") + zMSTrans,
 			                          currentRecord->getDouble("RMIN"),
@@ -282,8 +283,8 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 	if(DB_EmecGeometry->size() == 0){
 		DB_EmecGeometry = pAccessSvc->getRecordsetPtr("EmecGeometry", "EmecGeometry-00");
 	}
-	double zWheelRefPoint = (*DB_EmecGeometry)[0]->getDouble("Z0")*CLHEP::cm;
-	double LArTotalThickness = (*DB_EmecGeometry)[0]->getDouble("ETOT") *CLHEP::cm;
+	double zWheelRefPoint = (*DB_EmecGeometry)[0]->getDouble("Z0")*GeoModelKernelUnits::cm;
+	double LArTotalThickness = (*DB_EmecGeometry)[0]->getDouble("ETOT") *GeoModelKernelUnits::cm;
 
   const GeoLogVol* emecMotherLogical =
     new GeoLogVol(emecMotherName, emecMotherShape, LAr);
@@ -310,7 +311,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 	double zWheelFrontFace = zWheelRefPoint + lwc->GetdWRPtoFrontFace();
 
     GeoPcon* innerShape= new GeoPcon(phiPosition - phiSize, 2.*phiSize);
-    innerShape->addPlane(   0.*CLHEP::mm, rMinInner[0], rMaxInner[0]);
+    innerShape->addPlane(   0.*GeoModelKernelUnits::mm, rMinInner[0], rMaxInner[0]);
     innerShape->addPlane(zBack   , rMinInner[1], rMaxInner[1]);
 
     GeoLogVol*  innerLogical  = new GeoLogVol (innerName,innerShape, LAr);
@@ -318,7 +319,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 
     emecMotherPhysical->add(new GeoIdentifierTag(1));
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zWheelFrontFace)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zWheelFrontFace)));
     emecMotherPhysical->add(fullPV);
 
     StoredPhysVol *sPhysVol = new StoredPhysVol(fullPV);
@@ -337,10 +338,10 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
     GeoPhysVol* innerAbsorberPhysical  = new GeoPhysVol(innerAbsorberLogical);
     GeoPhysVol* innerElectrodePhysical = new GeoPhysVol(innerElectrodeLogical);
     fullPV->add(new GeoIdentifierTag(1));
-    fullPV->add(new GeoTransform(HepGeom::Transform3D()));
+    fullPV->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
     fullPV->add(innerAbsorberPhysical);
     fullPV->add(new GeoIdentifierTag(1));
-    fullPV->add(new GeoTransform(HepGeom::Transform3D()));
+    fullPV->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
     fullPV->add(innerElectrodePhysical);
 
 	if(mlabs > 0){
@@ -352,7 +353,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 				new GeoLogVol(IGWname, innerGlueShape, Glue);
 			innerGluePhysical = new GeoPhysVol(innerGlueLogical);
 			innerAbsorberPhysical->add(new GeoIdentifierTag(1));
-			innerAbsorberPhysical->add(new GeoTransform(HepGeom::Transform3D()));
+			innerAbsorberPhysical->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 			innerAbsorberPhysical->add(innerGluePhysical);
 		}
 
@@ -362,7 +363,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 			new GeoLogVol(ILWname, innerLeadShape, Lead);
 		GeoPhysVol* innerLeadPhysical  = new GeoPhysVol(innerLeadLogical);
 		innerGluePhysical->add(new GeoIdentifierTag(1));
-		innerGluePhysical->add(new GeoTransform(HepGeom::Transform3D()));
+		innerGluePhysical->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 		innerGluePhysical->add(innerLeadPhysical);
 	}
 
@@ -386,7 +387,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 	double zWheelFrontFace = zWheelRefPoint + lwc->GetdWRPtoFrontFace();
 
     GeoPcon* outerShape= new GeoPcon(phiPosition - phiSize, 2.*phiSize);
-    outerShape->addPlane(   0.*CLHEP::mm, rMinOuter[0], rMaxOuter[0]);
+    outerShape->addPlane(   0.*GeoModelKernelUnits::mm, rMinOuter[0], rMaxOuter[0]);
     outerShape->addPlane( zMid   , rMinOuter[1], rMaxOuter[1]);
     outerShape->addPlane(zBack   , rMinOuter[2], rMaxOuter[2]);
 
@@ -395,7 +396,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 
     emecMotherPhysical->add(new GeoIdentifierTag(1));
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zWheelFrontFace)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zWheelFrontFace)));
     emecMotherPhysical->add(fullPV);
 
     StoredPhysVol *sPhysVol = new StoredPhysVol(fullPV);
@@ -412,10 +413,10 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
     GeoPhysVol* outerAbsorberPhysical  = new GeoPhysVol(outerAbsorberLogical);
     GeoPhysVol* outerElectrodePhysical = new GeoPhysVol(outerElectrodeLogical);
     fullPV->add(new GeoIdentifierTag(1));
-    fullPV->add(new GeoTransform(HepGeom::Transform3D()));
+    fullPV->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
     fullPV->add(outerAbsorberPhysical);
     fullPV->add(new GeoIdentifierTag(1));
-    fullPV->add(new GeoTransform(HepGeom::Transform3D()));
+    fullPV->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
     fullPV->add(outerElectrodePhysical);
 
 	if(mlabs > 0){
@@ -427,7 +428,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 				new GeoLogVol(OGWname, outerGlueShape, Glue);
 			outerGluePhysical = new GeoPhysVol(outerGlueLogical);
 			outerAbsorberPhysical->add(new GeoIdentifierTag(1));
-			outerAbsorberPhysical->add(new GeoTransform(HepGeom::Transform3D()));
+			outerAbsorberPhysical->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 			outerAbsorberPhysical->add(outerGluePhysical);
 		}
 
@@ -437,7 +438,7 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 			new GeoLogVol(OLWname, outerLeadShape, Lead);
 		GeoPhysVol* outerLeadPhysical  = new GeoPhysVol(outerLeadLogical);
 		outerGluePhysical->add(new GeoIdentifierTag(1));
-		outerGluePhysical->add(new GeoTransform(HepGeom::Transform3D()));
+		outerGluePhysical->add(new GeoTransform(GeoTrf::Transform3D::Identity()));
 		outerGluePhysical->add(outerLeadPhysical);
 	}
 
@@ -470,85 +471,84 @@ GeoFullPhysVol* LArGeo::EMECConstruction::GetEnvelope(bool bPos)
 	if(DB_EMECmn->size() == 0)
 		DB_EMECmn = pAccessSvc->getRecordsetPtr("EmecMagicNumbers","EMECMagigNumbers-00");
 
-	double front_shift = 0.*CLHEP::mm, back_shift = 0.*CLHEP::mm;
+	double front_shift = 0.*GeoModelKernelUnits::mm, back_shift = 0.*GeoModelKernelUnits::mm;
 	try {
 		for(unsigned int i = 0; i < DMpcons->size(); ++ i){
 			std::string object = (*DMpcons)[i]->getString("PCONNAME");
 			if(object == "FrontSupportMother"){
 				int zplane = (*DMpcons)[i]->getInt("NZPLANE");
-				if(zplane == 0) front_shift += (*DMpcons)[i]->getDouble("ZPOS")*CLHEP::mm;
-				else if(zplane == 1) front_shift -= (*DMpcons)[i]->getDouble("ZPOS")*CLHEP::mm;
+				if(zplane == 0) front_shift += (*DMpcons)[i]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
+				else if(zplane == 1) front_shift -= (*DMpcons)[i]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
 				else continue;
 			} else if(object == "BackSupportMother"){
 				int zplane = (*DMpcons)[i]->getInt("NZPLANE");
-				if(zplane == 0) back_shift -= 0.;//(*DMpcons)[i]->getDouble("ZPOS")*CLHEP::mm;
-				else if(zplane == 1) back_shift += (*DMpcons)[i]->getDouble("ZPOS")*CLHEP::mm;
+				if(zplane == 0) back_shift -= 0.;//(*DMpcons)[i]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
+				else if(zplane == 1) back_shift += (*DMpcons)[i]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
 				else continue;
 			}
 		}
-		double reftoactive = (*DB_EMECmn)[0]->getDouble("REFTOACTIVE")*CLHEP::mm;
+		double reftoactive = (*DB_EMECmn)[0]->getDouble("REFTOACTIVE")*GeoModelKernelUnits::mm;
 		front_shift += reftoactive;
 		back_shift += LArTotalThickness - reftoactive;
 	}
 	catch (...){
-		front_shift = -50.*CLHEP::mm; // start of EMEC envelop in the cryo.(length of env=630.)
-		back_shift = 580.*CLHEP::mm;
+		front_shift = -50.*GeoModelKernelUnits::mm; // start of EMEC envelop in the cryo.(length of env=630.)
+		back_shift = 580.*GeoModelKernelUnits::mm;
 		std::cout << "EMECConstruction: WARNING: cannot get front|back_shift from DB"
 		          << std::endl;
 	}
 //std::cout << "EMECConstruction : " << front_shift << " " << back_shift << std::endl;
     z0 = zWheelRefPoint + front_shift;
     EMECSupportConstruction *fsc = 0;
-    if(m_isTB) fsc = new EMECSupportConstruction(FrontIndx, true, "LAr::EMEC::", CLHEP::halfpi*CLHEP::rad);
+    if(m_isTB) fsc = new EMECSupportConstruction(FrontIndx, true, "LAr::EMEC::", GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad);
     else fsc = new EMECSupportConstruction(FrontIndx);
     GeoPhysVol* physicalFSM = fsc->GetEnvelope();
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
     emecMotherPhysical->add(refSystemTransform);
     emecMotherPhysical->add(physicalFSM);
     delete fsc;
 
     z0 = zWheelRefPoint + back_shift; // end of EMEC envelop in the cryo.
     EMECSupportConstruction *bsc = 0;
-    if(m_isTB) bsc = new EMECSupportConstruction(BackIndx, true, "LAr::EMEC::", CLHEP::halfpi*CLHEP::rad);
+    if(m_isTB) bsc = new EMECSupportConstruction(BackIndx, true, "LAr::EMEC::", GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad);
     else bsc = new EMECSupportConstruction(BackIndx);
     GeoPhysVol *physicalBSM = bsc->GetEnvelope();
-    CLHEP::HepRotation rotBSM;
-    rotBSM.rotateX(-M_PI);
-    if(m_isTB) rotBSM.rotateZ(M_PI); // there is an additional rotation for TB, back support only
+    GeoTrf::Transform3D rotBSM(GeoTrf::RotateX3D(-M_PI));
+    if(m_isTB) rotBSM = GeoTrf::RotateZ3D(M_PI)*rotBSM;
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::Transform3D(rotBSM,CLHEP::Hep3Vector(0., 0., z0))));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z0)*rotBSM)));
     emecMotherPhysical->add(physicalBSM);
     delete bsc;
 
 
     z0 = zWheelRefPoint + LArTotalThickness * 0.5; //dist. to middle of sens vol. along z  from WRP
     EMECSupportConstruction *osc = 0;
-    if(m_isTB) osc = new EMECSupportConstruction(2, true, "LAr::EMEC::", CLHEP::halfpi*CLHEP::rad);
+    if(m_isTB) osc = new EMECSupportConstruction(2, true, "LAr::EMEC::", GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad);
     else osc = new EMECSupportConstruction(2);
     GeoPhysVol *physicalOSM = osc->GetEnvelope();
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
     emecMotherPhysical->add(physicalOSM);
     delete osc;
 
 
     z0 = zWheelRefPoint + LArTotalThickness * 0.5;
     EMECSupportConstruction *isc = 0;
-    if(m_isTB) isc = new EMECSupportConstruction(3, true, "LAr::EMEC::", CLHEP::halfpi*CLHEP::rad);
+    if(m_isTB) isc = new EMECSupportConstruction(3, true, "LAr::EMEC::", GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad);
     else isc = new EMECSupportConstruction(3);
     GeoPhysVol *physicalISM = isc->GetEnvelope();
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
     emecMotherPhysical->add(physicalISM);
     delete isc;
 
     z0 = zWheelRefPoint + LArTotalThickness * 0.5;
     EMECSupportConstruction *msc = 0;
-    if(m_isTB) msc = new EMECSupportConstruction(4, true, "LAr::EMEC::", CLHEP::halfpi*CLHEP::rad);
+    if(m_isTB) msc = new EMECSupportConstruction(4, true, "LAr::EMEC::", GeoModelKernelUnits::halfpi*GeoModelKernelUnits::rad);
     else msc = new EMECSupportConstruction(4);
     GeoPhysVol *physicalMSM = msc->GetEnvelope();
     emecMotherPhysical->add(refSystemTransform);
-    emecMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+    emecMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
     emecMotherPhysical->add(physicalMSM);
     delete msc;
   }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECSupportConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECSupportConstruction.cxx
index 537bf556ce431b3fb9d22b5bac644950046a4cb1..23ebc8306eb04ad66dc6423fd07de70c58a81d00 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECSupportConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EMECSupportConstruction.cxx
@@ -71,6 +71,8 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -83,8 +85,6 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-
 #include "GeoSpecialShapes/LArWheelCalculator.h"
 
 #include "LArGeoEndcap/EMECConstruction.h"
@@ -110,11 +110,11 @@ EMECSupportConstruction::EMECSupportConstruction
         }
 
 	m_PhiStart = 0.;
-	m_PhiSize = CLHEP::twopi*CLHEP::rad;
+	m_PhiSize = GeoModelKernelUnits::twopi*GeoModelKernelUnits::rad;
 
 	if(m_isModule){
-		m_PhiStart = m_Position - M_PI*CLHEP::rad / 8.;
-		m_PhiSize = M_PI*CLHEP::rad / 4.;
+		m_PhiStart = m_Position - M_PI*GeoModelKernelUnits::rad / 8.;
+		m_PhiSize = M_PI*GeoModelKernelUnits::rad / 4.;
 	}
 
   // Get the materials from the manager 
@@ -338,24 +338,24 @@ GeoPcon* EMECSupportConstruction::getPcon(std::string id) const
 			}
 			pcone[key] = i;
 			if(key >= 0) ++ nzplanes;
-			else R0 = (*m_DB_pcons)[i]->getDouble("RMIN")*CLHEP::mm;
+			else R0 = (*m_DB_pcons)[i]->getDouble("RMIN")*GeoModelKernelUnits::mm;
 		}
 	}
 	if(nzplanes > 0){
 		zplane.resize(nzplanes); rmin.resize(nzplanes); rmax.resize(nzplanes);
 		for(int n = 0; n < nzplanes; ++ n){
-			zplane[n] = (*m_DB_pcons)[pcone[n]]->getDouble("ZPOS")*CLHEP::mm;
-			rmin[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble("RMIN")*CLHEP::mm;
-			rmax[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble("RMAX")*CLHEP::mm;
+			zplane[n] = (*m_DB_pcons)[pcone[n]]->getDouble("ZPOS")*GeoModelKernelUnits::mm;
+			rmin[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble("RMIN")*GeoModelKernelUnits::mm;
+			rmax[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble("RMAX")*GeoModelKernelUnits::mm;
 		}
 		if(id1 == "FrontSupportMother"){
 			if(id.find("Inner") != std::string::npos){
 				zplane.resize(2); rmin.resize(2); rmax.resize(2);
-				double rlim = getNumber(m_DB_numbers, id, "Inner", 614.)*CLHEP::mm;
+				double rlim = getNumber(m_DB_numbers, id, "Inner", 614.)*GeoModelKernelUnits::mm;
 				rmax[0] = rlim;
 				rmax[1] = rlim;
 			} else if(id.find("Outer") != std::string::npos){
-				double rlim = getNumber(m_DB_numbers, id, "Outer", 603.-1.)*CLHEP::mm;
+				double rlim = getNumber(m_DB_numbers, id, "Outer", 603.-1.)*GeoModelKernelUnits::mm;
 				rmin[0] = rlim;
 				rmin[1] = rlim;
 			}
@@ -363,24 +363,24 @@ GeoPcon* EMECSupportConstruction::getPcon(std::string id) const
 		if(id1 == "BackSupportMother"){
 			if(id.find("Inner") != std::string::npos){
 				zplane.resize(2); rmin.resize(2); rmax.resize(2);
-				double rlim = getNumber(m_DB_numbers, id, "Inner", 699.)*CLHEP::mm;
+				double rlim = getNumber(m_DB_numbers, id, "Inner", 699.)*GeoModelKernelUnits::mm;
 				rmax[0] = rlim;
 				rmax[1] = rlim;
 			} else if(id.find("Outer") != std::string::npos){
-				double rlim = getNumber(m_DB_numbers, id, "Outer", 687.-1.)*CLHEP::mm;
+				double rlim = getNumber(m_DB_numbers, id, "Outer", 687.-1.)*GeoModelKernelUnits::mm;
 				rmin[0] = rlim;
 				rmin[1] = rlim;
 			}
 		}
 		if(id1 == "Stretchers"){
 			if(id == "WideStretchers"){
-				double dfiWS = 360./3./256.*24.*CLHEP::deg; //this is the design variable for WS
+				double dfiWS = 360./3./256.*24.*GeoModelKernelUnits::deg; //this is the design variable for WS
 				phi_start = m_Position - dfiWS*0.5;
 				phi_size = dfiWS;
 			}
 			if(id == "NarrowStretchers"){
-			        double lengthNS = getNumber(m_DB_numbers, id, "Width", 200.)*CLHEP::mm; // transversal length of NS
-				double dfiNS = lengthNS / rmax[0] * CLHEP::rad;
+			        double lengthNS = getNumber(m_DB_numbers, id, "Width", 200.)*GeoModelKernelUnits::mm; // transversal length of NS
+				double dfiNS = lengthNS / rmax[0] * GeoModelKernelUnits::rad;
 				phi_start = m_Position - dfiNS*0.5;
 				phi_size = dfiNS;
 			}
@@ -395,42 +395,42 @@ for(int i = 0; i < nzplanes; ++ i){
 	} else {
 	if(id.find("FrontSupportMother") == 0){
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] =   0. *CLHEP::mm; rmin[0] =  292.*CLHEP::mm-1.*CLHEP::mm; rmax[0] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[1] =  61. *CLHEP::mm; rmin[1] =  292.*CLHEP::mm-1.*CLHEP::mm; rmax[1] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[2] =  61. *CLHEP::mm; rmin[2] = 2023.*CLHEP::mm-7.*CLHEP::mm; rmax[2] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[3] =  72.3*CLHEP::mm; rmin[3] = 2023.*CLHEP::mm-7.*CLHEP::mm; rmax[3] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[4] = 124.2*CLHEP::mm; rmin[4] = 2051.*CLHEP::mm-7.*CLHEP::mm; rmax[4] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[5] = 153. *CLHEP::mm; rmin[5] = 2051.*CLHEP::mm-7.*CLHEP::mm; rmax[5] = 2077.*CLHEP::mm-7.*CLHEP::mm;
+		zplane[0] =   0. *GeoModelKernelUnits::mm; rmin[0] =  292.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm; rmax[0] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[1] =  61. *GeoModelKernelUnits::mm; rmin[1] =  292.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm; rmax[1] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[2] =  61. *GeoModelKernelUnits::mm; rmin[2] = 2023.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[2] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[3] =  72.3*GeoModelKernelUnits::mm; rmin[3] = 2023.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[3] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[4] = 124.2*GeoModelKernelUnits::mm; rmin[4] = 2051.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[4] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[5] = 153. *GeoModelKernelUnits::mm; rmin[5] = 2051.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[5] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
 		if(id == "FrontSupportMother::Outer"){
-			rmin[0] = 603.*CLHEP::mm-1.*CLHEP::mm;
-			rmin[1] = 603.*CLHEP::mm-1.*CLHEP::mm;
+			rmin[0] = 603.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;
+			rmin[1] = 603.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;
 		}
 		if(id == "FrontSupportMother::Inner"){
 			zplane.resize(2); rmin.resize(2); rmax.resize(2);
-			rmax[0] = 614.*CLHEP::mm;
-			rmax[1] = 614.*CLHEP::mm;
+			rmax[0] = 614.*GeoModelKernelUnits::mm;
+			rmax[1] = 614.*GeoModelKernelUnits::mm;
 		}
 	} else if(id.find("BackSupportMother") == 0){
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =   0.001*CLHEP::mm; rmin[0] =  333.*CLHEP::mm-1.*CLHEP::mm; rmax[0] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[1] =  55.   *CLHEP::mm; rmin[1] =  333.*CLHEP::mm-1.*CLHEP::mm; rmax[1] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[2] =  55.   *CLHEP::mm; rmin[2] = 2051.*CLHEP::mm-7.*CLHEP::mm; rmax[2] = 2077.*CLHEP::mm-7.*CLHEP::mm;
-		zplane[3] =  147.  *CLHEP::mm; rmin[3] = 2051.*CLHEP::mm-7.*CLHEP::mm; rmax[3] = 2077.*CLHEP::mm-7.*CLHEP::mm;
+		zplane[0] =   0.001*GeoModelKernelUnits::mm; rmin[0] =  333.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm; rmax[0] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[1] =  55.   *GeoModelKernelUnits::mm; rmin[1] =  333.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm; rmax[1] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[2] =  55.   *GeoModelKernelUnits::mm; rmin[2] = 2051.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[2] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
+		zplane[3] =  147.  *GeoModelKernelUnits::mm; rmin[3] = 2051.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; rmax[3] = 2077.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
 		if(id == "BackSupportMother::Outer"){
-			rmin[0] = 687.*CLHEP::mm-1.*CLHEP::mm;
-			rmin[1] = 687.*CLHEP::mm-1.*CLHEP::mm;
+			rmin[0] = 687.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;
+			rmin[1] = 687.*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;
 		}
 		if(id == "BackSupportMother::Inner"){
 			zplane.resize(2); rmin.resize(2); rmax.resize(2);
-			rmax[0] = 699.*CLHEP::mm;
-			rmax[1] = 699.*CLHEP::mm;
+			rmax[0] = 699.*GeoModelKernelUnits::mm;
+			rmax[1] = 699.*GeoModelKernelUnits::mm;
 		}
 	} else if(id == "WideStretchers" || id == "NarrowStretchers"){
-		double dzS = 165.*CLHEP::mm;
-		double dznotch = 10.*CLHEP::mm; // half z extent of the notch
-		double drnotch = 6.5*CLHEP::mm; // deepness of the noth in radial direction
-		double rmaxS = (2077. - 7.)*CLHEP::mm;//ROuter+116. // -7 for cold
-		double rminS = rmaxS - 26.*CLHEP::mm;
+		double dzS = 165.*GeoModelKernelUnits::mm;
+		double dznotch = 10.*GeoModelKernelUnits::mm; // half z extent of the notch
+		double drnotch = 6.5*GeoModelKernelUnits::mm; // deepness of the noth in radial direction
+		double rmaxS = (2077. - 7.)*GeoModelKernelUnits::mm;//ROuter+116. // -7 for cold
+		double rminS = rmaxS - 26.*GeoModelKernelUnits::mm;
 		double rmidS = rminS + drnotch;
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
 		zplane[0] = -dzS ; rmin[0] = rminS; rmax[0] = rmaxS;
@@ -440,22 +440,22 @@ for(int i = 0; i < nzplanes; ++ i){
 		zplane[4] = dznotch; rmin[4] = rminS; rmax[4] = rmaxS;
 		zplane[5] = dzS  ; rmin[5] = rminS; rmax[5] = rmaxS;
 		if(id == "WideStretchers"){
-			double dfiWS = 360./3./256.*24.*CLHEP::deg; //this is the design variable for WS
+			double dfiWS = 360./3./256.*24.*GeoModelKernelUnits::deg; //this is the design variable for WS
 			phi_start = m_Position - dfiWS*0.5;
 			phi_size = dfiWS;
 		}
 		if(id == "NarrowStretchers"){
-			double lengthNS = 200.*CLHEP::mm; // transversal length of NS
-			double dfiNS = lengthNS / rmaxS * CLHEP::rad;
+			double lengthNS = 200.*GeoModelKernelUnits::mm; // transversal length of NS
+			double dfiNS = lengthNS / rmaxS * GeoModelKernelUnits::rad;
 			phi_start = m_Position - dfiNS*0.5;
 			phi_size = dfiNS;
 		}
 	} else if(id == "OuterSupportMother"){
-		double dzS = 165.*CLHEP::mm;
-		double rmaxS = (2077. - 7.)*CLHEP::mm;//ROuter+116. // -7 for cold
-		double rminOTB = (2034. + 2.)*CLHEP::mm;
-		double rmaxOTB = rminOTB + 3.*CLHEP::mm;
-		double dzOTB = 201.*CLHEP::mm;
+		double dzS = 165.*GeoModelKernelUnits::mm;
+		double rmaxS = (2077. - 7.)*GeoModelKernelUnits::mm;//ROuter+116. // -7 for cold
+		double rminOTB = (2034. + 2.)*GeoModelKernelUnits::mm;
+		double rmaxOTB = rminOTB + 3.*GeoModelKernelUnits::mm;
+		double dzOTB = 201.*GeoModelKernelUnits::mm;
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
 		zplane[0] = -dzOTB ; rmin[0] = rminOTB; rmax[0] = rmaxOTB;
 		zplane[1] = -dzS; rmin[1] = rminOTB; rmax[1] = rmaxOTB;
@@ -464,176 +464,176 @@ for(int i = 0; i < nzplanes; ++ i){
 		zplane[4] = dzS; rmin[4] = rminOTB; rmax[4] = rmaxOTB;
 		zplane[5] = dzOTB  ; rmin[5] = rminOTB; rmax[5] = rmaxOTB;
 	} else if(id == "FrontMiddleRing"){
-		double r0       =614.*CLHEP::mm-2.*CLHEP::mm ; // RMiddle=middle radius of the ring
+		double r0       =614.*GeoModelKernelUnits::mm-2.*GeoModelKernelUnits::mm ; // RMiddle=middle radius of the ring
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =   0. *CLHEP::mm; rmin[0] = r0 - 57.*CLHEP::mm; rmax[0] = r0 + 57.*CLHEP::mm;
-		zplane[1] =  27.5*CLHEP::mm; rmin[1] = r0 - 57.*CLHEP::mm; rmax[1] = r0 + 57.*CLHEP::mm;
-		zplane[2] =  27.5*CLHEP::mm; rmin[2] = r0 - 40.*CLHEP::mm; rmax[2] = r0 + 40.*CLHEP::mm;
-		zplane[3] =  59. *CLHEP::mm; rmin[3] = r0 - 40.*CLHEP::mm; rmax[3] = r0 + 40.*CLHEP::mm;
+		zplane[0] =   0. *GeoModelKernelUnits::mm; rmin[0] = r0 - 57.*GeoModelKernelUnits::mm; rmax[0] = r0 + 57.*GeoModelKernelUnits::mm;
+		zplane[1] =  27.5*GeoModelKernelUnits::mm; rmin[1] = r0 - 57.*GeoModelKernelUnits::mm; rmax[1] = r0 + 57.*GeoModelKernelUnits::mm;
+		zplane[2] =  27.5*GeoModelKernelUnits::mm; rmin[2] = r0 - 40.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[3] =  59. *GeoModelKernelUnits::mm; rmin[3] = r0 - 40.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.*GeoModelKernelUnits::mm;
 	} else if(id == "FrontMiddleRing::LowerHole"){
-		double r0 = 614.*CLHEP::mm-2.*CLHEP::mm; // RMiddle=middle radius of the ring
+		double r0 = 614.*GeoModelKernelUnits::mm-2.*GeoModelKernelUnits::mm; // RMiddle=middle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23. *CLHEP::mm; rmin[0] = r0 - 28.3*CLHEP::mm; rmax[0] = r0 - 8.*CLHEP::mm;
-		zplane[1] = 27.5*CLHEP::mm; rmin[1] = r0 - 28.3*CLHEP::mm; rmax[1] = r0 - 8.*CLHEP::mm;
-		zplane[2] = 27.5*CLHEP::mm; rmin[2] = r0 - 40. *CLHEP::mm; rmax[2] = r0 - 8.*CLHEP::mm;
-		zplane[3] = 48.5*CLHEP::mm; rmin[3] = r0 - 40. *CLHEP::mm; rmax[3] = r0 - 8.*CLHEP::mm;
-		zplane[4] = 48.5*CLHEP::mm; rmin[4] = r0 - 28.3*CLHEP::mm; rmax[4] = r0 - 8.*CLHEP::mm;
-		zplane[5] = 53. *CLHEP::mm; rmin[5] = r0 - 28.3*CLHEP::mm; rmax[5] = r0 - 8.*CLHEP::mm;
+		zplane[0] = 23. *GeoModelKernelUnits::mm; rmin[0] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[0] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[1] = 27.5*GeoModelKernelUnits::mm; rmin[1] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[1] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[2] = 27.5*GeoModelKernelUnits::mm; rmin[2] = r0 - 40. *GeoModelKernelUnits::mm; rmax[2] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[3] = 48.5*GeoModelKernelUnits::mm; rmin[3] = r0 - 40. *GeoModelKernelUnits::mm; rmax[3] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[4] = 48.5*GeoModelKernelUnits::mm; rmin[4] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[4] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[5] = 53. *GeoModelKernelUnits::mm; rmin[5] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[5] = r0 - 8.*GeoModelKernelUnits::mm;
 	} else if(id == "FrontMiddleRing::LowerGTen"){
-		double r0 = 614.*CLHEP::mm - 2.*CLHEP::mm; // RMiddle=middle radius of the ring
+		double r0 = 614.*GeoModelKernelUnits::mm - 2.*GeoModelKernelUnits::mm; // RMiddle=middle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23.*CLHEP::mm; rmin[0] = r0 - 28.*CLHEP::mm; rmax[0] = r0 - 8.*CLHEP::mm;
-		zplane[1] = 28.*CLHEP::mm; rmin[1] = r0 - 28.*CLHEP::mm; rmax[1] = r0 - 8.*CLHEP::mm;
-		zplane[2] = 28.*CLHEP::mm; rmin[2] = r0 - 40.*CLHEP::mm; rmax[2] = r0 - 8.*CLHEP::mm;
-		zplane[3] = 48.*CLHEP::mm; rmin[3] = r0 - 40.*CLHEP::mm; rmax[3] = r0 - 8.*CLHEP::mm;
-		zplane[4] = 48.*CLHEP::mm; rmin[4] = r0 - 28.*CLHEP::mm; rmax[4] = r0 - 8.*CLHEP::mm;
-		zplane[5] = 53.*CLHEP::mm; rmin[5] = r0 - 28.*CLHEP::mm; rmax[5] = r0 - 8.*CLHEP::mm;
+		zplane[0] = 23.*GeoModelKernelUnits::mm; rmin[0] = r0 - 28.*GeoModelKernelUnits::mm; rmax[0] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[1] = 28.*GeoModelKernelUnits::mm; rmin[1] = r0 - 28.*GeoModelKernelUnits::mm; rmax[1] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[2] = 28.*GeoModelKernelUnits::mm; rmin[2] = r0 - 40.*GeoModelKernelUnits::mm; rmax[2] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[3] = 48.*GeoModelKernelUnits::mm; rmin[3] = r0 - 40.*GeoModelKernelUnits::mm; rmax[3] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[4] = 48.*GeoModelKernelUnits::mm; rmin[4] = r0 - 28.*GeoModelKernelUnits::mm; rmax[4] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[5] = 53.*GeoModelKernelUnits::mm; rmin[5] = r0 - 28.*GeoModelKernelUnits::mm; rmax[5] = r0 - 8.*GeoModelKernelUnits::mm;
 	} else if(id == "FrontMiddleRing::UpperHole"){
-		double r0       =614.*CLHEP::mm-2.*CLHEP::mm ; // RMiddle=middle radius of the ring
+		double r0       =614.*GeoModelKernelUnits::mm-2.*GeoModelKernelUnits::mm ; // RMiddle=middle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23. *CLHEP::mm; rmin[0] = r0 + 8.*CLHEP::mm; rmax[0] = r0 + 28.3*CLHEP::mm;
-		zplane[1] = 27.5*CLHEP::mm; rmin[1] = r0 + 8.*CLHEP::mm; rmax[1] = r0 + 28.3*CLHEP::mm;
-		zplane[2] = 27.5*CLHEP::mm; rmin[2] = r0 + 8.*CLHEP::mm; rmax[2] = r0 + 40. *CLHEP::mm;
-		zplane[3] = 48.5*CLHEP::mm; rmin[3] = r0 + 8.*CLHEP::mm; rmax[3] = r0 + 40. *CLHEP::mm;
-		zplane[4] = 48.5*CLHEP::mm; rmin[4] = r0 + 8.*CLHEP::mm; rmax[4] = r0 + 28.3*CLHEP::mm;
-		zplane[5] = 53. *CLHEP::mm; rmin[5] = r0 + 8.*CLHEP::mm; rmax[5] = r0 + 28.3*CLHEP::mm;
+		zplane[0] = 23. *GeoModelKernelUnits::mm; rmin[0] = r0 + 8.*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[1] = 27.5*GeoModelKernelUnits::mm; rmin[1] = r0 + 8.*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[2] = 27.5*GeoModelKernelUnits::mm; rmin[2] = r0 + 8.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40. *GeoModelKernelUnits::mm;
+		zplane[3] = 48.5*GeoModelKernelUnits::mm; rmin[3] = r0 + 8.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40. *GeoModelKernelUnits::mm;
+		zplane[4] = 48.5*GeoModelKernelUnits::mm; rmin[4] = r0 + 8.*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[5] = 53. *GeoModelKernelUnits::mm; rmin[5] = r0 + 8.*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.3*GeoModelKernelUnits::mm;
 	} else if(id == "FrontMiddleRing::UpperGTen"){
-		double r0       =614.*CLHEP::mm-2.*CLHEP::mm ; // RMiddle=middle radius of the ring
+		double r0       =614.*GeoModelKernelUnits::mm-2.*GeoModelKernelUnits::mm ; // RMiddle=middle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23.*CLHEP::mm; rmin[0] = r0 + 8.*CLHEP::mm; rmax[0] = r0 + 28.*CLHEP::mm;
-		zplane[1] = 28.*CLHEP::mm; rmin[1] = r0 + 8.*CLHEP::mm; rmax[1] = r0 + 28.*CLHEP::mm;
-		zplane[2] = 28.*CLHEP::mm; rmin[2] = r0 + 8.*CLHEP::mm; rmax[2] = r0 + 40.*CLHEP::mm;
-		zplane[3] = 48.*CLHEP::mm; rmin[3] = r0 + 8.*CLHEP::mm; rmax[3] = r0 + 40.*CLHEP::mm;
-		zplane[4] = 48.*CLHEP::mm; rmin[4] = r0 + 8.*CLHEP::mm; rmax[4] = r0 + 28.*CLHEP::mm;
-		zplane[5] = 53.*CLHEP::mm; rmin[5] = r0 + 8.*CLHEP::mm; rmax[5] = r0 + 28.*CLHEP::mm;
+		zplane[0] = 23.*GeoModelKernelUnits::mm; rmin[0] = r0 + 8.*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[1] = 28.*GeoModelKernelUnits::mm; rmin[1] = r0 + 8.*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[2] = 28.*GeoModelKernelUnits::mm; rmin[2] = r0 + 8.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[3] = 48.*GeoModelKernelUnits::mm; rmin[3] = r0 + 8.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[4] = 48.*GeoModelKernelUnits::mm; rmin[4] = r0 + 8.*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[5] = 53.*GeoModelKernelUnits::mm; rmin[5] = r0 + 8.*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.*GeoModelKernelUnits::mm;
 	} else if(id == "FrontInnerRing"){
-		double r0 = 335.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the inner ring
+		double r0 = 335.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the inner ring
 		zplane.resize(5);  rmin.resize(5);    rmax.resize(5);
-		zplane[0] =  0. *CLHEP::mm; rmin[0] = r0 - 22.5*CLHEP::mm; rmax[0] = r0 + 51.5*CLHEP::mm;
-		zplane[1] =  6. *CLHEP::mm; rmin[1] = r0 - 28.5*CLHEP::mm; rmax[1] = r0 + 51.5*CLHEP::mm;
-		zplane[2] = 27.5*CLHEP::mm; rmin[2] = r0 - 28.5*CLHEP::mm; rmax[2] = r0 + 51.5*CLHEP::mm;
-		zplane[3] = 27.5*CLHEP::mm; rmin[3] = r0 - 43.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
-		zplane[4] = 59. *CLHEP::mm; rmin[4] = r0 - 43.5*CLHEP::mm; rmax[4] = r0 + 40.5*CLHEP::mm;
+		zplane[0] =  0. *GeoModelKernelUnits::mm; rmin[0] = r0 - 22.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 51.5*GeoModelKernelUnits::mm;
+		zplane[1] =  6. *GeoModelKernelUnits::mm; rmin[1] = r0 - 28.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 51.5*GeoModelKernelUnits::mm;
+		zplane[2] = 27.5*GeoModelKernelUnits::mm; rmin[2] = r0 - 28.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 51.5*GeoModelKernelUnits::mm;
+		zplane[3] = 27.5*GeoModelKernelUnits::mm; rmin[3] = r0 - 43.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[4] = 59. *GeoModelKernelUnits::mm; rmin[4] = r0 - 43.5*GeoModelKernelUnits::mm; rmax[4] = r0 + 40.5*GeoModelKernelUnits::mm;
 	} else if(id == "FrontInnerRing::Hole"){
-		double r0 = 335.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the inner ring
+		double r0 = 335.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the inner ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23. *CLHEP::mm; rmin[0] = r0 + 6.5*CLHEP::mm; rmax[0] = r0 + 29.5*CLHEP::mm;
-		zplane[1] = 27.5*CLHEP::mm; rmin[1] = r0 + 6.5*CLHEP::mm; rmax[1] = r0 + 29.5*CLHEP::mm;
-		zplane[2] = 27.5*CLHEP::mm; rmin[2] = r0 + 6.5*CLHEP::mm; rmax[2] = r0 + 40.5*CLHEP::mm;
-		zplane[3] = 48.5*CLHEP::mm; rmin[3] = r0 + 6.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
-		zplane[4] = 48.5*CLHEP::mm; rmin[4] = r0 + 6.5*CLHEP::mm; rmax[4] = r0 + 29.5*CLHEP::mm;
-		zplane[5] = 53. *CLHEP::mm; rmin[5] = r0 + 6.5*CLHEP::mm; rmax[5] = r0 + 29.5*CLHEP::mm;
+		zplane[0] = 23. *GeoModelKernelUnits::mm; rmin[0] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[1] = 27.5*GeoModelKernelUnits::mm; rmin[1] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[2] = 27.5*GeoModelKernelUnits::mm; rmin[2] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[3] = 48.5*GeoModelKernelUnits::mm; rmin[3] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[4] = 48.5*GeoModelKernelUnits::mm; rmin[4] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[4] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[5] = 53. *GeoModelKernelUnits::mm; rmin[5] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[5] = r0 + 29.5*GeoModelKernelUnits::mm;
 	} else if(id == "FrontInnerRing::GTen"){
-		double r0 = 335.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the inner ring
+		double r0 = 335.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the inner ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 23.*CLHEP::mm; rmin[0] = r0 + 8.5*CLHEP::mm; rmax[0] = r0 + 28.5*CLHEP::mm;
-		zplane[1] = 28.*CLHEP::mm; rmin[1] = r0 + 8.5*CLHEP::mm; rmax[1] = r0 + 28.5*CLHEP::mm;
-		zplane[2] = 28.*CLHEP::mm; rmin[2] = r0 + 8.5*CLHEP::mm; rmax[2] = r0 + 40.5*CLHEP::mm;
-		zplane[3] = 48.*CLHEP::mm; rmin[3] = r0 + 8.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
-		zplane[4] = 48.*CLHEP::mm; rmin[4] = r0 + 8.5*CLHEP::mm; rmax[4] = r0 + 28.5*CLHEP::mm;
-		zplane[5] = 53.*CLHEP::mm; rmin[5] = r0 + 8.5*CLHEP::mm; rmax[5] = r0 + 28.5*CLHEP::mm;
+		zplane[0] = 23.*GeoModelKernelUnits::mm; rmin[0] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[1] = 28.*GeoModelKernelUnits::mm; rmin[1] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[2] = 28.*GeoModelKernelUnits::mm; rmin[2] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[3] = 48.*GeoModelKernelUnits::mm; rmin[3] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[4] = 48.*GeoModelKernelUnits::mm; rmin[4] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[5] = 53.*GeoModelKernelUnits::mm; rmin[5] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.5*GeoModelKernelUnits::mm;
 	} else if(id == "BackMiddleRing"){
-		double r0       =  699.*CLHEP::mm-2.5*CLHEP::mm; // RMiddle radius of the ring
+		double r0       =  699.*GeoModelKernelUnits::mm-2.5*GeoModelKernelUnits::mm; // RMiddle radius of the ring
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =   0. *CLHEP::mm; rmin[0] = r0 - 57.*CLHEP::mm; rmax[0] = r0 + 57.*CLHEP::mm;
-		zplane[1] =  21. *CLHEP::mm; rmin[1] = r0 - 57.*CLHEP::mm; rmax[1] = r0 + 57.*CLHEP::mm;
-		zplane[2] =  21. *CLHEP::mm; rmin[2] = r0 - 40.*CLHEP::mm; rmax[2] = r0 + 40.*CLHEP::mm;
-		zplane[3] =  52.5*CLHEP::mm; rmin[3] = r0 - 40.*CLHEP::mm; rmax[3] = r0 + 40.*CLHEP::mm;
+		zplane[0] =   0. *GeoModelKernelUnits::mm; rmin[0] = r0 - 57.*GeoModelKernelUnits::mm; rmax[0] = r0 + 57.*GeoModelKernelUnits::mm;
+		zplane[1] =  21. *GeoModelKernelUnits::mm; rmin[1] = r0 - 57.*GeoModelKernelUnits::mm; rmax[1] = r0 + 57.*GeoModelKernelUnits::mm;
+		zplane[2] =  21. *GeoModelKernelUnits::mm; rmin[2] = r0 - 40.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[3] =  52.5*GeoModelKernelUnits::mm; rmin[3] = r0 - 40.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.*GeoModelKernelUnits::mm;
 	} else if(id == "BackMiddleRing::LowerHole"){
-		double r0       =  699.*CLHEP::mm-2.5*CLHEP::mm; // RMiddle radius of the ring
+		double r0       =  699.*GeoModelKernelUnits::mm-2.5*GeoModelKernelUnits::mm; // RMiddle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 16.5*CLHEP::mm; rmin[0] = r0 - 28.3*CLHEP::mm; rmax[0] = r0 - 8.*CLHEP::mm;
-		zplane[1] = 21. *CLHEP::mm; rmin[1] = r0 - 28.3*CLHEP::mm; rmax[1] = r0 - 8.*CLHEP::mm;
-		zplane[2] = 21. *CLHEP::mm; rmin[2] = r0 - 40. *CLHEP::mm; rmax[2] = r0 - 8.*CLHEP::mm;
-		zplane[3] = 42. *CLHEP::mm; rmin[3] = r0 - 40. *CLHEP::mm; rmax[3] = r0 - 8.*CLHEP::mm;
-		zplane[4] = 42. *CLHEP::mm; rmin[4] = r0 - 28.3*CLHEP::mm; rmax[4] = r0 - 8.*CLHEP::mm;
-//		zplane[5] = 56.5*CLHEP::mm; rmin[5] = r0 - 28.3*CLHEP::mm; rmax[5] = r0 - 8.*CLHEP::mm;
-		zplane[5] = 46.5*CLHEP::mm; rmin[5] = r0 - 28.3*CLHEP::mm; rmax[5] = r0 - 8.*CLHEP::mm;
+		zplane[0] = 16.5*GeoModelKernelUnits::mm; rmin[0] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[0] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[1] = 21. *GeoModelKernelUnits::mm; rmin[1] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[1] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[2] = 21. *GeoModelKernelUnits::mm; rmin[2] = r0 - 40. *GeoModelKernelUnits::mm; rmax[2] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[3] = 42. *GeoModelKernelUnits::mm; rmin[3] = r0 - 40. *GeoModelKernelUnits::mm; rmax[3] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[4] = 42. *GeoModelKernelUnits::mm; rmin[4] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[4] = r0 - 8.*GeoModelKernelUnits::mm;
+//		zplane[5] = 56.5*GeoModelKernelUnits::mm; rmin[5] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[5] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[5] = 46.5*GeoModelKernelUnits::mm; rmin[5] = r0 - 28.3*GeoModelKernelUnits::mm; rmax[5] = r0 - 8.*GeoModelKernelUnits::mm;
 	} else if(id == "BackMiddleRing::LowerGTen"){
-		double r0       =  699.*CLHEP::mm-2.5*CLHEP::mm; // RMiddle radius of the ring
+		double r0       =  699.*GeoModelKernelUnits::mm-2.5*GeoModelKernelUnits::mm; // RMiddle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 16.5*CLHEP::mm; rmin[0] = r0 - 28.*CLHEP::mm; rmax[0] = r0 - 8.*CLHEP::mm;
-		zplane[1] = 21.5*CLHEP::mm; rmin[1] = r0 - 28.*CLHEP::mm; rmax[1] = r0 - 8.*CLHEP::mm;
-		zplane[2] = 21.5*CLHEP::mm; rmin[2] = r0 - 40.*CLHEP::mm; rmax[2] = r0 - 8.*CLHEP::mm;
-		zplane[3] = 41.5*CLHEP::mm; rmin[3] = r0 - 40.*CLHEP::mm; rmax[3] = r0 - 8.*CLHEP::mm;
-		zplane[4] = 41.5*CLHEP::mm; rmin[4] = r0 - 28.*CLHEP::mm; rmax[4] = r0 - 8.*CLHEP::mm;
-		zplane[5] = 46.5*CLHEP::mm; rmin[5] = r0 - 28.*CLHEP::mm; rmax[5] = r0 - 8.*CLHEP::mm;
+		zplane[0] = 16.5*GeoModelKernelUnits::mm; rmin[0] = r0 - 28.*GeoModelKernelUnits::mm; rmax[0] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[1] = 21.5*GeoModelKernelUnits::mm; rmin[1] = r0 - 28.*GeoModelKernelUnits::mm; rmax[1] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[2] = 21.5*GeoModelKernelUnits::mm; rmin[2] = r0 - 40.*GeoModelKernelUnits::mm; rmax[2] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[3] = 41.5*GeoModelKernelUnits::mm; rmin[3] = r0 - 40.*GeoModelKernelUnits::mm; rmax[3] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[4] = 41.5*GeoModelKernelUnits::mm; rmin[4] = r0 - 28.*GeoModelKernelUnits::mm; rmax[4] = r0 - 8.*GeoModelKernelUnits::mm;
+		zplane[5] = 46.5*GeoModelKernelUnits::mm; rmin[5] = r0 - 28.*GeoModelKernelUnits::mm; rmax[5] = r0 - 8.*GeoModelKernelUnits::mm;
 	} else if(id == "BackMiddleRing::UpperHole"){
-		double r0       =  699.*CLHEP::mm-2.5*CLHEP::mm; // RMiddle radius of the ring
+		double r0       =  699.*GeoModelKernelUnits::mm-2.5*GeoModelKernelUnits::mm; // RMiddle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 16.5*CLHEP::mm; rmin[0] = r0 + 8.*CLHEP::mm; rmax[0] = r0 + 28.3*CLHEP::mm;
-		zplane[1] = 21. *CLHEP::mm; rmin[1] = r0 + 8.*CLHEP::mm; rmax[1] = r0 + 28.3*CLHEP::mm;
-		zplane[2] = 21. *CLHEP::mm; rmin[2] = r0 + 8.*CLHEP::mm; rmax[2] = r0 + 40. *CLHEP::mm;
-		zplane[3] = 42. *CLHEP::mm; rmin[3] = r0 + 8.*CLHEP::mm; rmax[3] = r0 + 40. *CLHEP::mm;
-		zplane[4] = 42. *CLHEP::mm; rmin[4] = r0 + 8.*CLHEP::mm; rmax[4] = r0 + 28.3*CLHEP::mm;
-		zplane[5] = 46.5*CLHEP::mm; rmin[5] = r0 + 8.*CLHEP::mm; rmax[5] = r0 + 28.3*CLHEP::mm;
+		zplane[0] = 16.5*GeoModelKernelUnits::mm; rmin[0] = r0 + 8.*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[1] = 21. *GeoModelKernelUnits::mm; rmin[1] = r0 + 8.*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[2] = 21. *GeoModelKernelUnits::mm; rmin[2] = r0 + 8.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40. *GeoModelKernelUnits::mm;
+		zplane[3] = 42. *GeoModelKernelUnits::mm; rmin[3] = r0 + 8.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40. *GeoModelKernelUnits::mm;
+		zplane[4] = 42. *GeoModelKernelUnits::mm; rmin[4] = r0 + 8.*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.3*GeoModelKernelUnits::mm;
+		zplane[5] = 46.5*GeoModelKernelUnits::mm; rmin[5] = r0 + 8.*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.3*GeoModelKernelUnits::mm;
 	} else if(id == "BackMiddleRing::UpperGTen"){
-		double r0       =  699.*CLHEP::mm-2.5*CLHEP::mm; // RMiddle radius of the ring
+		double r0       =  699.*GeoModelKernelUnits::mm-2.5*GeoModelKernelUnits::mm; // RMiddle radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 16.5*CLHEP::mm; rmin[0] = r0 + 8.*CLHEP::mm; rmax[0] = r0 + 28.*CLHEP::mm;
-		zplane[1] = 21.5*CLHEP::mm; rmin[1] = r0 + 8.*CLHEP::mm; rmax[1] = r0 + 28.*CLHEP::mm;
-		zplane[2] = 21.5*CLHEP::mm; rmin[2] = r0 + 8.*CLHEP::mm; rmax[2] = r0 + 40.*CLHEP::mm;
-		zplane[3] = 41.5*CLHEP::mm; rmin[3] = r0 + 8.*CLHEP::mm; rmax[3] = r0 + 40.*CLHEP::mm;
-		zplane[4] = 41.5*CLHEP::mm; rmin[4] = r0 + 8.*CLHEP::mm; rmax[4] = r0 + 28.*CLHEP::mm;
-		zplane[5] = 46.5*CLHEP::mm; rmin[5] = r0 + 8.*CLHEP::mm; rmax[5] = r0 + 28.*CLHEP::mm;
+		zplane[0] = 16.5*GeoModelKernelUnits::mm; rmin[0] = r0 + 8.*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[1] = 21.5*GeoModelKernelUnits::mm; rmin[1] = r0 + 8.*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[2] = 21.5*GeoModelKernelUnits::mm; rmin[2] = r0 + 8.*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[3] = 41.5*GeoModelKernelUnits::mm; rmin[3] = r0 + 8.*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.*GeoModelKernelUnits::mm;
+		zplane[4] = 41.5*GeoModelKernelUnits::mm; rmin[4] = r0 + 8.*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.*GeoModelKernelUnits::mm;
+		zplane[5] = 46.5*GeoModelKernelUnits::mm; rmin[5] = r0 + 8.*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.*GeoModelKernelUnits::mm;
 	} else if(id == "BackInnerRing"){
-		double r0       =357.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the ring
+		double r0       =357.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the ring
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =   0. *CLHEP::mm; rmin[0] = r0 - 22.5*CLHEP::mm; rmax[0] = r0 + 53.5*CLHEP::mm;
-		zplane[1] =  22.5*CLHEP::mm; rmin[1] = r0 - 22.5*CLHEP::mm; rmax[1] = r0 + 53.5*CLHEP::mm;
-		zplane[2] =  22.5*CLHEP::mm; rmin[2] = r0 - 24.5*CLHEP::mm; rmax[2] = r0 + 40.5*CLHEP::mm;
-		zplane[3] =  54. *CLHEP::mm; rmin[3] = r0 - 24.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
+		zplane[0] =   0. *GeoModelKernelUnits::mm; rmin[0] = r0 - 22.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 53.5*GeoModelKernelUnits::mm;
+		zplane[1] =  22.5*GeoModelKernelUnits::mm; rmin[1] = r0 - 22.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 53.5*GeoModelKernelUnits::mm;
+		zplane[2] =  22.5*GeoModelKernelUnits::mm; rmin[2] = r0 - 24.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[3] =  54. *GeoModelKernelUnits::mm; rmin[3] = r0 - 24.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
 	} else if(id == "BackInnerRing::Hole"){
-		double r0       =357.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the ring
+		double r0       =357.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the ring
  		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 18. *CLHEP::mm; rmin[0] = r0 + 6.5*CLHEP::mm; rmax[0] = r0 + 29.5*CLHEP::mm;
-		zplane[1] = 22.5*CLHEP::mm; rmin[1] = r0 + 6.5*CLHEP::mm; rmax[1] = r0 + 29.5*CLHEP::mm;
-		zplane[2] = 22.5*CLHEP::mm; rmin[2] = r0 + 6.5*CLHEP::mm; rmax[2] = r0 + 40.5*CLHEP::mm;
-		zplane[3] = 43.5*CLHEP::mm; rmin[3] = r0 + 6.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
-		zplane[4] = 43.5*CLHEP::mm; rmin[4] = r0 + 6.5*CLHEP::mm; rmax[4] = r0 + 29.5*CLHEP::mm;
-		zplane[5] = 48. *CLHEP::mm; rmin[5] = r0 + 6.5*CLHEP::mm; rmax[5] = r0 + 29.5*CLHEP::mm;
+		zplane[0] = 18. *GeoModelKernelUnits::mm; rmin[0] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[1] = 22.5*GeoModelKernelUnits::mm; rmin[1] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[2] = 22.5*GeoModelKernelUnits::mm; rmin[2] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[3] = 43.5*GeoModelKernelUnits::mm; rmin[3] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[4] = 43.5*GeoModelKernelUnits::mm; rmin[4] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[4] = r0 + 29.5*GeoModelKernelUnits::mm;
+		zplane[5] = 48. *GeoModelKernelUnits::mm; rmin[5] = r0 + 6.5*GeoModelKernelUnits::mm; rmax[5] = r0 + 29.5*GeoModelKernelUnits::mm;
 	} else if(id == "BackInnerRing::GTen"){
-		double r0       =357.5*CLHEP::mm-1.*CLHEP::mm;  // RInner = reference radius of the ring
+		double r0       =357.5*GeoModelKernelUnits::mm-1.*GeoModelKernelUnits::mm;  // RInner = reference radius of the ring
 		zplane.resize(6);  rmin.resize(6);    rmax.resize(6);
-		zplane[0] = 18.*CLHEP::mm; rmin[0] = r0 + 8.5*CLHEP::mm; rmax[0] = r0 + 28.5*CLHEP::mm;
-		zplane[1] = 23.*CLHEP::mm; rmin[1] = r0 + 8.5*CLHEP::mm; rmax[1] = r0 + 28.5*CLHEP::mm;
-		zplane[2] = 23.*CLHEP::mm; rmin[2] = r0 + 8.5*CLHEP::mm; rmax[2] = r0 + 40.5*CLHEP::mm;
-		zplane[3] = 43.*CLHEP::mm; rmin[3] = r0 + 8.5*CLHEP::mm; rmax[3] = r0 + 40.5*CLHEP::mm;
-		zplane[4] = 43.*CLHEP::mm; rmin[4] = r0 + 8.5*CLHEP::mm; rmax[4] = r0 + 28.5*CLHEP::mm;
-		zplane[5] = 48.*CLHEP::mm; rmin[5] = r0 + 8.5*CLHEP::mm; rmax[5] = r0 + 28.5*CLHEP::mm;
+		zplane[0] = 18.*GeoModelKernelUnits::mm; rmin[0] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[0] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[1] = 23.*GeoModelKernelUnits::mm; rmin[1] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[1] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[2] = 23.*GeoModelKernelUnits::mm; rmin[2] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[2] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[3] = 43.*GeoModelKernelUnits::mm; rmin[3] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[3] = r0 + 40.5*GeoModelKernelUnits::mm;
+		zplane[4] = 43.*GeoModelKernelUnits::mm; rmin[4] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[4] = r0 + 28.5*GeoModelKernelUnits::mm;
+		zplane[5] = 48.*GeoModelKernelUnits::mm; rmin[5] = r0 + 8.5*GeoModelKernelUnits::mm; rmax[5] = r0 + 28.5*GeoModelKernelUnits::mm;
 	} else if(id == "FrontOuterRing"){
-		double r0 = 1961.*CLHEP::mm-7.*CLHEP::mm; // ROuter = inner radius of the outer ring
+		double r0 = 1961.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm; // ROuter = inner radius of the outer ring
 		zplane.resize(7);  rmin.resize(7);    rmax.resize(7);
-		zplane[0] =   0. *CLHEP::mm; rmin[0] = r0 +  0.*CLHEP::mm; rmax[0] = r0 + 111.*CLHEP::mm;
-		zplane[1] =   5. *CLHEP::mm; rmin[1] = r0 +  0.*CLHEP::mm; rmax[1] = r0 + 116.*CLHEP::mm;
-		zplane[2] =  20. *CLHEP::mm; rmin[2] = r0 +  0.*CLHEP::mm; rmax[2] = r0 + 116.*CLHEP::mm;
-		zplane[3] =  20. *CLHEP::mm; rmin[3] = r0 + 62.*CLHEP::mm; rmax[3] = r0 + 116.*CLHEP::mm;
-		zplane[4] =  63.3*CLHEP::mm; rmin[4] = r0 + 62.*CLHEP::mm; rmax[4] = r0 + 116.*CLHEP::mm;
-		zplane[5] = 115.2*CLHEP::mm; rmin[5] = r0 + 90.*CLHEP::mm; rmax[5] = r0 + 116.*CLHEP::mm;
-		zplane[6] = 144. *CLHEP::mm; rmin[6] = r0 + 90.*CLHEP::mm; rmax[6] = r0 + 116.*CLHEP::mm;
+		zplane[0] =   0. *GeoModelKernelUnits::mm; rmin[0] = r0 +  0.*GeoModelKernelUnits::mm; rmax[0] = r0 + 111.*GeoModelKernelUnits::mm;
+		zplane[1] =   5. *GeoModelKernelUnits::mm; rmin[1] = r0 +  0.*GeoModelKernelUnits::mm; rmax[1] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[2] =  20. *GeoModelKernelUnits::mm; rmin[2] = r0 +  0.*GeoModelKernelUnits::mm; rmax[2] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[3] =  20. *GeoModelKernelUnits::mm; rmin[3] = r0 + 62.*GeoModelKernelUnits::mm; rmax[3] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[4] =  63.3*GeoModelKernelUnits::mm; rmin[4] = r0 + 62.*GeoModelKernelUnits::mm; rmax[4] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[5] = 115.2*GeoModelKernelUnits::mm; rmin[5] = r0 + 90.*GeoModelKernelUnits::mm; rmax[5] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[6] = 144. *GeoModelKernelUnits::mm; rmin[6] = r0 + 90.*GeoModelKernelUnits::mm; rmax[6] = r0 + 116.*GeoModelKernelUnits::mm;
 	} else if(id == "FrontOuterLongBar"){
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =  0.*CLHEP::mm; rmin[0] = 1969.7*CLHEP::mm; rmax[0] = 2016.*CLHEP::mm;
-		zplane[1] =  1.*CLHEP::mm; rmin[1] = 1969.7*CLHEP::mm; rmax[1] = 2016.*CLHEP::mm;
-		zplane[2] =  1.*CLHEP::mm; rmin[2] =  652. *CLHEP::mm; rmax[2] = 2016.*CLHEP::mm;
-		zplane[3] = 21.*CLHEP::mm; rmin[3] =  652. *CLHEP::mm; rmax[3] = 2016.*CLHEP::mm;
+		zplane[0] =  0.*GeoModelKernelUnits::mm; rmin[0] = 1969.7*GeoModelKernelUnits::mm; rmax[0] = 2016.*GeoModelKernelUnits::mm;
+		zplane[1] =  1.*GeoModelKernelUnits::mm; rmin[1] = 1969.7*GeoModelKernelUnits::mm; rmax[1] = 2016.*GeoModelKernelUnits::mm;
+		zplane[2] =  1.*GeoModelKernelUnits::mm; rmin[2] =  652. *GeoModelKernelUnits::mm; rmax[2] = 2016.*GeoModelKernelUnits::mm;
+		zplane[3] = 21.*GeoModelKernelUnits::mm; rmin[3] =  652. *GeoModelKernelUnits::mm; rmax[3] = 2016.*GeoModelKernelUnits::mm;
                     //2020-46.3 ; RMiddle+40.//RMiddle+8+(lengthofbar=1398)
 	} else if(id == "BackOuterRing"){
-		double r0 = 1961.*CLHEP::mm-7.*CLHEP::mm;
+		double r0 = 1961.*GeoModelKernelUnits::mm-7.*GeoModelKernelUnits::mm;
 		zplane.resize(7);  rmin.resize(7);    rmax.resize(7);
-		zplane[0] =   0.*CLHEP::mm; rmin[0] = r0 +  0.*CLHEP::mm; rmax[0] = r0 + 111.*CLHEP::mm;
-		zplane[1] =   5.*CLHEP::mm; rmin[1] = r0 +  0.*CLHEP::mm; rmax[1] = r0 + 116.*CLHEP::mm;
-		zplane[2] =  15.*CLHEP::mm; rmin[2] = r0 +  0.*CLHEP::mm; rmax[2] = r0 + 116.*CLHEP::mm;
-		zplane[3] =  15.*CLHEP::mm; rmin[3] = r0 + 62.*CLHEP::mm; rmax[3] = r0 + 116.*CLHEP::mm;
-		zplane[4] =  41.*CLHEP::mm; rmin[4] = r0 + 62.*CLHEP::mm; rmax[4] = r0 + 116.*CLHEP::mm;
-		zplane[5] =  41.*CLHEP::mm; rmin[5] = r0 + 90.*CLHEP::mm; rmax[5] = r0 + 116.*CLHEP::mm;
-		zplane[6] = 139.*CLHEP::mm; rmin[6] = r0 + 90.*CLHEP::mm; rmax[6] = r0 + 116.*CLHEP::mm;
+		zplane[0] =   0.*GeoModelKernelUnits::mm; rmin[0] = r0 +  0.*GeoModelKernelUnits::mm; rmax[0] = r0 + 111.*GeoModelKernelUnits::mm;
+		zplane[1] =   5.*GeoModelKernelUnits::mm; rmin[1] = r0 +  0.*GeoModelKernelUnits::mm; rmax[1] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[2] =  15.*GeoModelKernelUnits::mm; rmin[2] = r0 +  0.*GeoModelKernelUnits::mm; rmax[2] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[3] =  15.*GeoModelKernelUnits::mm; rmin[3] = r0 + 62.*GeoModelKernelUnits::mm; rmax[3] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[4] =  41.*GeoModelKernelUnits::mm; rmin[4] = r0 + 62.*GeoModelKernelUnits::mm; rmax[4] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[5] =  41.*GeoModelKernelUnits::mm; rmin[5] = r0 + 90.*GeoModelKernelUnits::mm; rmax[5] = r0 + 116.*GeoModelKernelUnits::mm;
+		zplane[6] = 139.*GeoModelKernelUnits::mm; rmin[6] = r0 + 90.*GeoModelKernelUnits::mm; rmax[6] = r0 + 116.*GeoModelKernelUnits::mm;
 	} else if(id == "BackOuterLongBar"){
 		zplane.resize(4);  rmin.resize(4);    rmax.resize(4);
-		zplane[0] =  0.*CLHEP::mm; rmin[0] = 1969.7*CLHEP::mm; rmax[0] = 2016.*CLHEP::mm;
-		zplane[1] =  1.*CLHEP::mm; rmin[1] = 1969.7*CLHEP::mm; rmax[1] = 2016.*CLHEP::mm;
-		zplane[2] =  1.*CLHEP::mm; rmin[2] =  736.5*CLHEP::mm; rmax[2] = 2016.*CLHEP::mm;
-		zplane[3] = 21.*CLHEP::mm; rmin[3] =  736.5*CLHEP::mm; rmax[3] = 2016.*CLHEP::mm;
+		zplane[0] =  0.*GeoModelKernelUnits::mm; rmin[0] = 1969.7*GeoModelKernelUnits::mm; rmax[0] = 2016.*GeoModelKernelUnits::mm;
+		zplane[1] =  1.*GeoModelKernelUnits::mm; rmin[1] = 1969.7*GeoModelKernelUnits::mm; rmax[1] = 2016.*GeoModelKernelUnits::mm;
+		zplane[2] =  1.*GeoModelKernelUnits::mm; rmin[2] =  736.5*GeoModelKernelUnits::mm; rmax[2] = 2016.*GeoModelKernelUnits::mm;
+		zplane[3] = 21.*GeoModelKernelUnits::mm; rmin[3] =  736.5*GeoModelKernelUnits::mm; rmax[3] = 2016.*GeoModelKernelUnits::mm;
 	} else {
 		throw std::runtime_error("EMECSupportConstruction: wrong Pcone id");
 	}
@@ -706,14 +706,14 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 	GeoTubs *shapeFOB = new GeoTubs(rminFOB, rmaxFOB, dzFOB, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFOB = new GeoLogVol(name, shapeFOB, m_LAr);
 	GeoPhysVol *physFOB = new GeoPhysVol(logicalFOB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposFOB)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposFOB)));
 	motherPhysical->add(physFOB);
 
 	const int number_of_modules = 8;
-	const double moduldfi = CLHEP::twopi / number_of_modules;
+	const double moduldfi = GeoModelKernelUnits::twopi / number_of_modules;
 	const int nofabs = (*m_DB_EmecWheelParameters)[1]->getInt("NABS");
 	const int nofdiv = nofabs / number_of_modules;
-	const double dfi = CLHEP::twopi / nofabs;
+	const double dfi = GeoModelKernelUnits::twopi / nofabs;
   //define a fi section including one absorber and electrode
 	name = m_BaseName + "FrontOuterBarrette::Module::Phidiv";
 	GeoTubs *shapeFOBMP = new GeoTubs(rminFOB, rmaxFOB, dzFOB, -dfi/4., dfi);
@@ -731,7 +731,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 	GeoBox *shapeFOBA = new GeoBox(dx, dy, dzFOB);
 	GeoLogVol *logicalFOBA = new GeoLogVol(name, shapeFOBA, m_G10FeOuter);
 	GeoPhysVol *physFOBA = new GeoPhysVol(logicalFOBA);
-	physFOBMP->add(new GeoTransform(HepGeom::TranslateX3D(r0A)));
+	physFOBMP->add(new GeoTransform(GeoTrf::TranslateX3D(r0A)));
 	physFOBMP->add(physFOBA);
 
 	name = m_BaseName + "FrontOuterBarrette::Ele";   // piece of electrode
@@ -745,7 +745,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 	GeoBox *shapeFOBE = new GeoBox(dx, dy, dzFOB);
 	GeoLogVol *logicalFOBE = new GeoLogVol(name, shapeFOBE, m_Kapton_Cu);
 	GeoPhysVol *physFOBE = new GeoPhysVol(logicalFOBE);
-	physFOBMP->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(dfi/2.), CLHEP::Hep3Vector(x0,y0,0.))));
+	physFOBMP->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
 	physFOBMP->add(physFOBE);
 
 	if(m_isModule){
@@ -753,7 +753,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < nofdiv - 1; ++ i){
 			double fi = m_PhiStart + dfi/2. + i * dfi;
 			physFOB->add(new GeoIdentifierTag(i));
-			physFOB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFOB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFOB->add(physFOBMP);
 		}
 		name = m_BaseName + "FrontOuterBarrette::Abs";
@@ -761,7 +761,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 		x0 = r0A*cos(fi);
 		y0 = r0A*sin(fi);
 		physFOB->add(new GeoIdentifierTag(nofdiv-1));
-		physFOB->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(fi), CLHEP::Hep3Vector(x0,y0,0.))));
+		physFOB->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
 		physFOB->add(physFOBA);
 	} else {
   // in case one wants to build the whole wheel:
@@ -775,7 +775,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < nofdiv; ++ i){
 			double fi = i * dfi;
 			physFOBM->add(new GeoIdentifierTag(i));
-			physFOBM->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFOBM->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFOBM->add(physFOBMP);
 		}
       //position modules into Barrette mother to create the full wheel
@@ -783,7 +783,7 @@ void EMECSupportConstruction::put_front_outer_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < number_of_modules; ++ i){
 			double fi = dfi/2.+ i * moduldfi;
 			physFOB->add(new GeoIdentifierTag(i));
-			physFOB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFOB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFOB->add(physFOBM);
 		}
 	}
@@ -804,14 +804,14 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 	GeoTubs *shapeFIB = new GeoTubs(rminFIB, rmaxFIB, dzFIB, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFIB = new GeoLogVol(name, shapeFIB, m_LAr);
 	GeoPhysVol *physFIB = new GeoPhysVol(logicalFIB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposFIB)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposFIB)));
 	motherPhysical->add(physFIB);
 
 	const int number_of_modules = 8;
-	const double moduldfi = CLHEP::twopi / number_of_modules;
+	const double moduldfi = GeoModelKernelUnits::twopi / number_of_modules;
 	const int nofabs = (*m_DB_EmecWheelParameters)[0]->getInt("NABS");
 	const int nofdiv = nofabs / number_of_modules;
-	const double dfi = CLHEP::twopi / nofabs;
+	const double dfi = GeoModelKernelUnits::twopi / nofabs;
 
 	name = m_BaseName + "FrontInnerBarrette::Module::Phidiv";
 	GeoTubs *shapeFIBMP = new GeoTubs(rminFIB,rmaxFIB,dzFIB, -dfi/4., dfi);
@@ -828,7 +828,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 	GeoBox *shapeFIBA = new GeoBox(dx, dy, dzFIB);
 	GeoLogVol *logicalFIBA = new GeoLogVol(name, shapeFIBA, m_G10FeInner);
 	GeoPhysVol *physFIBA = new GeoPhysVol(logicalFIBA);
-	physFIBMP->add(new GeoTransform(HepGeom::TranslateX3D(r0A)));
+	physFIBMP->add(new GeoTransform(GeoTrf::TranslateX3D(r0A)));
 	physFIBMP->add(physFIBA);
 
 	name = m_BaseName + "FrontInnerBarrette::Ele";   // piece of electrode
@@ -842,7 +842,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 	GeoBox *shapeFIBE = new GeoBox(dx, dy, dzFIB);
 	GeoLogVol *logicalFIBE = new GeoLogVol(name, shapeFIBE, m_Kapton_Cu);
 	GeoPhysVol *physFIBE = new GeoPhysVol(logicalFIBE);
-	physFIBMP->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(dfi/2.), CLHEP::Hep3Vector(x0,y0,0.))));
+	physFIBMP->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
 	physFIBMP->add(physFIBE);
 
 	if(m_isModule){
@@ -850,7 +850,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < nofdiv - 1; ++ i){
 			double fi = m_PhiStart + dfi/2. + i * dfi;
 			physFIB->add(new GeoIdentifierTag(i));
-			physFIB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFIB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFIB->add(physFIBMP);
 		}
 		name = m_BaseName + "FrontInnerBarrette::Abs";
@@ -858,7 +858,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 		x0 = r0A * cos(fi);
 		y0 = r0A * sin(fi);
 		physFIB->add(new GeoIdentifierTag(nofdiv-1));
-		physFIB->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(fi), CLHEP::Hep3Vector(x0,y0,0.))));
+		physFIB->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
 		physFIB->add(physFIBA);
 	} else {
   // in case one wants to build the whole wheel:
@@ -871,7 +871,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < nofdiv; ++ i){
 			double fi = i * dfi;
 			physFIBM->add(new GeoIdentifierTag(i));
-			physFIBM->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFIBM->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFIBM->add(physFIBMP);
 		}
      //position modules into Barrette mother to create the full wheel
@@ -879,7 +879,7 @@ void EMECSupportConstruction::put_front_inner_barettes(GeoPhysVol *motherPhysica
 		for(int i = 0; i < number_of_modules; ++ i){
 			double fi = dfi/2.+ i * moduldfi;
 			physFIB->add(new GeoIdentifierTag(i));
-			physFIB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physFIB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physFIB->add(physFIBM);
 		}
 	}
@@ -901,14 +901,14 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 	GeoTubs *shapeBOB = new GeoTubs(rminBOB, rmaxBOB, dzBOB, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBOB = new GeoLogVol(name, shapeBOB, m_LAr);
 	GeoPhysVol *physBOB = new GeoPhysVol(logicalBOB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposBOB)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposBOB)));
 	motherPhysical->add(physBOB);
 
 	const int number_of_modules = 8;
-	const double moduldfi = CLHEP::twopi / number_of_modules;
+	const double moduldfi = GeoModelKernelUnits::twopi / number_of_modules;
 	int nofabs = (*m_DB_EmecWheelParameters)[1]->getInt("NABS");
 	int nofdiv = nofabs / number_of_modules;
-	double dfi = CLHEP::twopi / nofabs;
+	double dfi = GeoModelKernelUnits::twopi / nofabs;
 
 	name = m_BaseName + "BackOuterBarrette::Module::Phidiv";
 	GeoTubs *shapeBOBMP = new GeoTubs(rminBOB, rmaxBOB, dzBOB, -dfi/4., dfi);
@@ -925,7 +925,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 	GeoBox *shapeBOBA = new GeoBox(dx, dy, dzBOB);
 	GeoLogVol *logicalBOBA = new GeoLogVol(name, shapeBOBA, m_G10FeOuter);
 	GeoPhysVol *physBOBA = new GeoPhysVol(logicalBOBA);
-	physBOBMP->add(new GeoTransform(HepGeom::TranslateX3D(r0A)));
+	physBOBMP->add(new GeoTransform(GeoTrf::TranslateX3D(r0A)));
 	physBOBMP->add(physBOBA);
 
 	name = m_BaseName + "BackOuterBarrette::Ele";   // piece of electrode
@@ -939,7 +939,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 	GeoBox *shapeBOBE = new GeoBox(dx, dy, dzBOB);
 	GeoLogVol *logicalBOBE = new GeoLogVol(name, shapeBOBE, m_Kapton_Cu);
 	GeoPhysVol *physBOBE = new GeoPhysVol(logicalBOBE);
-	physBOBMP->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(dfi/2.), CLHEP::Hep3Vector(x0,y0,0.))));
+	physBOBMP->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
 	physBOBMP->add(physBOBE);
 
 	if(m_isModule){
@@ -948,7 +948,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < nofdiv - 1; ++ i){
 			double fi = m_PhiStart + dfi/2. + i * dfi;
 			physBOB->add(new GeoIdentifierTag(i));
-			physBOB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBOB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physBOB->add(physBOBMP);
 		}
 		name = m_BaseName + "BackOuterBarrette::Abs";
@@ -956,7 +956,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 		x0 = r0A * cos(fi);
 		y0 = r0A * sin(fi);
 		physBOB->add(new GeoIdentifierTag(nofdiv - 1));
-		physBOB->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(fi), CLHEP::Hep3Vector(x0,y0,0.))));
+		physBOB->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
 		physBOB->add(physBOBA);
    } else {
   // in case one wants to build the whole wheel:
@@ -970,7 +970,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < nofdiv; ++ i){
 			double fi = dfi * i;
 			physBOBM->add(new GeoIdentifierTag(i));
-			physBOBM->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBOBM->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physBOBM->add(physBOBMP);
 		}
      //position modules into Barrette mother to create the full wheel
@@ -978,7 +978,7 @@ void EMECSupportConstruction::put_back_outer_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < number_of_modules; ++ i){
 			double fi = dfi/2.+ i * moduldfi;
 			physBOB->add(new GeoIdentifierTag(i));
-			physBOB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBOB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physBOB->add(physBOBM);
 		}
 	}
@@ -992,21 +992,21 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 	map_t numbers = getNumbersMap(m_DB_numbers, id);
 
 	std::string name = m_BaseName + id;
-	double rminBIB = getNumber(m_DB_tubes, tubes, id, "RMIN", 357.5-1.+40.5);    //RInner +40.5// -1.CLHEP::mm for cold
+	double rminBIB = getNumber(m_DB_tubes, tubes, id, "RMIN", 357.5-1.+40.5);    //RInner +40.5// -1.GeoModelKernelUnits::mm for cold
 	double rmaxBIB = getNumber(m_DB_tubes, tubes, id, "RMAX", 699.-2.5-40.);     //RMiddle-40   //-2.5mm for cold
 	double dzBIB = getNumber(m_DB_tubes, tubes, id, "DZ", 11. / 2);
 	double zposBIB = getNumber(m_DB_numbers, numbers, "Z0", "PARVALUE", 44.) + dzBIB;
 	GeoTubs *shapeBIB = new GeoTubs(rminBIB, rmaxBIB, dzBIB, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBIB = new GeoLogVol(name, shapeBIB, m_LAr);
 	GeoPhysVol *physBIB = new GeoPhysVol(logicalBIB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposBIB)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposBIB)));
 	motherPhysical->add(physBIB);
 
 	const int number_of_modules = 8;
-	const double moduldfi = CLHEP::twopi / number_of_modules;
+	const double moduldfi = GeoModelKernelUnits::twopi / number_of_modules;
 	const int nofabs = (*m_DB_EmecWheelParameters)[0]->getInt("NABS");
 	const int nofdiv = nofabs / number_of_modules;
-	const double dfi = CLHEP::twopi / nofabs;
+	const double dfi = GeoModelKernelUnits::twopi / nofabs;
 
 	name = m_BaseName + "BackInnerBarrette::Module::Phidiv";
 	GeoTubs *shapeBIBMP = new GeoTubs(rminBIB, rmaxBIB, dzBIB, -dfi/4., dfi);
@@ -1025,7 +1025,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 	GeoBox *shapeBIBA = new GeoBox(dx, dy, dzBIB);
 	GeoLogVol *logicalBIBA = new GeoLogVol(name, shapeBIBA, m_G10FeInner);
 	GeoPhysVol *physBIBA = new GeoPhysVol(logicalBIBA);
-	physBIBMP->add(new GeoTransform(HepGeom::TranslateX3D(r0A)));
+	physBIBMP->add(new GeoTransform(GeoTrf::TranslateX3D(r0A)));
 	physBIBMP->add(physBIBA);
 
 	id = "BackInnerBarrette::Ele";   // piece of electrode
@@ -1040,7 +1040,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 	GeoBox *shapeBIBE = new GeoBox(dx, dy, dzBIB);
 	GeoLogVol *logicalBIBE = new GeoLogVol(name, shapeBIBE, m_Kapton_Cu);
 	GeoPhysVol *physBIBE = new GeoPhysVol(logicalBIBE);
-	physBIBMP->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(dfi*0.5), CLHEP::Hep3Vector(x0, y0, 0.))));
+	physBIBMP->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0, y0, 0.)*GeoTrf::RotateZ3D(dfi*0.5))));
 	physBIBMP->add(physBIBE);
 
 	if(m_isModule){
@@ -1060,7 +1060,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < nofdiv - 1; ++ i){
 			double fi = m_PhiStart + dfi/2. + i * dfi;
 			physBIB->add(new GeoIdentifierTag(i));
-			physBIB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBIB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physBIB->add(physBIBMP);
 		}
 		name = m_BaseName + "BackInnerBarrette::Abs";
@@ -1068,7 +1068,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 		x0 = r0A*cos(fi);
 		y0 = r0A*sin(fi);
 		physBIB->add(new GeoIdentifierTag(nofdiv - 1));
-		physBIB->add(new GeoTransform(HepGeom::Transform3D(CLHEP::HepRotationZ(fi),CLHEP::Hep3Vector(x0, y0, 0.))));
+		physBIB->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0, y0, 0.)*GeoTrf::RotateZ3D(fi))));
 		physBIB->add(physBIBA);
 	} else {
   // in case one wants to build the whole wheel:
@@ -1082,7 +1082,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < nofdiv; ++ i){
 			double fi = dfi * i;
 			physBIBM->add(new GeoIdentifierTag(i));
-			physBIBM->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBIBM->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 			physBIBM->add(physBIBMP);
 		}
      //position modules into Barrette mother to create the full wheel
@@ -1090,7 +1090,7 @@ void EMECSupportConstruction::put_back_inner_barettes(GeoPhysVol *motherPhysical
 		for(int i = 0; i < number_of_modules; ++ i){
 			double fi = dfi*0.5 + i * moduldfi;
 			physBIB->add(new GeoIdentifierTag(i));
-			physBIB->add(new GeoTransform(HepGeom::RotateZ3D(fi)));
+			physBIB->add(new GeoTransform(GeoTrf::RotateZ3D(fi)));
 		physBIB->add(physBIBM);
 		}
 	}
@@ -1101,9 +1101,9 @@ GeoPhysVol* EMECSupportConstruction::outer_envelope(void) const
 	map_t tubes = getMap(m_DB_tubes, "TUBENAME");
 	std::string id = "OuterTransversalBars";
 	std::string name = m_BaseName + id;
-	double rminOTB = getNumber(m_DB_tubes, tubes, id, "RMIN", (2034. + 2.)*CLHEP::mm);
-	double rmaxOTB = getNumber(m_DB_tubes, tubes, id, "RMAX", rminOTB + 3.*CLHEP::mm);
-	double dzOTB = getNumber(m_DB_tubes, tubes, id, "DZ", 201.*CLHEP::mm);
+	double rminOTB = getNumber(m_DB_tubes, tubes, id, "RMIN", (2034. + 2.)*GeoModelKernelUnits::mm);
+	double rmaxOTB = getNumber(m_DB_tubes, tubes, id, "RMAX", rminOTB + 3.*GeoModelKernelUnits::mm);
+	double dzOTB = getNumber(m_DB_tubes, tubes, id, "DZ", 201.*GeoModelKernelUnits::mm);
 	GeoTubs* shapeOTB = new GeoTubs(rminOTB, rmaxOTB, dzOTB, m_PhiStart, m_PhiSize);
 	GeoLogVol* logicalOTB = new GeoLogVol(name, shapeOTB, m_Gten);
 	GeoPhysVol* physOTB = new GeoPhysVol(logicalOTB);
@@ -1111,16 +1111,16 @@ GeoPhysVol* EMECSupportConstruction::outer_envelope(void) const
 	id = "TopIndexingRing";
 	name = m_BaseName + id;
 	double rminTIR = getNumber(m_DB_tubes, tubes, id, "RMIN", rmaxOTB);
-	double rmaxTIR = getNumber(m_DB_tubes, tubes, id, "RMAX", rminTIR + 9.*CLHEP::mm);
-	double dzTIR = getNumber(m_DB_tubes, tubes, id, "DZ", 10.*CLHEP::mm);
+	double rmaxTIR = getNumber(m_DB_tubes, tubes, id, "RMAX", rminTIR + 9.*GeoModelKernelUnits::mm);
+	double dzTIR = getNumber(m_DB_tubes, tubes, id, "DZ", 10.*GeoModelKernelUnits::mm);
 	GeoTubs* shapeTIR = new GeoTubs(rminTIR, rmaxTIR, dzTIR, m_PhiStart, m_PhiSize);
 	GeoLogVol* logicalTIR = new GeoLogVol(name, shapeTIR, m_Alu);
 	GeoPhysVol* physTIR = new GeoPhysVol(logicalTIR);
 	id += "::Hole";
 	name = m_BaseName + id;
-	double dzTIRH = getNumber(m_DB_tubes, tubes, id, "DZ", 4.5*CLHEP::mm);
+	double dzTIRH = getNumber(m_DB_tubes, tubes, id, "DZ", 4.5*GeoModelKernelUnits::mm);
 	double rmaxTIRH = getNumber(m_DB_tubes, tubes, id, "RMAX", rmaxTIR);
-	double rminTIRH = getNumber(m_DB_tubes, tubes, id, "RMIN", rmaxTIRH - 2.*CLHEP::mm);
+	double rminTIRH = getNumber(m_DB_tubes, tubes, id, "RMIN", rmaxTIRH - 2.*GeoModelKernelUnits::mm);
 	GeoTubs* shapeTIRH = new GeoTubs(rminTIRH, rmaxTIRH, dzTIRH, m_PhiStart, m_PhiSize);
 	GeoLogVol* logicalTIRH = new GeoLogVol(name, shapeTIRH, m_LAr);
 	GeoPhysVol* physTIRH = new GeoPhysVol(logicalTIRH);
@@ -1155,22 +1155,22 @@ GeoPhysVol* EMECSupportConstruction::outer_envelope(void) const
 		double dfi = M_PI / number_of_stretchers;
 		double dfiNS = shapeNS->getDPhi();
 		motherPhysical->add(new GeoIdentifierTag(1));
-		motherPhysical->add(new GeoTransform(HepGeom::RotateZ3D(dfi - dfiNS*0.5)));
+		motherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(dfi - dfiNS*0.5)));
 		motherPhysical->add(physNS);
 		motherPhysical->add(new GeoIdentifierTag(2));
-		motherPhysical->add(new GeoTransform(HepGeom::RotateZ3D(-dfi + dfiNS*0.5)));
+		motherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(-dfi + dfiNS*0.5)));
 		motherPhysical->add(physNS);
 	} else {
-		double dfi = CLHEP::twopi / number_of_stretchers;
+		double dfi = GeoModelKernelUnits::twopi / number_of_stretchers;
 		int copyno = 0;
 		for(int i = 0; i < number_of_stretchers; ++ i, ++ copyno){
 			double fiW = i * dfi;
 			motherPhysical->add(new GeoIdentifierTag(copyno));
-			motherPhysical->add(new GeoTransform(HepGeom::RotateZ3D(fiW)));
+			motherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(fiW)));
 			motherPhysical->add(physWS);
 			double fiN = (i + 0.5) * dfi;
 			motherPhysical->add(new GeoIdentifierTag(copyno));
-			motherPhysical->add(new GeoTransform(HepGeom::RotateZ3D(fiN)));
+			motherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(fiN)));
 			motherPhysical->add(physNS);
 		}
 	}
@@ -1184,26 +1184,26 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
 	map_t numbers = getNumbersMap(m_DB_numbers, id);
 	std::string name0 = m_BaseName + id;
 
-//	double dz = LArWheelCalculator::GetWheelThickness() * 0.5; //257.*CLHEP::mm;     //zWheelThickness/2.
-	double dz = 0.5 * (*m_DB_mn)[0]->getDouble("ACTIVELENGTH")*CLHEP::mm;
+//	double dz = LArWheelCalculator::GetWheelThickness() * 0.5; //257.*GeoModelKernelUnits::mm;     //zWheelThickness/2.
+	double dz = 0.5 * (*m_DB_mn)[0]->getDouble("ACTIVELENGTH")*GeoModelKernelUnits::mm;
 	try {
-		dz += (*m_DB_mn)[0]->getDouble("STRAIGHTSTARTSECTION")*CLHEP::mm;
+		dz += (*m_DB_mn)[0]->getDouble("STRAIGHTSTARTSECTION")*GeoModelKernelUnits::mm;
 	}
 	catch(...){
-		dz += 2.*CLHEP::mm;
+		dz += 2.*GeoModelKernelUnits::mm;
 		std::ostringstream tmp("cannot get STRAIGHTSTARTSECTION from DB");
 		printWarning(tmp);
 	}
 
-	double r1min = getNumber(m_DB_numbers, numbers, "R1MIN", "PARVALUE", (292.-1.)*CLHEP::mm); //lower radius of front inner ring, -1mm for cold
-	double r2min = getNumber(m_DB_numbers, numbers, "R2MIN", "PARVALUE", (333.-1.)*CLHEP::mm); //lower radius of back  inner ring, -1mm for cold
+	double r1min = getNumber(m_DB_numbers, numbers, "R1MIN", "PARVALUE", (292.-1.)*GeoModelKernelUnits::mm); //lower radius of front inner ring, -1mm for cold
+	double r2min = getNumber(m_DB_numbers, numbers, "R2MIN", "PARVALUE", (333.-1.)*GeoModelKernelUnits::mm); //lower radius of back  inner ring, -1mm for cold
                                   //RInnerFront-43.5;RInnerBack-24.5
 	const double talpha = (r2min - r1min)*0.5/dz;
 	const double calpha = 2.*dz/sqrt(pow(2.*dz,2.)+pow(r2min-r1min,2.));
         const double inv_calpha = 1. / calpha;
 	const double alpha = atan(talpha);
-	double surfthick = getNumber(m_DB_numbers, numbers, "surfthick", "PARVALUE", 1.*CLHEP::mm);       // thickness of the cone shell
-	double barthick = getNumber(m_DB_numbers, numbers, "barthick", "PARVALUE", 5.*CLHEP::mm);       // thickness of the Alu bars
+	double surfthick = getNumber(m_DB_numbers, numbers, "surfthick", "PARVALUE", 1.*GeoModelKernelUnits::mm);       // thickness of the cone shell
+	double barthick = getNumber(m_DB_numbers, numbers, "barthick", "PARVALUE", 5.*GeoModelKernelUnits::mm);       // thickness of the Alu bars
 	double r1max     = pow(barthick/2.,2.)+ pow(r1min+(surfthick+barthick)*inv_calpha,2.);
 			r1max     = sqrt(r1max)+surfthick*inv_calpha;
 	double r2max     = r2min+(r1max-r1min);
@@ -1243,7 +1243,7 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
 //-------------------------/
 
 	const int    nofmodul  =   8;
-	const double moduldphi = CLHEP::twopi / nofmodul;
+	const double moduldphi = GeoModelKernelUnits::twopi / nofmodul;
   GeoCons*     shapeIACP  = new GeoCons(
        	                      r1min+surfthick*inv_calpha,r2min+surfthick*inv_calpha,
                               r1max-surfthick*inv_calpha,r2max-surfthick*inv_calpha,
@@ -1260,7 +1260,7 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
   GeoLogVol* logicalIACAB= new GeoLogVol (name,shapeIACAB, m_Alu);
   GeoPhysVol*   physIACAB= new GeoPhysVol(logicalIACAB);
 
-  const double dphi = CLHEP::twopi / 256.;
+  const double dphi = GeoModelKernelUnits::twopi / 256.;
   const int    nbar = 9;
   const double phi[9]={-15.,-11.,-7.5,-4.,0.,4.,7.5,11.,15.}; // phipos of the bars
   const double r0=r1min+(surfthick+barthick/2.)*inv_calpha+dz*talpha;
@@ -1269,9 +1269,7 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
 		double fi=phi[i]*dphi;
 		double cfi=cos(fi);
 		double sfi=sin(fi);
-		physIACP->add(new GeoTransform(HepGeom::Transform3D(
-						   CLHEP::HepRotationZ(fi),
-						   CLHEP::Hep3Vector(r0*cfi,r0*sfi,0.))));
+		physIACP->add(new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(r0*cfi,r0*sfi,0.)*GeoTrf::RotateZ3D(fi))));
 		physIACP->add(physIACAB);
 	}
 
@@ -1279,7 +1277,7 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
   for(int i=0;i<nofmodul;i++){ // put modules into wheel
     double fi=(i+0.5)*moduldphi;
     physIAC->add( new GeoIdentifierTag(i));
-    physIAC->add( new GeoTransform(HepGeom::RotateZ3D(fi)));
+    physIAC->add( new GeoTransform(GeoTrf::RotateZ3D(fi)));
     physIAC->add(physIACP);
   }
 
@@ -1289,9 +1287,9 @@ GeoPhysVol* EMECSupportConstruction::inner_envelope(void) const
 //!!!!
 GeoPhysVol* EMECSupportConstruction::middle_envelope(void) const
 {
-	double dMechFocaltoWRP = (*m_DB_EmecGeometry)[0]->getDouble("Z1") *CLHEP::cm;
-	double LArEMECHalfCrack = (*m_DB_EmecGeometry)[0]->getDouble("DCRACK") *CLHEP::cm;
-	double LArTotalThickness = (*m_DB_EmecGeometry)[0]->getDouble("ETOT") *CLHEP::cm;
+	double dMechFocaltoWRP = (*m_DB_EmecGeometry)[0]->getDouble("Z1") *GeoModelKernelUnits::cm;
+	double LArEMECHalfCrack = (*m_DB_EmecGeometry)[0]->getDouble("DCRACK") *GeoModelKernelUnits::cm;
+	double LArTotalThickness = (*m_DB_EmecGeometry)[0]->getDouble("ETOT") *GeoModelKernelUnits::cm;
 
 	double eta_mid = (*m_DB_EmecWheelParameters)[0]->getDouble("ETAEXT");
 
@@ -1300,8 +1298,8 @@ GeoPhysVol* EMECSupportConstruction::middle_envelope(void) const
         const double inv_cosThetaMid = 1. / cosThetaMid;
 
 	double z0 = LArTotalThickness * 0.5 + dMechFocaltoWRP;
-	double length = 462.*CLHEP::mm;
-	double rthickness = 1.5*CLHEP::mm * inv_cosThetaMid;
+	double length = 462.*GeoModelKernelUnits::mm;
+	double rthickness = 1.5*GeoModelKernelUnits::mm * inv_cosThetaMid;
 
 	std::string name = m_BaseName + "InnerTransversalBars";
 	double dz = length * cosThetaMid * 0.5;
@@ -1327,7 +1325,7 @@ void EMECSupportConstruction::put_front_middle_ring(GeoPhysVol *motherPhysical)
 	GeoPcon *shapeFMR = getPcon(id);
 	GeoLogVol *logicalFMR = new GeoLogVol(name, shapeFMR, m_PermaliE730);
 	GeoPhysVol *physFMR = new GeoPhysVol(logicalFMR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFMR);
 
 	id = "FrontMiddleRing::LowerHole";
@@ -1369,7 +1367,7 @@ void EMECSupportConstruction::put_front_inner_ring(GeoPhysVol *motherPhysical) c
 	GeoPcon *shapeFIR = getPcon(id);
 	GeoLogVol *logicalFIR = new GeoLogVol(name, shapeFIR, m_Alu);
 	GeoPhysVol *physFIR = new GeoPhysVol(logicalFIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFIR);
 
 	id = "FrontInnerRing::Hole";
@@ -1402,7 +1400,7 @@ void EMECSupportConstruction::put_front_inner_longbar(GeoPhysVol *motherPhysical
 	GeoTubs *shapeFILB = new GeoTubs(rmin, rmax, dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFILB = new GeoLogVol(name,shapeFILB,m_Gten);
 	GeoPhysVol *physFILB = new GeoPhysVol(logicalFILB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFILB);
 }
 
@@ -1414,7 +1412,7 @@ void EMECSupportConstruction::put_back_middle_ring(GeoPhysVol *motherPhysical) c
 	GeoPcon *shapeBMR = getPcon(id);
 	GeoLogVol *logicalBMR = new GeoLogVol(name, shapeBMR, m_Alu);
 	GeoPhysVol *physBMR = new GeoPhysVol(logicalBMR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBMR);
 
 	id = "BackMiddleRing::LowerHole";
@@ -1456,7 +1454,7 @@ void EMECSupportConstruction::put_back_inner_ring(GeoPhysVol *motherPhysical) co
 	GeoPcon *shapeBIR = getPcon(id);
 	GeoLogVol *logicalBIR = new GeoLogVol(name, shapeBIR, m_Alu);
 	GeoPhysVol *physBIR = new GeoPhysVol(logicalBIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBIR);
 
 	id = "BackInnerRing::Hole";
@@ -1488,7 +1486,7 @@ void EMECSupportConstruction::put_back_inner_longbar(GeoPhysVol *motherPhysical)
 	GeoTubs *shapeBILB = new GeoTubs(rmin, rmax, dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBILB = new GeoLogVol(name, shapeBILB, m_Gten);
 	GeoPhysVol *physBILB = new GeoPhysVol(logicalBILB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBILB);
 }
 
@@ -1500,7 +1498,7 @@ void EMECSupportConstruction::put_front_outer_ring(GeoPhysVol *motherPhysical) c
 	GeoPcon *shapeFOR = getPcon(id);
 	GeoLogVol *logicalFOR = new GeoLogVol(name, shapeFOR, m_Alu);
 	GeoPhysVol *physFOR = new GeoPhysVol(logicalFOR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFOR);
 }
 
@@ -1512,7 +1510,7 @@ void EMECSupportConstruction::put_front_outer_longbar(GeoPhysVol *motherPhysical
 	GeoPcon *shapeFOLB = getPcon(id);
 	GeoLogVol *logicalFOLB = new GeoLogVol(name, shapeFOLB, m_Gten);
 	GeoPhysVol *physFOLB = new GeoPhysVol(logicalFOLB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFOLB);
 }
 
@@ -1539,14 +1537,14 @@ void EMECSupportConstruction::put_front_indexing_rings(GeoPhysVol *motherPhysica
 	GeoTubs *shapeFHIR = new GeoTubs(r0 + ring_rmin, r0 + ring_rmax, ring_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFHIR = new GeoLogVol(name, shapeFHIR, m_Alu);
 	GeoPhysVol *physFHIR = new GeoPhysVol(logicalFHIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFHIR);
 
 	name = m_BaseName + "FrontHighRIndexingRing::Hole";
 	GeoTubs *shapeFHIRH = new GeoTubs(r0 + hole_rmin, r0 + hole_rmax, hole_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFHIRH = new GeoLogVol(name, shapeFHIRH, m_LAr);
 	GeoPhysVol *physFHIRH = new GeoPhysVol(logicalFHIRH);
-	physFHIR->add(new GeoTransform(HepGeom::TranslateZ3D(z_hole + hole_dz)));
+	physFHIR->add(new GeoTransform(GeoTrf::TranslateZ3D(z_hole + hole_dz)));
 	physFHIR->add(physFHIRH);
 
   // the piece of long.bar on which indexing alu ring is sitting
@@ -1555,21 +1553,21 @@ void EMECSupportConstruction::put_front_indexing_rings(GeoPhysVol *motherPhysica
 	GeoTubs *shapeFHIRG = new GeoTubs(r0 + ring_rmin, r0 + ring_rmax, gten_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFHIRG = new GeoLogVol(name, shapeFHIRG, m_Gten);
 	GeoPhysVol *physFHIRG = new GeoPhysVol(logicalFHIRG);
-	physFHIR->add(new GeoTransform(HepGeom::TranslateZ3D(ring_dz - gten_dz)));
+	physFHIR->add(new GeoTransform(GeoTrf::TranslateZ3D(ring_dz - gten_dz)));
 	physFHIR->add(physFHIRG);
 
 	name = m_BaseName + "FrontLowRIndexingRing";
 	GeoTubs *shapeFLIR = new GeoTubs(r1 + ring_rmin, r1 + ring_rmax, ring_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFLIR = new GeoLogVol(name, shapeFLIR, m_Alu);
 	GeoPhysVol *physFLIR = new GeoPhysVol(logicalFLIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physFLIR);
 
 	name = m_BaseName + "FrontLowRIndexingRing::Hole";
 	GeoTubs *shapeFLIRH = new GeoTubs(r1 + hole_rmin, r1 + hole_rmax, hole_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFLIRH = new GeoLogVol(name, shapeFLIRH, m_LAr);
 	GeoPhysVol *physFLIRH = new GeoPhysVol(logicalFLIRH);
-	physFLIR->add(new GeoTransform(HepGeom::TranslateZ3D(z_hole + hole_dz)));
+	physFLIR->add(new GeoTransform(GeoTrf::TranslateZ3D(z_hole + hole_dz)));
 	physFLIR->add(physFLIRH);
 
 	name = m_BaseName + "FrontLowRIndexingRing::GTen"; //piece of long.bar
@@ -1577,7 +1575,7 @@ void EMECSupportConstruction::put_front_indexing_rings(GeoPhysVol *motherPhysica
 	GeoTubs *shapeFLIRG = new GeoTubs(r1 + ring_rmin, r1 + ring_rmax, gten_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalFLIRG = new GeoLogVol(name, shapeFLIRG, m_Gten);
 	GeoPhysVol *physFLIRG = new GeoPhysVol(logicalFLIRG);
-	physFLIR->add(new GeoTransform(HepGeom::TranslateZ3D(ring_dz - gten_dz)));
+	physFLIR->add(new GeoTransform(GeoTrf::TranslateZ3D(ring_dz - gten_dz)));
 	physFLIR->add(physFLIRG);
 }
 
@@ -1604,7 +1602,7 @@ void EMECSupportConstruction::put_back_indexing_rings(GeoPhysVol *motherPhysical
 	GeoTubs *shapeBHIR = new GeoTubs(r0 + ring_rmin, r0 + ring_rmax, ring_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBHIR = new GeoLogVol(name, shapeBHIR, m_Alu);
 	GeoPhysVol *physBHIR = new GeoPhysVol(logicalBHIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBHIR);
 
   // the piece of long.bar on which indexing alu ring is sitting
@@ -1613,21 +1611,21 @@ void EMECSupportConstruction::put_back_indexing_rings(GeoPhysVol *motherPhysical
 	GeoTubs *shapeBHIRG = new GeoTubs(r0 + ring_rmin, r0 + ring_rmax, gten_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBHIRG = new GeoLogVol(name, shapeBHIRG, m_Gten);
 	GeoPhysVol *physBHIRG = new GeoPhysVol(logicalBHIRG);
-	physBHIR->add(new GeoTransform(HepGeom::TranslateZ3D(ring_dz - gten_dz)));
+	physBHIR->add(new GeoTransform(GeoTrf::TranslateZ3D(ring_dz - gten_dz)));
 	physBHIR->add(physBHIRG);
 
 	name = m_BaseName + "BackHighRIndexingRing::Hole";
 	GeoTubs* shapeBHIRH = new GeoTubs(r0 + hole_rmin, r0 + hole_rmax, hole_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol* logicalBHIRH = new GeoLogVol(name, shapeBHIRH, m_LAr);
 	GeoPhysVol* physBHIRH = new GeoPhysVol(logicalBHIRH);
-	physBHIR->add(new GeoTransform(HepGeom::TranslateZ3D(z_hole + hole_dz)));
+	physBHIR->add(new GeoTransform(GeoTrf::TranslateZ3D(z_hole + hole_dz)));
 	physBHIR->add(physBHIRH);
 
 	name = m_BaseName + "BackLowRIndexingRing";
 	GeoTubs *shapeBLIR = new GeoTubs(r1 + ring_rmin, r1 + ring_rmax, ring_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBLIR = new GeoLogVol(name, shapeBLIR, m_Alu);
 	GeoPhysVol *physBLIR = new GeoPhysVol(logicalBLIR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBLIR);
 
 	name += "::GTen";
@@ -1635,14 +1633,14 @@ void EMECSupportConstruction::put_back_indexing_rings(GeoPhysVol *motherPhysical
 	GeoTubs *shapeBLIRG = new GeoTubs(r1 + ring_rmin, r1 + ring_rmax, gten_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBLIRG = new GeoLogVol(name, shapeBLIRG, m_Gten);
 	GeoPhysVol *physBLIRG = new GeoPhysVol(logicalBLIRG);
-	physBLIR->add(new GeoTransform(HepGeom::TranslateZ3D(ring_dz - gten_dz)));
+	physBLIR->add(new GeoTransform(GeoTrf::TranslateZ3D(ring_dz - gten_dz)));
 	physBLIR->add(physBLIRG);
 
 	name = m_BaseName + "BackLowRIndexingRing::Hole";
 	GeoTubs *shapeBLIRH = new GeoTubs(r1 + hole_rmin, r1 + hole_rmax, hole_dz, m_PhiStart, m_PhiSize);
 	GeoLogVol *logicalBLIRH = new GeoLogVol(name, shapeBLIRH, m_LAr);
 	GeoPhysVol *physBLIRH = new GeoPhysVol(logicalBLIRH);
-	physBLIR->add(new GeoTransform(HepGeom::TranslateZ3D(z_hole + hole_dz)));
+	physBLIR->add(new GeoTransform(GeoTrf::TranslateZ3D(z_hole + hole_dz)));
 	physBLIR->add(physBLIRH);
 }
 
@@ -1654,7 +1652,7 @@ void EMECSupportConstruction::put_back_outer_ring(GeoPhysVol *motherPhysical) co
 	GeoPcon *shapeBOR = getPcon(id);
 	GeoLogVol *logicalBOR = new GeoLogVol(name, shapeBOR, m_Alu);
 	GeoPhysVol *physBOR = new GeoPhysVol(logicalBOR);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBOR);
 }
 
@@ -1666,7 +1664,7 @@ void EMECSupportConstruction::put_back_outer_longbar(GeoPhysVol *motherPhysical)
 	GeoPcon *shapeBOLB = getPcon(id);
 	GeoLogVol *logicalBOLB = new GeoLogVol(name, shapeBOLB, m_Gten);
 	GeoPhysVol *physBOLB = new GeoPhysVol(logicalBOLB);
-	motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(z0)));
+	motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(z0)));
 	motherPhysical->add(physBOLB);
 }
 
@@ -1709,7 +1707,7 @@ void EMECSupportConstruction::put_front_outer_extracyl(GeoPhysVol *motherPhysica
               GeoLogVol  *logicCyl  = new GeoLogVol(name, solidCyl, mat);
               GeoPhysVol *physCyl   = new GeoPhysVol(logicCyl);
 
-              motherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(dz/2.)));
+              motherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(dz/2.)));
               motherPhysical->add(physCyl);
 
               std::cout<<"******************************************************"<<std::endl;
@@ -1799,7 +1797,7 @@ void EMECSupportConstruction::put_front_outer_electronics(GeoPhysVol *motherPhys
 		GeoBox *cu = new GeoBox(dx, dy, dz1);
 		GeoLogVol *cul = new GeoLogVol(name, cu, m_Copper);
 		GeoPhysVol *cup = new GeoPhysVol(cul);
-		mb_p[i]->add(new GeoTransform(HepGeom::TranslateZ3D(dz1 - mb_dz[i])));
+		mb_p[i]->add(new GeoTransform(GeoTrf::TranslateZ3D(dz1 - mb_dz[i])));
 		mb_p[i]->add(cup);
 
 		tmp.str("");
@@ -1837,10 +1835,8 @@ void EMECSupportConstruction::put_front_outer_electronics(GeoPhysVol *motherPhys
 		double phi = m_Position + (i - 2) * phi_size - phi_start;
 
 		GeoIdentifierTag* iTag = new GeoIdentifierTag(i);
-		GeoTransform* xf = new GeoTransform(
-			HepGeom::Transform3D(CLHEP::HepRotationZ(phi),CLHEP::Hep3Vector(0., 0., z_boards)));
-		GeoTransform* xf1 = new GeoTransform(
-			HepGeom::Transform3D(CLHEP::HepRotationZ(phi),CLHEP::Hep3Vector(0., 0., z_oc)));
+		GeoTransform* xf = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_boards)*GeoTrf::Transform3D(GeoTrf::RotateZ3D(phi))));
+		GeoTransform* xf1 = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_oc)*GeoTrf::RotateZ3D(phi)));
 
 		motherPhysical->add(iTag);
 		motherPhysical->add(xf);
@@ -1860,19 +1856,15 @@ void EMECSupportConstruction::put_front_outer_electronics(GeoPhysVol *motherPhys
 
 		for(int j = 0; j < 5; ++ j){
 			GeoTransform* xf2 = new GeoTransform(
-				HepGeom::Transform3D(HepGeom::RotateZ3D(phi)*HepGeom::Translate3D(mb_r[j], 0., z_mb - mb_dz[j])));
+				GeoTrf::Transform3D(GeoTrf::RotateZ3D(phi)*GeoTrf::Translate3D(mb_r[j], 0., z_mb - mb_dz[j])));
 			motherPhysical->add(iTag);
 			motherPhysical->add(xf2);
 			motherPhysical->add(mb_p[j]);
 		}
 
-		GeoTransform* xf3 = new GeoTransform(
-			HepGeom::Transform3D(CLHEP::HepRotationZ(m_Position + (i - 2) * phi_size + 0.5 * dphi_sc),
-			CLHEP::Hep3Vector(0., 0., z_soc)));
+		GeoTransform* xf3 = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_soc)*GeoTrf::RotateZ3D(m_Position + (i - 2) * phi_size + 0.5 * dphi_sc)));;
 
-		GeoTransform* xf4 = new GeoTransform(
-			HepGeom::Transform3D(CLHEP::HepRotationZ(m_Position + (i - 1) * phi_size - 0.5 * dphi_sc),
-			CLHEP::Hep3Vector(0., 0., z_soc)));
+		GeoTransform* xf4 = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_soc)*GeoTrf::RotateZ3D(m_Position + (i - 1) * phi_size - 0.5 * dphi_sc)));
 
 		motherPhysical->add(new GeoIdentifierTag(i * 2));
 		motherPhysical->add(xf3);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapCryostatConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapCryostatConstruction.cxx
index 36e803b82e2a346502a123be4350adaca5479eb5..50a89f47d88a1504359fb161f96e336f08cdcae6 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapCryostatConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapCryostatConstruction.cxx
@@ -32,6 +32,8 @@
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -41,17 +43,10 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-
-// For transforms:
-
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
-
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
@@ -75,7 +70,7 @@
 
 #include "LArGeoMiniFcal/MiniFcalConstruction.h"
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -304,18 +299,18 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
                 if(currentRecord->getString("CYL_LOCATION")=="Endcap"){
                   if(cylNumber  == 3 )
                     {
-                      rmin_warm=currentRecord->getDouble("RMIN")*CLHEP::cm;
-                      rmax_warm=currentRecord->getDouble("RMIN")*CLHEP::cm + currentRecord->getDouble("DR")*CLHEP::cm;
-                      dz_warm=currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
-                      zInCryostat_warm = currentRecord->getDouble("ZMIN")*CLHEP::cm + currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
+                      rmin_warm=currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm;
+                      rmax_warm=currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DR")*GeoModelKernelUnits::cm;
+                      dz_warm=currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
+                      zInCryostat_warm = currentRecord->getDouble("ZMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
                       wallfind=wallfind+1;
                     }
                   if(cylNumber  == 14 )
                     {
-                      rmin_cold=currentRecord->getDouble("RMIN")*CLHEP::cm;
-                      rmax_cold=currentRecord->getDouble("RMIN")*CLHEP::cm + currentRecord->getDouble("DR")*CLHEP::cm;
-                      dz_cold=currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
-                      zInCryostat_cold = currentRecord->getDouble("ZMIN")*CLHEP::cm + currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
+                      rmin_cold=currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm;
+                      rmax_cold=currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DR")*GeoModelKernelUnits::cm;
+                      dz_cold=currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
+                      zInCryostat_cold = currentRecord->getDouble("ZMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
                       wallfind=wallfind+1;
                     }
                 }
@@ -343,7 +338,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
                 const GeoLogVol *logicCyl = new GeoLogVol(cylName,solidCyl,mat);
                 GeoPhysVol      *physCyl  = new GeoPhysVol(logicCyl);
 
-                cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zpos)));
+                cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
                 cryoMotherPhysical->add(physCyl);
 
                 std::cout<<"**************************************************"<<std::endl;
@@ -393,11 +388,11 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	}
       
 	GeoTubs* solidCyl
-	  = new GeoTubs(currentRecord->getDouble("RMIN")*CLHEP::cm,
-			currentRecord->getDouble("RMIN")*CLHEP::cm + currentRecord->getDouble("DR")*CLHEP::cm,
-			currentRecord->getDouble("DZ")*CLHEP::cm / 2.,
+	  = new GeoTubs(currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("RMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DR")*GeoModelKernelUnits::cm,
+			currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.,
 			(double) 0.,
-			(double) 2.*M_PI*CLHEP::rad);
+			(double) 2.*M_PI*GeoModelKernelUnits::rad);
 	const GeoMaterial *material  = materialManager->getMaterial(currentRecord->getString("MATERIAL"));
       
 	if (!material) {
@@ -412,7 +407,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
       
 	GeoPhysVol* physCyl = new GeoPhysVol(logicCyl);
       
-	double zInCryostat = currentRecord->getDouble("ZMIN")*CLHEP::cm + currentRecord->getDouble("DZ")*CLHEP::cm / 2.;
+	double zInCryostat = currentRecord->getDouble("ZMIN")*GeoModelKernelUnits::cm + currentRecord->getDouble("DZ")*GeoModelKernelUnits::cm / 2.;
 	// Don't move the pump even if the rest of the cryostat moves.
 
 	//if ( cylNumber == 33 ) zInCryostat -= zEmec;
@@ -420,7 +415,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	// Place each cylinder.
       
 	cryoMotherPhysical->add(new GeoIdentifierTag(cylNumber));
-	cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zInCryostat)));
+	cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zInCryostat)));
       
 	// Front cold wall of Cryostat is a mother for Endcap Presampler 
 	if ( cylNumber == 14 ) {
@@ -432,13 +427,13 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	  GeoFullPhysVol* emecPSEnvelope = endcapPresamplerConstruction.Envelope();
 	  if ( emecPSEnvelope != 0 ) {
 	    // Get the position of the presampler from the geometry helper.
-	    double Zpos = 30.5*CLHEP::mm; 
+	    double Zpos = 30.5*GeoModelKernelUnits::mm; 
 	    
 	    // It is highly debateable whether the endcap presampler is 
 	    // alignable, but in any case we shall not align it here because
 	    // we need to completely redo it, anyway, since it does  not
 	    // even live  "in" this volume, not in real life anyway.
-	    GeoTransform *xfPs = new GeoTransform(HepGeom::TranslateZ3D(Zpos));
+	    GeoTransform *xfPs = new GeoTransform(GeoTrf::TranslateZ3D(Zpos));
 	    
 	    physCyl->add(xfPs);
 	    physCyl->add( emecPSEnvelope );
@@ -553,7 +548,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
     //=>
     const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, bPos ? "EMEC_POS":"EMEC_NEG");
     if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-    HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+    GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
     GeoAlignableTransform *xfEmec = new GeoAlignableTransform(xfPos);
 
     std::string tag = bPos? std::string("EMEC_POS") : std::string("EMEC_NEG");
@@ -586,7 +581,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
     //--- Make the Front Wheel alignable:
 
     const IRDBRecord *posHec1 = GeoDBUtils::getTransformRecord(larPosition, bPos ? "HEC1_POS":"HEC1_NEG");
-    HepGeom::Transform3D xfPosHec1 = posHec1 ? GeoDBUtils::getTransform(posHec1) : HepGeom::Translate3D(0.,0.,-2423.0);
+    GeoTrf::Transform3D xfPosHec1 = posHec1 ? GeoDBUtils::getTransform(posHec1) : GeoTrf::Translate3D(0.,0.,-2423.0);
     GeoAlignableTransform *xfHec1 = new GeoAlignableTransform(xfPosHec1);
 
     std::string tag1 = bPos? std::string("HEC1_POS") : std::string("HEC1_NEG");
@@ -611,7 +606,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
     GeoFullPhysVol* EnvelopeR = rearHEC.GetEnvelope();
     
     const IRDBRecord *posHec2 = GeoDBUtils::getTransformRecord(larPosition, bPos ? "HEC2_POS":"HEC2_NEG");
-    HepGeom::Transform3D xfPosHec2 = posHec2 ? GeoDBUtils::getTransform(posHec2) : HepGeom::Translate3D(0.,0.,-1566.0);
+    GeoTrf::Transform3D xfPosHec2 = posHec2 ? GeoDBUtils::getTransform(posHec2) : GeoTrf::Translate3D(0.,0.,-1566.0);
     GeoAlignableTransform *xfHec2 = new GeoAlignableTransform(xfPosHec2);
 
     std::string tag2 = bPos? std::string("HEC2_POS") : std::string("HEC2_NEG");
@@ -655,7 +650,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
     // Get default values for alignable transform deltas from SubdetPosHelper
     const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, tag);
     if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-    HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+    GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
     GeoAlignableTransform *fcalXF = new GeoAlignableTransform(xfPos);
 
     StatusCode status;
@@ -674,7 +669,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 
     // Place the FCAL modules.
     cryoMotherPhysical->add(fcalXF);
-    cryoMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D(tubs->getZHalfLength()) ) );
+    cryoMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D(tubs->getZHalfLength()) ) );
     cryoMotherPhysical->add( fcalEnvelope );
     
     
@@ -732,10 +727,10 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	}
 
 	// Build mother volume
-	double rminMM = (*itMother)->getDouble("RMIN")*CLHEP::mm; 
-	double rmaxMM = (*itMother)->getDouble("RMAX")*CLHEP::mm;
-	double dzMM = (*itMother)->getDouble("DZ")*CLHEP::mm;
-	zposMM = (*itMother)->getDouble("ZPOS")*CLHEP::mm;
+	double rminMM = (*itMother)->getDouble("RMIN")*GeoModelKernelUnits::mm; 
+	double rmaxMM = (*itMother)->getDouble("RMAX")*GeoModelKernelUnits::mm;
+	double dzMM = (*itMother)->getDouble("DZ")*GeoModelKernelUnits::mm;
+	zposMM = (*itMother)->getDouble("ZPOS")*GeoModelKernelUnits::mm;
 	
 	const GeoMaterial *matMM  = materialManager->getMaterial((*itMother)->getString("MATERIAL"));
 	
@@ -744,8 +739,8 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	GeoTube *tubeJM=NULL;
 	const GeoShape *solidMM=NULL;
 	if (itTube!=mbtsTubs->end()) {
-	  double dzMod   = (*itTube)->getDouble("DZ")*CLHEP::mm;
-	  double rMaxMod = (*itTube)->getDouble("RMAX")*CLHEP::mm;
+	  double dzMod   = (*itTube)->getDouble("DZ")*GeoModelKernelUnits::mm;
+	  double rMaxMod = (*itTube)->getDouble("RMAX")*GeoModelKernelUnits::mm;
 	  
 	  GeoPcon *pcon = new GeoPcon(0,2*M_PI);
 	  pcon->addPlane(-dzMM,rminMM,rmaxMM);
@@ -761,14 +756,14 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	GeoLogVol* lvMM = new GeoLogVol("MBTS_mother",solidMM,matMM);
 	pvMM = new GeoPhysVol(lvMM);
 	
-	cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposMM)));
+	cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposMM)));
 	cryoMotherPhysical->add(pvMM);
 
 	// Moderator cylinder
-	//double rminMod  = (*itModerator)->getDouble("RMIN")*CLHEP::mm; 
-	//double rmaxMod = (*itModerator)->getDouble("RMAX")*CLHEP::mm;
-	double dzMod = (*itModerator)->getDouble("DZ")*CLHEP::mm;
-	double zposMod = (*itModerator)->getDouble("ZPOS")*CLHEP::mm;
+	//double rminMod  = (*itModerator)->getDouble("RMIN")*GeoModelKernelUnits::mm; 
+	//double rmaxMod = (*itModerator)->getDouble("RMAX")*GeoModelKernelUnits::mm;
+	double dzMod = (*itModerator)->getDouble("DZ")*GeoModelKernelUnits::mm;
+	double zposMod = (*itModerator)->getDouble("ZPOS")*GeoModelKernelUnits::mm;
 	
 	const GeoMaterial *matMod  = materialManager->getMaterial((*itModerator)->getString("MATERIAL"));
 	
@@ -776,14 +771,14 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	GeoLogVol* lvMod = new GeoLogVol("Moderator",solidMod, matMod);
 	GeoPhysVol* pvMod = new GeoPhysVol(lvMod);
 	
-	pvMM->add(new GeoTransform(HepGeom::TranslateZ3D(zposMod)));
+	pvMM->add(new GeoTransform(GeoTrf::TranslateZ3D(zposMod)));
 	pvMM->add(pvMod);
       
 	if (tubeJM) {
 	  GeoLogVol* lvMod  = new GeoLogVol("ModeratorTube",tubeJM, matMod);
 	  GeoPhysVol* pvMod = new GeoPhysVol(lvMod);
 	  
-	  pvMM->add(new GeoTransform(HepGeom::TranslateZ3D(tubeMM->getZHalfLength()+tubeJM->getZHalfLength())));
+	  pvMM->add(new GeoTransform(GeoTrf::TranslateZ3D(tubeMM->getZHalfLength()+tubeJM->getZHalfLength())));
 	  pvMM->add(pvMod);
 	}
 	tubeMM->ref();  tubeMM->unref();
@@ -845,7 +840,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	pvMM = new GeoPhysVol(lvMM);
 	
 	zposMM = zStartCryoMother - zStartMM;
-	cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zposMM))); 
+	cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zposMM))); 
 	cryoMotherPhysical->add(pvMM);
 
 	// Extra tube for the moderator:
@@ -858,7 +853,7 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	GeoLogVol* lvJM = new GeoLogVol("ModeratorJMTube",tubeJM, matJM);
 	GeoPhysVol* pvJM = new GeoPhysVol(lvJM);
 
-	pvMM->add(new GeoTransform(HepGeom::TranslateZ3D((*mbtsTubs)[0]->getDouble("ZPOS"))));
+	pvMM->add(new GeoTransform(GeoTrf::TranslateZ3D((*mbtsTubs)[0]->getDouble("ZPOS"))));
 	pvMM->add(pvJM);
 
 	// Moderator+JM polycone
@@ -875,13 +870,13 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	  const IRDBRecord* curScin = (*mbtsScin)[scinId];
 	
 	  int nScin = curScin->getInt("SCINNUM");
-	  double dx1Scin = curScin->getDouble("DX1")*CLHEP::mm;
-	  double dx2Scin = curScin->getDouble("DX2")*CLHEP::mm;
-	  double dy1Scin = curScin->getDouble("DY1")*CLHEP::mm;
-	  double dy2Scin = curScin->getDouble("DY2")*CLHEP::mm;
-	  double dzScin  = curScin->getDouble("DZ")*CLHEP::mm;
-	  double zposScin = curScin->getDouble("ZPOS")*CLHEP::mm;
-	  double rposScin = curScin->getDouble("RPOS")*CLHEP::mm;
+	  double dx1Scin = curScin->getDouble("DX1")*GeoModelKernelUnits::mm;
+	  double dx2Scin = curScin->getDouble("DX2")*GeoModelKernelUnits::mm;
+	  double dy1Scin = curScin->getDouble("DY1")*GeoModelKernelUnits::mm;
+	  double dy2Scin = curScin->getDouble("DY2")*GeoModelKernelUnits::mm;
+	  double dzScin  = curScin->getDouble("DZ")*GeoModelKernelUnits::mm;
+	  double zposScin = curScin->getDouble("ZPOS")*GeoModelKernelUnits::mm;
+	  double rposScin = curScin->getDouble("RPOS")*GeoModelKernelUnits::mm;
 
 	  double startPhi = 0.;
 	  try {
@@ -906,12 +901,12 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	  GeoSerialTransformer* stScin = 0;
 	  
 	  if(bPos) {
-	    GENFUNCTION phiInd = deltaPhi*(varInd + startPhi)*CLHEP::deg;
-	    TRANSFUNCTION xfScin = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateZ3D(zposScin)*HepGeom::TranslateX3D(rposScin)*HepGeom::RotateY3D(90*CLHEP::deg);
+	    GENFUNCTION phiInd = deltaPhi*(varInd + startPhi)*GeoModelKernelUnits::deg;
+	    TRANSFUNCTION xfScin = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateZ3D(zposScin)*GeoTrf::TranslateX3D(rposScin)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 	    stScin = new GeoSerialTransformer(pvScin,&xfScin,nScin);
 	  } else {
-	    GENFUNCTION phiInd = (180 - deltaPhi*(varInd + startPhi))*CLHEP::deg;
-	    TRANSFUNCTION xfScin = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateZ3D(zposScin)*HepGeom::TranslateX3D(rposScin)*HepGeom::RotateY3D(90*CLHEP::deg);
+	    GENFUNCTION phiInd = (180 - deltaPhi*(varInd + startPhi))*GeoModelKernelUnits::deg;
+	    TRANSFUNCTION xfScin = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateZ3D(zposScin)*GeoTrf::TranslateX3D(rposScin)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 	    stScin = new GeoSerialTransformer(pvScin,&xfScin,nScin);
 	  }
 	  
@@ -971,12 +966,12 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	Variable varInd;
 	GeoSerialTransformer* stAirEnv = 0;
 	if(bPos) {
-	  GENFUNCTION phiInd = deltaPhi*(varInd + startPhi)*CLHEP::deg;
-	  TRANSFUNCTION xfAirEnv = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateZ3D(zposAirEnv)*HepGeom::TranslateX3D(rposAirEnv)*HepGeom::RotateY3D(90*CLHEP::deg);
+	  GENFUNCTION phiInd = deltaPhi*(varInd + startPhi)*GeoModelKernelUnits::deg;
+	  TRANSFUNCTION xfAirEnv = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateZ3D(zposAirEnv)*GeoTrf::TranslateX3D(rposAirEnv)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 	  stAirEnv = new GeoSerialTransformer(pvAirEnv,&xfAirEnv,nAirEnv);
 	} else {
-	  GENFUNCTION phiInd = (180 - deltaPhi*(varInd + startPhi))*CLHEP::deg;
-	  TRANSFUNCTION xfAirEnv = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateZ3D(zposAirEnv)*HepGeom::TranslateX3D(rposAirEnv)*HepGeom::RotateY3D(90*CLHEP::deg);
+	  GENFUNCTION phiInd = (180 - deltaPhi*(varInd + startPhi))*GeoModelKernelUnits::deg;
+	  TRANSFUNCTION xfAirEnv = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateZ3D(zposAirEnv)*GeoTrf::TranslateX3D(rposAirEnv)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 	  stAirEnv = new GeoSerialTransformer(pvAirEnv,&xfAirEnv,nAirEnv);
 	}
 
@@ -1000,8 +995,8 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	IRDBRecordset_ptr larPosition = m_pAccessSvc->getRecordsetPtr("LArPosition",detectorKey, detectorNode);
 	const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(larPosition, "LARCRYO_EC_POS");
 	if(!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
-	double globalZMM = xfPos.getTranslation().z() + zposMM;
+	GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	double globalZMM = xfPos.translation().z() + zposMM;
 
 	// Create MBTS manager
 	MbtsDetDescrManager* mbtsManager = new MbtsDetDescrManager();
@@ -1020,15 +1015,15 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 	
 		nScin = curScin->getInt("SCINNUM");
 		eta = curScin->getInt("SCIN_ID")-1;
-		dx1Scin = curScin->getDouble("DX1")*CLHEP::mm;
-		dzScin  = curScin->getDouble("DZ")*CLHEP::mm;
-		zposScin = curScin->getDouble("ZPOS")*CLHEP::mm;
-		rposScin = curScin->getDouble("RPOS")*CLHEP::mm;
+		dx1Scin = curScin->getDouble("DX1")*GeoModelKernelUnits::mm;
+		dzScin  = curScin->getDouble("DZ")*GeoModelKernelUnits::mm;
+		zposScin = curScin->getDouble("ZPOS")*GeoModelKernelUnits::mm;
+		rposScin = curScin->getDouble("RPOS")*GeoModelKernelUnits::mm;
 		if(!curScin->isFieldNull("ETA"))
 		  scineta = curScin->getDouble("ETA");
 		if(!curScin->isFieldNull("DETA"))
 		  scindeta = curScin->getDouble("DETA");
-		deltaPhi = 360.*CLHEP::deg/nScin;
+		deltaPhi = 360.*GeoModelKernelUnits::deg/nScin;
 		try {
 		  if(!curScin->isFieldNull("STARTPHI"))
 		    startPhi = curScin->getDouble("STARTPHI");
@@ -1041,14 +1036,14 @@ GeoFullPhysVol* LArGeo::EndcapCryostatConstruction::createEnvelope(bool bPos)
 		const IRDBRecord* curScin = (*mbtsTrds)[trdMap[scinName]];
 		nScin = (*mbtsGen)[0]->getInt("NSCIN");
 		eta = curScin->getInt("SCIN_ID")-1;
-		dx1Scin = curScin->getDouble("DX1")*CLHEP::mm;
-		dzScin  = curScin->getDouble("DZ")*CLHEP::mm;
-		zposScin = (*mbtsGen)[0]->getDouble("ZPOSENV")*CLHEP::mm;
-		rposScin = ((*mbtsGen)[0]->getDouble("RPOSENV")+curScin->getDouble("ZPOS"))*CLHEP::mm;
+		dx1Scin = curScin->getDouble("DX1")*GeoModelKernelUnits::mm;
+		dzScin  = curScin->getDouble("DZ")*GeoModelKernelUnits::mm;
+		zposScin = (*mbtsGen)[0]->getDouble("ZPOSENV")*GeoModelKernelUnits::mm;
+		rposScin = ((*mbtsGen)[0]->getDouble("RPOSENV")+curScin->getDouble("ZPOS"))*GeoModelKernelUnits::mm;
 		scineta = curScin->getDouble("ETA");
 		scindeta = curScin->getDouble("DETA");
 		startPhi = (*mbtsGen)[0]->getDouble("STARTPHI");
-		deltaPhi = 360.*CLHEP::deg/nScin;
+		deltaPhi = 360.*GeoModelKernelUnits::deg/nScin;
 	      }
 
 	    for(int phi=0; phi<nScin; phi++) {
@@ -1104,7 +1099,7 @@ GeoPhysVol* LArGeo::EndcapCryostatConstruction::buildMbtsTrd(const IRDBRecord* r
     double xpos = rec->getDouble("XPOS");
     double ypos = rec->getDouble("YPOS");
     double zpos = rec->getDouble("ZPOS");
-    parent->add(new GeoTransform(HepGeom::TranslateZ3D(zpos)*HepGeom::TranslateY3D(ypos)*HepGeom::TranslateX3D(xpos)));
+    parent->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)*GeoTrf::TranslateY3D(ypos)*GeoTrf::TranslateX3D(xpos)));
     parent->add(pv);
   }
   return pv;
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.cxx
index 75f1f7af96147f42a581d0a10e7b3d3d0bcffb96..768040c298b7576dfbe511adaf17a36041959e10 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.cxx
@@ -22,6 +22,8 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
@@ -30,10 +32,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/Variable.h"
 
 // ***********************************************************************
 //
@@ -108,8 +107,8 @@ void LArGeo::EndcapDMConstruction::create(GeoFullPhysVol* envelope)
   unsigned int recordIndex;
 
   // Get materials
-  const GeoMaterial *alu               = materialManager->getMaterial("std::Aluminium"); //2.7 CLHEP::g/CLHEP::cm3
-  const GeoMaterial* matBoardsEnvelope = materialManager->getMaterial("LAr::BoardsEnvelope");// 0.932*CLHEP::gram/CLHEP::cm3);
+  const GeoMaterial *alu               = materialManager->getMaterial("std::Aluminium"); //2.7 GeoModelKernelUnits::g/GeoModelKernelUnits::cm3
+  const GeoMaterial* matBoardsEnvelope = materialManager->getMaterial("LAr::BoardsEnvelope");// 0.932*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
 
   ////----------- Building Front-end crates --------------------
   recordIndex = tubeMap["Ped2"];
@@ -186,9 +185,9 @@ void LArGeo::EndcapDMConstruction::create(GeoFullPhysVol* envelope)
   GeoTube    *Ped2     = new GeoTube(ped2minr, ped2maxr, ped2zhlen);
   GeoTube    *Ped3     = new GeoTube(ped3minr,ped3maxr , ped3zhlen);
   const GeoShape & CratePed=((*Pedestal).subtract(*Ped1).
-			     subtract((*Ped2)  <<HepGeom::TranslateY3D(-ped2ytr)*HepGeom::RotateY3D(90*CLHEP::deg)).
-			     subtract((*Ped3)  <<HepGeom::TranslateX3D(-ped3xtr)).
-			     subtract((*Ped2)  <<HepGeom::TranslateY3D(ped2ytr)*HepGeom::RotateY3D(90*CLHEP::deg)));
+			     subtract((*Ped2)  <<GeoTrf::TranslateY3D(-ped2ytr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)).
+			     subtract((*Ped3)  <<GeoTrf::TranslateX3D(-ped3xtr)).
+			     subtract((*Ped2)  <<GeoTrf::TranslateY3D(ped2ytr)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg)));
 
   GeoLogVol  *lvped   = new GeoLogVol("LAr::DM::Ped",&CratePed,alu);
   GeoPhysVol *pedestal   = new GeoPhysVol(lvped);
@@ -197,7 +196,7 @@ void LArGeo::EndcapDMConstruction::create(GeoFullPhysVol* envelope)
   GeoBox     *Crate1   = new GeoBox(crate1hlen, crate1hwdt, crate1hhgt-epsilon);
   GeoBox     *Crate2   = new GeoBox(crate2hlen, crate2hwdt, crate2hhgt-epsilon);
   GeoBox     *Crate3   = new GeoBox(crate3hlen, crate3hwdt, crate3hhgt-epsilon);
-  const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<HepGeom::TranslateX3D(-crate3xtr));
+  const GeoShape & FEBCrate=(*Crate1).subtract(*Crate2).add((*Crate3)  <<GeoTrf::TranslateX3D(-crate3xtr));
 
   GeoLogVol  *lvcrate = new GeoLogVol("LAr::DM::Crate",&FEBCrate,alu);
   GeoPhysVol *crate   = new GeoPhysVol(lvcrate);
@@ -208,14 +207,14 @@ void LArGeo::EndcapDMConstruction::create(GeoFullPhysVol* envelope)
   GeoPhysVol *boardenvelope   = new GeoPhysVol(lvbenv);
 
   //-------------- Place volumes in envelope ----------------------------
-  GeoTransform* xfCrateBase(new GeoTransform(HepGeom::TranslateX3D(crate1xtr)*HepGeom::TranslateZ3D(crate1ztr)));
-  GeoTransform* xfPedestBase(new GeoTransform(HepGeom::TranslateX3D(pedestxtr)*HepGeom::TranslateZ3D(pedestztr)));
-  GeoTransform* xfBoardEBase1(new GeoTransform(HepGeom::TranslateY3D(BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(BoardEztr)));
-  GeoTransform* xfBoardEBase2(new GeoTransform(HepGeom::TranslateY3D(-BoardEytr)*HepGeom::TranslateX3D(BoardExtr)*HepGeom::TranslateZ3D(BoardEztr)));
+  GeoTransform* xfCrateBase(new GeoTransform(GeoTrf::TranslateX3D(crate1xtr)*GeoTrf::TranslateZ3D(crate1ztr)));
+  GeoTransform* xfPedestBase(new GeoTransform(GeoTrf::TranslateX3D(pedestxtr)*GeoTrf::TranslateZ3D(pedestztr)));
+  GeoTransform* xfBoardEBase1(new GeoTransform(GeoTrf::TranslateY3D(BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(BoardEztr)));
+  GeoTransform* xfBoardEBase2(new GeoTransform(GeoTrf::TranslateY3D(-BoardEytr)*GeoTrf::TranslateX3D(BoardExtr)*GeoTrf::TranslateZ3D(BoardEztr)));
 
   for(unsigned i(0); i<LArEndcapCratePhiPos->size(); ++i) {
-    double phiPos = (*LArEndcapCratePhiPos)[i]->getDouble("PHIPOS")*CLHEP::deg;
-    GeoTransform* xfPhiPos(new GeoTransform(HepGeom::RotateZ3D(phiPos)));
+    double phiPos = (*LArEndcapCratePhiPos)[i]->getDouble("PHIPOS")*GeoModelKernelUnits::deg;
+    GeoTransform* xfPhiPos(new GeoTransform(GeoTrf::RotateZ3D(phiPos)));
 
     envelope->add(xfPhiPos);
     envelope->add(xfCrateBase);
@@ -242,7 +241,7 @@ void LArGeo::EndcapDMConstruction::create(GeoFullPhysVol* envelope)
       GeoTube* endcapTube = new GeoTube((*EndcapDMTubes)[i]->getDouble("RMIN"),(*EndcapDMTubes)[i]->getDouble("RMAX"),(*EndcapDMTubes)[i]->getDouble("DZ"));
       GeoLogVol* endcapTubeLv = new GeoLogVol((*EndcapDMTubes)[i]->getString("TUBENAME"),endcapTube,matECServices);
       GeoPhysVol* endcapTubePv = new GeoPhysVol(endcapTubeLv);
-      envelope->add(new GeoTransform(HepGeom::TranslateZ3D((*EndcapDMTubes)[i]->getDouble("ZPOS"))));
+      envelope->add(new GeoTransform(GeoTrf::TranslateZ3D((*EndcapDMTubes)[i]->getDouble("ZPOS"))));
       envelope->add(endcapTubePv);
     }
   }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.h
index 307de66ecf9ad3d7f6576c772217a3ac1a211249..cb82f1a880127211c4ea22da50b7994704569e90 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapDMConstruction.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef __EndcapDMConstruction_H__
-#define __EndcapDMConstruction_H__
+#ifndef LARGEOENDCAP_ENDCAPDMCONSTRUCTION_H
+#define LARGEOENDCAP_ENDCAPDMCONSTRUCTION_H
 
 class GeoFullPhysVol;
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerConstruction.cxx
index 727960b3b202b07c0e5a823ef27db523e4adb29b..b89f9c4d31cce88c0305f9a2a178e4132591dd78 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerConstruction.cxx
@@ -12,18 +12,14 @@
 #include "GeoModelKernel/GeoTubs.h"  
 #include "GeoModelKernel/GeoNameTag.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 #include "StoreGate/StoreGateSvc.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
@@ -107,14 +103,14 @@ GeoFullPhysVol* EndcapPresamplerConstruction::Envelope()
   ///////////////////////////////////////////////////////////////////
   // LAr Endcap Presampler GEOMETRY
   ///////////////////////////////////////////////////////////////////
-  double Rmin = 1231.74*CLHEP::mm;
-  double Rmax = 1701.98*CLHEP::mm;
-  double HalfZ = ((*presamplerPosition)[0]->getDouble("TCK")/2.)*CLHEP::cm;  
+  double Rmin = 1231.74*GeoModelKernelUnits::mm;
+  double Rmax = 1701.98*GeoModelKernelUnits::mm;
+  double HalfZ = ((*presamplerPosition)[0]->getDouble("TCK")/2.)*GeoModelKernelUnits::cm;  
 
 
   std::string name = "LAr::Endcap::Presampler::LiquidArgon";
 
-  double phi_size = 360.*CLHEP::deg;
+  double phi_size = 360.*GeoModelKernelUnits::deg;
   double start_phi = 0.;
   
   if( m_isModule ){
diff --git a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerGeometryHelper.cxx b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerGeometryHelper.cxx
index 835dbcc6e261495f06e37ace0491b0a450b7a1e5..df188ef362243e6bc1c9c67626915bfd6e020172 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerGeometryHelper.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoEndcap/src/EndcapPresamplerGeometryHelper.cxx
@@ -11,12 +11,10 @@
 // 2-July-2003 Mikhail Leltchouk: local coordinates for determination
 // of etaBin, phiBin at any Endcap Presamplerposition. 
 
+#include "GeoModelKernel/Units.h"
 #include "LArGeoEndcap/EndcapPresamplerGeometryHelper.h"
 #include "LArGeoCode/VDetectorParameters.h"
 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 #include <cmath>
 #include <string>
 #include <iostream>
@@ -50,22 +48,22 @@ double LArGeo::EndcapPresamplerGeometryHelper::GetValue(const kValue a_valueType
   switch (a_valueType)
     {
     case rMinEndcapPresampler:
-      //return 1231.74 * CLHEP::mm;
+      //return 1231.74 * GeoModelKernelUnits::mm;
       return  m_parameters->GetValue("LArEMECPreMinRadius");
       break;
     case rMaxEndcapPresampler:
-      //return 1701.98 * CLHEP::mm;
+      //return 1701.98 * GeoModelKernelUnits::mm;
       return  m_parameters->GetValue("LArEMECPreMaxRadius");
       break;
       // At nominal (zShift=0) endcap position absolute z-coordinates: 
       // of the faces of the EndcapPresampler
     case zEndcapPresamplerFrontFace:
-      //return 3622. * CLHEP::mm;
+      //return 3622. * GeoModelKernelUnits::mm;
       return (m_parameters->GetValue("LArEMECPreNomPos")
 	      - GetValue(EndcapPresamplerHalfThickness));
       break;
     case zEndcapPresamplerBackFace:
-      //return 3626. * CLHEP::mm;
+      //return 3626. * GeoModelKernelUnits::mm;
       return (m_parameters->GetValue("LArEMECPreNomPos")
 	      + GetValue(EndcapPresamplerHalfThickness)); 
       break;
@@ -75,8 +73,8 @@ double LArGeo::EndcapPresamplerGeometryHelper::GetValue(const kValue a_valueType
       break;
     case EndcapPresamplerZpositionInMother:
       // between cold wall center and presampler center which is at
-      // 3624 CLHEP::mm nominal (zShift=0) absolute position
-      return 30.5 * CLHEP::mm;
+      // 3624 GeoModelKernelUnits::mm nominal (zShift=0) absolute position
+      return 30.5 * GeoModelKernelUnits::mm;
       break;
     default:
       std::cerr << "EndcapPresamplerGeometryHelper::GetValue -- type '"
diff --git a/LArCalorimeter/LArGeoModel/LArGeoFcal/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoFcal/CMakeLists.txt
index 0a00338f74cf9e034f9a73771d647b1993bdc55b..f94aca8be35c492ae6926542c3f341f8521bebea 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoFcal/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoFcal/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( LArGeoFcal )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
@@ -18,8 +17,9 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # tag NEEDS_CORAL_BASE was not recognized in automatic conversion in cmt2cmake
 
@@ -27,9 +27,8 @@ find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
 atlas_add_library( LArGeoFcal
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoFcal
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} GeoModelKernel StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelUtilities GaudiKernel LArReadoutGeometry )
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${GEOMODEL_NCLUDE_DIR}
+                   PRIVATE_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoModelUtilities GaudiKernel LArReadoutGeometry )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoFcal/src/FCALConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoFcal/src/FCALConstruction.cxx
index a5cea07bfc31810e6a2c200cd80a716c5660a0e3..90b09c85679eae970aa6421dd86aab84bc277683 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoFcal/src/FCALConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoFcal/src/FCALConstruction.cxx
@@ -22,6 +22,8 @@
 #include "GeoModelKernel/GeoCons.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTrap.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -30,20 +32,15 @@
 #include "GeoModelUtilities/StoredAlignX.h"
 #include "GeoModelUtilities/GeoDBUtils.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
 // For functions:
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/ArrayFunction.hh"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/ArrayFunction.h"
 
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBQuery.h"
 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
@@ -166,9 +163,9 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 
   std::string baseName = "LAr::FCAL::";
 
-  double startZFCal1 = (*m_fcalMod)[0]->getDouble("STARTPOSITION"); //466.85 * CLHEP::cm;
-  //double startZFCal2 = (*m_fcalMod)[1]->getDouble("STARTPOSITION"); //512.83 * CLHEP::cm;
-  double startZFCal3 = (*m_fcalMod)[2]->getDouble("STARTPOSITION"); //560.28 * CLHEP::cm;
+  double startZFCal1 = (*m_fcalMod)[0]->getDouble("STARTPOSITION"); //466.85 * GeoModelKernelUnits::cm;
+  //double startZFCal2 = (*m_fcalMod)[1]->getDouble("STARTPOSITION"); //512.83 * GeoModelKernelUnits::cm;
+  double startZFCal3 = (*m_fcalMod)[2]->getDouble("STARTPOSITION"); //560.28 * GeoModelKernelUnits::cm;
 
   double outerModuleRadius1=(*m_fcalMod)[0]->getDouble("OUTERMODULERADIUS");
   double outerModuleRadius2=(*m_fcalMod)[1]->getDouble("OUTERMODULERADIUS");
@@ -202,7 +199,7 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
     double halfDepth   = totalDepth/2.;
 
     std::string name = baseName + "LiquidArgonC";
-    GeoTubs *tubs = new GeoTubs(innerRadius,outerRadius,halfDepth,0,360*CLHEP::deg);
+    GeoTubs *tubs = new GeoTubs(innerRadius,outerRadius,halfDepth,0,360*GeoModelKernelUnits::deg);
     GeoLogVol *logVol= new GeoLogVol(name, tubs, LAr);
     fcalPhysical = new GeoFullPhysVol(logVol);
   }
@@ -233,11 +230,11 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 	
 	const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(m_LArPosition, bPos ? "FCAL1_POS":"FCAL1_NEG");
 	if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
 	GeoAlignableTransform *xfAbs1 = new GeoAlignableTransform(xfPos);
 	
 	fcalPhysical->add(xfAbs1);
-	if (!bPos)  fcalPhysical->add(new GeoTransform(HepGeom::RotateY3D(180*CLHEP::deg)));
+	if (!bPos)  fcalPhysical->add(new GeoTransform(GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 	
@@ -256,18 +253,18 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
       // 16 Troughs representing  Cable Harnesses:
       if(m_fullGeo)
 	if(m_absPhysical1==0) {
-	  double troughDepth       = 1.0 * CLHEP::cm;
+	  double troughDepth       = 1.0 * GeoModelKernelUnits::cm;
 	  double outerRadius       = outerModuleRadius1;
 	  double innerRadius       = outerRadius - troughDepth;
 	  double halfLength        = fullModuleDepth1/ 2.0;
-	  double deltaPhi          = 5.625 * CLHEP::deg;
-	  double startPhi          = 11.25 * CLHEP::deg - deltaPhi/2.0;
+	  double deltaPhi          = 5.625 * GeoModelKernelUnits::deg;
+	  double startPhi          = 11.25 * GeoModelKernelUnits::deg - deltaPhi/2.0;
 	  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
 	  GeoLogVol *logVol = new GeoLogVol(baseName+"Module1::CableTrough",tubs,FCalCableHarness);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
-	  Genfun::Variable i;
-	  Genfun::GENFUNCTION rotationAngle = 22.5*CLHEP::deg*i;
-	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),rotationAngle);
+	  GeoGenfun::Variable i;
+	  GeoGenfun::GENFUNCTION rotationAngle = 22.5*GeoModelKernelUnits::deg*i;
+	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,16);
 	  modPhysical->add(st);
 	}
@@ -332,7 +329,7 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 	    
 	    if (m_VisLimit != -1 && (counter++ > m_VisLimit)) continue;
 	    if(m_fullGeo) {	      
-	      GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(thisTubeX*CLHEP::cm, thisTubeY*CLHEP::cm,0));
+	      GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*GeoModelKernelUnits::cm, thisTubeY*GeoModelKernelUnits::cm,0));
 	      modPhysical->add(xf);
 	      modPhysical->add(physVol);
 	    }
@@ -365,11 +362,11 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 
 	const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(m_LArPosition, bPos ? "FCAL2_POS":"FCAL2_NEG");
 	if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
 	GeoAlignableTransform *xfAbs2 = new GeoAlignableTransform(xfPos);
 	
 	fcalPhysical->add(xfAbs2);
-	if (!bPos)  fcalPhysical->add(new GeoTransform(HepGeom::RotateY3D(180*CLHEP::deg)));
+	if (!bPos)  fcalPhysical->add(new GeoTransform(GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 	
@@ -388,18 +385,18 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
       // 16 Troughs representing  Cable Harnesses:
       if(m_fullGeo)
 	if(m_absPhysical2==0) {
-	  double troughDepth       = 1.0 * CLHEP::cm;
+	  double troughDepth       = 1.0 * GeoModelKernelUnits::cm;
 	  double outerRadius       = outerModuleRadius2;
 	  double innerRadius       = outerRadius - troughDepth;
 	  double halfLength        = fullModuleDepth2/ 2.0;
-	  double deltaPhi          = 5.625 * CLHEP::deg;
-	  double startPhi          = 11.25 * CLHEP::deg - deltaPhi/2.0;
+	  double deltaPhi          = 5.625 * GeoModelKernelUnits::deg;
+	  double startPhi          = 11.25 * GeoModelKernelUnits::deg - deltaPhi/2.0;
 	  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
 	  GeoLogVol *logVol = new GeoLogVol(baseName+"Module2::CableTrough",tubs,FCalCableHarness);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
-	  Genfun::Variable i;
-	  Genfun::GENFUNCTION rotationAngle = 22.5*CLHEP::deg*i;
-	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),rotationAngle);
+	  GeoGenfun::Variable i;
+	  GeoGenfun::GENFUNCTION rotationAngle = 22.5*GeoModelKernelUnits::deg*i;
+	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,16);
 	  modPhysical->add(st);
 	}
@@ -472,7 +469,7 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 	    
 	    if (m_VisLimit != -1 && (counter++ > m_VisLimit)) continue;
 	    if(m_fullGeo) {	      
-	      GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(thisTubeX*CLHEP::cm, thisTubeY*CLHEP::cm,0));
+	      GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*GeoModelKernelUnits::cm, thisTubeY*GeoModelKernelUnits::cm,0));
 	      modPhysical->add(xf);
 	      modPhysical->add(gapPhys);
 	    }
@@ -505,11 +502,11 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 	// Alignable transform
 	const IRDBRecord *posRec = GeoDBUtils::getTransformRecord(m_LArPosition, bPos ? "FCAL3_POS":"FCAL3_NEG");
 	if (!posRec) throw std::runtime_error("Error, no lar position record in the database") ;
-	HepGeom::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
+	GeoTrf::Transform3D xfPos = GeoDBUtils::getTransform(posRec);
 	GeoAlignableTransform *xfAbs3 = new GeoAlignableTransform(xfPos);
 	
 	fcalPhysical->add(xfAbs3);
-	if (!bPos)  fcalPhysical->add(new GeoTransform(HepGeom::RotateY3D(180*CLHEP::deg)));
+	if (!bPos)  fcalPhysical->add(new GeoTransform(GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 
@@ -530,42 +527,42 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
       if(m_fullGeo)
 	if(m_absPhysical3==0) {
 	  static double rotAngles[] =
-	    { 11.25 * CLHEP::deg,
-	      22.50 * CLHEP::deg,
-	      45.00 * CLHEP::deg,
-	      56.25 * CLHEP::deg,
-	      67.50 * CLHEP::deg,
-	      90.00 * CLHEP::deg,  // first quarter
-	      101.25 * CLHEP::deg,
-	      112.50 * CLHEP::deg,
-	      135.00 * CLHEP::deg,
-	      146.25 * CLHEP::deg,
-	      157.50 * CLHEP::deg,
-	      180.00 * CLHEP::deg,  // second quarter
-	      191.25 * CLHEP::deg,
-	      202.50 * CLHEP::deg,
-	      225.00 * CLHEP::deg,
-	      236.25 * CLHEP::deg,
-	      247.50 * CLHEP::deg,
-	      270.00 * CLHEP::deg,  // third quarter
-	      281.25 * CLHEP::deg,
-	      292.50 * CLHEP::deg,
-	      315.00 * CLHEP::deg,
-	      326.25 * CLHEP::deg,
-	      337.50 * CLHEP::deg,
-	      360.00 * CLHEP::deg };
+	    { 11.25 * GeoModelKernelUnits::deg,
+	      22.50 * GeoModelKernelUnits::deg,
+	      45.00 * GeoModelKernelUnits::deg,
+	      56.25 * GeoModelKernelUnits::deg,
+	      67.50 * GeoModelKernelUnits::deg,
+	      90.00 * GeoModelKernelUnits::deg,  // first quarter
+	      101.25 * GeoModelKernelUnits::deg,
+	      112.50 * GeoModelKernelUnits::deg,
+	      135.00 * GeoModelKernelUnits::deg,
+	      146.25 * GeoModelKernelUnits::deg,
+	      157.50 * GeoModelKernelUnits::deg,
+	      180.00 * GeoModelKernelUnits::deg,  // second quarter
+	      191.25 * GeoModelKernelUnits::deg,
+	      202.50 * GeoModelKernelUnits::deg,
+	      225.00 * GeoModelKernelUnits::deg,
+	      236.25 * GeoModelKernelUnits::deg,
+	      247.50 * GeoModelKernelUnits::deg,
+	      270.00 * GeoModelKernelUnits::deg,  // third quarter
+	      281.25 * GeoModelKernelUnits::deg,
+	      292.50 * GeoModelKernelUnits::deg,
+	      315.00 * GeoModelKernelUnits::deg,
+	      326.25 * GeoModelKernelUnits::deg,
+	      337.50 * GeoModelKernelUnits::deg,
+	      360.00 * GeoModelKernelUnits::deg };
 	
-	  Genfun::ArrayFunction rotationAngle(rotAngles,rotAngles+24);
-	  double troughDepth       = 1.0 * CLHEP::cm;
+	  GeoGenfun::ArrayFunction rotationAngle(rotAngles,rotAngles+24);
+	  double troughDepth       = 1.0 * GeoModelKernelUnits::cm;
 	  double outerRadius       = outerModuleRadius3;
 	  double innerRadius       = outerRadius - troughDepth;
 	  double halfLength        = fullModuleDepth3/ 2.0;
-	  double deltaPhi          = 5.625 * CLHEP::deg;
-	  double startPhi          = 11.25 * CLHEP::deg - deltaPhi/2.0;
+	  double deltaPhi          = 5.625 * GeoModelKernelUnits::deg;
+	  double startPhi          = 11.25 * GeoModelKernelUnits::deg - deltaPhi/2.0;
 	  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
 	  GeoLogVol *logVol = new GeoLogVol(baseName+"Module3::CableTrough",tubs,FCalCableHarness);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
-	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),rotationAngle);
+	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,24);
 	  modPhysical->add(st);
 	}
@@ -640,7 +637,7 @@ GeoVFullPhysVol* LArGeo::FCALConstruction::GetEnvelope(bool bPos)
 	    
 	    if (m_VisLimit != -1 && (counter++ > m_VisLimit)) continue;
 	    if(m_fullGeo) {	      
-	      GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(thisTubeX*CLHEP::cm, thisTubeY*CLHEP::cm,0));
+	      GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*GeoModelKernelUnits::cm, thisTubeY*GeoModelKernelUnits::cm,0));
 	      modPhysical->add(xf);
 	      modPhysical->add(gapPhys);
 	    }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/CMakeLists.txt
index 47df10bf735dd13b66ed473d860dd3130f646517..2fbaaf6df58ec5d94a134b3181bd1d85abeab9c1 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( LArGeoH62002Algs )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
@@ -22,15 +21,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArGeoH62002Algs
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests GaudiKernel LArG4RunControl LArGeoCode LArGeoEndcap LArGeoH6Cryostats )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests GaudiKernel LArG4RunControl LArGeoCode LArGeoEndcap LArGeoH6Cryostats )
 
 # Install files from the package:
 atlas_install_headers( LArGeoH62002Algs )
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/ExcluderConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/ExcluderConstruction.cxx
index 03d858974b397f930a5ac2334ea5785fa660babf..6786c4e35f3153f5b3196a006b9d65569e1d6041 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/ExcluderConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/ExcluderConstruction.cxx
@@ -23,18 +23,14 @@
 #include "GeoModelKernel/GeoTransform.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 // For the database:
 
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -92,7 +88,7 @@ GeoPhysVol* LArGeo::ExcluderConstruction::GetEnvelope()
   const GeoElement*  H=materialManager->getElement("Hydrogen");
   const GeoElement*  O=materialManager->getElement("Oxygen");
   const GeoElement*  N=materialManager->getElement("Nitrogen");
-  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.11*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.11*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Rohacell->add(C,0.6465);
   Rohacell->add(H,0.07836);
   Rohacell->add(O,0.19137);
@@ -115,25 +111,25 @@ GeoPhysVol* LArGeo::ExcluderConstruction::GetEnvelope()
 
   // It is a Union out of a GeoBox and a GeoTubs.
   // Box Dimensions:
-  double   xbox  =  300.0 *CLHEP::mm;
-  double   ybox  =  160.0 *CLHEP::mm;
-  double   zbox  =  300.7 *CLHEP::mm;
+  double   xbox  =  300.0 *GeoModelKernelUnits::mm;
+  double   ybox  =  160.0 *GeoModelKernelUnits::mm;
+  double   zbox  =  300.7 *GeoModelKernelUnits::mm;
   //
   // Tubs Dimensions:
-  double   ztubs =  300.0 *CLHEP::mm;
-  double  phitubs=   76.2 *CLHEP::deg;
-  double  delphi =   27.6 *CLHEP::deg;
-  double   rcold = 1249.5 *CLHEP::mm;
-  double   rmin  = 1220.0 *CLHEP::mm;
+  double   ztubs =  300.0 *GeoModelKernelUnits::mm;
+  double  phitubs=   76.2 *GeoModelKernelUnits::deg;
+  double  delphi =   27.6 *GeoModelKernelUnits::deg;
+  double   rcold = 1249.5 *GeoModelKernelUnits::mm;
+  double   rmin  = 1220.0 *GeoModelKernelUnits::mm;
 
-  // The radius of the cryostat cold wall is: 1250 CLHEP::mm
+  // The radius of the cryostat cold wall is: 1250 GeoModelKernelUnits::mm
   // Before we make the union, we have to shift the box in y (that actually along the beam axis)
   //        and there, positive y goes from the cryostat centre towards the beam window.
 
   std::string ExcluderName = "LAr::H6::Cryostat::Excluder";
 
   GeoBox* rohaBox   = new GeoBox(xbox, ybox, zbox);                      //  The rectangular part of the excluder
-  const GeoShapeShift & rohaBoxShift = (*rohaBox << HepGeom::TranslateY3D(1062.85*CLHEP::mm) );
+  const GeoShapeShift & rohaBoxShift = (*rohaBox << GeoTrf::TranslateY3D(1062.85*GeoModelKernelUnits::mm) );
   GeoTubs* rohaTubs = new GeoTubs(rmin, rcold, ztubs, phitubs, delphi);  //  The round part of the excluder  
 
   // Combine the two parts to make one excluder of the correct shape:
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/FrontBeamConstructionH62002.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/FrontBeamConstructionH62002.cxx
index e72c0ca78695f7e5ab05c44564247df97129c470..bd3ac799fc918b496c8f69e6516dfd5546542e83 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/FrontBeamConstructionH62002.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/FrontBeamConstructionH62002.cxx
@@ -23,17 +23,14 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
-#include "GeoModelKernel/GeoShapeShift.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoModelKernel/GeoShapeShift.h" 
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -143,8 +140,8 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62002::GetEnvelope()
   std::string baseName = "LAr::TBH62002";
   std::string H62002FrontBeamName = baseName + "::FrontBeam";
 
-  const double H62002FrontBeamXY  = 2000.*CLHEP::mm;
-  const double H62002FrontBeamZ   =  350.*CLHEP::mm;
+  const double H62002FrontBeamXY  = 2000.*GeoModelKernelUnits::mm;
+  const double H62002FrontBeamZ   =  350.*GeoModelKernelUnits::mm;
 
 
   GeoBox* H62002FrontBeamShape = new GeoBox( H62002FrontBeamXY, H62002FrontBeamXY, H62002FrontBeamZ );   
@@ -161,27 +158,27 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62002::GetEnvelope()
   //   In the old stand-alone code, all three were round with a radius of 5cm 
   //   and 7.5mm thickness.
   //   Logbooks in the control-room say that their xyz sizes are:
-  //   B1   : 30 x 30 x 10 CLHEP::mm
-  //   W1,2 : 150 x 150 x 10 CLHEP::mm
+  //   B1   : 30 x 30 x 10 GeoModelKernelUnits::mm
+  //   W1,2 : 150 x 150 x 10 GeoModelKernelUnits::mm
   // They are certainly not round, so stick with the logbook values 
   // The beam sees the instrumentation in the following order:
   // W1, W2, B1, MWPC5
 
   log << "Create Front Scintillators ..." << std::endl;
   
-  const double Wxy=  75.0*CLHEP::mm;
-  const double Wz =   5.0*CLHEP::mm;
-  const double Bxy=  15.0*CLHEP::mm;
-  const double Bz =   5.0*CLHEP::mm;
+  const double Wxy=  75.0*GeoModelKernelUnits::mm;
+  const double Wz =   5.0*GeoModelKernelUnits::mm;
+  const double Bxy=  15.0*GeoModelKernelUnits::mm;
+  const double Bz =   5.0*GeoModelKernelUnits::mm;
 
   std::vector<double> v_ScintXY;
   std::vector<double> v_ScintZ;
   v_ScintXY.push_back(Wxy);
   v_ScintXY.push_back(Wxy); 
   v_ScintXY.push_back(Bxy); 
-  v_ScintZ.push_back(170.*CLHEP::mm); 
-  v_ScintZ.push_back(200.*CLHEP::mm); 
-  v_ScintZ.push_back(340.*CLHEP::mm);
+  v_ScintZ.push_back(170.*GeoModelKernelUnits::mm); 
+  v_ScintZ.push_back(200.*GeoModelKernelUnits::mm); 
+  v_ScintZ.push_back(340.*GeoModelKernelUnits::mm);
 
    // Create one Scintillator and place it twice along z:
  
@@ -196,7 +193,7 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62002::GetEnvelope()
   //BScintPhysical->add( new GeoNameTag(ScintName) );
   for ( unsigned int i = 0; i < v_ScintZ.size(); i++ ) {
     m_H62002FrontBeamPhysical->add( new GeoIdentifierTag(i) );
-    m_H62002FrontBeamPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (v_ScintZ[ i ]-H62002FrontBeamZ) ) ) ) ;     m_H62002FrontBeamPhysical->add( new GeoNameTag(ScintName) );
+    m_H62002FrontBeamPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (v_ScintZ[ i ]-H62002FrontBeamZ) ) ) ) ;     m_H62002FrontBeamPhysical->add( new GeoNameTag(ScintName) );
 
     switch(i) {
     case 0: case 1: { m_H62002FrontBeamPhysical->add( WScintPhysical ); break; }
@@ -211,12 +208,12 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62002::GetEnvelope()
 
 
   //------ Get MWPC number 5 from LArGeoH6Cryostats
-  const double MwpcPos = 605.*CLHEP::mm;
-  double WireStep = 2.*CLHEP::mm;
+  const double MwpcPos = 605.*GeoModelKernelUnits::mm;
+  double WireStep = 2.*GeoModelKernelUnits::mm;
   MWPCConstruction  mwpcXConstruction (WireStep);
   GeoVPhysVol* mwpcEnvelope = mwpcXConstruction.GetEnvelope();
   m_H62002FrontBeamPhysical->add(new GeoIdentifierTag(5));
-  m_H62002FrontBeamPhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (MwpcPos-H62002FrontBeamZ) ) ) );
+  m_H62002FrontBeamPhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (MwpcPos-H62002FrontBeamZ) ) ) );
   m_H62002FrontBeamPhysical->add(mwpcEnvelope);    
   //------ Done with creating an MWPC from LArGeoH6Cryostats
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/HECConstructionH62002.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/HECConstructionH62002.cxx
index e4a629bcac3dcdd7d043b571af2236038a258f3b..44c6937ad57a9f267f79ee977c0fd148d105acf8 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/HECConstructionH62002.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/HECConstructionH62002.cxx
@@ -22,10 +22,12 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoShapeUnion.h"  
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -44,7 +46,7 @@
 
 
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -149,7 +151,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   int lastPlaneHEC = ( sizeof(HECMotherZplan) / sizeof(double) );
 
 
-  double moduleDeltaPhi =  2.*M_PI/32. ;  //  = 11.25*CLHEP::deg; 
+  double moduleDeltaPhi =  2.*M_PI/32. ;  //  = 11.25*GeoModelKernelUnits::deg; 
   double phiStart []  = {-19. , -18. } ;
   double hecPhistart[]  = { phiStart[0]*M_PI/32  ,   phiStart[1]*M_PI/32 } ;
   double modulePhistart[]  = { (phiStart[0]+2.)*M_PI/32  ,   (phiStart[1]+2.)*M_PI/32 } ;
@@ -210,9 +212,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   double             spacerDiameter[2];
 
   double ztie[2];   // This is the +/- z length of the tie rod in the LAr gap
-  ztie[0]=-0.227825*CLHEP::cm;
-  ztie[1]= 0.227825*CLHEP::cm;
-  double rodSize = 0.39435*CLHEP::cm;
+  ztie[0]=-0.227825*GeoModelKernelUnits::cm;
+  ztie[1]= 0.227825*GeoModelKernelUnits::cm;
+  double rodSize = 0.39435*GeoModelKernelUnits::cm;
 
 
 
@@ -223,7 +225,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   const GeoLogVol*   logiSlice[3];
   GeoPhysVol*        physiSlice[3];
   // Absorber
-  double             radialShift = 1.02*CLHEP::cm;  // absorbers are adjusted by this amount          
+  double             radialShift = 1.02*GeoModelKernelUnits::cm;  // absorbers are adjusted by this amount          
   GeoTubs*           solidFrontAbsorber[2];
   const GeoLogVol*   logiFrontAbsorber[2];
   GeoPhysVol*        physiFrontAbsorber[2];
@@ -270,19 +272,19 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   int    moduleNumberFront   = 3;             
   int    moduleNumberRear    = 2;              
   // radial dimensions of the modules:
-  double moduleRinner1  = (*hecLongitudinalBlock)[0]->getDouble("BLRMN")*CLHEP::cm;   
-  double moduleRinner2  = (*hecLongitudinalBlock)[1]->getDouble("BLRMN")*CLHEP::cm;   
-  double moduleRouter   = (*hecLongitudinalBlock)[0]->getDouble("BLRMX")*CLHEP::cm;   
+  double moduleRinner1  = (*hecLongitudinalBlock)[0]->getDouble("BLRMN")*GeoModelKernelUnits::cm;   
+  double moduleRinner2  = (*hecLongitudinalBlock)[1]->getDouble("BLRMN")*GeoModelKernelUnits::cm;   
+  double moduleRouter   = (*hecLongitudinalBlock)[0]->getDouble("BLRMX")*GeoModelKernelUnits::cm;   
   // thickness of Cu pads, LAr gaps and inter-wheel gap:
-  double copperPad      = (*hadronicEndcap)[0]->getDouble("COPPER")*CLHEP::cm;
-  double gapSize        = (*hadronicEndcap)[0]->getDouble("LARG")*CLHEP::cm;
-  double betweenWheel   = (*hadronicEndcap)[0]->getDouble("GAPWHL")*CLHEP::cm; 
+  double copperPad      = (*hadronicEndcap)[0]->getDouble("COPPER")*GeoModelKernelUnits::cm;
+  double gapSize        = (*hadronicEndcap)[0]->getDouble("LARG")*GeoModelKernelUnits::cm;
+  double betweenWheel   = (*hadronicEndcap)[0]->getDouble("GAPWHL")*GeoModelKernelUnits::cm; 
 
 
   for (int idepth=0; idepth < depthNumber; ++idepth)
     {
-      depthSize[idepth]    = (*hecLongitudinalBlock)[idepth]->getDouble("BLDPTH")*CLHEP::cm;
-      firstAbsorber[idepth]= (*hecLongitudinalBlock)[idepth]->getDouble("PLATE0")*CLHEP::cm;
+      depthSize[idepth]    = (*hecLongitudinalBlock)[idepth]->getDouble("BLDPTH")*GeoModelKernelUnits::cm;
+      firstAbsorber[idepth]= (*hecLongitudinalBlock)[idepth]->getDouble("PLATE0")*GeoModelKernelUnits::cm;
       gapNumber[idepth]    = (int) (*hecLongitudinalBlock)[idepth]->getDouble("BLMOD");
     }
 
@@ -291,8 +293,8 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       std::ostringstream A0STR;
       A0STR << "_" << ikapton;
       const std::string A0 = A0STR.str();
-      kaptonPosition[ikapton] = (*hadronicEndcap)[0]->getDouble("KPTPOS"+A0)*CLHEP::cm;
-      kaptonWidth[ikapton]    = (*hadronicEndcap)[0]->getDouble("KPTWID"+A0)*CLHEP::cm;
+      kaptonPosition[ikapton] = (*hadronicEndcap)[0]->getDouble("KPTPOS"+A0)*GeoModelKernelUnits::cm;
+      kaptonWidth[ikapton]    = (*hadronicEndcap)[0]->getDouble("KPTWID"+A0)*GeoModelKernelUnits::cm;
     }
 
   for (int itie=0; itie < 4; ++itie)
@@ -300,8 +302,8 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       std::ostringstream A0STR;
       A0STR << "_" << itie;
       const std::string A0 = A0STR.str(); 
-      tieRodPositionX[itie] = (*hadronicEndcap)[0]->getDouble("RODPOSX"+A0)*CLHEP::cm;
-      tieRodPositionY[itie] = (*hadronicEndcap)[0]->getDouble("RODPOSR"+A0)*CLHEP::cm;
+      tieRodPositionX[itie] = (*hadronicEndcap)[0]->getDouble("RODPOSX"+A0)*GeoModelKernelUnits::cm;
+      tieRodPositionY[itie] = (*hadronicEndcap)[0]->getDouble("RODPOSR"+A0)*GeoModelKernelUnits::cm;
     }
 
   for (int i=0; i < 2; ++i)
@@ -309,16 +311,16 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       std::ostringstream A0STR;
       A0STR << "_" << i;
       const std::string A0 = A0STR.str();  
-      tieRodDiameter[i] = (*hadronicEndcap)[0]->getDouble("RODDIM"+A0)*CLHEP::cm;
-      spacerDiameter[i] = (*hadronicEndcap)[0]->getDouble("SPCDIM"+A0)*CLHEP::cm;
+      tieRodDiameter[i] = (*hadronicEndcap)[0]->getDouble("RODDIM"+A0)*GeoModelKernelUnits::cm;
+      spacerDiameter[i] = (*hadronicEndcap)[0]->getDouble("SPCDIM"+A0)*GeoModelKernelUnits::cm;
     }
 
 
-  double frontAbsThickness = (*hadronicEndcap)[0]->getDouble("PLATE_0")*CLHEP::cm;
-  double rearAbsThickness  = (*hadronicEndcap)[0]->getDouble("PLATE_1")*CLHEP::cm;
+  double frontAbsThickness = (*hadronicEndcap)[0]->getDouble("PLATE_0")*GeoModelKernelUnits::cm;
+  double rearAbsThickness  = (*hadronicEndcap)[0]->getDouble("PLATE_1")*GeoModelKernelUnits::cm;
   
   // Radial dimensions and z-plane locations
-  double zCoordinate[] = {0.0*CLHEP::cm, depthSize[0], depthSize[0], 816.51*CLHEP::mm, 816.51*CLHEP::mm, 1350.*CLHEP::mm };
+  double zCoordinate[] = {0.0*GeoModelKernelUnits::cm, depthSize[0], depthSize[0], 816.51*GeoModelKernelUnits::mm, 816.51*GeoModelKernelUnits::mm, 1350.*GeoModelKernelUnits::mm };
   double innerRadius[] = {moduleRinner1,moduleRinner1,
                          moduleRinner2,moduleRinner2,moduleRinner2,moduleRinner2,};   
 
@@ -439,9 +441,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   //----------------------------------------------------------------
   //   Place FrontModules into FrontHEC wheel and RearModule into RearHEC wheel
   //----------------------------------------------------------------
-  Genfun::Variable    Index;
-  Genfun::GENFUNCTION ModuleRotationAngle = -moduleDeltaPhi + moduleDeltaPhi*Index; 
-  GeoXF::TRANSFUNCTION tf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),ModuleRotationAngle);
+  GeoGenfun::Variable    Index;
+  GeoGenfun::GENFUNCTION ModuleRotationAngle = -moduleDeltaPhi + moduleDeltaPhi*Index; 
+  GeoXF::TRANSFUNCTION tf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngle);
 
 
   GeoSerialIdentifier  *sIF = new GeoSerialIdentifier(1);
@@ -449,8 +451,8 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   physiFrontHEC->add(sIF);
   physiFrontHEC->add(sTF);
     
-  Genfun::GENFUNCTION ModuleRotationAngleR = -moduleDeltaPhi/2. + moduleDeltaPhi*Index; 
-  GeoXF::TRANSFUNCTION tr = GeoXF::Pow(HepGeom::RotateZ3D(1.0),ModuleRotationAngleR);
+  GeoGenfun::GENFUNCTION ModuleRotationAngleR = -moduleDeltaPhi/2. + moduleDeltaPhi*Index; 
+  GeoXF::TRANSFUNCTION tr = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngleR);
 
   GeoSerialIdentifier  *sIR = new GeoSerialIdentifier(2);
   GeoSerialTransformer *sTR = new GeoSerialTransformer (physiRearModule,&tr, moduleNumberRear);
@@ -488,7 +490,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   //----------------------------------------------------------------
   //    Absorbers , the inner and outer Radius are smaller by radialShift
   //                but positionned in the center of depth. this alows
-  //                to have 2 CLHEP::mm gap between the copper plates of neighbor FrontModules 
+  //                to have 2 GeoModelKernelUnits::mm gap between the copper plates of neighbor FrontModules 
   //----------------------------------------------------------------
 
   // Two different Absorbers for the front depths: 
@@ -553,7 +555,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       // Placement of the actual depth:
       depthPositionZ +=depthSize[idepth]/2.;
       physiFrontModule->add(new GeoIdentifierTag(100+idepth));
-      physiFrontModule->add(new GeoTransform(HepGeom::Translate3D(0,0,depthPositionZ)));     
+      physiFrontModule->add(new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));     
       physiFrontModule->add(physiDepth[idepth]);     
 
 
@@ -572,9 +574,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       else          {  islice=2;  frontabsorberNo=1;  } 
       
       double slicePositionZ=firstAbsorber[idepth]+ gapSize/2.0 -depthSize[idepth]/2.0;
-      Genfun::Variable Index;
-      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(HepGeom::TranslateZ3D(1.0),slicePositionZ + (frontAbsThickness+gapSize)*Index);
-      GeoXF::TRANSFUNCTION TA = HepGeom::TranslateY3D(-radialShift)*GeoXF::Pow(HepGeom::TranslateZ3D(1.0),
+      GeoGenfun::Variable Index;
+      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (frontAbsThickness+gapSize)*Index);
+      GeoXF::TRANSFUNCTION TA = GeoTrf::TranslateY3D(-radialShift)*GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),
 						absorberPositionZ[idepth] + (frontAbsThickness+gapSize)*Index);
       GeoSerialIdentifier *sI = new GeoSerialIdentifier(sliceCopyNo[idepth]);
       GeoSerialTransformer *sTS = new GeoSerialTransformer(physiSlice[islice],   &TS, gapNumber[idepth]);
@@ -602,7 +604,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       physiDepth[idepth] = new GeoPhysVol(logiDepth[idepth]);
 
       physiRearModule->add(new GeoIdentifierTag(100+idepth));
-      physiRearModule->add(new GeoTransform(HepGeom::Translate3D(0,0,depthPositionZ)));     
+      physiRearModule->add(new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));     
       physiRearModule->add(physiDepth[idepth]);
 
      
@@ -612,9 +614,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
       // Position 4 sensitive gaps and rear absorbers in 2 depths of a Rear Module:
       int islice=2;
       double slicePositionZ=firstAbsorber[idepth]+ gapSize/2.0 -depthSize[idepth]/2.0;      
-      Genfun::Variable Index;
-      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(HepGeom::TranslateZ3D(1.0),slicePositionZ + (rearAbsThickness+gapSize)*Index);
-      GeoXF::TRANSFUNCTION TA = HepGeom::TranslateY3D(-radialShift)*GeoXF::Pow(HepGeom::TranslateZ3D(1.0),
+      GeoGenfun::Variable Index;
+      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (rearAbsThickness+gapSize)*Index);
+      GeoXF::TRANSFUNCTION TA = GeoTrf::TranslateY3D(-radialShift)*GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),
 					        absorberPositionZ[idepth] + (rearAbsThickness+gapSize)*Index);
       GeoSerialIdentifier *sI = new GeoSerialIdentifier(sliceCopyNo[idepth]);
       GeoSerialTransformer *sTS = new GeoSerialTransformer(physiSlice[islice],   &TS, gapNumber[idepth]);
@@ -632,13 +634,13 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
 
   double firstAbsorberPositionZ = firstAbsorber[0]/2.- depthSize[0]/2.0;
   physiDepth[0]->add(new GeoIdentifierTag(50));
-  physiDepth[0]->add(new GeoTransform(HepGeom::Translate3D(0,-radialShift,firstAbsorberPositionZ)));     
+  physiDepth[0]->add(new GeoTransform(GeoTrf::Translate3D(0,-radialShift,firstAbsorberPositionZ)));     
   physiDepth[0]->add(physiFirstAbsorber[0]);     
 
   
   firstAbsorberPositionZ = firstAbsorber[3]/2.- depthSize[3]/2.0;
   physiDepth[3]->add(new GeoIdentifierTag(51));
-  physiDepth[3]->add(new GeoTransform(HepGeom::Translate3D(0,-radialShift,firstAbsorberPositionZ)));     
+  physiDepth[3]->add(new GeoTransform(GeoTrf::Translate3D(0,-radialShift,firstAbsorberPositionZ)));     
   physiDepth[3]->add(physiFirstAbsorber[1]);     
   
 
@@ -685,13 +687,13 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
 
       physiEstBoard = new GeoPhysVol(logiEstBoard);
       physiSlice[islice]->add(new GeoIdentifierTag(indexKapton));
-      physiSlice[islice]->add(new GeoTransform(HepGeom::Translate3D(0,0,kaptonPositionZ)));     
+      physiSlice[islice]->add(new GeoTransform(GeoTrf::Translate3D(0,0,kaptonPositionZ)));     
       physiSlice[islice]->add(physiEstBoard);     
 
 
       physiPadBoard = new GeoPhysVol(logiPadBoard);
       physiEstBoard->add(new GeoIdentifierTag(indexKapton));
-      physiEstBoard->add(new GeoTransform(HepGeom::Translate3D(0,0,0)));     
+      physiEstBoard->add(new GeoTransform(GeoTrf::Translate3D(0,0,0)));     
       physiEstBoard->add(physiPadBoard);     
 
     }//for islice
@@ -701,10 +703,10 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   //    Tie rods in Slice
   //----------------------------------------------------------------
 
-  //  double rodSize = 0.85*CLHEP::cm;
+  //  double rodSize = 0.85*GeoModelKernelUnits::cm;
   for (int iwheel=0; iwheel<2; iwheel++) 
     { 
-      solidTieRod[iwheel] = new GeoTubs(0.*CLHEP::cm,spacerDiameter[iwheel]/2.,rodSize/2., 0.*CLHEP::deg,360.*CLHEP::deg); 
+      solidTieRod[iwheel] = new GeoTubs(0.*GeoModelKernelUnits::cm,spacerDiameter[iwheel]/2.,rodSize/2., 0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg); 
       logiTieRod[iwheel] = new GeoLogVol(tieRodName, solidTieRod[iwheel], Iron);     
     }
 
@@ -718,14 +720,14 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
 
 	physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
         physiSlice[islice]->add(new GeoIdentifierTag(indexRod));
-        physiSlice[islice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[indexRod],
+        physiSlice[islice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
                                                       -tieRodPositionY[indexRod],ztie[iz])));     
         physiSlice[islice]->add(physiTieRod[numberTie]);     
 
 
  	physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
         physiSlice[islice]->add(new GeoIdentifierTag(indexRod));
-        physiSlice[islice]->add(new GeoTransform(HepGeom::Translate3D(-tieRodPositionX[indexRod],
+        physiSlice[islice]->add(new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
                                                       -tieRodPositionY[indexRod],ztie[iz])));     
         physiSlice[islice]->add(physiTieRod[numberTie]);     
 
@@ -736,7 +738,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
 
 	physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
         physiSlice[islice]->add(new GeoIdentifierTag(indexRod));
-        physiSlice[islice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[0],-tieRodPositionY[0],ztie[iz1]))); 
+        physiSlice[islice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],-tieRodPositionY[0],ztie[iz1]))); 
         physiSlice[islice]->add(physiTieRod[numberTie]);     
 
       }//for iz1  (this dealt with the one last un-paired rod at the module's narrow end)
@@ -745,12 +747,12 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
   //----------------------------------------------------------------
   //    Tie rods in Absorbers
   //----------------------------------------------------------------
-  solidAbsorberTieRod[0] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[0]/2.,frontAbsThickness/2.,0.*CLHEP::deg,360.*CLHEP::deg);
-  solidAbsorberTieRod[1] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[1]/2.,rearAbsThickness/2.,0.*CLHEP::deg,360.*CLHEP::deg); 
+  solidAbsorberTieRod[0] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[0]/2.,frontAbsThickness/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg);
+  solidAbsorberTieRod[1] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[1]/2.,rearAbsThickness/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg); 
   logiAbsorberTieRod[0]  = new GeoLogVol(tieRodName,solidAbsorberTieRod[0],Iron);  //,0,0,0);
   logiAbsorberTieRod[1]  = new GeoLogVol(tieRodName,solidAbsorberTieRod[1],Iron);  //,0,0,0);
-  solidAbsorberTieRodRear[0] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[0]/2.,frontAbsThickness/2.,0.*CLHEP::deg,360.*CLHEP::deg);
-  solidAbsorberTieRodRear[1] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[1]/2.,rearAbsThickness/2.,0.*CLHEP::deg,360.*CLHEP::deg); 
+  solidAbsorberTieRodRear[0] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[0]/2.,frontAbsThickness/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg);
+  solidAbsorberTieRodRear[1] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[1]/2.,rearAbsThickness/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg); 
   logiAbsorberTieRodRear[0]  = new GeoLogVol(tieRodRearName,solidAbsorberTieRodRear[0],Iron);  //,0,0,0);
   logiAbsorberTieRodRear[1]  = new GeoLogVol(tieRodRearName,solidAbsorberTieRodRear[1],Iron);  //,0,0,0);
 
@@ -764,18 +766,18 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
         {
           physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
           physiFrontAbsorber[islice]->add(new GeoIdentifierTag(indexRod));
-          physiFrontAbsorber[islice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[indexRod],
+          physiFrontAbsorber[islice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
                                                       -(tieRodPositionY[indexRod]-radialShift), 0)));     
           physiFrontAbsorber[islice]->add(physiAbsorberTieRod[indexR]);     
           physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
           physiFrontAbsorber[islice]->add(new GeoIdentifierTag(indexRod));
-          physiFrontAbsorber[islice]->add(new GeoTransform(HepGeom::Translate3D(-tieRodPositionX[indexRod],
+          physiFrontAbsorber[islice]->add(new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
                                                       -(tieRodPositionY[indexRod]-radialShift), 0)));     
           physiFrontAbsorber[islice]->add(physiAbsorberTieRod[indexR]);     
 	}     
     physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
     physiFrontAbsorber[islice]->add(new GeoIdentifierTag(indexRod));
-    physiFrontAbsorber[islice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[0],
+    physiFrontAbsorber[islice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],
                                                 -(tieRodPositionY[0]-radialShift),0)));     
 
 
@@ -789,13 +791,13 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
         {
           physiAbsorberTieRodRear[1] = new GeoPhysVol(logiAbsorberTieRodRear[1]);
           physiRearAbsorber->add(new GeoIdentifierTag(indexRod));
-          physiRearAbsorber->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[indexRod],
+          physiRearAbsorber->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
                                                       -(tieRodPositionY[indexRod]-radialShift), 0)));     
           physiRearAbsorber->add(physiAbsorberTieRodRear[1]);     
 
           physiAbsorberTieRodRear[1] = new GeoPhysVol(logiAbsorberTieRodRear[1]);
           physiRearAbsorber->add(new GeoIdentifierTag(indexRod));
-          physiRearAbsorber->add(new GeoTransform(HepGeom::Translate3D(-tieRodPositionX[indexRod],
+          physiRearAbsorber->add(new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
                                                       -(tieRodPositionY[indexRod]-radialShift), 0)));     
 
 
@@ -806,7 +808,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62002::GetEnvelope()
     //now the single tie rod at the narrow end:
     physiAbsorberTieRodRear[1] = new GeoPhysVol(logiAbsorberTieRodRear[1]);
     physiRearAbsorber->add(new GeoIdentifierTag(indexRod));
-    physiRearAbsorber->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionX[0],
+    physiRearAbsorber->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],
                                                 -(tieRodPositionY[0]-radialShift),0)));     
 
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/LArDetectorFactoryH62002.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/LArDetectorFactoryH62002.cxx
index c6810a9ad3c58cd384bc70683474f609995f140b..64849d9ef750e7c1e4f4739369e253bea3e9e710 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/LArDetectorFactoryH62002.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/LArDetectorFactoryH62002.cxx
@@ -26,10 +26,12 @@
 #include "GeoModelKernel/GeoSerialDenominator.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoSerialTransformer.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 // need if we want to use EMEC from LArGeoEndcap:
@@ -60,7 +62,7 @@
 #include "LArGeoCode/LArMaterialManager.h"
 //
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -126,8 +128,8 @@ void LArGeo::LArDetectorFactoryH62002::getSimulationParameters()
   }
 
  (*log)<< MSG::INFO<< endmsg;
- (*log)<< MSG::INFO << " Use cryo X : " <<  m_cryoXpos << " CLHEP::mm" << endmsg;
- (*log)<< MSG::INFO << " Use table Y : " <<  m_tableYpos << " CLHEP::mm" << endmsg;
+ (*log)<< MSG::INFO << " Use cryo X : " <<  m_cryoXpos << " GeoModelKernelUnits::mm" << endmsg;
+ (*log)<< MSG::INFO << " Use table Y : " <<  m_tableYpos << " GeoModelKernelUnits::mm" << endmsg;
 
 
 }
@@ -160,13 +162,13 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
 
   // 4databa :  // numbers taken from LArCalorimeter/LArG4TB/LArG4TBExpHall/src/LArG4TBEmecHecDetectorConstruction.cc
   // (That's a mighty big hall.....)
-  double expHallX = 14000.*CLHEP::mm;
-  double expHallY = 14000.*CLHEP::mm;
-  double expHallZ = 50000.*CLHEP::mm;
-  //double cryoZpos = 12250.*CLHEP::mm;
-  //double cryoXrot = -90.*CLHEP::deg; 
-  //double cryoXpos = m_cryoXpos * CLHEP::mm ;
-  //double cryoXpos = 0.*CLHEP::mm;  // <-- Should be made available in RunOptions! (Perhaps default in DB...)
+  double expHallX = 14000.*GeoModelKernelUnits::mm;
+  double expHallY = 14000.*GeoModelKernelUnits::mm;
+  double expHallZ = 50000.*GeoModelKernelUnits::mm;
+  //double cryoZpos = 12250.*GeoModelKernelUnits::mm;
+  //double cryoXrot = -90.*GeoModelKernelUnits::deg; 
+  //double cryoXpos = m_cryoXpos * GeoModelKernelUnits::mm ;
+  //double cryoXpos = 0.*GeoModelKernelUnits::mm;  // <-- Should be made available in RunOptions! (Perhaps default in DB...)
 
   //-----------------------------------------------------------------------------------//  
   // Next make the box that describes the shape of the expHall volume:                 //  
@@ -191,32 +193,30 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
   // the element we want to position in the following order:
 
 
-  double Theta = -90. * CLHEP::deg;
-  double Phi   = 0.  * CLHEP::deg;
+  double Theta = -90. * GeoModelKernelUnits::deg;
+  double Phi   = 0.  * GeoModelKernelUnits::deg;
 
-  CLHEP::HepRotation Mrot ;
-  Mrot.rotateX(Theta);
-  Mrot.rotateZ(Phi); 
-  CLHEP::Hep3Vector pos3Vector(    m_cryoXpos*CLHEP::mm,    0.*CLHEP::mm,   12250.*CLHEP::mm );
+  GeoTrf::Transform3D Mrot(GeoTrf::RotateZ3D(Phi)*GeoTrf::RotateX3D(Theta));
+  GeoTrf::Translate3D pos3Vector(    m_cryoXpos*GeoModelKernelUnits::mm,    0.*GeoModelKernelUnits::mm,   12250.*GeoModelKernelUnits::mm );
 
   H6CryostatConstruction  H6CryoCons;
   GeoVPhysVol* Envelope = 0;
   Envelope = H6CryoCons.GetEnvelope();
   expHallPhys->add(new GeoNameTag("LAr"));
-  //expHallPhys->add( new GeoTransform( HepGeom::Translate3D(pos3Vector)*HepGeom::RotateX3D(Theta)*HepGeom::RotateZ3D(Phi) ));
-  expHallPhys->add( new GeoTransform( HepGeom::Transform3D(Mrot, pos3Vector) ) );
+  //expHallPhys->add( new GeoTransform( GeoTrf::Translate3D(pos3Vector)*GeoTrf::RotateX3D(Theta)*GeoTrf::RotateZ3D(Phi) ));
+  expHallPhys->add( new GeoTransform( GeoTrf::Transform3D(pos3Vector*Mrot) ) );
   expHallPhys->add(Envelope);
  
 
 
   //Add the walls in front of the cryostat:
   {
-    const double H62002WallsPos = 10182.*CLHEP::mm;  // A wild guess at the moment.....
+    const double H62002WallsPos = 10182.*GeoModelKernelUnits::mm;  // A wild guess at the moment.....
     WallsConstruction  WallsConstruction2002;
     GeoVPhysVol* frontwalls = WallsConstruction2002.GetEnvelope();
     if(frontwalls !=0 && expHallPhys !=0){
       expHallPhys->add( new GeoNameTag("LAr"));
-      expHallPhys->add( new GeoTransform( HepGeom::TranslateZ3D(H62002WallsPos) ) );  
+      expHallPhys->add( new GeoTransform( GeoTrf::TranslateZ3D(H62002WallsPos) ) );  
       expHallPhys->add(frontwalls);    
     }
   }
@@ -224,12 +224,12 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
 
   //Add the table instrumentation:
   {    
-    const double H62002TablePos = 8320.*CLHEP::mm;  
+    const double H62002TablePos = 8320.*GeoModelKernelUnits::mm;  
     TableConstructionH62002  TableConstruction;
     GeoVPhysVol* table = TableConstruction.GetEnvelope();
     if(table !=0 && expHallPhys !=0){
       expHallPhys->add( new GeoNameTag("LAr"));
-      expHallPhys->add( new GeoTransform( HepGeom::TranslateZ3D(H62002TablePos) ) );  
+      expHallPhys->add( new GeoTransform( GeoTrf::TranslateZ3D(H62002TablePos) ) );  
       expHallPhys->add(table);    
     }
   }
@@ -237,14 +237,14 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
 
   //Add the front beam instrumentation:
   {
-    const double H62002FrontBeamPos = -20215.5*CLHEP::mm;  // (Use this to get the Front dets. in Peter Schacht's position)   
-    //const double H62002FrontBeamPos = -20439.*CLHEP::mm; // (according to old code: [-21600+801+350]*CLHEP::mm)   
+    const double H62002FrontBeamPos = -20215.5*GeoModelKernelUnits::mm;  // (Use this to get the Front dets. in Peter Schacht's position)   
+    //const double H62002FrontBeamPos = -20439.*GeoModelKernelUnits::mm; // (according to old code: [-21600+801+350]*GeoModelKernelUnits::mm)   
     // (with 350=1/2 length of FrontBeam volume)
     FrontBeamConstructionH62002  FrontBeamConstruction;
     GeoVPhysVol* front = FrontBeamConstruction.GetEnvelope();
     if(front !=0 && expHallPhys !=0){
       expHallPhys->add( new GeoNameTag("LAr"));
-      expHallPhys->add( new GeoTransform( HepGeom::TranslateZ3D(H62002FrontBeamPos) ) );  
+      expHallPhys->add( new GeoTransform( GeoTrf::TranslateZ3D(H62002FrontBeamPos) ) );  
       expHallPhys->add(front);    
     }
   }
@@ -263,12 +263,10 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
   // For the moment it is still commented out until I have
   // its true geometry confirmed; But really it is ready to go:
   // Add Rohacell Excluder 
-  double ThetaRoha = 0. * CLHEP::deg;
-  double PhiRoha   = 0.  * CLHEP::deg;
-  CLHEP::HepRotation MrotRoha ;
-  MrotRoha.rotateX(ThetaRoha);
-  MrotRoha.rotateZ(PhiRoha); 
-  CLHEP::Hep3Vector pos3Roha(    0*CLHEP::mm,   0.0*CLHEP::mm ,   0.*CLHEP::mm);
+  // double ThetaRoha = 0. * GeoModelKernelUnits::deg;
+  // double PhiRoha   = 0.  * GeoModelKernelUnits::deg;
+  // GeoTrf::Transform3D MrotRoha(GeoTrf::RotateZ3D(PhiRoha)*GeoTrf::RotateX3D(ThetaRoha));
+  // GeoTrf::Translate3D pos3Roha(    0*GeoModelKernelUnits::mm,   0.0*GeoModelKernelUnits::mm ,   0.*GeoModelKernelUnits::mm);
 
   {    
     ExcluderConstruction excluderConstruction;
@@ -288,21 +286,19 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
   EMECDetectorManager *emecDetectorManager  = new EMECDetectorManager();
 
 
-  double ThetaEmec = -90. * CLHEP::deg;
-  double PhiEmec   = 180.  * CLHEP::deg;
+  double ThetaEmec = -90. * GeoModelKernelUnits::deg;
+  double PhiEmec   = 180.  * GeoModelKernelUnits::deg;
 
-  CLHEP::HepRotation MrotEmec ;
-  MrotEmec.rotateX(ThetaEmec);
-  MrotEmec.rotateZ(PhiEmec); 
-  //  CLHEP::Hep3Vector pos3Emec(    0*CLHEP::mm,   869.0*CLHEP::mm ,   1720.*CLHEP::mm);
-  CLHEP::Hep3Vector pos3Emec(    0*CLHEP::mm,   808.0*CLHEP::mm ,   1720.*CLHEP::mm);
+  GeoTrf::Transform3D MrotEmec(GeoTrf::RotateZ3D(PhiEmec)*GeoTrf::RotateX3D(ThetaEmec));
+  //  GeoTrf::Vector3D pos3Emec(    0*GeoModelKernelUnits::mm,   869.0*GeoModelKernelUnits::mm ,   1720.*GeoModelKernelUnits::mm);
+  GeoTrf::Translate3D pos3Emec(    0*GeoModelKernelUnits::mm,   808.0*GeoModelKernelUnits::mm ,   1720.*GeoModelKernelUnits::mm);
 
   //use this line for physical construction of the EMEC outer wheel only:
   EMECConstruction emecConstruction(true, true, true);
 
   GeoVFullPhysVol* emecEnvelope = emecConstruction.GetEnvelope();
   LArPhysical->add(new GeoNameTag("LAr"));
-  LArPhysical->add( new GeoTransform( HepGeom::Transform3D(MrotEmec, pos3Emec) ) );
+  LArPhysical->add( new GeoTransform( GeoTrf::Transform3D(pos3Emec*MrotEmec) ) );
   LArPhysical->add(emecEnvelope);    
   { 
     StoredPhysVol *sEmecOuterWheel;   
@@ -396,21 +392,19 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
   }
   
   
-  double ThetaPS = -90. * CLHEP::deg;
-  double PhiPS   = 180.  * CLHEP::deg;
-  CLHEP::HepRotation MrotPS ;
-  MrotPS.rotateX(ThetaPS);
-  MrotPS.rotateZ(PhiPS); 
-  //CLHEP::Hep3Vector pos3PS(    0*CLHEP::mm,   945.5*CLHEP::mm ,   1720.*CLHEP::mm);
-  CLHEP::Hep3Vector pos3PS(    0*CLHEP::mm,   888.5*CLHEP::mm ,   1720.*CLHEP::mm);
+  double ThetaPS = -90. * GeoModelKernelUnits::deg;
+  double PhiPS   = 180.  * GeoModelKernelUnits::deg;
+  GeoTrf::Transform3D MrotPS(GeoTrf::RotateZ3D(PhiPS)*GeoTrf::RotateX3D(ThetaPS));
+  //GeoTrf::Vector3D pos3PS(    0*GeoModelKernelUnits::mm,   945.5*GeoModelKernelUnits::mm ,   1720.*GeoModelKernelUnits::mm);
+  GeoTrf::Translate3D pos3PS(    0*GeoModelKernelUnits::mm,   888.5*GeoModelKernelUnits::mm ,   1720.*GeoModelKernelUnits::mm);
   
   //double zPSpos = -869. -(61. +2. +13.5);
   //std::string PresamplerName = baseName + "::Presampler::";
   EndcapPresamplerConstruction PresamplerConstruction(true);
   GeoFullPhysVol* PresamplerEnvelope = PresamplerConstruction.Envelope();
   if ( PresamplerEnvelope != 0 && LArPhysical != 0 ) {    
-    //LArPhysical->add( new GeoTransform( HepGeom::Translate3D(pos3PS)*HepGeom::RotateX3D(ThetaPS)*HepGeom::RotateZ3D(PhiPS) ));
-     LArPhysical->add( new GeoTransform( HepGeom::Transform3D(MrotPS, pos3PS) ) );
+    //LArPhysical->add( new GeoTransform( GeoTrf::Translate3D(pos3PS)*GeoTrf::RotateX3D(ThetaPS)*GeoTrf::RotateZ3D(PhiPS) ));
+     LArPhysical->add( new GeoTransform( GeoTrf::Transform3D(pos3PS*MrotPS) ) );
      LArPhysical->add( PresamplerEnvelope );
   }
   {
@@ -426,20 +420,18 @@ void LArGeo::LArDetectorFactoryH62002::create(GeoPhysVol *world)
 
 
   // Add HEC 
-  double ThetaHec = 90. * CLHEP::deg;
-  double PhiHec   = 0.  * CLHEP::deg;
-  CLHEP::HepRotation MrotHec ;
-  MrotHec.rotateX(ThetaHec);
-  MrotHec.rotateZ(PhiHec); 
-  CLHEP::Hep3Vector pos3Hec(    0*CLHEP::mm,   233.0*CLHEP::mm ,   1720.*CLHEP::mm);
+  double ThetaHec = 90. * GeoModelKernelUnits::deg;
+  double PhiHec   = 0.  * GeoModelKernelUnits::deg;
+  GeoTrf::Transform3D MrotHec(GeoTrf::RotateZ3D(PhiHec)*GeoTrf::RotateX3D(ThetaHec));
+  GeoTrf::Translate3D pos3Hec(    0*GeoModelKernelUnits::mm,   233.0*GeoModelKernelUnits::mm ,   1720.*GeoModelKernelUnits::mm);
 
   {    
     HECConstructionH62002 hecConstruction;
     GeoVFullPhysVol* hecEnvelope = hecConstruction.GetEnvelope();
     if(hecEnvelope !=0 && LArPhysical !=0){
       LArPhysical->add( new GeoNameTag("LAr"));
-      //LArPhysical->add( new GeoTransform( HepGeom::Translate3D(pos3Hec)*HepGeom::RotateX3D(ThetaHec)*HepGeom::RotateZ3D(PhiHec) ));
-      LArPhysical->add( new GeoTransform( HepGeom::Transform3D(MrotHec, pos3Hec) ) );
+      //LArPhysical->add( new GeoTransform( GeoTrf::Translate3D(pos3Hec)*GeoTrf::RotateX3D(ThetaHec)*GeoTrf::RotateZ3D(PhiHec) ));
+      LArPhysical->add( new GeoTransform( GeoTrf::Transform3D(pos3Hec*MrotHec) ) );
       LArPhysical->add(hecEnvelope);    
     }
   }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/TableConstructionH62002.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/TableConstructionH62002.cxx
index 1ee8391944d2424eb3fbe3dbef934112d347c973..8b2d56e9cbf4090da79159c36eb34b74ac318980 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/TableConstructionH62002.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62002Algs/src/TableConstructionH62002.cxx
@@ -23,17 +23,14 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -141,8 +138,8 @@ GeoVPhysVol* LArGeo::TableConstructionH62002::GetEnvelope()
   std::string baseName = "LAr::TBH62002";
   std::string H62002TableName = baseName + "::Table";
 
-  const double H62002TableXY  =  150.*CLHEP::mm;
-  const double H62002TableZ   = 1200.*CLHEP::mm;
+  const double H62002TableXY  =  150.*GeoModelKernelUnits::mm;
+  const double H62002TableZ   = 1200.*GeoModelKernelUnits::mm;
 
 
   GeoBox* H62002TableShape = new GeoBox( H62002TableXY, H62002TableXY, H62002TableZ );   
@@ -159,13 +156,13 @@ GeoVPhysVol* LArGeo::TableConstructionH62002::GetEnvelope()
   log << "Create F1/F2 Scintillators ..." << std::endl;
   
   // Universal size:
-  const double Fx = 10.0*CLHEP::mm;
-  const double Fy = 10.0*CLHEP::mm;
-  const double Fz = 10.0*CLHEP::mm;
+  const double Fx = 10.0*GeoModelKernelUnits::mm;
+  const double Fy = 10.0*GeoModelKernelUnits::mm;
+  const double Fz = 10.0*GeoModelKernelUnits::mm;
 
   std::vector<double> v_ScintZ;
-  v_ScintZ.push_back(2195.*CLHEP::mm); // <--  = btas_pos
-  v_ScintZ.push_back(2320.*CLHEP::mm);
+  v_ScintZ.push_back(2195.*GeoModelKernelUnits::mm); // <--  = btas_pos
+  v_ScintZ.push_back(2320.*GeoModelKernelUnits::mm);
   const double ScintDx = Fx;
   const double ScintDy = Fy;
   const double ScintDz = Fz;
@@ -178,7 +175,7 @@ GeoVPhysVol* LArGeo::TableConstructionH62002::GetEnvelope()
   GeoPhysVol* ScintPhysical = new GeoPhysVol( ScintLogical );    
   for ( unsigned int i = 0; i < v_ScintZ.size(); i++ ) {
     m_H62002TablePhysical->add( new GeoIdentifierTag(i) );
-    m_H62002TablePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (v_ScintZ[ i ]-H62002TableZ) ) ) );
+    m_H62002TablePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (v_ScintZ[ i ]-H62002TableZ) ) ) );
     log << MSG::INFO << " Position the F Scintillator at: " << v_ScintZ[ i ] << endmsg ;
     m_H62002TablePhysical->add( ScintPhysical );
   } 
@@ -193,16 +190,16 @@ GeoVPhysVol* LArGeo::TableConstructionH62002::GetEnvelope()
   //------ Get the MWPCs from LArGeoH6Cryostats
   const int MwpcNumber = 3;
   std::vector<double> v_MwpcPos;
-  v_MwpcPos.push_back(105.*CLHEP::mm);
-  v_MwpcPos.push_back(825.*CLHEP::mm); 
-  v_MwpcPos.push_back(1815.*CLHEP::mm);
-  double WireStep = 1.*CLHEP::mm;
+  v_MwpcPos.push_back(105.*GeoModelKernelUnits::mm);
+  v_MwpcPos.push_back(825.*GeoModelKernelUnits::mm); 
+  v_MwpcPos.push_back(1815.*GeoModelKernelUnits::mm);
+  double WireStep = 1.*GeoModelKernelUnits::mm;
   MWPCConstruction mwpcXConstruction (WireStep);
   GeoVPhysVol* mwpcEnvelope = mwpcXConstruction.GetEnvelope();
   for ( int imwpc = 0; imwpc<MwpcNumber ; imwpc++)
     { 
       m_H62002TablePhysical->add(new GeoIdentifierTag(imwpc+2));
-      m_H62002TablePhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (v_MwpcPos[imwpc]-H62002TableZ) ) ) );
+      m_H62002TablePhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (v_MwpcPos[imwpc]-H62002TableZ) ) ) );
       m_H62002TablePhysical->add(mwpcEnvelope);    
     }
   //------ Done with creating an MWPC from LArGeoH6Cryostats
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/CMakeLists.txt
index e038e2c30053069b0544b5b4ee23e0beb5e3441b..a94c6ab0203a32923ced4ed7df239757ed485027 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( LArGeoH62003Algs )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
@@ -21,15 +20,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArGeoH62003Algs
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests GaudiKernel LArG4RunControl LArGeoFcal LArGeoH6Cryostats )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests GaudiKernel LArG4RunControl LArGeoFcal LArGeoH6Cryostats )
 
 # Install files from the package:
 atlas_install_headers( LArGeoH62003Algs )
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/src/LArDetectorConstructionH62003.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/src/LArDetectorConstructionH62003.cxx
index d5f875ce08924cfd4cfdd9cab6b58d2130c4f046..e613b8c86a7ff588f46474b905402a45b8c941d6 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/src/LArDetectorConstructionH62003.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62003Algs/src/LArDetectorConstructionH62003.cxx
@@ -25,6 +25,8 @@
 #include "GeoModelKernel/GeoSerialDenominator.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
@@ -35,13 +37,7 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "LArG4RunControl/LArG4TBPosOptions.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
-
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -58,30 +54,32 @@
 #include <cmath>
 #include <iostream>
 
-using CLHEP::g;
-using CLHEP::cm3;
-using CLHEP::mm;
-using CLHEP::cm;
-using CLHEP::m;
-using CLHEP::deg;
-using CLHEP::Hep3Vector;
-using CLHEP::HepRotationX;
-using CLHEP::HepRotationY;
-using HepGeom::Transform3D;
-using HepGeom::Translate3D;
-using HepGeom::TranslateZ3D;
-using HepGeom::RotateX3D;
-using HepGeom::RotateY3D;
-using HepGeom::RotateZ3D;
-
-
-LArGeo::LArDetectorConstructionH62003::LArDetectorConstructionH62003():
-m_H62003EnvelopePhysical(NULL),
-m_fcalVisLimit(-1),
-m_axisVisState(false),
-m_pAccessSvc(NULL){}
-
-LArGeo::LArDetectorConstructionH62003::~LArDetectorConstructionH62003() {}
+using GeoModelKernelUnits::g;
+using GeoModelKernelUnits::cm3;
+using GeoModelKernelUnits::mm;
+using GeoModelKernelUnits::cm;
+using GeoModelKernelUnits::m;
+using GeoModelKernelUnits::deg;
+using GeoTrf::Vector3D;
+using GeoTrf::Transform3D;
+using GeoTrf::Translate3D;
+using GeoTrf::TranslateZ3D;
+using GeoTrf::RotateX3D;
+using GeoTrf::RotateY3D;
+using GeoTrf::RotateZ3D;
+
+
+LArGeo::LArDetectorConstructionH62003::LArDetectorConstructionH62003()
+ : m_H62003EnvelopePhysical(NULL)
+ , m_fcalVisLimit(-1)
+ , m_axisVisState(false)
+ , m_pAccessSvc(nullptr)
+{
+}
+
+LArGeo::LArDetectorConstructionH62003::~LArDetectorConstructionH62003() 
+{
+}
 
 GeoVPhysVol* LArGeo::LArDetectorConstructionH62003::GetEnvelope()
 {
@@ -862,13 +860,13 @@ GeoVPhysVol* LArGeo::LArDetectorConstructionH62003::GetEnvelope()
 		  << " is located at: "
 		  << "\n"
 		  << "x =  " 
-		  << m_H62003EnvelopePhysical->getXToChildVol(i).getTranslation().x()
+		  << m_H62003EnvelopePhysical->getXToChildVol(i).translation().x()
 		  << "\n"
 		  << "y =  " 
-		  << m_H62003EnvelopePhysical->getXToChildVol(i).getTranslation().y()
+		  << m_H62003EnvelopePhysical->getXToChildVol(i).translation().y()
 		  << "\n"
 		  << "z =  " 
-		  << m_H62003EnvelopePhysical->getXToChildVol(i).getTranslation().z()
+		  << m_H62003EnvelopePhysical->getXToChildVol(i).translation().z()
 		  << "\n"
 		  << endmsg;
       }
@@ -894,11 +892,7 @@ void LArGeo::LArDetectorConstructionH62003::createAxis(GeoFullPhysVol* H62003Env
 	const GeoLogVol* XAxisLogical = new GeoLogVol(XAxisName,XYaxisShape,mat);
 	GeoPhysVol* XAxisPhysVol = new GeoPhysVol(XAxisLogical);
 	
-	H62003EnvelopePhysical->
-		add(new GeoTransform(Transform3D(HepRotationY( 90.*deg ), 
-                                                 Hep3Vector(axisXYHalfLength, 
-                                                            0.*m, 
-                                                            0.*m))));
+	H62003EnvelopePhysical->add(new GeoTransform(Transform3D(GeoTrf::Translate3D(axisXYHalfLength,0.*m,0.*m)*GeoTrf::RotateY3D(90.*deg))));
 	H62003EnvelopePhysical->add(XAxisPhysVol);
 	
 	// y-axis
@@ -906,12 +900,7 @@ void LArGeo::LArDetectorConstructionH62003::createAxis(GeoFullPhysVol* H62003Env
 	const GeoLogVol* YAxisLogical = new GeoLogVol(YAxisName,XYaxisShape,mat);
 	GeoPhysVol* YAxisPhysVol = new GeoPhysVol( YAxisLogical );
 	
-	H62003EnvelopePhysical->
-		add(new GeoTransform(Transform3D(HepRotationX( -90.*deg ),
-                                                 Hep3Vector(
-                                                            0.*m,
-                                                            axisXYHalfLength, 
-                                                            0.*m))));
+	H62003EnvelopePhysical->add(new GeoTransform(Transform3D(GeoTrf::Translate3D(0.*m,axisXYHalfLength,0.*m)*GeoTrf::RotateX3D(-90.*deg))));
 	H62003EnvelopePhysical->add(YAxisPhysVol);
 	
 	//z-axis
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/CMakeLists.txt
index 785d0034c2b78ce6bb61ce49f19e8bc00d949b7e..2ddf8989d3b0f120a689ff19a4348145a443aea2 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( LArGeoH62004Algs )
 atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
@@ -25,15 +24,16 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArGeoH62004Algs
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} StoreGateLib SGtests GeoModelKernel GeoModelUtilities LArReadoutGeometry CaloDetDescrLib AthContainers GaudiKernel LArG4RunControl LArGeoCode LArGeoEndcap LArGeoH6Cryostats LArGeoTBECLib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} StoreGateLib SGtests GeoModelUtilities LArReadoutGeometry CaloDetDescrLib AthContainers GaudiKernel LArG4RunControl LArGeoCode LArGeoEndcap LArGeoH6Cryostats LArGeoTBECLib )
 
 # Install files from the package:
 atlas_install_headers( LArGeoH62004Algs )
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ExcluderConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ExcluderConstructionH62004.cxx
index a35a7aec222b75f67af482f91e0ae5fdca2ae93a..5320788f5ff33c0e9f684a4b686392a49dc511a2 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ExcluderConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ExcluderConstructionH62004.cxx
@@ -27,6 +27,8 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -97,7 +99,7 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
   const GeoElement*  H=materialManager->getElement("Hydrogen");
   const GeoElement*  O=materialManager->getElement("Oxygen");
   const GeoElement*  N=materialManager->getElement("Nitrogen");
-  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.112*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.112*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Rohacell->add(C,0.6465);
   Rohacell->add(H,0.07836);
   Rohacell->add(O,0.19137);
@@ -105,7 +107,7 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
   Rohacell->lock();
 
   /*
-  a = 12.957*CLHEP::g/CLHEP::mole;                                                       
+  a = 12.957*GeoModelKernelUnits::g/GeoModelKernelUnits::mole;                                                       
   density = 0.112*g/cm3;                                              
   z = 6.18;
   G4Material* Rohacell = new G4Material(name="Rohacell",z, a, density);
@@ -136,20 +138,20 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
   switch(m_which) {
      case 0: { // EMEC excluder
      // DB values
-     double Rmin = 725.*CLHEP::mm;
-     double Rmin_2 = 780.*CLHEP::mm;
-     double Rmax = 980.*CLHEP::mm;
+     double Rmin = 725.*GeoModelKernelUnits::mm;
+     double Rmin_2 = 780.*GeoModelKernelUnits::mm;
+     double Rmax = 980.*GeoModelKernelUnits::mm;
 
-     double Zall = 626*CLHEP::mm;
-     double Zback = 91*CLHEP::mm;
-     double Zfront = 60*CLHEP::mm;
+     double Zall = 626*GeoModelKernelUnits::mm;
+     double Zback = 91*GeoModelKernelUnits::mm;
+     double Zfront = 60*GeoModelKernelUnits::mm;
 
-     double alpha = 22.5*CLHEP::degree;
-     double beta  = 6.375*CLHEP::degree; 
+     double alpha = 22.5*GeoModelKernelUnits::degree;
+     double beta  = 6.375*GeoModelKernelUnits::degree; 
 
 
 //     double gamma = 8.589*degree;
-     double delta = 2.720*CLHEP::degree;
+     double delta = 2.720*GeoModelKernelUnits::degree;
 
 //  solidEx = new GeoTubs("MotherEx",Rmin,Rmax,Zall/2.,-(alpha+gamma), 2*(alpha+gamma));
 //     GeoTubs* solidEx = new GeoTubs(Rmin,Rmax,Zall/2.,-(alpha+beta), 2*(alpha+beta));
@@ -163,7 +165,7 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
      const double rmax[zplanes] = {Rmax,Rmax};
      const double zcoord[2*zplanes] = {-Zall/2., -Zall/2.+Zfront, Zall/2.-Zback, Zall/2.};
   
-     HepGeom::Transform3D rot;
+     GeoTrf::Transform3D rot(GeoTrf::Transform3D::Identity());
 
      fEx = new GeoPcon(-(alpha-delta),2*(alpha-delta));
      for(int i=0; i<zplanes; ++i) {
@@ -207,35 +209,31 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
 	     }
      case 1 : { // FCAL excluder
 
-                double Rmax = 335.*CLHEP::mm;
-//                double Rmax_1 = 253.*CLHEP::mm;
-                double bepo_Beta = 4.668*CLHEP::degree; // DB !!!
-		double bepo_ty = 90.0*CLHEP::degree; // DB !!
-
-//                double Zall = (1021.4/2.)*CLHEP::mm;
-                double Zall = (912./2.)*CLHEP::mm;
-//		double Zpara = (168.47/2.)*CLHEP::mm;
-//		double Zpara = (247.87/2.)*CLHEP::mm;
-		double Xall = (171./2.)*CLHEP::mm;
-		double Yall = (300./2.)*CLHEP::mm;
+                double Rmax = 335.*GeoModelKernelUnits::mm;
+//                double Rmax_1 = 253.*GeoModelKernelUnits::mm;
+                double bepo_Beta = 4.668*GeoModelKernelUnits::degree; // DB !!!
+		double bepo_ty = 90.0*GeoModelKernelUnits::degree; // DB !!
+
+//                double Zall = (1021.4/2.)*GeoModelKernelUnits::mm;
+                double Zall = (912./2.)*GeoModelKernelUnits::mm;
+//		double Zpara = (168.47/2.)*GeoModelKernelUnits::mm;
+//		double Zpara = (247.87/2.)*GeoModelKernelUnits::mm;
+		double Xall = (171./2.)*GeoModelKernelUnits::mm;
+		double Yall = (300./2.)*GeoModelKernelUnits::mm;
 		double Rmax_1 = Rmax - 2.*Zall*tan(bepo_Beta);
 
-		GeoPara *pEx = new GeoPara(Zall,Yall,Xall,0*CLHEP::degree,bepo_Beta,0.*CLHEP::degree);
+		GeoPara *pEx = new GeoPara(Zall,Yall,Xall,0*GeoModelKernelUnits::degree,bepo_Beta,0.*GeoModelKernelUnits::degree);
 		GeoCons *tEx = new GeoCons(0.,0.,Rmax,Rmax_1,Zall,0.,M_PI);
 		GeoBox  *box = new GeoBox(Yall,Xall,Zall);
-                CLHEP::HepRotation Rot;
-		Rot.rotateX(bepo_Beta);
-		CLHEP::Hep3Vector  trans1(0., sqrt(Rmax_1*Rmax_1 - Yall*Yall) + Xall + Zall*tan(bepo_Beta),  0*CLHEP::mm);
-		HepGeom::Transform3D offset(Rot, trans1);
+                GeoTrf::RotateX3D Rot(bepo_Beta);
+		GeoTrf::Translation3D  trans1(0., sqrt(Rmax_1*Rmax_1 - Yall*Yall) + Xall + Zall*tan(bepo_Beta),  0*GeoModelKernelUnits::mm);
+		GeoTrf::Transform3D offset = trans1 * Rot;
 		const GeoShapeIntersection  &is = (*tEx).intersect(*box<<offset);
 
-		CLHEP::HepRotation Rot1;
-		Rot1.rotateY(bepo_ty);
-		Rot1.rotateZ(bepo_ty);
-		Rot1.rotateX(bepo_Beta);
-//		G4ThreeVector  translation(0., (203.74-168.47/2.)*CLHEP::mm, 0.*CLHEP::mm);
-		CLHEP::Hep3Vector  translation(0., sqrt(Rmax_1*Rmax_1 - Yall*Yall)-Xall+Zall*tan(bepo_Beta),0.*CLHEP::mm);
-		HepGeom::Transform3D offset1(Rot1, translation);
+		GeoTrf::Transform3D Rot1 = GeoTrf::RotateX3D(bepo_Beta) * GeoTrf::RotateZ3D(bepo_ty) * GeoTrf::RotateY3D(bepo_ty);
+//		G4ThreeVector  translation(0., (203.74-168.47/2.)*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm);
+		GeoTrf::Translation3D  translation(0., sqrt(Rmax_1*Rmax_1 - Yall*Yall)-Xall+Zall*tan(bepo_Beta),0.*GeoModelKernelUnits::mm);
+		GeoTrf::Transform3D offset1 = translation * Rot1;
 		const GeoShapeUnion  &us = is.add(*pEx<<offset1);  
 		std::string bExName = "LArGeoTB::FCAL::Excluder";
 	        logicEx = new GeoLogVol(bExName, &us,Rohacell);
@@ -247,21 +245,19 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
 
 
 //                double Rmax = bcry_rlar;
-                double Rmax =  125.5*CLHEP::cm; // DB !!!
-		double bepo_Beta = 4.668*CLHEP::degree; // DB !!!
+                double Rmax =  125.5*GeoModelKernelUnits::cm; // DB !!!
+		double bepo_Beta = 4.668*GeoModelKernelUnits::degree; // DB !!!
 
-                double Zall = (1200./2.)*CLHEP::mm;
-		double angle = 32.*CLHEP::degree;
-//		double Xall = 119.35*CLHEP::cm;
+                double Zall = (1200./2.)*GeoModelKernelUnits::mm;
+		double angle = 32.*GeoModelKernelUnits::degree;
+//		double Xall = 119.35*GeoModelKernelUnits::cm;
 		double Xall = Rmax*cos(angle/2);
 		double Yall = Rmax*sin(angle/2);
 
 		GeoTubs *tEx = new GeoTubs(0.,Rmax,Zall,-angle/2.,angle);
 		GeoPara  *box = new GeoPara(Xall,Yall,1.1*Zall,0.,-bepo_Beta,0.);
-		CLHEP::HepRotation Rot;
-//		Rot->rotateZ(-angle/2.);
-		CLHEP::Hep3Vector  trans1(0., 0.*CLHEP::mm, 0*CLHEP::mm);
-		HepGeom::Transform3D offset(Rot, trans1);
+
+		GeoTrf::Translate3D offset(0., 0.*GeoModelKernelUnits::mm, 0*GeoModelKernelUnits::mm);
 		const GeoShapeSubtraction &is = (*tEx).subtract((*box)<<(offset));
 //		G4UnionSolid *is = new G4UnionSolid("isEx",tEx,box,Rot,trans1);
 		std::string FrontExName = "LArGeoTB::Front::Excluder";
@@ -272,20 +268,19 @@ GeoVFullPhysVol*  LArGeo::ExcluderConstructionH62004::GetEnvelope() {
      case 3 : { // Back excluder
 
 //                double Rmax = bcry_rlar;
-		double Rmax =  125.5*CLHEP::cm; // DB !!!
+		double Rmax =  125.5*GeoModelKernelUnits::cm; // DB !!!
 
 
-                double Zall = (1600./2.)*CLHEP::mm;
-		double angle = 58.*CLHEP::degree;
+                double Zall = (1600./2.)*GeoModelKernelUnits::mm;
+		double angle = 58.*GeoModelKernelUnits::degree;
 		double Xall = Rmax*cos(angle/2.);
 		double Yall = Rmax*sin(angle/2.);
 
 		GeoTubs *tEx = new GeoTubs(0.,Rmax,Zall,0.,angle);
 		GeoBox  *box = new GeoBox(Xall,Yall,1.1*Zall);
-		CLHEP::HepRotation Rot;
-		Rot.rotateZ(angle/2.);
-		CLHEP::Hep3Vector  trans1(0., 0.*CLHEP::mm,  0*CLHEP::mm);
-		HepGeom::Transform3D offset(Rot, trans1);
+		GeoTrf::RotateZ3D Rot(angle/2.);
+		GeoTrf::Translation3D  trans1(0., 0.*GeoModelKernelUnits::mm,  0*GeoModelKernelUnits::mm);
+		GeoTrf::Transform3D offset = trans1 * Rot;
 		const GeoShapeSubtraction &is = (*tEx).subtract((*box)<<(offset));
 		std::string BackExName = "LArGeoTB::Back::Excluder";
 	        logicEx = new GeoLogVol(BackExName,&is,Rohacell);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FCALConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FCALConstructionH62004.cxx
index e879edac6afc5cf3f5eefdccc407a11676f2621d..3413f1c2bab43dd879dac6153bd1154e59c17736 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FCALConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FCALConstructionH62004.cxx
@@ -19,6 +19,8 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoPerfUtils.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 // volumes used:  Pcon, Tubs, Cons, Box, Trap 
 #include "GeoModelKernel/GeoPcon.h"
@@ -34,27 +36,23 @@
 #include "GeoModelUtilities/StoredAlignX.h"
 #include "GeoModelUtilities/GeoDBUtils.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Vector/Rotation.h"
 // For functions:
-#include "CLHEP/GenericFunctions/Abs.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
-#include "CLHEP/GenericFunctions/Sqrt.hh"
-#include "CLHEP/GenericFunctions/ATan.hh"
-#include "CLHEP/GenericFunctions/Rectangular.hh"
-#include "CLHEP/GenericFunctions/Mod.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/FixedConstant.hh"
-#include "CLHEP/GenericFunctions/ArrayFunction.hh"
+#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"
+#include "GeoGenericFunctions/ArrayFunction.h"
 
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 
 // For units:
-#include "CLHEP/Units/PhysicalConstants.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
 #include <string>
@@ -216,13 +214,13 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
   std::string baseName = "LAr::FCAL::";
 
   double fcalHalfDepth=0;
-  double startZFCal1 = (*m_fcalMod)[0]->getDouble("STARTPOSITION"); //466.85 * CLHEP::cm;
-  double startZFCal2 = (*m_fcalMod)[1]->getDouble("STARTPOSITION"); //512.83 * CLHEP::cm;
-  double startZFCal3 = (*m_fcalMod)[2]->getDouble("STARTPOSITION"); //560.28 * CLHEP::cm;
+  double startZFCal1 = (*m_fcalMod)[0]->getDouble("STARTPOSITION"); //466.85 * GeoModelKernelUnits::cm;
+  double startZFCal2 = (*m_fcalMod)[1]->getDouble("STARTPOSITION"); //512.83 * GeoModelKernelUnits::cm;
+  double startZFCal3 = (*m_fcalMod)[2]->getDouble("STARTPOSITION"); //560.28 * GeoModelKernelUnits::cm;
 
   // Should go to Db (change FCalNominals ????)
-  double fcalstartPhi = 90.*CLHEP::deg;
-  double fcaldeltaPhi = 90.*CLHEP::deg;
+  double fcalstartPhi = 90.*GeoModelKernelUnits::deg;
+  double fcaldeltaPhi = 90.*GeoModelKernelUnits::deg;
   // FCAL VOLUME.  IT DOES NOT INCLUDE THE COPPER PLUG, ONLY THE LAR AND MODS 1-3
   {
 
@@ -243,8 +241,6 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
   }
 
  
-  CLHEP::HepRotation NoRot;
-
   if (F1) 
     {
       // Module 1
@@ -264,7 +260,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	  physVol     = new GeoFullPhysVol(logVol);
 	}
 
-	fcalPhysical->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.,0.,-(fcalHalfDepth-halfDepth)))));
+	fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,-(fcalHalfDepth-halfDepth))));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 	
@@ -279,18 +275,18 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
       // 16 Troughs representing  Cable Harnesses:
       if(m_absPhysical1==0)
 	{
-	  double troughDepth       = 0.9999 * CLHEP::cm;
+	  double troughDepth       = 0.9999 * GeoModelKernelUnits::cm;
 	  double outerRadius       = fcalData[0].outerModuleRadius;
 	  double innerRadius       = outerRadius - troughDepth;
 	  double halfLength        = fcalData[0].fullModuleDepth/ 2.0;
-	  double deltaPhi          = 5.625 * CLHEP::deg;
-	  double startPhi          = 11.25 * CLHEP::deg - deltaPhi/2.0;
+	  double deltaPhi          = 5.625 * GeoModelKernelUnits::deg;
+	  double startPhi          = 11.25 * GeoModelKernelUnits::deg - deltaPhi/2.0;
 	  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
 	  GeoLogVol *logVol = new GeoLogVol(baseName+"Module1::CableTrough",tubs,FCalCableHarness);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
-	  Genfun::Variable i;
-	  Genfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*CLHEP::deg*i;
-	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),rotationAngle);
+	  GeoGenfun::Variable i;
+	  GeoGenfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*GeoModelKernelUnits::deg*i;
+	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,4);
 	  modPhysical->add(st);
 	}
@@ -300,7 +296,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	  double halfDepth    = fcalData[0].fullGapDepth/2.0;
 	  double innerRadius  = fcalData[0].innerGapRadius;
 	  double outerRadius  = fcalData[0].outerGapRadius;
-	  GeoTubs *tubs       = new GeoTubs(innerRadius,outerRadius,halfDepth, 0.*CLHEP::deg, 360.*CLHEP::deg);
+	  GeoTubs *tubs       = new GeoTubs(innerRadius,outerRadius,halfDepth, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg);
 	  GeoLogVol *logVol   = new GeoLogVol(baseName + "Module1::Gap",tubs, LAr);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
 	  
@@ -331,7 +327,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	      if (m_VisLimit != -1 && (counter++ > m_VisLimit)) continue;
 	      //std::cout<<thisTileStr<<" "<<thisTubeX<<" "<<thisTubeY<<std::endl;
 	      
-	      GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(thisTubeX*CLHEP::cm, thisTubeY*CLHEP::cm,0));
+	      GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*GeoModelKernelUnits::cm, thisTubeY*GeoModelKernelUnits::cm,0));
 	      modPhysical->add(xf);
 	      modPhysical->add(physVol);
 	    }
@@ -360,7 +356,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	  physVol     = new GeoFullPhysVol(logVol);
 	}
 
-	fcalPhysical->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.,0.,-(fcalHalfDepth-(startZFCal2-startZFCal1)-halfDepth)))));
+	fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,-(fcalHalfDepth-(startZFCal2-startZFCal1)-halfDepth))));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 	
@@ -375,18 +371,18 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
       // 16 Troughs representing  Cable Harnesses:
       if(m_absPhysical2==0)
 	{
-	  double troughDepth       = 1.0 * CLHEP::cm;
+	  double troughDepth       = 1.0 * GeoModelKernelUnits::cm;
 	  double outerRadius       = fcalData[1].outerModuleRadius;
 	  double innerRadius       = outerRadius - troughDepth;
 	  double halfLength        = fcalData[1].fullModuleDepth/ 2.0;
-	  double deltaPhi          = 5.625 * CLHEP::deg;
-	  double startPhi          = 11.25 * CLHEP::deg - deltaPhi/2.0;
+	  double deltaPhi          = 5.625 * GeoModelKernelUnits::deg;
+	  double startPhi          = 11.25 * GeoModelKernelUnits::deg - deltaPhi/2.0;
 	  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
 	  GeoLogVol *logVol = new GeoLogVol(baseName+"Module2::CableTrough",tubs,FCalCableHarness);
 	  GeoPhysVol *physVol = new GeoPhysVol(logVol);
-	  Genfun::Variable i;
-	  Genfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*CLHEP::deg*i;
-	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(HepGeom::RotateZ3D(1.0),rotationAngle);
+	  GeoGenfun::Variable i;
+	  GeoGenfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*GeoModelKernelUnits::deg*i;
+	  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
 	  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,4);
 	  modPhysical->add(st);
 	}
@@ -435,7 +431,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	    
 	    if (m_VisLimit!=-1 && (counter++ > m_VisLimit)) continue;
 	    
-	    GeoTransform *xf = new GeoTransform(HepGeom::Translate3D(thisTubeX*CLHEP::cm, thisTubeY*CLHEP::cm,0));
+	    GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*GeoModelKernelUnits::cm, thisTubeY*GeoModelKernelUnits::cm,0));
 	    modPhysical->add(xf);
 	    modPhysical->add(gapPhys);
 	  }
@@ -456,7 +452,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 
 	// We need few more materials
 	// ColdTC effective absorber: Cu with a little bit of inactive argon
-	GeoMaterial *thisAbsorber = new GeoMaterial("ColdTCAbsorber",8.701*CLHEP::g/CLHEP::cm3);
+	GeoMaterial *thisAbsorber = new GeoMaterial("ColdTCAbsorber",8.701*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
 	thisAbsorber->add(Copper,0.994);
 	thisAbsorber->add(LAr,0.006);
 	thisAbsorber->lock();
@@ -472,7 +468,7 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	}
 
 	
-	fcalPhysical->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.,0.,fcalHalfDepth-halfDepth))));
+	fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,fcalHalfDepth-halfDepth)));
 	fcalPhysical->add(physVol);
 	modPhysical = physVol;
 
@@ -491,8 +487,8 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 	double outerRadius     = fcalData[2].outerGapRadius;
 
 	// Where in DB should go this ?
-	double ElectrodeDepth = 0.85*CLHEP::cm;
-        double ActiveDepth = 0.2*CLHEP::cm;
+	double ElectrodeDepth = 0.85*GeoModelKernelUnits::cm;
+        double ActiveDepth = 0.2*GeoModelKernelUnits::cm;
 
 	// big argon gap solid
 	GeoTubs *gapSolid = new GeoTubs(innerRadius,outerRadius,halfDepth, fcalstartPhi, fcaldeltaPhi);
@@ -510,29 +506,29 @@ GeoVFullPhysVol* LArGeo::FCALConstructionH62004::GetEnvelope()
 
 	// active gaps in electrode
 	int iCopy = 1;
-	double zPos = -ElectrodeDepth/2. + 1.5 * CLHEP::mm + ActiveDepth/2.;
-	GeoTransform *t1 = new GeoTransform(HepGeom::Translate3D(0.,0.,zPos));
+	double zPos = -ElectrodeDepth/2. + 1.5 * GeoModelKernelUnits::mm + ActiveDepth/2.;
+	GeoTransform *t1 = new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos));
 	electrodePhys->add(new GeoSerialIdentifier(iCopy));
 	electrodePhys->add(t1);
 	electrodePhys->add(activePhys);
 	++iCopy;
-	zPos += 3.5 * CLHEP::mm;
+	zPos += 3.5 * GeoModelKernelUnits::mm;
 	electrodePhys->add(new GeoSerialIdentifier(iCopy));
 	electrodePhys->add(t1);
 	electrodePhys->add(activePhys);
 	// electrode in inactive argon
         zPos = -halfDepth + ElectrodeDepth/2.;
-	GeoTransform *t2 = new GeoTransform(HepGeom::Translate3D(0.,0.,zPos));
+	GeoTransform *t2 = new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos));
 	gapPhys->add(new GeoSerialIdentifier(1));
 	gapPhys->add(t2);
 	gapPhys->add(electrodePhys);
 	// big gaps in copper block
-        zPos = -fcalData[2].fullModuleDepth/2. + 2.2 * CLHEP::cm + halfDepth; 
+        zPos = -fcalData[2].fullModuleDepth/2. + 2.2 * GeoModelKernelUnits::cm + halfDepth; 
         for ( iCopy = 1; iCopy < 9; ++iCopy ){
 	  modPhysical->add(new GeoSerialIdentifier(iCopy)); 
-	  modPhysical->add(new GeoTransform(HepGeom::Translate3D(0.,0.,zPos)));
+	  modPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos)));
 	  modPhysical->add(gapPhys);
-	  zPos += 3.5*CLHEP::cm;
+	  zPos += 3.5*GeoModelKernelUnits::cm;
 	}
 	m_absPhysical3 = modPhysical;
      }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FrontBeamConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FrontBeamConstructionH62004.cxx
index bcc648917569e34f8ab1976b7d030b47143d3a96..fa4dba728df4fde477ac82380e3d1d48da1665b2 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FrontBeamConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/FrontBeamConstructionH62004.cxx
@@ -23,18 +23,15 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
-#include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -126,14 +123,14 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62004::GetEnvelope()
   // Define dimension of Front part & position of Front part
   //
   // DB ?
-  const double bard_x = 20.0*CLHEP::cm;
-  const double bard_y = 20.0*CLHEP::cm;
-  //const double bard_z = 35.0*CLHEP::cm;
-  const double bard_z = 100.0*CLHEP::cm;
-  const double fbpc_z[2] = {60.4*CLHEP::cm,112.7*CLHEP::cm};
+  const double bard_x = 20.0*GeoModelKernelUnits::cm;
+  const double bard_y = 20.0*GeoModelKernelUnits::cm;
+  //const double bard_z = 35.0*GeoModelKernelUnits::cm;
+  const double bard_z = 100.0*GeoModelKernelUnits::cm;
+  const double fbpc_z[2] = {60.4*GeoModelKernelUnits::cm,112.7*GeoModelKernelUnits::cm};
   // Position in exp_hall
-  //const double z_bard=-2160.0*CLHEP::cm+80.1*CLHEP::cm+16.*CLHEP::cm+bard_z;
-  //const double z_bardm=-2160.0*CLHEP::cm+1362.3*CLHEP::cm;
+  //const double z_bard=-2160.0*GeoModelKernelUnits::cm+80.1*GeoModelKernelUnits::cm+16.*GeoModelKernelUnits::cm+bard_z;
+  //const double z_bardm=-2160.0*GeoModelKernelUnits::cm+1362.3*GeoModelKernelUnits::cm;
 
 
 
@@ -147,27 +144,27 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62004::GetEnvelope()
   //   In the old stand-alone code, all three were round with a radius of 5cm 
   //   and 7.5mm thickness.
   //   Logbooks in the control-room say that their xyz sizes are:
-  //   B1   : 30 x 30 x 10 CLHEP::mm
-  //   W1,2 : 150 x 150 x 10 CLHEP::mm
+  //   B1   : 30 x 30 x 10 GeoModelKernelUnits::mm
+  //   W1,2 : 150 x 150 x 10 GeoModelKernelUnits::mm
   // They are certainly not round, so stick with the logbook values 
   // The beam sees the instrumentation in the following order:
   // W1, W2, B1, MWPC5
 
   log << MSG::INFO << "Create Front Scintillators ..." << endmsg;
   
-  const double Wxy=  75.0*CLHEP::mm;
-  const double Wz =   5.0*CLHEP::mm;
-  const double Bxy=  15.0*CLHEP::mm;
-  const double Bz =   5.0*CLHEP::mm;
+  const double Wxy=  75.0*GeoModelKernelUnits::mm;
+  const double Wz =   5.0*GeoModelKernelUnits::mm;
+  const double Bxy=  15.0*GeoModelKernelUnits::mm;
+  const double Bz =   5.0*GeoModelKernelUnits::mm;
 
   std::vector<double> v_ScintXY;
   std::vector<double> v_ScintZ;
   v_ScintXY.push_back(Wxy);
   v_ScintXY.push_back(Wxy); 
   v_ScintXY.push_back(Bxy); 
-  v_ScintZ.push_back(10.*CLHEP::mm); 
-  v_ScintZ.push_back(40.*CLHEP::mm); 
-  v_ScintZ.push_back(180.*CLHEP::mm);
+  v_ScintZ.push_back(10.*GeoModelKernelUnits::mm); 
+  v_ScintZ.push_back(40.*GeoModelKernelUnits::mm); 
+  v_ScintZ.push_back(180.*GeoModelKernelUnits::mm);
 
    // Create one Scintillator and place it twice along z:
  
@@ -182,7 +179,7 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62004::GetEnvelope()
   //BScintPhysical->add( new GeoNameTag(ScintName) );
   for ( unsigned int i = 0; i < v_ScintZ.size(); i++ ) {
     m_H62004FrontBeamPhysical->add( new GeoIdentifierTag(i+1) );
-    m_H62004FrontBeamPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (v_ScintZ[ i ]-bard_z) ) ) ) ;     m_H62004FrontBeamPhysical->add( new GeoNameTag(ScintName) );
+    m_H62004FrontBeamPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (v_ScintZ[ i ]-bard_z) ) ) ) ;     m_H62004FrontBeamPhysical->add( new GeoNameTag(ScintName) );
 
     switch(i) {
     case 0: case 1: { m_H62004FrontBeamPhysical->add( WScintPhysical ); break; }
@@ -198,13 +195,13 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62004::GetEnvelope()
   //------ Now create MWPC5 
   log << MSG::INFO << " Create MWPC5 " << endmsg;
   
-  MWPCConstruction MWPC5 (2.*CLHEP::mm);
+  MWPCConstruction MWPC5 (2.*GeoModelKernelUnits::mm);
   GeoVPhysVol* MwpcPhysical = MWPC5.GetEnvelope();
 
-  const double MwpcPos = 445.*CLHEP::mm;
+  const double MwpcPos = 445.*GeoModelKernelUnits::mm;
 
   m_H62004FrontBeamPhysical->add( new GeoIdentifierTag(5) );
-  m_H62004FrontBeamPhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (MwpcPos-bard_z) ) ) );
+  m_H62004FrontBeamPhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (MwpcPos-bard_z) ) ) );
   m_H62004FrontBeamPhysical->add( MwpcPhysical );
 
   //----- Done with the MWPC
@@ -216,7 +213,7 @@ GeoVPhysVol* LArGeo::FrontBeamConstructionH62004::GetEnvelope()
   GeoVPhysVol* BPCPhysical = BPC.GetEnvelope();
   for(int i=1; i<3; ++i) {
      m_H62004FrontBeamPhysical->add( new GeoIdentifierTag(i) );
-     m_H62004FrontBeamPhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (MwpcPos-bard_z) + fbpc_z[i-1]) ) );
+     m_H62004FrontBeamPhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (MwpcPos-bard_z) + fbpc_z[i-1]) ) );
      m_H62004FrontBeamPhysical->add(BPCPhysical);
   }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/HECConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/HECConstructionH62004.cxx
index 198105e38e17a2cbab9df67cbbd2be22507902ab..d1c4ba5bb72c6e02ec9197999be33191e584c0ea 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/HECConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/HECConstructionH62004.cxx
@@ -22,10 +22,12 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoShapeUnion.h"  
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"  
+#include "GeoModelKernel/Units.h"  
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -43,7 +45,7 @@
 
 
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -144,57 +146,57 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
 
   double zCoordinate[6],innerRadius[6],outerRadius[6];
 
-  double absorberPosY = 1.02*CLHEP::cm;            
-  double PosYcorr = 0.005*CLHEP::cm;            
+  double absorberPosY = 1.02*GeoModelKernelUnits::cm;            
+  double PosYcorr = 0.005*GeoModelKernelUnits::cm;            
 
   const double moduleNumber   = (*hadronicEndcap)[0]->getInt("NSCT"); // 32 Modules
   unsigned int TBmoduleNumber = 8;
-  double moduleRinner1  = (*hecLongitudinalBlock)[0]->getDouble("BLRMN")*CLHEP::cm; // 37.2*CLHEP::cm Inner Radius 
-  double moduleRinner2  = (*hecLongitudinalBlock)[1]->getDouble("BLRMN")*CLHEP::cm; // 47.5*CLHEP::cm
-  //double moduleRouter   = (*hecLongitudinalBlock)[0]->getDouble("BLRMX")*CLHEP::cm; //203.*CLHEP::cm Outer Radius
-  double copperPad      = (*hadronicEndcap)[0]->getDouble("COPPER")*CLHEP::cm; // 0.003.*CLHEP::cm 
-  double gapSize        = (*hadronicEndcap)[0]->getDouble("LARG")*CLHEP::cm; // 8.5*CLHEP::mm
-  double betweenWheel   = (*hadronicEndcap)[0]->getDouble("GAPWHL")*CLHEP::cm-0.001*CLHEP::cm; //40.5*CLHEP::mm
+  double moduleRinner1  = (*hecLongitudinalBlock)[0]->getDouble("BLRMN")*GeoModelKernelUnits::cm; // 37.2*GeoModelKernelUnits::cm Inner Radius 
+  double moduleRinner2  = (*hecLongitudinalBlock)[1]->getDouble("BLRMN")*GeoModelKernelUnits::cm; // 47.5*GeoModelKernelUnits::cm
+  //double moduleRouter   = (*hecLongitudinalBlock)[0]->getDouble("BLRMX")*GeoModelKernelUnits::cm; //203.*GeoModelKernelUnits::cm Outer Radius
+  double copperPad      = (*hadronicEndcap)[0]->getDouble("COPPER")*GeoModelKernelUnits::cm; // 0.003.*GeoModelKernelUnits::cm 
+  double gapSize        = (*hadronicEndcap)[0]->getDouble("LARG")*GeoModelKernelUnits::cm; // 8.5*GeoModelKernelUnits::mm
+  double betweenWheel   = (*hadronicEndcap)[0]->getDouble("GAPWHL")*GeoModelKernelUnits::cm-0.001*GeoModelKernelUnits::cm; //40.5*GeoModelKernelUnits::mm
   int indexloop,index;
   for (indexloop=0; indexloop < depthNumber; ++indexloop){
-    depthSize[indexloop]    = (*hecLongitudinalBlock)[indexloop]->getDouble("BLDPTH")*CLHEP::cm; 
-    firstAbsorber[indexloop]= (*hecLongitudinalBlock)[indexloop]->getDouble("PLATE0")*CLHEP::cm; 
+    depthSize[indexloop]    = (*hecLongitudinalBlock)[indexloop]->getDouble("BLDPTH")*GeoModelKernelUnits::cm; 
+    firstAbsorber[indexloop]= (*hecLongitudinalBlock)[indexloop]->getDouble("PLATE0")*GeoModelKernelUnits::cm; 
     gapNumber[indexloop]    = (int) (*hecLongitudinalBlock)[indexloop]->getDouble("BLMOD"); // 4 or 8 
   }
 
   std::string sidx[4]={"_0","_1","_2","_3"};
 
   for (indexloop=0; indexloop < 3; ++indexloop){
-    kaptonPosition[indexloop] = (*hadronicEndcap)[0]->getDouble("KPTPOS" + sidx[indexloop])*CLHEP::cm; 
-    kaptonWidth[indexloop]    = (*hadronicEndcap)[0]->getDouble("KPTWID" + sidx[indexloop])*CLHEP::cm; 
+    kaptonPosition[indexloop] = (*hadronicEndcap)[0]->getDouble("KPTPOS" + sidx[indexloop])*GeoModelKernelUnits::cm; 
+    kaptonWidth[indexloop]    = (*hadronicEndcap)[0]->getDouble("KPTWID" + sidx[indexloop])*GeoModelKernelUnits::cm; 
   }
 
   for (indexloop=0; indexloop < 4; ++indexloop){
-    tieRodPositionX[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSX" + sidx[indexloop])*CLHEP::cm; 
-    tieRodPositionY[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSR" + sidx[indexloop])*CLHEP::cm; 
+    tieRodPositionX[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSX" + sidx[indexloop])*GeoModelKernelUnits::cm; 
+    tieRodPositionY[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSR" + sidx[indexloop])*GeoModelKernelUnits::cm; 
   }
 
   for (indexloop=0; indexloop < 2; ++indexloop){
-    tieRodDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("RODDIM" + sidx[indexloop])*CLHEP::cm; 
-    spacerDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("SPCDIM" + sidx[indexloop])*CLHEP::cm; 
+    tieRodDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("RODDIM" + sidx[indexloop])*GeoModelKernelUnits::cm; 
+    spacerDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("SPCDIM" + sidx[indexloop])*GeoModelKernelUnits::cm; 
   }
 
-  double absorberZ1 = (*hadronicEndcap)[0]->getDouble("PLATE_0")*CLHEP::cm; // 2.5*CLHEP::cm;
-  double absorberZ2 = (*hadronicEndcap)[0]->getDouble("PLATE_1")*CLHEP::cm; //5.0*CLHEP::cm;
+  double absorberZ1 = (*hadronicEndcap)[0]->getDouble("PLATE_0")*GeoModelKernelUnits::cm; // 2.5*GeoModelKernelUnits::cm;
+  double absorberZ2 = (*hadronicEndcap)[0]->getDouble("PLATE_1")*GeoModelKernelUnits::cm; //5.0*GeoModelKernelUnits::cm;
 
-  const double moduleDeltaPhi   = 2*M_PI/moduleNumber; //11.25*CLHEP::deg;  
+  const double moduleDeltaPhi   = 2*M_PI/moduleNumber; //11.25*GeoModelKernelUnits::deg;  
   double modulePhistart = -moduleDeltaPhi/2.; 
-  //double modulePhistart   = 0.0*CLHEP::deg;
-  zCoordinate[0]=0.0*CLHEP::cm; 
-  zCoordinate[1]=depthSize[0]; //28.05*CLHEP::cm; 
-  zCoordinate[2]=depthSize[0]+0.001*CLHEP::cm; //28.051*CLHEP::cm; 
+  //double modulePhistart   = 0.0*GeoModelKernelUnits::deg;
+  zCoordinate[0]=0.0*GeoModelKernelUnits::cm; 
+  zCoordinate[1]=depthSize[0]; //28.05*GeoModelKernelUnits::cm; 
+  zCoordinate[2]=depthSize[0]+0.001*GeoModelKernelUnits::cm; //28.051*GeoModelKernelUnits::cm; 
   zCoordinate[3]=zCoordinate[2]+depthSize[1]+depthSize[2]+betweenWheel/2;
   zCoordinate[4]=zCoordinate[3]+depthSize[3]+depthSize[4]+betweenWheel/2;
-  zCoordinate[5]=181.8*CLHEP::cm;
+  zCoordinate[5]=181.8*GeoModelKernelUnits::cm;
   innerRadius[0]=moduleRinner1;
   innerRadius[1]=moduleRinner1;
   for (index=2; index<numberZplane;++index) {innerRadius[index]=moduleRinner2;}
-  for (index=0; index<numberZplane;++index) {outerRadius[index]=innerRadius[0] + 78.7*CLHEP::cm; } 
+  for (index=0; index<numberZplane;++index) {outerRadius[index]=innerRadius[0] + 78.7*GeoModelKernelUnits::cm; } 
 
 
 //----------------------------------------------------------------
@@ -273,9 +275,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
     //   Place Module in HEC mother
     //----------------------------------------------------------------
     GeoSerialIdentifier  *sI = new GeoSerialIdentifier(9);
-    Genfun::Variable    Index;
-    Genfun::GENFUNCTION ModuleRotationAngle = M_PI/2. + moduleDeltaPhi/2. + moduleDeltaPhi*Index; 
-    GeoXF::TRANSFUNCTION t = GeoXF::Pow(HepGeom::RotateZ3D(1.0),ModuleRotationAngle);
+    GeoGenfun::Variable    Index;
+    GeoGenfun::GENFUNCTION ModuleRotationAngle = M_PI/2. + moduleDeltaPhi/2. + moduleDeltaPhi*Index; 
+    GeoXF::TRANSFUNCTION t = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngle);
     GeoSerialTransformer *sT = new GeoSerialTransformer (physiModule,&t,TBmoduleNumber);
     m_h6Phys->add(sI);
     m_h6Phys->add(sT);
@@ -297,9 +299,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
   }  
 
 //----------------------------------------------------------------
-//    Absorbers , the inner and outer Radius are smaller on 1.02*CLHEP::cm
+//    Absorbers , the inner and outer Radius are smaller on 1.02*GeoModelKernelUnits::cm
 //                but positionned in the center of depth. this alows
-//                to have 2 CLHEP::mm gap between the copper plates of neighbor Modules 
+//                to have 2 GeoModelKernelUnits::mm gap between the copper plates of neighbor Modules 
 //----------------------------------------------------------------
   std::string absorberName = depthName + "::Absorber";
   double absorberRinner1 = moduleRinner1-absorberPosY;
@@ -332,7 +334,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
   double depthPositionZ = 0.;
   for(int indexDepth=0; indexDepth<5; indexDepth++){
       depthPositionZ +=depthSize[indexDepth]/2.;
-      if (indexDepth==1) depthPositionZ +=0.001*CLHEP::cm;
+      if (indexDepth==1) depthPositionZ +=0.001*GeoModelKernelUnits::cm;
       moduleRinner = moduleRinner2;
       if (indexDepth==0) moduleRinner = moduleRinner1; //for first depth
       //Absorber size and position
@@ -349,7 +351,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
       physiDepth[indexDepth]  = new GeoPhysVol(logiDepth[indexDepth]);
 
       physiModule->add(new GeoIdentifierTag(100+indexDepth));
-      physiModule->add(new GeoTransform(HepGeom::Translate3D(0,0,depthPositionZ)));
+      physiModule->add(new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));
       physiModule->add(physiDepth[indexDepth]);
       depthPositionZ +=depthSize[indexDepth]/2.;
       if (indexDepth==2) depthPositionZ +=betweenWheel;
@@ -368,9 +370,9 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
 	  absorberNo=2;
       }
       
-      Genfun::Variable Index;
-      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(HepGeom::TranslateZ3D(1.0),slicePositionZ + (absorberSize+gapSize)*Index);
-      GeoXF::TRANSFUNCTION TA = HepGeom::TranslateX3D(absorberPosY) * GeoXF::Pow(HepGeom::TranslateZ3D(1.0),absorberPositionZ + (absorberSize+gapSize)*Index);
+      GeoGenfun::Variable Index;
+      GeoXF::TRANSFUNCTION TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (absorberSize+gapSize)*Index);
+      GeoXF::TRANSFUNCTION TA = GeoTrf::TranslateX3D(absorberPosY) * GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),absorberPositionZ + (absorberSize+gapSize)*Index);
 
       GeoSerialIdentifier *sI = new GeoSerialIdentifier(sliceCopyNo);
       GeoSerialTransformer *sTS = new GeoSerialTransformer(physiSlice[sliceNo],   &TS, gapNumber[indexDepth]);
@@ -383,14 +385,14 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
 
   double firstAbsorberPositionZ = firstAbsorber[0]/2.- depthSize[0]/2.0;
   physiDepth[0]->add(new GeoIdentifierTag(50));
-  physiDepth[0]->add(new GeoTransform(HepGeom::Translate3D(absorberPosY,0,firstAbsorberPositionZ))); 
+  physiDepth[0]->add(new GeoTransform(GeoTrf::Translate3D(absorberPosY,0,firstAbsorberPositionZ))); 
   physiDepth[0]->add(physiFirstAbsorber); 
 
   
   firstAbsorberPositionZ = firstAbsorber[3]/2.- depthSize[3]/2.0;
   physiAbsorber[1] = new GeoPhysVol(logiAbsorber[1]);
   physiDepth[3]->add(new GeoIdentifierTag(51));
-  physiDepth[3]->add(new GeoTransform(HepGeom::Translate3D(absorberPosY,0,firstAbsorberPositionZ))); 
+  physiDepth[3]->add(new GeoTransform(GeoTrf::Translate3D(absorberPosY,0,firstAbsorberPositionZ))); 
   physiDepth[3]->add(physiAbsorber[1]);
   
 
@@ -414,13 +416,13 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
 
       physiEstBoard = new GeoPhysVol(logiEstBoard);
       physiSlice[indexBoard]->add(new GeoIdentifierTag(indexKapton));
-      physiSlice[indexBoard]->add(new GeoTransform(HepGeom::Translate3D(0,0,kaptonPositionZ))); 
+      physiSlice[indexBoard]->add(new GeoTransform(GeoTrf::Translate3D(0,0,kaptonPositionZ))); 
       physiSlice[indexBoard]->add(physiEstBoard);
 
       if(indexKapton==1) { 
 	  physiPadBoard = new GeoPhysVol(logiPadBoard);
           physiEstBoard->add(new GeoIdentifierTag(indexKapton));
-          physiEstBoard->add(new GeoTransform(HepGeom::Translate3D(0,0,0))); 
+          physiEstBoard->add(new GeoTransform(GeoTrf::Translate3D(0,0,0))); 
           physiEstBoard->add(physiPadBoard);
       }	   
   }//for indexBoard
@@ -430,12 +432,12 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
   
   std::string tieRodName = sliceName + "::TieRod";
   double ztie[2];
-  ztie[0]=-0.227825*CLHEP::cm;
-  ztie[1]= 0.227825*CLHEP::cm;
-  double rodSize = 0.39435*CLHEP::cm;
+  ztie[0]=-0.227825*GeoModelKernelUnits::cm;
+  ztie[1]= 0.227825*GeoModelKernelUnits::cm;
+  double rodSize = 0.39435*GeoModelKernelUnits::cm;
   for (int indexWheel=0; indexWheel<2; indexWheel++) { 
-     solidTieRod[indexWheel] = new GeoTubs(0.*CLHEP::cm,spacerDiameter[indexWheel]/2.,rodSize/2.,
-		                           0.*CLHEP::deg,360.*CLHEP::deg);         //size                 
+     solidTieRod[indexWheel] = new GeoTubs(0.*GeoModelKernelUnits::cm,spacerDiameter[indexWheel]/2.,rodSize/2.,
+		                           0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg);         //size                 
      logiTieRod[indexWheel] = new GeoLogVol(tieRodName,solidTieRod[indexWheel], Iron);
   }
   for(int numberSlice=0; numberSlice<3; numberSlice++){
@@ -446,13 +448,13 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
             for(int iz=0;iz<2;iz++){
                 physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
                 physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
-                physiSlice[numberSlice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[indexRod],
+                physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod],
                                                       tieRodPositionX[indexRod],ztie[iz]))); 
                 physiSlice[numberSlice]->add(physiTieRod[numberTie]); 
 
                 physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
                 physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
-                physiSlice[numberSlice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[indexRod],
+                physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod],
                                                       -tieRodPositionX[indexRod],ztie[iz]))); 
                 physiSlice[numberSlice]->add(physiTieRod[numberTie]); 
             }//for iz
@@ -460,7 +462,7 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
         for( int iz1=0;iz1<2;iz1++){   
 	        physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
                 physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
-                physiSlice[numberSlice]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[0],tieRodPositionX[0],ztie[iz1]))); 
+                physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[0],tieRodPositionX[0],ztie[iz1]))); 
                 physiSlice[numberSlice]->add(physiTieRod[numberTie]);
         }//for iz1 
   }     
@@ -469,8 +471,8 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
 //    Tie rods in Absorbers
 //----------------------------------------------------------------
       
-  solidAbsorberTieRod[0] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[0]/2.,absorberZ1/2.,0.*CLHEP::deg,360.*CLHEP::deg);                 
-  solidAbsorberTieRod[1] = new GeoTubs(0.*CLHEP::cm,tieRodDiameter[1]/2.,absorberZ2/2.,0.*CLHEP::deg,360.*CLHEP::deg);                 
+  solidAbsorberTieRod[0] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[0]/2.,absorberZ1/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg);                 
+  solidAbsorberTieRod[1] = new GeoTubs(0.*GeoModelKernelUnits::cm,tieRodDiameter[1]/2.,absorberZ2/2.,0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg);                 
   logiAbsorberTieRod[0] = new GeoLogVol(tieRodName, solidAbsorberTieRod[0], Iron);
   logiAbsorberTieRod[1] = new GeoLogVol(tieRodName, solidAbsorberTieRod[1], Iron);
   for(int indexA=0; indexA<3; indexA++){  
@@ -480,19 +482,19 @@ GeoVFullPhysVol* LArGeo::HECConstructionH62004::GetEnvelope()
     for(indexRod=1; indexRod<2; indexRod++){
        physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
        physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
-       physiAbsorber[indexA]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
+       physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
 		                                                  tieRodPositionX[indexRod], 0))); 
        physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]); 
 
        physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
        physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
-       physiAbsorber[indexA]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
+       physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
 		                                                 -tieRodPositionX[indexRod], 0))); 
        physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]);
     }     
     physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
     physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
-    physiAbsorber[indexA]->add(new GeoTransform(HepGeom::Translate3D(tieRodPositionY[0]+absorberPosY,
+    physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[0]+absorberPosY,
 		                                               tieRodPositionX[0],0))); 
     physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]);
   }      
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/LArDetectorFactoryH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/LArDetectorFactoryH62004.cxx
index 89945c3451bc2e40aac3788e418f189e54a2831a..0fafefd9cfd043492be6c866db9a040f46bd474a 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/LArDetectorFactoryH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/LArDetectorFactoryH62004.cxx
@@ -25,10 +25,12 @@
 #include "GeoModelKernel/GeoSerialDenominator.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoSerialTransformer.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "AthContainers/DataVector.h"
 
@@ -67,7 +69,7 @@
 //#include "LArGeoRAL/RAL.h"
 //#include "LArGeoCode/VDetectorParameters.h"
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 
@@ -115,8 +117,8 @@ void LArGeo::LArDetectorFactoryH62004::getSimulationParameters()
     m_tableYpos = 70.;
   }
 
-  std::cout << " Use cryo X : " <<  m_cryoXpos << " CLHEP::mm" << std::endl;
-  std::cout << " Use table Y : " <<  m_tableYpos << " CLHEP::mm" << std::endl;
+  std::cout << " Use cryo X : " <<  m_cryoXpos << " GeoModelKernelUnits::mm" << std::endl;
+  std::cout << " Use table Y : " <<  m_tableYpos << " GeoModelKernelUnits::mm" << std::endl;
   const_cast<LArGeoTB2004Options*>(largeoTB2004Options)->printMe();
 
 
@@ -154,9 +156,9 @@ void LArGeo::LArDetectorFactoryH62004::create(GeoPhysVol *world)
   
   const GeoMaterial *air        = materialManager->getMaterial("std::Air");
 
-  double expHallX = 14000.*CLHEP::mm;
-  double expHallY = 14000.*CLHEP::mm;
-  double expHallZ = 50000.*CLHEP::mm;
+  double expHallX = 14000.*GeoModelKernelUnits::mm;
+  double expHallY = 14000.*GeoModelKernelUnits::mm;
+  double expHallZ = 50000.*GeoModelKernelUnits::mm;
 
   //-----------------------------------------------------------------------------------//  
   // Next make the box that describes the shape of the expHall volume:                 //  
@@ -181,20 +183,20 @@ void LArGeo::LArDetectorFactoryH62004::create(GeoPhysVol *world)
   // the element we want to position in the following order:
 
 
-  double Theta = -90. * CLHEP::deg;
-  double Phi   = 0.  * CLHEP::deg;
+  double Theta = -90. * GeoModelKernelUnits::deg;
+  double Phi   = 0.  * GeoModelKernelUnits::deg;
 
-  CLHEP::HepRotation Mrot ;
-  Mrot.rotateX(Theta);
-  Mrot.rotateZ(Phi); 
-  CLHEP::Hep3Vector pos3Vector(    - m_cryoXpos*CLHEP::mm,    0.*CLHEP::mm,   12250.*CLHEP::mm );
+  GeoTrf::Transform3D Mrot = GeoTrf::RotateZ3D(Phi) * GeoTrf::RotateX3D(Theta);
+  GeoTrf::Translation3D pos3Vector(- m_cryoXpos*GeoModelKernelUnits::mm
+				   , 0.*GeoModelKernelUnits::mm
+				   , 12250.*GeoModelKernelUnits::mm );
 
   H6CryostatConstruction  H6CryoCons;
   GeoVPhysVol* CryoEnvelope = 0;
   CryoEnvelope = H6CryoCons.GetEnvelope();
   expHallPhys->add(new GeoNameTag("LAr"));
-  //expHallPhys->add( new GeoTransform( HepGeom::Translate3D(pos3Vector)*HepGeom::RotateX3D(Theta)*HepGeom::RotateZ3D(Phi) ));
-  expHallPhys->add( new GeoTransform( HepGeom::Transform3D(Mrot, pos3Vector) ) );
+  //expHallPhys->add( new GeoTransform( GeoTrf::Translate3D(pos3Vector)*GeoTrf::RotateX3D(Theta)*GeoTrf::RotateZ3D(Phi) ));
+  expHallPhys->add(new GeoTransform(pos3Vector*Mrot));// GeoTrf::Transform3D(Mrot, pos3Vector) ) );
   expHallPhys->add(CryoEnvelope);
  
 
@@ -205,28 +207,28 @@ void LArGeo::LArDetectorFactoryH62004::create(GeoPhysVol *world)
   // Add the front beam instrumentation:
   FrontBeamConstructionH62004 FrontBeamConstruction;
   // DB ?
-  const double bard_z = 100.0*CLHEP::cm;
-  const double z_bard=-2160.0*CLHEP::cm+80.1*CLHEP::cm+16.*CLHEP::cm+bard_z;
+  const double bard_z = 100.0*GeoModelKernelUnits::cm;
+  const double z_bard=-2160.0*GeoModelKernelUnits::cm+80.1*GeoModelKernelUnits::cm+16.*GeoModelKernelUnits::cm+bard_z;
   {                                             // (with 350=1/2 length of FrontBeam volume)
     GeoVPhysVol* front = 0;
     front = FrontBeamConstruction.GetEnvelope();
     if(front !=0 && expHallPhys !=0){
       expHallPhys->add( new GeoNameTag("H62004::Front"));
-      expHallPhys->add( new GeoTransform( HepGeom::TranslateZ3D(z_bard) ) );  
+      expHallPhys->add( new GeoTransform( GeoTrf::TranslateZ3D(z_bard) ) );  
       expHallPhys->add(front);    
     }
   }
   // Add middle chambers
   MiddleBeamConstructionH62004 MiddleBeamConstruction;
-  const double z_bardm=-2160.0*CLHEP::cm+1362.3*CLHEP::cm;
-  const double bttb_pos = 833.5*CLHEP::cm;
+  const double z_bardm=-2160.0*GeoModelKernelUnits::cm+1362.3*GeoModelKernelUnits::cm;
+  const double bttb_pos = 833.5*GeoModelKernelUnits::cm;
   {
      GeoVPhysVol* middle = 0;
      middle = MiddleBeamConstruction.GetEnvelope();
      if(middle != 0 && expHallPhys !=0){
-        double ym_pos = m_tableYpos  * (z_bardm + 2160*CLHEP::cm) * (1./(bttb_pos + 2160*CLHEP::cm));
+        double ym_pos = m_tableYpos  * (z_bardm + 2160*GeoModelKernelUnits::cm) * (1./(bttb_pos + 2160*GeoModelKernelUnits::cm));
 	expHallPhys->add( new GeoNameTag("H62004::Middle"));
-	expHallPhys->add( new GeoTransform( HepGeom::TranslateY3D(ym_pos) * HepGeom::TranslateZ3D(z_bardm) ) );
+	expHallPhys->add( new GeoTransform( GeoTrf::TranslateY3D(ym_pos) * GeoTrf::TranslateZ3D(z_bardm) ) );
 	expHallPhys->add(middle);
      }
   }
@@ -237,24 +239,24 @@ void LArGeo::LArDetectorFactoryH62004::create(GeoPhysVol *world)
      mov = MovableTable.GetEnvelope();
      if(mov != 0 && expHallPhys !=0){
 	expHallPhys->add( new GeoNameTag("H62004::Movable"));
-	expHallPhys->add( new GeoTransform( HepGeom::TranslateY3D(m_tableYpos) *  HepGeom::TranslateZ3D(bttb_pos) ) );
+	expHallPhys->add( new GeoTransform( GeoTrf::TranslateY3D(m_tableYpos) *  GeoTrf::TranslateZ3D(bttb_pos) ) );
 	expHallPhys->add(mov);
      }
   }
 
 
    // WarmTC after the cryostat
-   double WTC_tild = -1.1*CLHEP::deg;   // 24 CLHEP::mm tild on 1250 CLHEP::mm length !! should go to DB ?
-   double WTC_len = 591.5*CLHEP::mm;
-   double WTC_sci_z = 12.7*CLHEP::mm;
-   double Muon_dist = 120.0*CLHEP::mm;
-   double Muon_z = 1.0*CLHEP::cm;
-   double bcry_zpos = 1225.0*CLHEP::cm;
-   double bcry_rwarm = 129.55*CLHEP::cm;
-   double WTC_x = 0.0*CLHEP::mm;
-   double WTC_y = 0.0*CLHEP::mm;
-   double WTC_z = 460.0*CLHEP::mm - 120.*CLHEP::mm - 10.*CLHEP::mm;
-   double z_m = (86.0*CLHEP::mm + WTC_len + WTC_sci_z + Muon_dist + Muon_z) / 2;
+   double WTC_tild = -1.1*GeoModelKernelUnits::deg;   // 24 GeoModelKernelUnits::mm tild on 1250 GeoModelKernelUnits::mm length !! should go to DB ?
+   double WTC_len = 591.5*GeoModelKernelUnits::mm;
+   double WTC_sci_z = 12.7*GeoModelKernelUnits::mm;
+   double Muon_dist = 120.0*GeoModelKernelUnits::mm;
+   double Muon_z = 1.0*GeoModelKernelUnits::cm;
+   double bcry_zpos = 1225.0*GeoModelKernelUnits::cm;
+   double bcry_rwarm = 129.55*GeoModelKernelUnits::cm;
+   double WTC_x = 0.0*GeoModelKernelUnits::mm;
+   double WTC_y = 0.0*GeoModelKernelUnits::mm;
+   double WTC_z = 460.0*GeoModelKernelUnits::mm - 120.*GeoModelKernelUnits::mm - 10.*GeoModelKernelUnits::mm;
+   double z_m = (86.0*GeoModelKernelUnits::mm + WTC_len + WTC_sci_z + Muon_dist + Muon_z) / 2;
 
    WarmTCConstructionH62004 wtcConstruction;
    {
@@ -264,10 +266,8 @@ void LArGeo::LArDetectorFactoryH62004::create(GeoPhysVol *world)
      std::cout<<"WTC envelope: "<<wtc<<"/"<<expHallPhys<<std::endl;
      if(wtc !=0 && expHallPhys !=0){
        expHallPhys->add( new GeoNameTag("LAr"));
-       CLHEP::HepRotation rotTC;
-       rotTC.rotateX(WTC_tild);
-       expHallPhys->add( new GeoTransform( HepGeom::Transform3D( rotTC, 
-			          CLHEP::Hep3Vector(WTC_x, WTC_y, bcry_zpos + bcry_rwarm + WTC_z + z_m)))); 
+       GeoTrf::RotateX3D rotTC(WTC_tild);
+       expHallPhys->add( new GeoTransform( GeoTrf::Translation3D(WTC_x, WTC_y, bcry_zpos + bcry_rwarm + WTC_z + z_m) * rotTC));
        expHallPhys->add(wtc);    
      }
    }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MiddleBeamConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MiddleBeamConstructionH62004.cxx
index 24653ca45cd07b46d76c66ad09dd7f5d41d75fcc..8101631899ddc80ce73402ae4ec9a353eab60309 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MiddleBeamConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MiddleBeamConstructionH62004.cxx
@@ -23,6 +23,8 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -30,11 +32,7 @@
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -116,13 +114,13 @@ GeoVPhysVol* LArGeo::MiddleBeamConstructionH62004::GetEnvelope()
   //
   // Define dimension of Middle part & position of Front part
   //
-  double bmtb_x = 12.0*CLHEP::cm;
-  double bmtb_y = 12.0*CLHEP::cm;
-  double bmtb_z = 25.0*CLHEP::cm;
-  //double bmtb_pos = 10.0*CLHEP::cm;
-  double bpco_pos[4] =  {1.*CLHEP::cm, 1.*CLHEP::cm, 15.3*CLHEP::cm, 15.3*CLHEP::cm};
-  double bpco_shift[4] =  {0.*CLHEP::cm, 7.8*CLHEP::cm, 0.*CLHEP::cm, 7.5*CLHEP::cm};
-  double bpc_old_z = (5.100/2)*CLHEP::cm;
+  double bmtb_x = 12.0*GeoModelKernelUnits::cm;
+  double bmtb_y = 12.0*GeoModelKernelUnits::cm;
+  double bmtb_z = 25.0*GeoModelKernelUnits::cm;
+  //double bmtb_pos = 10.0*GeoModelKernelUnits::cm;
+  double bpco_pos[4] =  {1.*GeoModelKernelUnits::cm, 1.*GeoModelKernelUnits::cm, 15.3*GeoModelKernelUnits::cm, 15.3*GeoModelKernelUnits::cm};
+  double bpco_shift[4] =  {0.*GeoModelKernelUnits::cm, 7.8*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 7.5*GeoModelKernelUnits::cm};
+  double bpc_old_z = (5.100/2)*GeoModelKernelUnits::cm;
 
   GeoBox* H62004MiddleBeamShape = new GeoBox( bmtb_x, bmtb_y, bmtb_z );   
   const GeoLogVol* H62004MiddleBeamLogical = new GeoLogVol( H62004MiddleBeamName, H62004MiddleBeamShape, Air );
@@ -139,11 +137,11 @@ GeoVPhysVol* LArGeo::MiddleBeamConstructionH62004::GetEnvelope()
      m_H62004MiddleBeamPhysical->add( new GeoIdentifierTag((3+i/2)*10+i) );
      switch(i) {
 	  case 0: case 2: {
-			     m_H62004MiddleBeamPhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, bpco_pos[i]+bpco_shift[i]+bpc_old_z-bmtb_z) ) );
+			     m_H62004MiddleBeamPhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, bpco_pos[i]+bpco_shift[i]+bpc_old_z-bmtb_z) ) );
                             m_H62004MiddleBeamPhysical->add(BPCPhysical);
 			    break;}
 	  case 1: case 3: { 
-                            m_H62004MiddleBeamPhysical->add( new GeoTransform(HepGeom::RotateZ3D(90.*CLHEP::deg) *  HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, bpco_pos[i]+bpco_shift[i]+bpc_old_z-bmtb_z) ) );
+                            m_H62004MiddleBeamPhysical->add( new GeoTransform(GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) *  GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, bpco_pos[i]+bpco_shift[i]+bpc_old_z-bmtb_z) ) );
                             m_H62004MiddleBeamPhysical->add(BPCPhysical);
 			    break;}
     }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.cxx
index 41620b77871327935c942f99213bc8fb6887cd33..f2ffab36b2b3536c5ddc336df45ef9d532e19469 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.cxx
@@ -36,10 +36,12 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -70,7 +72,7 @@ LArGeo::ModulesConstructionH62004::ModulesConstructionH62004():m_ModulesPhys(0),
 {
 // fill the static arrays, if called first time
 //
-  //const double thick = 1.*CLHEP::cm;
+  //const double thick = 1.*GeoModelKernelUnits::cm;
   static bool first = true;
   if(first){
     first = false;
@@ -80,65 +82,65 @@ LArGeo::ModulesConstructionH62004::ModulesConstructionH62004():m_ModulesPhys(0),
        s_angleX[i] = s_angleY[i] = s_angleZ[i] = 0.;
     }
 
-    s_dX[0] = s_dX[1] = 1.*CLHEP::cm; s_dY[0]= s_dY[1] = 31.6*CLHEP::cm; s_dZ[0] = s_dZ[1] = 50.*CLHEP::cm; 
-    s_shiftX[0] = -26.*CLHEP::cm; s_shiftX[1] = -s_shiftX[0];
-    s_shiftY[0] = s_shiftY[1] = 85.1*CLHEP::cm; s_shiftZ[0] = s_shiftZ[1] = -3.*CLHEP::cm;
-    s_angleX[0] = s_angleX[1] = 4.668*CLHEP::deg; s_angleZ[0] = s_angleZ[1] = 0.*CLHEP::deg;
-    s_angleY[0] = -30.*CLHEP::deg; s_angleY[1] = -s_angleY[0]; 
-    s_dX[2] = 98.1*CLHEP::cm; s_dY[2] = 98.2*CLHEP::cm; s_dZ[2] = 30.6*CLHEP::cm;
-    s_shiftX[2] = 0.*CLHEP::cm; s_shiftY[2] = 89.7*CLHEP::cm; s_shiftZ[2] = -42.*CLHEP::cm;
-    s_angleX[2] = 94.668*CLHEP::deg; s_angleY[2] = 0.; s_angleZ[2] = 90.*CLHEP::degree;
+    s_dX[0] = s_dX[1] = 1.*GeoModelKernelUnits::cm; s_dY[0]= s_dY[1] = 31.6*GeoModelKernelUnits::cm; s_dZ[0] = s_dZ[1] = 50.*GeoModelKernelUnits::cm; 
+    s_shiftX[0] = -26.*GeoModelKernelUnits::cm; s_shiftX[1] = -s_shiftX[0];
+    s_shiftY[0] = s_shiftY[1] = 85.1*GeoModelKernelUnits::cm; s_shiftZ[0] = s_shiftZ[1] = -3.*GeoModelKernelUnits::cm;
+    s_angleX[0] = s_angleX[1] = 4.668*GeoModelKernelUnits::deg; s_angleZ[0] = s_angleZ[1] = 0.*GeoModelKernelUnits::deg;
+    s_angleY[0] = -30.*GeoModelKernelUnits::deg; s_angleY[1] = -s_angleY[0]; 
+    s_dX[2] = 98.1*GeoModelKernelUnits::cm; s_dY[2] = 98.2*GeoModelKernelUnits::cm; s_dZ[2] = 30.6*GeoModelKernelUnits::cm;
+    s_shiftX[2] = 0.*GeoModelKernelUnits::cm; s_shiftY[2] = 89.7*GeoModelKernelUnits::cm; s_shiftZ[2] = -42.*GeoModelKernelUnits::cm;
+    s_angleX[2] = 94.668*GeoModelKernelUnits::deg; s_angleY[2] = 0.; s_angleZ[2] = 90.*GeoModelKernelUnits::degree;
     
     
-    s_dX[3] = 1.*CLHEP::cm; s_dY[3] = 43.*CLHEP::cm; s_dZ[3] = 40.*CLHEP::cm;
+    s_dX[3] = 1.*GeoModelKernelUnits::cm; s_dY[3] = 43.*GeoModelKernelUnits::cm; s_dZ[3] = 40.*GeoModelKernelUnits::cm;
     s_dX[4] = s_dX[3]; s_dY[4] = s_dY[3]; s_dZ[4] = s_dZ[3];
-    s_shiftX[3] = -58.5*CLHEP::cm; s_shiftY[3] = 12.2*CLHEP::cm; s_shiftZ[3] = 5.*CLHEP::cm;
+    s_shiftX[3] = -58.5*GeoModelKernelUnits::cm; s_shiftY[3] = 12.2*GeoModelKernelUnits::cm; s_shiftZ[3] = 5.*GeoModelKernelUnits::cm;
     s_shiftX[4] = -s_shiftX[3]; s_shiftY[4] = s_shiftY[3]; s_shiftZ[4] = s_shiftZ[3];
-    s_angleX[3] = s_angleX[4] = 4.668*CLHEP::deg; s_angleY[3] = -45.*CLHEP::deg; 
+    s_angleX[3] = s_angleX[4] = 4.668*GeoModelKernelUnits::deg; s_angleY[3] = -45.*GeoModelKernelUnits::deg; 
     s_angleY[4] = -s_angleY[3]; 
-    s_angleZ[3] = 0.*CLHEP::deg; 
+    s_angleZ[3] = 0.*GeoModelKernelUnits::deg; 
     s_angleZ[4] = -s_angleZ[3];
-    s_dX[5] = 130.*CLHEP::cm; s_dY[5] = 131.*CLHEP::cm; s_dZ[5] = 43.*CLHEP::cm; 
-    s_shiftX[5] = 0.*CLHEP::cm; s_shiftY[5] = 18.1*CLHEP::cm; s_shiftZ[5] = -62.*CLHEP::cm;
-    s_angleX[5] = 94.668*CLHEP::deg; s_angleY[5] = 0.*CLHEP::deg;
-    s_angleZ[5] = 90.*CLHEP::deg;
+    s_dX[5] = 130.*GeoModelKernelUnits::cm; s_dY[5] = 131.*GeoModelKernelUnits::cm; s_dZ[5] = 43.*GeoModelKernelUnits::cm; 
+    s_shiftX[5] = 0.*GeoModelKernelUnits::cm; s_shiftY[5] = 18.1*GeoModelKernelUnits::cm; s_shiftZ[5] = -62.*GeoModelKernelUnits::cm;
+    s_angleX[5] = 94.668*GeoModelKernelUnits::deg; s_angleY[5] = 0.*GeoModelKernelUnits::deg;
+    s_angleZ[5] = 90.*GeoModelKernelUnits::deg;
 
-    s_dX[6] = s_dX[7] = 1.*CLHEP::cm; s_dY[6] = s_dY[7] = 27.*CLHEP::cm; s_dZ[6] = s_dZ[7] = 40.*CLHEP::cm; 
-    s_shiftX[6] = -58.*CLHEP::cm; s_shiftY[6] = s_shiftY[7] = -57.85*CLHEP::cm; s_shiftZ[6] = s_shiftZ[7] = -1.*CLHEP::cm;
+    s_dX[6] = s_dX[7] = 1.*GeoModelKernelUnits::cm; s_dY[6] = s_dY[7] = 27.*GeoModelKernelUnits::cm; s_dZ[6] = s_dZ[7] = 40.*GeoModelKernelUnits::cm; 
+    s_shiftX[6] = -58.*GeoModelKernelUnits::cm; s_shiftY[6] = s_shiftY[7] = -57.85*GeoModelKernelUnits::cm; s_shiftZ[6] = s_shiftZ[7] = -1.*GeoModelKernelUnits::cm;
     s_shiftX[7] = - s_shiftX[6]; 
-    s_angleX[6] = s_angleX[7] = 4.668*CLHEP::deg; s_angleY[6] = -45.*CLHEP::deg; s_angleZ[6] = s_angleZ[7] = 0.*CLHEP::deg;
+    s_angleX[6] = s_angleX[7] = 4.668*GeoModelKernelUnits::deg; s_angleY[6] = -45.*GeoModelKernelUnits::deg; s_angleZ[6] = s_angleZ[7] = 0.*GeoModelKernelUnits::deg;
     s_angleY[7] = -s_angleY[6];
-    s_dX[8] = 130.*CLHEP::cm; s_dY[8] = 131.*CLHEP::cm; s_dZ[8] = 27.*CLHEP::cm;
-    s_shiftX[8] = 0.*CLHEP::cm; s_shiftY[8] = -51.9*CLHEP::cm; s_shiftZ[8] = -67.*CLHEP::cm;
-    s_angleX[8] = 94.668*CLHEP::degree; s_angleY[8] = 0.*CLHEP::degree; s_angleZ[8] = 90.*CLHEP::degree;
-    s_dX[9] = 1.*CLHEP::cm; s_dY[9] = 82.*CLHEP::cm; s_dZ[9] = 44.5*CLHEP::cm;
-    s_shiftX[9] = 0.*CLHEP::cm; s_shiftY[9] = -89.0*CLHEP::cm; s_shiftZ[9] = 32.5*CLHEP::cm;
-    s_angleX[9] = 4.668*CLHEP::degree; s_angleY[9] = 0.*CLHEP::degree; s_angleZ[9] = 90.*CLHEP::degree;    
+    s_dX[8] = 130.*GeoModelKernelUnits::cm; s_dY[8] = 131.*GeoModelKernelUnits::cm; s_dZ[8] = 27.*GeoModelKernelUnits::cm;
+    s_shiftX[8] = 0.*GeoModelKernelUnits::cm; s_shiftY[8] = -51.9*GeoModelKernelUnits::cm; s_shiftZ[8] = -67.*GeoModelKernelUnits::cm;
+    s_angleX[8] = 94.668*GeoModelKernelUnits::degree; s_angleY[8] = 0.*GeoModelKernelUnits::degree; s_angleZ[8] = 90.*GeoModelKernelUnits::degree;
+    s_dX[9] = 1.*GeoModelKernelUnits::cm; s_dY[9] = 82.*GeoModelKernelUnits::cm; s_dZ[9] = 44.5*GeoModelKernelUnits::cm;
+    s_shiftX[9] = 0.*GeoModelKernelUnits::cm; s_shiftY[9] = -89.0*GeoModelKernelUnits::cm; s_shiftZ[9] = 32.5*GeoModelKernelUnits::cm;
+    s_angleX[9] = 4.668*GeoModelKernelUnits::degree; s_angleY[9] = 0.*GeoModelKernelUnits::degree; s_angleZ[9] = 90.*GeoModelKernelUnits::degree;    
     
-    s_dX[10] = s_dX[11] =  1.*CLHEP::cm; s_dY[10] = s_dY[11] = 41.5*CLHEP::cm; s_dZ[10] = s_dZ[11] = 20.3*CLHEP::cm;
-    s_shiftX[10] = -15.4*CLHEP::cm; s_shiftY[10] = s_shiftY[11] = 14.50*CLHEP::cm; s_shiftZ[10] = s_shiftZ[11] = -39.*CLHEP::cm;
+    s_dX[10] = s_dX[11] =  1.*GeoModelKernelUnits::cm; s_dY[10] = s_dY[11] = 41.5*GeoModelKernelUnits::cm; s_dZ[10] = s_dZ[11] = 20.3*GeoModelKernelUnits::cm;
+    s_shiftX[10] = -15.4*GeoModelKernelUnits::cm; s_shiftY[10] = s_shiftY[11] = 14.50*GeoModelKernelUnits::cm; s_shiftZ[10] = s_shiftZ[11] = -39.*GeoModelKernelUnits::cm;
     s_shiftX[11] = - s_shiftX[10];
-    s_angleX[10] = s_angleX[11] = 4.668*CLHEP::degree; s_angleY[10] = -45.*CLHEP::degree; s_angleZ[10] = 0.*CLHEP::degree;    
+    s_angleX[10] = s_angleX[11] = 4.668*GeoModelKernelUnits::degree; s_angleY[10] = -45.*GeoModelKernelUnits::degree; s_angleZ[10] = 0.*GeoModelKernelUnits::degree;    
     s_angleY[11] = -s_angleY[10]; s_angleZ[11] = -s_angleZ[10];    
   
-    s_dX[12] = s_dX[13] = 1.*CLHEP::cm; s_dY[12] = s_dY[13] = 27.*CLHEP::cm; s_dZ[12] = s_dZ[13] = 20.3*CLHEP::cm;
-    s_shiftX[12] = -15.4*CLHEP::cm; s_shiftY[12] = s_shiftY[13] = -54.4*CLHEP::cm; s_shiftZ[12] = s_shiftZ[13] = -43.8*CLHEP::cm;
+    s_dX[12] = s_dX[13] = 1.*GeoModelKernelUnits::cm; s_dY[12] = s_dY[13] = 27.*GeoModelKernelUnits::cm; s_dZ[12] = s_dZ[13] = 20.3*GeoModelKernelUnits::cm;
+    s_shiftX[12] = -15.4*GeoModelKernelUnits::cm; s_shiftY[12] = s_shiftY[13] = -54.4*GeoModelKernelUnits::cm; s_shiftZ[12] = s_shiftZ[13] = -43.8*GeoModelKernelUnits::cm;
     s_shiftX[13] = -s_shiftX[12];
-    s_angleX[12]  = s_angleX[13] = 4.668*CLHEP::degree; s_angleY[12] = -45.*CLHEP::degree; s_angleZ[12] = 0.*CLHEP::degree;
+    s_angleX[12]  = s_angleX[13] = 4.668*GeoModelKernelUnits::degree; s_angleY[12] = -45.*GeoModelKernelUnits::degree; s_angleZ[12] = 0.*GeoModelKernelUnits::degree;
     s_angleY[13] = -s_angleY[12]; s_angleZ[13] = -s_angleZ[12];
       
-    s_dX[14] = s_dX[15] = 1.*CLHEP::cm; s_dY[14] = s_dY[15] = 12.*CLHEP::cm; s_dZ[14] = s_dZ[15] = 25.3*CLHEP::cm;
-    s_shiftX[14] = -19.5*CLHEP::cm; s_shiftY[14] = s_shiftY[15] = -93.5*CLHEP::cm; s_shiftZ[14] = s_shiftZ[15] = -46.5*CLHEP::cm;
+    s_dX[14] = s_dX[15] = 1.*GeoModelKernelUnits::cm; s_dY[14] = s_dY[15] = 12.*GeoModelKernelUnits::cm; s_dZ[14] = s_dZ[15] = 25.3*GeoModelKernelUnits::cm;
+    s_shiftX[14] = -19.5*GeoModelKernelUnits::cm; s_shiftY[14] = s_shiftY[15] = -93.5*GeoModelKernelUnits::cm; s_shiftZ[14] = s_shiftZ[15] = -46.5*GeoModelKernelUnits::cm;
     s_shiftX[15] = -s_shiftX[14];
-    s_angleX[14] = s_angleX[15] = 4.668*CLHEP::degree; s_angleY[14] = -45.*CLHEP::degree; s_angleZ[14] = s_angleZ[15] = 0.*CLHEP::degree;
+    s_angleX[14] = s_angleX[15] = 4.668*GeoModelKernelUnits::degree; s_angleY[14] = -45.*GeoModelKernelUnits::degree; s_angleZ[14] = s_angleZ[15] = 0.*GeoModelKernelUnits::degree;
     s_angleY[15] = -s_angleY[14]; 
     
-    s_dX[16] = 59.5*CLHEP::cm; s_dY[16] = 60.0*CLHEP::cm; s_dZ[16] = 12.0*CLHEP::cm;
-    s_shiftX[16] = 0.*CLHEP::cm; s_shiftY[16] = -91.5*CLHEP::cm; s_shiftZ[16] = -73.5*CLHEP::cm;
-    s_angleX[16] = 94.668*CLHEP::degree; s_angleY[16] = 0.*CLHEP::degree; s_angleZ[16] = 90.*CLHEP::degree;
-    s_dX[17] = 0.3*CLHEP::cm; s_dY[17] = 35.*CLHEP::cm; s_dZ[17] = 25.*CLHEP::cm;
-    s_shiftX[17] = 0.*CLHEP::cm; s_shiftY[17] = -107.0*CLHEP::cm; s_shiftZ[17] = -40.*CLHEP::cm;
-    s_angleX[17] = 4.668*CLHEP::degree; s_angleY[17] = 0.*CLHEP::degree; s_angleZ[17] = 90.*CLHEP::degree;
+    s_dX[16] = 59.5*GeoModelKernelUnits::cm; s_dY[16] = 60.0*GeoModelKernelUnits::cm; s_dZ[16] = 12.0*GeoModelKernelUnits::cm;
+    s_shiftX[16] = 0.*GeoModelKernelUnits::cm; s_shiftY[16] = -91.5*GeoModelKernelUnits::cm; s_shiftZ[16] = -73.5*GeoModelKernelUnits::cm;
+    s_angleX[16] = 94.668*GeoModelKernelUnits::degree; s_angleY[16] = 0.*GeoModelKernelUnits::degree; s_angleZ[16] = 90.*GeoModelKernelUnits::degree;
+    s_dX[17] = 0.3*GeoModelKernelUnits::cm; s_dY[17] = 35.*GeoModelKernelUnits::cm; s_dZ[17] = 25.*GeoModelKernelUnits::cm;
+    s_shiftX[17] = 0.*GeoModelKernelUnits::cm; s_shiftY[17] = -107.0*GeoModelKernelUnits::cm; s_shiftZ[17] = -40.*GeoModelKernelUnits::cm;
+    s_angleX[17] = 4.668*GeoModelKernelUnits::degree; s_angleY[17] = 0.*GeoModelKernelUnits::degree; s_angleZ[17] = 90.*GeoModelKernelUnits::degree;
      
   }
   //StoreGateSvc* detStore;
@@ -188,11 +190,12 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   // Rohacell foam has density: 0.11g/cm3
   std::string name;
   double density;
+
   const GeoElement*  C=materialManager->getElement("Carbon");
   const GeoElement*  H=materialManager->getElement("Hydrogen");
   const GeoElement*  O=materialManager->getElement("Oxygen");
   const GeoElement*  N=materialManager->getElement("Nitrogen");
-  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.112*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Rohacell = new GeoMaterial(name="Rohacell", density=0.112*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Rohacell->add(C,0.6465);
   Rohacell->add(H,0.07836);
   Rohacell->add(O,0.19137);
@@ -200,7 +203,7 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   Rohacell->lock();
 
   /*
-  a = 12.957*CLHEP::g/CLHEP::mole;                                                       
+  a = 12.957*GeoModelKernelUnits::g/GeoModelKernelUnits::mole;                                                       
   density = 0.112*g/cm3;                                              
   z = 6.18;
   G4Material* Rohacell = new G4Material(name="Rohacell",z, a, density);
@@ -210,35 +213,35 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   if (!Alu) throw std::runtime_error("Error in ModulesConstruction, std::Aluminium is not found.");
 
   // DB numbers:
-  double bryr_y = 200.0*CLHEP::cm;
-  double bcry_rlar = 125.5*CLHEP::cm;
-  double bcry_phistart = 0.*CLHEP::degree;
-  double bcry_phiend = 360.*CLHEP::degree;
-  //double EMECdzende         =  63.2*CLHEP::cm;   // Can not get from parameters
+  double bryr_y = 200.0*GeoModelKernelUnits::cm;
+  double bcry_rlar = 125.5*GeoModelKernelUnits::cm;
+  double bcry_phistart = 0.*GeoModelKernelUnits::degree;
+  double bcry_phiend = 360.*GeoModelKernelUnits::degree;
+  //double EMECdzende         =  63.2*GeoModelKernelUnits::cm;   // Can not get from parameters
   //double Zall = 62.6*cm; // Excluder dimension
 
-  double   bepo_tx = 180.0*CLHEP::degree;
-  double   bepo_tz = 90.0*CLHEP::degree;
-  double   bepo_tz_e = ( M_PI / 4 )*CLHEP::rad;
-  double   bepo_ty = 90.0*CLHEP::degree;
-  double   bepo_Beta = 4.668*CLHEP::degree;
-  double   bepo_z_e = -42.86*CLHEP::cm; // 43 CLHEP::cm * cos(4.668)
-  double   bepo_emec_shift = 2.5*CLHEP::cm;
-  double   bepo_excluder_shift = 34.4*CLHEP::cm;
-  //double   bepo_hec_shift = 63.6*CLHEP::cm; // relative position of HEC versus EMEC
+  double   bepo_tx = 180.0*GeoModelKernelUnits::degree;
+  double   bepo_tz = 90.0*GeoModelKernelUnits::degree;
+  double   bepo_tz_e = ( M_PI / 4 )*GeoModelKernelUnits::rad;
+  double   bepo_ty = 90.0*GeoModelKernelUnits::degree;
+  double   bepo_Beta = 4.668*GeoModelKernelUnits::degree;
+  double   bepo_z_e = -42.86*GeoModelKernelUnits::cm; // 43 GeoModelKernelUnits::cm * cos(4.668)
+  double   bepo_emec_shift = 2.5*GeoModelKernelUnits::cm;
+  double   bepo_excluder_shift = 34.4*GeoModelKernelUnits::cm;
+  //double   bepo_hec_shift = 63.6*GeoModelKernelUnits::cm; // relative position of HEC versus EMEC
   //double   bepo_y_a = bcry_rlar-bepo_emec_shift-bepo_hec_shift;
   double   bepo_y_ex = bcry_rlar-bepo_excluder_shift;
-  double   bepo_y_hecshift = 6.*CLHEP::mm;
-  double   bepo_y_emecshift = 11.*CLHEP::mm;
-  double   bepo_x = -2.75*CLHEP::mm;
-  double   bepo_x_e = -17.*CLHEP::mm;
-//  double   bepo_x = 13.25*CLHEP::mm;
-//  double   bepo_x_e = -3.*CLHEP::mm;
-//  double   bepo_x = 17.25*CLHEP::mm;
-//  double   bepo_x_e = -3.*CLHEP::mm;
-  //double   bepo_z = -48.24*CLHEP::cm; // 48.4 CLHEP::cm * cos(4.668)
+  double   bepo_y_hecshift = 6.*GeoModelKernelUnits::mm;
+  double   bepo_y_emecshift = 11.*GeoModelKernelUnits::mm;
+  double   bepo_x = -2.75*GeoModelKernelUnits::mm;
+  double   bepo_x_e = -17.*GeoModelKernelUnits::mm;
+//  double   bepo_x = 13.25*GeoModelKernelUnits::mm;
+//  double   bepo_x_e = -3.*GeoModelKernelUnits::mm;
+//  double   bepo_x = 17.25*GeoModelKernelUnits::mm;
+//  double   bepo_x_e = -3.*GeoModelKernelUnits::mm;
+  //double   bepo_z = -48.24*GeoModelKernelUnits::cm; // 48.4 GeoModelKernelUnits::cm * cos(4.668)
   double   bepo_y_e = bcry_rlar-bepo_emec_shift;
-  double   bepo_pz = 45.0*CLHEP::degree;
+  double   bepo_pz = 45.0*GeoModelKernelUnits::degree;
 
   std::string baseName = "LArGeoTB::LeakageDet::";
 
@@ -246,9 +249,9 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   if(m_Options && m_Options->isRun1()) {
      ylen = bryr_y;
   } else {
-     ylen = bryr_y - 200.*CLHEP::mm;
+     ylen = bryr_y - 200.*GeoModelKernelUnits::mm;
   }
-  GeoTubs *shapeMother = new GeoTubs( 0.0*CLHEP::cm, bcry_rlar, ylen, bcry_phistart,bcry_phiend);
+  GeoTubs *shapeMother = new GeoTubs( 0.0*GeoModelKernelUnits::cm, bcry_rlar, ylen, bcry_phistart,bcry_phiend);
   GeoLogVol *logMother = new GeoLogVol(baseName + "LAr", shapeMother, LAr);
 
   m_ModulesPhys = new GeoFullPhysVol(logMother);
@@ -269,7 +272,7 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
         leak_log->SetSensitiveDetector(LeakSDdetector);
 	leak_log->SetVisAttributes(G4VisAttributes::Invisible);
 //	leak_log->SetVisAttributes(new G4VisAttributes(G4Color(0.7,0.1,0.7)));
-        HepGeom::Transform3D leak_pos = position(sid, dir, cal);
+        GeoTrf::Transform3D leak_pos = position(sid, dir, cal);
         G4VPhysicalVolume *leak_phys =
         new G4PVPlacement(leak_pos,
                           leak_log,
@@ -289,13 +292,9 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
 //     std::cout<<"ModulesConstructionH62004::GetEnvelope positioning Excluder"<<std::endl;
     GeoVFullPhysVol* excluderEnvelope = excluder.GetEnvelope();
     /*if(excluderEnvelope != 0)*/{
-      CLHEP::HepRotation rot2; 
-//      rot2.rotateZ(bepo_tz+bepo_tz_e);
-      rot2.rotateZ(bepo_tz);
-      rot2.rotateX(bepo_ty);
-      rot2.rotateX(bepo_Beta);
+      GeoTrf::Transform3D rot2 = GeoTrf::RotateX3D(bepo_Beta) * GeoTrf::RotateX3D(bepo_ty) * GeoTrf::RotateZ3D(bepo_tz);
       m_ModulesPhys->add(new GeoSerialIdentifier(0));
-      m_ModulesPhys->add(new GeoTransform(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,bepo_y_ex,bepo_z_e+42.*CLHEP::mm))));
+      m_ModulesPhys->add(new GeoTransform(GeoTrf::Translation3D(0.,bepo_y_ex,bepo_z_e+42.*GeoModelKernelUnits::mm) * rot2));
       m_ModulesPhys->add(excluderEnvelope);
     }
   }
@@ -309,13 +308,10 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
 //     std::cout<<"ModulesConstructionH62004::GetEnvelope positioning Excluder"<<std::endl;
     GeoVFullPhysVol* fcexcluderEnvelope = fcexcluder.GetEnvelope();
     if(fcexcluderEnvelope != 0){
-      CLHEP::HepRotation rot2; 
-      rot2.rotateZ(bepo_tx);
-      rot2.rotateX(-bepo_ty);
-      rot2.rotateX(0.8*bepo_Beta);
+      GeoTrf::Transform3D rot2 = GeoTrf::RotateX3D(0.8*bepo_Beta) * GeoTrf::RotateX3D(-bepo_ty) * GeoTrf::RotateZ3D(bepo_tx);
       m_ModulesPhys->add(new GeoSerialIdentifier(0));
-//      m_ModulesPhys->add(new GeoTransform(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,bepo_y_ex-138.*CLHEP::mm,-477.3*CLHEP::mm))));
-      m_ModulesPhys->add(new GeoTransform(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,bepo_y_ex-146.*CLHEP::mm,-412.0*CLHEP::mm))));
+//      m_ModulesPhys->add(new GeoTransform(GeoTrf::Transform3D(rot2,GeoTrf::Vector3D(0.,bepo_y_ex-138.*GeoModelKernelUnits::mm,-477.3*GeoModelKernelUnits::mm))));
+      m_ModulesPhys->add(new GeoTransform(GeoTrf::Translation3D(0.,bepo_y_ex-146.*GeoModelKernelUnits::mm,-412.0*GeoModelKernelUnits::mm) * rot2));
       m_ModulesPhys->add(fcexcluderEnvelope);
     }
   }
@@ -328,16 +324,14 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   /*if(frontexcluder != 0)*/{
     GeoVFullPhysVol* frontexcluderEnvelope = frontexcluder.GetEnvelope();
     if(frontexcluderEnvelope != 0){
-      CLHEP::HepRotation rot2; 
-//      rot2.rotateZ((90.-18.)*CLHEP::degree);
-      rot2.rotateZ((90.)*CLHEP::degree);
+      GeoTrf::RotateZ3D rot2((90.)*GeoModelKernelUnits::degree);
       m_ModulesPhys->add(new GeoSerialIdentifier(0));
-      m_ModulesPhys->add(new GeoTransform(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,0.,20.*CLHEP::mm))));
+      m_ModulesPhys->add(new GeoTransform(GeoTrf::Translation3D(0.,0.,20.*GeoModelKernelUnits::mm) * rot2));
       m_ModulesPhys->add(frontexcluderEnvelope);
       /*
       G4VPhysicalVolume* frontexcluderPhysical =
-//	    new G4PVPlacement(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,0.,220.*CLHEP::mm)), // Translation 
-	    new G4PVPlacement(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,0.,20.*CLHEP::mm)), // Translation 
+//	    new G4PVPlacement(GeoTrf::Transform3D(rot2,GeoTrf::Vector3D(0.,0.,220.*GeoModelKernelUnits::mm)), // Translation 
+	    new G4PVPlacement(GeoTrf::Transform3D(rot2,GeoTrf::Vector3D(0.,0.,20.*GeoModelKernelUnits::mm)), // Translation 
 			      frontexcluderEnvelope,                     // Logical volume
 			      frontexcluderEnvelope->GetName(),          // Name 
 			      logMother,                        // Mother volume 
@@ -355,14 +349,13 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   /*if(backexcluder != 0)*/{
     GeoVFullPhysVol* backexcluderEnvelope = backexcluder.GetEnvelope();
     if(backexcluderEnvelope != 0){
-      CLHEP::HepRotation rot2; 
-      rot2.rotateZ((-90.-29.)*CLHEP::degree);
+      GeoTrf::RotateZ3D rot2((-90.-29.)*GeoModelKernelUnits::degree);
       m_ModulesPhys->add(new GeoSerialIdentifier(0));
-      m_ModulesPhys->add(new GeoTransform(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,0.,0.*CLHEP::mm))));
+      m_ModulesPhys->add(new GeoTransform(GeoTrf::Translation3D(0.,0.,0.*GeoModelKernelUnits::mm) * rot2));
       m_ModulesPhys->add(backexcluderEnvelope);
       /*
       G4VPhysicalVolume* backexcluderPhysical =
-	    new G4PVPlacement(HepGeom::Transform3D(rot2,CLHEP::Hep3Vector(0.,0.,0.*CLHEP::mm)), // Translation 
+	    new G4PVPlacement(GeoTrf::Transform3D(rot2,GeoTrf::Vector3D(0.,0.,0.*GeoModelKernelUnits::mm)), // Translation 
 			      backexcluderEnvelope,                     // Logical volume
 			      backexcluderEnvelope->GetName(),          // Name 
 			      logMother,                        // Mother volume 
@@ -379,32 +372,28 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
  // G4AssemblyVolume* assemblyMother = new G4AssemblyVolume();
 
   // Transformation for assembly - should be putted to each piece now.
-  CLHEP::HepRotation rota;
-  rota.rotateZ(-bepo_pz);
-  rota.rotateX(bepo_ty);
-  rota.rotateX(bepo_Beta);
-  
-//  HepGeom::Transform3D trans(rota, CLHEP::Hep3Vector(0.,bepo_y_e,bepo_z_e));
-  HepGeom::Transform3D trans(rota, CLHEP::Hep3Vector(0.,bepo_y_e,bepo_z_e+65.*CLHEP::mm));
+  GeoTrf::Transform3D rota = GeoTrf::RotateX3D(bepo_Beta) * GeoTrf::RotateX3D(bepo_ty) * GeoTrf::RotateZ3D(-bepo_pz);
+  GeoTrf::Transform3D trans = GeoTrf::Translation3D(0.,bepo_y_e,bepo_z_e+65.*GeoModelKernelUnits::mm) * rota;
   
 //positions emec
 
   // Z-positions DB values !!!!
 
-  double HECzStart         =  427.7*CLHEP::cm;
-  double EMECzStart         = 364.1*CLHEP::cm;
-  double FCALzStart         =  466.85*CLHEP::cm;
-  double FCALzEnd           =  588.28*CLHEP::cm;
+  double HECzStart         =  427.7*GeoModelKernelUnits::cm;
+  double EMECzStart         = 364.1*GeoModelKernelUnits::cm;
+  double FCALzStart         =  466.85*GeoModelKernelUnits::cm;
+  double FCALzEnd           =  588.28*GeoModelKernelUnits::cm;
 
   if((!m_Options) || m_Options->isEmec()){
-     CLHEP::HepRotation MrotEmec ;
-     MrotEmec.rotateZ(bepo_tz_e); 
+    GeoTrf::RotateZ3D MrotEmec(bepo_tz_e);
      // original value:
-//     CLHEP::Hep3Vector pos3Emec(    0*CLHEP::mm,   9.0*CLHEP::mm ,   55.9*CLHEP::mm);
-//     CLHEP::Hep3Vector pos3Emec(    3.636*CLHEP::mm,   9.0*CLHEP::mm ,   55.9*CLHEP::mm);
-//     CLHEP::Hep3Vector pos3Emec(    bepo_x_e,   9.*CLHEP::mm ,   61.*CLHEP::mm);
-       CLHEP::Hep3Vector pos3Emec( (bepo_x_e - bepo_y_emecshift )/2./sin(bepo_tz_e), (bepo_x_e + bepo_y_emecshift )/2./sin(bepo_tz_e), 61.*CLHEP::mm);
-//     CLHEP::Hep3Vector pos3Emec(    0.*CLHEP::mm, bepo_x_e,   61.*CLHEP::mm);
+//     GeoTrf::Vector3D pos3Emec(    0*GeoModelKernelUnits::mm,   9.0*GeoModelKernelUnits::mm ,   55.9*GeoModelKernelUnits::mm);
+//     GeoTrf::Vector3D pos3Emec(    3.636*GeoModelKernelUnits::mm,   9.0*GeoModelKernelUnits::mm ,   55.9*GeoModelKernelUnits::mm);
+//     GeoTrf::Vector3D pos3Emec(    bepo_x_e,   9.*GeoModelKernelUnits::mm ,   61.*GeoModelKernelUnits::mm);
+    GeoTrf::Translation3D pos3Emec((bepo_x_e - bepo_y_emecshift )/2./sin(bepo_tz_e)
+				   , (bepo_x_e + bepo_y_emecshift )/2./sin(bepo_tz_e)
+				   , 61.*GeoModelKernelUnits::mm);
+//     GeoTrf::Vector3D pos3Emec(    0.*GeoModelKernelUnits::mm, bepo_x_e,   61.*GeoModelKernelUnits::mm);
 
 //     std::cout<<"ModulesConstructionH62004 calling EMECModuleConstruction....."<<std::endl;
   //use this line for physical construction of the EMEC inner wheel only:
@@ -414,7 +403,7 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
      GeoVFullPhysVol* emecEnvelope = emecConstruction.GetEnvelope();
      m_ModulesPhys->add(new GeoNameTag("LAr"));
      m_ModulesPhys->add( new GeoTransform(trans) );
-     m_ModulesPhys->add( new GeoTransform( HepGeom::Transform3D(MrotEmec, pos3Emec) ) );
+     m_ModulesPhys->add( new GeoTransform( pos3Emec * MrotEmec ));
      m_ModulesPhys->add(emecEnvelope);
 //     std::cout<<"ModulesConstructionH62004  EMECModuleConstruction done...."<<std::endl;
   }
@@ -427,21 +416,21 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
     /*if(hec != 0)*/{
       GeoVPhysVol* hecEnvelope = hec.GetEnvelope();
       if(hecEnvelope != 0){
-        CLHEP::HepRotation rot;
 //        rot.rotateZ(-bepo_pz);
 //        rot.rotateX(bepo_ty);
 //        rot.rotateX(bepo_Beta);
   
-//        HepGeom::Transform3D hpos = HepGeom::Transform3D(rot,CLHEP::Hep3Vector(bepo_x,bepo_y_a,bepo_z));
-//        CLHEP::Hep3Vector hecshift(0.,6.*CLHEP::mm,HECzStart-EMECzStart);
-          CLHEP::Hep3Vector hecshift((bepo_x - bepo_y_hecshift)/2./sin(bepo_tz_e), (bepo_x + bepo_y_hecshift)/2./sin(bepo_tz_e), HECzStart-EMECzStart);
-//        CLHEP::Hep3Vector hecshift(-21.*CLHEP::mm, bepo_x, HECzStart-EMECzStart);
-//        CLHEP::Hep3Vector hecshift(-5.*CLHEP::mm, bepo_x, HECzStart-EMECzStart);
-//        CLHEP::Hep3Vector hecshift(0.*CLHEP::mm, bepo_x, HECzStart-EMECzStart);
-//       CLHEP::HepRotation norot;
-        HepGeom::Transform3D hectrans(rot,hecshift);
-        m_ModulesPhys->add( new GeoTransform(trans) );
-        m_ModulesPhys->add(new GeoTransform(hectrans));
+//        GeoTrf::Transform3D hpos = GeoTrf::Transform3D(rot,GeoTrf::Vector3D(bepo_x,bepo_y_a,bepo_z));
+//        GeoTrf::Vector3D hecshift(0.,6.*GeoModelKernelUnits::mm,HECzStart-EMECzStart);
+//          GeoTrf::Vector3D hecshift((bepo_x - bepo_y_hecshift)/2./sin(bepo_tz_e), (bepo_x + bepo_y_hecshift)/2./sin(bepo_tz_e), HECzStart-EMECzStart);
+//        GeoTrf::Vector3D hecshift(-21.*GeoModelKernelUnits::mm, bepo_x, HECzStart-EMECzStart);
+//        GeoTrf::Vector3D hecshift(-5.*GeoModelKernelUnits::mm, bepo_x, HECzStart-EMECzStart);
+//        GeoTrf::Vector3D hecshift(0.*GeoModelKernelUnits::mm, bepo_x, HECzStart-EMECzStart);
+//       GeoModelKernelUnits::HepRotation norot;
+        m_ModulesPhys->add(new GeoTransform(trans));
+        m_ModulesPhys->add( new GeoTransform(GeoTrf::Translate3D((bepo_x - bepo_y_hecshift)/2./sin(bepo_tz_e)
+								 , (bepo_x + bepo_y_hecshift)/2./sin(bepo_tz_e)
+								 , HECzStart-EMECzStart)) );
         m_ModulesPhys->add(hecEnvelope);
 
 //       assemblyMother->AddPlacedVolume( hecEnvelope, hectrans );
@@ -455,16 +444,16 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
       fcal.setFCALVisLimit(m_fcalVisLimit); 
       GeoVPhysVol* fcalEnvelope = fcal.GetEnvelope();
       if(fcalEnvelope != 0){
-        CLHEP::HepRotation rotFCal;
-       // rotFCal.rotateY(0.*CLHEP::deg);
+//        GeoModelKernelUnits::HepRotation rotFCal;
+       // rotFCal.rotateY(0.*GeoModelKernelUnits::deg);
        //  rotFCal.rotateZ(-bepo_pz);
        //  rotFCal.rotateX(bepo_ty);
        //  rotFCal.rotateX(bepo_Beta);
-//        CLHEP::Hep3Vector fcalshift(0.,-7.*CLHEP::mm,FCALzStart-EMECzStart+(FCALzEnd-FCALzStart)/2.);
-        CLHEP::Hep3Vector fcalshift(9.*CLHEP::mm,0.*CLHEP::mm,FCALzStart-EMECzStart+(FCALzEnd-FCALzStart)/2.);
-        HepGeom::Transform3D fcaltrans(rotFCal,fcalshift);
-        m_ModulesPhys->add( new GeoTransform(trans) );
-        m_ModulesPhys->add(new GeoTransform(fcaltrans));
+//        GeoTrf::Vector3D fcalshift(0.,-7.*GeoModelKernelUnits::mm,FCALzStart-EMECzStart+(FCALzEnd-FCALzStart)/2.);
+        m_ModulesPhys->add(new GeoTransform(trans));
+        m_ModulesPhys->add( new GeoTransform(GeoTrf::Translate3D(9.*GeoModelKernelUnits::mm
+								 ,0.*GeoModelKernelUnits::mm
+								 ,FCALzStart-EMECzStart+(FCALzEnd-FCALzStart)/2.)) );
         m_ModulesPhys->add(fcalEnvelope);
       }
     }
@@ -474,89 +463,78 @@ GeoVFullPhysVol* LArGeo::ModulesConstructionH62004::GetEnvelope()
   // Position a cold nose
   //
   
-  double box_x = (650./2.)*CLHEP::mm;
-  double box_y = (356./2.)*CLHEP::mm;
-  double box_z = (50.8/2.)*CLHEP::mm;
-  double btot = 494.*CLHEP::mm;
-  double tub_r = 452.*CLHEP::mm;
-  double tub1_dr = 8.*CLHEP::mm;
-  double tub1_z = (1320./2.)*CLHEP::mm;
-  double cyl_dr = 10.*CLHEP::mm;
-  double cyl_r1 = 262.*CLHEP::mm;
-  double cyl_r2 = 336.5*CLHEP::mm;
-  double cyl_z = (912./2.)*CLHEP::mm;
-  double cyl_shift = (10. + 25.)*CLHEP::mm; 
-//  double NoseZshift = -360.*CLHEP::mm;
-  double NoseZshift = -63.1*CLHEP::mm;
-//  double NoseYshift = 94.4*CLHEP::mm;
-//  double NoseYshift = 96.4*CLHEP::mm;
-  double NoseYshift = 98.4*CLHEP::mm;
-//  double NoseXshift = -195.*CLHEP::mm;
-  double NoseXshift = -94.4*CLHEP::mm;
+  double box_x = (650./2.)*GeoModelKernelUnits::mm;
+  double box_y = (356./2.)*GeoModelKernelUnits::mm;
+  double box_z = (50.8/2.)*GeoModelKernelUnits::mm;
+  double btot = 494.*GeoModelKernelUnits::mm;
+  double tub_r = 452.*GeoModelKernelUnits::mm;
+  double tub1_dr = 8.*GeoModelKernelUnits::mm;
+  double tub1_z = (1320./2.)*GeoModelKernelUnits::mm;
+  double cyl_dr = 10.*GeoModelKernelUnits::mm;
+  double cyl_r1 = 262.*GeoModelKernelUnits::mm;
+  double cyl_r2 = 336.5*GeoModelKernelUnits::mm;
+  double cyl_z = (912./2.)*GeoModelKernelUnits::mm;
+  double cyl_shift = (10. + 25.)*GeoModelKernelUnits::mm; 
+//  double NoseZshift = -360.*GeoModelKernelUnits::mm;
+  double NoseZshift = -63.1*GeoModelKernelUnits::mm;
+//  double NoseYshift = 94.4*GeoModelKernelUnits::mm;
+//  double NoseYshift = 96.4*GeoModelKernelUnits::mm;
+  double NoseYshift = 98.4*GeoModelKernelUnits::mm;
+//  double NoseXshift = -195.*GeoModelKernelUnits::mm;
+  double NoseXshift = -94.4*GeoModelKernelUnits::mm;
 
   GeoBox* Box1 = new GeoBox(box_x, box_y, box_z);
   double alpha = acos(box_x/tub_r);
   double ax = M_PI - 2*alpha;
   GeoTubs* Tub= new GeoTubs(0., tub_r, box_z, alpha, ax);
 
-  CLHEP::HepRotation tRot;
-//  tRot.rotateX(90*CLHEP::degree);
-  CLHEP::Hep3Vector TubShift(0.,btot-box_y-tub_r,0.);
-  HepGeom::Transform3D TubTrans(tRot,TubShift);
+//  tRot.rotateX(90*GeoModelKernelUnits::degree);
+  GeoTrf::Translate3D TubTrans(0.,btot-box_y-tub_r,0.);
   const GeoShapeUnion &uSolid = (*Box1).add((*Tub)<<TubTrans);
 
   GeoTubs* Tub1 = new GeoTubs(tub_r, tub_r+tub1_dr, tub1_z, alpha, ax);  
-//  CLHEP::Hep3Vector TubShift2(0.,btot-box_y-tub_r,-tub1_z+box_z);
-  CLHEP::Hep3Vector TubShift2(0.,-135.5*CLHEP::mm,-tub1_z+box_z);
-//  CLHEP::Hep3Vector TubShift2(0.,0.,0.);
-//  tRot.rotateX(90*CLHEP::degree);
-  HepGeom::Transform3D UnTrans(tRot,TubShift2);
+//  GeoTrf::Vector3D TubShift2(0.,btot-box_y-tub_r,-tub1_z+box_z);
+//  GeoTrf::Vector3D TubShift2(0.,0.,0.);
+//  tRot.rotateX(90*GeoModelKernelUnits::degree);
+  GeoTrf::Translate3D UnTrans(0.,-135.5*GeoModelKernelUnits::mm,-tub1_z+box_z);
   const GeoShapeUnion &uSolid2 = uSolid.add((*Tub1)<<UnTrans);
 
   GeoCons* Cone = new GeoCons(cyl_r2, cyl_r1, cyl_r2+cyl_dr, cyl_r1+cyl_dr, cyl_z, M_PI/4.,M_PI/2.);
-//  CLHEP::Hep3Vector CylShift(0.,-box_y+cyl_shift,cyl_z+box_z-3.*CLHEP::mm);
-  CLHEP::Hep3Vector CylShift(0.,-box_y+cyl_shift,cyl_z+box_z-5.*CLHEP::mm);
-//  CLHEP::Hep3Vector CylShift(0.,0.,cyl_z+box_z);
-  tRot.rotateX(1.*CLHEP::degree);
-//  tRot.rotateZ(-90*CLHEP::degree);
-  HepGeom::Transform3D CylTrans(tRot,CylShift);
+//  GeoTrf::Vector3D CylShift(0.,-box_y+cyl_shift,cyl_z+box_z-3.*GeoModelKernelUnits::mm);
+  GeoTrf::Translation3D CylShift(0.,-box_y+cyl_shift,cyl_z+box_z-5.*GeoModelKernelUnits::mm);
+//  GeoTrf::Vector3D CylShift(0.,0.,cyl_z+box_z);
+  GeoTrf::RotateX3D tRot(1.*GeoModelKernelUnits::degree);
+//  tRot.rotateZ(-90*GeoModelKernelUnits::degree);
+  GeoTrf::Transform3D CylTrans = CylShift * tRot;
   const GeoShapeUnion &uSolid3 =  uSolid2.add((*Cone)<<CylTrans);
 
   GeoLogVol* Cnose = new GeoLogVol("LArGeoTB::LeakageDet::ColdNose", &uSolid3 , Alu);
   GeoPhysVol *PhysCnose = new GeoPhysVol(Cnose);
 //  cnose->SetVisAttributes(G4VisAttributes::Invisible);
-  CLHEP::HepRotation CRotation;
-//  CRotation.rotateZ(-bepo_pz);
-  /*
-  CRotation.rotateX(bepo_ty);
-  CRotation.rotateZ(bepo_tx);
-  CRotation.rotateX(bepo_Beta);
-  */
-  CRotation.rotateX(M_PI);
-  CRotation.rotateZ(-3*M_PI/4.);
-//  CLHEP::Hep3Vector tShift(NoseXshift,0.,FCALzStart-EMECzStart+NoseZshift);
-  CLHEP::Hep3Vector tShift(NoseXshift,NoseYshift,FCALzStart-EMECzStart+NoseZshift);
-//  CLHEP::Hep3Vector tShift(0.,NoseYshift,NoseZshift);
-  HepGeom::Transform3D CTrans(CRotation,tShift);
+  GeoTrf::Transform3D CRotation = GeoTrf::RotateZ3D(-3*M_PI/4.) * GeoTrf::RotateX3D(M_PI);
+//  GeoTrf::Vector3D tShift(NoseXshift,0.,FCALzStart-EMECzStart+NoseZshift);
+  GeoTrf::Translation3D tShift(NoseXshift,NoseYshift,FCALzStart-EMECzStart+NoseZshift);
+//  GeoTrf::Vector3D tShift(0.,NoseYshift,NoseZshift);
+  GeoTrf::Transform3D CTrans = tShift * CRotation;
   m_ModulesPhys->add( new GeoTransform(trans) ) ;
   m_ModulesPhys->add(new GeoTransform(CTrans));
   m_ModulesPhys->add(PhysCnose);
 //  assemblyMother->AddPlacedVolume( cnose, CTrans );
   /*
   G4VPhysicalVolume* nosePhysical = new
-        G4PVPlacement(HepGeom::Transform3D(CRotation,tShift),
+        G4PVPlacement(GeoTrf::Transform3D(CRotation,tShift),
                       cnose, cnose->GetName(),logMother, false, 0);                
   */ 
 
   // Do an imprint of assembly:
   
   /*
-  CLHEP::HepRotation rota;
+  GeoModelKernelUnits::HepRotation rota;
   rota.rotateZ(-bepo_pz);
   rota.rotateX(bepo_ty);
   rota.rotateX(bepo_Beta);
   
-  HepGeom::Transform3D trans(rota, CLHEP::Hep3Vector(0.,bepo_y_e,bepo_z_e));
+  GeoTrf::Transform3D trans(rota, GeoTrf::Vector3D(0.,bepo_y_e,bepo_z_e));
   
   assemblyMother->MakeImprint( logMother, trans );  
   */
@@ -604,7 +582,7 @@ LArGeo::ModulesConstructionH62004::construct(const StoredMaterialManager* materi
   
   //density     = universe_mean_density;    //from PhysicalConstants.h
   //pressure    = 3.e-18*pascal;
-  //temperature = 2.73*CLHEP::kelvin;
+  //temperature = 2.73*kelvin;
   const GeoMaterial* Vacuum = materialManager->getMaterial("std::Vacuum");
   if (!Vacuum) throw std::runtime_error("Error in ModulesConstruction, std::Vacuum is not found.");
 
@@ -669,14 +647,14 @@ LArGeo::ModulesConstructionH62004::construct(const StoredMaterialManager* materi
 //------------------ now construct shape and logical volume ---------------
   GeoLogVol *volume_log;
   if(myID == 6 || myID == 9 || myID == 17) {
-     GeoTubs *tub = new GeoTubs(s_dX[myID-1],s_dY[myID-1],s_dZ[myID-1],-43.*CLHEP::degree,86.*CLHEP::degree);
+     GeoTubs *tub = new GeoTubs(s_dX[myID-1],s_dY[myID-1],s_dZ[myID-1],-43.*GeoModelKernelUnits::degree,86.*GeoModelKernelUnits::degree);
      volume_log = new GeoLogVol(name,tub,Vacuum); 
   } else if(myID == 3) {
-     GeoTubs *tub = new GeoTubs(s_dX[myID-1],s_dY[myID-1],s_dZ[myID-1],-32.*CLHEP::degree,64.*CLHEP::degree);
+     GeoTubs *tub = new GeoTubs(s_dX[myID-1],s_dY[myID-1],s_dZ[myID-1],-32.*GeoModelKernelUnits::degree,64.*GeoModelKernelUnits::degree);
      volume_log = new GeoLogVol(name,tub,Vacuum); 
 #if 0 // impossible case...
   } else if(myID == 19) {
-    GeoTrd *trd = new GeoTrd(s_dX[myID-1]-16.*CLHEP::cm,s_dX[myID-1],s_dY[myID-1],s_dY[myID-1],s_dZ[myID-1]);
+    GeoTrd *trd = new GeoTrd(s_dX[myID-1]-16.*GeoModelKernelUnits::cm,s_dX[myID-1],s_dY[myID-1],s_dY[myID-1],s_dZ[myID-1]);
     volume_log = new GeoLogVol(name,trd,Vacuum); 
 #endif
   } else {
@@ -686,9 +664,9 @@ LArGeo::ModulesConstructionH62004::construct(const StoredMaterialManager* materi
   return volume_log;
 }
 
-HepGeom::Transform3D LArGeo::ModulesConstructionH62004::position(int side, int dir, int calo)
+GeoTrf::Transform3D LArGeo::ModulesConstructionH62004::position(int side, int dir, int calo)
 {
-  HepGeom::Transform3D leak_position;
+  GeoTrf::Transform3D leak_position(GeoTrf::Transform3D::Identity());
 
   int myID = GetID(side,dir,calo);
   if(myID == 0) {
@@ -697,12 +675,9 @@ HepGeom::Transform3D LArGeo::ModulesConstructionH62004::position(int side, int d
   assert(myID>0 && myID <= NUM_LEAK);
   if(myID > NUM_LEAK) return leak_position;
 
-  CLHEP::HepRotation rotM;
-  rotM.rotateZ(s_angleZ[myID-1]);
-  rotM.rotateY(s_angleY[myID-1]);
-  rotM.rotateX(s_angleX[myID-1]);
+  GeoTrf::Transform3D rotM = GeoTrf::RotateX3D(s_angleX[myID-1]) * GeoTrf::RotateY3D(s_angleY[myID-1]) * GeoTrf::RotateZ3D(s_angleZ[myID-1]);
 
-  leak_position = HepGeom::Transform3D(rotM,CLHEP::Hep3Vector(s_shiftX[myID-1],s_shiftY[myID-1],s_shiftZ[myID-1]));
+  leak_position = GeoTrf::Transform3D(GeoTrf::Translation3D(s_shiftX[myID-1],s_shiftY[myID-1],s_shiftZ[myID-1]) * rotM);
 
   return leak_position;
 }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.h b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.h
index 3ad9a74d9d96137dfc3d628205a59b0ead63a4ef..f03c007e68b0a9827c7683318ee5111b91e9e6a6 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/ModulesConstructionH62004.h
@@ -30,7 +30,7 @@ namespace LArGeo {
            int GetID(int side, int dir, int calo);
            GeoLogVol* construct(const StoredMaterialManager* materialManager,
                                 int side, int dir, int calo);
-           HepGeom::Transform3D position(int side, int dir, int calo);
+           GeoTrf::Transform3D position(int side, int dir, int calo);
                         //  side = 0 - left, 1 - right
                         //  dir  = 0 - side, 1 - up, 2 - back
                         //  calo = 0 - EMEC, 1 - HEC1,  2 - HEC2, 3 - FCAL1
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MovableTableConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MovableTableConstructionH62004.cxx
index a2b11328faf095956aef8aace7d8e0be24e059fc..814b178f239e633b33a1d8815a04c7a81c1c0e3f 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MovableTableConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/MovableTableConstructionH62004.cxx
@@ -24,17 +24,15 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -124,25 +122,25 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   //
   // Define dimension of Movable part & position of Front part
   //
-  double bttb_x = 15.0*CLHEP::cm;
-  double bttb_y = 15.0*CLHEP::cm;
-  double bttb_z = 120.0*CLHEP::cm;
-  //double bttb_pos = 833.5*CLHEP::cm;
+  double bttb_x = 15.0*GeoModelKernelUnits::cm;
+  double bttb_y = 15.0*GeoModelKernelUnits::cm;
+  double bttb_z = 120.0*GeoModelKernelUnits::cm;
+  //double bttb_pos = 833.5*GeoModelKernelUnits::cm;
   //
   // Define S scintilator dimension and positions
   //
-  double btas_x = 7.5*CLHEP::cm;
-  double btas_y = 7.5*CLHEP::cm;
-  double btas_z = 1.0*CLHEP::cm;
-  double bb2_x = 3.0*CLHEP::cm;
-  double btas_pos[3] = {100.*CLHEP::cm, 219.5*CLHEP::cm, 232.0*CLHEP::cm};
-  double bh_x = 30.0*CLHEP::cm;
-  double bh_d = 6.0*CLHEP::cm;
-  double bh_shift = 12.0*CLHEP::cm;
-  double bb_shift = 2.5*CLHEP::cm;
-
-  double mwpc_pos[4] =  {44.5*CLHEP::cm, 12.5*CLHEP::cm, 87.0*CLHEP::cm, 185.3*CLHEP::cm};
-  double bpc_pos[2] =  {140.5*CLHEP::cm, 130.5*CLHEP::cm};
+  double btas_x = 7.5*GeoModelKernelUnits::cm;
+  double btas_y = 7.5*GeoModelKernelUnits::cm;
+  double btas_z = 1.0*GeoModelKernelUnits::cm;
+  double bb2_x = 3.0*GeoModelKernelUnits::cm;
+  double btas_pos[3] = {100.*GeoModelKernelUnits::cm, 219.5*GeoModelKernelUnits::cm, 232.0*GeoModelKernelUnits::cm};
+  double bh_x = 30.0*GeoModelKernelUnits::cm;
+  double bh_d = 6.0*GeoModelKernelUnits::cm;
+  double bh_shift = 12.0*GeoModelKernelUnits::cm;
+  double bb_shift = 2.5*GeoModelKernelUnits::cm;
+
+  double mwpc_pos[4] =  {44.5*GeoModelKernelUnits::cm, 12.5*GeoModelKernelUnits::cm, 87.0*GeoModelKernelUnits::cm, 185.3*GeoModelKernelUnits::cm};
+  double bpc_pos[2] =  {140.5*GeoModelKernelUnits::cm, 130.5*GeoModelKernelUnits::cm};
 
   GeoBox* H62004MovableShape = new GeoBox( bttb_x, bttb_y, bttb_z );   
   const GeoLogVol* H62004FrontBeamLogical = new GeoLogVol( H62004MovableName, H62004MovableShape, Air );
@@ -154,8 +152,8 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   //   In the old stand-alone code, all three were round with a radius of 5cm 
   //   and 7.5mm thickness.
   //   Logbooks in the control-room say that their xyz sizes are:
-  //   B1   : 30 x 30 x 10 CLHEP::mm
-  //   W1,2 : 150 x 150 x 10 CLHEP::mm
+  //   B1   : 30 x 30 x 10 GeoModelKernelUnits::mm
+  //   W1,2 : 150 x 150 x 10 GeoModelKernelUnits::mm
   // They are certainly not round, so stick with the logbook values 
   // The beam sees the instrumentation in the following order:
   // W1, W2, B1, MWPC5
@@ -164,7 +162,7 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
 
   // Create scintillator S1(num=4),S2,S3(num= 6,7)
   
-  GeoBox* ScintShapeS1 = new GeoBox((btas_x-1.*CLHEP::cm)/2., (btas_y-1.*CLHEP::cm)/2., btas_z/2.);  
+  GeoBox* ScintShapeS1 = new GeoBox((btas_x-1.*GeoModelKernelUnits::cm)/2., (btas_y-1.*GeoModelKernelUnits::cm)/2., btas_z/2.);  
   GeoBox* ScintShapeS23 = new GeoBox(btas_x/2., btas_y/2., btas_z/2.);  
   std::string ScintName = H62004MovableName + "::Scintillator";
   GeoLogVol* S1ScintLogical = new GeoLogVol( ScintName, ScintShapeS1, Scint );
@@ -173,11 +171,11 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   GeoPhysVol* S2ScintPhysical = new GeoPhysVol( S23ScintLogical );    
 
   m_H62004MovableTablePhysical->add( new GeoIdentifierTag(4) );
-  m_H62004MovableTablePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, btas_pos[0]-bttb_z ) ) ) ;     
+  m_H62004MovableTablePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, btas_pos[0]-bttb_z ) ) ) ;     
   m_H62004MovableTablePhysical->add(S1ScintPhysical);
   for ( unsigned int i = 1; i <3; ++i ) {
     m_H62004MovableTablePhysical->add( new GeoIdentifierTag(i+5) );
-    m_H62004MovableTablePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, btas_pos[i]-bttb_z ) ) ) ; 
+    m_H62004MovableTablePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, btas_pos[i]-bttb_z ) ) ) ; 
     m_H62004MovableTablePhysical->add( S2ScintPhysical ); 
   }
   // Create scintilators H (copy num 5) and B2 (copy num 8)
@@ -187,14 +185,14 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   GeoLogVol* logHSc = new GeoLogVol( ScintName, &shapeHSc, Scint);
   GeoPhysVol* physHSc = new GeoPhysVol(logHSc);
   m_H62004MovableTablePhysical->add( new GeoIdentifierTag(5) );
-  m_H62004MovableTablePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (btas_pos[0]-bttb_z) + bh_shift) )  ) ;     
+  m_H62004MovableTablePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (btas_pos[0]-bttb_z) + bh_shift) )  ) ;     
   m_H62004MovableTablePhysical->add(physHSc);
 
-  GeoBox* boxB = new GeoBox(bb2_x/2., bb2_x/2., (btas_z+2.5*CLHEP::cm)/2.);
+  GeoBox* boxB = new GeoBox(bb2_x/2., bb2_x/2., (btas_z+2.5*GeoModelKernelUnits::cm)/2.);
   GeoLogVol* logBSc = new GeoLogVol( ScintName, boxB, Scint);
   GeoPhysVol* physBSc = new GeoPhysVol(logBSc);
   m_H62004MovableTablePhysical->add( new GeoIdentifierTag(8) );
-  m_H62004MovableTablePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (btas_pos[2]-bttb_z) + bb_shift )  ) ) ;     
+  m_H62004MovableTablePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (btas_pos[2]-bttb_z) + bb_shift )  ) ) ;     
   m_H62004MovableTablePhysical->add(physBSc);
   
   //----- Done with Scintillators
@@ -202,12 +200,12 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   //------ Now create MWPC N2 & N3 & N4 
   log << MSG::INFO << " Create MWPC's " << endmsg;
   
-  MWPCConstruction MWPC(1.*CLHEP::mm);
+  MWPCConstruction MWPC(1.*GeoModelKernelUnits::mm);
   GeoVPhysVol* MwpcPhysical = MWPC.GetEnvelope();
 
   for(int i = 1; i < 4; ++i){
      m_H62004MovableTablePhysical->add( new GeoIdentifierTag(i+1) );
-     m_H62004MovableTablePhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, mwpc_pos[i]-bttb_z ) ) );
+     m_H62004MovableTablePhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, mwpc_pos[i]-bttb_z ) ) );
      m_H62004MovableTablePhysical->add( MwpcPhysical );
   }
   //----- Done with the MWPC
@@ -219,7 +217,7 @@ GeoVPhysVol* LArGeo::MovableTableConstructionH62004::GetEnvelope()
   GeoVPhysVol* BPCPhysical = BPC.GetEnvelope();
   for(int i=1; i<3; ++i) {
      m_H62004MovableTablePhysical->add( new GeoIdentifierTag(7-i) );
-     m_H62004MovableTablePhysical->add( new GeoTransform(HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, bpc_pos[i-1]-bttb_z) ) );
+     m_H62004MovableTablePhysical->add( new GeoTransform(GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, bpc_pos[i-1]-bttb_z) ) );
      m_H62004MovableTablePhysical->add(BPCPhysical);
   }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/WarmTCConstructionH62004.cxx b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/WarmTCConstructionH62004.cxx
index d3f0dd4f2b4d38468dadb820cb6b5e79fb67c2d1..272988e0d7ae52dea0e08a6130d062639e0dfabb 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/WarmTCConstructionH62004.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH62004Algs/src/WarmTCConstructionH62004.cxx
@@ -28,10 +28,12 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
-#include "CLHEP/GenericFunctions/Sin.hh"
-#include "CLHEP/GenericFunctions/Cos.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoGenericFunctions/Sin.h"
+#include "GeoGenericFunctions/Cos.h"
 #include "StoreGate/StoreGateSvc.h"
 
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -78,30 +80,30 @@ GeoVFullPhysVol* LArGeo::WarmTCConstructionH62004::GetEnvelope()
 // SHOULD GO INTO DB !!!!
 
 // Muon scintilators are the first one:
-double Muon_x = 20.0*CLHEP::cm;
-double Muon_y = 120.0*CLHEP::cm;
-double Muon_z = 1.0*CLHEP::cm;
+double Muon_x = 20.0*GeoModelKernelUnits::cm;
+double Muon_y = 120.0*GeoModelKernelUnits::cm;
+double Muon_z = 1.0*GeoModelKernelUnits::cm;
 // The extra space to accumulate muon sci. into mother:
-double Muon_dist = 120.0*CLHEP::mm;
+double Muon_dist = 120.0*GeoModelKernelUnits::mm;
 //
 // WTC dimensions
-double WTC_len = 591.5*CLHEP::mm;
-double WTC_high = 1250.0*CLHEP::mm;
-double WTC_sci_z = 12.7*CLHEP::mm;
-double WTC_sci_x = 190.0*CLHEP::mm;
-double WTC_sci_y = 1160.0*CLHEP::mm;
+double WTC_len = 591.5*GeoModelKernelUnits::mm;
+double WTC_high = 1250.0*GeoModelKernelUnits::mm;
+double WTC_sci_z = 12.7*GeoModelKernelUnits::mm;
+double WTC_sci_x = 190.0*GeoModelKernelUnits::mm;
+double WTC_sci_y = 1160.0*GeoModelKernelUnits::mm;
 
 //  Define dimension WTC mother
 //
 double x_m = WTC_high / 2;
 double y_m = WTC_high / 2;
-double z_m = (86.0*CLHEP::mm + WTC_len + WTC_sci_z + Muon_dist + Muon_z) / 2;
+double z_m = (86.0*GeoModelKernelUnits::mm + WTC_len + WTC_sci_z + Muon_dist + Muon_z) / 2;
 //
 // Define dimension of Fe absorber
 //
 double Fe_x = WTC_high / 2;
 double Fe_y = WTC_high / 2;
-double Fe_z = (99.0 / 2)*CLHEP::mm;
+double Fe_z = (99.0 / 2)*GeoModelKernelUnits::mm;
 //
 // Define dimension of X scintilator
 //
@@ -122,24 +124,24 @@ double z_s = WTC_sci_z / 2;
 //
 double z_x[3], z_y[3], z_Fe[4];
  z_x[0]  = -z_m + Muon_dist + Muon_z + z_s;                   // X scin. Layer 1
- z_y[0]  = z_x[0] + 54*CLHEP::mm;               // Y scin. Layer 2
- z_Fe[0] = z_x[0] + 86.0*CLHEP::mm + Fe_z;      // 1st Fe abs.
- z_y[1]  = z_Fe[0] + 125.5*CLHEP::mm - Fe_z;    // Y scin. Layer 3
- z_Fe[1] = z_Fe[0] + 2 * Fe_z + 53.0*CLHEP::mm; // 2nd Fe abs.
- z_x[1]  = z_Fe[0] - Fe_z + 278.5*CLHEP::mm;    // X scin. Layer 4
- z_Fe[2] = z_Fe[1] + 2 *Fe_z + 52.5*CLHEP::mm;  // 3rd Fe abs.
- z_y[2]  = z_Fe[0] - Fe_z + 433.0*CLHEP::mm;    // Y scin. Layer 5
- z_Fe[3] = z_Fe[2] + 2 *Fe_z + 61.5*CLHEP::mm;  // 4rd Fe abs.
+ z_y[0]  = z_x[0] + 54*GeoModelKernelUnits::mm;               // Y scin. Layer 2
+ z_Fe[0] = z_x[0] + 86.0*GeoModelKernelUnits::mm + Fe_z;      // 1st Fe abs.
+ z_y[1]  = z_Fe[0] + 125.5*GeoModelKernelUnits::mm - Fe_z;    // Y scin. Layer 3
+ z_Fe[1] = z_Fe[0] + 2 * Fe_z + 53.0*GeoModelKernelUnits::mm; // 2nd Fe abs.
+ z_x[1]  = z_Fe[0] - Fe_z + 278.5*GeoModelKernelUnits::mm;    // X scin. Layer 4
+ z_Fe[2] = z_Fe[1] + 2 *Fe_z + 52.5*GeoModelKernelUnits::mm;  // 3rd Fe abs.
+ z_y[2]  = z_Fe[0] - Fe_z + 433.0*GeoModelKernelUnits::mm;    // Y scin. Layer 5
+ z_Fe[3] = z_Fe[2] + 2 *Fe_z + 61.5*GeoModelKernelUnits::mm;  // 4rd Fe abs.
  z_x[2]  = z_Fe[0] - Fe_z + WTC_len;     // X scin. Layer 6
 //
 // Tilding of the TC
-//double WTC_tild = -1.1*CLHEP::deg;   // 24 CLHEP::mm tild on 1250 CLHEP::mm length
-//double WTC_tild = 0.*CLHEP::deg;   // 24 CLHEP::mm tild on 1250 CLHEP::mm length
+//double WTC_tild = -1.1*GeoModelKernelUnits::deg;   // 24 GeoModelKernelUnits::mm tild on 1250 GeoModelKernelUnits::mm length
+//double WTC_tild = 0.*GeoModelKernelUnits::deg;   // 24 GeoModelKernelUnits::mm tild on 1250 GeoModelKernelUnits::mm length
 // Define position in test beam line....
 //
-//double WTC_x = 0.0*CLHEP::mm;
-//double WTC_y = 0.0*CLHEP::mm;
-//double WTC_z = 460.0*CLHEP::mm - 120.*CLHEP::mm - 10.*CLHEP::mm;
+//double WTC_x = 0.0*GeoModelKernelUnits::mm;
+//double WTC_y = 0.0*GeoModelKernelUnits::mm;
+//double WTC_z = 460.0*GeoModelKernelUnits::mm - 120.*GeoModelKernelUnits::mm - 10.*GeoModelKernelUnits::mm;
 
 // Some elements
  
@@ -150,7 +152,7 @@ double z_x[3], z_y[3], z_Fe[4];
     const GeoMaterial* Iron = materialManager->getMaterial("std::Iron");    
     const GeoMaterial *Air = materialManager->getMaterial("std::Air");
  // Scintillator
-    double density = 1.032*CLHEP::g/CLHEP::cm3;
+    double density = 1.032*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
     GeoMaterial* Scintillator=new GeoMaterial("Scintillator",density);
     Scintillator->add(elC,0.9147);
     Scintillator->add(elH,0.0853);
@@ -171,8 +173,6 @@ double z_x[3], z_y[3], z_Fe[4];
  status=m_detectorStore->record(sPhysVol,tag);
  if(!status.isSuccess()) throw std::runtime_error ((std::string("Cannot store ")+tag).c_str());
 
- CLHEP::HepRotation NoRot;
-
 //
 // Create the muon scintilator and position
  double a,n;
@@ -181,16 +181,16 @@ double z_x[3], z_y[3], z_Fe[4];
  GeoLogVol *mu_log = new GeoLogVol(muname, mu_box, Scintillator);
  GeoPhysVol *mu_phys = new GeoPhysVol(mu_log);
  for(int i=1; i<=3; ++i) {
-    a = -5.*i*CLHEP::mm + (2*i-1)*Muon_x/2;
+    a = -5.*i*GeoModelKernelUnits::mm + (2*i-1)*Muon_x/2;
     n = pow(-1,i) * Muon_z/2 - z_m + Muon_z;
-    CLHEP::Hep3Vector posShift(a,0.0*CLHEP::mm,n);
+    GeoTrf::Vector3D posShift(a,0.0*GeoModelKernelUnits::mm,n);
     m_WarmTCPhys->add(new GeoSerialIdentifier(6-i));
-    m_WarmTCPhys->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(a,0.0*CLHEP::mm,n))));
+    m_WarmTCPhys->add(new GeoTransform(GeoTrf::Translate3D(a,0.0*GeoModelKernelUnits::mm,n)));
     m_WarmTCPhys->add(mu_phys); 
     
     n = pow(-1,i+1) * Muon_z/2 - z_m + Muon_z;
     m_WarmTCPhys->add(new GeoSerialIdentifier(5+i));
-    m_WarmTCPhys->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(-a,0.0*CLHEP::mm,n))));
+    m_WarmTCPhys->add(new GeoTransform(GeoTrf::Translate3D(-a,0.0*GeoModelKernelUnits::mm,n)));
     m_WarmTCPhys->add(mu_phys); 
     
  }
@@ -205,7 +205,7 @@ double z_x[3], z_y[3], z_Fe[4];
  
  for(int i=0; i<4; i++) {
    m_WarmTCPhys->add(new GeoSerialIdentifier(i+1)); 
-   m_WarmTCPhys->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.0*CLHEP::mm,0.0*CLHEP::mm,z_Fe[i]))));
+   m_WarmTCPhys->add(new GeoTransform(GeoTrf::Translate3D(0.0*GeoModelKernelUnits::mm,0.0*GeoModelKernelUnits::mm,z_Fe[i])));
    m_WarmTCPhys->add(Fe_phys);
  }
  
@@ -219,7 +219,7 @@ double z_x[3], z_y[3], z_Fe[4];
  
  for(int i=0; i<3; i++) {
     m_WarmTCPhys->add(new GeoSerialIdentifier(i+1));
-    m_WarmTCPhys->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.0*CLHEP::mm,0.0*CLHEP::mm,z_x[i]))));
+    m_WarmTCPhys->add(new GeoTransform(GeoTrf::Translate3D(0.0*GeoModelKernelUnits::mm,0.0*GeoModelKernelUnits::mm,z_x[i])));
     m_WarmTCPhys->add(X_phys);
  }
  
@@ -233,7 +233,7 @@ double z_x[3], z_y[3], z_Fe[4];
  
  for(int i=0; i<3; i++) {
     m_WarmTCPhys->add(new GeoSerialIdentifier(i+1));
-    m_WarmTCPhys->add(new GeoTransform(HepGeom::Transform3D(NoRot,CLHEP::Hep3Vector(0.0*CLHEP::mm,0.0*CLHEP::mm,z_y[i]))));
+    m_WarmTCPhys->add(new GeoTransform(GeoTrf::Translate3D(0.0*GeoModelKernelUnits::mm,0.0*GeoModelKernelUnits::mm,z_y[i])));
     m_WarmTCPhys->add(Y_phys);
   }
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/CMakeLists.txt
index f2148b5f9b75db6b62ac7e2c828fbd0180af0a8d..c6e66c68ce0f892d7270d154c5a1d895195fe654 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/CMakeLists.txt
@@ -6,9 +6,7 @@
 atlas_subdir( LArGeoH6Cryostats )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Control/CxxUtils
                           Control/StoreGate
                           Database/RDBAccessSvc
@@ -17,15 +15,15 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoH6Cryostats
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoH6Cryostats
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} CxxUtils GaudiKernel )
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} CxxUtils GaudiKernel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/LArGeoH6Cryostats/MWPCConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/LArGeoH6Cryostats/MWPCConstruction.h
index 291ce05334ec53ec816901787cc41a7cb1a4d172..14f6658bd474a6ef03fe321c266b3702e984994e 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/LArGeoH6Cryostats/MWPCConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/LArGeoH6Cryostats/MWPCConstruction.h
@@ -11,6 +11,7 @@
 
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/Units.h"
 #include <memory>
 
 class IRDBAccessSvc;
@@ -23,7 +24,7 @@ namespace LArGeo {
     {
     public:
     
-    MWPCConstruction(double Step = 1.*CLHEP::mm);
+    MWPCConstruction(double Step = 1.*GeoModelKernelUnits::mm);
 
     virtual ~MWPCConstruction();
     
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/BPCConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/BPCConstruction.cxx
index c9a794ea4a186eb6feb535bcccf6864878a02e51..043e1e5d2248c1912bb8a0a646e84738d10d8bb4 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/BPCConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/BPCConstruction.cxx
@@ -24,17 +24,14 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -107,7 +104,7 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   std::string name;
   double density;
   const GeoElement* W=materialManager->getElement("Wolfram");
-  GeoMaterial* Tungsten = new GeoMaterial(name="Tungsten", density=19.3*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Tungsten = new GeoMaterial(name="Tungsten", density=19.3*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Tungsten->add(W,1.);
   Tungsten->lock();
   
@@ -117,21 +114,21 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   const GeoElement*  O=materialManager->getElement("Oxygen");
   const GeoElement*  H=materialManager->getElement("Hydrogen");
   const GeoElement*  Al=materialManager->getElement("Aluminium");
-  GeoMaterial* CO2 =  new GeoMaterial(name="CO2", density=1.84E-03*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* CO2 =  new GeoMaterial(name="CO2", density=1.84E-03*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   CO2->add(C,0.273);
   CO2->add(O,0.727);
   CO2->lock();
-  GeoMaterial* ArCO2_1 = new GeoMaterial(name="ArCO2_1", density=(0.8*1.782e-03 + 0.2*1.84E-03)*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* ArCO2_1 = new GeoMaterial(name="ArCO2_1", density=(0.8*1.782e-03 + 0.2*1.84E-03)*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   ArCO2_1->add(Ar,0.8);
   ArCO2_1->add(CO2,0.2);
   ArCO2_1->lock();
-  GeoMaterial* ArCO2_2 = new GeoMaterial(name="ArCO2_2", density=(0.9*1.782e-03 + 0.1*1.84E-03)*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* ArCO2_2 = new GeoMaterial(name="ArCO2_2", density=(0.9*1.782e-03 + 0.1*1.84E-03)*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   ArCO2_2->add(Ar,0.9);
   ArCO2_2->add(CO2,0.1);
   ArCO2_2->lock();
   // AlMylar   AlC5H4O2 ??????    
-  density = 1.39*CLHEP::g/CLHEP::cm3;
-  GeoMaterial* AlMylar=new GeoMaterial(name="AlMylar",density=1.39*CLHEP::g/CLHEP::cm3);
+  density = 1.39*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
+  GeoMaterial* AlMylar=new GeoMaterial(name="AlMylar",density=1.39*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   AlMylar->add(C,0.487980);
   AlMylar->add(O,0.260014);
   AlMylar->add(H,0.032761);
@@ -162,36 +159,36 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   //////////////////////////////////////////////////////////////////
   // Define geometry
   //////////////////////////////////////////////////////////////////
-  double bpc_x = 15.0*CLHEP::cm;
-  double bpc_y = 15.0*CLHEP::cm;
-  double bpc_z = (8.684/2)*CLHEP::cm;
-  double bpc_send = (1.14/2)*CLHEP::cm;
-  double bpc_sen = (1.06)*CLHEP::cm;
-  double bpc_div = 5.06*CLHEP::mm;
-  //double bpc_space = 2.6*CLHEP::mm;
-  double bpc_ml = 0.0010*CLHEP::cm;
-  double bpc_alml = 0.0012*CLHEP::cm;
-  double bpc_frame = 12.1*CLHEP::mm;
-  double bpc_alframe = 8.*CLHEP::mm;
-  double bpc_step = 0.6*CLHEP::cm;
-  double bpc_cstep = 0.3*CLHEP::cm;
-  double bpc_wd = 0.0020*CLHEP::cm;
-  double bpc_cwd = 0.0100*CLHEP::cm;
+  double bpc_x = 15.0*GeoModelKernelUnits::cm;
+  double bpc_y = 15.0*GeoModelKernelUnits::cm;
+  double bpc_z = (8.684/2)*GeoModelKernelUnits::cm;
+  double bpc_send = (1.14/2)*GeoModelKernelUnits::cm;
+  double bpc_sen = (1.06)*GeoModelKernelUnits::cm;
+  double bpc_div = 5.06*GeoModelKernelUnits::mm;
+  //double bpc_space = 2.6*GeoModelKernelUnits::mm;
+  double bpc_ml = 0.0010*GeoModelKernelUnits::cm;
+  double bpc_alml = 0.0012*GeoModelKernelUnits::cm;
+  double bpc_frame = 12.1*GeoModelKernelUnits::mm;
+  double bpc_alframe = 8.*GeoModelKernelUnits::mm;
+  double bpc_step = 0.6*GeoModelKernelUnits::cm;
+  double bpc_cstep = 0.3*GeoModelKernelUnits::cm;
+  double bpc_wd = 0.0020*GeoModelKernelUnits::cm;
+  double bpc_cwd = 0.0100*GeoModelKernelUnits::cm;
   
-  double bpc_old_x = 12.0*CLHEP::cm;
-  double bpc_old_y = 12.0*CLHEP::cm;
-  double bpc_old_z = (5.100/2)*CLHEP::cm;
-  double bpc_old_div = 7.6*CLHEP::mm;
-  double bpc_old_alml = 0.0020*CLHEP::cm;
-  double bpc_old_ml = 0.0050*CLHEP::cm;
-  double bpc_old_frame = 10.*CLHEP::mm;
-  double bpc_old_alframe = 2.*CLHEP::mm;
-  double bpc_old_alframe1 = 12.*CLHEP::mm;
-  double bpc_old_send = (1.7/2)*CLHEP::cm;
-  double bpc_old_sen = 0.5*CLHEP::cm;
-  double bpc_old_space = 1.*CLHEP::mm;
-  double bpc_old_step = 0.6*CLHEP::cm;
-  double bpc_old_cstep = 0.3*CLHEP::cm;
+  double bpc_old_x = 12.0*GeoModelKernelUnits::cm;
+  double bpc_old_y = 12.0*GeoModelKernelUnits::cm;
+  double bpc_old_z = (5.100/2)*GeoModelKernelUnits::cm;
+  double bpc_old_div = 7.6*GeoModelKernelUnits::mm;
+  double bpc_old_alml = 0.0020*GeoModelKernelUnits::cm;
+  double bpc_old_ml = 0.0050*GeoModelKernelUnits::cm;
+  double bpc_old_frame = 10.*GeoModelKernelUnits::mm;
+  double bpc_old_alframe = 2.*GeoModelKernelUnits::mm;
+  double bpc_old_alframe1 = 12.*GeoModelKernelUnits::mm;
+  double bpc_old_send = (1.7/2)*GeoModelKernelUnits::cm;
+  double bpc_old_sen = 0.5*GeoModelKernelUnits::cm;
+  double bpc_old_space = 1.*GeoModelKernelUnits::mm;
+  double bpc_old_step = 0.6*GeoModelKernelUnits::cm;
+  double bpc_old_cstep = 0.3*GeoModelKernelUnits::cm;
  
 
   //  Here we creat the envelope for the Moveable FrontBeam Instrumentation.  This code is repeated
@@ -230,7 +227,7 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
        if(i == 1) mylar_pos = bpc_alml - bpc_z;
     }
     m_BPCPhysical->add( new GeoIdentifierTag( i ) );
-    m_BPCPhysical->add( new GeoTransform( HepGeom::Translate3D(0., 0., mylar_pos) ) );
+    m_BPCPhysical->add( new GeoTransform( GeoTrf::Translate3D(0., 0., mylar_pos) ) );
     m_BPCPhysical->add( phys_bpc_almylar );
   }
 
@@ -252,7 +249,7 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
        if(i == 1) mylar_pos = bpc_alml - bpc_z + bpc_frame + bpc_alframe;
     }
     m_BPCPhysical->add( new GeoIdentifierTag( i ) );
-    m_BPCPhysical->add( new GeoTransform( HepGeom::Translate3D(0., 0., mylar_pos) ) );
+    m_BPCPhysical->add( new GeoTransform( GeoTrf::Translate3D(0., 0., mylar_pos) ) );
     m_BPCPhysical->add( phys_bpc_mylar );
   }
  
@@ -266,8 +263,8 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   else          log_bpc_xplane = new GeoLogVol(BPCName + "::bpc_xplane", shape_bpc_xplane, ArCO2_1);
   GeoPhysVol* phys_bpc_xplane = new GeoPhysVol(log_bpc_xplane);
   m_BPCPhysical->add( new GeoIdentifierTag( 0 ) );
-  if(m_oldType) m_BPCPhysical->add( new GeoTransform( HepGeom::Translate3D(0., 0., bpc_old_sen) ) );
-  else          m_BPCPhysical->add( new GeoTransform( HepGeom::Translate3D(0., 0., -bpc_sen-bpc_send) ) );
+  if(m_oldType) m_BPCPhysical->add( new GeoTransform( GeoTrf::Translate3D(0., 0., bpc_old_sen) ) );
+  else          m_BPCPhysical->add( new GeoTransform( GeoTrf::Translate3D(0., 0., -bpc_sen-bpc_send) ) );
   m_BPCPhysical->add(phys_bpc_xplane); 
   
   // division of X plane 
@@ -281,9 +278,9 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   if(m_oldType) log_bpc_xdiv = new GeoLogVol(BPCName + "::bpco_div", shape_bpc_xdiv, ArCO2_2);
   else          log_bpc_xdiv = new GeoLogVol(BPCName + "::bpc_xdiv", shape_bpc_xdiv, ArCO2_1);
   GeoPhysVol* phys_bpc_xdiv = new GeoPhysVol(log_bpc_xdiv);
-  Genfun::Variable Index;
-  GeoXF::TRANSFUNCTION TXO = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_step/2.);
-  GeoXF::TRANSFUNCTION TX = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_step/2.);
+  GeoGenfun::Variable Index;
+  GeoXF::TRANSFUNCTION TXO = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_step/2.);
+  GeoXF::TRANSFUNCTION TX = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_step/2.);
   phys_bpc_xplane->add( new GeoSerialIdentifier(0) );
   if(m_oldType) phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_xdiv,  &TXO, Ndiv ) );
   else          phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_xdiv,  &TX, Ndiv ) );
@@ -296,32 +293,32 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
      GeoLogVol* log_bpc_yplane = new GeoLogVol(BPCName + "::bpc_yplane",shape_bpc_yplane, ArCO2_1);
      phys_bpc_yplane = new GeoPhysVol(log_bpc_yplane);
      m_BPCPhysical->add( new GeoIdentifierTag( 0 ) );
-     m_BPCPhysical->add( new GeoTransform( HepGeom::Translate3D(0., 0., bpc_sen+bpc_send) ) );
+     m_BPCPhysical->add( new GeoTransform( GeoTrf::Translate3D(0., 0., bpc_sen+bpc_send) ) );
      m_BPCPhysical->add( phys_bpc_yplane );
 
      // division of Y plane 
      GeoBox* shape_bpc_ydiv = new GeoBox(bpc_x, bpc_step/2.,bpc_div);
      GeoLogVol* log_bpc_ydiv = new GeoLogVol(BPCName + "::bpc_ydiv", shape_bpc_ydiv, ArCO2_1);
      phys_bpc_ydiv = new GeoPhysVol(log_bpc_ydiv);
-     GeoXF::TRANSFUNCTION TY = GeoXF::Pow(HepGeom::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_step/2);
+     GeoXF::TRANSFUNCTION TY = GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_step/2);
      phys_bpc_yplane->add( new GeoSerialIdentifier(0) );
      phys_bpc_yplane->add( new GeoSerialTransformer(phys_bpc_ydiv, &TY, Ndiv ) );
   }
   
   // wires in each division
   GeoTubs* shape_bpc_wire;
-  if(m_oldType) shape_bpc_wire = new GeoTubs(0., bpc_wd, bpc_old_x, 0.*CLHEP::deg, 360.*CLHEP::deg);
-  else          shape_bpc_wire = new GeoTubs(0., bpc_wd, bpc_x, 0.*CLHEP::deg, 360.*CLHEP::deg);
+  if(m_oldType) shape_bpc_wire = new GeoTubs(0., bpc_wd, bpc_old_x, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg);
+  else          shape_bpc_wire = new GeoTubs(0., bpc_wd, bpc_x, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg);
   GeoLogVol* log_bpc_wire;
   if(m_oldType) log_bpc_wire = new GeoLogVol(BPCName + "::bpco_wire", shape_bpc_wire, Tungsten);
   else          log_bpc_wire = new GeoLogVol(BPCName + "::bpc_wire", shape_bpc_wire, Tungsten);
   GeoPhysVol* phys_bpc_wire = new GeoPhysVol(log_bpc_wire);
   phys_bpc_xdiv->add( new GeoIdentifierTag( 1 ) );
-  phys_bpc_xdiv->add( new GeoTransform( HepGeom::RotateX3D( 90.*CLHEP::deg ) ) );
+  phys_bpc_xdiv->add( new GeoTransform( GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg ) ) );
   phys_bpc_xdiv->add(phys_bpc_wire);
   if(!m_oldType) {
      phys_bpc_ydiv->add( new GeoIdentifierTag( 1 ) );
-     phys_bpc_ydiv->add( new GeoTransform( HepGeom::RotateY3D( 90.*CLHEP::deg ) ) );
+     phys_bpc_ydiv->add( new GeoTransform( GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg ) ) );
      phys_bpc_ydiv->add(phys_bpc_wire);
   }
 
@@ -329,20 +326,20 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   if(m_oldType) Ndiv = int(2.0*bpc_old_x/bpc_cstep);
   else          Ndiv = int(2.0*bpc_x/bpc_cstep);
   GeoTubs* shape_bpc_cwire;
-  if(m_oldType) shape_bpc_cwire = new GeoTubs(0., bpc_cwd, bpc_old_x, 0.*CLHEP::deg, 360.*CLHEP::deg);
-  else          shape_bpc_cwire = new GeoTubs( 0., bpc_cwd, bpc_x, 0.*CLHEP::deg, 360.*CLHEP::deg);
+  if(m_oldType) shape_bpc_cwire = new GeoTubs(0., bpc_cwd, bpc_old_x, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg);
+  else          shape_bpc_cwire = new GeoTubs( 0., bpc_cwd, bpc_x, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg);
   GeoLogVol* log_bpc_cwire;
   if(m_oldType) log_bpc_cwire = new GeoLogVol(BPCName + "::bpco_cwire",shape_bpc_cwire, Tungsten);
   else          log_bpc_cwire = new GeoLogVol(BPCName + "::bpc_cwire",shape_bpc_cwire, Tungsten);
   GeoPhysVol* phys_bpc_cwire = new GeoPhysVol(log_bpc_cwire);
-//  GeoXF::TRANSFUNCTION TXXMO = HepGeom::RotateX3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * HepGeom::TranslateZ3D(-bpc_old_send-bpc_cwd+bpc_old_space);
-//  GeoXF::TRANSFUNCTION TXXPO = HepGeom::RotateX3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * HepGeom::TranslateZ3D(bpc_old_send-bpc_old_space+bpc_cwd);
-  GeoXF::TRANSFUNCTION TXXMO = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * HepGeom::TranslateZ3D(-bpc_old_send-2.*bpc_cwd+bpc_old_space) * HepGeom::RotateX3D( 90.*CLHEP::deg );
-  GeoXF::TRANSFUNCTION TXXPO = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * HepGeom::TranslateZ3D(bpc_old_send-bpc_old_space+2.*bpc_cwd) * HepGeom::RotateX3D( 90.*CLHEP::deg );
-//  GeoXF::TRANSFUNCTION TXXM = HepGeom::RotateX3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(-bpc_div-bpc_cwd);
-//  GeoXF::TRANSFUNCTION TXXP = HepGeom::RotateX3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(bpc_div+bpc_cwd);
-  GeoXF::TRANSFUNCTION TXXM = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(-bpc_div-bpc_cwd) * HepGeom::RotateX3D( 90.*CLHEP::deg );
-  GeoXF::TRANSFUNCTION TXXP = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(bpc_div+bpc_cwd) * HepGeom::RotateX3D( 90.*CLHEP::deg );
+//  GeoXF::TRANSFUNCTION TXXMO = GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_old_send-bpc_cwd+bpc_old_space);
+//  GeoXF::TRANSFUNCTION TXXPO = GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * GeoTrf::TranslateZ3D(bpc_old_send-bpc_old_space+bpc_cwd);
+  GeoXF::TRANSFUNCTION TXXMO = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_old_send-2.*bpc_cwd+bpc_old_space) * GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg );
+  GeoXF::TRANSFUNCTION TXXPO = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_old_x+(2*Index+1)*bpc_old_cstep/2.) * GeoTrf::TranslateZ3D(bpc_old_send-bpc_old_space+2.*bpc_cwd) * GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg );
+//  GeoXF::TRANSFUNCTION TXXM = GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_div-bpc_cwd);
+//  GeoXF::TRANSFUNCTION TXXP = GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(bpc_div+bpc_cwd);
+  GeoXF::TRANSFUNCTION TXXM = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_div-bpc_cwd) * GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg );
+  GeoXF::TRANSFUNCTION TXXP = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -bpc_x+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(bpc_div+bpc_cwd) * GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg );
   phys_bpc_xplane->add( new GeoSerialIdentifier(0) );
   if(m_oldType) phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_cwire, &TXXMO, Ndiv) );
   else          phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_cwire, &TXXM, Ndiv) );
@@ -350,10 +347,10 @@ GeoVPhysVol* LArGeo::BPCConstruction::GetEnvelope()
   if(m_oldType) phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_cwire, &TXXPO, Ndiv) );
   else          phys_bpc_xplane->add( new GeoSerialTransformer(phys_bpc_cwire, &TXXP, Ndiv) );
   if(!m_oldType) {
-//     GeoXF::TRANSFUNCTION TYYM = HepGeom::RotateY3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(-bpc_div-bpc_cwd);
-//     GeoXF::TRANSFUNCTION TYYP = HepGeom::RotateY3D( 90.*CLHEP::deg ) * GeoXF::Pow(HepGeom::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(bpc_div+bpc_cwd);
-     GeoXF::TRANSFUNCTION TYYM = GeoXF::Pow(HepGeom::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(-bpc_div-bpc_cwd) * HepGeom::RotateY3D( 90.*CLHEP::deg );
-     GeoXF::TRANSFUNCTION TYYP = GeoXF::Pow(HepGeom::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * HepGeom::TranslateZ3D(bpc_div+bpc_cwd) * HepGeom::RotateY3D( 90.*CLHEP::deg );
+//     GeoXF::TRANSFUNCTION TYYM = GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_div-bpc_cwd);
+//     GeoXF::TRANSFUNCTION TYYP = GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg ) * GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(bpc_div+bpc_cwd);
+     GeoXF::TRANSFUNCTION TYYM = GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(-bpc_div-bpc_cwd) * GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg );
+     GeoXF::TRANSFUNCTION TYYP = GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -bpc_y+(2*Index+1)*bpc_cstep/2.) * GeoTrf::TranslateZ3D(bpc_div+bpc_cwd) * GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg );
      phys_bpc_yplane->add( new GeoSerialIdentifier(0) );
      phys_bpc_yplane->add( new GeoSerialTransformer(phys_bpc_cwire, &TYYM, Ndiv) );
      phys_bpc_yplane->add( new GeoSerialIdentifier(Ndiv) );
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/H6CryostatConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/H6CryostatConstruction.cxx
index 6ea8ebae3090e182c88b0ea0ff76f5830bfb283f..a43ee7e780c310de00e1f81595babe8ceccf6285 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/H6CryostatConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/H6CryostatConstruction.cxx
@@ -22,18 +22,14 @@
 #include "GeoModelKernel/GeoTransform.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 // For the database:
 
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -104,23 +100,23 @@ GeoVFullPhysVol* LArGeo::H6CryostatConstruction::GetEnvelope()
   // First attempt at creating the H6 cryostat: 
   // (values taken from  HECCommonDetectorParamDef)
   //
-  // A cylinder of half-height:   zcryo = 2000.0 *CLHEP::mm
-  // outer radius of warm-wall:   rwarm = 1295.5 *CLHEP::mm
-  // outer radius of vacuum:      rvac  = 1293.0 *CLHEP::mm
-  // outer radius of cold wall:   rcold = 1258.0 *CLHEP::mm
-  // outer radius of LAr:         rlar  = 1255.0 *CLHEP::mm
+  // A cylinder of half-height:   zcryo = 2000.0 *GeoModelKernelUnits::mm
+  // outer radius of warm-wall:   rwarm = 1295.5 *GeoModelKernelUnits::mm
+  // outer radius of vacuum:      rvac  = 1293.0 *GeoModelKernelUnits::mm
+  // outer radius of cold wall:   rcold = 1258.0 *GeoModelKernelUnits::mm
+  // outer radius of LAr:         rlar  = 1255.0 *GeoModelKernelUnits::mm
 
   // needs to go into database: ---  4databa
-  double  zcryo = 2000.0 *CLHEP::mm;
-  double  rwarm = 1295.5 *CLHEP::mm;
-  double  rvac  = 1293.0 *CLHEP::mm;
-  double  rcold = 1258.0 *CLHEP::mm;
-  double  rlar  = 1255.0 *CLHEP::mm;
+  double  zcryo = 2000.0 *GeoModelKernelUnits::mm;
+  double  rwarm = 1295.5 *GeoModelKernelUnits::mm;
+  double  rvac  = 1293.0 *GeoModelKernelUnits::mm;
+  double  rcold = 1258.0 *GeoModelKernelUnits::mm;
+  double  rlar  = 1255.0 *GeoModelKernelUnits::mm;
 
   std::string cryoMotherName = "LAr::H6::Cryostat::MotherVolume";
 
   // mother volume; cylinder of radius rwarm = outside of the cryostat warm wall 
-  GeoTube* cryoMotherShape = new GeoTube(0.0 , rwarm+10.0, zcryo+10.0*CLHEP::mm);  //  mother is a little bigger than warm wall   
+  GeoTube* cryoMotherShape = new GeoTube(0.0 , rwarm+10.0, zcryo+10.0*GeoModelKernelUnits::mm);  //  mother is a little bigger than warm wall   
 
   const GeoLogVol* cryoMotherLogical = new GeoLogVol(cryoMotherName, cryoMotherShape, Air);
   m_cryoMotherPhysical = new GeoFullPhysVol(cryoMotherLogical);
@@ -146,13 +142,13 @@ GeoVFullPhysVol* LArGeo::H6CryostatConstruction::GetEnvelope()
   m_cryoMotherPhysical->add(cryoWarmWallPhys);
 
   // "Vacuum" gap (filled with air...)
-  GeoTube* cryoVacuumGapShape = new GeoTube(0. , rvac, zcryo-2.0*CLHEP::mm);   // an arbitrary 2mm shorter to avoid confilct  
+  GeoTube* cryoVacuumGapShape = new GeoTube(0. , rvac, zcryo-2.0*GeoModelKernelUnits::mm);   // an arbitrary 2mm shorter to avoid confilct  
   const GeoLogVol* cryoVacuumGapLog = new GeoLogVol(cryoVacuumGapName, cryoVacuumGapShape, Air);
   GeoPhysVol*  cryoVacuumGapPhys = new GeoPhysVol(cryoVacuumGapLog);
   cryoWarmWallPhys->add(cryoVacuumGapPhys);
 
   // Cold Wall
-  GeoTube* cryoColdWallShape = new GeoTube(0. , rcold, zcryo-4.0*CLHEP::mm);  // an arbitrary 4mm shorter to avoid confilct   
+  GeoTube* cryoColdWallShape = new GeoTube(0. , rcold, zcryo-4.0*GeoModelKernelUnits::mm);  // an arbitrary 4mm shorter to avoid confilct   
   const GeoLogVol* cryoColdWallLog = new GeoLogVol(cryoColdWallName, cryoColdWallShape, Iron);
   GeoPhysVol*  cryoColdWallPhys = new GeoPhysVol(cryoColdWallLog);
   cryoVacuumGapPhys->add(cryoColdWallPhys);
@@ -164,7 +160,7 @@ GeoVFullPhysVol* LArGeo::H6CryostatConstruction::GetEnvelope()
   // And the FCal the embedded in the LAr instead of the cryoMother!
 
   // Liquid Argon  
-  GeoTube* cryoLArShape = new GeoTube(0. , rlar, zcryo-6.0*CLHEP::mm);  // an arbitrary 2mm shorter to avoid confilct   
+  GeoTube* cryoLArShape = new GeoTube(0. , rlar, zcryo-6.0*GeoModelKernelUnits::mm);  // an arbitrary 2mm shorter to avoid confilct   
   const GeoLogVol* cryoLArLog = new GeoLogVol(cryoLArName, cryoLArShape, LAr);
   m_cryoMotherPhysical->add(new GeoNameTag(std::string("Cryostat LAr Physical")));    
   // m_cryoLArPhys is a class member so that we can place Detectors inside. 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/MWPCConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/MWPCConstruction.cxx
index a47752d86c05b1d4e362bd5abd9ba5a699812215..2506edd5257888fb23dd27ff40e7609d5b3a8a39 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/MWPCConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/MWPCConstruction.cxx
@@ -27,17 +27,13 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -110,7 +106,7 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   std::string name;
   double density;
   const GeoElement* W=materialManager->getElement("Wolfram");
-  GeoMaterial* Tungsten = new GeoMaterial(name="Tungsten", density=19.3*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Tungsten = new GeoMaterial(name="Tungsten", density=19.3*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Tungsten->add(W,1.);
   Tungsten->lock();
   
@@ -118,11 +114,11 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   const GeoElement* Ar=materialManager->getElement("Argon");
   const GeoElement*  C=materialManager->getElement("Carbon");
   const GeoElement*  H=materialManager->getElement("Hydrogen");
-  GeoMaterial* Isobutane = new GeoMaterial(name="Isobutane", density=2.67*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Isobutane = new GeoMaterial(name="Isobutane", density=2.67*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Isobutane->add(C,0.8266);
   Isobutane->add(H,0.1734);
   Isobutane->lock();
-  GeoMaterial* ArIso = new GeoMaterial(name="ArIso", density=0.0025*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* ArIso = new GeoMaterial(name="ArIso", density=0.0025*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   ArIso->add(Ar,0.61);
   ArIso->add(Isobutane,0.39);
   ArIso->lock();
@@ -173,8 +169,8 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   std::string MWPCName = baseName + "::MWPC";
   
   // This creates a square wire-chamber: 
-  const double MWPCDxy = 64.0*CLHEP::mm;
-  const double MWPCDz = 16.586*CLHEP::mm;  
+  const double MWPCDxy = 64.0*GeoModelKernelUnits::mm;
+  const double MWPCDz = 16.586*GeoModelKernelUnits::mm;  
 
 
   GeoBox* MWPCShape = new GeoBox(MWPCDxy, MWPCDxy, MWPCDz);  // A generic WWPC
@@ -184,7 +180,7 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   
 
   //..... Add Mylar to MWPC:
-  const double MylarDz = 0.015*CLHEP::mm; 
+  const double MylarDz = 0.015*GeoModelKernelUnits::mm; 
 
   GeoBox* MylarShape = new GeoBox(MWPCDxy, MWPCDxy, MylarDz);  // Mylar fits across the MWPC in x,y
 
@@ -197,7 +193,7 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
       GeoLogVol* MylarLogical = new GeoLogVol( MylarName, MylarShape, Mylar );   
       GeoPhysVol* MylarPhysical = new GeoPhysVol( MylarLogical );
       m_MWPCPhysical->add( new GeoIdentifierTag( side ) );
-      m_MWPCPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (MylarPos) ) ) );
+      m_MWPCPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (MylarPos) ) ) );
       m_MWPCPhysical->add( MylarPhysical );
     }
   // Done with the Mylar Foils 
@@ -205,10 +201,10 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
 
 
   //..... Add Al walls to MWPC5:
-  const double Aluz = 0.014*CLHEP::mm; 
+  const double Aluz = 0.014*GeoModelKernelUnits::mm; 
   const double AluDz = Aluz;
-  const double Alu_f = 7.*CLHEP::mm;   
-  const double Alu_s = 15.*CLHEP::mm;
+  const double Alu_f = 7.*GeoModelKernelUnits::mm;   
+  const double Alu_s = 15.*GeoModelKernelUnits::mm;
 
   GeoBox* AluShape = new GeoBox(MWPCDxy, MWPCDxy, AluDz);  // Al foil fits across the MWPC in x,y
   for ( int pos = 0; pos<4 ; pos++)
@@ -226,17 +222,17 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
       GeoLogVol* AluLogical = new GeoLogVol( AluName, AluShape, Aluminium );  
       GeoPhysVol* AluPhysical = new GeoPhysVol( AluLogical );
       m_MWPCPhysical->add( new GeoIdentifierTag( pos ) );
-      m_MWPCPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (AluPos) ) ) );
+      m_MWPCPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (AluPos) ) ) );
       m_MWPCPhysical->add( AluPhysical );
     }
   
 
 
   //..... Add a sensitive X and Y plane to MWPC5:
-  const double Senz = 4.0*CLHEP::mm; 
+  const double Senz = 4.0*GeoModelKernelUnits::mm; 
   const double SenDz = Senz;  // z-Thickness of sensitive volume
-  const double SenPos = 11.*CLHEP::mm;  // z-Position of sensitive volume  
-  //const double Step = 2.*CLHEP::mm;  // wire-step size for MWPC5
+  const double SenPos = 11.*GeoModelKernelUnits::mm;  // z-Position of sensitive volume  
+  //const double Step = 2.*GeoModelKernelUnits::mm;  // wire-step size for MWPC5
 
   GeoBox* SenPlaneShape = new GeoBox(MWPCDxy, MWPCDxy, SenDz);  // Sensitive Volume fits across the MWPC in x,y
 
@@ -247,20 +243,20 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   GeoPhysVol* XPlanePhysical = new GeoPhysVol( XPlaneLogical );
   GeoPhysVol* YPlanePhysical = new GeoPhysVol( YPlaneLogical );
   m_MWPCPhysical->add( new GeoIdentifierTag( 0 ) );
-  m_MWPCPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (-SenPos) ) ) );
+  m_MWPCPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (-SenPos) ) ) );
   m_MWPCPhysical->add( XPlanePhysical );  
   m_MWPCPhysical->add( new GeoIdentifierTag( 0 ) );
-  m_MWPCPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, (SenPos) ) ) );
+  m_MWPCPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, (SenPos) ) ) );
   m_MWPCPhysical->add( YPlanePhysical );
   
  
 //.... The X and Y planes have "divisions"
 //     These divisions will eventually be the sensitive volumes
 
-  Genfun::Variable Index;
+  GeoGenfun::Variable Index;
   int NDiv= int ( 2*MWPCDxy / m_wireStep ) ;
-  GeoXF::TRANSFUNCTION TX = GeoXF::Pow(HepGeom::TranslateX3D(1.0), -MWPCDxy + m_wireStep/2.  + m_wireStep*Index);
-  GeoXF::TRANSFUNCTION TY = GeoXF::Pow(HepGeom::TranslateY3D(1.0), -MWPCDxy + m_wireStep/2. + m_wireStep*Index);
+  GeoXF::TRANSFUNCTION TX = GeoXF::Pow(GeoTrf::TranslateX3D(1.0), -MWPCDxy + m_wireStep/2.  + m_wireStep*Index);
+  GeoXF::TRANSFUNCTION TY = GeoXF::Pow(GeoTrf::TranslateY3D(1.0), -MWPCDxy + m_wireStep/2. + m_wireStep*Index);
   GeoBox* XPlaneDiv = new GeoBox(m_wireStep/2., MWPCDxy , SenDz); 
   GeoBox* YPlaneDiv = new GeoBox(MWPCDxy , m_wireStep/2., SenDz);   
   std::string XDivName = MWPCName + "::XDiv";
@@ -280,15 +276,15 @@ GeoVPhysVol* LArGeo::MWPCConstruction::GetEnvelope()
   YPlanePhysical->add(sTSY);
 
 //.... Put wires into the X/Y "divisions"
-  const double WireDiam = 0.006*CLHEP::mm;
+  const double WireDiam = 0.006*GeoModelKernelUnits::mm;
   const double WireLen = MWPCDxy;
-  GeoTubs* WireShape = new GeoTubs(0.*CLHEP::cm, WireDiam/2., WireLen , 0.*CLHEP::deg,360.*CLHEP::deg); 
+  GeoTubs* WireShape = new GeoTubs(0.*GeoModelKernelUnits::cm, WireDiam/2., WireLen , 0.*GeoModelKernelUnits::deg,360.*GeoModelKernelUnits::deg); 
   std::string WireName = MWPCName + "::Wire";
   GeoLogVol* WireLogical = new GeoLogVol(WireName, WireShape, Tungsten);  
   GeoPhysVol* WirePhysical = new GeoPhysVol( WireLogical );
-  XDivPhysical->add(new GeoTransform(HepGeom::RotateX3D( 90.*CLHEP::deg )));
+  XDivPhysical->add(new GeoTransform(GeoTrf::RotateX3D( 90.*GeoModelKernelUnits::deg )));
   XDivPhysical->add(WirePhysical);
-  YDivPhysical->add(new GeoTransform(HepGeom::RotateY3D( 90.*CLHEP::deg )));
+  YDivPhysical->add(new GeoTransform(GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg )));
   YDivPhysical->add(WirePhysical);
 
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/WallsConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/WallsConstruction.cxx
index 196408deb70b547e8ccc32ed97f229ab781a5eb4..a8f7cb567bef4eece8e7fb8d4c7d05994f1656cf 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/WallsConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoH6Cryostats/src/WallsConstruction.cxx
@@ -22,18 +22,15 @@
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
 #include "GeoModelKernel/GeoSerialDenominator.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CxxUtils/make_unique.h"
-
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/GenericFunctions/Variable.hh"
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
+#include "CxxUtils/make_unique.h" 
+#include "GeoGenericFunctions/Variable.h"
 
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
@@ -120,7 +117,7 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
 
   // Is this ok for the Scintillator?
   // I don't really know for sure what kind of a scintillator we have.
-  // Lots of Scintillators are PMMA (Plexiglas), which has a composition of C5 H8 O2 and density 1.18 CLHEP::g/CLHEP::cm3
+  // Lots of Scintillators are PMMA (Plexiglas), which has a composition of C5 H8 O2 and density 1.18 GeoModelKernelUnits::g/GeoModelKernelUnits::cm3
   // The Tile uses a composition of C H (density 1.032)    
   // The old Walls testbeam code uses a composition of C9 H10 (density 1.032)
   // ... because it's easiest at the moment and not all that different from the fractional
@@ -160,9 +157,9 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
   std::string baseName = "LAr::TBH6";
   std::string WallsName = baseName + "::Walls";
 
-  const double WallsX   = 1500.*CLHEP::mm;
-  const double WallsY   = 2000.*CLHEP::mm;
-  const double WallsZ   = 560.5*CLHEP::mm;
+  const double WallsX   = 1500.*GeoModelKernelUnits::mm;
+  const double WallsY   = 2000.*GeoModelKernelUnits::mm;
+  const double WallsZ   = 560.5*GeoModelKernelUnits::mm;
 
 
   GeoBox* WallsShape = new GeoBox( WallsX, WallsY, WallsZ );   
@@ -179,13 +176,13 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
 
   (*m_msg) << "Create Iron Wall " << endmsg;
   
-  const double IronX =  1499.*CLHEP::mm;
-  const double IronY =  1999.*CLHEP::mm;
-  const double IronZ =  200.0*CLHEP::mm;
-  const double IronHoleX =   51.5*CLHEP::mm;
-  const double IronHoleY =  1999.*CLHEP::mm;
-  const double IronHoleZ =   200.*CLHEP::mm;
-  const double IronPosZ  =   270.*CLHEP::mm;
+  const double IronX =  1499.*GeoModelKernelUnits::mm;
+  const double IronY =  1999.*GeoModelKernelUnits::mm;
+  const double IronZ =  200.0*GeoModelKernelUnits::mm;
+  const double IronHoleX =   51.5*GeoModelKernelUnits::mm;
+  const double IronHoleY =  1999.*GeoModelKernelUnits::mm;
+  const double IronHoleZ =   200.*GeoModelKernelUnits::mm;
+  const double IronPosZ  =   270.*GeoModelKernelUnits::mm;
 
   // The wall itself:
   GeoBox* IronWallShape = new GeoBox(IronX, IronY, IronZ);  
@@ -201,7 +198,7 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
   IronWallPhysical->add(IronHolePhysical);
 
   // Add the iron wall to the Wall mother:
-  m_WallsPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::mm, 0.*CLHEP::mm, (WallsZ-IronPosZ) ) ) ) ; 
+  m_WallsPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm, (WallsZ-IronPosZ) ) ) ) ; 
   m_WallsPhysical->add( new GeoNameTag(IronWallName) );
   m_WallsPhysical->add( IronWallPhysical );
   
@@ -213,13 +210,13 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
 
   (*m_msg) << "Create Lead Wall " << endmsg;
   
-  const double LeadX =  1499.*CLHEP::mm;
-  const double LeadY =  1999.*CLHEP::mm;
-  const double LeadZ =     6.*CLHEP::mm;
-  const double LeadHoleX =  23.5*CLHEP::mm;
-  const double LeadHoleY = 1999.*CLHEP::mm; 
-  const double LeadHoleZ =    6.*CLHEP::mm;
-  const double LeadPosZ  = 1045.*CLHEP::mm;
+  const double LeadX =  1499.*GeoModelKernelUnits::mm;
+  const double LeadY =  1999.*GeoModelKernelUnits::mm;
+  const double LeadZ =     6.*GeoModelKernelUnits::mm;
+  const double LeadHoleX =  23.5*GeoModelKernelUnits::mm;
+  const double LeadHoleY = 1999.*GeoModelKernelUnits::mm; 
+  const double LeadHoleZ =    6.*GeoModelKernelUnits::mm;
+  const double LeadPosZ  = 1045.*GeoModelKernelUnits::mm;
 
   // The wall itself:
   GeoBox* LeadWallShape = new GeoBox(LeadX, LeadY, LeadZ);  
@@ -235,7 +232,7 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
   LeadWallPhysical->add(LeadHolePhysical);
 
   // Add the lead wall to the Wall mother:
-  m_WallsPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::mm, 0.*CLHEP::mm, (WallsZ-LeadPosZ) ) ) ) ; 
+  m_WallsPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm, (WallsZ-LeadPosZ) ) ) ) ; 
   m_WallsPhysical->add( new GeoNameTag(LeadWallName) );
   m_WallsPhysical->add( LeadWallPhysical );
   
@@ -246,13 +243,13 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
 
   (*m_msg) << "Create Scint Wall " << endmsg;
   
-  const double ScintX =  1499.*CLHEP::mm;
-  const double ScintY =  1999.*CLHEP::mm;
-  const double ScintZ =    6.5*CLHEP::mm;
-  const double ScintHoleX =  92.5*CLHEP::mm;
-  const double ScintHoleY = 1999.*CLHEP::mm; 
-  const double ScintHoleZ =   6.5*CLHEP::mm;
-  const double ScintPosZ  =  625.*CLHEP::mm;
+  const double ScintX =  1499.*GeoModelKernelUnits::mm;
+  const double ScintY =  1999.*GeoModelKernelUnits::mm;
+  const double ScintZ =    6.5*GeoModelKernelUnits::mm;
+  const double ScintHoleX =  92.5*GeoModelKernelUnits::mm;
+  const double ScintHoleY = 1999.*GeoModelKernelUnits::mm; 
+  const double ScintHoleZ =   6.5*GeoModelKernelUnits::mm;
+  const double ScintPosZ  =  625.*GeoModelKernelUnits::mm;
 
   // The wall itself:
   GeoBox* ScintWallShape = new GeoBox(ScintX, ScintY, ScintZ);  
@@ -268,7 +265,7 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
   ScintWallPhysical->add(ScintHolePhysical);
 
   // Add the scintillator wall to the Wall mother:
-  m_WallsPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::mm, 0.*CLHEP::mm, (WallsZ-ScintPosZ) ) ) ) ; 
+  m_WallsPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm, (WallsZ-ScintPosZ) ) ) ) ; 
   m_WallsPhysical->add( new GeoNameTag(ScintWallName) );
   m_WallsPhysical->add( ScintWallPhysical );
   
@@ -280,10 +277,10 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
 
   //(*m_msg) << "Create Iron Plate " << endmsg;
   
-  const double IronPlateX =   50.*CLHEP::mm;
-  const double IronPlateY =  150.*CLHEP::mm;
-  const double IronPlateZ =    4.*CLHEP::mm;
-  const double IronPlatePosZ  =  493.*CLHEP::mm;
+  const double IronPlateX =   50.*GeoModelKernelUnits::mm;
+  const double IronPlateY =  150.*GeoModelKernelUnits::mm;
+  const double IronPlateZ =    4.*GeoModelKernelUnits::mm;
+  const double IronPlatePosZ  =  493.*GeoModelKernelUnits::mm;
   const int nPlate = 0 ;
   const int PlatePlace = 1 ; // There were two locations used for these plates - unclear which one when and exactly 
                              //            where they were....! For the moment, sort of copy the standalone code
@@ -312,7 +309,7 @@ GeoVPhysVol* LArGeo::WallsConstruction::GetEnvelope()
     // Add the iron plate to the Plate mother:
     for (int iz=0; iz<(nPlate); iz++) {
       m_WallsPhysical->add( new GeoIdentifierTag(iz) );
-      m_WallsPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::mm, 0.*CLHEP::mm, double(PlatePlace)*(v_PlateZ[iz]) ) ) ) ; 
+      m_WallsPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm, double(PlatePlace)*(v_PlateZ[iz]) ) ) ) ; 
       m_WallsPhysical->add( new GeoNameTag(IronPlateName) );
       m_WallsPhysical->add( IronPlatePhysical );
     }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoHec/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoHec/CMakeLists.txt
index 4579a38e6111f7291311cdbc93a4906e781f1632..a718835838a38ce4bf21637cc8ce3fd846dcfe85 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoHec/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoHec/CMakeLists.txt
@@ -11,21 +11,20 @@ atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           GaudiKernel )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoHec
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoHec
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    LINK_LIBRARIES StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel )
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HEC2WheelConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HEC2WheelConstruction.cxx
index aa539968940d9a1ca2295243934637b1a2a6f925..1f205323582be5bf2c1f8bfa4dc864aebaf3c72d 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HEC2WheelConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HEC2WheelConstruction.cxx
@@ -43,10 +43,9 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoXF.h"
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/Vector/Rotation.h" 
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -67,11 +66,11 @@
 #include <iostream>
 
 
-using CLHEP::cm;
-using CLHEP::mm;
-using CLHEP::deg;
-using HepGeom::Transform3D;
-using HepGeom::Translate3D;
+using GeoModelKernelUnits::cm;
+using GeoModelKernelUnits::mm;
+using GeoModelKernelUnits::deg;
+using GeoTrf::Transform3D;
+using GeoTrf::Translate3D;
 
 
 //Constructor
diff --git a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECClampConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECClampConstruction.cxx
index cb45fec5977a8be153e2efc37b50f418f0738fcd..200c46eb62db9b2c7d58e229bfb6ca624ac58b55 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECClampConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECClampConstruction.cxx
@@ -31,10 +31,9 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoXF.h"
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/Vector/Rotation.h" 
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -52,12 +51,12 @@
 #include <cmath>
 #include <iostream>
 
-using CLHEP::cm;
-using CLHEP::mm;
-using CLHEP::deg;
-using HepGeom::RotateZ3D;
-using HepGeom::Translate3D;
-using HepGeom::TranslateZ3D;
+using GeoModelKernelUnits::cm;
+using GeoModelKernelUnits::mm;
+using GeoModelKernelUnits::deg;
+using GeoTrf::RotateZ3D;
+using GeoTrf::Translate3D;
+using GeoTrf::TranslateZ3D;
 
 
 //Constructor
@@ -383,11 +382,11 @@ void LArGeo::HECClampConstruction::AddClamps(GeoFullPhysVol* physiHECWheel)
   physiHECWheel->add(xt);
 
   GeoSerialIdentifier  *sIC = new GeoSerialIdentifier(0);
-  Genfun::Variable    IndexC;
+  GeoGenfun::Variable    IndexC;
 
   if (m_posZSide)
     {
-      Genfun::GENFUNCTION ModuleRotationAngleC = -m_modulePhistart+m_moduleDeltaPhi + m_moduleDeltaPhi*IndexC;
+      GeoGenfun::GENFUNCTION ModuleRotationAngleC = -m_modulePhistart+m_moduleDeltaPhi + m_moduleDeltaPhi*IndexC;
       GeoXF::TRANSFUNCTION tC   = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngleC);
       GeoSerialTransformer *sTC = new GeoSerialTransformer (clampingBar,&tC,((m_moduleNumber/2)-1));
       physiHECWheel->add(sIC);
@@ -396,7 +395,7 @@ void LArGeo::HECClampConstruction::AddClamps(GeoFullPhysVol* physiHECWheel)
     }
   else
     {
-      Genfun::GENFUNCTION ModuleRotationAngleC = -m_modulePhistart-m_moduleDeltaPhi+180*deg -  m_moduleDeltaPhi*IndexC;
+      GeoGenfun::GENFUNCTION ModuleRotationAngleC = -m_modulePhistart-m_moduleDeltaPhi+180*deg -  m_moduleDeltaPhi*IndexC;
       GeoXF::TRANSFUNCTION tC   = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngleC);
       GeoSerialTransformer *sTC = new GeoSerialTransformer (clampingBar,&tC,((m_moduleNumber/2)-1));
       physiHECWheel->add(sIC);
@@ -418,11 +417,11 @@ void LArGeo::HECClampConstruction::AddClamps(GeoFullPhysVol* physiHECWheel)
 
 
   physiHECWheel->add(xt);
-  Genfun::Variable    IndexC2;
+  GeoGenfun::Variable    IndexC2;
 
   if (m_posZSide)
     {
-      Genfun::GENFUNCTION ModuleRotationAngleC2 = -m_modulePhistart+m_moduleDeltaPhi-(180.*deg) + m_moduleDeltaPhi*IndexC2;
+      GeoGenfun::GENFUNCTION ModuleRotationAngleC2 = -m_modulePhistart+m_moduleDeltaPhi-(180.*deg) + m_moduleDeltaPhi*IndexC2;
       GeoXF::TRANSFUNCTION tC2   = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngleC2);
       GeoSerialTransformer *sTC2 = new GeoSerialTransformer (clampingBar,&tC2,((m_moduleNumber/2)-1));
       physiHECWheel->add(sTC2);
@@ -430,7 +429,7 @@ void LArGeo::HECClampConstruction::AddClamps(GeoFullPhysVol* physiHECWheel)
     }
   else
     {
-      Genfun::GENFUNCTION ModuleRotationAngleC2 = -m_modulePhistart-m_moduleDeltaPhi -  m_moduleDeltaPhi*IndexC2;
+      GeoGenfun::GENFUNCTION ModuleRotationAngleC2 = -m_modulePhistart-m_moduleDeltaPhi -  m_moduleDeltaPhi*IndexC2;
       GeoXF::TRANSFUNCTION tC2   = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngleC2);
       GeoSerialTransformer *sTC2 = new GeoSerialTransformer (clampingBar,&tC2,((m_moduleNumber/2)-1));
       physiHECWheel->add(sTC2);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECModuleConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECModuleConstruction.cxx
index d7164e3d4d09d0a4dcdfbee291d89217d7ce1ff9..00319637749ccb245baf6bb68d70fc9d50c1661f 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECModuleConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECModuleConstruction.cxx
@@ -22,10 +22,9 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoXF.h"
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/Vector/Rotation.h" 
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -42,12 +41,12 @@
 #include <iostream>
 
 
-using CLHEP::cm;
-using CLHEP::mm;
-using CLHEP::deg;
-using HepGeom::Translate3D;
-using HepGeom::TranslateY3D;
-using HepGeom::TranslateZ3D;
+using GeoModelKernelUnits::cm;
+using GeoModelKernelUnits::mm;
+using GeoModelKernelUnits::deg;
+using GeoTrf::Translate3D;
+using GeoTrf::TranslateY3D;
+using GeoTrf::TranslateZ3D;
 
 
 //Constructor
@@ -599,7 +598,7 @@ GeoFullPhysVol* LArGeo::HECModuleConstruction::GetEnvelope()
 	}
 
       // Serially install all slices and _regular_ absorbers into the depths       
-      Genfun::Variable Index;
+      GeoGenfun::Variable Index;
       GeoXF::TRANSFUNCTION TS = 
 	TranslateY3D(-larShift)*GeoXF::Pow(TranslateZ3D(1.0),slicePositionZ + (absThickness+gapSize)*Index);
       GeoXF::TRANSFUNCTION TA = 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECWheelConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECWheelConstruction.cxx
index 5f961a8126cacd57ef2fd36411b3a33bc78ef755..ee64b7541b09f78d37fff68e3193709abe5c8159 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECWheelConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoHec/src/HECWheelConstruction.cxx
@@ -32,10 +32,9 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoXF.h"
-#include "CLHEP/Geometry/Transform3D.h" 
-#include "CLHEP/Vector/Rotation.h" 
-#include "CLHEP/Units/PhysicalConstants.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -54,10 +53,10 @@
 #include <iostream>
 
 
-using CLHEP::cm;
-using CLHEP::mm;
-using CLHEP::deg;
-using HepGeom::RotateZ3D;
+using GeoModelKernelUnits::cm;
+using GeoModelKernelUnits::mm;
+using GeoModelKernelUnits::deg;
+using GeoTrf::RotateZ3D;
 
 
 //Constructor
@@ -251,17 +250,17 @@ GeoFullPhysVol* LArGeo::HECWheelConstruction::GetEnvelope()
     // Modules are numbered mirror-symmetric in pos/neg z-side!
     
     GeoSerialIdentifier  *sIF = new GeoSerialIdentifier(0);
-    Genfun::Variable    Index;
+    GeoGenfun::Variable    Index;
       
     if (m_posZSide) {
-      Genfun::GENFUNCTION ModuleRotationAngle = -modulePhistart + moduleDeltaPhi*Index;
+      GeoGenfun::GENFUNCTION ModuleRotationAngle = -modulePhistart + moduleDeltaPhi*Index;
       GeoXF::TRANSFUNCTION t    = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngle);
       GeoSerialTransformer *sTF = new GeoSerialTransformer (moduleEnvelope,&t,moduleNumber);
       physiHECWheel->add(sIF);
       physiHECWheel->add(sTF);
     } else {
       //For the neg z-side have to build everything in the opposite sense from pos-z wheel.
-      Genfun::GENFUNCTION ModuleRotationAngle1 = -modulePhistart+180*deg-moduleDeltaPhi - moduleDeltaPhi*Index;
+      GeoGenfun::GENFUNCTION ModuleRotationAngle1 = -modulePhistart+180*deg-moduleDeltaPhi - moduleDeltaPhi*Index;
       GeoXF::TRANSFUNCTION t1    = GeoXF::Pow(RotateZ3D(1.0),ModuleRotationAngle1);
       GeoSerialTransformer *sTF1 = new GeoSerialTransformer (moduleEnvelope,&t1,moduleNumber);
       physiHECWheel->add(sIF);
diff --git a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/CMakeLists.txt
index 13ef3387f2a6041734f1d26dee6d39b1d3f9154e..81a472885ca616e4db084826545d745e8c520c21 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/CMakeLists.txt
@@ -10,21 +10,20 @@ atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel )
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoMiniFcal
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoMiniFcal
-                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
+                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
                    LINK_LIBRARIES ${CLHEP_LIBRARIES} StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} GeoModelKernel GaudiKernel )
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} GaudiKernel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/LArGeoMiniFcal/MiniFcalConstruction.h b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/LArGeoMiniFcal/MiniFcalConstruction.h
index dededec39f83fe83f9ad0c96c71b4638a6272efc..4e9fcbaa9b0e972492536b80e36f567bdbd5d065 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/LArGeoMiniFcal/MiniFcalConstruction.h
+++ b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/LArGeoMiniFcal/MiniFcalConstruction.h
@@ -2,10 +2,10 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef __MiniFcalConstruction_H__
-#define __MiniFcalConstruction_H__
+#ifndef LARGEOMINIFCAL_MINIFCALCONSTRUCTION_H
+#define LARGEOMINIFCAL_MINIFCALCONSTRUCTION_H
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 class GeoFullPhysVol;
 
 namespace LArGeo {
@@ -18,16 +18,16 @@ namespace LArGeo {
     ~MiniFcalConstruction();
     
     GeoFullPhysVol*        GetEnvelope();
-    const HepGeom::Transform3D&  GetTopTransform();
+    const GeoTrf::Transform3D&  GetTopTransform();
 
   private:
 
-    GeoFullPhysVol* m_physiMiniFcal;
-    HepGeom::Transform3D  m_transform;
-    bool            m_posZSide;
+    GeoFullPhysVol*      m_physiMiniFcal;
+    GeoTrf::Transform3D  m_transform;
+    bool                 m_posZSide;
     
   };
 
 } // namespace LArGeo
 
-#endif // __MiniFcalConstruction_H__
+#endif 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/src/MiniFcalConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/src/MiniFcalConstruction.cxx
index 8b346065986e2162bfbc7445dfcf3851fdd78e2e..ce0332a805de7e7b62697d707e967f671c562605 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/src/MiniFcalConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoMiniFcal/src/MiniFcalConstruction.cxx
@@ -19,7 +19,8 @@
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"  
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -39,8 +40,8 @@
 typedef std::map<int,int> MapNumToIndex;
 
 LArGeo::MiniFcalConstruction::MiniFcalConstruction(bool posZSide)
-  : m_physiMiniFcal(0)
-  , m_transform()
+  : m_physiMiniFcal(nullptr)
+  , m_transform(GeoTrf::Transform3D::Identity())
   , m_posZSide(posZSide)
 {
 }
@@ -53,7 +54,7 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
 {
   // Get message service, GeoModelSvc and RDBAccessSvc
   ISvcLocator* svcLocator = Gaudi::svcLocator();
-  IMessageSvc* msgSvc(0);
+  IMessageSvc* msgSvc{nullptr};
 
   StatusCode sc = svcLocator->service("MessageSvc", msgSvc, true);
   if(sc!=StatusCode::SUCCESS) 
@@ -62,21 +63,21 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
   MsgStream log(msgSvc, "LArGeo::MiniFcalConstruction"); 
   log << MSG::DEBUG << "In MiniFcalConstruction GetEnvelope" << endmsg;
 
-  IRDBAccessSvc* pAccessSvc(0);
+  IRDBAccessSvc* pAccessSvc{nullptr};
   sc=svcLocator->service("RDBAccessSvc",pAccessSvc);
   if(sc != StatusCode::SUCCESS) {
     log << MSG::ERROR <<"Cannot locate RDBAccessSvc!!" << endmsg;
     return 0;
   }
 
-  IGeoModelSvc* geoModelSvc(0);
+  IGeoModelSvc* geoModelSvc{nullptr};
   sc = svcLocator->service ("GeoModelSvc",geoModelSvc);
   if (sc != StatusCode::SUCCESS) {
     log << MSG::ERROR <<"Cannot locate GeoModelSvc!!" << endmsg;
     return 0;
   }
   
-  StoreGateSvc* detStore(0);
+  StoreGateSvc* detStore{nullptr};
   sc = svcLocator->service("DetectorStore", detStore, false);
   if(sc!=StatusCode::SUCCESS) {
     log << MSG::ERROR <<"Error in MiniFcalConstruction, cannot access DetectorStore" << endmsg;
@@ -126,9 +127,9 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
   //_________ Define geometry __________________________
 
   //__Copper envelope
-  double halfLength = envParameters->getDouble("DZ")*CLHEP::mm; 
-  double Router     = envParameters->getDouble("RMAX")*CLHEP::mm; 
-  double Rinner     = envParameters->getDouble("RMIN")*CLHEP::mm;
+  double halfLength = envParameters->getDouble("DZ")*GeoModelKernelUnits::mm; 
+  double Router     = envParameters->getDouble("RMAX")*GeoModelKernelUnits::mm; 
+  double Rinner     = envParameters->getDouble("RMIN")*GeoModelKernelUnits::mm;
 
   // Buld a Cu block and place layers into that...
   GeoTubs *solidMiniFcal = new GeoTubs(Rinner, Router, halfLength, 0., 2.*M_PI); // Big outer radius
@@ -164,15 +165,15 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
     for(unsigned i=0; i<recRings->size(); ++i)
       ringIndexes[(*recRings)[i]->getInt("RINGNUM")] = i;
 
-    double L1         =  (*recCommon)[0]->getDouble("ABSORBERTHICKNESS")*CLHEP::mm; // Cu plates of fixed thickness
-    double LayerThick =  (*recCommon)[0]->getDouble("LAYERTHICKNESS")*CLHEP::mm;    // Layers between the Cu plates 
-    double WaferThick =  (*recCommon)[0]->getDouble("WAFERTHICKNESS")*CLHEP::mm;   // Diamond wafers - thickness
-    double WaferSize  =  (*recCommon)[0]->getDouble("WAFERSIZEX")*CLHEP::mm;    // Square Daimond wafers
+    double L1         =  (*recCommon)[0]->getDouble("ABSORBERTHICKNESS")*GeoModelKernelUnits::mm; // Cu plates of fixed thickness
+    double LayerThick =  (*recCommon)[0]->getDouble("LAYERTHICKNESS")*GeoModelKernelUnits::mm;    // Layers between the Cu plates 
+    double WaferThick =  (*recCommon)[0]->getDouble("WAFERTHICKNESS")*GeoModelKernelUnits::mm;   // Diamond wafers - thickness
+    double WaferSize  =  (*recCommon)[0]->getDouble("WAFERSIZEX")*GeoModelKernelUnits::mm;    // Square Daimond wafers
     int    NLayers    =  (*recCommon)[0]->getInt("NLAYERS");      // Have 11 gaps and 12 Cu plates
 
-    log << MSG::DEBUG << "=====> Build a Mini FCal of length  " << 2.*halfLength << " CLHEP::mm and " 
-	<< NLayers << " layers of  " << LayerThick << " CLHEP::mm thickness each; place them every  "
-	<< L1 << " CLHEP::mm " << endmsg;
+    log << MSG::DEBUG << "=====> Build a Mini FCal of length  " << 2.*halfLength << " GeoModelKernelUnits::mm and " 
+	<< NLayers << " layers of  " << LayerThick << " GeoModelKernelUnits::mm thickness each; place them every  "
+	<< L1 << " GeoModelKernelUnits::mm " << endmsg;
 
     // Make the Layers (all the same) - out of Feldspar (perhaps close to ceramics)
     std::string layerName = moduleName + "::Layer" ;
@@ -181,7 +182,7 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
     
     //-- Construct wafers and arrange them in rings inside the ceramic layers.
     std::string waferName = moduleName + "::Wafer" ;
-    GeoBox* solidWafer = new GeoBox( (WaferSize/2.)*CLHEP::mm, (WaferSize/2.)*CLHEP::mm, (WaferThick/2.)*CLHEP::mm);
+    GeoBox* solidWafer = new GeoBox( (WaferSize/2.)*GeoModelKernelUnits::mm, (WaferSize/2.)*GeoModelKernelUnits::mm, (WaferThick/2.)*GeoModelKernelUnits::mm);
     GeoLogVol* logiWafer = new GeoLogVol(waferName,solidWafer,Diamond);
     GeoPhysVol* physiWafer = new GeoPhysVol(logiWafer);
 
@@ -204,12 +205,12 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
       GeoPhysVol* physiLayer = new GeoPhysVol(logiLayer);
 
       // Construct layer contents
-      Genfun::Variable Index;
+      GeoGenfun::Variable Index;
       double rwafer(0.);
       int nwafers(0);
 
       double phishift = (*recLayers)[layerIndexes[j]]->getDouble("PHISHIFT");
-      double rshift = (*recLayers)[layerIndexes[j]]->getDouble("RSHIFT")*CLHEP::mm;
+      double rshift = (*recLayers)[layerIndexes[j]]->getDouble("RSHIFT")*GeoModelKernelUnits::mm;
 
       for (unsigned int i=0; i<recRings->size(); i++){  // loop over the number of wafer rings
 	if(ringIndexes.find(i)==ringIndexes.end()) {
@@ -228,18 +229,18 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
 	double wAngle = 2.*M_PI/nwafers;
       
 	// for the negative z-side have to add pi to get things right:
-	Genfun::GENFUNCTION RotationAngle = activate*(M_PI) + phisense * (phishift + wAngle/2. + wAngle*Index) ;
+	GeoGenfun::GENFUNCTION RotationAngle = activate*(M_PI) + phisense * (phishift + wAngle/2. + wAngle*Index) ;
 	GeoXF::TRANSFUNCTION t  = 
-	  GeoXF::Pow(HepGeom::RotateZ3D(1.0),RotationAngle) * HepGeom::TranslateX3D(rshift+rwafer+5.*CLHEP::mm) * HepGeom::TranslateZ3D(-LayerThick/2.+ WaferThick/2.) ;
+	  GeoXF::Pow(GeoTrf::RotateZ3D(1.0),RotationAngle) * GeoTrf::TranslateX3D(rshift+rwafer+5.*GeoModelKernelUnits::mm) * GeoTrf::TranslateZ3D(-LayerThick/2.+ WaferThick/2.) ;
 	GeoSerialTransformer *sTF = new GeoSerialTransformer (physiWafer,&t,nwafers);
 	physiLayer->add(sIF);
 	physiLayer->add(sTF);
       }
 
       log << MSG::DEBUG << "- Working on layer " << j << " now. Place it at " 
-	  << ( -halfLength + L1 + double(j)*( L1 + LayerThick) + LayerThick/2. ) << " CLHEP::mm " << endmsg;
+	  << ( -halfLength + L1 + double(j)*( L1 + LayerThick) + LayerThick/2. ) << " GeoModelKernelUnits::mm " << endmsg;
       m_physiMiniFcal->add(new GeoIdentifierTag(j));        
-      GeoTransform *xf = new GeoTransform(HepGeom::TranslateZ3D( -halfLength + L1 + double(j)*( L1 + LayerThick) + LayerThick/2. ));
+      GeoTransform *xf = new GeoTransform(GeoTrf::TranslateZ3D( -halfLength + L1 + double(j)*( L1 + LayerThick) + LayerThick/2. ));
       m_physiMiniFcal->add(xf);
       m_physiMiniFcal->add(physiLayer);
     }
@@ -247,14 +248,14 @@ GeoFullPhysVol* LArGeo::MiniFcalConstruction::GetEnvelope()
 
 
   //________ Construct top transform object _____________
-  m_transform = HepGeom::TranslateZ3D(envParameters->getDouble("ZPOS")*CLHEP::mm);
+  m_transform = GeoTrf::TranslateZ3D(envParameters->getDouble("ZPOS")*GeoModelKernelUnits::mm);
   // Layers should be fully equipeed now. Put them into MiniFcal
  
   return m_physiMiniFcal;
 
 }
 
-const HepGeom::Transform3D&  LArGeo::MiniFcalConstruction::GetTopTransform()
+const GeoTrf::Transform3D&  LArGeo::MiniFcalConstruction::GetTopTransform()
 {
   return m_transform;
 }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/CMakeLists.txt
index 5e5578b02c6f7d024aae129a7b118595cb7e488f..14045bc7846896ee8e0adabe005188b273dd2ab7 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/CMakeLists.txt
@@ -6,9 +6,7 @@
 atlas_subdir( LArGeoTBBarrel )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           DetectorDescription/GeoModel/GeoModelUtilities
@@ -16,14 +14,14 @@ atlas_depends_on_subdirs( PUBLIC
                           LArCalorimeter/LArGeoModel/LArGeoBarrel )
 
 # External dependencies:
-find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoTBBarrel
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoTBBarrel
-                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelUtilities GaudiKernel LArGeoBarrel )
+                   PRIVATE_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoModelUtilities GaudiKernel LArGeoBarrel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/src/TBBarrelCryostatConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/src/TBBarrelCryostatConstruction.cxx
index 5a169e4ee3256fd54378920f2693cc1e0e712d6e..38752f5b5b5cd7948a0869736bdd8c7ee92f4365 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/src/TBBarrelCryostatConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBBarrel/src/TBBarrelCryostatConstruction.cxx
@@ -20,6 +20,8 @@
 #include "GeoModelKernel/GeoPcon.h"  
 #include "GeoModelKernel/GeoTubs.h"  
 #include "GeoModelKernel/GeoTransform.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "StoreGate/StoreGateSvc.h"
@@ -28,10 +30,6 @@
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelUtilities/StoredAlignX.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
 
 #include <string>
 #include <cmath>
@@ -126,14 +124,14 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     throw std::runtime_error("Error in TBBarrelCryostatConstruction, oxygen not found.");
   }
 
-  GeoMaterial *Vacuum = new GeoMaterial("Vacuum",CLHEP::universe_mean_density );
+  GeoMaterial *Vacuum = new GeoMaterial("Vacuum",GeoModelKernelUnits::universe_mean_density );
   Vacuum->add(Hydrogen,1.);
   Vacuum->lock();
 
 // define material for FOAM (C5H8O2)
 // latest density value from P.Puzo (october 2003)
 //
-  double density = 0.058*CLHEP::g/CLHEP::cm3;
+  double density = 0.058*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3;
     GeoMaterial* Foam = new GeoMaterial("Foam", density);
     double fraction=8*1.01/(5*12.01+8*1.01+2.*16.0);
     Foam->add(Hydrogen,fraction);
@@ -166,7 +164,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
      std::cout << " Plane zp/ri/ro " << zp[i] << " " << ri[i] << " " << ro[i] << std::endl;
     }
 #endif
-    GeoPcon* Em_pcone = new GeoPcon(-25.*CLHEP::deg,50.*CLHEP::deg);
+    GeoPcon* Em_pcone = new GeoPcon(-25.*GeoModelKernelUnits::deg,50.*GeoModelKernelUnits::deg);
     for (int i=0; i < 3; i++) Em_pcone->addPlane(zp[i],ri[i],ro[i]);
 
     const GeoLogVol* cryoMotherLogical = 
@@ -177,20 +175,20 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 
 // Cryostat geometry
 
-    double  Cryo_Distz = 483.5*CLHEP::cm;   // total size in z
-    double  Cryo_z0 = 103.0*CLHEP::cm;       // eta=0 position wrt cryosta edge at z<0
+    double  Cryo_Distz = 483.5*GeoModelKernelUnits::cm;   // total size in z
+    double  Cryo_z0 = 103.0*GeoModelKernelUnits::cm;       // eta=0 position wrt cryosta edge at z<0
 
-    double  DeltaR_cold = 4.1*CLHEP::cm;    // thickness cold vessel before calo
-    double  DeltaRout_cold = 5.0*CLHEP::cm;    // thickness cold vessel after calo
+    double  DeltaR_cold = 4.1*GeoModelKernelUnits::cm;    // thickness cold vessel before calo
+    double  DeltaRout_cold = 5.0*GeoModelKernelUnits::cm;    // thickness cold vessel after calo
 
-    double  DeltaR_warm= 3.86*CLHEP::cm;    // thickness warm vessel before calo
-    double  DeltaRout_warm = 4.0*CLHEP::cm;    // thickness warm vessel after calo
+    double  DeltaR_warm= 3.86*GeoModelKernelUnits::cm;    // thickness warm vessel before calo
+    double  DeltaRout_warm = 4.0*GeoModelKernelUnits::cm;    // thickness warm vessel after calo
 
-    double  DeltaRout_vac = 3.0*CLHEP::cm;  // vacuum space cryo after calo
+    double  DeltaRout_vac = 3.0*GeoModelKernelUnits::cm;  // vacuum space cryo after calo
 
-    double Dz_end_warm = 7.0*CLHEP::cm;   // thickness of end plate at high z
-    double Dz_end_vac  = 8.0*CLHEP::cm;   
-    double Dz_end_cold = 7.0*CLHEP::cm;
+    double Dz_end_warm = 7.0*GeoModelKernelUnits::cm;   // thickness of end plate at high z
+    double Dz_end_vac  = 8.0*GeoModelKernelUnits::cm;   
+    double Dz_end_cold = 7.0*GeoModelKernelUnits::cm;
 
     double Dz_end_tot = Dz_end_warm + Dz_end_vac + Dz_end_cold;
 
@@ -209,13 +207,13 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     double  Rmin_mother = Cryo_Xcent-Cryo_Rmax_W;
     double  Rmax_mother = 2270.;
 
-    double Phi_Min = -5.0 * CLHEP::deg;
-    double Phi_Span = 32.5 * CLHEP::deg;
+    double Phi_Min = -5.0 * GeoModelKernelUnits::deg;
+    double Phi_Span = 32.5 * GeoModelKernelUnits::deg;
 // GU 10/09/2004
 // For cryostat mother volume, sligthly larger phi range
 //  to avoid clash with front cryostat
-    double Phi_Min_Moth=-9.0*CLHEP::deg;
-    double Phi_Span_Moth=38.5*CLHEP::deg;
+    double Phi_Min_Moth=-9.0*GeoModelKernelUnits::deg;
+    double Phi_Span_Moth=38.5*GeoModelKernelUnits::deg;
 
 // -----------------------------------------------------------------
 // Mother volume for Cryostat, filled with foam
@@ -227,8 +225,8 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     std::cout << "   (matter = foam) " << std::endl;
     std::cout << " Rmin/Rmax " << Rmin_mother << " " << Rmax_mother << std::endl;
     std::cout << " Dz/2 " << Cryo_Distz/2. << std::endl;
-    std::cout << " PhiMin, Span " << Phi_Min_Moth*(1./CLHEP::deg) << " "
-              << Phi_Span_Moth*(1./CLHEP::deg) << std::endl;
+    std::cout << " PhiMin, Span " << Phi_Min_Moth*(1./GeoModelKernelUnits::deg) << " "
+              << Phi_Span_Moth*(1./GeoModelKernelUnits::deg) << std::endl;
 #endif
 
     GeoTubs* Cent_tube = new GeoTubs(Rmin_mother,
@@ -239,11 +237,11 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     GeoLogVol* Cent_log = new GeoLogVol(baseName+"Mother",Cent_tube,Foam);
 //  position in Pcon mother envelope (which has Atlas reference frame)
      double zpos = Cryo_Distz/2.-Cryo_z0;
-     double phi  = -1.*360.*CLHEP::deg/16/2.;   // to have x axis in middle of volume
+     double phi  = -1.*360.*GeoModelKernelUnits::deg/16/2.;   // to have x axis in middle of volume
 
     GeoPhysVol* Cent_phys  = new GeoPhysVol(Cent_log);
-    cryoMotherPhysical->add(new GeoTransform(HepGeom::RotateZ3D(phi)));
-    cryoMotherPhysical->add(new GeoTransform(HepGeom::TranslateZ3D(zpos)));
+    cryoMotherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(phi)));
+    cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
     cryoMotherPhysical->add(Cent_phys);
 
 // ----------------------------------------------------------------------
@@ -257,7 +255,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     std::cout << " " << std::endl;
     std::cout << " ** Cryostat before LAr (shape=Tubs)" << std::endl;
     std::cout << " center in x = " << Cryo_Xcent  << std::endl;
-    std::cout << " angle 180-11 CLHEP::deg, span = 14 CLHEP::deg" << std::endl;
+    std::cout << " angle 180-11 GeoModelKernelUnits::deg, span = 14 GeoModelKernelUnits::deg" << std::endl;
     std::cout << " R warm vessel " << Cryo_Rmin_W << " "
                                    << Cryo_Rmax_W << std::endl;
     std::cout << " R vacuum      " << Cryo_Rmax_C << " "
@@ -272,15 +270,15 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                     Cryo_Rmin_W,
                                     Cryo_Rmax_W,
                                     (Cryo_Distz-Dz_end_tot)/2.,
-                                    (180.-11.)*CLHEP::deg,
-                                    14.*CLHEP::deg);
+                                    (180.-11.)*GeoModelKernelUnits::deg,
+                                    14.*GeoModelKernelUnits::deg);
 
     GeoLogVol* CryoW_log = new GeoLogVol(baseName+"WarmTube",
                                                      CryoW_tube,
                                                      Aluminium);
 
     GeoPhysVol* CryoW_phys = new GeoPhysVol(CryoW_log);
-    Cent_phys->add(new GeoTransform(HepGeom::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
+    Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
     Cent_phys->add(CryoW_phys);
 
 // Waccum between warm and cold vessels
@@ -289,15 +287,15 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                     Cryo_Rmax_C,
                                     Cryo_Rmin_W,
                                     (Cryo_Distz-Dz_end_tot)/2.,
-                                    (180.-11.)*CLHEP::deg,
-                                    14.*CLHEP::deg);
+                                    (180.-11.)*GeoModelKernelUnits::deg,
+                                    14.*GeoModelKernelUnits::deg);
 
     GeoLogVol *CryoV_log = new GeoLogVol(baseName+"VacTube",
                                                CryoV_tube,
                                                Vacuum);
 
     GeoPhysVol* CryoV_phys = new GeoPhysVol(CryoV_log);
-    Cent_phys->add(new GeoTransform(HepGeom::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
+    Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
     Cent_phys->add(CryoV_phys);
 
 // Cold vessel
@@ -306,15 +304,15 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                     Cryo_Rmin_C,
                                     Cryo_Rmax_C,
                                     (Cryo_Distz-Dz_end_tot)/2.,
-                                    (180.-11.)*CLHEP::deg,
-                                    14.*CLHEP::deg);
+                                    (180.-11.)*GeoModelKernelUnits::deg,
+                                    14.*GeoModelKernelUnits::deg);
 
     GeoLogVol *CryoC_log = new GeoLogVol(baseName+"ColdTube",
                                                CryoC_tube,
                                                Aluminium);
 
     GeoPhysVol* CryoC_phys = new GeoPhysVol(CryoC_log);
-    Cent_phys->add(new GeoTransform(HepGeom::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
+    Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
     Cent_phys->add(CryoC_phys);
 
 #endif
@@ -326,7 +324,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 // cold vessel of the cryostat after calo
 //-----------------------------------------------------------------------
 
-    double LAr_inner_radius=141.00*CLHEP::cm;   // min radius of PS
+    double LAr_inner_radius=141.00*GeoModelKernelUnits::cm;   // min radius of PS
     double LAr_outer_radius=Rmax_mother-DeltaRout_warm-DeltaRout_cold
                                          -DeltaRout_vac;
 
@@ -337,8 +335,8 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
     std::cout << " *** LAr volume (tubs put in foam)" << std::endl;
     std::cout << "Rmin/Rmax " << LAr_inner_radius << " "
                               << LAr_outer_radius << std::endl;
-    std::cout << "PhiMin,Span " << Phi_Min*(1./CLHEP::deg) << " "
-                                << Phi_Span*(1./CLHEP::deg) << std::endl;
+    std::cout << "PhiMin,Span " << Phi_Min*(1./GeoModelKernelUnits::deg) << " "
+                                << Phi_Span*(1./GeoModelKernelUnits::deg) << std::endl;
     std::cout << "DeltaZ/2 " << LAr_z_max/2. << std::endl;
     std::cout << "Position in z in mother " << (LAr_z_max-Cryo_Distz)/2. << std::endl;
 #endif
@@ -355,7 +353,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 
      GeoPhysVol* moth_phys = new GeoPhysVol(moth_log);
 
-     Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
+     Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
      Cent_phys->add(moth_phys);
 
 // Adjust LAR volumes at the end of foam, such as to have 
@@ -371,27 +369,27 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 //    5.5mm at mid bottom and 0.5 mm at bottom
 
 // modified 17-Aug-05
-// the measured thickness are at 0, 22.5/4, 22.5/2, 3*22.5/4 and 22.5 CLHEP::deg
+// the measured thickness are at 0, 22.5/4, 22.5/2, 3*22.5/4 and 22.5 GeoModelKernelUnits::deg
 // so define the regions in phi to be better centered on the measurements
 // and to cover:
 //   -  0 to 22.5/8 deg  = bottom thickness => need 9.5 - 9mm = 0.5mm Ar
 //   - 22.5/8 to 3*22.5/8 deg = mid bottom => need 7.5-2mm    = 5.5mm Ar
-//   - 3*22.5/8 to 5*22.5/8 CLHEP::deg = mid => need 14.5-9 = 5.5 CLHEP::mm Ar
+//   - 3*22.5/8 to 5*22.5/8 GeoModelKernelUnits::deg = mid => need 14.5-9 = 5.5 GeoModelKernelUnits::mm Ar
 //   - 5*22.5/8 to 7*22.5/8 deg = mid top => need 12.5-2mm = 10.5mm Ar
-//   - 7*22.5/8 to 22.5/8 CLHEP::deg   = top     => need 18.5-9 = 9.5 CLHEP::mm Ar
+//   - 7*22.5/8 to 22.5/8 GeoModelKernelUnits::deg   = top     => need 18.5-9 = 9.5 GeoModelKernelUnits::mm Ar
 
 #ifdef BUILD_LARFOAM
 
-    double delta_LAr[5]={0.5*CLHEP::mm,5.5*CLHEP::mm,5.5*CLHEP::mm,10.5*CLHEP::mm,9.5*CLHEP::mm};
-    double Phi1[5]={0.*CLHEP::deg,22.5/8.*CLHEP::deg,3.*22.5/8*CLHEP::deg,5.*22.5/8*CLHEP::deg,7.*22.5/8*CLHEP::deg};
-    double Delta_phi[5]={22.5/8*CLHEP::deg, 2.*22.5/8.*CLHEP::deg,2.*22.5/8.*CLHEP::deg,2.*22.5/8.*CLHEP::deg,22.5/8.*CLHEP::deg};
+    double delta_LAr[5]={0.5*GeoModelKernelUnits::mm,5.5*GeoModelKernelUnits::mm,5.5*GeoModelKernelUnits::mm,10.5*GeoModelKernelUnits::mm,9.5*GeoModelKernelUnits::mm};
+    double Phi1[5]={0.*GeoModelKernelUnits::deg,22.5/8.*GeoModelKernelUnits::deg,3.*22.5/8*GeoModelKernelUnits::deg,5.*22.5/8*GeoModelKernelUnits::deg,7.*22.5/8*GeoModelKernelUnits::deg};
+    double Delta_phi[5]={22.5/8*GeoModelKernelUnits::deg, 2.*22.5/8.*GeoModelKernelUnits::deg,2.*22.5/8.*GeoModelKernelUnits::deg,2.*22.5/8.*GeoModelKernelUnits::deg,22.5/8.*GeoModelKernelUnits::deg};
 
 // GU 08-dec-2005
 // additionnal LAr fudged before presampler to get better agreement
 //  waiting for Rhoacell measurement to know if this is reasonnable or not
 //  this should be now considered as a systematics
 //  25mm LAr ~ 0.18 X0
-//    double fudge_lar_gap = 25.*CLHEP::mm;
+//    double fudge_lar_gap = 25.*GeoModelKernelUnits::mm;
 // GU 28--feb-2006   removed this fudge 25mm, not supported by measurements of Rohacell
 
     for (int ilar=0;ilar<5;ilar++) {
@@ -400,7 +398,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 
 #ifdef DEBUG_GEO
       std::cout << " Ar additionnal volume before PS " << r1 << " "
-                << r2 << " " << Phi1[ilar]*(1./CLHEP::deg) << " " << Delta_phi[ilar]*(1./CLHEP::deg) << std::endl;
+                << r2 << " " << Phi1[ilar]*(1./GeoModelKernelUnits::deg) << " " << Delta_phi[ilar]*(1./GeoModelKernelUnits::deg) << std::endl;
 #endif
 
       GeoTubs* lar_tube = new GeoTubs(r1,
@@ -412,7 +410,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
       GeoLogVol* lar_log = new GeoLogVol(baseName+"LAr2",lar_tube,LAr);
 
       GeoPhysVol* lar_phys = new GeoPhysVol(lar_log);
-      Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
+      Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
       Cent_phys->add(lar_phys);
 
     }
@@ -421,7 +419,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 // Outer support rings: 6 steel rings, starting just
 //   after Barrel volume (G10 bars) (r=2003.6)
 //   DZ=80mm for DR=12mm, then DZ=10mm for DR=757mm then DZ=80mm for DR=12mm
-//   at locations z=397,805,1255,1750,2316,2868 CLHEP::mm
+//   at locations z=397,805,1255,1750,2316,2868 GeoModelKernelUnits::mm
 #ifdef BUILD_SUPPORTRING
 
      double R_ring = 2003.6; 
@@ -478,11 +476,11 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
        std::cout << " Position ring in LAr mother volume at z = "
                  << Zcd << " (z atlas= " << zring[iring] << std::endl;
 #endif
-       moth_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zcd)));
+       moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
        moth_phys->add(ring1_phys);
-       moth_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zcd)));
+       moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
        moth_phys->add(ring2_phys);
-       moth_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zcd)));
+       moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
        moth_phys->add(ring3_phys);
      }
 #endif
@@ -510,7 +508,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                      Phi_Span);
      GeoLogVol* CryoC2_log = new GeoLogVol(baseName+"ColdTube2",CryoC2_tube,Aluminium);
      GeoPhysVol* CryoC2_phys = new GeoPhysVol(CryoC2_log);
-     Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(-Dz_end_tot/2.)));
+     Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
      Cent_phys->add(CryoC2_phys);
 
 // vacuum between warn and cold vessel
@@ -527,7 +525,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                      Phi_Span);
      GeoLogVol* CryoV2_log = new GeoLogVol(baseName+"VacTube2",CryoV2_tube,Vacuum);
      GeoPhysVol* CryoV2_phys = new GeoPhysVol(CryoV2_log);
-     Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(-Dz_end_tot/2.)));
+     Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
      Cent_phys->add(CryoV2_phys);
 
 // warm vessel
@@ -544,7 +542,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
                                      Phi_Span);
       GeoLogVol* CryoW2_log = new GeoLogVol(baseName+"WarmTube2",CryoW2_tube,Aluminium);
       GeoPhysVol* CryoW2_phys = new GeoPhysVol(CryoW2_log);
-      Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(-Dz_end_tot/2.)));
+      Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
       Cent_phys->add(CryoW2_phys);
 #endif
 
@@ -570,7 +568,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 #ifdef DEBUG_GEO
        std::cout << " position in mother at z " << zwarm << std::endl;
 #endif
-       Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(zwarm)));
+       Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zwarm)));
        Cent_phys->add(CryoEndW_phys);
    
 // vaccum part
@@ -591,7 +589,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 #ifdef DEBUG_GEO
        std::cout << " position in mother at z " << zvac << std::endl;
 #endif
-       Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(zvac)));
+       Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zvac)));
        Cent_phys->add(CryoEndV_phys);
 
 // cold vessel
@@ -612,7 +610,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 #ifdef DEBUG_GEO
        std::cout << " position in mother at z " << zcold << std::endl;
 #endif
-       Cent_phys->add(new GeoTransform(HepGeom::TranslateZ3D(zcold)));
+       Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zcold)));
        Cent_phys->add(CryoEndC_phys);
 
 #endif
@@ -638,7 +636,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 #endif
 
      if (barrelEnvelope !=0) { 
-          moth_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zcd)));
+          moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
           moth_phys->add(barrelEnvelope);
      }
 #endif
@@ -655,10 +653,10 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 
 //   Zcd = 1582.5-LAr_z_max/2.+Cryo_z0;
 // new value of PS mother lenght
-//       Zcd = 1550.0*CLHEP::mm-LAr_z_max/2.+Cryo_z0;
+//       Zcd = 1550.0*GeoModelKernelUnits::mm-LAr_z_max/2.+Cryo_z0;
 // also the PS is shifted by 3mm to start at z=3mm in Atlas equivalent frame
-       double PresamplerMother_length=1549.*CLHEP::mm;
-       double presamplerShift = 3.*CLHEP::mm;
+       double PresamplerMother_length=1549.*GeoModelKernelUnits::mm;
+       double presamplerShift = 3.*GeoModelKernelUnits::mm;
        Zcd = presamplerShift+PresamplerMother_length-LAr_z_max/2.+Cryo_z0;
 
 #ifdef DEBUG_GEO
@@ -667,7 +665,7 @@ GeoFullPhysVol* LArGeo::TBBarrelCryostatConstruction::GetEnvelope()
 #endif
 
      if (barrelPSEnvelope !=0) {
-       moth_phys->add(new GeoTransform(HepGeom::TranslateZ3D(Zcd)));
+       moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
        moth_phys->add(barrelPSEnvelope);
        StoredPhysVol *sPhysVol = new StoredPhysVol(barrelPSEnvelope);
        StatusCode status=detStore->record(sPhysVol,"PRESAMPLER_B_POS");
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBEC/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoTBEC/CMakeLists.txt
index 67d9e242c93af854964481bf179966b75933c065..4be01f44827e4e7025ba112ebd0e354fb2a1be4e 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoTBEC/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBEC/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( LArGeoTBEC )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
@@ -23,20 +22,20 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArGeoTBECLib
                    src/*.cxx
                    PUBLIC_HEADERS LArGeoTBEC
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GeoModelUtilities LArReadoutGeometry StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoSpecialShapes GaudiKernel LArG4RunControl LArGeoCode LArGeoEndcap LArGeoRAL )
 
 atlas_add_component( LArGeoTBEC
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
                      LINK_LIBRARIES LArGeoTBECLib )
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/CryostatConstructionTBEC.cxx b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/CryostatConstructionTBEC.cxx
index c916c395c39102731ca7fb7b6e0e1364ad5d08d3..693d4358da90ae2d941a5ab72299fdb79f83e057 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/CryostatConstructionTBEC.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/CryostatConstructionTBEC.cxx
@@ -22,17 +22,14 @@
 #include "GeoModelKernel/GeoTransform.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 #include "StoreGate/StoreGateSvc.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
@@ -118,7 +115,7 @@ GeoVFullPhysVol* LArGeo::CryostatConstructionTBEC::GetEnvelope()
   // accordingly.
 
   std::string cryoMotherName = baseName + "::MotherVolume";
-  GeoBox* cryoMotherShape = new GeoBox( 152.*CLHEP::cm, 195.*CLHEP::cm, 60.09*CLHEP::cm );
+  GeoBox* cryoMotherShape = new GeoBox( 152.*GeoModelKernelUnits::cm, 195.*GeoModelKernelUnits::cm, 60.09*GeoModelKernelUnits::cm );
   const GeoLogVol* cryoMotherLogical = new GeoLogVol( cryoMotherName, cryoMotherShape, Air );
   //GeoFullPhysVol* m_cryoEnvelopePhysical = new GeoFullPhysVol( cryoMotherLogical );
   m_cryoEnvelopePhysical = new GeoFullPhysVol( cryoMotherLogical );
@@ -126,126 +123,126 @@ GeoVFullPhysVol* LArGeo::CryostatConstructionTBEC::GetEnvelope()
   // Cryostat walls
   
   std::string ExtWallName = baseName + "::ExternalWarmWall";
-  GeoBox* ExtWallShape = new GeoBox( 152.*CLHEP::cm, 195.*CLHEP::cm, 60.09*CLHEP::cm );
+  GeoBox* ExtWallShape = new GeoBox( 152.*GeoModelKernelUnits::cm, 195.*GeoModelKernelUnits::cm, 60.09*GeoModelKernelUnits::cm );
   const GeoLogVol* ExtWallLogical = new GeoLogVol( ExtWallName, ExtWallShape, Al );
   GeoPhysVol* ExtWallPhysical = new GeoPhysVol( ExtWallLogical );
   
   std::string WallName = baseName + "::WarmWallInterval";
-  GeoBox* WallShape = new GeoBox( ( 152. - 0.8 )*CLHEP::cm, ( 195. - 0.8 )*CLHEP::cm, ( 60.09 - 0.8 )*CLHEP::cm );
+  GeoBox* WallShape = new GeoBox( ( 152. - 0.8 )*GeoModelKernelUnits::cm, ( 195. - 0.8 )*GeoModelKernelUnits::cm, ( 60.09 - 0.8 )*GeoModelKernelUnits::cm );
   const GeoLogVol* WallLogical = new GeoLogVol( WallName, WallShape, Vacuum );
   GeoPhysVol* WallPhysical = new GeoPhysVol( WallLogical );
   
   std::string IntWallName = baseName + "::InternalWarmWall";
-  GeoBox* IntWallShape = new GeoBox( 148.4*CLHEP::cm, 191.6*CLHEP::cm, 46.8*CLHEP::cm );
+  GeoBox* IntWallShape = new GeoBox( 148.4*GeoModelKernelUnits::cm, 191.6*GeoModelKernelUnits::cm, 46.8*GeoModelKernelUnits::cm );
   const GeoLogVol* IntWallLogical = new GeoLogVol( IntWallName, IntWallShape, Al );
   GeoPhysVol* IntWallPhysical = new GeoPhysVol( IntWallLogical );
   
   std::string VacuumName = baseName + "::Vacuum";
-  GeoBox* VacuumShape = new GeoBox( ( 148.4 - 0.8 )*CLHEP::cm, ( 191.6 - 0.8 )*CLHEP::cm, ( 46.8 - 0.8 )*CLHEP::cm );
+  GeoBox* VacuumShape = new GeoBox( ( 148.4 - 0.8 )*GeoModelKernelUnits::cm, ( 191.6 - 0.8 )*GeoModelKernelUnits::cm, ( 46.8 - 0.8 )*GeoModelKernelUnits::cm );
   const GeoLogVol* VacuumLogical = new GeoLogVol( VacuumName, VacuumShape, Vacuum );
   GeoPhysVol* VacuumPhysical = new GeoPhysVol( VacuumLogical );
   
   std::string ColdWallName = baseName + "::ColdWall";
-  GeoBox* ColdWallShape = new GeoBox( 142.5*CLHEP::cm, 184.85*CLHEP::cm, 38.*CLHEP::cm );
+  GeoBox* ColdWallShape = new GeoBox( 142.5*GeoModelKernelUnits::cm, 184.85*GeoModelKernelUnits::cm, 38.*GeoModelKernelUnits::cm );
   const GeoLogVol* ColdWallLogical = new GeoLogVol( ColdWallName, ColdWallShape, Iron );
   GeoPhysVol* ColdWallPhysical = new GeoPhysVol( ColdWallLogical );
   
   std::string LArName = baseName + "::LiquidArgon";
-  GeoBox* LArShape = new GeoBox( ( 142.5 - .5 )*CLHEP::cm, ( 184.85 - .5 )*CLHEP::cm, ( 38. - .5 )*CLHEP::cm );
+  GeoBox* LArShape = new GeoBox( ( 142.5 - .5 )*GeoModelKernelUnits::cm, ( 184.85 - .5 )*GeoModelKernelUnits::cm, ( 38. - .5 )*GeoModelKernelUnits::cm );
   const GeoLogVol* LArLogical = new GeoLogVol( LArName, LArShape, LAr );
   // GeoPhysVol* m_LArPhysical = new GeoPhysVol( LArLogical );
   m_LArPhysical = new GeoPhysVol( LArLogical );
   
   ColdWallPhysical->add( new GeoIdentifierTag( 1 ) );
-  ColdWallPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  ColdWallPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   ColdWallPhysical->add( m_LArPhysical );
   
   VacuumPhysical->add( new GeoIdentifierTag( 1 ) );
-  VacuumPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  VacuumPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   VacuumPhysical->add( ColdWallPhysical );
   
   IntWallPhysical->add( new GeoIdentifierTag( 1 ) );
-  IntWallPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  IntWallPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   IntWallPhysical->add( VacuumPhysical );
   
   WallPhysical->add( new GeoIdentifierTag( 1 ) );
-  WallPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  WallPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   WallPhysical->add( IntWallPhysical );
   
   ExtWallPhysical->add( new GeoIdentifierTag( 1 ) );
-  ExtWallPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  ExtWallPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   ExtWallPhysical->add( WallPhysical );
   
   m_cryoEnvelopePhysical->add( new GeoIdentifierTag( 1 ) );
-  m_cryoEnvelopePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );					   
+  m_cryoEnvelopePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );					   
   m_cryoEnvelopePhysical->add( ExtWallPhysical );
   
   // Pressure cone
   
   std::string PConeName = baseName + "::PressureCone::Mother";
-  GeoTubs* PConeShape = new GeoTubs( 0.*CLHEP::cm, 6.5*CLHEP::cm, 4.*CLHEP::cm, 0.*CLHEP::deg, 360.*CLHEP::deg );
+  GeoTubs* PConeShape = new GeoTubs( 0.*GeoModelKernelUnits::cm, 6.5*GeoModelKernelUnits::cm, 4.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg );
   const GeoLogVol* PConeLogical = new GeoLogVol( PConeName, PConeShape, Vacuum );
   GeoPhysVol* PConePhysical = new GeoPhysVol( PConeLogical );
   
   std::string IntFlangeName = baseName + "::PressureCone::InternalFlange";
-  GeoTubs* IntFlangeShape = new GeoTubs( 0.*CLHEP::cm, 4.9*CLHEP::cm, 0.4*CLHEP::cm, 0.*CLHEP::deg, 360.*CLHEP::deg );
+  GeoTubs* IntFlangeShape = new GeoTubs( 0.*GeoModelKernelUnits::cm, 4.9*GeoModelKernelUnits::cm, 0.4*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg );
   const GeoLogVol* IntFlangeLogical = new GeoLogVol( IntFlangeName, IntFlangeShape, Gten );
   GeoPhysVol* IntFlangePhysical = new GeoPhysVol( IntFlangeLogical );
   
   std::string ExtFlangeName = baseName + "::PressureCone::ExternalFlange";
-  GeoTubs* ExtFlangeShape = new GeoTubs( 5.*CLHEP::cm, 6.5*CLHEP::cm, 0.4*CLHEP::cm, 0.*CLHEP::deg, 360.*CLHEP::deg );
+  GeoTubs* ExtFlangeShape = new GeoTubs( 5.*GeoModelKernelUnits::cm, 6.5*GeoModelKernelUnits::cm, 0.4*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg );
   const GeoLogVol* ExtFlangeLogical = new GeoLogVol( ExtFlangeName, ExtFlangeShape, Gten );
   GeoPhysVol* ExtFlangePhysical = new GeoPhysVol( ExtFlangeLogical );
   
   std::string ConeName = baseName + "::PressureCone::Cone";
-  GeoCons* ConeShape = new GeoCons( 5.4*CLHEP::cm, 4.5*CLHEP::cm, 5.5*CLHEP::cm, 4.6*CLHEP::cm, 3.2*CLHEP::cm, 0.*CLHEP::deg, 360.*CLHEP::deg );
+  GeoCons* ConeShape = new GeoCons( 5.4*GeoModelKernelUnits::cm, 4.5*GeoModelKernelUnits::cm, 5.5*GeoModelKernelUnits::cm, 4.6*GeoModelKernelUnits::cm, 3.2*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::deg, 360.*GeoModelKernelUnits::deg );
   const GeoLogVol* ConeLogical = new GeoLogVol( ConeName, ConeShape, Gten );
   GeoPhysVol* ConePhysical = new GeoPhysVol( ConeLogical );
   
   PConePhysical->add( new GeoIdentifierTag( 1 ) );
-  PConePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 3.6*CLHEP::cm ) ) );
+  PConePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 3.6*GeoModelKernelUnits::cm ) ) );
   PConePhysical->add( IntFlangePhysical );
   
   PConePhysical->add( new GeoIdentifierTag( 1 ) );
-  PConePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, -3.6*CLHEP::cm ) ) );
+  PConePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, -3.6*GeoModelKernelUnits::cm ) ) );
   PConePhysical->add( ExtFlangePhysical );
   
   PConePhysical->add( new GeoIdentifierTag( 1 ) );
-  PConePhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, 0.*CLHEP::cm ) ) );
+  PConePhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm ) ) );
   PConePhysical->add( ConePhysical );
   
   for ( int i  = 0; i < 3; i++ ) for ( int j = 0; j < 13; j++ ) {
-  	double x = 135.1*CLHEP::cm - 19.3*( j + 1 )*CLHEP::cm;
-	double y = 19.3*( i - 1 )*CLHEP::cm;
+  	double x = 135.1*GeoModelKernelUnits::cm - 19.3*( j + 1 )*GeoModelKernelUnits::cm;
+	double y = 19.3*( i - 1 )*GeoModelKernelUnits::cm;
 	VacuumPhysical->add( new GeoIdentifierTag( 1 + i*13 + j ) );
-  	VacuumPhysical->add( new GeoTransform( HepGeom::Translate3D( x, y, -42.*CLHEP::cm ) ) );
+  	VacuumPhysical->add( new GeoTransform( GeoTrf::Translate3D( x, y, -42.*GeoModelKernelUnits::cm ) ) );
   	VacuumPhysical->add( PConePhysical );
   }
   
   // Zig-zag structure
   
   std::string ZigZagMotherName = baseName + "::ZigZag::Mother";
-  GeoBox* ZigZagMotherShape = new GeoBox( 130.*CLHEP::cm, 15.*CLHEP::cm, 6.45*CLHEP::cm );
+  GeoBox* ZigZagMotherShape = new GeoBox( 130.*GeoModelKernelUnits::cm, 15.*GeoModelKernelUnits::cm, 6.45*GeoModelKernelUnits::cm );
   const GeoLogVol* ZigZagMotherLogical = new GeoLogVol( ZigZagMotherName, ZigZagMotherShape, Vacuum );
   GeoPhysVol* ZigZagMotherPhysical = new GeoPhysVol( ZigZagMotherLogical );
   
   std::string ZigZagStrAName = baseName + "::ZigZag::StrA";
-  GeoBox* ZigZagStrAShape = new GeoBox( 2.45*CLHEP::cm, 5.*CLHEP::cm, .4*CLHEP::cm );
+  GeoBox* ZigZagStrAShape = new GeoBox( 2.45*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, .4*GeoModelKernelUnits::cm );
   const GeoLogVol* ZigZagStrALogical = new GeoLogVol( ZigZagStrAName, ZigZagStrAShape, Al );
   GeoPhysVol* ZigZagStrAPhysical = new GeoPhysVol( ZigZagStrALogical );
   
   std::string ZigZagStrBName = baseName + "::ZigZag::StrB";
-  GeoBox* ZigZagStrBShape = new GeoBox( 8.53*CLHEP::cm, 5.*CLHEP::cm, .4*CLHEP::cm );
+  GeoBox* ZigZagStrBShape = new GeoBox( 8.53*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, .4*GeoModelKernelUnits::cm );
   const GeoLogVol* ZigZagStrBLogical = new GeoLogVol( ZigZagStrBName, ZigZagStrBShape, Al );
   GeoPhysVol* ZigZagStrBPhysical = new GeoPhysVol( ZigZagStrBLogical );
   
   std::string ZigZagStrCName = baseName + "::ZigZag::StrC";
-  GeoTrd* ZigZagStrCShape = new GeoTrd( 1.03*CLHEP::cm, .453*CLHEP::cm, 5.*CLHEP::cm, 5.*CLHEP::cm, .283*CLHEP::cm );
+  GeoTrd* ZigZagStrCShape = new GeoTrd( 1.03*GeoModelKernelUnits::cm, .453*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, .283*GeoModelKernelUnits::cm );
   const GeoLogVol* ZigZagStrCLogical = new GeoLogVol( ZigZagStrCName, ZigZagStrCShape, Al );
   GeoPhysVol* ZigZagStrCPhysical = new GeoPhysVol( ZigZagStrCLogical );
   
   std::string ZigZagStrDName = baseName + "::ZigZag::StrD";
-  GeoTrd* ZigZagStrDShape = new GeoTrd( .005*CLHEP::cm, .31*CLHEP::cm, 5.*CLHEP::cm, 5.*CLHEP::cm, .365*CLHEP::cm );
+  GeoTrd* ZigZagStrDShape = new GeoTrd( .005*GeoModelKernelUnits::cm, .31*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, 5.*GeoModelKernelUnits::cm, .365*GeoModelKernelUnits::cm );
   const GeoLogVol* ZigZagStrDLogical = new GeoLogVol( ZigZagStrDName, ZigZagStrDShape, Al );
   GeoPhysVol* ZigZagStrDPhysical = new GeoPhysVol( ZigZagStrDLogical );
   
@@ -253,33 +250,31 @@ GeoVFullPhysVol* LArGeo::CryostatConstructionTBEC::GetEnvelope()
   
   for ( int i = 0; i < 9; i++ ) {
   	ZigZagMotherPhysical->add( new GeoIdentifierTag( StrAIdTag ) );
-  	ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Translate3D( ( 124.4 - 31.1*i )*CLHEP::cm, 0.*CLHEP::cm, 6.05*CLHEP::cm ) ) );
+  	ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Translate3D( ( 124.4 - 31.1*i )*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 6.05*GeoModelKernelUnits::cm ) ) );
   	ZigZagMotherPhysical->add( ZigZagStrAPhysical );
 	StrAIdTag++;
   }
   for ( int j = 0; j < 2; j++ ) for ( int i = 0; i < 8; i++ ) {
   	ZigZagMotherPhysical->add( new GeoIdentifierTag( StrAIdTag ) );
-  	ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Translate3D( ( 108.85 - 31.1*i )*CLHEP::cm, ( 2*j - 1 )*10.*CLHEP::cm, 6.05*CLHEP::cm ) ) );
+  	ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Translate3D( ( 108.85 - 31.1*i )*GeoModelKernelUnits::cm, ( 2*j - 1 )*10.*GeoModelKernelUnits::cm, 6.05*GeoModelKernelUnits::cm ) ) );
   	ZigZagMotherPhysical->add( ZigZagStrAPhysical );
 	StrAIdTag++;
   }
   
   int StrBIdTag = 1;
-  const double xB1[ 2 ] = { ( -6.77 + 108.85 )*CLHEP::cm, ( 6.77 + 108.85 )*CLHEP::cm };
-  const double xB2[ 2 ] = { ( -6.77 + 124.4 )*CLHEP::cm, ( 6.77 + 93.3 )*CLHEP::cm  };
-  const double alpha[ 2 ] = { 45.*CLHEP::deg, -45.*CLHEP::deg };
+  const double xB1[ 2 ] = { ( -6.77 + 108.85 )*GeoModelKernelUnits::cm, ( 6.77 + 108.85 )*GeoModelKernelUnits::cm };
+  const double xB2[ 2 ] = { ( -6.77 + 124.4 )*GeoModelKernelUnits::cm, ( 6.77 + 93.3 )*GeoModelKernelUnits::cm  };
+  const double alpha[ 2 ] = { 45.*GeoModelKernelUnits::deg, -45.*GeoModelKernelUnits::deg };
   
   for ( int k = 0; k < 2; k++ )  for ( int i = 0; i < 8; i++ ) {
   	ZigZagMotherPhysical->add( new GeoIdentifierTag( StrBIdTag ) );
-  	ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( alpha[ k ] ), 
-								     CLHEP::Hep3Vector( xB1[ k ] - 31.1*i*CLHEP::cm, 0.*CLHEP::cm, -.1*CLHEP::cm ) ) ) );
+  	ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D(GeoTrf::Translate3D( xB1[ k ] - 31.1*i*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, -.1*GeoModelKernelUnits::cm )*GeoTrf::RotateY3D( alpha[ k ] ) ) ) );
   	ZigZagMotherPhysical->add( ZigZagStrBPhysical );
 	StrBIdTag++;
 	
 	for ( int j = 0; j < 2; j++ ) {
 		ZigZagMotherPhysical->add( new GeoIdentifierTag( StrBIdTag ) );
-  		ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( alpha[ k ] ), 
-								     CLHEP::Hep3Vector( xB2[ k ] - 31.1*i*CLHEP::cm, ( -10. + 20.*j )*CLHEP::cm, -.1*CLHEP::cm ) ) ) );
+  		ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translate3D( xB2[ k ] - 31.1*i*GeoModelKernelUnits::cm, ( -10. + 20.*j )*GeoModelKernelUnits::cm, -.1*GeoModelKernelUnits::cm ) *GeoTrf::RotateY3D( alpha[ k ] )) ) );
   		ZigZagMotherPhysical->add( ZigZagStrBPhysical );
 		StrBIdTag++;	
 	}
@@ -290,41 +285,39 @@ GeoVFullPhysVol* LArGeo::CryostatConstructionTBEC::GetEnvelope()
   for ( int i = 0; i < 9; i++ ) {
   	if ( i < 8 ) {
   		ZigZagMotherPhysical->add( new GeoIdentifierTag( StrCIdTag ) );
-  		ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Translate3D( ( 108.85 - 31.1*i )*CLHEP::cm, 0.*CLHEP::cm, -6.15*CLHEP::cm ) ) );
+  		ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Translate3D( ( 108.85 - 31.1*i )*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, -6.15*GeoModelKernelUnits::cm ) ) );
   		ZigZagMotherPhysical->add( ZigZagStrCPhysical );
 		StrCIdTag++;
 	}
 	for ( int j = 0; j < 2; j++ ) {
 		ZigZagMotherPhysical->add( new GeoIdentifierTag( StrCIdTag ) );
-  		ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Translate3D( ( 124.4 - 31.1*i )*CLHEP::cm, ( -10. + 20.*j )*CLHEP::cm, -6.15*CLHEP::cm ) ) );
+  		ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Translate3D( ( 124.4 - 31.1*i )*GeoModelKernelUnits::cm, ( -10. + 20.*j )*GeoModelKernelUnits::cm, -6.15*GeoModelKernelUnits::cm ) ) );
   		ZigZagMotherPhysical->add( ZigZagStrCPhysical );
 		StrCIdTag++;
 	}
   }
   
   int StrDIdTag = 1;
-  const double xD1[ 2 ] = { ( -2.598 + 124.4 )*CLHEP::cm, ( 2.598 + 124.4 )*CLHEP::cm };
-  const double xD2[ 2 ] = { ( -2.598 + 108.85 )*CLHEP::cm, ( 2.598 + 108.85 )*CLHEP::cm };
-  const double beta[ 2 ] = { -22.5*CLHEP::deg, 22.5*CLHEP::deg };
+  const double xD1[ 2 ] = { ( -2.598 + 124.4 )*GeoModelKernelUnits::cm, ( 2.598 + 124.4 )*GeoModelKernelUnits::cm };
+  const double xD2[ 2 ] = { ( -2.598 + 108.85 )*GeoModelKernelUnits::cm, ( 2.598 + 108.85 )*GeoModelKernelUnits::cm };
+  const double beta[ 2 ] = { -22.5*GeoModelKernelUnits::deg, 22.5*GeoModelKernelUnits::deg };
   
   for ( int k = 0; k < 2; k++ )  for ( int i = 0; i < 9; i++ ) {
   	ZigZagMotherPhysical->add( new GeoIdentifierTag( StrDIdTag ) );
-  	ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( beta[ k ] ), 
-								     CLHEP::Hep3Vector( xD1[ k ] - 31.1*i*CLHEP::cm, 0.*CLHEP::cm, 5.995*CLHEP::cm ) ) ) );
+  	ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translate3D( xD1[ k ] - 31.1*i*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, 5.995*GeoModelKernelUnits::cm ) *GeoTrf::RotateY3D( beta[ k ] )) ) );
   	ZigZagMotherPhysical->add( ZigZagStrDPhysical );
 	StrDIdTag++;
 	
 	if ( i < 8 ) for ( int j = 0; j < 2; j++ ) {
 		ZigZagMotherPhysical->add( new GeoIdentifierTag( StrDIdTag ) );
-  		ZigZagMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( beta[ k ] ), 
-								     CLHEP::Hep3Vector( xD2[ k ] - 31.1*i*CLHEP::cm, ( -10. +20.*j )*CLHEP::cm, 5.995*CLHEP::cm ) ) ) );
+  		ZigZagMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translate3D( xD2[ k ] - 31.1*i*GeoModelKernelUnits::cm, ( -10. +20.*j )*GeoModelKernelUnits::cm, 5.995*GeoModelKernelUnits::cm ) *GeoTrf::RotateY3D( beta[ k ] )) ) );
   		ZigZagMotherPhysical->add( ZigZagStrDPhysical );
 		StrDIdTag++;	
 	}
   }
    
   WallPhysical->add( new GeoIdentifierTag( 1 ) );
-  WallPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, -53.2*CLHEP::cm ) ) );
+  WallPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, -53.2*GeoModelKernelUnits::cm ) ) );
   WallPhysical->add( ZigZagMotherPhysical );
     
 return m_cryoEnvelopePhysical;
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/EMECModuleConstruction.cxx b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/EMECModuleConstruction.cxx
index 80c3992eb2ad9584d9a6b5de6c0b2dc4bb021c82..8027190c6edfd65d6a84ebf72345c8b73b42bfe5 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/EMECModuleConstruction.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/EMECModuleConstruction.cxx
@@ -39,6 +39,8 @@
 #include "GeoModelKernel/GeoTransform.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -48,11 +50,6 @@
 #include "GaudiKernel/IService.h"
 #include "GaudiKernel/ISvcLocator.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 #include <string>
 #include <cmath>
 #include <iostream>
@@ -115,37 +112,37 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   //LAr
 
-  GeoMaterial* LAr = new GeoMaterial(name="LiquidArgon", density=1.396*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* LAr = new GeoMaterial(name="LiquidArgon", density=1.396*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   LAr->add(Ar,1.);
   LAr->lock();
  
   //Alu
 
-  GeoMaterial* Alu = new GeoMaterial(name="Alu", density=2.7*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Alu = new GeoMaterial(name="Alu", density=2.7*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Alu->add(Al,1.);
   Alu->lock();
 
   //Iron
 
-  GeoMaterial* Iron = new GeoMaterial(name="Iron", density=7.87*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Iron = new GeoMaterial(name="Iron", density=7.87*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Iron->add(Fe,1.);
   Iron->lock();
 
   //Copper
 
-  GeoMaterial* Copper = new GeoMaterial(name="Copper", density=8.96*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Copper = new GeoMaterial(name="Copper", density=8.96*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Copper->add(Cu,1.);
   Copper->lock();
 
   //Lead
 
-  GeoMaterial* Lead = new GeoMaterial(name="Lead", density=11.35*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Lead = new GeoMaterial(name="Lead", density=11.35*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Lead->add(Pb,1.);
   Lead->lock();
 
   // Air	,  at 20 deg C, 1 atm density=1.2931*mg/cm3
 
-  GeoMaterial* Air=new GeoMaterial(name="Air", density=1.290*CLHEP::mg/CLHEP::cm3);
+  GeoMaterial* Air=new GeoMaterial(name="Air", density=1.290*GeoModelKernelUnits::mg/GeoModelKernelUnits::cm3);
   Air->add(N, .8);
   Air->add(O, .2);
   Air->lock();
@@ -153,7 +150,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
   //Prepreg glue for absorbers, composition to be checked!
   //ref:STR.CAL.01.CRB.6,(23-Jan-2003,J.T.)
 
-  GeoMaterial* Glue=new GeoMaterial(name="Glue", density=1.8*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Glue=new GeoMaterial(name="Glue", density=1.8*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   aH=8.*H->getA();
   aO=2.*O->getA();
   aC=5.*C->getA();
@@ -172,7 +169,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
   //PermaliE730 for Front middle ring, composition to be checked!
   //                     ref.: STR.CAL.01.CRB.6,(23-Jan-2003,J.T.)
 
-  GeoMaterial* PermaliE730=new GeoMaterial(name="PermaliE730",density=1.83*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* PermaliE730=new GeoMaterial(name="PermaliE730",density=1.83*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   aH=8.*H->getA();
   aO=2.*O->getA();
   aC=5.*C->getA();
@@ -190,7 +187,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // Gten  ( C8 H14 O4 ), alias glass epoxy for long.&transv.bars
 
-  GeoMaterial* Gten = new GeoMaterial(name="Gten", density=1.8*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Gten = new GeoMaterial(name="Gten", density=1.8*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   aH=14.*H->getA();
   aO= 4.*O->getA();
   aC= 8.*C->getA();
@@ -209,7 +206,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
   // Kapton 11-Jan-2002 ML from accbgeo.age: the Kapton_E density is 1.46g/cm3
   //        one assumes it is the same as for the Kapton_H -> C22 H10 O5 N2
  
-  GeoMaterial* Kapton= new GeoMaterial(name="Kapton",density=1.46*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Kapton= new GeoMaterial(name="Kapton",density=1.46*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   aH=10.*H->getA();
   aO= 5.*O->getA();
   aC=22.*C->getA();
@@ -230,9 +227,9 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // THIN absorber: outer wheel
   //               11-Jan-2002 ML source: endegeo.age and Fig.7-3 of TDR
-  Tggl = 0.3*CLHEP::mm;
-  Tgfe = 0.4*CLHEP::mm;
-  Tgpb = 1.7*CLHEP::mm;
+  Tggl = 0.3*GeoModelKernelUnits::mm;
+  Tgfe = 0.4*GeoModelKernelUnits::mm;
+  Tgpb = 1.7*GeoModelKernelUnits::mm;
   Totalthick=Tggl+Tgfe+Tgpb;
   m1=Tggl*Glue->getDensity();
   m2=Tgfe*Iron->getDensity();
@@ -253,9 +250,9 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // THICK absorber: inner wheel
   //                 11-Jan-2002 ML source: endegeo.age and Fig.7-3 of TDR
-  Thgl = 0.3*CLHEP::mm;
-  Thfe = 0.4*CLHEP::mm;
-  Thpb = 2.2*CLHEP::mm;
+  Thgl = 0.3*GeoModelKernelUnits::mm;
+  Thfe = 0.4*GeoModelKernelUnits::mm;
+  Thpb = 2.2*GeoModelKernelUnits::mm;
   Totalthick=Thgl+Thfe+Thpb;
   m1=Thgl*Glue->getDensity();
   m2=Thfe*Iron->getDensity();
@@ -276,8 +273,8 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // Electrode,   as a mixture Kapton+Cu, 11-Jan-2002 ML
 
-  Thcu = 0.105*CLHEP::mm;
-  Thka = 0.170*CLHEP::mm;  //together with glue J.T.
+  Thcu = 0.105*GeoModelKernelUnits::mm;
+  Thka = 0.170*GeoModelKernelUnits::mm;  //together with glue J.T.
   Totalthicke = Thcu+Thka;
   m1=Thcu*Copper->getDensity();
   m2=Thka*Kapton->getDensity();
@@ -306,7 +303,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
     FracC =aC*inv_Atot;
     FracAr=aAr*inv_Atot;
   }
-  GeoMaterial* Elect_LAr= new GeoMaterial(name="Elnics",density=1.28*CLHEP::g/CLHEP::cm3);
+  GeoMaterial* Elect_LAr= new GeoMaterial(name="Elnics",density=1.28*GeoModelKernelUnits::g/GeoModelKernelUnits::cm3);
   Elect_LAr->add(H ,FracH);
   Elect_LAr->add(C ,FracC);
   Elect_LAr->add(Ar,FracAr);
@@ -319,9 +316,9 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // G10FeInner for barrette in the inner wheel(J.T.08.01.2003)
 
-  Thfe  =0.4*CLHEP::mm;
-  Thgl  =0.3*CLHEP::mm;
-  Thpb  =2.2*CLHEP::mm;
+  Thfe  =0.4*GeoModelKernelUnits::mm;
+  Thgl  =0.3*GeoModelKernelUnits::mm;
+  Thpb  =2.2*GeoModelKernelUnits::mm;
   ThGten=Thpb;
   Totalthick =Thfe+Thgl+ThGten;
   //Totalthicki=Totalthick;
@@ -346,9 +343,9 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
  // G10FeOuter for barrette in the outer wheel(J.T.08.01.2003)
 
-  Thfe  =0.4*CLHEP::mm;
-  Thgl  =0.3*CLHEP::mm;
-  Thpb  =1.7*CLHEP::mm;
+  Thfe  =0.4*GeoModelKernelUnits::mm;
+  Thgl  =0.3*GeoModelKernelUnits::mm;
+  Thpb  =1.7*GeoModelKernelUnits::mm;
   ThGten=Thpb;
   Totalthick =Thfe+Thgl+ThGten;
   //Totalthicko=Totalthick;
@@ -384,13 +381,13 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 // V.N: From LarWheelSolid, to get bounding polycone. Previoulsy G4 routine. No GeoModel equivalent so far ...
 //
   
-  double zWheelFrontFace 		= 3689.5*CLHEP::mm;
+  double zWheelFrontFace 		= 3689.5*GeoModelKernelUnits::mm;
   
-  double dWRPtoFrontFace 		= 11.*CLHEP::mm;
+  double dWRPtoFrontFace 		= 11.*GeoModelKernelUnits::mm;
 
-  double dMechFocaltoWRP                 = 3691. *CLHEP::mm;  //=endg_z1*CLHEP::cm
+  double dMechFocaltoWRP                 = 3691. *GeoModelKernelUnits::mm;  //=endg_z1*GeoModelKernelUnits::cm
                                                          //"LArEMECNomLarOrig" 
-  double rOuterCutoff                    = 2034. *CLHEP::mm;  //=endg_rlimit*CLHEP::cm
+  double rOuterCutoff                    = 2034. *GeoModelKernelUnits::mm;  //=endg_rlimit*GeoModelKernelUnits::cm
                                               //"LArEMECMaxRadiusActivePart
 
 //*****************      
@@ -402,32 +399,32 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
   double Rin1, Rin2, Rout1, Rout2;
 
   if ( m_isInnerWheel ) {
-    Rin1 = 279.*CLHEP::mm;
-    Rin2 = 324.*CLHEP::mm;
+    Rin1 = 279.*GeoModelKernelUnits::mm;
+    Rin2 = 324.*GeoModelKernelUnits::mm;
   }
   else {
-    Rin1 = 590.*CLHEP::mm;
-    Rin2 = 678.*CLHEP::mm; 
+    Rin1 = 590.*GeoModelKernelUnits::mm;
+    Rin2 = 678.*GeoModelKernelUnits::mm; 
   }
   if ( m_isOuterWheel ) {
-    Rout1 = 2070.*CLHEP::mm;
-    Rout2 = 2070.*CLHEP::mm;
+    Rout1 = 2070.*GeoModelKernelUnits::mm;
+    Rout2 = 2070.*GeoModelKernelUnits::mm;
   }
   else {
-    Rout1 = 647.*CLHEP::mm;
-    Rout2 = 732.*CLHEP::mm;
+    Rout1 = 647.*GeoModelKernelUnits::mm;
+    Rout2 = 732.*GeoModelKernelUnits::mm;
   }
 
   // --> EndOfRadiiSelection <--
    
-  double emecMotherZplan[] = { 3639.5*CLHEP::mm, 3639.5*CLHEP::mm + 630.*CLHEP::mm };    //cold (J.T)                               
+  double emecMotherZplan[] = { 3639.5*GeoModelKernelUnits::mm, 3639.5*GeoModelKernelUnits::mm + 630.*GeoModelKernelUnits::mm };    //cold (J.T)                               
   double emecMotherRin[]   = { Rin1, Rin2 };	
   double emecMotherRout[]  = { Rout1, Rout2 }; 
   int lastPlaneEmec = ( sizeof( emecMotherZplan )/sizeof( double ) );
 
   if ( m_isTB ) { 
      for ( int i = 0; i < lastPlaneEmec; i++ ) emecMotherZplan[ i ] -= zWheelFrontFace;
-     zWheelFrontFace = 0.*CLHEP::mm;
+     zWheelFrontFace = 0.*GeoModelKernelUnits::mm;
   }
 
   double phiPosition = M_PI/2;
@@ -452,8 +449,8 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
   double tanThetaMid   = 2. * exp(-eta_mid) / (1. - exp(2.*-eta_mid));
   double tanThetaOuter = 2. * exp(-eta_low) / (1. - exp(2.*-eta_low));
 
-  double zWheelThickness = 514.*CLHEP::mm;     // endg_etot-2.*(endg_sabl*CLHEP::cm-2.*CLHEP::mm)
-  double gapBetweenWheels= 1.5*CLHEP::mm*2.;  // "LArEMECHalfCrack"*2.
+  double zWheelThickness = 514.*GeoModelKernelUnits::mm;     // endg_etot-2.*(endg_sabl*GeoModelKernelUnits::cm-2.*GeoModelKernelUnits::mm)
+  double gapBetweenWheels= 1.5*GeoModelKernelUnits::mm*2.;  // "LArEMECHalfCrack"*2.
 
 //J.T************
 // zWheelFrontFace for mechanical design
@@ -559,7 +556,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
     GeoLogVol*  innerLogical  = new GeoLogVol ( innerName, innerShape, LAr );
     GeoFullPhysVol* innerPhysical = new GeoFullPhysVol( innerLogical );
     emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-    emecMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D( zWheelFrontFace ) ) );
+    emecMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D( zWheelFrontFace ) ) );
     emecMotherPhysical->add( innerPhysical );
 
     // Place the custom accordion volumes in the liquid argon.
@@ -578,10 +575,8 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
     GeoFullPhysVol* innerAbsorberPhysical  = new GeoFullPhysVol( innerAbsorberLogical );
     GeoPhysVol* innerElectrodePhysical = new GeoPhysVol( innerElectrodeLogical );
     innerPhysical->add( new GeoIdentifierTag( 1 ) );
-    innerPhysical->add( new GeoTransform( HepGeom::Transform3D() ) );
     innerPhysical->add( innerAbsorberPhysical );
     innerPhysical->add( new GeoIdentifierTag( 1 ) );
-    innerPhysical->add( new GeoTransform( HepGeom::Transform3D() ) );
     innerPhysical->add( innerElectrodePhysical );
     {
       StoredPhysVol *sPhysVol = new StoredPhysVol(innerPhysical);
@@ -599,7 +594,7 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
     GeoLogVol*  outerLogical  = new GeoLogVol ( outerName, outerShape, LAr );
     GeoFullPhysVol* outerPhysical = new GeoFullPhysVol(outerLogical);
     emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-    emecMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D( zWheelFrontFace ) ) );
+    emecMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D( zWheelFrontFace ) ) );
     emecMotherPhysical->add( outerPhysical );
 
     // Place the custom accordion volumes in the liquid argon.
@@ -618,10 +613,8 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
     GeoPhysVol* outerAbsorberPhysical  = new GeoPhysVol( outerAbsorberLogical );
     GeoPhysVol* outerElectrodePhysical = new GeoPhysVol( outerElectrodeLogical );
     outerPhysical->add( new GeoIdentifierTag( 1 ) );
-    outerPhysical->add( new GeoTransform( HepGeom::Transform3D() ) );
     outerPhysical->add( outerAbsorberPhysical);
     outerPhysical->add( new GeoIdentifierTag( 1 ) );
-    outerPhysical->add( new GeoTransform( HepGeom::Transform3D() ) );
     outerPhysical->add( outerElectrodePhysical ); 
     {
       StoredPhysVol *sPhysVol = new StoredPhysVol(outerPhysical);
@@ -661,47 +654,44 @@ GeoVFullPhysVol* LArGeo::EMECModuleConstruction::GetEnvelope()
 
   // V.N. --> Support selected
 
-  z0 = zWheelFrontFace - 61.*CLHEP::mm;
+  z0 = zWheelFrontFace - 61.*GeoModelKernelUnits::mm;
   EMECSupportConstruction *fsc = new EMECSupportConstruction( FrontIndx, true, "LAr::EMEC::", M_PI/2 );
   GeoPhysVol* physicalFSM = fsc->GetEnvelope();
   emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-  emecMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D( z0 ) ) );
+  emecMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D( z0 ) ) );
   emecMotherPhysical->add( physicalFSM );
 
-  z0 = zWheelFrontFace + 514.*CLHEP::mm + 55.*CLHEP::mm;
+  z0 = zWheelFrontFace + 514.*GeoModelKernelUnits::mm + 55.*GeoModelKernelUnits::mm;
   EMECSupportConstruction *bsc = new EMECSupportConstruction( BackIndx, true, "LAr::EMEC::", M_PI/2 );
   GeoPhysVol *physicalBSM = bsc->GetEnvelope();
   emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-  CLHEP::HepRotation rotBSM;
-  rotBSM.rotateX( -M_PI );
-  rotBSM.rotateZ( 2*M_PI/2 ); // != EMECConstruction ???
-  emecMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( rotBSM, 
-  	  						     CLHEP::Hep3Vector( 0., 0., z0 ) ) ) );
+  GeoTrf::Transform3D rotBSM(GeoTrf::RotateZ3D(2*M_PI/2)*GeoTrf::RotateX3D(-M_PI));
+  emecMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D(GeoTrf::Translate3D( 0., 0., z0 )*rotBSM ) ) );
   emecMotherPhysical->add( physicalBSM );
 
   if ( m_isOuterWheel ) {
-    z0 = zWheelFrontFace + 514.*CLHEP::mm/2;
+    z0 = zWheelFrontFace + 514.*GeoModelKernelUnits::mm/2;
     EMECSupportConstruction *osc = new EMECSupportConstruction( 2, true, "LAr::EMEC::", M_PI/2 );
     GeoPhysVol *physicalOSM = osc->GetEnvelope();
     emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-    emecMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D( z0 ) ) );  
+    emecMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D( z0 ) ) );  
     emecMotherPhysical->add( physicalOSM );
   }
  
   if ( m_isInnerWheel ) {
-    z0 = zWheelFrontFace + 514.*CLHEP::mm/2;
+    z0 = zWheelFrontFace + 514.*GeoModelKernelUnits::mm/2;
     EMECSupportConstruction *isc = new EMECSupportConstruction( 3, true, "LAr::EMEC::", M_PI/2 );
     GeoPhysVol *physicalISM = isc->GetEnvelope();
     emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-    emecMotherPhysical->add(new GeoTransform( HepGeom::TranslateZ3D( z0 ) ) )  ;  
+    emecMotherPhysical->add(new GeoTransform( GeoTrf::TranslateZ3D( z0 ) ) )  ;  
     emecMotherPhysical->add( physicalISM );
   }
  
-  z0 = zWheelFrontFace + 514.*CLHEP::mm/2;
+  z0 = zWheelFrontFace + 514.*GeoModelKernelUnits::mm/2;
   EMECSupportConstruction *msc = new EMECSupportConstruction( 4, true, "LAr::EMEC::", M_PI/2 );
   GeoPhysVol *physicalMSM = msc->GetEnvelope();
   emecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-  emecMotherPhysical->add(new GeoTransform( HepGeom::TranslateZ3D( z0 ) ) )  ;  
+  emecMotherPhysical->add(new GeoTransform( GeoTrf::TranslateZ3D( z0 ) ) )  ;  
   emecMotherPhysical->add( physicalMSM );  
 
   return emecMotherPhysical;
diff --git a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/LArDetectorConstructionTBEC.cxx b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/LArDetectorConstructionTBEC.cxx
index f455798a7800a6c5943a8ce0d604fbde77cd7790..f0b5264d749c38f26d96c7068ab90cb681de2629 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/LArDetectorConstructionTBEC.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoTBEC/src/LArDetectorConstructionTBEC.cxx
@@ -21,6 +21,8 @@
 #include "GeoModelKernel/GeoTransform.h"  
 #include "GeoModelKernel/GeoAlignableTransform.h"  
 #include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "GeoModelInterfaces/AbsMaterialManager.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
@@ -29,11 +31,6 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 
-// For transforms:
-#include "CLHEP/Geometry/Transform3D.h" 
-// For units:
-#include "CLHEP/Units/PhysicalConstants.h"
-
 // For the database:
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "RDBAccessSvc/IRDBRecord.h"
@@ -113,20 +110,20 @@ StoreGate interface");
   else if ( m_eta_cell > 43.5 ) m_eta_pos = 0.1*( m_eta_cell - 43.5 ) + 2.5; // Inner Wheel
   else m_eta_pos = 0.025*( m_eta_cell - 0.5 ) + 1.425; // Outer Wheel
 
-  if ( m_eta_cell <= 43.5 ) m_phi_pos = -( ( m_phi_cell - 16. )*1.40625 + 0.46875 )*CLHEP::deg; // Outer Wheel
-  else m_phi_pos = -( 4*( m_phi_cell - 4. )*1.40625 + 0.46875 )*CLHEP::deg; // Inner Wheel
+  if ( m_eta_cell <= 43.5 ) m_phi_pos = -( ( m_phi_cell - 16. )*1.40625 + 0.46875 )*GeoModelKernelUnits::deg; // Outer Wheel
+  else m_phi_pos = -( 4*( m_phi_cell - 4. )*1.40625 + 0.46875 )*GeoModelKernelUnits::deg; // Inner Wheel
     
 
 /*
   printf( "LArDetectorConstructionTBEC\teta_cell = %6.2lf ( eta = %6.2lf     )\n", m_eta_cell, 
 m_eta_pos );
-  printf( "LArDetectorConstructionTBEC\tphi_cell = %6.2lf ( phi = %6.2lf CLHEP::deg )\n", m_phi_cell, 
-m_phi_pos/CLHEP::deg );
+  printf( "LArDetectorConstructionTBEC\tphi_cell = %6.2lf ( phi = %6.2lf GeoModelKernelUnits::deg )\n", m_phi_cell, 
+m_phi_pos/GeoModelKernelUnits::deg );
 */
 
 /*
-  printf( "LArDetectorConstructionTBEC\tModuleRotation = %6.2lf CLHEP::deg\n", m_ModuleRotation/CLHEP::deg );
-  printf( "LArDetectorConstructionTBEC\tYShift = %6.1lf CLHEP::mm\n", m_YShift/CLHEP::mm );
+  printf( "LArDetectorConstructionTBEC\tModuleRotation = %6.2lf GeoModelKernelUnits::deg\n", m_ModuleRotation/GeoModelKernelUnits::deg );
+  printf( "LArDetectorConstructionTBEC\tYShift = %6.1lf GeoModelKernelUnits::mm\n", m_YShift/GeoModelKernelUnits::mm );
 */
 }
 
@@ -169,8 +166,8 @@ GeoVPhysVol* LArGeo::LArDetectorConstructionTBEC::GetEnvelope()
   // Default values....
   m_hasLeadCompensator = false;
   m_hasPresampler = false;
-  m_ModuleRotation = 0.*CLHEP::deg;
-  m_YShift = 0.*CLHEP::mm;
+  m_ModuleRotation = 0.*GeoModelKernelUnits::deg;
+  m_YShift = 0.*GeoModelKernelUnits::mm;
  
   IRDBRecordset_ptr tbecGeometry   = m_pAccessSvc->getRecordsetPtr("TBECGeometry",detectorKey, detectorNode); 
   if ((*tbecGeometry).size()!=0) {
@@ -195,7 +192,7 @@ GeoVPhysVol* LArGeo::LArDetectorConstructionTBEC::GetEnvelope()
 
   std::string baseName = "LAr::TBEC::MotherVolume";
 
-  GeoBox* tbecMotherShape = new GeoBox( 5.*CLHEP::m, 5.*CLHEP::m, 15.*CLHEP::m );
+  GeoBox* tbecMotherShape = new GeoBox( 5.*GeoModelKernelUnits::m, 5.*GeoModelKernelUnits::m, 15.*GeoModelKernelUnits::m );
 
   const GeoLogVol* tbecMotherLogical =
     new GeoLogVol(baseName, tbecMotherShape, Air);
@@ -262,25 +259,25 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
   // accordingly.
 
   std::string tbecMotherName = baseName + "::MotherVolume";
-  GeoBox* tbecMotherShape = new GeoBox( 5.*CLHEP::m, 5.*CLHEP::m, 15.*CLHEP::m  );
+  GeoBox* tbecMotherShape = new GeoBox( 5.*GeoModelKernelUnits::m, 5.*GeoModelKernelUnits::m, 15.*GeoModelKernelUnits::m  );
   const GeoLogVol* tbecMotherLogical = new GeoLogVol( tbecMotherName, tbecMotherShape, Air );
   GeoFullPhysVol* tbecMotherPhysical = new GeoFullPhysVol( tbecMotherLogical );
   
-  double xcent = -120.*CLHEP::cm, zcent = 395.7*CLHEP::cm;
-  double zfface = zcent - 60.09*CLHEP::cm;
+  double xcent = -120.*GeoModelKernelUnits::cm, zcent = 395.7*GeoModelKernelUnits::cm;
+  double zfface = zcent - 60.09*GeoModelKernelUnits::cm;
   log << MSG::DEBUG << "eta = " << m_eta_pos;
   if ( m_eta_pos > 5. ) m_eta_pos = 0.;
   else m_eta_pos = 2*atan( exp( -m_eta_pos ) );
-  log << ", positioning cryostat with angle " << m_eta_pos*(1./CLHEP::deg) << " CLHEP::deg";
+  log << ", positioning cryostat with angle " << m_eta_pos*(1./GeoModelKernelUnits::deg) << " GeoModelKernelUnits::deg";
   log << endmsg;
   
   // Tubular axis, dummy
   
   if ( AXIS_ON ) {
   
-     double axisZHalfLength = 5*CLHEP::m;
+     double axisZHalfLength = 5*GeoModelKernelUnits::m;
   
-     GeoTube* axisShape = new GeoTube( 0.*CLHEP::cm, 1.*CLHEP::cm, axisZHalfLength );
+     GeoTube* axisShape = new GeoTube( 0.*GeoModelKernelUnits::cm, 1.*GeoModelKernelUnits::cm, axisZHalfLength );
   
      // x-axis
      std::string XAxisName = baseName + "::XAxis";
@@ -288,8 +285,7 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
      GeoPhysVol* XAxisPhysVol = new GeoPhysVol( XAxisLogical );
   
      tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-     tbecMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( 90.*CLHEP::deg ), 
-  							        CLHEP::Hep3Vector( axisZHalfLength, 0.*CLHEP::m, 0.*CLHEP::m ) ) ) );
+     tbecMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translation3D( axisZHalfLength, 0.*GeoModelKernelUnits::m, 0.*GeoModelKernelUnits::m ) *GeoTrf::RotateY3D( 90.*GeoModelKernelUnits::deg )) ) );
      tbecMotherPhysical->add( XAxisPhysVol );
   
      // y-axis
@@ -298,8 +294,7 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
      GeoPhysVol* YAxisPhysVol = new GeoPhysVol( YAxisLogical );
   
      tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-     tbecMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationX( -90.*CLHEP::deg ),
-  					     		        CLHEP::Hep3Vector( 0.*CLHEP::m, axisZHalfLength, 0.*CLHEP::m ) ) ) );
+     tbecMotherPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translation3D( 0.*GeoModelKernelUnits::m, axisZHalfLength, 0.*GeoModelKernelUnits::m )*GeoTrf::RotateX3D( -90.*GeoModelKernelUnits::deg ) ) ) );
      tbecMotherPhysical->add( YAxisPhysVol );
   
      //z-axis
@@ -308,7 +303,7 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
      GeoPhysVol* ZAxisPhysVol = new GeoPhysVol( ZAxisLogical );
   
      tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-     tbecMotherPhysical->add( new GeoTransform( HepGeom::TranslateZ3D( axisZHalfLength ) ) );
+     tbecMotherPhysical->add( new GeoTransform( GeoTrf::TranslateZ3D( axisZHalfLength ) ) );
      tbecMotherPhysical->add( ZAxisPhysVol );
   }
  
@@ -316,13 +311,16 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
   
   if ( m_hasLeadCompensator ) {
      std::string CompensatorName = baseName + "::LeadCompensator";
-     GeoBox* CompensatorShape = new GeoBox( 152.*CLHEP::cm, 195.*CLHEP::cm, 0.56*CLHEP::cm );
+     GeoBox* CompensatorShape = new GeoBox( 152.*GeoModelKernelUnits::cm, 195.*GeoModelKernelUnits::cm, 0.56*GeoModelKernelUnits::cm );
      const GeoLogVol* CompensatorLogical = new GeoLogVol( CompensatorName, CompensatorShape, Lead );
      GeoPhysVol* CompensatorPhysical = new GeoPhysVol( CompensatorLogical );
 	
      tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-     tbecMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( m_eta_pos ),
-						   		CLHEP::Hep3Vector( xcent, 0.*CLHEP::cm, 300.*CLHEP::cm ).rotateY( m_eta_pos ) ) ) );
+
+     GeoTrf::Vector3D tmpvec1(xcent, 0., 300.*GeoModelKernelUnits::cm);
+     GeoTrf::Vector3D tmpvec1Rotated = GeoTrf::RotateY3D(m_eta_pos)*tmpvec1;
+     GeoTrf::Translate3D tmpxf1(tmpvec1Rotated.x(),tmpvec1Rotated.y(),tmpvec1Rotated.z());
+     tbecMotherPhysical->add(new GeoTransform( tmpxf1 * GeoTrf::RotateY3D(m_eta_pos)));
      tbecMotherPhysical->add( CompensatorPhysical );
   }
   
@@ -333,16 +331,18 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
   GeoPhysVol* LArPhysical = cryoConstruction.GetLArPhysical();
   
   tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-  tbecMotherPhysical->add( new GeoTransform( HepGeom::Transform3D( CLHEP::HepRotationY( m_eta_pos ),
-						   	     CLHEP::Hep3Vector( xcent, 0.*CLHEP::cm, zcent ).rotateY( m_eta_pos ) ) ) );
+  GeoTrf::Vector3D tmpvec2(xcent, 0., zcent);
+  GeoTrf::Vector3D tmpvec2Rotated = GeoTrf::RotateY3D(m_eta_pos)*tmpvec2;
+  GeoTrf::Translate3D tmpxf2(tmpvec2Rotated.x(),tmpvec2Rotated.y(),tmpvec2Rotated.z());
+  tbecMotherPhysical->add(new GeoTransform( tmpxf2 * GeoTrf::RotateY3D(m_eta_pos)));
   tbecMotherPhysical->add( cryoPhys );
   
   // Beam chambers
   
   log << MSG::VERBOSE << "Creating beam chambers ..." << std::endl;
   
-  const double beamCZ[ 4 ] = { 17.9*CLHEP::m, 7.673*CLHEP::m, 1.352*CLHEP::m, .256*CLHEP::m };
-  const double beamCSize = 11.*CLHEP::cm, beamCTh = 28*CLHEP::mm; // divided by 2, for half-length
+  const double beamCZ[ 4 ] = { 17.9*GeoModelKernelUnits::m, 7.673*GeoModelKernelUnits::m, 1.352*GeoModelKernelUnits::m, .256*GeoModelKernelUnits::m };
+  const double beamCSize = 11.*GeoModelKernelUnits::cm, beamCTh = 28*GeoModelKernelUnits::mm; // divided by 2, for half-length
   
   GeoBox* BeamCShape = new GeoBox( beamCSize, beamCSize, beamCTh );
   for ( int i = 0; i < 4; i++ ) {
@@ -352,15 +352,15 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
   	GeoPhysVol* BeamCPhysical = new GeoPhysVol( BeamCLogical );
 	
 	tbecMotherPhysical->add( new GeoIdentifierTag( 1 ) );
-  	tbecMotherPhysical->add( new GeoTransform( HepGeom::Translate3D( 0.*CLHEP::cm, 0.*CLHEP::cm, zfface - beamCZ[ i ] ) ) );
+  	tbecMotherPhysical->add( new GeoTransform( GeoTrf::Translate3D( 0.*GeoModelKernelUnits::cm, 0.*GeoModelKernelUnits::cm, zfface - beamCZ[ i ] ) ) );
   	tbecMotherPhysical->add( BeamCPhysical );
   } 
   
   // End cap module
 	log << MSG::DEBUG << std::endl
-	    << "Module deviation: " << m_ModuleRotation * (1./CLHEP::deg) << " CLHEP::deg" << std::endl
-            << "Phi position: " << m_phi_pos * (1./CLHEP::deg) << " CLHEP::deg" << std::endl
-            << "Y shift: " << m_YShift * (1./CLHEP::mm) << " CLHEP::mm"
+	    << "Module deviation: " << m_ModuleRotation * (1./GeoModelKernelUnits::deg) << " GeoModelKernelUnits::deg" << std::endl
+            << "Phi position: " << m_phi_pos * (1./GeoModelKernelUnits::deg) << " GeoModelKernelUnits::deg" << std::endl
+            << "Y shift: " << m_YShift * (1./GeoModelKernelUnits::mm) << " GeoModelKernelUnits::mm"
             << endmsg;
   
   // z = 0 in emecMother is at active region's front face
@@ -371,20 +371,17 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
   StatusCode status=detStore->record(sPhysVol,"EMEC_POS");
   if(!status.isSuccess()) throw std::runtime_error ("Cannot store EMEC_POS");  
 
-
-  CLHEP::HepRotation Mrot;
-  Mrot.rotateY( m_ModuleRotation );
-  Mrot.rotateZ( m_phi_pos + 90*CLHEP::deg );
-  CLHEP::Hep3Vector pos( -xcent, m_YShift, -51.4/2*CLHEP::cm );
+  GeoTrf::Transform3D Mrot(GeoTrf::RotateZ3D( m_phi_pos + 90*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(m_ModuleRotation));
+  GeoTrf::Vector3D pos( -xcent, m_YShift, -51.4/2*GeoModelKernelUnits::cm );
   
   if ( LArPhysical != 0 ) {
   
      LArPhysical->add( new GeoIdentifierTag( 1 ) );     
-     LArPhysical->add( new GeoTransform( HepGeom::Transform3D( Mrot, pos ) ) );
+     LArPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translation3D(pos(0),pos(1),pos(2)))*Mrot  ) );
      LArPhysical->add( emecEnvelope );			  		
   }
   
-  pos-= CLHEP::Hep3Vector( 0.*CLHEP::mm, 0.*CLHEP::mm, 61.*CLHEP::mm +2.*CLHEP::mm +13.5*CLHEP::mm );
+  pos-= GeoTrf::Vector3D( 0.*GeoModelKernelUnits::mm, 0.*GeoModelKernelUnits::mm, 61.*GeoModelKernelUnits::mm +2.*GeoModelKernelUnits::mm +13.5*GeoModelKernelUnits::mm );
   
   if ( m_hasPresampler ) {
 
@@ -398,7 +395,7 @@ GeoFullPhysVol* LArGeo::LArDetectorConstructionTBEC::createEnvelope()
     if ( LArPhysical != 0 ) {
      
        LArPhysical->add( new GeoIdentifierTag( 1 ) );
-       LArPhysical->add( new GeoTransform( HepGeom::Transform3D( Mrot, pos ) ) );
+       LArPhysical->add( new GeoTransform( GeoTrf::Transform3D( GeoTrf::Translation3D(pos(0),pos(1),pos(2)))*Mrot  ) );
        LArPhysical->add( PresamplerEnvelope );
     }
   }
diff --git a/LArCalorimeter/LArGeoModel/LArHV/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArHV/CMakeLists.txt
index edbe76fe6d7232b2e5ce359c947711d75dded1e7..9253cd50ceee92258519445d8cf4b60495e19f61 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArHV/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Control/IOVSvc
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           PRIVATE
                           Database/AthenaPOOL/AthenaPoolUtilities
                           DetectorDescription/Identifier
@@ -18,10 +17,14 @@ atlas_depends_on_subdirs( PUBLIC
                           LArCalorimeter/LArCabling
                           LArCalorimeter/LArIdentifier )
 
+# External dependencies:
+find_package( GeoModel )
+
 # Component(s) in the package:
 atlas_add_library( LArHV
                    src/*.cpp
                    PUBLIC_HEADERS LArHV
-                   LINK_LIBRARIES AthenaKernel GeoModelKernel IOVSvcLib StoreGateLib SGtests LArCablingLib
+		   INCLUDE_DIRS ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} AthenaKernel IOVSvcLib StoreGateLib SGtests LArCablingLib
                    PRIVATE_LINK_LIBRARIES AthenaPoolUtilities Identifier GaudiKernel LArIdentifier )
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/CMakeLists.txt
index c8973510949dd2781d8c37477d3ab2b0e110155e..e1965408a201f43964e81f95b0741d9abd052fea 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( LArReadoutGeometry )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoPrimitives
                           DetectorDescription/Identifier
                           LArCalorimeter/LArGeoModel/LArHV
@@ -24,6 +23,7 @@ find_package( Boost COMPONENTS filesystem thread system )
 find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( LArReadoutGeometry
@@ -32,6 +32,6 @@ atlas_add_library( LArReadoutGeometry
                    INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                    PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaKernel GeoModelKernel GeoPrimitives Identifier LArHV StoreGateLib SGtests
+                   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoPrimitives Identifier LArHV StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelUtilities GaudiKernel )
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBAccordionDetails.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBAccordionDetails.h
index 2d22c71dec5780592a14ff5aa9b76420f23fea38..dbf38f1934efcd158f15cca48a7a3a7be1fb9963 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBAccordionDetails.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBAccordionDetails.h
@@ -2,8 +2,9 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBAccordionDetails_h
-#define EMBAccordionDetails_h
+#ifndef LARREADOUTGEOMETRY_EMBACCORDIONDETAILS_H
+#define LARREADOUTGEOMETRY_EMBACCORDIONDETAILS_H
+
 class GeoStraightAccSection;
 class EMBAccordionDetails {
   
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBBasicReadoutNumbers.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBBasicReadoutNumbers.h
index fa0ea1e790795dd797e4a9c0b79ed4142d881815..c99dc41102737d8d6274e6272feba665bd2a929c 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBBasicReadoutNumbers.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBBasicReadoutNumbers.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBBasicReadoutNumbers_h
-#define EMBBasicReadoutNumbers_h 1
+#ifndef LARREADOUTGEOMETRY_EMBBASICREADOUTNUMBERS_H
+#define LARREADOUTGEOMETRY_EMBBASICREADOUTNUMBERS_H
 #include <vector>
 /**
  *	@brief This is a collection of numbers used to create the cell
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
index bffb44e0c515dfcc4c18260eca4df01e1d4fd84c..d0c206b15a5a96f39b7decdb45e0b04b7ea42f0d 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBCell_h
-#define EMBCell_h 1
+#ifndef LARREADOUTGEOMETRY_EMBCELL_H
+#define LARREADOUTGEOMETRY_EMBCELL_H
 
 #include "LArReadoutGeometry/EMBDetDescr.h"
 #include "LArReadoutGeometry/EMBHVPathologies.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCellConstLink.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCellConstLink.h
index 30cc8560f96a51d931e1685802d1d3c7e1d457be..3945cd2167b36f9aa8298fca232a3d99b468c056 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCellConstLink.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCellConstLink.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBCellConstLink_h
-#define EMBCellConstLink_h 1
+#ifndef LARREADOUTGEOMETRY_EMBCELLCONSTLINK_H
+#define LARREADOUTGEOMETRY_EMBCELLCONSTLINK_H
 #include "GeoModelKernel/ConstLink.h"
 #include "LArReadoutGeometry/EMBCell.h"
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetDescr.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetDescr.h
index 3ab4e848410e3a8b2e8f3e03d146110e8fe9695c..24af8e170e6ab348dfee2816a7632781bce347aa 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetDescr.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetDescr.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBDetDescr_h
-#define EMBDetDescr_h 1
+#ifndef LARREADOUTGEOMETRY_EMBDETDESCR_H
+#define LARREADOUTGEOMETRY_EMBDETDESCR_H
 #include <vector>
 #include "GeoModelKernel/CellBinning.h"
 #include "GeoModelKernel/RCBase.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
index 24a63de1ff77022c8267eaeb5c7666fce0a01245..36d6281efbeb197de40dd76a65bda5a0c6295b9d 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBDetectorManager_h
-#define EMBDetectorManager_h 1
+#ifndef LARREADOUTGEOMETRY_EMBDETECTORMANAGER_H
+#define LARREADOUTGEOMETRY_EMBDETECTORMANAGER_H
 #include "AthenaKernel/CLASS_DEF.h"
 #include <vector>
 #include "GeoModelKernel/GeoVDetectorManager.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorRegion.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorRegion.h
index b937471a15389b4e82fe71efb7985d0af0adf21e..b21080241a3abda57591750168dfaf6beb58eb98 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorRegion.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorRegion.h
@@ -2,20 +2,20 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBDetectorRegion_h
-#define EMBDetectorRegion_h 1
+#ifndef LARREADOUTGEOMETRY_EMBDETECTORREGION_H
+#define LARREADOUTGEOMETRY_EMBDETECTORREGION_H
 #include "LArReadoutGeometry/EMBCellConstLink.h"
 #include "LArReadoutGeometry/EMBDetDescr.h"
 #include "GeoModelKernel/GeoVDetectorElement.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoPrimitives/GeoPrimitives.h"
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
-/** 
+/**
+ * @class EMBDetectorRegion
+ *
  *      @brief Description of a region of homogenous granularity in the 
  *      electromagnetic barrel calorimeter
- */
-
-/**
+ *
  *	This class combines a description of the cell
  *	granularity with a physical volume to create a
  *	description of an EMB region positioned within ATLAS.
@@ -92,12 +92,12 @@ class EMBDetectorRegion : public GeoVDetectorElement
   /**
    *    @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getAbsoluteTransform () const;
    
   /**
    *    @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getDefAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getDefAbsoluteTransform () const;
    
   /**
    *	@brief The endcap index.  0=negative, 1=positive.
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBHVPathologies.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBHVPathologies.h
index a81deb08a18b233a15523060faf0fe86180a3b32..bda7875fba2202788d19c5e7c93831dd72a29a4f 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBHVPathologies.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBHVPathologies.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _EMBHVPathologies_h_
-#define _EMBHVPathologies_h_
+#ifndef LARREADOUTGEOMETRY_EMBHVPATHOLOGIES_H
+#define LARREADOUTGEOMETRY_EMBHVPATHOLOGIES_H
 #include "GeoModelKernel/RCBase.h"
 #include "GeoModelKernel/ConstLink.h"
 // --------------------------------------------------------
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
index d3a37620ee8a050a1c11f1343918a3354faab910..b6ff15020e84b91c89e9531c793ad77a0af4542c 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECCell_h
-#define EMECCell_h 1
+#ifndef LARREADOUTGEOMETRY_EMECCELL_H
+#define LARREADOUTGEOMETRY_EMECCELL_H
 #include <iostream>
 #include "LArReadoutGeometry/EMECDetDescr.h"
 #include "LArReadoutGeometry/EMECDetectorManager.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCellConstLink.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCellConstLink.h
index b9ea953e2ccf86f348f85355863a4269d44577d5..3b8865fc7c600dbb987d3c5860556a18237ccd5d 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCellConstLink.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCellConstLink.h
@@ -2,57 +2,20 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
+#ifndef LARREADOUTGEOMETRY_EMECCELLCONSTLINK_H
+#define LARREADOUTGEOMETRY_EMECCELLCONSTLINK_H
 
-//## begin module%44662CA903B1.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%44662CA903B1.CLHEP::cm
-
-//## begin module%44662CA903B1.cp preserve=no
-//## end module%44662CA903B1.cp
-
-//## Module: EMECCellConstLink%44662CA903B1; Pseudo Package specification
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCellConstLink.h
-
-#ifndef EMECCellConstLink_h
-#define EMECCellConstLink_h 1
-
-//## begin module%44662CA903B1.additionalIncludes preserve=no
-//## end module%44662CA903B1.additionalIncludes
-
-//## begin module%44662CA903B1.includes preserve=yes
 #include "LArReadoutGeometry/EMECCell.h"
-//## end module%44662CA903B1.includes
-
-// ConstLink
 #include "GeoModelKernel/ConstLink.h"
-//## begin module%44662CA903B1.additionalDeclarations preserve=yes
-//## end module%44662CA903B1.additionalDeclarations
-
-
-//## begin EMECCellConstLink%44662CA903B1.preface preserve=yes
-//## end EMECCellConstLink%44662CA903B1.preface
-
-//## Class: EMECCellConstLink%44662CA903B1; Instantiated Class
-//	Smart Pointer to EMEC Cells.  This reference counted
-//	link allocates on demand. It audits the total pointer
-//	count and collects the garbage when nobody's looking.
-//## Category: LArReadoutGeometry%445002CB020C
-//## Persistence: Transient
-//## Cardinality/Multiplicity: n
-
-
-
-typedef ConstLink< EMECCell  > EMECCellConstLink;
-
-//## begin EMECCellConstLink%44662CA903B1.postscript preserve=yes
-//## end EMECCellConstLink%44662CA903B1.postscript
 
-//## begin module%44662CA903B1.epilog preserve=yes
-//## end module%44662CA903B1.epilog
+/**
+ * @class EMECCellConstLink
+ *
+ * @brief Smart Pointer to EMEC Cells.  This reference counted
+ *	link allocates on demand. It audits the total pointer
+ *	count and collects the garbage when nobody's looking.
+ */
 
+typedef ConstLink<EMECCell> EMECCellConstLink;
 
 #endif
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetDescr.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetDescr.h
index e8eeb8ed29c2f0a54b6ec129a2977b0df4174fde..79b215df8f8f665667c17617f3a11d16e849e05f 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetDescr.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetDescr.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECDetDescr_h
-#define EMECDetDescr_h 1
+#ifndef LARREADOUTGEOMETRY_EMECDETDESCR_H
+#define LARREADOUTGEOMETRY_EMECDETDESCR_H
 #include "GeoModelKernel/CellBinning.h"
 #include <vector>
 #include "GeoModelKernel/RCBase.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
index b69b7c1645960cb1247a82672d07b2597f2a7fb5..1b3a1118a557c6e256613439d696ead8112fb755 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECDetectorManager_h
-#define EMECDetectorManager_h 1
+#ifndef LARREADOUTGEOMETRY_EMECDETECTORMANAGER_H
+#define LARREADOUTGEOMETRY_EMECDETECTORMANAGER_H
 #include "AthenaKernel/CLASS_DEF.h"
 #include "GeoModelKernel/GeoVDetectorManager.h"
 #include "LArHV/EMECHVManager.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorRegion.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorRegion.h
index eedcfc70f59921311b2be95021ece2b0ba9c0371..36764678130615e583a77aada6631e3e55783245 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorRegion.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorRegion.h
@@ -2,20 +2,22 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECDetectorRegion_h
-#define EMECDetectorRegion_h 1
+#ifndef LARREADOUTGEOMETRY_EMECDETECTORREGION_H
+#define LARREADOUTGEOMETRY_EMECDETECTORREGION_H
 #include "LArReadoutGeometry/EMECCellConstLink.h"
 #include "LArReadoutGeometry/EMECDetDescr.h"
 #include "GeoModelKernel/GeoVDetectorElement.h"
-
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoPrimitives/GeoPrimitives.h"
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
-/** 
- *      @brief Description of a region of homogenous granularity in the 
- *      electromagnetic endcap calorimeter
- */
+#include "CLHEP/Geometry/Point3D.h"
 
 /**
+ * @class EMECDetectorRegion
+ * 
+ *      @brief Description of a region of homogenous granularity in the 
+ *      electromagnetic endcap calorimeter
+ *
  * This class combines a description of the cell	
  * granularity with a physical volume to create a
  * description of an EMEC region positioned within ATLAS.
@@ -23,7 +25,6 @@
  */
 
 
-
 class EMECDetectorRegion : public GeoVDetectorElement  
 {
   
@@ -35,7 +36,10 @@ class EMECDetectorRegion : public GeoVDetectorElement
   /**
    * @brief	Constructor.
    */
-  EMECDetectorRegion (const GeoVFullPhysVol *physVol, const EMECDetDescr *emecDescriptor, DetectorSide endcap, double projectivityDisplacement = 4*CLHEP::cm);
+  EMECDetectorRegion(const GeoVFullPhysVol *physVol
+		     , const EMECDetDescr *emecDescriptor
+		     , DetectorSide endcap
+		     , double projectivityDisplacement = 4*GeoModelKernelUnits::cm);
 
   /**
    * @brief    Destructor    
@@ -90,12 +94,12 @@ class EMECDetectorRegion : public GeoVDetectorElement
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getAbsoluteTransform () const;
       
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getDefAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getDefAbsoluteTransform () const;
       
   /**
    * @brief Returns the position of the center of the reference
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALDetectorManager.h
index 70901e31b5fe820ed54f0783653a86eb35b80ad7..e8002d41a3f9ddf2eeeee73c2963f9205918d4de 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALDetectorManager.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef FCALDetectorManager_h
-#define FCALDetectorManager_h 1
+#ifndef LARREADOUTGEOMETRY_FCALDETECTORMANAGER_H
+#define LARREADOUTGEOMETRY_FCALDETECTORMANAGER_H
 #include "LArReadoutGeometry/FCAL_ChannelMap.h"
 #include "LArReadoutGeometry/FCALModule.h"
 #include "AthenaKernel/CLASS_DEF.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALModule.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALModule.h
index 57c2be06ea0c54d431afb35d993c95dc42f26621..b86a754eadb337ab792e9e0c4dddd1325bc10de0 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALModule.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALModule.h
@@ -2,20 +2,24 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef FCALModule_h
-#define FCALModule_h 1
+#ifndef LARREADOUTGEOMETRY_FCALMODULE_H
+#define LARREADOUTGEOMETRY_FCALMODULE_H
 #include <vector>
 #include "Identifier/Identifier.h"
 #include "LArReadoutGeometry/FCALTile.h"
 #include "GeoModelKernel/GeoVDetectorElement.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoPrimitives/GeoPrimitives.h"
+
 class FCALDetectorManager;
 
 /**
+ *  @class FCALModule
+ *
  *      @brief Description of an FCAL Module
- */
-
-/**	This class combines a description of the cell
+ *
+ *	This class combines a description of the cell
  *	granularity with a physical volume to create a
  *	description of an FCAL module positioned within ATLAS.
  *	It provides access to the FCAL Tiles.
@@ -38,7 +42,10 @@ class FCALModule : public GeoVDetectorElement
   /**
    * @brief Constructor
    */
-  FCALModule (const GeoVFullPhysVol *physVol, Module module, Endcap endcap, double projectivityDisplacement = 4*CLHEP::cm);
+  FCALModule (const GeoVFullPhysVol *physVol
+	      , Module module
+	      , Endcap endcap
+	      , double projectivityDisplacement = 4*GeoModelKernelUnits::cm);
     
   /**
    * @brief Desctructor
@@ -93,12 +100,12 @@ class FCALModule : public GeoVDetectorElement
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getAbsoluteTransform () const;
       
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getDefAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getDefAbsoluteTransform () const;
 
   /**
    * @brief Returns the absolute transform of this element.
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTile.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTile.h
index eb9fb30a26cebabfb5bfc2893e7d16b82a0261a9..23a227be49c185360fe177b6814e670f4121ad13 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTile.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTile.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef FCALTile_h
-#define FCALTile_h 1
+#ifndef LARREADOUTGEOMETRY_FCALTILE_H
+#define LARREADOUTGEOMETRY_FCALTILE_H
 #include "LArReadoutGeometry/FCAL_ChannelMap.h"
 #include "LArHV/FCALHVModule.h"
 #include "LArReadoutGeometry/FCALTubeConstLink.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTube.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTube.h
index 40032f7600c9fb9ff58731d57237574dce9f7a6c..719f0cbdc3b2dae690196216a5fac7765f5ab800 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTube.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTube.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _FCALTube_h_
-#define _FCALTube_h_
+#ifndef LARREADOUTGEOMETRY_FCALTUBE_H
+#define LARREADOUTGEOMETRY_FCALTUBE_H
 
 #include "GeoModelKernel/RCBase.h"
 //
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTubeConstLink.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTubeConstLink.h
index bfdb90423304eaf4d627330d3b01ad8ee088351e..d5f74eb68a9c10529dccbe740e506b4b66935697 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTubeConstLink.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCALTubeConstLink.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _FCALTubeConstLink_h_
-#define _FCALTubeConstLink_h_
+#ifndef LARREADOUTGEOMETRY_FCALTUBECONSTLINK_H
+#define LARREADOUTGEOMETRY_FCALTUBECONSTLINK_H
 #include "LArReadoutGeometry/FCALTube.h"
 #include "GeoModelKernel/ConstLink.h"
 typedef ConstLink<FCALTube> FCALTubeConstLink;
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h
index 93b5a5654310b0a25c3498102f30b709ec7c219f..5193bc525e46edb0d968c9e8d7ba53f2de92595b 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h
@@ -12,8 +12,8 @@
 //    Feb-2002 R.Sobie    Use same FCAL geometry files as simulation 
 // ***************************************************************************
 
-#ifndef LARDETDESCR_FCAL_CHANNELMAP_H
-#define LARDETDESCR_FCAL_CHANNELMAP_H
+#ifndef LARREADOUTGEOMETRY_FCAL_CHANNELMAP_H
+#define LARREADOUTGEOMETRY_FCAL_CHANNELMAP_H
 
 
 //<<<<<< INCLUDES                                                       >>>>>>
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCell.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCell.h
index 2c84b67fcee7a521a72d10a27b721db49b35ec3f..f5a02ad5e82700d6c5563a2f9e28a916b9638cce 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCell.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCell.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECCell_h
-#define HECCell_h 1
+#ifndef LARREADOUTGEOMETRY_HECCELL_H
+#define LARREADOUTGEOMETRY_HECCELL_H
 #include "LArReadoutGeometry/HECDetDescr.h"
 #include "GeoModelKernel/CellBinning.h"
 #include "GeoModelKernel/RCBase.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCellConstLink.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCellConstLink.h
index 251a60a1f370b511e7673457159ae2d2e08a7e3c..ead96ae5a6f260804564d0c86dd4a2ec21e220b9 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCellConstLink.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCellConstLink.h
@@ -2,57 +2,20 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
+#ifndef LARREADOUTGEOMETRY_HECCELLCONSTLINK_H
+#define LARREADOUTGEOMETRY_HECCELLCONSTLINK_H
 
-//## begin module%445D13DC008E.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%445D13DC008E.CLHEP::cm
-
-//## begin module%445D13DC008E.cp preserve=no
-//## end module%445D13DC008E.cp
-
-//## Module: HECCellConstLink%445D13DC008E; Pseudo Package specification
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECCellConstLink.h
-
-#ifndef HECCellConstLink_h
-#define HECCellConstLink_h 1
-
-//## begin module%445D13DC008E.additionalIncludes preserve=no
-//## end module%445D13DC008E.additionalIncludes
-
-//## begin module%445D13DC008E.includes preserve=yes
 #include "LArReadoutGeometry/HECCell.h"
-//## end module%445D13DC008E.includes
-
-// ConstLink
 #include "GeoModelKernel/ConstLink.h"
-//## begin module%445D13DC008E.additionalDeclarations preserve=yes
-//## end module%445D13DC008E.additionalDeclarations
-
-
-//## begin HECCellConstLink%445D13DC008E.preface preserve=yes
-//## end HECCellConstLink%445D13DC008E.preface
-
-//## Class: HECCellConstLink%445D13DC008E; Instantiated Class
-//	Smart Pointer to HEC Cells.  This reference counted link
-//	allocates on demand. It audits the total pointer count
-//	and collects the garbage when nobody's looking.
-//## Category: LArReadoutGeometry%445002CB020C
-//## Persistence: Transient
-//## Cardinality/Multiplicity: n
-
-
-
-typedef ConstLink< HECCell  > HECCellConstLink;
-
-//## begin HECCellConstLink%445D13DC008E.postscript preserve=yes
-//## end HECCellConstLink%445D13DC008E.postscript
 
-//## begin module%445D13DC008E.epilog preserve=yes
-//## end module%445D13DC008E.epilog
+/**
+ * @Class: HECCellConstLink 
+ * 
+ *	Smart Pointer to HEC Cells.  This reference counted link
+ *	allocates on demand. It audits the total pointer count
+ *	and collects the garbage when nobody's looking.
+ */
 
+typedef ConstLink<HECCell> HECCellConstLink;
 
 #endif
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetDescr.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetDescr.h
index 13f38ffae5af2ef44d66513687de0be65789d6e2..2955c2fdc70618a756e062e34019734ea748dbff 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetDescr.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetDescr.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECDetDescr_h
-#define HECDetDescr_h 1
+#ifndef LARREADOUTGEOMETRY_HECDETDESCR_H
+#define LARREADOUTGEOMETRY_HECDETDESCR_H
 #include "LArReadoutGeometry/HECDetectorManager.h"
 #include "GeoModelKernel/CellBinning.h"
 #include "GeoModelKernel/RCBase.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorManager.h
index 364fc91e78bb6e265402034643010b74337e30ee..62d552a2d42f39d2006981710b417a3ace89adbf 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorManager.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECDetectorManager_h
-#define HECDetectorManager_h 1
+#ifndef LARREADOUTGEOMETRY_HECDETECTORMANAGER_H
+#define LARREADOUTGEOMETRY_HECDETECTORMANAGER_H
 #include "AthenaKernel/CLASS_DEF.h"
 #include "LArReadoutGeometry/HECLongBlock.h"
 #include "GeoModelKernel/GeoVDetectorManager.h"
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorRegion.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorRegion.h
index c50e9d3010209fecb4b49c605dc0711aaf1b7b14..8be83da82bdb142ebf958e9ffab2a2e2d18ae1af 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorRegion.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECDetectorRegion.h
@@ -2,20 +2,22 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECDetectorRegion_h
-#define HECDetectorRegion_h 1
+#ifndef LARREADOUTGEOMETRY_HECDETECTORREGION_H
+#define LARREADOUTGEOMETRY_HECDETECTORREGION_H
 #include "LArReadoutGeometry/HECDetDescr.h"
 #include "LArReadoutGeometry/HECCellConstLink.h"
 #include "GeoModelKernel/GeoVDetectorElement.h"
-
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoPrimitives/GeoPrimitives.h"
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
-/** 
- *      @brief Description of a region of homogenous granularity in the 
- *      hadronic endcap calorimeter
- */
+#include "CLHEP/Geometry/Point3D.h"
 
 /**
+ * @class HECDetectorRegion
+ *
+ * @brief Description of a region of homogenous granularity in the
+ *        hadronic endcap calorimeter
+ *
  *	This class combines a description of the cell
  *	granularity with a physical volume to create a
  *	description of a HEC region positioned within ATLAS.  It
@@ -37,7 +39,10 @@ class HECDetectorRegion : public GeoVDetectorElement
   /**
    * @brief Constructor.
    */
-  HECDetectorRegion (const GeoVFullPhysVol *physVol, const HECDetDescr *hecDescriptor, DetectorSide endcap, double projectivityDisplacement = 4*CLHEP::cm);
+  HECDetectorRegion (const GeoVFullPhysVol *physVol
+		     , const HECDetDescr *hecDescriptor
+		     , DetectorSide endcap
+		     , double projectivityDisplacement = 4*GeoModelKernelUnits::cm);
 
   /**
    * @brief Destructor
@@ -87,12 +92,12 @@ class HECDetectorRegion : public GeoVDetectorElement
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getAbsoluteTransform () const;
       
   /**
    * @brief Returns the absolute transform of this element.
    */
-  const HepGeom::Transform3D &  getDefAbsoluteTransform () const;
+  const GeoTrf::Transform3D &  getDefAbsoluteTransform () const;
 
   /**
    * @brief Returns the absolute transform of this element.
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECLongBlock.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECLongBlock.h
index 4d8a304463f2a35264f9321e3f0362a2eef0c236..281f8cd0a4d68530d11b0ca6ca5a68848af49503 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECLongBlock.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECLongBlock.h
@@ -2,16 +2,16 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECLongBlock_h
-#define HECLongBlock_h 1
+#ifndef LARREADOUTGEOMETRY_HECLONGBLOCK_H
+#define LARREADOUTGEOMETRY_HECLONGBLOCK_H
 #include <vector>
 #include "LArReadoutGeometry/HECRadialSegment.h"
 
 /**
+ * @class HECLongBlock
+ *
  *      @brief Description of HEC Longitudinal Block.
- */
-
-/**
+ *
  *	The HEC has longitudinal segments known as blocks.  Each
  *	block is sliced radially.  For a good picture of this,
  *	go here:
@@ -43,7 +43,14 @@ class HECLongBlock
   /**
    * @brief Constructor.
    */
-  HECLongBlock (unsigned int blockNum, double innerRad, double outerRad, double totalDepth, unsigned int nLarGaps, double frontPlateThick, double backPlateThick, const double etaRange[15]);
+  HECLongBlock (unsigned int blockNum
+		, double innerRad
+		, double outerRad
+		, double totalDepth
+		, unsigned int nLarGaps
+		, double frontPlateThick
+		, double backPlateThick
+		, const double etaRange[15]);
 
   /**
    * @brief Destructor
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECRadialSegment.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECRadialSegment.h
index bc358b4bf33e457bb4a9ad014ea85a3c5fc600bf..2afb32d67cf408758cf67d1170eddb3b21680895 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECRadialSegment.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/HECRadialSegment.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef HECRadialSegment_h
-#define HECRadialSegment_h 1
+#ifndef LARREADOUTGEOMETRY_HECRADIALSEGMENT_H
+#define LARREADOUTGEOMETRY_HECRADIALSEGMENT_H
 
 /**
  *      @brief Description of a radial segment of a HEC module.
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/LArDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/LArDetectorManager.h
index 49bf4d5411eb631d769ba261215c8755dd7bc370..afb574c8f47fc0479bc7f54f55b2a0cac475bf11 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/LArDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/LArDetectorManager.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef LArDetectorManager_h
-#define LArDetectorManager_h 1
+#ifndef LARREADOUTGEOMETRY_LARDETECTORMANAGER_H
+#define LARREADOUTGEOMETRY_LARDETECTORMANAGER_H
 #include "AthenaKernel/CLASS_DEF.h"
 #include "GeoModelKernel/GeoVDetectorManager.h"
 class EMBDetectorManager;
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBAccordionDetails.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBAccordionDetails.cxx
index 85098c19b38760d703cdf9b23fc0f162bbfde8ae..fe74f2b8f292ae72b4c13ae74c52aa05eac6c9af 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBAccordionDetails.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBAccordionDetails.cxx
@@ -11,7 +11,7 @@
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/Bootstrap.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include <cmath>
 class EMBAccordionDetails::Clockwork {
 
@@ -187,7 +187,7 @@ void EMBAccordionDetails::Clockwork::getRPhi()
 // accordion geometry
 int EMBAccordionDetails::Clockwork::phiGap(double radius, double xhit, const double yhit)
 {
-  const double m2pi = 2.0*CLHEP::pi;
+  const double m2pi = 2.0*GeoModelKernelUnits::pi;
   double phi_0=phi0(radius)+gam0;   // from -M_PI to M_PI
   double phi_hit=atan2(yhit,xhit);  // from -M_PI to M_PI
   double dphi=phi_hit-phi_0;
@@ -244,23 +244,23 @@ EMBAccordionDetails::EMBAccordionDetails():m_c(new Clockwork()) {
   // phi of first absorber
   m_c->gam0 = (*barrelGeometry)[0]->getDouble("PHIFIRST");
   // radius of curvature of neutral fiber in the folds
-  m_c->rint_eleFib = (*barrelGeometry)[0]->getDouble("RINT")*CLHEP::cm;
+  m_c->rint_eleFib = (*barrelGeometry)[0]->getDouble("RINT")*GeoModelKernelUnits::cm;
   
   // r,phi positions of the centre of the folds (nominal geometry)
   for (int idat = 0; idat < m_c->Nbrt1 ; idat++) 
     {
-      m_c->rc[idat]   = (*barrelGeometry)[0]->getDouble("RHOCEN",idat)*CLHEP::cm; 
-      m_c->phic[idat] = (*barrelGeometry)[0]->getDouble("PHICEN",idat)*CLHEP::deg; 
-      m_c->delta[idat] = (*barrelGeometry)[0]->getDouble("DELTA",idat)*CLHEP::deg; 
+      m_c->rc[idat]   = (*barrelGeometry)[0]->getDouble("RHOCEN",idat)*GeoModelKernelUnits::cm; 
+      m_c->phic[idat] = (*barrelGeometry)[0]->getDouble("PHICEN",idat)*GeoModelKernelUnits::deg; 
+      m_c->delta[idat] = (*barrelGeometry)[0]->getDouble("DELTA",idat)*GeoModelKernelUnits::deg; 
       m_c->xc[idat] = m_c->rc[idat]*cos(m_c->phic[idat]);
       m_c->yc[idat] = m_c->rc[idat]*sin(m_c->phic[idat]);
     }
   //
-  m_c->rMinAccordion  =   (*barrelGeometry)[0]->getDouble("RIN_AC")*CLHEP::cm;  
-  m_c->rMaxAccordion  =   (*barrelGeometry)[0]->getDouble("ROUT_AC")*CLHEP::cm;  
+  m_c->rMinAccordion  =   (*barrelGeometry)[0]->getDouble("RIN_AC")*GeoModelKernelUnits::cm;  
+  m_c->rMaxAccordion  =   (*barrelGeometry)[0]->getDouble("ROUT_AC")*GeoModelKernelUnits::cm;  
   m_c->etaMaxBarrel   =   (*barrelGeometry)[0]->getDouble("ETACUT");      
-  m_c->zMinBarrel     =   (*barrelLongDiv)[0]->getDouble("ZMAXACT")*CLHEP::cm;    
-  m_c->zMaxBarrel     =   (*barrelLongDiv)[0]->getDouble("ZMINACT")*CLHEP::cm;    
+  m_c->zMinBarrel     =   (*barrelLongDiv)[0]->getDouble("ZMAXACT")*GeoModelKernelUnits::cm;    
+  m_c->zMaxBarrel     =   (*barrelLongDiv)[0]->getDouble("ZMINACT")*GeoModelKernelUnits::cm;    
   // === GU 11/06/2003   total number of cells in phi
   // to distinguish 1 module (testbeam case) from full Atlas
   m_c->NCellTot =         (*barrelGeometry)[0]->getInt("NCELMX"); 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBBasicReadoutNumbers.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBBasicReadoutNumbers.cxx
index e9e195ba9db7b0bfda43ae52e9f7bc7833b2fc33..74c7e745950fecbbad121ae003ffc54cfeb20133 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBBasicReadoutNumbers.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBBasicReadoutNumbers.cxx
@@ -13,7 +13,7 @@
 
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h" 
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include "LArReadoutGeometry/EMBBasicReadoutNumbers.h"
 
 EMBBasicReadoutNumbers::EMBBasicReadoutNumbers()
@@ -56,12 +56,12 @@ EMBBasicReadoutNumbers::EMBBasicReadoutNumbers()
 
 
 
-  m_presamplerRadius = (*presamplerGeometry)[0]->getDouble("RACTIVE")*CLHEP::cm;
-  m_rInAc            = (*barrelGeometry)[0]->getDouble("RIN_AC")*CLHEP::cm;
-  m_rOutAc           = (*barrelGeometry)[0]->getDouble("ROUT_AC")*CLHEP::cm;
+  m_presamplerRadius = (*presamplerGeometry)[0]->getDouble("RACTIVE")*GeoModelKernelUnits::cm;
+  m_rInAc            = (*barrelGeometry)[0]->getDouble("RIN_AC")*GeoModelKernelUnits::cm;
+  m_rOutAc           = (*barrelGeometry)[0]->getDouble("ROUT_AC")*GeoModelKernelUnits::cm;
   for (int i=0;i<8;i++) m_EE.push_back((*barrelLongDiv)[0]->getDouble("EE",i));
-  for (int i=0;i<8;i++) m_RMX12.push_back((*barrelLongDiv)[0]->getDouble("RMX12",i)*CLHEP::cm);
-  for (int i=0;i<53;i++) m_RMX23.push_back((*barrelLongDiv)[0]->getDouble("RMX23",i)*CLHEP::cm);
+  for (int i=0;i<8;i++) m_RMX12.push_back((*barrelLongDiv)[0]->getDouble("RMX12",i)*GeoModelKernelUnits::cm);
+  for (int i=0;i<53;i++) m_RMX23.push_back((*barrelLongDiv)[0]->getDouble("RMX23",i)*GeoModelKernelUnits::cm);
   for (int i=0;i<448;i++) m_EMBSamplingSepInnerRMax.push_back((*embSamplingSepInner)[0]->getDouble("RMAX",i)); // 
 
 }
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCellConstLink.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCellConstLink.cxx
index b3e0277b071dfe91cc11549b84de0312582d0a7b..5c3703b20bbde20daa80d1e519fed9253f5a68c4 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCellConstLink.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCellConstLink.cxx
@@ -2,32 +2,4 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%4495834701D3.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%4495834701D3.CLHEP::cm
-
-//## begin module%4495834701D3.cp preserve=no
-//## end module%4495834701D3.cp
-
-//## Module: EMBCellConstLink%4495834701D3; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCellConstLink.cxx
-
-//## begin module%4495834701D3.additionalIncludes preserve=no
-//## end module%4495834701D3.additionalIncludes
-
-//## begin module%4495834701D3.includes preserve=yes
-//## end module%4495834701D3.includes
-
-// EMBCellConstLink
 #include "LArReadoutGeometry/EMBCellConstLink.h"
-//## begin module%4495834701D3.additionalDeclarations preserve=yes
-//## end module%4495834701D3.additionalDeclarations
-
-
-//## begin module%4495834701D3.epilog preserve=yes
-//## end module%4495834701D3.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorRegion.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorRegion.cxx
index 461879f423b4368660cc3b14cb046f8046cc9756..1fd7744415bc490c07de617e378f06b67e9b9dec 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorRegion.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorRegion.cxx
@@ -2,102 +2,51 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%44957D640109.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%44957D640109.CLHEP::cm
-
-//## begin module%44957D640109.cp preserve=no
-//## end module%44957D640109.cp
-
-//## Module: EMBDetectorRegion%44957D640109; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorRegion.cxx
-
-//## begin module%44957D640109.additionalIncludes preserve=no
-//## end module%44957D640109.additionalIncludes
-
-//## begin module%44957D640109.includes preserve=yes
 #include "GeoModelKernel/GeoVFullPhysVol.h"
-//## end module%44957D640109.includes
 
-// EMBDetectorRegion
 #include "LArReadoutGeometry/EMBDetectorRegion.h"
-//## begin module%44957D640109.additionalDeclarations preserve=yes
-//## end module%44957D640109.additionalDeclarations
-
 #include "GeoPrimitives/GeoPrimitives.h"
 
-// Class EMBDetectorRegion 
-
-EMBDetectorRegion::EMBDetectorRegion (const GeoVFullPhysVol *physVol, const EMBDetDescr *embDescriptor, DetectorSide endcap)
-  //## begin EMBDetectorRegion::EMBDetectorRegion%4495802702A2.hasinit preserve=no
-  //## end EMBDetectorRegion::EMBDetectorRegion%4495802702A2.hasinit
-  //## begin EMBDetectorRegion::EMBDetectorRegion%4495802702A2.initialization preserve=yes
-  :GeoVDetectorElement(physVol),m_descriptor(embDescriptor),m_endcapIndex(endcap)
-  //## end EMBDetectorRegion::EMBDetectorRegion%4495802702A2.initialization
+EMBDetectorRegion::EMBDetectorRegion (const GeoVFullPhysVol *physVol
+				      , const EMBDetDescr *embDescriptor
+				      , DetectorSide endcap)
+  : GeoVDetectorElement(physVol)
+  , m_descriptor(embDescriptor)
+  , m_endcapIndex(endcap)
 {
-  //## begin EMBDetectorRegion::EMBDetectorRegion%4495802702A2.body preserve=yes
   m_descriptor->ref();
-  //## end EMBDetectorRegion::EMBDetectorRegion%4495802702A2.body
 }
 
 
 EMBDetectorRegion::~EMBDetectorRegion()
 {
-  //## begin EMBDetectorRegion::~EMBDetectorRegion%44957D640109_dest.body preserve=yes
   m_descriptor->unref();
-  //## end EMBDetectorRegion::~EMBDetectorRegion%44957D640109_dest.body
 }
 
-
-
-//## Other Operations (implementation)
 EMBCellConstLink EMBDetectorRegion::getEMBCell (unsigned int ieta, unsigned int iphi) const
 {
-  //## begin EMBDetectorRegion::getEMBCell%449580270257.body preserve=yes
- return EMBCellConstLink(new EMBCell(m_endcapIndex,m_descriptor,ieta,iphi));
-  //## end EMBDetectorRegion::getEMBCell%449580270257.body
+  return EMBCellConstLink(new EMBCell(m_endcapIndex,m_descriptor,ieta,iphi));
 }
 
 const Amg::Transform3D  EMBDetectorRegion::getAbsoluteTransformAmg () const
 {
-  //## begin EMBDetectorRegion::getAbsoluteTransform%449580270293.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
-  return Amg::CLHEPTransformToEigen(fullPhysVol->getAbsoluteTransform());
-  //## end EMBDetectorRegion::getAbsoluteTransform%449580270293.body
+  return fullPhysVol->getAbsoluteTransform();
 }
 
 const Amg::Transform3D  EMBDetectorRegion::getDefAbsoluteTransformAmg () const
 {
-  //## begin EMBDetectorRegion::getDefAbsoluteTransform%44958027029A.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
-  return Amg::CLHEPTransformToEigen(fullPhysVol->getDefAbsoluteTransform());
-  //## end EMBDetectorRegion::getDefAbsoluteTransform%44958027029A.body
+  return fullPhysVol->getDefAbsoluteTransform();
 }
-const HepGeom::Transform3D &  EMBDetectorRegion::getAbsoluteTransform () const
+const GeoTrf::Transform3D &  EMBDetectorRegion::getAbsoluteTransform () const
 {
-  //## begin EMBDetectorRegion::getAbsoluteTransform%449580270293.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getAbsoluteTransform();
-  //## end EMBDetectorRegion::getAbsoluteTransform%449580270293.body
 }
 
-const HepGeom::Transform3D &  EMBDetectorRegion::getDefAbsoluteTransform () const
+const GeoTrf::Transform3D &  EMBDetectorRegion::getDefAbsoluteTransform () const
 {
-  //## begin EMBDetectorRegion::getDefAbsoluteTransform%44958027029A.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getDefAbsoluteTransform();
-  //## end EMBDetectorRegion::getDefAbsoluteTransform%44958027029A.body
 }
-
-
-// Additional Declarations
-  //## begin EMBDetectorRegion%44957D640109.declarations preserve=yes
-  //## end EMBDetectorRegion%44957D640109.declarations
-
-//## begin module%44957D640109.epilog preserve=yes
-//## end module%44957D640109.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetDescr.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetDescr.cxx
index 2b7055ceaed581bd569b6f4bc75377b59f0efd3b..8ed210b57c1075f3f51d57d548a8459875ee5a57 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetDescr.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetDescr.cxx
@@ -2,31 +2,9 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%446626F5033F.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%446626F5033F.CLHEP::cm
-
-//## begin module%446626F5033F.cp preserve=no
-//## end module%446626F5033F.cp
-
-//## Module: EMECDetDescr%446626F5033F; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetDescr.cxx
-
-//## begin module%446626F5033F.additionalIncludes preserve=no
-//## end module%446626F5033F.additionalIncludes
-
-//## begin module%446626F5033F.includes preserve=yes
 #include "LArReadoutGeometry/EMECDetectorManager.h"
-//## end module%446626F5033F.includes
-
-// EMECDetDescr
 #include "LArReadoutGeometry/EMECDetDescr.h"
-//## begin module%446626F5033F.additionalDeclarations preserve=yes
+
 /** 
  * @brief An internal class which is none of your business
  **/
@@ -44,24 +22,20 @@ struct Boundary {
 				  {{{1.500, 2.500, 20},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0}},    // sample 3 outer
 				   {{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0},{0.000, 0.000,  0}}}};  // sample 3 inner
 
-//## end module%446626F5033F.additionalDeclarations
-
-
-// Class EMECDetDescr 
-
-EMECDetDescr::EMECDetDescr (const EMECDetectorManager *detManager, unsigned int sampling, unsigned int region, unsigned int radialPart, const CellBinning &phiBinning)
-  //## begin EMECDetDescr::EMECDetDescr%446A2DDF00D2.hasinit preserve=no
-  //## end EMECDetDescr::EMECDetDescr%446A2DDF00D2.hasinit
-  //## begin EMECDetDescr::EMECDetDescr%446A2DDF00D2.initialization preserve=yes
-  :m_manager(detManager),m_samplingIndex(sampling),m_regionIndex(region),m_radialIndex(radialPart),m_phiBinning(phiBinning),m_etaBinning(etaBoundariesEndcap[sampling][radialPart][region].min,
-															     etaBoundariesEndcap[sampling][radialPart][region].max,
-															     etaBoundariesEndcap[sampling][radialPart][region].nDiv)
-  //## end EMECDetDescr::EMECDetDescr%446A2DDF00D2.initialization
+EMECDetDescr::EMECDetDescr (const EMECDetectorManager *detManager
+			    , unsigned int sampling
+			    , unsigned int region
+			    , unsigned int radialPart
+			    , const CellBinning &phiBinning)
+  : m_manager(detManager)
+  , m_samplingIndex(sampling)
+  , m_regionIndex(region)
+  , m_radialIndex(radialPart) 
+  , m_phiBinning(phiBinning)
+  , m_etaBinning(etaBoundariesEndcap[sampling][radialPart][region].min
+		 ,etaBoundariesEndcap[sampling][radialPart][region].max
+		 ,etaBoundariesEndcap[sampling][radialPart][region].nDiv)
 {
-  //## begin EMECDetDescr::EMECDetDescr%446A2DDF00D2.body preserve=yes
-
-
-
   // This contains some logic for decoding the sampling separation arrays:
   if (sampling==0) {
     m_halfLength.push_back(m_manager->getPresamplerFullLength()/2.0); 
@@ -129,20 +103,9 @@ EMECDetDescr::EMECDetDescr (const EMECDetectorManager *detManager, unsigned int
     m_offset.push_back((front+back)/2.);
     m_halfLength.push_back((back-front)/2.);
   }
-  //## end EMECDetDescr::EMECDetDescr%446A2DDF00D2.body
 }
 
 
 EMECDetDescr::~EMECDetDescr()
 {
-  //## begin EMECDetDescr::~EMECDetDescr%446626F5033F_dest.body preserve=yes
-  //## end EMECDetDescr::~EMECDetDescr%446626F5033F_dest.body
 }
-
-
-// Additional Declarations
-  //## begin EMECDetDescr%446626F5033F.declarations preserve=yes
-  //## end EMECDetDescr%446626F5033F.declarations
-
-//## begin module%446626F5033F.epilog preserve=yes
-//## end module%446626F5033F.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
index eb4f5668fecab8729cfc749bffda58281f983d0d..a1e3a425bbf4e5ef0afc2d22bc55bc0123e49ec5 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
@@ -12,6 +12,7 @@
 
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
+#include "GeoModelKernel/Units.h"
 
 #include "LArReadoutGeometry/EMECDetectorManager.h"
 #include "LArReadoutGeometry/EMECDetectorRegion.h"
@@ -55,20 +56,20 @@ EMECDetectorManager::EMECDetectorManager()
   if (emecSamplingSep->size()==0)   throw std::runtime_error("Error getting EmecSamplingSep table");
 
   const IRDBRecord *ess = (*emecSamplingSep)[0];
-  for (int j=0;j<7;j++)  m_ziw.push_back(ess->getDouble("ZIW",j)*CLHEP::cm);
-  for (int j=0;j<44;j++) m_zsep12.push_back(ess->getDouble("ZSEP12",j)*CLHEP::cm);
-  for (int j=0;j<22;j++) m_zsep23.push_back(ess->getDouble("ZSEP23",j)*CLHEP::cm);
+  for (int j=0;j<7;j++)  m_ziw.push_back(ess->getDouble("ZIW",j)*GeoModelKernelUnits::cm);
+  for (int j=0;j<44;j++) m_zsep12.push_back(ess->getDouble("ZSEP12",j)*GeoModelKernelUnits::cm);
+  for (int j=0;j<22;j++) m_zsep23.push_back(ess->getDouble("ZSEP23",j)*GeoModelKernelUnits::cm);
 
   IRDBRecordset_ptr emecMagicNumbers       = rdbAccess->getRecordsetPtr("EmecMagicNumbers", larVersionKey.tag(),larVersionKey.node());
   if (emecMagicNumbers->size()==0) {
     emecMagicNumbers       = rdbAccess->getRecordsetPtr("EmecMagicNumbers", "EmecMagicNumbers-00");
     if (emecMagicNumbers->size()==0) throw std::runtime_error("Error getting EmecMagicNumbers table");
   }
-  m_MagicNumbers->focalToRef        =(*emecMagicNumbers)[0]->getDouble("FOCALTOREF")*CLHEP::mm;
-  m_MagicNumbers->refToActive       =(*emecMagicNumbers)[0]->getDouble("REFTOACTIVE")*CLHEP::mm;
-  m_MagicNumbers->activeLength      =(*emecMagicNumbers)[0]->getDouble("ACTIVELENGTH")*CLHEP::mm;
-  m_MagicNumbers->refToPresampler   =(*emecMagicNumbers)[0]->getDouble("REFTOPRESAMPLER")*CLHEP::mm;
-  m_MagicNumbers->presamplerLength  =(*emecMagicNumbers)[0]->getDouble("PRESAMPLERLENGTH")*CLHEP::mm;
+  m_MagicNumbers->focalToRef        =(*emecMagicNumbers)[0]->getDouble("FOCALTOREF")*GeoModelKernelUnits::mm;
+  m_MagicNumbers->refToActive       =(*emecMagicNumbers)[0]->getDouble("REFTOACTIVE")*GeoModelKernelUnits::mm;
+  m_MagicNumbers->activeLength      =(*emecMagicNumbers)[0]->getDouble("ACTIVELENGTH")*GeoModelKernelUnits::mm;
+  m_MagicNumbers->refToPresampler   =(*emecMagicNumbers)[0]->getDouble("REFTOPRESAMPLER")*GeoModelKernelUnits::mm;
+  m_MagicNumbers->presamplerLength  =(*emecMagicNumbers)[0]->getDouble("PRESAMPLERLENGTH")*GeoModelKernelUnits::mm;
   
 }
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorRegion.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorRegion.cxx
index 18e11c2c63efc541c61cdf60786a26d0a67a972a..b2587ffbec7bb3f9a49b66227250b798c04d86e3 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorRegion.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorRegion.cxx
@@ -2,87 +2,49 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%446626240261.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%446626240261.CLHEP::cm
-
-//## begin module%446626240261.cp preserve=no
-//## end module%446626240261.cp
-
-//## Module: EMECDetectorRegion%446626240261; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorRegion.cxx
-
-//## begin module%446626240261.additionalIncludes preserve=no
-//## end module%446626240261.additionalIncludes
-
-//## begin module%446626240261.includes preserve=yes
 #include "GeoModelKernel/GeoVFullPhysVol.h"
-//## end module%446626240261.includes
 
-// EMECDetectorRegion
 #include "LArReadoutGeometry/EMECDetectorRegion.h"
-//## begin module%446626240261.additionalDeclarations preserve=yes
 #include "GeoModelKernel/GeoVFullPhysVol.h"
 #include "GeoModelKernel/GeoPcon.h"
-//## end module%446626240261.additionalDeclarations
-
-
-// Class EMECDetectorRegion 
-
-EMECDetectorRegion::EMECDetectorRegion (const GeoVFullPhysVol *physVol, const EMECDetDescr *emecDescriptor, DetectorSide endcap, double projectivityDisplacement)
-  //## begin EMECDetectorRegion::EMECDetectorRegion%4466280603B3.hasinit preserve=no
-  //## end EMECDetectorRegion::EMECDetectorRegion%4466280603B3.hasinit
-  //## begin EMECDetectorRegion::EMECDetectorRegion%4466280603B3.initialization preserve=yes
-  :GeoVDetectorElement(physVol),m_descriptor(emecDescriptor),m_endcapIndex(endcap),m_projectivityDisplacement(projectivityDisplacement)
-  //## end EMECDetectorRegion::EMECDetectorRegion%4466280603B3.initialization
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
+EMECDetectorRegion::EMECDetectorRegion (const GeoVFullPhysVol *physVol
+					, const EMECDetDescr *emecDescriptor
+					, DetectorSide endcap
+					, double projectivityDisplacement)
+  : GeoVDetectorElement(physVol)
+  , m_descriptor(emecDescriptor)
+  , m_endcapIndex(endcap)
+  , m_projectivityDisplacement(projectivityDisplacement)
 {
-  //## begin EMECDetectorRegion::EMECDetectorRegion%4466280603B3.body preserve=yes
   emecDescriptor->ref();
-  //## end EMECDetectorRegion::EMECDetectorRegion%4466280603B3.body
 }
 
-
 EMECDetectorRegion::~EMECDetectorRegion()
 {
-  //## begin EMECDetectorRegion::~EMECDetectorRegion%446626240261_dest.body preserve=yes
   m_descriptor->unref();
-  //## end EMECDetectorRegion::~EMECDetectorRegion%446626240261_dest.body
 }
 
-
-
-//## Other Operations (implementation)
 EMECCellConstLink EMECDetectorRegion::getEMECCell (unsigned int ieta, unsigned int iphi) const
 {
-  //## begin EMECDetectorRegion::getEMECCell%446629070190.body preserve=yes
   return EMECCellConstLink(new EMECCell(m_endcapIndex,m_descriptor,ieta,iphi));
-  //## end EMECDetectorRegion::getEMECCell%446629070190.body
 }
 
-const HepGeom::Transform3D &  EMECDetectorRegion::getAbsoluteTransform () const
+const GeoTrf::Transform3D &  EMECDetectorRegion::getAbsoluteTransform () const
 {
-  //## begin EMECDetectorRegion::getAbsoluteTransform%446E079E0373.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getAbsoluteTransform();
-  //## end EMECDetectorRegion::getAbsoluteTransform%446E079E0373.body
 }
 
-const HepGeom::Transform3D &  EMECDetectorRegion::getDefAbsoluteTransform () const
+const GeoTrf::Transform3D &  EMECDetectorRegion::getDefAbsoluteTransform () const
 {
-  //## begin EMECDetectorRegion::getDefAbsoluteTransform%446E079E037D.body preserve=yes
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getDefAbsoluteTransform();
-  //## end EMECDetectorRegion::getDefAbsoluteTransform%446E079E037D.body
 }
 
 HepGeom::Point3D<double> EMECDetectorRegion::getRefPlanePos () const
 {
-  //## begin EMECDetectorRegion::getRefPlanePos%45432A27024F.body preserve=yes
   const GeoVFullPhysVol *physVol = getMaterialGeom();
   const GeoLogVol       *logVol  = physVol->getLogVol();
   const GeoShape        *shape   = logVol->getShape();
@@ -91,28 +53,25 @@ HepGeom::Point3D<double> EMECDetectorRegion::getRefPlanePos () const
   }
   GeoPcon *pcon = (GeoPcon *) shape;
   HepGeom::Point3D<double> center(0,0,pcon->getZPlane(0)-m_descriptor->getManager()->getRefToActive());
-  return (physVol->getAbsoluteTransform()*center);
-  //## end EMECDetectorRegion::getRefPlanePos%45432A27024F.body
+  return (Amg::EigenTransformToCLHEP(physVol->getAbsoluteTransform())*center);
 }
 
 HepGeom::Point3D<double> EMECDetectorRegion::getFocalPointPos () const
 {
-  //## begin EMECDetectorRegion::getFocalPointPos%45432A270254.body preserve=yes
   HepGeom::Point3D<double> zRef = getRefPlanePos();
   int    sgn  = m_endcapIndex==0 ? -1 : +1;
   HepGeom::Point3D<double> focalPos = HepGeom::Point3D<double>(0,0,sgn*m_descriptor->getManager()->getFocalToRef());
   return zRef - focalPos;
-  //## end EMECDetectorRegion::getFocalPointPos%45432A270254.body
 }
 
 const Amg::Transform3D  EMECDetectorRegion::getAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getAbsoluteTransform());
+  return getAbsoluteTransform();
 }
 
 const Amg::Transform3D  EMECDetectorRegion::getDefAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getDefAbsoluteTransform());
+  return getDefAbsoluteTransform();
 }
 
 Amg::Vector3D EMECDetectorRegion::getRefPlanePosAmg () const
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCALModule.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCALModule.cxx
index 9203e27804f0391f8e3753ad0cfdf5f01daa4c4b..ab5f93bdbb3fae5cb9c4cd4d40ce0573e8276f76 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCALModule.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCALModule.cxx
@@ -9,8 +9,6 @@
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoTubs.h"
 
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
-
 // FCALModule
 #include "LArReadoutGeometry/FCALModule.h"
 
@@ -121,13 +119,13 @@ double FCALModule::getFullDepthZ (const FCALTile& ) const
   return m_dz;
 }
 
-const HepGeom::Transform3D &  FCALModule::getAbsoluteTransform () const
+const GeoTrf::Transform3D &  FCALModule::getAbsoluteTransform () const
 {
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getAbsoluteTransform();
 }
 
-const HepGeom::Transform3D &  FCALModule::getDefAbsoluteTransform () const
+const GeoTrf::Transform3D &  FCALModule::getDefAbsoluteTransform () const
 {
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getDefAbsoluteTransform();
@@ -135,12 +133,12 @@ const HepGeom::Transform3D &  FCALModule::getDefAbsoluteTransform () const
 
 const Amg::Transform3D  FCALModule::getAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getAbsoluteTransform());
+  return getAbsoluteTransform();
 }
 
 const Amg::Transform3D  FCALModule::getDefAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getDefAbsoluteTransform());
+  return getDefAbsoluteTransform();
 }
 
 void FCALModule::setManager (FCALDetectorManager* fcalManager)
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx
index 109d17096df32b1984acf927c2a27b6fb4595828..5cb3662d79dd502fedb2856954f6d3bb3cbfb4f6 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx
@@ -13,7 +13,7 @@
 //****************************************************************************
 
 #include "LArReadoutGeometry/FCAL_ChannelMap.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include "boost/io/ios_state.hpp"
 #include <sstream>
 #include <iostream>
@@ -21,7 +21,7 @@
 #include <stdio.h>
 
 /* === Geometrical parameters === */
-const double FCAL_ChannelMap::m_tubeSpacing[] = {0.75*CLHEP::cm, 0.8179*CLHEP::cm, 0.90*CLHEP::cm};
+const double FCAL_ChannelMap::m_tubeSpacing[] = {0.75*GeoModelKernelUnits::cm, 0.8179*GeoModelKernelUnits::cm, 0.90*GeoModelKernelUnits::cm};
 
 FCAL_ChannelMap::FCAL_ChannelMap( int flag)          
 {
@@ -78,7 +78,7 @@ void FCAL_ChannelMap::add_tube(const std::string & tileName, int mod, int /*id*/
 
   tileName_t tilename = (a3 << 16) + a2;
 
-  TubePosition tb(tilename, x*CLHEP::cm, y*CLHEP::cm,"");
+  TubePosition tb(tilename, x*GeoModelKernelUnits::cm, y*GeoModelKernelUnits::cm,"");
   // Add offsets, becaues iy and ix can be negative HMA
   
   i = i+200;
@@ -104,7 +104,7 @@ void FCAL_ChannelMap::add_tube(const std::string & tileName, int mod, int /*id*/
 
   tileName_t tilename = (a3 << 16) + a2;
 
-  TubePosition tb(tilename, x*CLHEP::cm, y*CLHEP::cm, hvFT);
+  TubePosition tb(tilename, x*GeoModelKernelUnits::cm, y*GeoModelKernelUnits::cm, hvFT);
   // Add offsets, becaues iy and ix can be negative HMA
   
   i = i+200;
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/GeoStraightAccSection.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/GeoStraightAccSection.cxx
index ef21f9c64ba80bd8edac5d5c3b8a59f70baf6acb..2ba99e25d806d6d132469158c97a1aa64c58d5c4 100644
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/GeoStraightAccSection.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/GeoStraightAccSection.cxx
@@ -19,11 +19,11 @@ void GeoStraightAccSection::Clockwork::fillFastCache() {
   if (!r1) buildFastCache();
   for (int i=0;i<1024;i++) {
     for (int j=0;j<14; j++) {
-      HepGeom::Transform3D XF = (*r2->transfunction[j])(i);
-      r1->xcent[i][j] = XF.dx();
-      r1->ycent[i][j] = XF.dy();
-      r1->cosu [i][j] = -XF.xy();
-      r1->sinu [i][j] = XF.xz();
+      GeoTrf::Transform3D XF = (*r2->transfunction[j])(i);
+      r1->xcent[i][j] = XF(0,3); //dx
+      r1->ycent[i][j] = XF(1,3); //dy
+      r1->cosu [i][j] = -XF(0,1);//xy
+      r1->sinu [i][j] = XF(0,2);//xz
       r1->halfLength[i][j]= r2->halfLength[j];
     }
   }
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECCellConstLink.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECCellConstLink.cxx
index 46055d56776a02abf8b592ef4912042fcbf2078f..470eeef52a10e9050d0fbbaca7c810ee2f3d5c66 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECCellConstLink.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECCellConstLink.cxx
@@ -2,32 +2,4 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%445D13DC008E.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%445D13DC008E.CLHEP::cm
-
-//## begin module%445D13DC008E.cp preserve=no
-//## end module%445D13DC008E.cp
-
-//## Module: HECCellConstLink%445D13DC008E; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECCellConstLink.cxx
-
-//## begin module%445D13DC008E.additionalIncludes preserve=no
-//## end module%445D13DC008E.additionalIncludes
-
-//## begin module%445D13DC008E.includes preserve=yes
-//## end module%445D13DC008E.includes
-
-// HECCellConstLink
 #include "LArReadoutGeometry/HECCellConstLink.h"
-//## begin module%445D13DC008E.additionalDeclarations preserve=yes
-//## end module%445D13DC008E.additionalDeclarations
-
-
-//## begin module%445D13DC008E.epilog preserve=yes
-//## end module%445D13DC008E.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetDescr.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetDescr.cxx
index 0daac9b171190547354b8a5397973d0ecda5a967..e44269da848d34410c3f0cc7f131f49a12f10d83 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetDescr.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetDescr.cxx
@@ -2,30 +2,7 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%4457CB630376.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%4457CB630376.CLHEP::cm
-
-//## begin module%4457CB630376.cp preserve=no
-//## end module%4457CB630376.cp
-
-//## Module: HECDetDescr%4457CB630376; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetDescr.cxx
-
-//## begin module%4457CB630376.additionalIncludes preserve=no
-//## end module%4457CB630376.additionalIncludes
-
-//## begin module%4457CB630376.includes preserve=yes
-//## end module%4457CB630376.includes
-
-// HECDetDescr
 #include "LArReadoutGeometry/HECDetDescr.h"
-//## begin module%4457CB630376.additionalDeclarations preserve=yes
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Bootstrap.h"
 #include "StoreGate/StoreGateSvc.h"
@@ -34,30 +11,21 @@
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
-//## end module%4457CB630376.additionalDeclarations
 
-
-// Class HECDetDescr 
-
-HECDetDescr::HECDetDescr (const HECDetectorManager *detManager, unsigned int sampling, unsigned int region, const CellBinning &phiBinning, bool isTestBeam)
-  //## begin HECDetDescr::HECDetDescr%445A11A300C0.hasinit preserve=no
-  //## end HECDetDescr::HECDetDescr%445A11A300C0.hasinit
-  //## begin HECDetDescr::HECDetDescr%445A11A300C0.initialization preserve=yes
-  // We use here cell width to disambiguate inner HEC and Outer HEC.  Inner HEC has wider cells (0.2) than Outer hec (0.1)
-  :
-                          m_manager(detManager),
-			  m_samplingIndex(sampling),
-			  m_regionIndex(region),
-			  m_phiBinning(phiBinning),
-			  m_outerRadSegNumber(region==0 ? 9: 3),
-                          m_etaBinning(0,0,1,0),
-			  m_numBlocks(sampling==0 ? 1:2),
-			  m_firstBlock(sampling==0 ? 0 : 2*sampling-1)
-  
-  //## end HECDetDescr::HECDetDescr%445A11A300C0.initialization
+HECDetDescr::HECDetDescr (const HECDetectorManager *detManager
+			  , unsigned int sampling
+			  , unsigned int region
+			  , const CellBinning &phiBinning
+			  , bool isTestBeam)
+  : m_manager(detManager)
+  , m_samplingIndex(sampling)
+  , m_regionIndex(region)
+  , m_phiBinning(phiBinning)
+  , m_outerRadSegNumber(region==0 ? 9: 3)
+  , m_etaBinning(0,0,1,0)
+  , m_numBlocks(sampling==0 ? 1:2)
+  , m_firstBlock(sampling==0 ? 0 : 2*sampling-1)
 {
-  //## begin HECDetDescr::HECDetDescr%445A11A300C0.body preserve=yes
-
   // This will soon be unnecessary (when the wheels are divided!
   ISvcLocator *svcLocator = Gaudi::svcLocator();
   IRDBAccessSvc* rdbAccess;
@@ -100,23 +68,13 @@ HECDetDescr::HECDetDescr (const HECDetectorManager *detManager, unsigned int sam
 	m_zMax.push_back(back);
       }
       pos += m_manager->getBlock(b)->getDepth();
-      if(isTestBeam && b==2) pos += (*hadronicEndcap)[0]->getDouble("GAPWHL")*CLHEP::cm;
+      if(isTestBeam && b==2) pos += (*hadronicEndcap)[0]->getDouble("GAPWHL")*GeoModelKernelUnits::cm;
     }
   }
-  //## end HECDetDescr::HECDetDescr%445A11A300C0.body
 }
 
 
 HECDetDescr::~HECDetDescr()
 {
-  //## begin HECDetDescr::~HECDetDescr%4457CB630376_dest.body preserve=yes
-  //## end HECDetDescr::~HECDetDescr%4457CB630376_dest.body
 }
 
-
-// Additional Declarations
-  //## begin HECDetDescr%4457CB630376.declarations preserve=yes
-  //## end HECDetDescr%4457CB630376.declarations
-
-//## begin module%4457CB630376.epilog preserve=yes
-//## end module%4457CB630376.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorManager.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorManager.cxx
index ea7d7346027b7f863a683d83eadb9773b46051eb..d270dcd4fd3ae88c6bd0444a4fee6442ab124e7d 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorManager.cxx
@@ -12,6 +12,7 @@
 #include "RDBAccessSvc/IRDBAccessSvc.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
+#include "GeoModelKernel/Units.h"
 #include "LArReadoutGeometry/HECDetectorManager.h"
 #include "LArHV/LArHVManager.h"
 #include "StoreGate/StoreGate.h"
@@ -59,21 +60,21 @@ HECDetectorManager::HECDetectorManager(bool isTestBeam)
   if (hecPad->size()!=hecLongBlock->size()) throw std::runtime_error("Error.  Hec[LongitudinalBlock,Pad] size discrepancy");
 
   // Get the focal length:
-  m_focalToRef1 = (*hadronicEndcap)[0]->getDouble("ZORIG")*CLHEP::cm;
+  m_focalToRef1 = (*hadronicEndcap)[0]->getDouble("ZORIG")*GeoModelKernelUnits::cm;
   m_focalToRef2 = m_focalToRef1;
-  double betweenWheel=(*hadronicEndcap)[0]->getDouble("GAPWHL")*CLHEP::cm;
+  double betweenWheel=(*hadronicEndcap)[0]->getDouble("GAPWHL")*GeoModelKernelUnits::cm;
   if(!m_isTestBeam) m_focalToRef2 += betweenWheel;
 
   for (unsigned int b=0;b<hecLongBlock->size();b++) {
     double etaBoundary[15];
     const IRDBRecord *block = (*hecLongBlock)[b];
     unsigned int blockNumber= (unsigned int) (block->getDouble("IBLC")+0.01); // will truncate down.
-    double innerRadius= block->getDouble("BLRMN")*CLHEP::cm;
-    double outerRadius= block->getDouble("BLRMX")*CLHEP::cm;
-    double depth= block->getDouble("BLDPTH")*CLHEP::cm;
+    double innerRadius= block->getDouble("BLRMN")*GeoModelKernelUnits::cm;
+    double outerRadius= block->getDouble("BLRMX")*GeoModelKernelUnits::cm;
+    double depth= block->getDouble("BLDPTH")*GeoModelKernelUnits::cm;
     unsigned int numLArGaps= (unsigned int) (block->getDouble("BLMOD") + 0.01); // will truncate down.
-    double frontPlateThickness= block->getDouble("PLATE0")*CLHEP::cm;
-    double backPlateThickness= block->getDouble("PLATEE")*CLHEP::cm;
+    double frontPlateThickness= block->getDouble("PLATE0")*GeoModelKernelUnits::cm;
+    double backPlateThickness= block->getDouble("PLATEE")*GeoModelKernelUnits::cm;
     
     const IRDBRecord *pad = (*hecPad)[b];
     for (int j=0;j<15;j++) etaBoundary[j]=pad->getDouble("ETA",j);
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorRegion.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorRegion.cxx
index 5d84c1e1c502e530a2def0a84ff9d9adc68276c1..e1d196f4820ef23fb8630ac991b326891d8d8f87 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorRegion.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECDetectorRegion.cxx
@@ -5,8 +5,16 @@
 #include "LArReadoutGeometry/HECDetectorRegion.h"
 #include "GeoModelKernel/GeoVFullPhysVol.h"
 #include "GeoModelKernel/GeoPcon.h"
-HECDetectorRegion::HECDetectorRegion (const GeoVFullPhysVol *physVol, const HECDetDescr *hecDescriptor, DetectorSide endcap, double projectivityDisplacement)
-  :GeoVDetectorElement(physVol),m_descriptor(hecDescriptor),m_endcapIndex(endcap),m_projectivityDisplacement(projectivityDisplacement)
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
+HECDetectorRegion::HECDetectorRegion (const GeoVFullPhysVol *physVol
+				      , const HECDetDescr *hecDescriptor
+				      , DetectorSide endcap
+				      , double projectivityDisplacement)
+  : GeoVDetectorElement(physVol)
+  , m_descriptor(hecDescriptor) 
+  , m_endcapIndex(endcap)
+  , m_projectivityDisplacement(projectivityDisplacement)
 {
   hecDescriptor->ref();
 }
@@ -17,21 +25,19 @@ HECDetectorRegion::~HECDetectorRegion()
   m_descriptor->unref();
 }
 
-
-
 HECCellConstLink HECDetectorRegion::getHECCell (unsigned int ieta, unsigned int iphi) const
 {
   HECCell *cell = new HECCell(m_endcapIndex,m_descriptor,ieta,iphi);
   return HECCellConstLink(cell);
 }
 
-const HepGeom::Transform3D &  HECDetectorRegion::getAbsoluteTransform () const
+const GeoTrf::Transform3D &  HECDetectorRegion::getAbsoluteTransform () const
 {
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getAbsoluteTransform();
 }
 
-const HepGeom::Transform3D &  HECDetectorRegion::getDefAbsoluteTransform () const
+const GeoTrf::Transform3D &  HECDetectorRegion::getDefAbsoluteTransform () const
 {
   const GeoVFullPhysVol *fullPhysVol = getMaterialGeom();
   return fullPhysVol->getDefAbsoluteTransform();
@@ -44,12 +50,12 @@ Amg::Vector3D HECDetectorRegion::getRefPlanePosAmg () const
 }
 const Amg::Transform3D  HECDetectorRegion::getAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getAbsoluteTransform());
+  return getAbsoluteTransform();
 }
 
 const Amg::Transform3D  HECDetectorRegion::getDefAbsoluteTransformAmg () const
 {
-  return Amg::CLHEPTransformToEigen(getDefAbsoluteTransform());
+  return getDefAbsoluteTransform();
 }
 
 Amg::Vector3D HECDetectorRegion::getFocalPointPosAmg () const
@@ -72,7 +78,7 @@ HepGeom::Point3D<double> HECDetectorRegion::getRefPlanePos () const
   }
   GeoPcon *pcon = (GeoPcon *) shape;
   HepGeom::Point3D<double> center(0,0,pcon->getZPlane(0));
-  return (physVol->getAbsoluteTransform()*center);
+  return (Amg::EigenTransformToCLHEP(physVol->getAbsoluteTransform())*center);
 }
 
 HepGeom::Point3D<double> HECDetectorRegion::getFocalPointPos () const
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECLongBlock.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECLongBlock.cxx
index 426bdec982af64eb2da7050dad3b69167ea90bdf..d6b6e4c14e29300e3d5a654ba4ccfab25db96df7 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECLongBlock.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECLongBlock.cxx
@@ -2,41 +2,9 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%4457C98D0025.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%4457C98D0025.CLHEP::cm
-
-//## begin module%4457C98D0025.cp preserve=no
-//## end module%4457C98D0025.cp
-
-//## Module: HECLongBlock%4457C98D0025; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECLongBlock.cxx
-
-//## begin module%4457C98D0025.additionalIncludes preserve=no
-//## end module%4457C98D0025.additionalIncludes
-
-//## begin module%4457C98D0025.includes preserve=yes
-//## end module%4457C98D0025.includes
-
-// HECLongBlock
 #include "LArReadoutGeometry/HECLongBlock.h"
-//## begin module%4457C98D0025.additionalDeclarations preserve=yes
-//## end module%4457C98D0025.additionalDeclarations
-
-#include <cstdlib>  // For NULL
-
-
-// Class HECLongBlock 
 
 HECLongBlock::HECLongBlock(const HECLongBlock &right)
-  //## begin HECLongBlock::HECLongBlock%4457C98D0025_copy.hasinit preserve=no
-  //## end HECLongBlock::HECLongBlock%4457C98D0025_copy.hasinit
-  //## begin HECLongBlock::HECLongBlock%4457C98D0025_copy.initialization preserve=yes
   : m_blockNumber(right.m_blockNumber),
     m_innerRadius(right.m_innerRadius),
     m_outerRadius(right.m_outerRadius),
@@ -44,17 +12,18 @@ HECLongBlock::HECLongBlock(const HECLongBlock &right)
     m_numLArGaps(right.m_numLArGaps),
     m_frontPlateThickness(right.m_frontPlateThickness),
     m_backPlateThickness(right.m_backPlateThickness)
-  //## end HECLongBlock::HECLongBlock%4457C98D0025_copy.initialization
 {
-  //## begin HECLongBlock::HECLongBlock%4457C98D0025_copy.body preserve=yes
   for (int i=0;i<14;i++) m_RadialSeg.push_back( right.m_RadialSeg[i] ? (HECRadialSegment *) 0 : new HECRadialSegment(*right.m_RadialSeg[i]));
-  //## end HECLongBlock::HECLongBlock%4457C98D0025_copy.body
 }
 
-HECLongBlock::HECLongBlock (unsigned int blockNum, double innerRad, double outerRad, double totalDepth, unsigned int nLarGaps, double frontPlateThick, double backPlateThick, const double etaRange[15])
-  //## begin HECLongBlock::HECLongBlock%4457DF0A0112.hasinit preserve=no
-  //## end HECLongBlock::HECLongBlock%4457DF0A0112.hasinit
-  //## begin HECLongBlock::HECLongBlock%4457DF0A0112.initialization preserve=yes
+HECLongBlock::HECLongBlock (unsigned int blockNum
+			    , double innerRad
+			    , double outerRad
+			    , double totalDepth
+			    , unsigned int nLarGaps
+			    , double frontPlateThick
+			    , double backPlateThick
+			    , const double etaRange[15])
   : m_blockNumber(blockNum),
     m_innerRadius(innerRad),
     m_outerRadius(outerRad),
@@ -62,11 +31,8 @@ HECLongBlock::HECLongBlock (unsigned int blockNum, double innerRad, double outer
     m_numLArGaps(nLarGaps),
     m_frontPlateThickness(frontPlateThick),
     m_backPlateThickness(backPlateThick)
-  
-  //## end HECLongBlock::HECLongBlock%4457DF0A0112.initialization
 {
-  //## begin HECLongBlock::HECLongBlock%4457DF0A0112.body preserve=yes
-  for (int i=0;i<14;i++) m_RadialSeg.push_back(NULL);
+  for (int i=0;i<14;i++) m_RadialSeg.push_back(nullptr);
   bool started=false;
   for (int i=0;i<14;i++) {
     if (etaRange[i]!=etaRange[i+1]) {
@@ -77,21 +43,16 @@ HECLongBlock::HECLongBlock (unsigned int blockNum, double innerRad, double outer
       if (started) break;
     }
   }
-  //## end HECLongBlock::HECLongBlock%4457DF0A0112.body
 }
 
 
 HECLongBlock::~HECLongBlock()
 {
-  //## begin HECLongBlock::~HECLongBlock%4457C98D0025_dest.body preserve=yes
   for (int i=0;i<14;i++) delete m_RadialSeg[i];
-  //## end HECLongBlock::~HECLongBlock%4457C98D0025_dest.body
 }
 
-
 HECLongBlock & HECLongBlock::operator=(const HECLongBlock &right)
 {
-  //## begin HECLongBlock::operator=%4457C98D0025_assign.body preserve=yes
   if (this != & right) {
     m_blockNumber=right.m_blockNumber;
     m_innerRadius=right.m_innerRadius;
@@ -105,13 +66,4 @@ HECLongBlock & HECLongBlock::operator=(const HECLongBlock &right)
     
   }
   return *this;
-  //## end HECLongBlock::operator=%4457C98D0025_assign.body
 }
-
-
-// Additional Declarations
-  //## begin HECLongBlock%4457C98D0025.declarations preserve=yes
-  //## end HECLongBlock%4457C98D0025.declarations
-
-//## begin module%4457C98D0025.epilog preserve=yes
-//## end module%4457C98D0025.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECRadialSegment.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECRadialSegment.cxx
index d6e53cacbaaefcbea39363313cf56c7aaf7cb75a..7d42f68578a538f6bcc61262e8d131d712f1af5a 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECRadialSegment.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECRadialSegment.cxx
@@ -2,38 +2,4 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%4457F4A6038D.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%4457F4A6038D.CLHEP::cm
-
-//## begin module%4457F4A6038D.cp preserve=no
-//## end module%4457F4A6038D.cp
-
-//## Module: HECRadialSegment%4457F4A6038D; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/HECRadialSegment.cxx
-
-//## begin module%4457F4A6038D.additionalIncludes preserve=no
-//## end module%4457F4A6038D.additionalIncludes
-
-//## begin module%4457F4A6038D.includes preserve=yes
-//## end module%4457F4A6038D.includes
-
-// HECRadialSegment
 #include "LArReadoutGeometry/HECRadialSegment.h"
-//## begin module%4457F4A6038D.additionalDeclarations preserve=yes
-//## end module%4457F4A6038D.additionalDeclarations
-
-
-// Class HECRadialSegment 
-
-// Additional Declarations
-  //## begin HECRadialSegment%4457F4A6038D.declarations preserve=yes
-  //## end HECRadialSegment%4457F4A6038D.declarations
-
-//## begin module%4457F4A6038D.epilog preserve=yes
-//## end module%4457F4A6038D.epilog
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/LArDetectorManager.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/LArDetectorManager.cxx
index 677441118a879b69abbf35ea5c0025fff26e92fb..547b7aa8d2e4d9cf68a3a977d53a8c8f2475e113 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/LArDetectorManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/LArDetectorManager.cxx
@@ -2,101 +2,50 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-//## begin module%1.7%.codegen_version preserve=yes
-//   Read the documentation to learn more about C++ code generator
-//   versioning.
-//## end module%1.7%.codegen_version
-
-//## begin module%4466058E0231.CLHEP::cm preserve=no
-//	  %X% %Q% %Z% %W%
-//## end module%4466058E0231.CLHEP::cm
-
-//## begin module%4466058E0231.cp preserve=no
-//## end module%4466058E0231.cp
-
-//## Module: LArDetectorManager%4466058E0231; Pseudo Package body
-//## Source file: /home/atlas/TEST-12.0.2-00/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/LArDetectorManager.cxx
-
-//## begin module%4466058E0231.additionalIncludes preserve=no
-//## end module%4466058E0231.additionalIncludes
-
-//## begin module%4466058E0231.includes preserve=yes
-//## end module%4466058E0231.includes
-
-// LArDetectorManager
 #include "LArReadoutGeometry/LArDetectorManager.h"
-//## begin module%4466058E0231.additionalDeclarations preserve=yes
-//## end module%4466058E0231.additionalDeclarations
-
 #include <algorithm>
 
-
-// Class LArDetectorManager 
-
 LArDetectorManager::LArDetectorManager()
   : m_embManager (0),
     m_emecManager (0),
     m_hecManager (0),
     m_fcalManager (0),
     m_isTestBeam(false)
-  //## begin LArDetectorManager::LArDetectorManager%4466058E0231_const.hasinit preserve=no
-  //## end LArDetectorManager::LArDetectorManager%4466058E0231_const.hasinit
-  //## begin LArDetectorManager::LArDetectorManager%4466058E0231_const.initialization preserve=yes
-  //## end LArDetectorManager::LArDetectorManager%4466058E0231_const.initialization
 {
-  //## begin LArDetectorManager::LArDetectorManager%4466058E0231_const.body preserve=yes
-  //## end LArDetectorManager::LArDetectorManager%4466058E0231_const.body
 }
 
-LArDetectorManager::LArDetectorManager (const EMBDetectorManager* emb, const EMECDetectorManager* emec, const HECDetectorManager* hec, const FCALDetectorManager* fcal)
-  //## begin LArDetectorManager::LArDetectorManager%446607D90148.hasinit preserve=no
-  //## end LArDetectorManager::LArDetectorManager%446607D90148.hasinit
-  //## begin LArDetectorManager::LArDetectorManager%446607D90148.initialization preserve=yes
-  :m_embManager(emb),m_emecManager(emec),m_hecManager(hec),m_fcalManager(fcal),m_isTestBeam(true)
-  //## end LArDetectorManager::LArDetectorManager%446607D90148.initialization
+LArDetectorManager::LArDetectorManager (const EMBDetectorManager* emb
+					, const EMECDetectorManager* emec
+					, const HECDetectorManager* hec
+					, const FCALDetectorManager* fcal)
+  : m_embManager(emb)
+  , m_emecManager(emec)
+  , m_hecManager(hec)
+  , m_fcalManager(fcal)
+  , m_isTestBeam(true)
 {
-  //## begin LArDetectorManager::LArDetectorManager%446607D90148.body preserve=yes
   setName("LArMgr");
-  //## end LArDetectorManager::LArDetectorManager%446607D90148.body
 }
 
-
 LArDetectorManager::~LArDetectorManager()
 {
-  //## begin LArDetectorManager::~LArDetectorManager%4466058E0231_dest.body preserve=yes
   for (unsigned int i=0;i<getNumTreeTops();i++) getTreeTop(i)->unref();
-  //## end LArDetectorManager::~LArDetectorManager%4466058E0231_dest.body
 }
 
-
-
-//## Other Operations (implementation)
 PVConstLink LArDetectorManager::getTreeTop (unsigned int i) const
 {
-  //## begin LArDetectorManager::getTreeTop%446607D300E0.body preserve=yes
   return m_treeTop[i];
-  //## end LArDetectorManager::getTreeTop%446607D300E0.body
 }
 
 unsigned int LArDetectorManager::getNumTreeTops () const
 {
-  //## begin LArDetectorManager::getNumTreeTops%446607D300E7.body preserve=yes
   return m_treeTop.size();
-  //## end LArDetectorManager::getNumTreeTops%446607D300E7.body
 }
 
 void LArDetectorManager::addTreeTop (PVLink treeTop)
 {
-  //## begin LArDetectorManager::addTreeTop%446608BE02DD.body preserve=yes
   if (std::find(m_treeTop.begin(),m_treeTop.end(),treeTop)!=m_treeTop.end())  return;
   m_treeTop.push_back(treeTop);
   treeTop->ref();
-  //## end LArDetectorManager::addTreeTop%446608BE02DD.body
 }
 
-// Additional Declarations
-  //## begin LArDetectorManager%4466058E0231.declarations preserve=yes
-  //## end LArDetectorManager%4466058E0231.declarations
-
-//## begin module%4466058E0231.epilog preserve=yes
-//## end module%4466058E0231.epilog
diff --git a/LArCalorimeter/LArTrackingGeometry/CMakeLists.txt b/LArCalorimeter/LArTrackingGeometry/CMakeLists.txt
index 42e780db286aac3d1eb4fb207909d81d9dc9b0bc..55befff29371019609bda2a31dadbe83ec1315bb 100644
--- a/LArCalorimeter/LArTrackingGeometry/CMakeLists.txt
+++ b/LArCalorimeter/LArTrackingGeometry/CMakeLists.txt
@@ -14,9 +14,7 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           Calorimeter/CaloDetDescr
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
-                          DetectorDescription/GeoPrimitives
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv
                           Tracking/TrkDetDescr/TrkDetDescrUtils
@@ -27,13 +25,14 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LArTrackingGeometry
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib StoreGateLib SGtests GeoModelKernel GeoModelUtilities GeoPrimitives LArReadoutGeometry TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkGeometrySurfaces TrkSurfaces TrkVolumes )
+                     INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib StoreGateLib SGtests GeoModelUtilities LArReadoutGeometry TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkGeometrySurfaces TrkSurfaces TrkVolumes )
 
 # Install files from the package:
 atlas_install_headers( LArTrackingGeometry )
diff --git a/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx b/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx
index 9bbb751949e8754817ace7c3fdaa09f6d2c3c745..89cb49713f733b69cc48d84ad112224a896b98f4 100755
--- a/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx
+++ b/LArCalorimeter/LArTrackingGeometry/src/LArVolumeBuilder.cxx
@@ -22,6 +22,7 @@
 #include "GeoModelKernel/GeoTrd.h"
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoPVConstLink.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoModelUtilities/StoredPhysVol.h"
 // Trk
 #include "TrkDetDescrInterfaces/ITrackingVolumeHelper.h"
@@ -46,12 +47,10 @@
 #include "TrkSurfaces/DiscBounds.h"
 #include "TrkGeometrySurfaces/SlidingCylinderSurface.h"
 #include "TrkGeometrySurfaces/SlidingDiscSurface.h"
-// Amg
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 // StoreGate
 #include "StoreGate/StoreGateSvc.h"
 
-using CLHEP::mm;
+using GeoModelKernelUnits::mm;
 
 // constructor
 LAr::LArVolumeBuilder::LArVolumeBuilder(const std::string& t, const std::string& n, const IInterface* p) :
@@ -170,7 +169,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
     unsigned int currentChilds = currentVPhysVolLink->getNChildVols();
     
     ATH_MSG_DEBUG( "Processing " << currentLogVol->getName() << "... has " 
-		   << currentChilds << " childs, position " << currentVPhysVolLink->getX().getTranslation());
+		   << currentChilds << " childs, position " << currentVPhysVolLink->getX().translation());
     //printInfo( currentVPhysVolLink,2);
   }
 
@@ -677,7 +676,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
      const GeoShape*    lArNegativeEndcapShape  = lArNegativeEndcapLogVol->getShape();
 
      // get the transforms
-     const Amg::Transform3D& lArPositiveEndcapTransform = Amg::CLHEPTransformToEigen(lArPositiveEndcapPhysVol->getAbsoluteTransform());
+     const Amg::Transform3D& lArPositiveEndcapTransform = lArPositiveEndcapPhysVol->getAbsoluteTransform();
      //const Amg::Transform3D& lArNegativeEndcapTransform = Amg::CLHEPTransformToEigen(lArNegativeEndcapPhysVol->getAbsoluteTransform());
      Amg::Vector3D lArPositiveEndcapNomPosition = lArPositiveEndcapTransform.translation();
      //Amg::Vector3D lArNegativeEndcapNomPosition = lArNegativeEndcapTransform.translation();
@@ -980,7 +979,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
   if (  lArECPresamplerLogVol ) {
   
     const GeoShape*    lArECPresamplerShape  = lArECPresamplerLogVol->getShape();
-    const Amg::Transform3D& lArECPresamplerTransform = Amg::CLHEPTransformToEigen(lArECPresamplerPhysVol->getAbsoluteTransform());
+    const Amg::Transform3D& lArECPresamplerTransform = lArECPresamplerPhysVol->getAbsoluteTransform();
 
     // dynamic cast to 'Tubs' shape
     const GeoTubs* psTubs = dynamic_cast<const GeoTubs*>(lArECPresamplerShape);
@@ -1130,10 +1129,10 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
     const GeoShape*    lArNegativeHec2Shape  = lArNegativeHec2LogVol->getShape();
     
     // get the transforms
-    const Amg::Transform3D& lArPositiveHec1Transform = Amg::CLHEPTransformToEigen(lArPositiveHec1PhysVol->getAbsoluteTransform());
-    const Amg::Transform3D& lArPositiveHec2Transform = Amg::CLHEPTransformToEigen(lArPositiveHec2PhysVol->getAbsoluteTransform());
-    const Amg::Transform3D& lArNegativeHec1Transform = Amg::CLHEPTransformToEigen(lArNegativeHec1PhysVol->getAbsoluteTransform());
-    const Amg::Transform3D& lArNegativeHec2Transform = Amg::CLHEPTransformToEigen(lArNegativeHec2PhysVol->getAbsoluteTransform());
+    const Amg::Transform3D& lArPositiveHec1Transform = lArPositiveHec1PhysVol->getAbsoluteTransform();
+    const Amg::Transform3D& lArPositiveHec2Transform = lArPositiveHec2PhysVol->getAbsoluteTransform();
+    const Amg::Transform3D& lArNegativeHec1Transform = lArNegativeHec1PhysVol->getAbsoluteTransform();
+    const Amg::Transform3D& lArNegativeHec2Transform = lArNegativeHec2PhysVol->getAbsoluteTransform();
     
     Amg::Vector3D lArPositiveHec1NomPosition = lArPositiveHec1Transform.translation();
     Amg::Vector3D lArPositiveHec2NomPosition = lArPositiveHec2Transform.translation();
@@ -1327,13 +1326,13 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
 
 
      // get the transforms
-     const Amg::Transform3D& lArPositiveFcal1Transform = Amg::CLHEPTransformToEigen(lArPositiveFcal1PhysVol->getAbsoluteTransform());
-     const Amg::Transform3D& lArPositiveFcal2Transform = Amg::CLHEPTransformToEigen(lArPositiveFcal2PhysVol->getAbsoluteTransform());
-     const Amg::Transform3D& lArPositiveFcal3Transform = Amg::CLHEPTransformToEigen(lArPositiveFcal3PhysVol->getAbsoluteTransform());
+     const Amg::Transform3D& lArPositiveFcal1Transform = lArPositiveFcal1PhysVol->getAbsoluteTransform();
+     const Amg::Transform3D& lArPositiveFcal2Transform = lArPositiveFcal2PhysVol->getAbsoluteTransform();
+     const Amg::Transform3D& lArPositiveFcal3Transform = lArPositiveFcal3PhysVol->getAbsoluteTransform();
 
-     const Amg::Transform3D& lArNegativeFcal1Transform = Amg::CLHEPTransformToEigen(lArNegativeFcal1PhysVol->getAbsoluteTransform());
-     const Amg::Transform3D& lArNegativeFcal2Transform = Amg::CLHEPTransformToEigen(lArNegativeFcal2PhysVol->getAbsoluteTransform());
-     const Amg::Transform3D& lArNegativeFcal3Transform = Amg::CLHEPTransformToEigen(lArNegativeFcal3PhysVol->getAbsoluteTransform());
+     const Amg::Transform3D& lArNegativeFcal1Transform = lArNegativeFcal1PhysVol->getAbsoluteTransform();
+     const Amg::Transform3D& lArNegativeFcal2Transform = lArNegativeFcal2PhysVol->getAbsoluteTransform();
+     const Amg::Transform3D& lArNegativeFcal3Transform = lArNegativeFcal3PhysVol->getAbsoluteTransform();
 
      Amg::Vector3D lArPositiveFcal1NomPosition = lArPositiveFcal1Transform.translation();
      Amg::Vector3D lArPositiveFcal2NomPosition = lArPositiveFcal2Transform.translation();
@@ -1707,7 +1706,7 @@ const std::vector<const Trk::TrackingVolume*>* LAr::LArVolumeBuilder::trackingVo
    // pass MBTS info to CaloTG 
   // MBTS
   const PVConstLink topEC = m_lArMgr->getTreeTop(1U);
-  Amg::Transform3D trIn= Amg::CLHEPTransformToEigen(topEC->getX());   
+  Amg::Transform3D trIn= topEC->getX();   
   Amg::Transform3D tr2(trIn);   
   const PVConstLink mbts= getChild(topEC,"MBTS_mother",trIn);
   if (mbts) {
@@ -2001,7 +2000,7 @@ void LAr::LArVolumeBuilder::printInfo(const PVConstLink pv, int gen) const
 	std::cout<<"polycone:"<<i<<":"<< con->getRMinPlane(i)<<","<<con->getRMaxPlane(i)<<","<<con->getZPlane(i)<< std::endl;
       }
     }
-    Amg::Transform3D transf =  Amg::CLHEPTransformToEigen(pv->getX());
+    Amg::Transform3D transf =  pv->getX();
     std::cout << "position:"<< "R:"<<transf.translation().perp()<<",phi:"<< transf.translation().phi()<<",x:"<<transf.translation().x()<<",y:"<<transf.translation().y()<<",z:"<<transf.translation().z()<<std::endl;
 
     int igen = 0;
@@ -2016,7 +2015,7 @@ void LAr::LArVolumeBuilder::printChildren(const PVConstLink pv,int gen, int igen
   if (gen>-1 && igen>gen) return; 
   std::string cname; 
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = trIn*Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = trIn*pv->getXToChildVol(ic);
  
     //
     //std::cout << " dumping transform to subcomponent" << std::endl;
@@ -2059,7 +2058,7 @@ GeoPVConstLink LAr::LArVolumeBuilder::getChild(GeoPVConstLink mother, std::strin
   // subcomponents
   unsigned int nc = mother->getNChildVols();
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = trIn*Amg::CLHEPTransformToEigen(mother->getXToChildVol(ic));
+    Amg::Transform3D transf = trIn*mother->getXToChildVol(ic);
     GeoPVConstLink cv = mother->getChildVol(ic);
     const GeoLogVol* clv = cv->getLogVol();
     if (clv->getName().substr(0,name.size())==name) { trIn = transf; return cv; } 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/CMakeLists.txt b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/CMakeLists.txt
index 6c888a1fb43735419391c68c39aad022867c5dfe..0366a8b6bda59b4824c3f7c2915779feec6bec39 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/CMakeLists.txt
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/CMakeLists.txt
@@ -38,7 +38,6 @@ atlas_depends_on_subdirs(
    Database/TPTools
    DetectorDescription/AGDD/AGDDKernel
    DetectorDescription/AtlasDetDescr
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoPrimitives
    DetectorDescription/IdDict
    DetectorDescription/IdDictDetDescr
@@ -53,6 +52,8 @@ atlas_depends_on_subdirs(
    Tracking/TrkEvent/TrkMeasurementBase
    Tracking/TrkEvent/TrkPseudoMeasurementOnTrack )
 
+find_package( GeoModel )
+
 # Component(s) in the package:
 atlas_add_tpcnv_library( MuonEventTPCnv
    MuonEventTPCnv/*.h src/*.cxx
@@ -122,8 +123,8 @@ foreach( name CscMcDataCnv_p1_test CscSimDataCnv_p1_test
 
    atlas_add_test( ${name}
       SOURCES test/${name}.cxx
-      LINK_LIBRARIES GaudiKernel TrkSurfaces TrkEventTPCnv TestTools
-      CxxUtils StoreGateLib TPTools AGDDKernel AtlasDetDescr GeoModelKernel
+      LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GaudiKernel TrkSurfaces TrkEventTPCnv TestTools
+      CxxUtils StoreGateLib TPTools AGDDKernel AtlasDetDescr 
       IdDict IdDictDetDescr IdDictParser InDetIdentifier InDetReadoutGeometry
       MuonAGDDDescription MuonReadoutGeometry MuonIdHelpersLib
       TrkEventPrimitives TrkPseudoMeasurementOnTrack MuonEventTPCnv
diff --git a/MuonSpectrometer/MuonDetDescr/MuonAGDD/src/MuonAGDDToolHelper.cxx b/MuonSpectrometer/MuonDetDescr/MuonAGDD/src/MuonAGDDToolHelper.cxx
index 5f521c42b94bb660f6ba64bbacc3a154430de935..df0bc158a34a825ca7f6b3be5cd4af493b59a7aa 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonAGDD/src/MuonAGDDToolHelper.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonAGDD/src/MuonAGDDToolHelper.cxx
@@ -4,6 +4,11 @@
 
 #include "MuonAGDD/MuonAGDDToolHelper.h"
 
+#include "MuonReadoutGeometry/MuonDetectorManager.h"
+#include "MuonReadoutGeometry/MuonReadoutElement.h"
+#include "MuonReadoutGeometry/MMReadoutElement.h"
+#include "MuonReadoutGeometry/sTgcReadoutElement.h"
+
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/IToolSvc.h"
 #include "GaudiKernel/IConversionSvc.h"
@@ -24,10 +29,6 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
-#include "MuonReadoutGeometry/MuonDetectorManager.h"
-#include "MuonReadoutGeometry/MuonReadoutElement.h"
-#include "MuonReadoutGeometry/MMReadoutElement.h"
-#include "MuonReadoutGeometry/sTgcReadoutElement.h"
 #include "StoreGate/DataHandle.h"
 #include "StoreGate/StoreGateSvc.h"
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonAGDDBase/CMakeLists.txt b/MuonSpectrometer/MuonDetDescr/MuonAGDDBase/CMakeLists.txt
index b1bfb46c97458201c76c258ee071f8c14486dab4..de6de38d7809c6fbbfab980bd2bc061a6d8ceb7a 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonAGDDBase/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDetDescr/MuonAGDDBase/CMakeLists.txt
@@ -15,13 +15,14 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
                           DetectorDescription/AGDD/AGDDModel
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           MuonSpectrometer/MuonGeoModel )
 
+find_package( GeoModel )
+
 # Component(s) in the package:
 atlas_add_library( MuonAGDDBase
                    src/*.cxx
                    PUBLIC_HEADERS MuonAGDDBase
                    LINK_LIBRARIES AGDDControl AGDDKernel GaudiKernel MuonAGDDDescription StoreGateLib SGtests MuonGeoModelLib
-                   PRIVATE_LINK_LIBRARIES AGDDModel GeoModelKernel )
+                   PRIVATE_LINK_LIBRARIES ${GEOMODEL_LIBRARIES} AGDDModel )
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/CMakeLists.txt b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/CMakeLists.txt
index 86f379f0de4edcea7439fca5e094ddcbcea40e97..f650896851b269bdb46824a39c452a491d5b7a6b 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( MuonReadoutGeometry )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoPrimitives
                           DetectorDescription/Identifier
                           GaudiKernel
@@ -25,12 +24,13 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( MuonReadoutGeometry
                    src/*.c*
                    PUBLIC_HEADERS MuonReadoutGeometry
-                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoModelKernel GeoPrimitives Identifier GaudiKernel MuonAlignmentData TrkDetElementBase TrkDistortedSurfaces TrkSurfaces MuonIdHelpersLib StoreGateLib SGtests
+                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives Identifier GaudiKernel MuonAlignmentData TrkDetElementBase TrkDistortedSurfaces TrkSurfaces MuonIdHelpersLib StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES AGDDModel MuonAGDDDescription )
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h
index b170efc64c2910cc8bf9342d36c83f752697d8e7..3aaa542867912fceacf73eb9650447afc88f335c 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h
@@ -8,8 +8,8 @@
 #include "GaudiKernel/StatusCode.h"
 
 #include "GaudiKernel/MsgStream.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoVDetectorManager.h"
-#include "GeoModelKernel/GeoAlignableTransform.h"
 #include "MuonIdHelpers/CscIdHelper.h"
 #include "MuonIdHelpers/RpcIdHelper.h"
 #include "MuonIdHelpers/TgcIdHelper.h"
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h
index 5881534508ad4516cece6259d7a4378dcb9edfb6..0053447576ae9d937244c1ddda06668cd6ecb79b 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h
@@ -210,8 +210,8 @@ private:
    const MuonStation* m_parentMuonStation; 
    MuonDetectorManager* m_muon_mgr;
 
-  mutable const Amg::Transform3D* m_absTransform;
-  mutable const Amg::Transform3D* m_defTransform;
+   mutable const HepGeom::Transform3D* m_absTransform;
+   mutable const HepGeom::Transform3D* m_defTransform;
 };
 
 MsgStream& MuonReadoutElement::reLog() const {return *m_MsgStream;} 
@@ -279,23 +279,23 @@ void MuonReadoutElement::setCachingFlag(int value)
 
 inline const Amg::Transform3D & MuonReadoutElement::absTransform() const
 {
-  if( !m_absTransform ) m_absTransform = new Amg::Transform3D(Amg::CLHEPTransformToEigen(absTransformCLHEP()));
-  return *m_absTransform;
+  return getMaterialGeom()->getAbsoluteTransform();
 }
 
 inline const Amg::Transform3D & MuonReadoutElement::defTransform() const
 {
-  if( !m_defTransform ) m_defTransform = new Amg::Transform3D(Amg::CLHEPTransformToEigen(defTransformCLHEP()));
-  return *m_defTransform;
+  return getMaterialGeom()->getDefAbsoluteTransform();
 }
 inline const HepGeom::Transform3D & MuonReadoutElement::absTransformCLHEP() const
 {
-  return getMaterialGeom()->getAbsoluteTransform();
+  if( !m_absTransform ) m_absTransform = new HepGeom::Transform3D(Amg::EigenTransformToCLHEP(getMaterialGeom()->getAbsoluteTransform()));
+  return *m_absTransform;
 }
 
 inline const HepGeom::Transform3D & MuonReadoutElement::defTransformCLHEP() const
 {
-  return getMaterialGeom()->getDefAbsoluteTransform();
+  if( !m_defTransform ) m_defTransform = new HepGeom::Transform3D(Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()));
+  return *m_defTransform;
 }
 
 } // namespace MuonGM
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
index a9ae3a9a65d7a6ec41f9839667619c1e280fdc24..1de091d048b631c2d46795e098de6a0f70c8581e 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
@@ -6,6 +6,7 @@
 #define MuonStation_H
 
 #include "MuonReadoutGeometry/GlobalUtilities.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 #include "GeoModelKernel/GeoAlignableTransform.h"
 #include <map>
 
@@ -188,7 +189,7 @@ MuonStation::getGeoTransform() const
 
 HepGeom::Transform3D
 MuonStation::getTransform() const
-  {return m_transform->getTransform();}
+  {return Amg::EigenTransformToCLHEP(m_transform->getTransform());}
 
 std::string MuonStation::getKey() 
   {
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/CscReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/CscReadoutElement.cxx
index e0a53c8b7998870b988a51dce9b9fccde0f11354..dd33094a70d253fd5d55d7f4366dd0268700c835 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/CscReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/CscReadoutElement.cxx
@@ -80,8 +80,8 @@ CscReadoutElement::CscReadoutElement(GeoVFullPhysVol* pv, std::string stName,
             //              <<tname<<" child "
             //              <<ngv<<" is a gas volume  with tag "
             //              <<lgg<<std::endl;
-            const CLHEP::Hep3Vector trans =  
-               (pvc->getXToChildVol(ich)*pc->getXToChildVol(ngv)).getTranslation();
+            const GeoTrf::Vector3D trans =  
+               (pvc->getXToChildVol(ich)*pc->getXToChildVol(ngv)).translation();
             m_wireplanez[lgg] = trans.x();
 	    //std::cerr<<lgg<<" gg - depth is at "<< m_wireplanez[lgg]<<std::endl;
             lgg --;
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MMReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MMReadoutElement.cxx
index cc34eaebf8f2d529989ef5a23107afe9f344889b..bc0a595f5800c1a6a22c1b09ba5b6f32fcc4288e 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MMReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MMReadoutElement.cxx
@@ -80,7 +80,7 @@ namespace MuonGM {
 	    //std::cerr<<" navigating MM named "
 	    //       <<childname<<" child "
 	    //       <<ich<<" is a layer with tag "<<llay<<std::endl;
-	    m_Xlg[llay-1] = Amg::CLHEPTransformToEigen(pvc->getXToChildVol(ich));
+	    m_Xlg[llay-1] = pvc->getXToChildVol(ich);
             // save layer dimensions
             if (llay==1) {
               if (pc->getLogVol()->getShape()->type()=="Trd") {
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
index 7ea7670ae5a8b5f71e4b4c468485589741f3cedc..fddb2b1769135e1ffd635044a6602dbe4de75d4a 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
@@ -21,9 +21,9 @@
 #include "TrkSurfaces/TrapezoidBounds.h"
 #include "TrkSurfaces/PlaneSurface.h"
 #include "GeoModelKernel/GeoTube.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoPrimitives/CLHEPtoEigenConverter.h"
 
-
 #include "MuonAlignmentData/BLinePar.h"
 
 #include "GaudiKernel/MsgStream.h"
@@ -585,18 +585,18 @@ MdtReadoutElement::nodeform_localTubePos(int multilayer, int tubelayer, int tube
              }
           }
         }
-        HepGeom::Transform3D tubeTrans = cv->getXToChildVol(ii);
+        GeoTrf::Transform3D tubeTrans = cv->getXToChildVol(ii);
         PVConstLink tv = cv->getChildVol(ii);
         double maxtol = 0.0000001;
 
-        if (std::abs(xtube - tubeTrans[0][3]) > maxtol ||
+        if (std::abs(xtube - tubeTrans(0,3)) > maxtol ||
             //std::abs(ytube - tubeTrans[1][3]) > maxtol && std::abs(tubeTrans[1][3]) > maxtol ||
-            std::abs(ztube - tubeTrans[2][3]) > maxtol) {
+            std::abs(ztube - tubeTrans(2,3)) > maxtol) {
           reLog()<<MSG::ERROR << "taking localTubepos from RAW geoModel!!! MISMATCH IN local Y-Z (amdb) for a MDT with cutouts "
                  << endmsg << ": from tube-id and pitch, tube pos = " << xtube
                  << ", " << ytube << ", " << ztube
-                 << " but geoModel gives " << tubeTrans[0][3]
-                 << ", " << tubeTrans[1][3] << ", " << tubeTrans[2][3]
+                 << " but geoModel gives " << tubeTrans(0,3)
+                 << ", " << tubeTrans(1,3) << ", " << tubeTrans(2,3)
                  << endmsg
                  << " for tube " << tube << " tube layer " << tubelayer
                  << " multilayer " << multilayer << endmsg
@@ -606,18 +606,18 @@ MdtReadoutElement::nodeform_localTubePos(int multilayer, int tubelayer, int tube
                  << m_ntubesperlayer << " tubes per layer."
                  <<endmsg;
         }
-        if (tubeTrans[1][3]> maxtol)
+        if (tubeTrans(1,3)> maxtol)
         {
             if ( reLog().level() <= MSG::DEBUG ) 
 	      reLog()<<MSG::DEBUG << "This a tube with cutout stName/Eta/Phi/ml/tl/t = "<<getStationName()<<"/"<<getStationEta()<<"/"<<getStationPhi()<<"/"
 		     <<getMultilayer()<<"/"<<tubelayer<<"/"<<tube<<endmsg;
-            if (std::abs(m_cutoutShift - tubeTrans[1][3]) > maxtol) // check only for tubes actually shifted 
+            if (std::abs(m_cutoutShift - tubeTrans(1,3)) > maxtol) // check only for tubes actually shifted 
             {
                 reLog()<<MSG::ERROR << "taking localTubepos from RAW geoModel!!! MISMATCH IN local X (amdb) for a MDT with cutouts "
                        << endmsg << ": from tube-id/pitch/cutout  tube pos = " << xtube
                        << ", " << m_cutoutShift  << ", " << ztube
-                       << " but geoModel gives " << tubeTrans[0][3]
-                       << ", " << tubeTrans[1][3] << ", " << tubeTrans[2][3]
+                       << " but geoModel gives " << tubeTrans(0,3)
+                       << ", " << tubeTrans(1,3) << ", " << tubeTrans(2,3)
                        << endmsg
                        << " for tube " << tube << " tube layer " << tubelayer
                        << " multilayer " << multilayer << endmsg
@@ -629,7 +629,7 @@ MdtReadoutElement::nodeform_localTubePos(int multilayer, int tubelayer, int tube
             }
         }
         
-        Amg::Vector3D x(tubeTrans[0][3],tubeTrans[1][3],tubeTrans[2][3]);
+        Amg::Vector3D x=tubeTrans.translation();
         if (tube > m_ntubesperlayer || tubelayer > m_nlayers) {
           x = Amg::Vector3D(xtube,ytube,ztube);
         }
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
index 8e65f8847d4a1ec3fec937f328aca35598c87f9f..2295f253d90edac40c119db6605d9e510d72309c 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
@@ -8,9 +8,6 @@
 
 #include "MuonReadoutGeometry/MuonDetectorElement.h"
 #include "MuonReadoutGeometry/MuonDetectorManager.h"
-#include "GeoModelKernel/GeoPhysVol.h"
-
-#include "GaudiKernel/MsgStream.h"
 
 namespace MuonGM {
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx
index 17beb47cc1aeb50abfc0b9350014e495a325e19f..20c2154685f5d5df92dba8c2d81db96ad87f26f5 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx
@@ -13,13 +13,17 @@
 #include "MuonReadoutGeometry/MuonReadoutElement.h"
 #include "MuonReadoutGeometry/MuonDetectorManager.h"
 #include "MuonReadoutGeometry/MuonStation.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include "AthenaKernel/getMessageSvc.h"
 #include "TrkSurfaces/CylinderBounds.h"
 #include "TrkSurfaces/StraightLineSurface.h"
 
+// Test
+
 namespace MuonGM {
 
   MuonReadoutElement::MuonReadoutElement(GeoVFullPhysVol* pv,
@@ -28,7 +32,7 @@ namespace MuonGM {
     : TrkDetElementBase(pv),
       m_Ssize(-9999.), m_Rsize(-9999.), m_Zsize(-9999.), m_LongSsize(-9999.),
       m_LongRsize(-9999.), m_LongZsize(-9999.), m_caching(-1), m_MsgStream(NULL),
-      m_eta(-1), m_phi(-1), m_id_max_init_field(-1), m_absTransform(NULL),m_defTransform(NULL)
+      m_eta(-1), m_phi(-1), m_id_max_init_field(-1), m_absTransform(nullptr),m_defTransform(nullptr)
   {
     //m_msgSvc = Athena::getMessageSvc();
     m_stationS = 0.;
@@ -57,8 +61,8 @@ namespace MuonGM {
   }
 
   void MuonReadoutElement::clear() const {
-    delete m_absTransform; m_absTransform = 0;
-    delete m_defTransform; m_defTransform = 0;    
+    delete m_absTransform; m_absTransform = nullptr;
+    delete m_defTransform; m_defTransform = nullptr;    
   }
 
   const Amg::Vector3D MuonReadoutElement::globalPosition() const
@@ -189,15 +193,13 @@ namespace MuonGM {
 
   Amg::Transform3D MuonReadoutElement::toParentStation() const
   {
-    HepGeom::Transform3D xf = HepGeom::Transform3D::Identity;
-    
     PVConstLink par = parentStationPV();
     if (par == PVConstLink(0)) {
       std::cerr<<"MuonReadoutElement::parentStationPos() *** parent not found"<<std::endl;
       throw;
     }
     
-    HepGeom::Transform3D par_to_child = HepGeom::Transform3D::Identity;    
+    GeoTrf::Transform3D par_to_child = GeoTrf::Transform3D::Identity();
 
     if ( m_indexOfREinMuonStation >=0 ) par_to_child = par->getXToChildVol( (unsigned int)m_indexOfREinMuonStation );
 #ifndef NDEBUG
@@ -206,7 +208,7 @@ namespace MuonGM {
         reLog()<<MSG::ERROR<<"No index to REinMuonStation computed/found until now"<<endmsg;
       }
 #endif
-    return Amg::CLHEPTransformToEigen(par_to_child);
+    return par_to_child;
   }
 
   void
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
index a418eb2439d74e5c299d458168df85d15e720807..4af8364de6bcefde6f00cb1e8c86c68eb7666b26 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
@@ -215,7 +215,7 @@ void MuonStation::setDeltaAmdbLRS(HepGeom::Transform3D xf)
   }
   
 
-  m_transform->setDelta( m_native_to_amdbl->inverse() * (*m_delta_amdb_frame) * (*m_native_to_amdbl) );
+  m_transform->setDelta(Amg::CLHEPTransformToEigen( m_native_to_amdbl->inverse() * (*m_delta_amdb_frame) * (*m_native_to_amdbl) ));
 }
 
 void 
@@ -319,7 +319,7 @@ MuonStation::setDelta_fromAline_forComp(int jobindex,
 
   //////////////////// this is what happens for a full station :    m_transform->setDelta( m_native_to_amdbl->inverse() * (*m_delta_amdb_frame) * (*m_native_to_amdbl) );
 
-  HepGeom::Transform3D parentToChildT = parentToChild->getTransform();
+  HepGeom::Transform3D parentToChildT = Amg::EigenTransformToCLHEP(parentToChild->getTransform());
   HepGeom::Transform3D delta_amdb     = HepGeom::TranslateX3D(tras)*HepGeom::TranslateY3D(traz)*HepGeom::TranslateZ3D(trat)*
                                   HepGeom::RotateX3D(rots)*HepGeom::RotateY3D(rotz)*HepGeom::RotateZ3D(rott);
   //The station to component transform is static and must be computed in terms of "nominal geometry parameters"; fixing here bug 87693 - SS 9/11/2011
@@ -331,7 +331,7 @@ MuonStation::setDelta_fromAline_forComp(int jobindex,
   double  DZcomp = fabs(thisREnominalCenter.z())-fabs(((*m_amdbl_to_global)*HepGeom::Point3D<double>(0.,0.,0)).z())-fabs((getMuonReadoutElement(jobindex)->getZsize())/2.);
 
   HepGeom::Transform3D  childToLocAmdbComponent;
-  HepGeom::Transform3D  childToLocAmdbStation = HepGeom::Transform3D(*m_native_to_amdbl)*HepGeom::Transform3D(parentToChildT);
+  HepGeom::Transform3D  childToLocAmdbStation = HepGeom::Transform3D(*m_native_to_amdbl)*parentToChildT;
   HepGeom::Transform3D  locAmdbStatToLocAmdbComp = HepGeom::Transform3D::Identity;
   // the following line is needed to go for scenario B in last slide of http://www.fisica.unisalento.it/~spagnolo/allow_listing/TGC_Alines/TGC-ALines_2011_03_01.pdf
   // COMMENT next line            to go for scenario A in last slide of http://www.fisica.unisalento.it/~spagnolo/allow_listing/TGC_Alines/TGC-ALines_2011_03_01.pdf
@@ -342,7 +342,7 @@ MuonStation::setDelta_fromAline_forComp(int jobindex,
 					      <<"setDelta_fromAline_forComp: stationName/Jff/Jzz "<<getStationType()<<" "<<getPhiIndex()<<" "<<getEtaIndex()<<" Job "<<jobindex
 					      <<" Origin of component/station AmdbLocalFrame= "<<(*m_amdbl_to_global)*locAmdbStatToLocAmdbComp.inverse()*HepGeom::Point3D<double>(0.,0.,0.)
 					      <<" / "<<(*m_amdbl_to_global)*HepGeom::Point3D<double>(0.,0.,0.)<<endmsg;
-  parentToChild->setDelta(childToLocAmdbComponent.inverse() * delta_amdb * childToLocAmdbComponent);
+  parentToChild->setDelta(Amg::CLHEPTransformToEigen(childToLocAmdbComponent.inverse() * delta_amdb * childToLocAmdbComponent));
   if ( reLog().level() <= MSG::DEBUG ) reLog()<<MSG::DEBUG
 					      <<"setDelta_fromAline_forComp2:stationName/Jff/Jzz "<<getStationType()<<" "<<getPhiIndex()<<" "<<getEtaIndex()<<" Job "<<jobindex
 					      <<" Origin of component/station AmdbLocalFrame= "<<(*m_amdbl_to_global)*locAmdbStatToLocAmdbComp.inverse()*HepGeom::Point3D<double>(0.,0.,0.)
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx
index 3a693b2cf06189d0b7b9ef75849148a0b91cc393..d7c74e4fcfff986f7427055b2633152f8cc5c0d2 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx
@@ -75,8 +75,8 @@ namespace MuonGM {
 		//       <<tname<<" child "
 		//       <<ngv<<" is a gas volume  with tag "<<lgg<<std::endl;
 		PVConstLink pcgg = pcgv->getChildVol(0);
-		HepGeom::Transform3D trans = pvc->getXToChildVol(ich)*pc->getXToChildVol(ngv)*pcgv->getXToChildVol(0);
-		m_Xlg[llay-1][lgg-1] = Amg::CLHEPTransformToEigen(trans);
+		GeoTrf::Transform3D trans = pvc->getXToChildVol(ich)*pc->getXToChildVol(ngv)*pcgv->getXToChildVol(0);
+		m_Xlg[llay-1][lgg-1] = trans;
 	      }
 	    }
 	  }
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx
index fcd5a390833634eb4292c476acefcce794f9dda5..d6303e24d601487249e47aeefa3eb10692895272 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx
@@ -99,7 +99,7 @@ namespace MuonGM {
 	      reLog() << MSG::WARNING << "number of sTGC layers > 4: increase transform array size"<< endmsg;
               continue;
 	    }
-	    m_Xlg[llay-1] = Amg::CLHEPTransformToEigen(pvc->getXToChildVol(ich));
+	    m_Xlg[llay-1] = pvc->getXToChildVol(ich);
 	    /*if (llay==1 || abs(zi)<3 ) {
 	      if (pc->getLogVol()->getShape()->type()=="Shift") {
 		const GeoShapeShift* myshift = dynamic_cast<const GeoShapeShift*> (pc->getLogVol()->getShape());
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/CMakeLists.txt b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/CMakeLists.txt
index 0b37649e6671b0767a53479cbc08963698cd2634..59224e27c33c36e67504ad5873825f7e13e5edb4 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( MuonTrackingGeometry )
 atlas_depends_on_subdirs( PUBLIC
                           AtlasGeometryCommon/SubDetectorEnvelopes
                           Control/AthenaBaseComps
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv
                           Tracking/TrkDetDescr/TrkDetDescrInterfaces
@@ -26,13 +25,14 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( MuonTrackingGeometry
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GeoModelKernel GaudiKernel TrkDetDescrGeoModelCnv TrkDetDescrInterfaces TrkDetDescrUtils TrkGeometry TrkVolumes StoreGateLib SGtests GeoPrimitives MuonReadoutGeometry MuonIdHelpersLib TrkGeometrySurfaces TrkSurfaces )
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrGeoModelCnv TrkDetDescrInterfaces TrkDetDescrUtils TrkGeometry TrkVolumes StoreGateLib SGtests GeoPrimitives MuonReadoutGeometry MuonIdHelpersLib TrkGeometrySurfaces TrkSurfaces )
 
 # Install files from the package:
 atlas_install_headers( MuonTrackingGeometry )
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
index 18e24450ecff652e306f792917a1a0ffd84dacbb..9c25415cf5f2556e6a42b52f83ca83f60b47a49a 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
@@ -277,7 +277,7 @@ const std::vector<std::pair<const Trk::DetachedTrackingVolume*,std::vector<Amg::
           bool simpleTree = false;
           if ( !cv->getNChildVols() ) {
 	    std::vector<Amg::Transform3D > volTr;
-	    volTr.push_back(Amg::CLHEPTransformToEigen(vol.getTransform())); 
+	    volTr.push_back(vol.getTransform()); 
 	    vols.push_back(std::pair<const GeoLogVol*,std::vector<Amg::Transform3D> > (clv,volTr) );
             simpleTree = true;
           } else {
@@ -299,7 +299,7 @@ const std::vector<std::pair<const Trk::DetachedTrackingVolume*,std::vector<Amg::
 	    for (unsigned int ip=0; ip<objs.size();ip++) {
 	      if (protoName==objs[ip].first->name()) {
 		found = true;
-                if (simpleTree) objs[ip].second.push_back(Amg::CLHEPTransformToEigen(vol.getTransform()));
+                if (simpleTree) objs[ip].second.push_back(vol.getTransform());
                 //else objs[ip].second.insert(objs[ip].second.end(),vols[ish].second.begin(),vols[ish].second.end());
 	      } 
 	    }  
@@ -402,7 +402,7 @@ void Muon::MuonInertMaterialBuilder::printChildren(const GeoVPhysVol* pv) const
   // subcomponents
   unsigned int nc = pv->getNChildVols();
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = pv->getXToChildVol(ic);
  
     //
     //std::cout << " dumping transform to subcomponent" << std::endl;
@@ -580,7 +580,7 @@ void Muon::MuonInertMaterialBuilder::getObjsForTranslation(const GeoVPhysVol* pv
   unsigned int nc = pv->getNChildVols();
   ATH_MSG_VERBOSE( " INERT getObjsForTranslation from:"<< pv->getLogVol()->getName()<<","<<pv->getLogVol()->getMaterial()->getName()<<", looping over "<< nc << " children" );
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = pv->getXToChildVol(ic);
     const GeoVPhysVol* cv = &(*(pv->getChildVol(ic)));
     const GeoLogVol* clv = cv->getLogVol();
     if (!cv->getNChildVols()) {
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
index 85ed4948eb56ffbc9e219d01fd903a2d6a0fa72c..2349553f740945dc42aa4fd0531f4ba90a109f7e 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
@@ -186,7 +186,7 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilder:
 	bool simpleTree = false;
 	if ( !cv->getNChildVols() ) {
 	  std::vector<Amg::Transform3D > volTr;
-	  volTr.push_back(Amg::CLHEPTransformToEigen(vol.getTransform())); 
+	  volTr.push_back(vol.getTransform()); 
 	  std::pair<const GeoLogVol*,Trk::MaterialProperties*> cpair(clv,0);
 	  vols.push_back(std::pair<std::pair<const GeoLogVol*,Trk::MaterialProperties*>,std::vector<Amg::Transform3D> > (cpair,volTr) );
           volNames.push_back(vname);
@@ -1422,7 +1422,7 @@ void Muon::MuonStationBuilder::getNSWStationsForTranslation(const GeoVPhysVol* p
   ATH_MSG_DEBUG("getNSWStationsForTranslation from:"<< pv->getLogVol()->getName()<<","<<pv->getLogVol()->getMaterial()->getName()<<", looping over "<< nc << " children");
 
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = Amg::CLHEPTransformToEigen( pv->getXToChildVol(ic));
+    Amg::Transform3D transf =  pv->getXToChildVol(ic);
     const GeoVPhysVol* cv = &(*(pv->getChildVol(ic)));
     const GeoLogVol* clv = cv->getLogVol();
     std::string childName = clv->getName();
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
index de1b40e0abd812db26ecdc86de6b6cf221b4debc..108acd94ba3844a33c9d529449524824ea4a056a 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
@@ -152,7 +152,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
       {
         const GeoVPhysVol* cv = &(*(mv->getChildVol(ich))); 
         const GeoLogVol* clv = cv->getLogVol();
-        Amg::Transform3D transf = Amg::CLHEPTransformToEigen(mv->getXToChildVol(ich));        
+        Amg::Transform3D transf = mv->getXToChildVol(ich);        
         // TEMPORARY CORRECTION 
         //if ( (mv->getLogVol()->getName()).substr(0,3)=="BMF" && (clv->getName()).substr(0,2)=="LB" ) {
         //	  ATH_MSG_DEBUG( "TEMPORARY MANUAL CORRECTION OF BMF SPACER LONG BEAM POSITION");
@@ -448,7 +448,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
         //std::cout << "next component:"<< ich << std::endl;
         const GeoVPhysVol* cv = &(*(mv->getChildVol(ich))); 
         const GeoLogVol* clv = cv->getLogVol();
-        Amg::Transform3D transf = Amg::CLHEPTransformToEigen(mv->getXToChildVol(ich));        
+        Amg::Transform3D transf = mv->getXToChildVol(ich);        
         //std::cout << "component:"<<ich<<":" << clv->getName() <<", made of "<<clv->getMaterial()->getName()<<","<<clv->getShape()->type()<<","  <<transf.getTranslation()<<std::endl;
         // retrieve volumes for components
 	Trk::VolumeBounds* volBounds=0; 
@@ -721,7 +721,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processMdtBox(Trk::Volu
   for (unsigned int ich =0; ich< gv->getNChildVols(); ++ich) {
     const GeoVPhysVol* cv = &(*(gv->getChildVol(ich))); 
     const GeoLogVol* clv = cv->getLogVol();
-    Amg::Transform3D transfc = Amg::CLHEPTransformToEigen(gv->getXToChildVol(ich));        
+    Amg::Transform3D transfc = gv->getXToChildVol(ich);        
     //std::cout << "MDT component:"<<ich<<":" << clv->getName() <<", made of "<<clv->getMaterial()->getName()<<","<<clv->getShape()->type()<<","<<transfc.getTranslation()<<std::endl;
     // printChildren(cv);
     Trk::MaterialProperties* mdtMat=0;
@@ -887,7 +887,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processMdtTrd(Trk::Volu
   for (unsigned int ich =0; ich< gv->getNChildVols(); ++ich) {
     const GeoVPhysVol* cv = &(*(gv->getChildVol(ich))); 
     const GeoLogVol* clv = cv->getLogVol();
-    Amg::Transform3D transfc = Amg::CLHEPTransformToEigen(gv->getXToChildVol(ich));        
+    Amg::Transform3D transfc = gv->getXToChildVol(ich);        
     //std::cout << "MDT component:"<<ich<<":" << clv->getName() <<", made of "<<clv->getMaterial()->getName()<<","<<clv->getShape()->type()<<","<<transfc.translation()<<std::endl;
     double xv = 0.;
     int active = 0;
@@ -1152,8 +1152,8 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processRpc(Trk::Volume*
           unsigned int ngc = gv[ic]->getNChildVols();
           for (unsigned int igc=0; igc<ngc; igc++) {
 	    Amg::Transform3D trgc(Trk::s_idTransform);             
-            if (transfc[ic].rotation().isIdentity()) trgc = Amg::CLHEPTransformToEigen(gv[ic]->getXToChildVol(igc));
-            else trgc = Amg::AngleAxis3D(M_PI,Amg::Vector3D(0.,0.,1.))*Amg::CLHEPTransformToEigen(gv[ic]->getXToChildVol(igc)); 
+            if (transfc[ic].rotation().isIdentity()) trgc = gv[ic]->getXToChildVol(igc);
+            else trgc = Amg::AngleAxis3D(M_PI,Amg::Vector3D(0.,0.,1.))*gv[ic]->getXToChildVol(igc); 
 	    
 	    const GeoVPhysVol* gcv = &(*(gv[ic]->getChildVol(igc)));
 	    const GeoLogVol* gclv = gcv->getLogVol();
@@ -1241,7 +1241,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processSpacer(Trk::Volu
     if ((*vIter)->getNChildVols()) {
       for (unsigned int ich=0; ich<(*vIter)->getNChildVols();++ich) {
 	gv.push_back(&(*((*vIter)->getChildVol(ich))));
-        transf.push_back(Amg::Transform3D( (*tIter)*Amg::CLHEPTransformToEigen((*vIter)->getXToChildVol(ich))));  
+        transf.push_back(Amg::Transform3D( (*tIter)*(*vIter)->getXToChildVol(ich)));  
       }
       vIter=gv.erase(vIter); tIter=transf.erase(tIter);
     } else { vIter++; tIter++; }
@@ -1358,12 +1358,12 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processSpacer(Trk::Volu
       } else if (sub) {
 	std::vector<std::pair<const GeoShape*,Amg::Transform3D> > subVs;
 	const GeoShapeShift* shift = dynamic_cast<const GeoShapeShift*> (sub->getOpB());
-	if (shift) subVs.push_back(std::pair<const GeoShape*,Amg::Transform3D>(shift->getOp(),Amg::CLHEPTransformToEigen(shift->getX())));
+	if (shift) subVs.push_back(std::pair<const GeoShape*,Amg::Transform3D>(shift->getOp(),shift->getX()));
         const GeoShape* shape = sub->getOpA();
         while (shape->type()=="Subtraction") {
           const GeoShapeSubtraction* subtr = dynamic_cast<const GeoShapeSubtraction*> (shape);
           const GeoShapeShift* shift = dynamic_cast<const GeoShapeShift*> (subtr->getOpB());
-          if (shift) subVs.push_back(std::pair<const GeoShape*,Amg::Transform3D>(shift->getOp(),Amg::CLHEPTransformToEigen(shift->getX())));
+          if (shift) subVs.push_back(std::pair<const GeoShape*,Amg::Transform3D>(shift->getOp(),shift->getX()));
           shape = subtr->getOpA();  
 	}
         const GeoBox* box = dynamic_cast<const GeoBox*> (shape);
@@ -1621,7 +1621,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processCscStation(const
   for (unsigned int ich =0; ich< mv->getNChildVols(); ++ich) {
     const GeoVPhysVol* cv = &(*(mv->getChildVol(ich))); 
     const GeoLogVol* clv = cv->getLogVol();
-    Amg::Transform3D transform = Amg::CLHEPTransformToEigen(mv->getXToChildVol(ich));        
+    Amg::Transform3D transform = mv->getXToChildVol(ich);        
     compTransf.push_back(transform);
     compName.push_back(clv->getName());
     compGeoVol.push_back(cv);
@@ -1637,7 +1637,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processCscStation(const
 	  if (xSizes.size()>0) xSizes.push_back((fabs(transform.translation()[0]-compTransf[ich-1].translation()[0])
 						 -xSizes.back()));
 	  else xSizes.push_back(xSize);
-	  double xpos = (transform*Amg::CLHEPTransformToEigen(shift->getX())).translation()[0];
+	  double xpos = (transform*shift->getX()).translation()[0];
 	  if ( xpos-xSize < xmn ) xmn = xpos-xSizes.back();
 	  if ( xpos+xSize > xmx ) xmx = xpos+xSizes.back();
 	}
@@ -1781,7 +1781,7 @@ std::vector<const Trk::TrackingVolume*> Muon::MuonStationTypeBuilder::processTgc
      const GeoLogVol* clv = cv->getLogVol();
      std::string tgc_name = clv->getName();
      //std::cout << "tgc name:" << tgc_name << std::endl; 
-     Amg::Transform3D transform = Amg::CLHEPTransformToEigen(mv->getXToChildVol(ich));        
+     Amg::Transform3D transform = mv->getXToChildVol(ich);        
      //std::cout << "TGC component:"<<ich<<":" << clv->getName() <<", made of "<<clv->getMaterial()->getName()<<","<<clv->getShape()->type()<<","<<transform.translation()<<std::endl;
      const GeoShape* baseShape = clv->getShape();
      if (baseShape->type()=="Subtraction") {
@@ -1825,7 +1825,7 @@ void Muon::MuonStationTypeBuilder::printChildren(const GeoVPhysVol* pv) const
   // subcomponents
   unsigned int nc = pv->getNChildVols();
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = pv->getXToChildVol(ic);
  
     //
     /*
@@ -1896,7 +1896,7 @@ double Muon::MuonStationTypeBuilder::get_x_size(const GeoVPhysVol* pv) const
   }
 
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = pv->getXToChildVol(ic);
     const GeoVPhysVol* cv = &(*(pv->getChildVol(ic)));
     const GeoLogVol* clv = cv->getLogVol();
     double xh=0;
@@ -2056,7 +2056,7 @@ const Trk::LayerArray* Muon::MuonStationTypeBuilder::processCSCTrdComponent(cons
     // step 1 level below
     const GeoVPhysVol* cv1 = &(*(pv->getChildVol(0)));
     for (unsigned int ic=0; ic < cv1->getNChildVols(); ic++) {
-      Amg::Transform3D transfc = Amg::CLHEPTransformToEigen(cv1->getXToChildVol(ic));
+      Amg::Transform3D transfc = cv1->getXToChildVol(ic);
       const GeoVPhysVol* cv = &(*(cv1->getChildVol(ic)));
       const GeoLogVol* clv = cv->getLogVol();
       if ( clv->getName() == "CscArCO2" ) {
@@ -2188,7 +2188,7 @@ const Trk::LayerArray* Muon::MuonStationTypeBuilder::processCSCDiamondComponent(
     // step 1 level below
     const GeoVPhysVol* cv1 = &(*(pv->getChildVol(0)));
     for (unsigned int ic=0; ic < cv1->getNChildVols(); ic++) {
-      Amg::Transform3D transfc = Amg::CLHEPTransformToEigen(cv1->getXToChildVol(ic));
+      Amg::Transform3D transfc = cv1->getXToChildVol(ic);
       const GeoVPhysVol* cv = &(*(cv1->getChildVol(ic)));
       const GeoLogVol* clv = cv->getLogVol();
       if ( clv->getName() == "CscArCO2" ) {
@@ -2322,7 +2322,7 @@ const Trk::LayerArray* Muon::MuonStationTypeBuilder::processTGCComponent(const G
   }
 
   for (unsigned int ic=0; ic < pv->getNChildVols(); ic++) {
-    Amg::Transform3D transfc = Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transfc = pv->getXToChildVol(ic);
     const GeoVPhysVol* cv = &(*(pv->getChildVol(ic)));
     const GeoLogVol* clv = cv->getLogVol();
     if ( clv->getName() == "muo::TGCGas" ) {
@@ -2459,7 +2459,7 @@ double Muon::MuonStationTypeBuilder::decodeX(const GeoShape* sh) const
   if (shift) {
     // std::cout << " decoding shift:" << shift->getOp()->type() <<"," << shift->getX().translation() << std::endl;
     double xA = decodeX( shift->getOp() );
-    double xB = shift->getX().getTranslation()[0]; 
+    double xB = shift->getX().translation()[0]; 
     xHalf = xA + fabs(xB);
   }
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilder.cxx
index c5464dae6da4257926dc68904ddef1ce94575213..3ca351d08f0b26dd77f5234bdb4d2030878b7b70 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilder.cxx
@@ -13,6 +13,8 @@
 #include "SubDetectorEnvelopes/IEnvelopeDefSvc.h"
 // Amg
 #include "GeoPrimitives/GeoPrimitives.h"
+// Units
+#include "GeoModelKernel/Units.h"
 // Trk
 #include "TrkDetDescrInterfaces/ITrackingVolumeArrayCreator.h"
 #include "TrkDetDescrInterfaces/ITrackingVolumeHelper.h"
@@ -220,7 +222,7 @@ const Trk::TrackingGeometry* Muon::MuonTrackingGeometryBuilder::trackingGeometry
   }
   
   // find object's span with tolerance for the alignment 
-  if (!m_stationSpan) m_stationSpan = findVolumesSpan(m_stations, 100.*m_alignTolerance, m_alignTolerance*CLHEP::deg);
+  if (!m_stationSpan) m_stationSpan = findVolumesSpan(m_stations, 100.*m_alignTolerance, m_alignTolerance*GeoModelKernelUnits::deg);
   if (!m_inertSpan)   m_inertSpan = findVolumesSpan(m_inertObjs,0.,0.);
  
   // 0) Preparation //////////////////////////////////////////////////////////////////////////////////////
diff --git a/MuonSpectrometer/MuonGeoModel/CMakeLists.txt b/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
index 9ded36db091cd38e085f079865d640a2bd29a1b9..f3110b921c829cbad12cbd2daa427368b22b2514 100644
--- a/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
+++ b/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
@@ -10,8 +10,8 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           GaudiKernel
                           MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondInterface
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
@@ -27,23 +27,22 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( MuonGeoModelLib
                    src/*.cxx
                    PUBLIC_HEADERS MuonGeoModel
-                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects StoreGateLib SGtests MuonIdHelpersLib
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects StoreGateLib SGtests MuonIdHelpersLib
                    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils )
 
 atlas_add_component( MuonGeoModel
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel StoreGateLib SGtests GeoModelKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils MuonIdHelpersLib MuonGeoModelLib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel StoreGateLib SGtests GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils MuonIdHelpersLib MuonGeoModelLib )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
index 67d960ac1f4f4ad67983b823b8ca72bf3e644ad1..fa27ec620feb32f4898351840768366701e0b8b9 100755
--- a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
+++ b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
@@ -15,7 +15,7 @@
 
 //<<<<<< INCLUDES                                                       >>>>>>
 #include "StoreGate/StoreGateSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include "AthenaKernel/getMessageSvc.h"
 #include <string>
 #include <iostream>
@@ -176,19 +176,19 @@ namespace MuonGM {
                 //std::cout<<" ProcessMDT "<<s<<" index "<<i<<" jsta ="<<wmdt[i].iw<<std::endl;
                 
                 mdt->numOfLayers=wmdt[i].laymdt;
-                mdt->innerRadius=wmdt[i].tubrad*CLHEP::cm;
-                mdt->totalThickness=wmdt[i].tubsta*CLHEP::cm;
-                mdt->pitch=wmdt[i].tubpit*CLHEP::cm;
+                mdt->innerRadius=wmdt[i].tubrad*GeoModelKernelUnits::cm;
+                mdt->totalThickness=wmdt[i].tubsta*GeoModelKernelUnits::cm;
+                mdt->pitch=wmdt[i].tubpit*GeoModelKernelUnits::cm;
                 mdt->thickness=mdt->totalThickness;
                 mdt->tubeDeadLength = 0; // cannot be defined here (it depends on chamber size)
                 //mdt->endPlugLength  is not OK in p03
-                //mdt->endPlugLength = wmdt[i].tubdea*CLHEP::cm;
-                mdt->tubeEndPlugLength = wmdt[i].tubdea*CLHEP::cm;
+                //mdt->endPlugLength = wmdt[i].tubdea*GeoModelKernelUnits::cm;
+                mdt->tubeEndPlugLength = wmdt[i].tubdea*GeoModelKernelUnits::cm;
                                 
-                mdt->tubeWallThickness = wmdt[i].tubwal*CLHEP::cm;
+                mdt->tubeWallThickness = wmdt[i].tubwal*GeoModelKernelUnits::cm;
                 
-                for(unsigned int k=0; k<4;k++) mdt->y[k]=wmdt[i].tubyco[k]*CLHEP::cm;
-                for(unsigned int j=0; j<4;j++) mdt->x[j]=wmdt[i].tubxco[j]*CLHEP::cm;
+                for(unsigned int k=0; k<4;k++) mdt->y[k]=wmdt[i].tubyco[k]*GeoModelKernelUnits::cm;
+                for(unsigned int j=0; j<4;j++) mdt->x[j]=wmdt[i].tubxco[j]*GeoModelKernelUnits::cm;
                 //std::cout << mdt->numOfLayers << std::endl;
             }
             //std::cout<<" nstruct in processMDT "<< nStruct<<" at iter "<<i<<std::endl;
@@ -214,17 +214,17 @@ namespace MuonGM {
         //std::cout << " TECH. A new RPC named " <<s<<" nrpc = "<<nrpc<<std::endl;
         //std::cout<<" Creating a RPC at "<<rpc<<" named "<<s<<std::endl;
     
-        rpc->centralSupPanelThickness          = (wrpcall->tckfsp)*CLHEP::cm;
-        rpc->centralAlSupPanelThickness        = (wrpcall->ackfsp)*CLHEP::cm;
+        rpc->centralSupPanelThickness          = (wrpcall->tckfsp)*GeoModelKernelUnits::cm;
+        rpc->centralAlSupPanelThickness        = (wrpcall->ackfsp)*GeoModelKernelUnits::cm;
         if (RPCprint)
             std::cout<<"ProcessRPC:: RPC central sup panel: tot & Al "<<rpc->centralSupPanelThickness<<" "
                      <<rpc->centralAlSupPanelThickness<<std::endl;
 
-        rpc->bakeliteThickness                  =(wrpcall->tckbak)*CLHEP::cm;
-        rpc->bakeliteframesize                  =0.5*(wrpcall->sdedmi)*CLHEP::cm;
-        rpc->gasThickness                       =(wrpcall->tckgas)*CLHEP::cm;
-        rpc->bakelitePetThickness               =0.190*CLHEP::mm; // TBM same as Amdb, why hardwired? Not in DblQ00Wrpc!
-        rpc->totalAirThickness = 0.52*CLHEP::mm;                  // TBM added
+        rpc->bakeliteThickness                  =(wrpcall->tckbak)*GeoModelKernelUnits::cm;
+        rpc->bakeliteframesize                  =0.5*(wrpcall->sdedmi)*GeoModelKernelUnits::cm;
+        rpc->gasThickness                       =(wrpcall->tckgas)*GeoModelKernelUnits::cm;
+        rpc->bakelitePetThickness               =0.190*GeoModelKernelUnits::mm; // TBM same as Amdb, why hardwired? Not in DblQ00Wrpc!
+        rpc->totalAirThickness = 0.52*GeoModelKernelUnits::mm;                  // TBM added
         rpc->GasGapThickness=2.*rpc->bakeliteThickness+
                              rpc->gasThickness        +
                              2.*rpc->bakelitePetThickness +
@@ -242,26 +242,26 @@ namespace MuonGM {
         if (RPCprint)
             std::cout<<"ProcessRPC::WARNING redefining RPC::bakeliteThickness to include pet "
                      <<rpc->bakeliteThickness<<std::endl;    
-        rpc->spacerDiameter                     =(wrpcall->spdiam)*CLHEP::cm;
-        rpc->spacerPitch                        =(wrpcall->sppitc)*CLHEP::cm;
+        rpc->spacerDiameter                     =(wrpcall->spdiam)*GeoModelKernelUnits::cm;
+        rpc->spacerPitch                        =(wrpcall->sppitc)*GeoModelKernelUnits::cm;
         rpc->MidChamberDeadRegion_in_s          =2.*rpc->bakeliteframesize;
-        rpc->MidChamberDeadRegion_in_z          =(wrpcall->zdedmi)*CLHEP::cm;
+        rpc->MidChamberDeadRegion_in_z          =(wrpcall->zdedmi)*GeoModelKernelUnits::cm;
         if (RPCprint)
             std::cout<<" ProcessRPC:: spacerDiam, pitch, MidChamberDeadRegion_in_s, MidChamberDeadRegion_in_z "
                      <<rpc->spacerDiameter<<" "<<rpc->spacerPitch<<" "
                      <<rpc->MidChamberDeadRegion_in_s<<" "<<rpc->MidChamberDeadRegion_in_z<<std::endl;
 
-        rpc->petFoilThickness    =0.190*CLHEP::mm; //TBM this is the same as bakelite PET thickness?
+        rpc->petFoilThickness    =0.190*GeoModelKernelUnits::mm; //TBM this is the same as bakelite PET thickness?
         if (RPCprint) std::cout
             <<"ProcessRPC:: defining RPC::petfoilThickness = "<<rpc->petFoilThickness
             <<std::endl;    
     
-        rpc->stripPanelFoamThickness            =(wrpcall->tckssu)*CLHEP::cm;
-        rpc->stripPanelCopperSkinThickness      =(wrpcall->tckstr)*CLHEP::cm;
-        rpc->stripPanelStripSidePetThickness    =0.25*CLHEP::mm; //missing in AmdbNova
-        rpc->stripPanelGroundSidePetThickness   =0.07*CLHEP::mm; //missing in AmdbNova
-        rpc->frontendBoardWidth = 36.*CLHEP::mm;
-        rpc->backendBoardWidth  = 21.*CLHEP::mm;
+        rpc->stripPanelFoamThickness            =(wrpcall->tckssu)*GeoModelKernelUnits::cm;
+        rpc->stripPanelCopperSkinThickness      =(wrpcall->tckstr)*GeoModelKernelUnits::cm;
+        rpc->stripPanelStripSidePetThickness    =0.25*GeoModelKernelUnits::mm; //missing in AmdbNova
+        rpc->stripPanelGroundSidePetThickness   =0.07*GeoModelKernelUnits::mm; //missing in AmdbNova
+        rpc->frontendBoardWidth = 36.*GeoModelKernelUnits::mm;
+        rpc->backendBoardWidth  = 21.*GeoModelKernelUnits::mm;
         if (RPCprint) std::cout
             <<"ProcessRPC:: stp panel: foam, 2*copper, petg, pets, fe, be "
             <<rpc->stripPanelFoamThickness<<" "
@@ -283,7 +283,7 @@ namespace MuonGM {
             <<"ProcessRPC::WARNING redefining RPC::stripPanelFoamThickness to include pet on both sides "
             <<rpc->stripPanelFoamThickness <<std::endl;    
         
-        rpc->rpcLayerThickness                  =(wrpcall->tckrla)*CLHEP::cm;
+        rpc->rpcLayerThickness                  =(wrpcall->tckrla)*GeoModelKernelUnits::cm;
         double rpcLayerComputedTck = rpc->GasGapThickness +
                                      2*rpc->stripPanelThickness + rpc->petFoilThickness;    
         if (RPCprint) std::cout<<"ProcessRPC:: rpcLayerComputedTck =  "<<rpcLayerComputedTck
@@ -308,8 +308,8 @@ namespace MuonGM {
                 done = true;
                 //std::cout<<" done for jtech, wrpc[i].jsta = "<<jtech<<" "<<wrpc[i].jsta<<std::endl;
             
-                rpc->externalSupPanelThickness           =(wrpcall->tlohcb)*CLHEP::cm; //TBM
-                rpc->externalAlSupPanelThickness         =(wrpcall->alohcb)*CLHEP::cm; //TBM
+                rpc->externalSupPanelThickness           =(wrpcall->tlohcb)*GeoModelKernelUnits::cm; //TBM
+                rpc->externalAlSupPanelThickness         =(wrpcall->alohcb)*GeoModelKernelUnits::cm; //TBM
                 if (RPCprint) std::cout<<"ProcessRPC:: RPC external sup panel: tot & Al "
                                        <<rpc->centralSupPanelThickness<<" "
                                        <<rpc->centralAlSupPanelThickness<<std::endl;
@@ -323,13 +323,13 @@ namespace MuonGM {
                                                           rpc->externalSupPanelThickness;
                 if (RPCprint) std::cout<<"ProcessRPC:: (computed) Total RPC thickness = "
                                        <<rpc->TotalThickness<<std::endl;
-                rpc->maxThickness = 46.*CLHEP::mm;  // TBM same as (wrpcall->tottck)*CLHEP::cm;
+                rpc->maxThickness = 46.*GeoModelKernelUnits::mm;  // TBM same as (wrpcall->tottck)*GeoModelKernelUnits::cm;
                 rpc->thickness = rpc->maxThickness;
                 if (RPCprint) std::cout<<"ProcessRPC:: RPC max thickness "<<rpc->maxThickness <<std::endl;
                         
-                rpc->stripPitchS                        =(wrpc[i].spitch)*CLHEP::cm;
-                rpc->stripPitchZ                        =(wrpc[i].zpitch)*CLHEP::cm;
-                rpc->stripSeparation                    =(wrpc[i].dedstr)*CLHEP::cm;
+                rpc->stripPitchS                        =(wrpc[i].spitch)*GeoModelKernelUnits::cm;
+                rpc->stripPitchZ                        =(wrpc[i].zpitch)*GeoModelKernelUnits::cm;
+                rpc->stripSeparation                    =(wrpc[i].dedstr)*GeoModelKernelUnits::cm;
                 if (RPCprint) std::cout<<"ProcessRPC:: s_pitch, z_pitch "
                                        <<rpc->stripPitchS <<" "<<rpc->stripPitchZ<<std::endl;
             
@@ -375,11 +375,11 @@ namespace MuonGM {
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wtgcall[i].jsta,2) )
             {
                 tgc->nlayers  =wtgcall[i].nbevol;
-                tgc->thickness=wtgcall[i].widchb*CLHEP::cm;
+                tgc->thickness=wtgcall[i].widchb*GeoModelKernelUnits::cm;
                 //std::cout<<" ProcessTGC accepted "<<s<<" index "<<i<<" jsta ="<<wtgcall[i].jsta
                 //         <<" internal struct has "<<tgc->nlayers<<" layers; thickness is "<<tgc->thickness<<std::endl;
-                tgc->frame_h  =wtgcall[i].fwirch*CLHEP::cm;
-                tgc->frame_ab =wtgcall[i].fwixch*CLHEP::cm;
+                tgc->frame_h  =wtgcall[i].fwirch*GeoModelKernelUnits::cm;
+                tgc->frame_ab =wtgcall[i].fwixch*GeoModelKernelUnits::cm;
                 //int subtype = wtgcall[i].jsta;
                 //             std::cout<<" thick, frame_h, frame_ab "<< tgc->thickness
                 //                      <<" "<<tgc->frame_h<<" "<<tgc->frame_ab<<std::endl;
@@ -394,8 +394,8 @@ namespace MuonGM {
                     n++;
                     //std::cout<<" select this by jsta = "<<wtgc[j].jsta<<" until now "<<n<<" selected"<<std::endl;
                     mat=(int)wtgc[j].icovol;
-                    p=wtgc[j].zpovol*CLHEP::cm;
-                    t=wtgc[j].widvol*CLHEP::cm;
+                    p=wtgc[j].zpovol*GeoModelKernelUnits::cm;
+                    t=wtgc[j].widvol*GeoModelKernelUnits::cm;
                     tgc->materials.push_back(v[mat-1]);
                     //std::cerr<<" Processing TGC iw = "<<s<<" mat = "<<mat<<" v[mat-1] "<<v[mat-1]<<std::endl;
                     tgc->positions.push_back(p);
@@ -454,25 +454,25 @@ namespace MuonGM {
                     //                    std::cout<<" ProcessCSC "<<s<<" index "<<i<<" jsta ="<<wcsc[i].jsta<<std::endl;
                     
                     csc->numOfLayers=wcsc[i].laycsc;
-                    csc->totalThickness=wcsc[i].ttotal*CLHEP::cm;
+                    csc->totalThickness=wcsc[i].ttotal*GeoModelKernelUnits::cm;
                     csc->thickness=csc->totalThickness;
-                    csc->honeycombthick=wcsc[i].tnomex*CLHEP::cm;
+                    csc->honeycombthick=wcsc[i].tnomex*GeoModelKernelUnits::cm;
                     
-                    csc->g10thick=wcsc[i].tlag10*CLHEP::cm;  //csc->g10thick=0.0820*CLHEP::cm;
+                    csc->g10thick=wcsc[i].tlag10*GeoModelKernelUnits::cm;  //csc->g10thick=0.0820*GeoModelKernelUnits::cm;
 
                     // wire spacing 
-                    csc->wirespacing =wcsc[i].wispa*CLHEP::cm;
+                    csc->wirespacing =wcsc[i].wispa*GeoModelKernelUnits::cm;
                     // anode-cathode distance
-                    csc->anocathodist=wcsc[i].dancat*CLHEP::cm;
+                    csc->anocathodist=wcsc[i].dancat*GeoModelKernelUnits::cm;
                     // gapbetwcathstrips
-                    csc->gapbetwcathstrips=wcsc[i].gstrip*CLHEP::cm;
+                    csc->gapbetwcathstrips=wcsc[i].gstrip*GeoModelKernelUnits::cm;
 
                     // precision (Radial) strip pitch
-                    csc->cathreadoutpitch=wcsc[i].pcatre*CLHEP::cm; // it was not used before but set by hand in CscReadoutEl.
+                    csc->cathreadoutpitch=wcsc[i].pcatre*GeoModelKernelUnits::cm; // it was not used before but set by hand in CscReadoutEl.
                     // Azimuthal strip pitch
 
-                    //csc->phireadoutpitch = wcsc[i].psndco*CLHEP::cm;
-                    csc->phireadoutpitch = wcsc[i].azcat*CLHEP::cm;
+                    //csc->phireadoutpitch = wcsc[i].psndco*GeoModelKernelUnits::cm;
+                    csc->phireadoutpitch = wcsc[i].azcat*GeoModelKernelUnits::cm;
                     //std::cerr<<" do we come here ??? csc->phireadoutpitch = "<<csc->phireadoutpitch<<std::endl;
 
                     //std::cerr<<" csc->phireadoutpitch = "<<csc->phireadoutpitch<<"  csc->cathreadoutpitch "<< csc->cathreadoutpitch<<std::endl;
@@ -485,20 +485,20 @@ namespace MuonGM {
                     csc->nPhistrips = 48;
 
                     // precision (Radial) strip width
-                    csc->readoutstripswidth=wcsc[i].wrestr*CLHEP::cm;
+                    csc->readoutstripswidth=wcsc[i].wrestr*GeoModelKernelUnits::cm;
                     // Azimuthal strip width
                     csc->floatingstripswidth =0.;
-                    csc->phistripwidth      = wcsc[i].wflstr*CLHEP::cm; // CTB and layout Q interpretation
+                    csc->phistripwidth      = wcsc[i].wflstr*GeoModelKernelUnits::cm; // CTB and layout Q interpretation
 
                     // dead materials 
-                    csc->rectwasherthick=wcsc[i].trrwas*CLHEP::cm;
-                    csc->roxacellwith = 54.96*CLHEP::mm; //  CTB, layout Q, R, etc: must be computed
-                    csc->roxwirebargap=wcsc[i].groxwi*CLHEP::cm;
-                    csc->fullgasgapwirewidth=wcsc[i].wgasba*CLHEP::cm;
-                    csc->fullwirefixbarwidth=wcsc[i].wfixwi*CLHEP::cm;
-                    csc->wirebarposx=wcsc[i].pba1wi*CLHEP::cm;
-                    csc->wirebarposy=wcsc[i].pba2wi*CLHEP::cm;
-                    csc->wirebarposz=wcsc[i].pba3wi*CLHEP::cm;
+                    csc->rectwasherthick=wcsc[i].trrwas*GeoModelKernelUnits::cm;
+                    csc->roxacellwith = 54.96*GeoModelKernelUnits::mm; //  CTB, layout Q, R, etc: must be computed
+                    csc->roxwirebargap=wcsc[i].groxwi*GeoModelKernelUnits::cm;
+                    csc->fullgasgapwirewidth=wcsc[i].wgasba*GeoModelKernelUnits::cm;
+                    csc->fullwirefixbarwidth=wcsc[i].wfixwi*GeoModelKernelUnits::cm;
+                    csc->wirebarposx=wcsc[i].pba1wi*GeoModelKernelUnits::cm;
+                    csc->wirebarposy=wcsc[i].pba2wi*GeoModelKernelUnits::cm;
+                    csc->wirebarposz=wcsc[i].pba3wi*GeoModelKernelUnits::cm;
 //                    std::cerr<<"A) tname, s, csc->numOfLayers "<<tname<<" "<<s<<" "<<csc->numOfLayers<<std::endl;
                     if (tname == s) return;
                     
@@ -524,14 +524,14 @@ namespace MuonGM {
                 log<<MSG::WARNING<<" update by hand a few numbers for the current technology sub-type "<<s
                    <<" // Layout = "<<mysql->getGeometryVersion()<<" OK if layout is Q02, Q02_initial"<<endmsg;
                 // precision (Radial) strip pitch
-                csc->cathreadoutpitch  =5.31*CLHEP::mm;
+                csc->cathreadoutpitch  =5.31*GeoModelKernelUnits::mm;
                 // Azimuthal strip pitch
-                csc->phireadoutpitch   =21.0*CLHEP::mm;
+                csc->phireadoutpitch   =21.0*GeoModelKernelUnits::mm;
                 // precision (Radial) strip width
-                csc->readoutstripswidth=1.52*CLHEP::mm;
+                csc->readoutstripswidth=1.52*GeoModelKernelUnits::mm;
                 // Azimuthal strip width
                 csc->floatingstripswidth = 0; // layout P interpretation
-                csc->phistripwidth    =20.60*CLHEP::mm;
+                csc->phistripwidth    =20.60*GeoModelKernelUnits::mm;
                 return;
             }
         }
@@ -552,9 +552,9 @@ namespace MuonGM {
         //std::cerr << " TECH. A new SPA named " <<s<<" nspa = "<<nspa<<std::endl;
         for (unsigned int i=0; i<dhwspa->size(); i++) {
             //        sprintf(ind,"%i",wspa[i].type);
-            //if(s[3]==ind[0]) spa->thickness=wspa[i].tckspa*CLHEP::cm;
+            //if(s[3]==ind[0]) spa->thickness=wspa[i].tckspa*GeoModelKernelUnits::cm;
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wspa[i].jsta,2) )
-                spa->thickness=wspa[i].tckspa*CLHEP::cm;
+                spa->thickness=wspa[i].tckspa*GeoModelKernelUnits::cm;
         }
     } // end of ProcessSPA
     
@@ -576,17 +576,17 @@ namespace MuonGM {
             //        sprintf(ind,"%i",wsup[i].type);
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wsup[i].jsta,2) )
             {
-                sup->alFlangeThickness=wsup[i].xxsup[0]*CLHEP::cm;
+                sup->alFlangeThickness=wsup[i].xxsup[0]*GeoModelKernelUnits::cm;
                 //if (s[3]=='3') //SUP3
                 if( s.substr(3,s.size()-3) == "03" )
                 {
-                    sup->alHorFlangeLength=(fabs)(wsup[i].zzsup[1])*CLHEP::cm;
-                    sup->alVerFlangeLength=wsup[i].xxsup[1]*CLHEP::cm - wsup[i].xxsup[0]*CLHEP::cm;
-                    sup->alVerProfileThickness=wsup[i].zzsup[3]*CLHEP::cm;
-                    sup->alHorProfileThickness=wsup[i].xxsup[3]*CLHEP::cm - wsup[i].xxsup[2]*CLHEP::cm;
-                    sup->largeVerClearance=wsup[i].xxsup[3]*CLHEP::cm;
-                    sup->smallVerClearance=wsup[i].xxsup[2]*CLHEP::cm;
-                    sup->HorClearance=wsup[i].zzsup[2]*CLHEP::cm;
+                    sup->alHorFlangeLength=(fabs)(wsup[i].zzsup[1])*GeoModelKernelUnits::cm;
+                    sup->alVerFlangeLength=wsup[i].xxsup[1]*GeoModelKernelUnits::cm - wsup[i].xxsup[0]*GeoModelKernelUnits::cm;
+                    sup->alVerProfileThickness=wsup[i].zzsup[3]*GeoModelKernelUnits::cm;
+                    sup->alHorProfileThickness=wsup[i].xxsup[3]*GeoModelKernelUnits::cm - wsup[i].xxsup[2]*GeoModelKernelUnits::cm;
+                    sup->largeVerClearance=wsup[i].xxsup[3]*GeoModelKernelUnits::cm;
+                    sup->smallVerClearance=wsup[i].xxsup[2]*GeoModelKernelUnits::cm;
+                    sup->HorClearance=wsup[i].zzsup[2]*GeoModelKernelUnits::cm;
                     sup->xAMDB0 = -sup->largeVerClearance -sup->alHorProfileThickness/2.;
                     sup->yAMDB0 = 0.;
                     sup->zAMDB0 = - sup->alVerProfileThickness
@@ -596,11 +596,11 @@ namespace MuonGM {
                 }
                 else //SUP1 and SUP2
                 {
-                    sup->alHorFlangeLength=wsup[i].zzsup[0]*CLHEP::cm;
+                    sup->alHorFlangeLength=wsup[i].zzsup[0]*GeoModelKernelUnits::cm;
                     sup->alVerFlangeLength=0.;
-                    sup->alVerProfileThickness=wsup[i].xxsup[0]*CLHEP::cm;
+                    sup->alVerProfileThickness=wsup[i].xxsup[0]*GeoModelKernelUnits::cm;
                     sup->alHorProfileThickness=0.;
-                    sup->largeVerClearance=wsup[i].xxsup[1]*CLHEP::cm;
+                    sup->largeVerClearance=wsup[i].xxsup[1]*GeoModelKernelUnits::cm;
                     sup->smallVerClearance=0.;
                     sup->HorClearance=0.;
                     double totzgm = 2.*sup->alHorFlangeLength+sup->alVerProfileThickness+sup->HorClearance;
@@ -643,11 +643,11 @@ namespace MuonGM {
         for (unsigned int i=0; i<dhwded->size(); i++) {
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wded[i].jsta,2) )
             {
-//                 ded->AlThickness=(wded[i].tckded)*CLHEP::cm;
-//                 ded->AlThickness = ded->AlThickness * CLHEP::cm;
+//                 ded->AlThickness=(wded[i].tckded)*GeoModelKernelUnits::cm;
+//                 ded->AlThickness = ded->AlThickness * GeoModelKernelUnits::cm;
 // a lot of confusion in the various versions of the geometry in nova
-                ded->AlThickness=0.3*CLHEP::mm;
-                ded->thickness=(wded[i].auphcb)*CLHEP::cm;
+                ded->AlThickness=0.3*GeoModelKernelUnits::mm;
+                ded->thickness=(wded[i].auphcb)*GeoModelKernelUnits::cm;
                 ded->HoneyCombThickness=ded->thickness-2.*ded->AlThickness;
                 break;
             }
@@ -670,9 +670,9 @@ namespace MuonGM {
         for (int i=0; i<nStruct; i++) {
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wchv[i].jsta,2) )
             {
-                chv->thickness=wchv[i].thickness*CLHEP::cm;
-                chv->largeness=wchv[i].largeness*CLHEP::cm;
-                chv->height=wchv[i].heightness*CLHEP::cm;
+                chv->thickness=wchv[i].thickness*GeoModelKernelUnits::cm;
+                chv->largeness=wchv[i].largeness*GeoModelKernelUnits::cm;
+                chv->height=wchv[i].heightness*GeoModelKernelUnits::cm;
             }
         }
     }// end of ProcessCHV
@@ -694,9 +694,9 @@ namespace MuonGM {
         for (int i=0; i<nStruct; i++) {
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wcro[i].jsta,2) )
             {
-                cro->thickness=wcro[i].thickness*CLHEP::cm;
-                cro->largeness=wcro[i].largeness*CLHEP::cm;
-                cro->height=wcro[i].heightness*CLHEP::cm;
+                cro->thickness=wcro[i].thickness*GeoModelKernelUnits::cm;
+                cro->largeness=wcro[i].largeness*GeoModelKernelUnits::cm;
+                cro->height=wcro[i].heightness*GeoModelKernelUnits::cm;
                 //std::cerr<<" thick, width, height "<<cro->thickness<<" "<<cro->largeness<<" "<<cro->height<<std::endl;
             }
         }
@@ -719,9 +719,9 @@ namespace MuonGM {
         for (int i=0; i<nStruct; i++) {
             if( s.substr(3,s.size()-3) == MuonGM::buildString(wcmi[i].jsta,2) )
             {
-                cmi->thickness=wcmi[i].thickness*CLHEP::cm;
-                cmi->largeness=wcmi[i].largeness*CLHEP::cm;
-                cmi->height=wcmi[i].heightness*CLHEP::cm;
+                cmi->thickness=wcmi[i].thickness*GeoModelKernelUnits::cm;
+                cmi->largeness=wcmi[i].largeness*GeoModelKernelUnits::cm;
+                cmi->height=wcmi[i].heightness*GeoModelKernelUnits::cm;
             }
         }
     }// end of ProcessCMI
@@ -743,10 +743,10 @@ namespace MuonGM {
         for (int i=0; i<nStruct; i++) {
             if( s.substr(2,s.size()-2) == MuonGM::buildString(wlbi[i].jsta,2) )
             {
-                lbi->thickness=wlbi[i].thickness*CLHEP::cm;
-                lbi->height=wlbi[i].height*CLHEP::cm;
-                lbi->lowerThickness=wlbi[i].lowerThickness*CLHEP::cm;
-                lbi->yShift=wlbi[i].yShift*CLHEP::cm;
+                lbi->thickness=wlbi[i].thickness*GeoModelKernelUnits::cm;
+                lbi->height=wlbi[i].height*GeoModelKernelUnits::cm;
+                lbi->lowerThickness=wlbi[i].lowerThickness*GeoModelKernelUnits::cm;
+                lbi->yShift=wlbi[i].yShift*GeoModelKernelUnits::cm;
             }
         }
     } // end of ProcessLBI
@@ -860,13 +860,13 @@ namespace MuonGM {
                 //std::cout<<" ---- iz,fi  "<<p.zindex<<", "<<p.phiindex;
                 p.phi      = aptp[ipos].dphi+double(phiindex)*45.;
                 //std::cout<<" phi is "<<p.phi;
-                p.radius   = aptp[ipos].r*CLHEP::cm;
+                p.radius   = aptp[ipos].r*GeoModelKernelUnits::cm;
                 //std::cout<<"  r  is "<<p.radius<<std::endl;
-                p.z        = aptp[ipos].z*CLHEP::cm;
+                p.z        = aptp[ipos].z*GeoModelKernelUnits::cm;
                 if (p.zindex<0 && name.substr(0,1) == "B" && hasMdts) p.z = p.z-halfpitch;
             
                 //std::cout<<"  z  is "<<p.z<<std::endl;
-                p.shift    = aptp[ipos].s*CLHEP::cm;
+                p.shift    = aptp[ipos].s*GeoModelKernelUnits::cm;
                 if (verbose_posmap) std::cout<<"p.zindex,p.phi "<<p.zindex<<" "<<p.phiindex<<" shift is "<<p.shift<<std::endl;
                 // amdb seems to follow the opposite convention about the sign
                 // of rotation around the azimuthal axis (foro them it is a rotation
@@ -1045,9 +1045,9 @@ namespace MuonGM {
                             //                       std::cout << "FindPosition found the match for " << stname
                             //                                 << std::endl;
                             AlignPos ap;
-                            ap.tras=0.*CLHEP::cm; // in cm from NOVA...
-                            ap.traz=0.*CLHEP::cm; // in cm
-                            ap.trat=0.*CLHEP::cm; // in cm
+                            ap.tras=0.*GeoModelKernelUnits::cm; // in cm from NOVA...
+                            ap.traz=0.*GeoModelKernelUnits::cm; // in cm
+                            ap.trat=0.*GeoModelKernelUnits::cm; // in cm
                             ap.rots=0.; // in radians
                             ap.rotz=0.; // in radians
                             ap.rott=0.; // in radians             
@@ -1055,9 +1055,9 @@ namespace MuonGM {
 			    
                             if (controlAlines >= 111111) 
                             {
-                                ap.tras=aszt[ipos].tras*CLHEP::cm; // in cm from NOVA...
-                                ap.traz=aszt[ipos].traz*CLHEP::cm; // in cm
-                                ap.trat=aszt[ipos].trat*CLHEP::cm; // in cm
+                                ap.tras=aszt[ipos].tras*GeoModelKernelUnits::cm; // in cm from NOVA...
+                                ap.traz=aszt[ipos].traz*GeoModelKernelUnits::cm; // in cm
+                                ap.trat=aszt[ipos].trat*GeoModelKernelUnits::cm; // in cm
                                 ap.rots=aszt[ipos].rots; // in radians
                                 ap.rotz=aszt[ipos].rotz; // in radians
                                 ap.rott=aszt[ipos].rott; // in radians
@@ -1083,17 +1083,17 @@ namespace MuonGM {
                                 }
                                 if  (int(controlAlines/1000)%10 != 0)
                                 {
-                                    ap.trat=aszt[ipos].trat*CLHEP::cm;
+                                    ap.trat=aszt[ipos].trat*GeoModelKernelUnits::cm;
                                     //std::cout<<" setting up t-translation "<<ap.trat<<endl;
                                 }
                                 if  (int(controlAlines/10000)%10 != 0)
                                 {
-                                    ap.traz=aszt[ipos].traz*CLHEP::cm;
+                                    ap.traz=aszt[ipos].traz*GeoModelKernelUnits::cm;
                                     //std::cout<<" setting up z-translation "<<ap.traz<<endl;
                                 }
                                 if  (int(controlAlines/100000)%10 != 0)
                                 {
-                                    ap.tras=aszt[ipos].tras*CLHEP::cm;
+                                    ap.tras=aszt[ipos].tras*GeoModelKernelUnits::cm;
                                     //std::cout<<" setting up s-translation "<<ap.tras<<endl;
                                 }
                             }
@@ -1153,7 +1153,7 @@ namespace MuonGM {
 
         // that doesn't seem right for BME/BMG chambers - no idea if has an impact at the end
         // in any case it was wrong since every and would have been wrong also in previous code
-        double default_halfpitch = 15.0175*CLHEP::mm;
+        double default_halfpitch = 15.0175*GeoModelKernelUnits::mm;
 	double halfpitch = default_halfpitch;
 	
         // loop over the banks of station components: ALMN
@@ -1220,7 +1220,7 @@ namespace MuonGM {
 			<< " for " << name << std::endl;
 		      continue;
 		    }
-		    halfpitch = 0.5*wmdt[jtech-1].tubpit*CLHEP::cm;
+		    halfpitch = 0.5*wmdt[jtech-1].tubpit*GeoModelKernelUnits::cm;
 		    log << MSG::DEBUG
 		      << "Found new halfpitch: " << halfpitch
 		      << " for " << name << std::endl;
@@ -1268,19 +1268,19 @@ namespace MuonGM {
             }
 
             // define here common properties
-            c->posx=almn[icomp].dx*CLHEP::cm;
-            c->posy=almn[icomp].dy*CLHEP::cm;
-            c->posz=almn[icomp].dz*CLHEP::cm;
+            c->posx=almn[icomp].dx*GeoModelKernelUnits::cm;
+            c->posy=almn[icomp].dy*GeoModelKernelUnits::cm;
+            c->posz=almn[icomp].dz*GeoModelKernelUnits::cm;
             c->index=almn[icomp].job;
             c->name=cartec+MuonGM::buildString(almn[icomp].iw, 2);
             c->iswap=almn[icomp].ishape;
-            c->dx1=almn[icomp].width_xs*CLHEP::cm;
-            c->dx2=almn[icomp].width_xl*CLHEP::cm;
-            c->dy=almn[icomp].length_y*CLHEP::cm;
-            c->excent=almn[icomp].excent*CLHEP::cm;
-            c->deadx=almn[icomp].dead1*CLHEP::cm;
-            c->deady=almn[icomp].dead2*CLHEP::cm;
-            c->dead3=almn[icomp].dead3*CLHEP::cm;
+            c->dx1=almn[icomp].width_xs*GeoModelKernelUnits::cm;
+            c->dx2=almn[icomp].width_xl*GeoModelKernelUnits::cm;
+            c->dy=almn[icomp].length_y*GeoModelKernelUnits::cm;
+            c->excent=almn[icomp].excent*GeoModelKernelUnits::cm;
+            c->deadx=almn[icomp].dead1*GeoModelKernelUnits::cm;
+            c->deady=almn[icomp].dead2*GeoModelKernelUnits::cm;
+            c->dead3=almn[icomp].dead3*GeoModelKernelUnits::cm;
 
             //std::cout<<" This component of station "<<name<<" is a "<<c->name<<std::endl;
             if (cartec == "CSC")
@@ -1289,10 +1289,10 @@ namespace MuonGM {
                 if (derc == NULL) std::cout<<" There is a problem"<<std::endl;
                 if (name[2] == 'L'){
                     //std::cout<<" here is a CSL ..."<<std::endl;
-                    derc->dy = 1129.20*CLHEP::mm;  // AMDB-Q and CTB
+                    derc->dy = 1129.20*GeoModelKernelUnits::mm;  // AMDB-Q and CTB
                     // DHW: fix values from AMDB
-                    //else derc->dy = 1111.5*CLHEP::mm;
-                    derc->maxwdy = almn[icomp].length_y*CLHEP::cm;
+                    //else derc->dy = 1111.5*GeoModelKernelUnits::mm;
+                    derc->maxwdy = almn[icomp].length_y*GeoModelKernelUnits::cm;
                 }
                 else  derc->maxwdy = c->dy;
                 //ProcessCSC(derc->name);
@@ -1302,7 +1302,7 @@ namespace MuonGM {
                 derc->maxwdy = derc->dy;
                 if (jtech == 6 && name.substr(0,3) == "CSL") 
                 {
-                    derc->dy     = 1129.20*CLHEP::mm; // AMDB-Q and CTB
+                    derc->dy     = 1129.20*GeoModelKernelUnits::mm; // AMDB-Q and CTB
                 }
                 //ProcessSPA(derc->name);
             }
@@ -1409,10 +1409,10 @@ template <class TYPEdnacut, class TYPEacut, class TYPEdnalin, class TYPEalin,
 		     << " component with subcut i="<<alin[ialin].i
 		     << endmsg;
 		  Cutout *c = new Cutout();
-		  c->dx = alin[ialin].dx*CLHEP::cm;
-		  c->dy = alin[ialin].dy*CLHEP::cm;
-		  c->widthXs = alin[ialin].width_xs*CLHEP::cm;
-		  c->widthXl = alin[ialin].width_xl*CLHEP::cm;
+		  c->dx = alin[ialin].dx*GeoModelKernelUnits::cm;
+		  c->dy = alin[ialin].dy*GeoModelKernelUnits::cm;
+		  c->widthXs = alin[ialin].width_xs*GeoModelKernelUnits::cm;
+		  c->widthXl = alin[ialin].width_xl*GeoModelKernelUnits::cm;
                   //std::string::size_type locmystr = mysql->get_DBMuonVersion().find("Egg");
                   //if ( locmystr != std::string::npos )
                   //{                      
@@ -1425,19 +1425,19 @@ template <class TYPEdnacut, class TYPEacut, class TYPEdnalin, class TYPEalin,
                   //    if (alin[ialin].jtyp == 11 && c->dy>0.1)
                   //    {
                   //        std::cout<<"DBREADER redefining dy of the cutout from "<<c->dy;
-                  //        c->dy = 1021.2000*CLHEP::mm;
+                  //        c->dy = 1021.2000*GeoModelKernelUnits::mm;
                   //        std::cout<<" to "<<c->dy<<std::endl;
                   //    }
                   //    else if (alin[ialin].jtyp == 11 && c->dy>0.0001)
                   if (alin[ialin].jtyp == 11 && (c->dy>0.0001 && c->dy<1.))
                   {
                     std::cout<<"DBREADER redefining dy of the cutout from "<<c->dy;
-                    c->dy = 0.000*CLHEP::mm;
+                    c->dy = 0.000*GeoModelKernelUnits::mm;
                     std::cout<<" to "<<c->dy<<std::endl;
                   }
                   //}
-		  c->lengthY = alin[ialin].length_y*CLHEP::cm;
-		  c->excent = alin[ialin].excent*CLHEP::cm;
+		  c->lengthY = alin[ialin].length_y*GeoModelKernelUnits::cm;
+		  c->excent = alin[ialin].excent*GeoModelKernelUnits::cm;
                   c->dead1 = alin[ialin].dead1;
 		  // temporary fix for bug in Nova/Oracle: 18/05/2006 I don't think this is needed anymore 
 		  // c->dead1 = 10.*alin[ialin].dead1;
diff --git a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/Station.h b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/Station.h
index 1154694845d658a49089be8d48a934e2bd7bf135..a2034bb6a1ffa5f6a0db5e73e11b74a882454082 100755
--- a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/Station.h
+++ b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/Station.h
@@ -12,7 +12,8 @@
 #include "MuonGeoModel/Cutout.h"
 #include "MuonGeoModel/Position.h"
 #include "MuonGeoModel/AlignPos.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 /*
    This class holds an std::map of Position, AlignPos and an std::vector of 
@@ -67,14 +68,14 @@ public:
     // apit = station->FindAlignPos(zi,fi);
     // Delta = station->getDeltaTransform( ap, (*pit).second );
     // xf->setDelta( Delta );
-        HepGeom::Transform3D native_to_tsz_frame( const Position & p ) const;
-        HepGeom::Transform3D tsz_to_native_frame( const Position & p ) const;
-        HepGeom::Transform3D tsz_to_global_frame( const Position & p ) const;
-        HepGeom::Transform3D global_to_tsz_frame( const Position & p ) const;
-        HepGeom::Transform3D getNominalTransform( const Position & p ) const;
-        HepGeom::Transform3D getDeltaTransform_tszFrame( const AlignPos & ap ) const;
-        HepGeom::Transform3D getDeltaTransform( const AlignPos & ap, const Position & p ) const;
-        HepGeom::Transform3D getAlignedTransform( const AlignPos & ap, const Position & p ) const;
+        GeoTrf::Transform3D native_to_tsz_frame( const Position & p ) const;
+        GeoTrf::Transform3D tsz_to_native_frame( const Position & p ) const;
+        GeoTrf::Transform3D tsz_to_global_frame( const Position & p ) const;
+        GeoTrf::Transform3D global_to_tsz_frame( const Position & p ) const;
+        GeoTrf::Transform3D getNominalTransform( const Position & p ) const;
+        GeoTrf::Transform3D getDeltaTransform_tszFrame( const AlignPos & ap ) const;
+        GeoTrf::Transform3D getDeltaTransform( const AlignPos & ap, const Position & p ) const;
+        GeoTrf::Transform3D getAlignedTransform( const AlignPos & ap, const Position & p ) const;
     //HepGeom::Transform3D getAmdbOrgTrans(const Position & p) const;
     //}
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/Csc.cxx b/MuonSpectrometer/MuonGeoModel/src/Csc.cxx
index 67ba7bec96c2cfe75492b333b7dac5e916a5b80d..930de752ce4f863003e41f588f8689e5186c07fe 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Csc.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Csc.cxx
@@ -93,8 +93,8 @@ Csc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
     GeoTrd* upTrd = new GeoTrd(thickness/2., thickness/2., longWidth/2., 
                                  upWidth/2., (physicalLength-maxwLength)/2.);
     const GeoShape* sCSL =
-      & ( (downTrd->add( (*upTrd) << HepGeom::TranslateZ3D(physicalLength/2.) ) ) 
-      << HepGeom::TranslateZ3D((maxwLength - physicalLength)/2.) );
+      & ( (downTrd->add( (*upTrd) << GeoTrf::TranslateZ3D(physicalLength/2.) ) ) 
+      << GeoTrf::TranslateZ3D((maxwLength - physicalLength)/2.) );
     lcsc = new GeoLogVol(logVolName, sCSL, mcsc);
   }
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/CscMultilayer.cxx b/MuonSpectrometer/MuonGeoModel/src/CscMultilayer.cxx
index eeba6d8e279a1f0404aa86c501ad5351aae522a0..25c98f7d809c2a05f4f10e254932325f0e65c5cd 100755
--- a/MuonSpectrometer/MuonGeoModel/src/CscMultilayer.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/CscMultilayer.cxx
@@ -11,6 +11,7 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "MuonGeoModel/MYSQL.h"
 #include "MuonGeoModel/Csc.h"
 #include "MuonGeoModel/CSC_Technology.h"
@@ -79,8 +80,8 @@ CscMultiLayer::build(int /*cutoutson*/, std::vector<Cutout*> /*vcutdef*/)
   if (excent != length) {
     const GeoShape* smlt = new GeoTrd(thickness/2., thickness/2., longWidth/2.,
                                       upWidth/2., (physicalLength-maxwLength)/2.);
-    sml = & ( (sml->add( (*smlt) << HepGeom::TranslateZ3D(physicalLength/2.) ) )
-              << HepGeom::TranslateZ3D((maxwLength - physicalLength)/2.) );
+    sml = & ( (sml->add( (*smlt) << GeoTrf::TranslateZ3D(physicalLength/2.) ) )
+              << GeoTrf::TranslateZ3D((maxwLength - physicalLength)/2.) );
   }
 //  const GeoMaterial* mair = matManager->getMaterial("std::Air");
   const GeoMaterial* mhon = matManager->getMaterial("muo::Honeycomb");
@@ -95,12 +96,12 @@ CscMultiLayer::build(int /*cutoutson*/, std::vector<Cutout*> /*vcutdef*/)
   if (excent != length) {
     const GeoShape* shont = new GeoTrd(hon_thick/2., hon_thick/2., longWidth/2., 
                                        upWidth/2., (physicalLength-maxwLength)/2.);
-    shon = &( (shon->add( (*shont) << HepGeom::TranslateZ3D(physicalLength/2.) ) )
-             << HepGeom::TranslateZ3D((maxwLength - physicalLength)/2.) );
+    shon = &( (shon->add( (*shont) << GeoTrf::TranslateZ3D(physicalLength/2.) ) )
+             << GeoTrf::TranslateZ3D((maxwLength - physicalLength)/2.) );
     const GeoShape* sg10hont = new GeoTrd(g10thi/2., g10thi/2., longWidth/2., 
                                           upWidth/2., (physicalLength-maxwLength)/2.);
-    sg10hon = &( (sg10hon->add( (*sg10hont) << HepGeom::TranslateZ3D(physicalLength/2.) ) )
-             << HepGeom::TranslateZ3D((maxwLength - physicalLength)/2.) );
+    sg10hon = &( (sg10hon->add( (*sg10hont) << GeoTrf::TranslateZ3D(physicalLength/2.) ) )
+             << GeoTrf::TranslateZ3D((maxwLength - physicalLength)/2.) );
   }
 //  const GeoMaterial* mhon = matManager->getMaterial("muo::Honeycomb");
   const GeoLogVol* lhon = new GeoLogVol("Honeycomb",shon,mhon);
@@ -134,8 +135,8 @@ CscMultiLayer::build(int /*cutoutson*/, std::vector<Cutout*> /*vcutdef*/)
                       gShortWidth/2., gLongWidth/2., gmaxwLength/2.);
     const GeoShape* sgast = new GeoTrd(gasThickness/2.,gasThickness/2., gLongWidth/2.,
                                        gupWidth/2., (gLength-gmaxwLength)/2.);
-    sgas = &( (sgas->add( (*sgast) << HepGeom::TranslateZ3D(gLength/2.) ) )
-               << HepGeom::TranslateZ3D((gmaxwLength - gLength)/2.) );
+    sgas = &( (sgas->add( (*sgast) << GeoTrf::TranslateZ3D(gLength/2.) ) )
+               << GeoTrf::TranslateZ3D((gmaxwLength - gLength)/2.) );
   }
   const GeoMaterial* mgas = matManager->getMaterial("muo::CscArCO2");
   const GeoLogVol* lgas = NULL;
@@ -145,7 +146,7 @@ CscMultiLayer::build(int /*cutoutson*/, std::vector<Cutout*> /*vcutdef*/)
   for (int i = 0; i < nrOfLayers+1; i++) {
 
     GeoNameTag* np = new GeoNameTag("panel");
-    GeoTransform* xp = new GeoTransform(HepGeom::TranslateX3D(newpos-g10thi/2.));
+    GeoTransform* xp = new GeoTransform(GeoTrf::TranslateX3D(newpos-g10thi/2.));
     pml->add(new GeoIdentifierTag(i));
     pml->add(np);
     pml->add(xp);
@@ -158,7 +159,7 @@ CscMultiLayer::build(int /*cutoutson*/, std::vector<Cutout*> /*vcutdef*/)
       // the gas Gap 
       // correct the position within the chamber
       GeoNameTag* ng = new GeoNameTag("CscArCO2");
-      GeoTransform* xg = new GeoTransform(HepGeom::TranslateX3D(newpos-gasThickness/2.));
+      GeoTransform* xg = new GeoTransform(GeoTrf::TranslateX3D(newpos-gasThickness/2.));
       pml->add(new GeoIdentifierTag(i));
       pml->add(ng);
       pml->add(xg);
diff --git a/MuonSpectrometer/MuonGeoModel/src/Cutout.cxx b/MuonSpectrometer/MuonGeoModel/src/Cutout.cxx
index e69b18e071453b9c099cb8758df8f7c81e9908f8..cc232c57233652e79481a4ada9befaabff349162 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Cutout.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Cutout.cxx
@@ -9,8 +9,8 @@
 #include "GeoModelKernel/GeoTrap.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoShapeShift.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 namespace MuonGM {
 
@@ -51,7 +51,7 @@ const GeoShape* Cutout::build()
 //  std::cout << "translate 0, "<<dx<<", "<<zpos<<std::endl;
 //  std::cout << "widthXl="<<widthXl<<" widthXs="<<widthXs<<" lengthY="
 //	    <<lengthY<<" excent="<<excent<<" dead1="<<dead1<<std::endl;
-  HepGeom::Transform3D xfTemp = HepGeom::Translate3D(0.,dx,zpos);
+  GeoTrf::Transform3D xfTemp = GeoTrf::Translate3D(0.,dx,zpos);
   const GeoShape *sCutout;
   /*
   // This is just to make sure we are putting stuff in the right place:
@@ -79,15 +79,15 @@ const GeoShape* Cutout::build()
       double alpha = atan(2.*excent/lengthY);
       // polar and azimuthal angles of vector describing offset of
       //   cutout planes:
-      double theta = -dead1*CLHEP::degree;
-      double phi = -90.*CLHEP::degree;
+      double theta = -dead1*GeoModelKernelUnits::degree;
+      double phi = -90.*GeoModelKernelUnits::degree;
       // GeoPara requires the +/- z faces be parallel to the x-y plane,
       //   so choose x = width, y=length, z=thickness:
       GeoPara *cutoutpara = new GeoPara(widthXs/2.,lengthY/2.,thickness/2.,
 					alpha,theta,phi);
       // now rotate it so thickness is x-axis, width is y-axis, length z-axis:
-      HepGeom::Transform3D xRot = HepGeom::RotateX3D(-90.*CLHEP::degree)*
-	HepGeom::RotateY3D(-90.*CLHEP::degree);
+      GeoTrf::Transform3D xRot = GeoTrf::RotateX3D(-90.*GeoModelKernelUnits::degree)*
+	GeoTrf::RotateY3D(-90.*GeoModelKernelUnits::degree);
       xfTemp = xfTemp * xRot;
       sCutout = & ( (*cutoutpara) <<xfTemp);
       cutoutpara->ref();
@@ -95,7 +95,7 @@ const GeoShape* Cutout::build()
     }
   else  
     {
-      GeoTrap *cutouttrap = new GeoTrap(thickness/2.,dead1*CLHEP::degree,90.*CLHEP::degree,
+      GeoTrap *cutouttrap = new GeoTrap(thickness/2.,dead1*GeoModelKernelUnits::degree,90.*GeoModelKernelUnits::degree,
 					excent,widthXs/2.,widthXl/2.,
 					atan((2.*excent+(widthXl-widthXs)/2.)/
 					     lengthY),
@@ -104,8 +104,8 @@ const GeoShape* Cutout::build()
 					     lengthY)
 					);
       // now rotate it so thickness is x-axis, width is y-axis, length z-axis:
-      HepGeom::Transform3D xRot = HepGeom::RotateX3D(-90.*CLHEP::degree)*
-	HepGeom::RotateY3D(-90.*CLHEP::degree);
+      GeoTrf::Transform3D xRot = GeoTrf::RotateX3D(-90.*GeoModelKernelUnits::degree)*
+	GeoTrf::RotateY3D(-90.*GeoModelKernelUnits::degree);
       xfTemp = xfTemp * xRot;
       sCutout = & ( (*cutouttrap) <<xfTemp);
       cutouttrap->ref();
diff --git a/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx b/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
index 4e845660f79c2aa5bd8a2bcb6d9c505eac678604..b8d4ca5d41086a6b8fa70ac5ba99616a89e07136 100755
--- a/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
@@ -4,7 +4,6 @@
 
 #include "MuonGeoModel/DBReader.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "CLHEP/Units/SystemOfUnits.h"
 
 // #include "MuonGeoModel/TgcReadoutParams.h"
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/Ded.cxx b/MuonSpectrometer/MuonGeoModel/src/Ded.cxx
index 09134318072c39522cef315270034a367cf41ffb..51821178ca2e8bbcf3cfa98e1a2fe0022a42cec3 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Ded.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Ded.cxx
@@ -15,6 +15,7 @@
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #define skip_ded false
 
@@ -77,12 +78,12 @@ GeoVPhysVol* Ded::build(int cutoutson,
      GeoPhysVol* tempPhys = 0;
      Cutout* cut = 0;
      GeoShape* cutoutShape = 0;
-     HepGeom::Transform3D cutTrans;
+     GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
      for (unsigned i = 0; i < vcutdef.size(); i++) {
        cut = vcutdef[i];
        cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                 cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-       cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+       cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
 
        GeoCutVolAction cutAction(*cutoutShape, cutTrans);
        pded->apply(&cutAction);
diff --git a/MuonSpectrometer/MuonGeoModel/src/DriftTube.cxx b/MuonSpectrometer/MuonGeoModel/src/DriftTube.cxx
index faf46ffe51f2afc452f1e94a8e025685fb2ae9f8..f891c49739454e3b7f6e45c4b1033062d798734e 100755
--- a/MuonSpectrometer/MuonGeoModel/src/DriftTube.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/DriftTube.cxx
@@ -10,6 +10,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialDenominator.h"
 #include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "MuonGeoModel/MYSQL.h"
 #include "MuonGeoModel/MDT_Technology.h"
 #include <iostream>
@@ -32,9 +33,9 @@ DriftTube::DriftTube(std::string n): DetectorElement(n),
     plugLength  = md->tubeEndPlugLength;
     
 //    std::cout<<" drift tube gasR, outerR, plugL "<<gasRadius<<" "<<outerRadius<<" "<<plugLength<<std::endl;
-// 	outerRadius=1.5*CLHEP::cm;
-// 	gasRadius=1.46*CLHEP::cm;
-// 	plugLength=7*CLHEP::cm;
+// 	outerRadius=1.5*GeoModelKernelUnits::cm;
+// 	gasRadius=1.46*GeoModelKernelUnits::cm;
+// 	plugLength=7*GeoModelKernelUnits::cm;
 }
 
 GeoVPhysVol *DriftTube::build()
@@ -55,8 +56,8 @@ GeoVPhysVol *DriftTube::build()
 	      GeoPhysVol  *pgas    = new GeoPhysVol(lgas);
 
     GeoSerialDenominator *plugDenominator= new GeoSerialDenominator("Tube Endplug");
-	GeoTransform *ec0X = new GeoTransform(HepGeom::TranslateZ3D(+(length-plugLength)/2));
-	GeoTransform *ec1X = new GeoTransform(HepGeom::TranslateZ3D(-(length-plugLength)/2));
+	GeoTransform *ec0X = new GeoTransform(GeoTrf::TranslateZ3D(+(length-plugLength)/2));
+	GeoTransform *ec1X = new GeoTransform(GeoTrf::TranslateZ3D(-(length-plugLength)/2));
         std::string sGasName = "SensitiveGas";
 	GeoNameTag           *gasDenominator = new GeoNameTag(sGasName);
 
@@ -79,7 +80,7 @@ void DriftTube::print()
 	std::cout << "		Tube material 	: " << tubeMaterial.c_str() << std::endl;
 	std::cout << "		Radius		: " << outerRadius << std::endl;
 	std::cout << "		Length		: " << length;
-	std::cout << "		Thickness	: " << outerRadius-gasRadius << " CLHEP::mm" << std::endl;
+	std::cout << "		Thickness	: " << outerRadius-gasRadius << " mm" << std::endl;
 	std::cout << "		Gas material	: " << gasMaterial.c_str() << std::endl;
 	std::cout << "		EP length	: " << plugLength << std::endl;
 }
diff --git a/MuonSpectrometer/MuonGeoModel/src/MMSpacer.cxx b/MuonSpectrometer/MuonGeoModel/src/MMSpacer.cxx
index d6f767dba9604a36670c7c2de849c6509b7d7629..8c863fbc34a15929ede1694204b97b7089576b7d 100755
--- a/MuonSpectrometer/MuonGeoModel/src/MMSpacer.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MMSpacer.cxx
@@ -20,6 +20,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 // for cutouts:
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"
@@ -68,9 +69,8 @@ MMSpacer::build(int minimalgeo, int , std::vector<Cutout*> )
   	double dy=t->lowZCutOutWidth;
 	double dz=t->lowZCutOutDZ;
 	const GeoShape* sbox = new GeoTrd(thickness,thickness,dy,dy,dz);
-	HepGeom::Transform3D cut1,cut2;
-	cut1=HepGeom::Translate3D(0.0, -width/2., -length/2.);
-	cut2=HepGeom::Translate3D(0.0, width/2., -length/2.);
+	GeoTrf::Translate3D cut1(0.0, -width/2., -length/2.);
+	GeoTrf::Translate3D cut2(0.0, width/2., -length/2.);
 	strd= &(strd->subtract( (*sbox) << cut1 ));
 	strd= &(strd->subtract( (*sbox) << cut2 ));
   }
@@ -79,9 +79,8 @@ MMSpacer::build(int minimalgeo, int , std::vector<Cutout*> )
   	double dy=t->highZCutOutWidth;
 	double dz=t->highZCutOutDZ;
 	const GeoShape* sbox = new GeoTrd(thickness,thickness,dy,dy,dz);
-	HepGeom::Transform3D cut1,cut2;
-	cut1=HepGeom::Translate3D(0.0, -longWidth/2., length/2.);
-	cut2=HepGeom::Translate3D(0.0, longWidth/2., length/2.);
+	GeoTrf::Translate3D cut1(0.0, -longWidth/2., length/2.);
+	GeoTrf::Translate3D cut2(0.0, longWidth/2., length/2.);
 	strd= &(strd->subtract( (*sbox) << cut1 ));
 	strd= &(strd->subtract( (*sbox) << cut2 ));
   }
diff --git a/MuonSpectrometer/MuonGeoModel/src/Micromegas.cxx b/MuonSpectrometer/MuonGeoModel/src/Micromegas.cxx
index ee45d1536be00a8b14ee0bdcd39f138821e7cf4a..e87668f7c335dc1e44de6dcdd504d79a5d654695 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Micromegas.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Micromegas.cxx
@@ -21,6 +21,7 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 // for cutouts:
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"
@@ -78,9 +79,6 @@ Micromegas::build(int minimalgeo, int , std::vector<Cutout*> )
                                     longWidth/2, length/2);
 
  
-  HepGeom::Transform3D cut1,cut2,cut3,cut4;
-  									
-  
   logVolName=name;
   if (!(m_component->subType).empty()) logVolName+=("-"+m_component->subType);
   const GeoMaterial* mtrd = matManager->getMaterial("sct::PCB");
@@ -118,7 +116,7 @@ Micromegas::build(int minimalgeo, int , std::vector<Cutout*> )
     double newXPos=newpos;
  
     const GeoShape* sGasVolume = new GeoTrd(gasTck/2, gasTck/2, widthActive/2, 
-                                              longWidthActive/2, lengthActive/2);
+					    longWidthActive/2, lengthActive/2);
 	
 
 
@@ -126,36 +124,35 @@ Micromegas::build(int minimalgeo, int , std::vector<Cutout*> )
                                          matManager->getMaterial("muo::ArCO2"));
       GeoPhysVol* ptrdtmp = new GeoPhysVol(ltrdtmp);
       GeoNameTag* ntrdtmp = new GeoNameTag(name+"muo::ArCO2");
-      GeoTransform* ttrdtmp = new GeoTransform(HepGeom::TranslateX3D(newXPos));
+      GeoTransform* ttrdtmp = new GeoTransform(GeoTrf::TranslateX3D(newXPos));
 
       // Place gas volume inside G10 mother volume so that
       // subtractions from gas volume now become G10
-
+      
       ptrd->add(ntrdtmp);
       ptrd->add(ttrdtmp);
       ptrd->add(ptrdtmp);
-	  
       
-	  double lW=longWidth/2.-((longWidth-width)/2.)*f1/length;
-	  double W=width/2.+((longWidth-width)/2.)*f2/length;
-	  const GeoShape* trd1 = new GeoTrd(gasTck/2,gasTck/2, width/2, 
-                                    longWidth/2, length/2);
-	  const GeoShape* trd2 = new GeoTrd(gasTck,gasTck, W-f3, 
-                                    lW-f3, length/2-(f1+f2)/2.);
-	  HepGeom::Transform3D c;
-	  c=HepGeom::Translate3D(0,0,(f2-f1)/2.);
-          trd1= &(trd1->subtract( (*trd2) << c ));
-	  GeoLogVol* ltrdframe = new GeoLogVol("MM_Frame", trd1,
-                                         matManager->getMaterial("std::Aluminium"));
-          GeoPhysVol* ptrdframe = new GeoPhysVol(ltrdframe);
-	  
-	  ptrdtmp->add(ptrdframe);
-	  
-
+      
+      double lW=longWidth/2.-((longWidth-width)/2.)*f1/length;
+      double W=width/2.+((longWidth-width)/2.)*f2/length;
+      const GeoShape* trd1 = new GeoTrd(gasTck/2,gasTck/2, width/2, 
+					longWidth/2, length/2);
+      const GeoShape* trd2 = new GeoTrd(gasTck,gasTck, W-f3, 
+					lW-f3, length/2-(f1+f2)/2.);
+      GeoTrf::Translate3D c(0,0,(f2-f1)/2.);
+      trd1= &(trd1->subtract( (*trd2) << c ));
+      GeoLogVol* ltrdframe = new GeoLogVol("MM_Frame", trd1,
+					   matManager->getMaterial("std::Aluminium"));
+      GeoPhysVol* ptrdframe = new GeoPhysVol(ltrdframe);
+      
+      ptrdtmp->add(ptrdframe);
+      
+      
       iSenLyr++;
-
+      
   } // Loop over tgc layers
-        
+  
   return ptrd;	
 }
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/MultiLayer.cxx b/MuonSpectrometer/MuonGeoModel/src/MultiLayer.cxx
index faa950aa33b8a827fb4ffed506c670f33641c9ea..d928e6b937babb54671a015c44b9dde4e65ff904 100755
--- a/MuonSpectrometer/MuonGeoModel/src/MultiLayer.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MultiLayer.cxx
@@ -19,8 +19,9 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
-#include "CLHEP/Geometry/Transform3D.h"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoGenericFunctions/Variable.h"
 // for cutouts
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoShapeShift.h"
@@ -87,11 +88,11 @@ GeoFullPhysVol* MultiLayer::build()
 
     if (foamthicknessup > foamthicknesslow) {
       foamthicknesslow = 0.;
-      if (fabs(foamthicknessup - 15*CLHEP::mm) < 0.1) foamthicknessup = 15*CLHEP::mm;
-      else if (fabs(foamthicknessup - 30.75*CLHEP::mm) < 0.1) foamthicknessup = 30.75*CLHEP::mm;
-      else if (fabs(foamthicknessup - 30.00*CLHEP::mm) < 0.1) foamthicknessup = 30.00*CLHEP::mm;
-      else if (fabs(foamthicknessup - 10.00*CLHEP::mm) < 0.1
-               && logVolName.find("BMG") != std::string::npos ) foamthicknessup = 10.00*CLHEP::mm;
+      if (fabs(foamthicknessup - 15*GeoModelKernelUnits::mm) < 0.1) foamthicknessup = 15*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknessup - 30.75*GeoModelKernelUnits::mm) < 0.1) foamthicknessup = 30.75*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknessup - 30.00*GeoModelKernelUnits::mm) < 0.1) foamthicknessup = 30.00*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknessup - 10.00*GeoModelKernelUnits::mm) < 0.1
+               && logVolName.find("BMG") != std::string::npos ) foamthicknessup = 10.00*GeoModelKernelUnits::mm;
       else if ( logVolName == "BME1MDT09" || logVolName == "BME2MDT09" ) { //@@
 	foamthicknesslow = 0.;
 	foamthicknessup  = 0.;
@@ -102,11 +103,11 @@ GeoFullPhysVol* MultiLayer::build()
 
     } else {
       foamthicknessup = 0.;
-      if (fabs(foamthicknesslow - 15*CLHEP::mm) < 0.1) foamthicknesslow = 15*CLHEP::mm;
-      else if (fabs(foamthicknesslow - 30.75*CLHEP::mm) < 0.1) foamthicknesslow = 30.75*CLHEP::mm;
-      else if (fabs(foamthicknesslow - 30.00*CLHEP::mm) < 0.1) foamthicknesslow = 30.00*CLHEP::mm;
-      else if (fabs(foamthicknesslow - 10.00*CLHEP::mm) < 0.1
-               && logVolName.find("BMG") != std::string::npos ) foamthicknesslow = 10.00*CLHEP::mm;
+      if (fabs(foamthicknesslow - 15*GeoModelKernelUnits::mm) < 0.1) foamthicknesslow = 15*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknesslow - 30.75*GeoModelKernelUnits::mm) < 0.1) foamthicknesslow = 30.75*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknesslow - 30.00*GeoModelKernelUnits::mm) < 0.1) foamthicknesslow = 30.00*GeoModelKernelUnits::mm;
+      else if (fabs(foamthicknesslow - 10.00*GeoModelKernelUnits::mm) < 0.1
+               && logVolName.find("BMG") != std::string::npos ) foamthicknesslow = 10.00*GeoModelKernelUnits::mm;
       else if ( logVolName == "BME1MDT09" || logVolName == "BME2MDT09" ) { //@@
 	foamthicknesslow = 0.;
 	foamthicknessup  = 0.;
@@ -147,7 +148,7 @@ GeoFullPhysVol* MultiLayer::build()
         lengthPos = -length/2. + sum_len + submllength;
         sum_len += 2.*submllength;
         double widthPos = cutoutXtubes[isub];
-        HepGeom::Transform3D submlpos = HepGeom::Translate3D(0.,widthPos,lengthPos);
+        GeoTrf::Transform3D submlpos = GeoTrf::Translate3D(0.,widthPos,lengthPos);
 
         const GeoTrd* tempSLay = NULL;
         const GeoShape* tempSLay1 = NULL;
@@ -238,41 +239,41 @@ GeoFullPhysVol* MultiLayer::build()
     const GeoShape* stube = NULL;
     double tL = longWidth/2.0 - (tubePitch/2.)*TrdDwoverL;
     stube = new GeoTube(0.0, tubePitch/2., tL);
-    stube = & ( (*stube) << HepGeom::RotateX3D(90.*CLHEP::deg) );
+    stube = & ( (*stube) << GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) );
     const GeoShape* stubewithcut = NULL;
     if (cutoutNsteps > 1) {
       double toptubelength = cutoutTubeLength[cutoutNsteps-1];
       if (cutoutFullLength[cutoutNsteps-1]) toptubelength = longWidth;
       stubewithcut = new GeoTube(0.0, tubePitch/2., toptubelength/2.0);
-      stubewithcut = & ( (*stubewithcut) << HepGeom::RotateX3D(90.*CLHEP::deg) );
+      stubewithcut = & ( (*stubewithcut) << GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) );
     }
 
     GeoShape* sbox = new GeoTrd(mdtthickness, mdtthickness, longWidth, 
                                 longWidth, tubePitch/2.);
     GeoShape* sboxf = new GeoTrd(mdtthickness, mdtthickness, longWidth, 
-                                 longWidth, tubePitch/4.+1*CLHEP::mm);
-    slay = &(slay->subtract( (*sbox)<<HepGeom::Translate3D(0.,0.,length/2.)));
+                                 longWidth, tubePitch/4.+1*GeoModelKernelUnits::mm);
+    slay = &(slay->subtract( (*sbox)<<GeoTrf::Translate3D(0.,0.,length/2.)));
 
     for (int i = 0; i < nrOfLayers; i++) {
-      if (xx[i] > tubePitch/2. + 10.*CLHEP::mm) {
+      if (xx[i] > tubePitch/2. + 10.*GeoModelKernelUnits::mm) {
         // subtract tube at the start
         if (verbose_multilayer) std::cout << " Cutting tube at xx = " << yy[i]
                                           << " z = " << -length/2. << std::endl;
-        slay = &(slay->subtract( (*stube)<<HepGeom::Translate3D(-mdtthickness/2.+yy[i],0.,-length/2.) ));
+        slay = &(slay->subtract( (*stube)<<GeoTrf::Translate3D(-mdtthickness/2.+yy[i],0.,-length/2.) ));
         // add tube at the end
         // distinguish stations with/without cutouts
         if (cutoutNsteps == 1) {
           // no cutouts
           if (verbose_multilayer) std::cout << " Adding tube at xx = " << yy[i]
                                             << " z = " << length/2. << std::endl;
-          slay = &(slay->add( (*stube)<<HepGeom::Translate3D(-mdtthickness/2.+yy[i],0.,length/2.-tubePitch/2.) ));
+          slay = &(slay->add( (*stube)<<GeoTrf::Translate3D(-mdtthickness/2.+yy[i],0.,length/2.-tubePitch/2.) ));
         } else {
           // there are cutouts
           if (verbose_multilayer) std::cout << " Adding tube at xx = " << yy[i]
                                             << " y(cutout!) = " << cutoutXtubes[cutoutNsteps-1]
                                             << " z = " << length/2. << std::endl;
           slay = &(slay->add( (*stubewithcut)
-                             <<HepGeom::Translate3D(-mdtthickness/2.+yy[i],
+                             <<GeoTrf::Translate3D(-mdtthickness/2.+yy[i],
                                               cutoutXtubes[cutoutNsteps-1],
                                               length/2.-tubePitch/2.) ));
         }      
@@ -297,7 +298,7 @@ GeoFullPhysVol* MultiLayer::build()
         sfoam = new GeoTrd(foamthicknesslow/2.-eps, foamthicknesslow/2.-eps,
                            width/2.-eps, longWidth/2.-eps, length/2.);
       }        
-      sfoam = &(sfoam->subtract( (*sboxf)<<HepGeom::Translate3D(0.,0.,length/2.-tubePitch/4.)));
+      sfoam = &(sfoam->subtract( (*sboxf)<<GeoTrf::Translate3D(0.,0.,length/2.-tubePitch/4.)));
       mfoam = matManager->getMaterial("muo::Foam");
       lfoam = new GeoLogVol("MultiLayerFoam", sfoam, mfoam);
 
@@ -309,7 +310,7 @@ GeoFullPhysVol* MultiLayer::build()
         sfoam = new GeoTrd(foamthicknessup/2.-eps, foamthicknessup/2.-eps, 
                            width/2.-eps, longWidth/2.-eps, length/2.);
       }
-      sfoam = &(sfoam->subtract( (*sboxf)<<HepGeom::Translate3D(0.,0.,length/2.-tubePitch/4.)));
+      sfoam = &(sfoam->subtract( (*sboxf)<<GeoTrf::Translate3D(0.,0.,length/2.-tubePitch/4.)));
       mfoam = matManager->getMaterial("muo::Foam");
       lfoam = new GeoLogVol("MultiLayerFoam", sfoam, mfoam);
 
@@ -322,7 +323,7 @@ GeoFullPhysVol* MultiLayer::build()
     
     if ( logVolName != "BME1MDT09" && logVolName != "BME2MDT09" ) {  //@@
       pfoam = new GeoPhysVol(lfoam);
-      GeoTransform* xf = new GeoTransform (HepGeom::TranslateX3D(foamposition));
+      GeoTransform* xf = new GeoTransform (GeoTrf::TranslateX3D(foamposition));
       GeoNameTag* nt = new GeoNameTag(name+" MultiLayerFoam");
       play->add(new GeoIdentifierTag(0));
       play->add(nt);
@@ -530,10 +531,10 @@ GeoFullPhysVol* MultiLayer::build()
           if (nt > 0 && !internalCutoutBMG[j]) { 
             loffset = nttot*tubePitch;
             lstart = loffset - length/2. + xx[i];
-            Genfun::Variable K;
-            Genfun::GENFUNCTION f = tubePitch*K + lstart;
-            TRANSFUNCTION t = HepGeom::TranslateY3D(0.)*HepGeom::RotateX3D(90*CLHEP::deg)*
-                              HepGeom::TranslateX3D(tstart)*Pow(HepGeom::TranslateY3D(1.0),f);
+            GeoGenfun::Variable K;
+            GeoGenfun::GENFUNCTION f = tubePitch*K + lstart;
+            TRANSFUNCTION t = GeoTrf::TranslateY3D(0.)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg)*
+                              GeoTrf::TranslateX3D(tstart)*Pow(GeoTrf::TranslateY3D(1.0),f);
             GeoSerialTransformer* s = new GeoSerialTransformer(tV,&t,nt);
             play->add(new GeoSerialIdentifier(100*(i+1)+nttot + 1));
             play->add(s);
@@ -592,10 +593,10 @@ GeoFullPhysVol* MultiLayer::build()
           if (nt > 0) { 
             loffset = nttot*tubePitch;
             lstart = loffset - length/2. + xx[i];
-            Genfun::Variable K;
-            Genfun::GENFUNCTION f = tubePitch*K + lstart;
-            TRANSFUNCTION t = HepGeom::TranslateY3D(dy)*HepGeom::RotateX3D(90*CLHEP::deg)*
-                              HepGeom::TranslateX3D(tstart)*Pow(HepGeom::TranslateY3D(1.0),f);
+            GeoGenfun::Variable K;
+            GeoGenfun::GENFUNCTION f = tubePitch*K + lstart;
+            TRANSFUNCTION t = GeoTrf::TranslateY3D(dy)*GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg)*
+                              GeoTrf::TranslateX3D(tstart)*Pow(GeoTrf::TranslateY3D(1.0),f);
             GeoSerialTransformer* s = new GeoSerialTransformer(tV,&t,nt);
             play->add(new GeoSerialIdentifier(100*(i+1)+nttot + 1));
             play->add(s);
@@ -617,10 +618,10 @@ GeoFullPhysVol* MultiLayer::build()
         lstart = -length/2. + xx[i];
 //        std::cout << " Tubes starting at t = " << tstart << " , y = " << lstart
 //                  << std::endl;
-        Genfun::Variable K;
-        Genfun::GENFUNCTION f = tubePitch*K + lstart;
-        TRANSFUNCTION t = HepGeom::RotateX3D(90*CLHEP::deg)*HepGeom::TranslateX3D(tstart)*
-                          Pow(HepGeom::TranslateY3D(1.0),f);
+        GeoGenfun::Variable K;
+        GeoGenfun::GENFUNCTION f = tubePitch*K + lstart;
+        TRANSFUNCTION t = GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg)*GeoTrf::TranslateX3D(tstart)*
+                          Pow(GeoTrf::TranslateY3D(1.0),f);
         GeoVPhysVol* tV = tubeVector[0];	
         GeoSerialTransformer* s = new GeoSerialTransformer(tV,&t,nrOfTubes);
 	play->add(new GeoSerialIdentifier(100*(i+1)+1));
@@ -636,10 +637,10 @@ GeoFullPhysVol* MultiLayer::build()
           GeoVPhysVol* tV = tubeVector[j];
           loffset = j*nrTubesPerStep*tubePitch;
           lstart = loffset - length/2. + xx[i]; 
-          Genfun::Variable K;
-          Genfun::GENFUNCTION f = tubePitch*K + lstart;
-          TRANSFUNCTION t = HepGeom::RotateX3D(90*CLHEP::deg)*HepGeom::TranslateX3D(tstart)*
-                            Pow(HepGeom::TranslateY3D(1.0),f);
+          GeoGenfun::Variable K;
+          GeoGenfun::GENFUNCTION f = tubePitch*K + lstart;
+          TRANSFUNCTION t = GeoTrf::RotateX3D(90*GeoModelKernelUnits::deg)*GeoTrf::TranslateX3D(tstart)*
+                            Pow(GeoTrf::TranslateY3D(1.0),f);
           GeoSerialTransformer* s = new GeoSerialTransformer(tV,&t,nrTubesPerStep);
           play->add(new GeoSerialIdentifier(100*(i+1)+j*nrTubesPerStep + 1));
           play->add(s);      
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
index 653b06bdddc5dfb7bced206eb5a7b594c760c190..9b7ed80bb2653846b597370e4879f3cff92efa32 100755
--- a/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
@@ -5,6 +5,7 @@
 #include "GaudiKernel/MsgStream.h"
 #include "AthenaKernel/getMessageSvc.h"
 //
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "MuonGeoModel/MuonChamber.h"
 #include "MuonGeoModel/Position.h"
 #include "MuonReadoutGeometry/MuonStation.h"
@@ -62,7 +63,8 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"   
 #include "GeoModelKernel/GeoIdentifierTag.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 #include <vector>
 #include <fstream>
 #include <iomanip>
@@ -136,7 +138,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
     dx = extratop/2. - extrabottom/2.;
     if (verbose) log<<MSG::VERBOSE<<" m_station name "<<m_station->GetName()<<" extra top, bottom, dx = "
                       <<extratop<<" "<<extrabottom<<endmsg;
-    strd = & ( (*maintrd) << HepGeom::Translate3D(dx, 0., 0.) );
+    strd = & ( (*maintrd) << GeoTrf::Translate3D(dx, 0., 0.) );
   } else {
     strd =  maintrd;
   }
@@ -163,7 +165,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
     }
     GeoShape* box = new GeoBox(cthick/2., longWidth/2., (length-clen)/2.);
     box->ref();
-    strd = &(strd->subtract( (*box) << HepGeom::Translate3D(cxpos, 0., cypos) ) );
+    strd = &(strd->subtract( (*box) << GeoTrf::Translate3D(cxpos, 0., cypos) ) );
     box->unref();
   }
 
@@ -188,7 +190,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
       }
       GeoShape* box1 = new GeoBox(cutthick/2., (longWidth+2.)/2., cutlen);
       box1->ref();
-      strd = &(strd->subtract( (*box1) << HepGeom::Translate3D( (totthick-cutthick)/2., 0., length/2.) ) );
+      strd = &(strd->subtract( (*box1) << GeoTrf::Translate3D( (totthick-cutthick)/2., 0., length/2.) ) );
       box1->unref();
     }
   }
@@ -225,15 +227,15 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
       GeoShape* box = new GeoBox((totthick+2.)/2., (longWidth+2.)/2., halfpitch);
       box->ref();
       const GeoShape* frontcyl = new GeoTube(0.0, halfpitch+0.001, longWidth/2.);
-      frontcyl = &( (*frontcyl) << HepGeom::RotateX3D(90.*CLHEP::deg) );
+      frontcyl = &( (*frontcyl) << GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) );
       frontcyl->ref();
       const GeoShape* backcyl = new GeoTube(0.0, halfpitch-0.001, (longWidth+2.)/2.);
-      backcyl = &( (*backcyl) << HepGeom::RotateX3D(90.*CLHEP::deg) );
+      backcyl = &( (*backcyl) << GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) );
       backcyl->ref();
 
       if (index > 0) {
         // If chamber has MDTs, shorten length by halfpitch (remove what was added in DBReader.h)
-        strd = &(strd->subtract( (*box) << HepGeom::Translate3D(0., 0., length/2.) ) );
+        strd = &(strd->subtract( (*box) << GeoTrf::Translate3D(0., 0., length/2.) ) );
         double sign = 1.;
         for (int i = 0; i < index; i++) {
           comp = (StandardComponent*)m_station->GetComponent(mdt_index[i]);
@@ -242,19 +244,19 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
           mdt_pos += amdbOrigine_along_thickness;
           xtube1 = sign*(mdt_half_thick - (root3 + 1.)*halfpitch);
           xtube2 = sign*(mdt_half_thick - (3*root3 + 1.)*halfpitch);
-          strd = &(strd->add( (*frontcyl) << HepGeom::Translate3D(mdt_pos+xtube1, 0., length/2.-halfpitch) ) );
-          strd = &(strd->subtract( (*backcyl) << HepGeom::Translate3D(mdt_pos+xtube1, 0., -length/2.) ) );
+          strd = &(strd->add( (*frontcyl) << GeoTrf::Translate3D(mdt_pos+xtube1, 0., length/2.-halfpitch) ) );
+          strd = &(strd->subtract( (*backcyl) << GeoTrf::Translate3D(mdt_pos+xtube1, 0., -length/2.) ) );
 
           if (stname == "BIL" || (stname == "BIS" && std::abs(zi) != 8) || testEIL) {
-            strd = &(strd->add( (*frontcyl) << HepGeom::Translate3D(mdt_pos+xtube2, 0., length/2.-halfpitch) ) );
-            strd = &(strd->subtract( (*backcyl) << HepGeom::Translate3D(mdt_pos+xtube2, 0., -length/2.) ) );
+            strd = &(strd->add( (*frontcyl) << GeoTrf::Translate3D(mdt_pos+xtube2, 0., length/2.-halfpitch) ) );
+            strd = &(strd->subtract( (*backcyl) << GeoTrf::Translate3D(mdt_pos+xtube2, 0., -length/2.) ) );
           }
 
           sign *= -1.;
         }
       }
       if (stname != "EIL") {
-        if (zi < 0 && !is_mirrored) strd = &( (*strd) << HepGeom::RotateX3D(180.*CLHEP::deg) );
+        if (zi < 0 && !is_mirrored) strd = &( (*strd) << GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg) );
       }
 
       box->unref();
@@ -317,21 +319,21 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
             //  of the cutouts wrt mother volume:
             if ( fabs(cut->dx-600.7)<0.1 )
             {
-                cut->dx      = cut->dx + 10.*CLHEP::mm;
-                cut->widthXs = cut->widthXs + 20.*CLHEP::mm;
-                cut->widthXl = cut->widthXl + 20.*CLHEP::mm;
+                cut->dx      = cut->dx + 10.*GeoModelKernelUnits::mm;
+                cut->widthXs = cut->widthXs + 20.*GeoModelKernelUnits::mm;
+                cut->widthXl = cut->widthXl + 20.*GeoModelKernelUnits::mm;
                 //std::cout<<" redefining par.s for BOG1 cutouts "
                 //<<std::endl;
             }
             if ( fabs(cut->dx+600.7)<0.1 )
             {
-                cut->dx      = cut->dx - 10.*CLHEP::mm;
-                cut->widthXs = cut->widthXs + 20.*CLHEP::mm;
-                cut->widthXl = cut->widthXl + 20.*CLHEP::mm;
+                cut->dx      = cut->dx - 10.*GeoModelKernelUnits::mm;
+                cut->widthXs = cut->widthXs + 20.*GeoModelKernelUnits::mm;
+                cut->widthXl = cut->widthXl + 20.*GeoModelKernelUnits::mm;
             }
             if (fabs(cut->lengthY-180.2)<0.001)
             {
-                cut->lengthY = cut->lengthY+(0.010)*CLHEP::mm;
+                cut->lengthY = cut->lengthY+(0.010)*GeoModelKernelUnits::mm;
                 //imt	    std::cout<<"Redefining "<<stName<<" cut lengthY to "
                 //imt		     <<cut->lengthY
                 //imt		     <<std::endl;
@@ -362,7 +364,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
   if (stName.substr(0,1) == "T" && stName.substr(2,1) == "E" && stName.substr(1,1) != "4") {
     GeoTrd* strdoverlap = new GeoTrd(totthick/4, totthick/4, width/2, 
                                      longWidth/2, 400./2);
-    strd = &(strd->subtract((*strdoverlap) << HepGeom::Translate3D(-totthick/4., 0., -length/2+400./2.) ));
+    strd = &(strd->subtract((*strdoverlap) << GeoTrf::Translate3D(-totthick/4., 0., -length/2+400./2.) ));
   }
     
   const GeoMaterial* mtrd = 0;
@@ -557,7 +559,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         cut->dx = tempdx;
         cut->dy = tempdy;
 
-	if (fabs(cut->dead1) > 1. && techname=="MDT03") cut->dy = cut->dy+15.0*cos(cut->dead1*CLHEP::deg);
+	if (fabs(cut->dead1) > 1. && techname=="MDT03") cut->dy = cut->dy+15.0*cos(cut->dead1*GeoModelKernelUnits::deg);
 	// should compensate for the dy position defined in amdb at the bottom of the foam in ML 1 of EMS1,3 and BOS 6
 	// can be applied only for layout >=r.04.04 in rel 15.6.X.Y due to the frozen Tier0 policy
 
@@ -607,7 +609,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         if (stName.substr(0,3) == "BOS" && zi == -6 && type == "MDT") {
           cut->dy = c->dy - cut->dy - cut->lengthY - halfpitch;
 	  cut->dead1 = 30.; // why this is not 30. or -30. already ?????
-	  if (techname=="MDT03") cut->dy = cut->dy + 30.0; // *cos(cut->dead1*CLHEP::deg);
+	  if (techname=="MDT03") cut->dy = cut->dy + 30.0; // *cos(cut->dead1*GeoModelKernelUnits::deg);
 	  if (verbose) log <<MSG::VERBOSE <<"Cut dead1 for BOS 6 on C side is "<< cut->dead1<<endmsg;
         }
 
@@ -621,7 +623,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
           // reverse the position (x amdb) of the cutout if the m_station is mirrored
           Cutout* cutmirr = new Cutout(*cut);
           cutmirr->dx = - cutmirr->dx;
-          // this way, after the rotation by 180 CLHEP::deg, the cut will be at the same global phi
+          // this way, after the rotation by 180 GeoModelKernelUnits::deg, the cut will be at the same global phi
           // it has for the m_station at z>0
           vcutdef.push_back(cutmirr);
           vcutdef_todel.push_back(cutmirr);
@@ -672,9 +674,9 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
                           << endmsg;
 
     // define here the total transform that will be applied to component:
-    HepGeom::Transform3D htcomponent;
-    GeoTransform* xfcomponent = NULL;
-    GeoAlignableTransform * xfaligncomponent = NULL;
+    GeoTrf::Transform3D htcomponent(GeoTrf::Transform3D::Identity());
+    GeoTransform* xfcomponent{nullptr};
+    GeoAlignableTransform * xfaligncomponent{nullptr};
 //     // for RPCs we need a vector of transforms for M28 geometry...
 //     std::vector<GeoTransform*> xfrpccomponent;
 
@@ -684,22 +686,22 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
     }
         
     if (type == "MDT") {
-      htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateZ3D(zpos)*HepGeom::TranslateY3D(xpos);
+      htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateZ3D(zpos)*GeoTrf::TranslateY3D(xpos);
       if (zi < 0 && !is_mirrored && stName[0] == 'B') { 
         // this (rotation +  shift of halfpitch) will mirror the tube structure w.r.t. the chamber at z>0
-         htcomponent = htcomponent*HepGeom::RotateX3D(180.*CLHEP::deg);
-         htcomponent = htcomponent*HepGeom::TranslateZ3D(halfpitch);
+         htcomponent = htcomponent*GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
+         htcomponent = htcomponent*GeoTrf::TranslateZ3D(halfpitch);
       }
           
       // ss - 24-05-2006 I don't really understand if this is needed at all
       //      it was introduced by Isabel T.
       if (zi < 0 && stName.substr(0,3) == "BOG" && is_mirrored) {
-        //	      htcomponent = htcomponent*HepGeom::RotateX3D(180.*CLHEP::deg);
+        //	      htcomponent = htcomponent*GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
         //      tubes OK but chambers wrong
-        //	      htcomponent = HepGeom::RotateX3D(180.*CLHEP::deg)*htcomponent;
+        //	      htcomponent = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg)*htcomponent;
         //      chambers OK but tubes wrong
-        htcomponent = HepGeom::RotateX3D(180.*CLHEP::deg)*htcomponent*
-                      HepGeom::RotateX3D(180.*CLHEP::deg);  // turn chambers but go back for tubes
+        htcomponent = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg)*htcomponent*
+                      GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);  // turn chambers but go back for tubes
       } // ss - 24-05-2006 I don't really understand if this is needed at all
           
       xfaligncomponent = new GeoAlignableTransform(htcomponent);
@@ -763,7 +765,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         continue;
       }
 
-      htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateZ3D(zpos);
+      htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateZ3D(zpos);
       xfcomponent = new GeoTransform(htcomponent);
       std::string key = stName+techname;
       if ((manager->IncludeCutoutsFlag()||
@@ -830,9 +832,9 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
       }
 //
       if (!is_mirrored) {
-        htcomponent = HepGeom::Translate3D(xpos,ypos,zpos)*HepGeom::RotateX3D(angle);
+        htcomponent = GeoTrf::Translate3D(xpos,ypos,zpos)*GeoTrf::RotateX3D(angle);
       } else {
-        htcomponent = HepGeom::Translate3D(xpos,-ypos,zpos)*HepGeom::RotateX3D(-angle);
+        htcomponent = GeoTrf::Translate3D(xpos,-ypos,zpos)*GeoTrf::RotateX3D(-angle);
       }
       xfcomponent = new GeoTransform(htcomponent);
       std::string key = stName+techname;
@@ -897,8 +899,8 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
 //         for (int j = 0; j < ndivz; j++) {
 //           double yposi = (ndivy-1)*rwidth/2.;
 //           for (int i = 0; i < ndivy; i++) {
-//             htcomponent = HepGeom::TranslateX3D(ypos )*HepGeom::TranslateY3D(yposi)*
-//                           HepGeom::TranslateZ3D(zposi);
+//             htcomponent = GeoTrf::TranslateX3D(ypos )*GeoTrf::TranslateY3D(yposi)*
+//                           GeoTrf::TranslateZ3D(zposi);
 //             xfcomponent = new GeoTransform(htcomponent);
 //             //xfrpccomponent.push_back(xfcomponent);
 //             yposi -= rwidth;
@@ -920,11 +922,11 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
                            << " ypos, zpos "
                            << ypos << " " << zpos << " " << endmsg;
 
-        htcomponent = HepGeom::TranslateX3D(ypos)*
-                      HepGeom::TranslateY3D(xpos)*HepGeom::TranslateZ3D(zpos);
+        htcomponent = GeoTrf::TranslateX3D(ypos)*
+                      GeoTrf::TranslateY3D(xpos)*GeoTrf::TranslateZ3D(zpos);
         if (rp->iswap == -1) // this is like amdb iswap 
         {
-          htcomponent = htcomponent*HepGeom::RotateY3D(180*CLHEP::deg);
+          htcomponent = htcomponent*GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
         }
         xfaligncomponent = new GeoAlignableTransform(htcomponent);
         //xfrpccomponent.push_back(xfcomponent);
@@ -982,9 +984,9 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
     } else if (type=="DED" && manager->MinimalGeoFlag() == 0) {
       double xpos = c->posx;
       if (is_mirrored) xpos = -xpos;
-      htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateY3D(xpos)*HepGeom::TranslateZ3D(zpos);
+      htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateY3D(xpos)*GeoTrf::TranslateZ3D(zpos);
       //if (stname == "BMS" && (zi == -2 || zi == -4) && c->name == "DED03") 
-      //   htcomponent = htcomponent*HepGeom::RotateY3D(180*CLHEP::deg);
+      //   htcomponent = htcomponent*GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
       xfcomponent = new GeoTransform(htcomponent);
 
       bool dedCutoutFlag = (stname == "BOS" && std::abs(zi) == 6) ||
@@ -1045,8 +1047,8 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         //            log<<MSG::DEBUG<<" its centre x-translated by "<<ypos;
         //            log<<" y-translated by "<<xpos;
         //            log<<" z-translated by "<<zpos<<endmsg;
-	htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateY3D(xpos)*
-                      HepGeom::TranslateZ3D(zpos);
+	htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateY3D(xpos)*
+                      GeoTrf::TranslateZ3D(zpos);
         std::string key = stName+techname;
 	if ((manager->IncludeCutoutsFlag() ||
             (manager->IncludeCutoutsBogFlag() && stName.substr(0,3)=="BOG")) 
@@ -1082,7 +1084,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
       double orad = tgOuter->posy + tgOuter->dy;
       double start = -(orad-irad)/2. + (tg->posy-irad) + tg->dy/2;
       double xstart = -thickness/2. + tg->GetThickness()/2.;
-      htcomponent = HepGeom::TranslateX3D(xstart + tg->posz)*HepGeom::TranslateZ3D(start);
+      htcomponent = GeoTrf::TranslateX3D(xstart + tg->posz)*GeoTrf::TranslateZ3D(start);
       xfaligncomponent = new GeoAlignableTransform(htcomponent);
 
       // Define key for this TGC component
@@ -1121,7 +1123,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
       }
 
     } else if (type=="CSC") {
-      htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateZ3D(zpos);
+      htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateZ3D(zpos);
       xfaligncomponent = new GeoAlignableTransform(htcomponent);
       // Here define the key for this CSC component
       std::string key = stName+techname;
@@ -1195,7 +1197,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
              (xfcomponent->getTransform())[2][2] << " " <<
              (xfcomponent->getTransform())[2][3] << " " << std::endl;
 */
-      xfaligncomponent->setDelta(HepGeom::Transform3D::Identity);
+      xfaligncomponent->setDelta(GeoTrf::Transform3D::Identity());
       //delete xfcomponent;
       ptrd->add(xfaligncomponent);
       ptrd->add(lvm);
@@ -1243,7 +1245,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         //    std::cout << "(" << dumv.x() << ", " << dumv.y() << ", " << dumv.z()
         //              << ")" << std::endl;
         //    std::cout << " Mdtreadoutelement transform = "  << std::endl;
-        //    HepGeom::Transform3D dummy=det->transform(id);
+        //    GeoTrf::Transform3D dummy=det->transform(id);
         //    std::cout << dummy[0][0] << " " << dummy[0][1] << " "
         //              << dummy[0][2] << " " << dummy[0][3] << std::endl
         //              << dummy[1][0] << " " << dummy[1][1] << " "
@@ -1287,7 +1289,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
                (xfcomponent->getTransform())[2][2] << " " <<
                (xfcomponent->getTransform())[2][3] << " " << std::endl;
 */
-	xfaligncomponent->setDelta(HepGeom::Transform3D::Identity);
+	xfaligncomponent->setDelta(GeoTrf::Transform3D::Identity());
 	//delete xfcomponent;
 	ptrd->add(xfaligncomponent);
         ptrd->add(lvc);
@@ -1357,7 +1359,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
         }
         ptrd->add(new GeoIdentifierTag(geoid));
         ptrd->add(nm);
-	xfaligncomponent->setDelta(HepGeom::Transform3D::Identity);
+	xfaligncomponent->setDelta(GeoTrf::Transform3D::Identity());
 	//delete xfcomponent;
 	ptrd->add(xfaligncomponent);
         ptrd->add(lvt);
@@ -1427,8 +1429,8 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
            //  <<"ypos, zpos, ndivz, ndivy "
            //  <<ypos<<" "<<zpos<<" "
            //  <<ndivz << " " << ndivy <<endmsg;
-          //htcomponent = HepGeom::TranslateX3D(ypos)*HepGeom::TranslateY3D(xpos)
-          //		      *HepGeom::TranslateZ3D(zpos);
+          //htcomponent = GeoTrf::TranslateX3D(ypos)*GeoTrf::TranslateY3D(xpos)
+          //		      *GeoTrf::TranslateZ3D(zpos);
           //		    xfcomponent = new GeoTransform(htcomponent);
 
           const RpcIdHelper* rpc_id = manager->rpcIdHelper();
@@ -1448,25 +1450,25 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
           if    (zi <= 0 && !is_mirrored) {
             // the special cases 
             doubletZ = 1;
-            if (zpos<-zdivision*CLHEP::mm)    doubletZ=2;
-            if (fabs(xpos) > 100.*CLHEP::mm && ndbz[doubletR-1] > 2) {
+            if (zpos<-zdivision*GeoModelKernelUnits::mm)    doubletZ=2;
+            if (fabs(xpos) > 100.*GeoModelKernelUnits::mm && ndbz[doubletR-1] > 2) {
               doubletZ = 3;
               nfields++;
             }
-            if (fabs(xpos) > 100.*CLHEP::mm ) ndbz[doubletR-1]--;
+            if (fabs(xpos) > 100.*GeoModelKernelUnits::mm ) ndbz[doubletR-1]--;
           } else {
             doubletZ = 1;
-            if (zpos > zdivision*CLHEP::mm) doubletZ=2;
-            if (fabs(xpos) > 100.*CLHEP::mm && ndbz[doubletR-1] > 2) {
+            if (zpos > zdivision*GeoModelKernelUnits::mm) doubletZ=2;
+            if (fabs(xpos) > 100.*GeoModelKernelUnits::mm && ndbz[doubletR-1] > 2) {
               doubletZ = 3;
               nfields++;
             }
-            if (fabs(xpos) > 100.*CLHEP::mm ) ndbz[doubletR-1]--;
+            if (fabs(xpos) > 100.*GeoModelKernelUnits::mm ) ndbz[doubletR-1]--;
           }
 
           int dbphi = 1;
 	  //std::cout<<stName<<" ----------------------------------- dbphi = "<<dbphi<<std::endl;
-          if (xpos > 400.*CLHEP::mm) dbphi = 2; // this special patch is needed for BMS in the ribs where xpos is ~950mm; the theshold to 100mm (too low) caused a bug
+          if (xpos > 400.*GeoModelKernelUnits::mm) dbphi = 2; // this special patch is needed for BMS in the ribs where xpos is ~950mm; the theshold to 100mm (too low) caused a bug
 	  // in BOG at eta +/-4 and stationEta 7 (not 6) ==>> 28 Jan 2016 raising the threshold to 400.mm 
           // doublet phi not aware of pos. in space !!!
 	  //std::cout<<" dbphi reset to  "<<dbphi<<" due to xpos "<< xpos <<" >10cm "<<std::endl;
@@ -1521,7 +1523,7 @@ MuonChamber::build(MuonDetectorManager* manager, int zi,
                  (xfcomponent->getTransform())[2][2] << " " <<
                  (xfcomponent->getTransform())[2][3] << " " << std::endl;
 */
-	  xfaligncomponent->setDelta(HepGeom::Transform3D::Identity);
+	  xfaligncomponent->setDelta(GeoTrf::Transform3D::Identity());
 	  //delete xfcomponent;
 	  ptrd->add(xfaligncomponent);
           ptrd->add(lvr);
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
index eef65f7fbcbf784fb89f2f2ef5bcab8f4613beaf..5748ed1644d96640f6d5e82a90ea0e33b60697c0 100755
--- a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
@@ -51,11 +51,14 @@
 #include "GeoModelKernel/GeoSerialTransformer.h" 
 #include "GeoModelKernel/GeoIdentifierTag.h"
 #include "GeoModelKernel/GeoPerfUtils.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 #include "GeoModelInterfaces/StoredMaterialManager.h"
 
 #include "StoreGate/StoreGateSvc.h"
 
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/Variable.h"
 
 #include "MuonGeoModel/DBReader.h"
 #include "MuonGeoModel/RDBReaderAtlas.h"
@@ -71,7 +74,7 @@ typedef std::ostringstream my_osstream;
 // The objects for mapping plane indexes in MuonSystem to the record index in RDBRecordset
 typedef std::map<int, unsigned int, std::less<int> > muonsysIndMap;
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 #define skip_chambers  false
@@ -92,15 +95,15 @@ namespace MuonGM {
   {
     MsgStream log(Athena::getMessageSvc(), "MuonGeoModel");
     m_muon = new MuonSystemDescription( "MuonSystem" );
-    m_muon->barrelInnerRadius =  4.30*CLHEP::m;
-    m_muon->innerRadius       =  0.07*CLHEP::m;
-    m_muon->outerRadius       = 13.00*CLHEP::m;
-    m_muon->endcapFrontFace   =  6.74*CLHEP::m;
-    m_muon->length            = 22.03*CLHEP::m;
-    m_muon->barreLength       =  6.53*CLHEP::m; 
-    m_muon->barrelInterRadius =  3.83*CLHEP::m;
-    m_muon->extraZ = 12.9*CLHEP::m;
-    m_muon->extraR = 12.5*CLHEP::m;
+    m_muon->barrelInnerRadius =  4.30*GeoModelKernelUnits::m;
+    m_muon->innerRadius       =  0.07*GeoModelKernelUnits::m;
+    m_muon->outerRadius       = 13.00*GeoModelKernelUnits::m;
+    m_muon->endcapFrontFace   =  6.74*GeoModelKernelUnits::m;
+    m_muon->length            = 22.03*GeoModelKernelUnits::m;
+    m_muon->barreLength       =  6.53*GeoModelKernelUnits::m; 
+    m_muon->barrelInterRadius =  3.83*GeoModelKernelUnits::m;
+    m_muon->extraZ = 12.9*GeoModelKernelUnits::m;
+    m_muon->extraR = 12.5*GeoModelKernelUnits::m;
 
     m_selectedStations = std::vector<std::string>(0);
     m_selectedStEta    = std::vector<int>(0);
@@ -467,7 +470,7 @@ namespace MuonGM {
   
     const GeoMaterial* m4 = theMaterialManager->getMaterial( "std::Air" );
     GeoLogVol*  l4;
-    GeoPcon* c4 = new GeoPcon( 0, 360*CLHEP::deg );
+    GeoPcon* c4 = new GeoPcon( 0, 360*GeoModelKernelUnits::deg );
     //--- --- --- CREATE ENVELOPE --- --- ---
     // First try to get data from the GeomDB
     IRDBRecordset_ptr muonSysRec = m_pRDBAccess->getRecordsetPtr("MuonSystem",OracleTag,OracleNode);
@@ -549,7 +552,7 @@ namespace MuonGM {
   
     // Cannot (yet) cope with this:
     // G4UserLimits *ul=new G4UserLimits;
-    // ul->SetMaxAllowedStep(5*CLHEP::cm);
+    // ul->SetMaxAllowedStep(5*GeoModelKernelUnits::cm);
     // lv->GetLogicalVolume()->SetUserLimits(ul);
   
     m_manager->addTreeTop(p4); // This is the top!
@@ -681,7 +684,7 @@ namespace MuonGM {
 
             // here define the GeoAlignableTransform associated to the chamber
             // nominal transform first 
-            GeoAlignableTransform *xf = new GeoAlignableTransform( station->getNominalTransform( (*pit).second) );             
+            GeoAlignableTransform *xf = new GeoAlignableTransform(station->getNominalTransform( (*pit).second) );
 
             // add tag, transform and physicalvolume associated to the chamber to the mother-volume
             p4->add(nm);
@@ -697,19 +700,15 @@ namespace MuonGM {
 		continue;
 	      }
 	    mst->setTransform(xf);
-	    HepGeom::Transform3D tsz_to_szt = HepGeom::Transform3D(HepGeom::Point3D<double>(1.,0.,0.),HepGeom::Point3D<double>(0.,1.,0.),
-								   HepGeom::Point3D<double>(0.,0.,1.),HepGeom::Point3D<double>(0.,0.,1.),
-								   HepGeom::Point3D<double>(1.,0.,0.),HepGeom::Point3D<double>(0.,1.,0.));
-	    mst->setNativeToAmdbLRS( tsz_to_szt * station->native_to_tsz_frame( (*pit).second ) );
-	    mst->setNominalAmdbLRSToGlobal( station->tsz_to_global_frame( (*pit).second ) * tsz_to_szt.inverse() );
+	    GeoTrf::Transform3D tsz_to_szt = GeoTrf::RotateZ3D(-90*CLHEP::deg)*GeoTrf::RotateY3D(-90*CLHEP::deg);
+	    mst->setNativeToAmdbLRS( Amg::EigenTransformToCLHEP(tsz_to_szt * station->native_to_tsz_frame( (*pit).second )) );
+	    mst->setNominalAmdbLRSToGlobal( Amg::EigenTransformToCLHEP(station->tsz_to_global_frame( (*pit).second ) * tsz_to_szt.inverse()) );
             
-            HepGeom::Transform3D DummyAline = HepGeom::Transform3D::Identity;
             // find correct alignment information for this position
             // xf->setDelta(DummyAline); // just in case we don't find one
 
             // apit = station->FindAlignPos(zi,fi);
 	    // number of A-lines for this station
-            HepGeom::Transform3D Delta = HepGeom::Transform3D::Identity;
 	    int nAlines = station->CountAlignPos(zi,fi);
 	    //nAlines=-1; 
 	    if (nAlines==0)
@@ -782,7 +781,7 @@ namespace MuonGM {
             // MuonStation* mst = m_manager->getMuonStation (station->GetName(), zi, fi+1);
             // if (mst != NULL) {
             //     mst->setTransform(xf);
-            //     HepGeom::Transform3D tsz_to_szt = HepGeom::Transform3D(HepGeom::Point3D<double>(1.,0.,0.),HepGeom::Point3D<double>(0.,1.,0.),
+            //     GeoTrf::Transform3D tsz_to_szt = GeoTrf::Transform3D(HepGeom::Point3D<double>(1.,0.,0.),HepGeom::Point3D<double>(0.,1.,0.),
             //                                                HepGeom::Point3D<double>(0.,0.,1.),HepGeom::Point3D<double>(0.,0.,1.),
             //                                                HepGeom::Point3D<double>(1.,0.,0.),HepGeom::Point3D<double>(0.,1.,0.));
             //     mst->setNativeToAmdbLRS( tsz_to_szt * station->native_to_tsz_frame( (*pit).second ) );
@@ -801,7 +800,7 @@ namespace MuonGM {
 	    //                     (xf->getTransform())[2][1] << " " <<
 	    //                     (xf->getTransform())[2][2] << " " <<
 	    //                     (xf->getTransform())[2][3] << " " << endmsg;
-	    // HepGeom::Transform3D Delta_amdb_frame = tsz_to_szt*station->getDeltaTransform_tszFrame(ap)*tsz_to_szt.inverse();
+	    // GeoTrf::Transform3D Delta_amdb_frame = tsz_to_szt*station->getDeltaTransform_tszFrame(ap)*tsz_to_szt.inverse();
 	    // mst->setDeltaAmdbLRS(  Delta_amdb_frame );
 	    //                 if (log.level()<=MSG::VERBOSE) log<<MSG::VERBOSE << "From the Factory:: Delta(amdb) transformation for " << stname << ":"
 	    //                    << endmsg <<
diff --git a/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx b/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
index 489839b94cf4560beb645f818a4d223dd3c30f19..4597fc40b033ac35db5485e8337f1eb7dfd80560 100755
--- a/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
@@ -13,7 +13,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBQuery.h"
 #include "MuonReadoutGeometry/TgcReadoutParams.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
 
 #include "MuonGeoModel/TGC_Technology.h"
@@ -421,7 +421,7 @@ void RDBReaderAtlas::ProcessTGCreadout () {
 
     
         int version = (int) (*ggsd)[0]->getDouble("VERS");
-        float wirespacing = (*ggsd)[0]->getDouble("WIRESP")*CLHEP::cm;
+        float wirespacing = (*ggsd)[0]->getDouble("WIRESP")*GeoModelKernelUnits::cm;
         log<<MSG::INFO
            <<" ProcessTGCreadout - version "<<version<<" wirespacing "<<wirespacing<<endmsg;
     
@@ -519,7 +519,7 @@ void RDBReaderAtlas::ProcessTGCreadout () {
         IRDBRecordset_ptr ggln = m_pRDBAccess->getRecordsetPtr("GGLN",m_geoTag,m_geoNode);
 
         int version = (int) (*ggln)[0]->getInt("VERS");
-        float wirespacing = (*ggln)[0]->getFloat("WIRESP")*CLHEP::mm;
+        float wirespacing = (*ggln)[0]->getFloat("WIRESP")*GeoModelKernelUnits::mm;
         log<<MSG::INFO
            <<" ProcessTGCreadout - version "<<version<<" wirespacing "<<wirespacing<<endmsg;
 
@@ -618,11 +618,11 @@ void RDBReaderAtlas::ProcessTGCreadout () {
 	    tgc->offsetWireSupport[0] = (*ggln)[ich]->getFloat("SP1WI");
 	    tgc->offsetWireSupport[1] = (*ggln)[ich]->getFloat("SP2WI");
 	    tgc->offsetWireSupport[2] = (*ggln)[ich]->getFloat("SP3WI");
-	    tgc->angleTilt            = (*ggln)[ich]->getFloat("TILT")*CLHEP::deg;
+	    tgc->angleTilt            = (*ggln)[ich]->getFloat("TILT")*GeoModelKernelUnits::deg;
 	    tgc->radiusButton         = (*ggln)[ich]->getFloat("SP1BU");
 	    tgc->pitchButton[0]       = (*ggln)[ich]->getFloat("SP2BU");
 	    tgc->pitchButton[1]       = (*ggln)[ich]->getFloat("SP3BU");
-	    tgc->angleButton          = (*ggln)[ich]->getFloat("SP4BU")*CLHEP::deg;
+	    tgc->angleButton          = (*ggln)[ich]->getFloat("SP4BU")*GeoModelKernelUnits::deg;
 
         }
     }
diff --git a/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx b/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
index 3350f04925f5d91640219cfbc6d8ea3f60e5fd71..d447b0c9037697ebabaa095760eba02aa8bcf71b 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
@@ -17,10 +17,13 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
-#include <iomanip>
-#include <cassert>
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
+
+#include <iomanip>
+#include <cassert>
 
 #define skip_rpc false
 
@@ -75,12 +78,12 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
    if (cutoutson && vcutdef.size() > 0) {
      Cutout* cut = 0;
      GeoShape* cutoutShape = 0;
-     HepGeom::Transform3D cutTrans;
+     GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
      for (unsigned i = 0; i < vcutdef.size(); i++) {
        cut = vcutdef[i];
        cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                 cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-       cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+       cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
        srpc = &(srpc->subtract( (*cutoutShape) << cutTrans) ); 
      }
 //     std::cout << " Cutouts for Rpc " << std::endl;
@@ -132,12 +135,12 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
        GeoPhysVol* tempPhys = 0;
        Cutout* cut = 0;
        GeoShape* cutoutShape = 0;
-       HepGeom::Transform3D cutTrans;
+       GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
        for (unsigned i = 0; i < vcutdef.size(); i++) {
          cut = vcutdef[i];
          cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                   cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-         cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+         cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
 
          GeoCutVolAction cutAction(*cutoutShape, cutTrans);
          pallpan->apply(&cutAction);
@@ -148,7 +151,7 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
      }
 
      newpos += r->externalSupPanelThickness/2.;
-     GeoTransform* tlpan = new GeoTransform(HepGeom::TranslateX3D( newpos ));
+     GeoTransform* tlpan = new GeoTransform(GeoTrf::TranslateX3D( newpos ));
      if (RPCprint) std::cout << " Rpc:: put ext.sup panel at " << newpos
                              << " from centre" << std::endl;
      if (!skip_rpc) {
@@ -167,7 +170,7 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
      }
 
      newpos += r->rpcLayerThickness/2.;
-     GeoTransform* tlgg = new GeoTransform(HepGeom::TranslateX3D( newpos ));
+     GeoTransform* tlgg = new GeoTransform(GeoTrf::TranslateX3D( newpos ));
      if (RPCprint) std::cout << " Rpc:: put lower RPC layer at " << newpos
                              << " from centre " << std::endl;
      if (!skip_rpc) {
@@ -202,12 +205,12 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
        GeoPhysVol* tempPhys = 0;
        Cutout* cut = 0;
        GeoShape* cutoutShape = 0;
-       HepGeom::Transform3D cutTrans;
+       GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
        for (unsigned i = 0; i < vcutdef.size(); i++) {
          cut = vcutdef[i];
          cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                   cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-         cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+         cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
 
          GeoCutVolAction cutAction(*cutoutShape, cutTrans);
          palcpan->apply(&cutAction);
@@ -218,7 +221,7 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
      }
 
      newpos += r->centralSupPanelThickness/2.;
-     GeoTransform* tcpan = new GeoTransform(HepGeom::TranslateX3D( newpos ));
+     GeoTransform* tcpan = new GeoTransform(GeoTrf::TranslateX3D( newpos ));
      if (RPCprint) std::cout << " Rpc:: put central sup panel at " << newpos 
                              << " from centre" << std::endl;
      if (!skip_rpc) {
@@ -275,10 +278,10 @@ GeoFullPhysVol* Rpc::build(int minimalgeo, int cutoutson,
      }
 
      newpos += r->rpcLayerThickness/2.;
-     GeoTransform* tugg = new GeoTransform(HepGeom::TranslateX3D(newpos) );
+     GeoTransform* tugg = new GeoTransform(GeoTrf::TranslateX3D(newpos) );
      if (RPCprint) std::cout<< " Rpc:: put upper RPC layer at " << newpos
                             << " from centre " << std::endl;
-     GeoTransform* rugg = new GeoTransform(HepGeom::RotateY3D(180*CLHEP::deg) );
+     GeoTransform* rugg = new GeoTransform(GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) );
      if (!skip_rpc) {
        prpc->add(new GeoIdentifierTag(2));
        prpc->add(tugg);
diff --git a/MuonSpectrometer/MuonGeoModel/src/RpcLayer.cxx b/MuonSpectrometer/MuonGeoModel/src/RpcLayer.cxx
index d345301947896b7138db88859c5540ad080504b8..572957a751fbeb4096f2b9e34fa7bcfb7ee562bd 100755
--- a/MuonSpectrometer/MuonGeoModel/src/RpcLayer.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/RpcLayer.cxx
@@ -16,6 +16,7 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "MuonReadoutGeometry/GlobalUtilities.h"
 #include <iomanip>
 // for cutouts:
@@ -94,7 +95,7 @@ RpcLayer::build(int cutoutson, std::vector<Cutout*> vcutdef)
     newpos += strpanThickness/2. + tol/2.;
     GeoPhysVol* pcustrpan11 = new GeoPhysVol(lcustrpan);
     GeoPhysVol* pfoamstrpan11 = new GeoPhysVol(lfoamstrpan);
-    GeoTransform* tx = new GeoTransform(HepGeom::TranslateX3D(newpos) );
+    GeoTransform* tx = new GeoTransform(GeoTrf::TranslateX3D(newpos) );
     GeoTransform* ty1;
     GeoTransform* ty2;
 
@@ -102,8 +103,8 @@ RpcLayer::build(int cutoutson, std::vector<Cutout*> vcutdef)
       if (RPCprint) std::cout << " RpcLayer::NstripPanels_in_s == 2 " << std::endl;
       GeoPhysVol* pcustrpan12 = new GeoPhysVol(lcustrpan);
       GeoPhysVol* pfoamstrpan12 = new GeoPhysVol(lfoamstrpan);
-            ty1 = new GeoTransform(HepGeom::TranslateY3D(-width/4.));
-            ty2 = new GeoTransform(HepGeom::TranslateY3D( width/4.));
+            ty1 = new GeoTransform(GeoTrf::TranslateY3D(-width/4.));
+            ty2 = new GeoTransform(GeoTrf::TranslateY3D( width/4.));
             prpcl->add(tx);
             prpcl->add(ty1);
             if (RPCprint) std::cout<<"RpcLayer:: Locating the 1st phi strip panel at x, y "
@@ -161,13 +162,13 @@ RpcLayer::build(int cutoutson, std::vector<Cutout*> vcutdef)
                                         matManager->getMaterial("muo::RPCgas"));
         GeoPhysVol *pbak1 =  new GeoPhysVol (lbak);
         GeoPhysVol *pgas1 =  new GeoPhysVol (lgas);
-        tx = new GeoTransform(HepGeom::TranslateX3D(newpos));
+        tx = new GeoTransform(GeoTrf::TranslateX3D(newpos));
         if (r->NGasGaps_in_s == 2)
         {
             GeoPhysVol *pbak2 =  new GeoPhysVol (lbak);
             GeoPhysVol *pgas2 =  new GeoPhysVol (lgas);
-            ty1 = new GeoTransform(HepGeom::TranslateY3D(-width/4.));
-            ty2 = new GeoTransform(HepGeom::TranslateY3D(width/4.));
+            ty1 = new GeoTransform(GeoTrf::TranslateY3D(-width/4.));
+            ty2 = new GeoTransform(GeoTrf::TranslateY3D(width/4.));
             prpcl->add(tx);
             prpcl->add(ty1);
             if (RPCprint) std::cout<<"RpcLayer:: put 1st gas gap centre at depth, s "<<newpos<<" "<<-width/4.<<std::endl;
@@ -200,13 +201,13 @@ RpcLayer::build(int cutoutson, std::vector<Cutout*> vcutdef)
                 
         GeoPhysVol *pcustrpan21   = new GeoPhysVol(lcustrpan);
         GeoPhysVol *pfoamstrpan21 = new GeoPhysVol(lfoamstrpan);
-        tx = new GeoTransform(HepGeom::TranslateX3D(newpos));
+        tx = new GeoTransform(GeoTrf::TranslateX3D(newpos));
         if (r->NstripPanels_in_s == 2) 
         {
             GeoPhysVol *pcustrpan22 = new GeoPhysVol(lcustrpan);
             GeoPhysVol *pfoamstrpan22 = new GeoPhysVol(lfoamstrpan);
-            ty1 = new GeoTransform(HepGeom::TranslateY3D(-width/4.));
-            ty2 = new GeoTransform(HepGeom::TranslateY3D( width/4.));
+            ty1 = new GeoTransform(GeoTrf::TranslateY3D(-width/4.));
+            ty2 = new GeoTransform(GeoTrf::TranslateY3D( width/4.));
             prpcl->add(tx);
             prpcl->add(ty1);
             if (RPCprint) std::cout<<"RpcLayer:: Locating the 1st eta panel at x, y "
@@ -239,12 +240,12 @@ RpcLayer::build(int cutoutson, std::vector<Cutout*> vcutdef)
       GeoPhysVol* tempPhys = 0;
       Cutout* cut = 0;
       GeoShape* cutoutShape = 0;
-      HepGeom::Transform3D cutTrans;
+      GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
       for (unsigned i = 0; i < vcutdef.size(); i++) {
         cut = vcutdef[i];
         cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                  cut->widthXs/2.+0.5, cut->widthXl/2.+0.5, cut->lengthY/2.+tol);
-        cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+        cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
 
         GeoCutVolAction cutAction(*cutoutShape, cutTrans);
         prpcl->apply(&cutAction);
diff --git a/MuonSpectrometer/MuonGeoModel/src/SimpleVolAction.cxx b/MuonSpectrometer/MuonGeoModel/src/SimpleVolAction.cxx
index a46f1fd0e29e5b4d003c642bfa225e1be6cb396c..e53a148be7c770b07b79eacbf156dc67a8ea87b2 100755
--- a/MuonSpectrometer/MuonGeoModel/src/SimpleVolAction.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/SimpleVolAction.cxx
@@ -11,6 +11,7 @@
 //<version>	$Name: not supported by cvs2svn $
 
 #include "MuonGeoModel/SimpleVolAction.h"
+#include <iostream>
 
 namespace MuonGM {
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/Spacer.cxx b/MuonSpectrometer/MuonGeoModel/src/Spacer.cxx
index 2bfd146e9a8b0c7901e16e7e96d06e4856b434b1..df585ef779642a22971f88b84a4eafcff547227e 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Spacer.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Spacer.cxx
@@ -19,7 +19,8 @@
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 // for cutouts:
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 
@@ -65,8 +66,8 @@ GeoVPhysVol * Spacer::build(int /*cutoutson*/)
              //         <<excent<<" length = "<<length<<std::endl;
       GeoTrd* upTrd   = new GeoTrd(thickness/2.,thickness/2., longWidth/2., upWidth/2.,
                                    (length-maxwLength)/2.);		
-      strd = & ( (strd->add(  (*upTrd) << HepGeom::TranslateZ3D( length/2. )) )
-                 << HepGeom::TranslateZ3D( (maxwLength - length)/2.) );
+      strd = & ( (strd->add(  (*upTrd) << GeoTrf::TranslateZ3D( length/2. )) )
+                 << GeoTrf::TranslateZ3D( (maxwLength - length)/2.) );
     }
 
     const GeoMaterial* mtrd = matManager->getMaterial("std::Aluminium");
@@ -112,7 +113,7 @@ GeoVPhysVol * Spacer::build(int /*cutoutson*/)
           ptrdtemp = ptrd2;
           tckibeam = dy;
         }
-        GeoTransform* xf = new GeoTransform(HepGeom::Translate3D(wherepos + tckibeam/2, wherewidth+dy/2, 0));
+        GeoTransform* xf = new GeoTransform(GeoTrf::Translate3D(wherepos + tckibeam/2, wherewidth+dy/2, 0));
         if (!skip_spacer) {
           ptrd->add(xf);
           ptrd->add(ptrdtemp);
@@ -134,7 +135,7 @@ GeoVPhysVol * Spacer::build(int /*cutoutson*/)
 
     for (int k1 = 0; k1 < 2; k1++){
       for (int k = 0; k < 2; k++){
-        GeoTransform* ttube = new GeoTransform(HepGeom::RotateX3D(-90*CLHEP::deg)* HepGeom::Translate3D(
+        GeoTransform* ttube = new GeoTransform(GeoTrf::RotateX3D(-90*GeoModelKernelUnits::deg)* GeoTrf::Translate3D(
                                                0.,
                                                -(vtubl+tckibeam)/2.-(k-1)*(vtubl+tckibeam),
                                                -length/4.-(k1-1)*length/2));
diff --git a/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx b/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
index 4d77c86df634b7a880b8f9a23ea4eb4bbe098fa4..3c594de7773f0d0cc0f07eacc636e6cbaffbf30e 100755
--- a/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
@@ -14,10 +14,9 @@
 #include "GeoModelKernel/GeoPhysVol.h"
 #include "GeoModelKernel/GeoLogVol.h"
 #include "GeoModelKernel/GeoMaterial.h"
-#include "GeoModelKernel/GeoTransform.h"
-#include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "MuonGeoModel/CHV_Technology.h"
 #include "MuonGeoModel/CRO_Technology.h"
 #include "MuonGeoModel/CMI_Technology.h"
@@ -110,15 +109,15 @@ SpacerBeam::build(int /*cutoutson*/, bool is_barrel)
       const GeoShape* IBeamShape = new GeoBox(height/2, volumelargeness/2, length/2);
       GeoBox* sideBox = new GeoBox(height/2. - thickness, volumelargeness/4., length/2 + 1.);
       double yshift = volumelargeness/4. + thickness/2.;
-      IBeamShape = &(IBeamShape->subtract( (*sideBox) << HepGeom::TranslateY3D(yshift) ) );
-      IBeamShape = &(IBeamShape->subtract( (*sideBox) << HepGeom::TranslateY3D(-yshift) ) );
+      IBeamShape = &(IBeamShape->subtract( (*sideBox) << GeoTrf::TranslateY3D(yshift) ) );
+      IBeamShape = &(IBeamShape->subtract( (*sideBox) << GeoTrf::TranslateY3D(-yshift) ) );
 
       // Cut holes for LB
       GeoBox* holeBox = new GeoBox(m_lb_height/2.+1., 
                                    thickness/2.+1., 
                                    m_lb_width/cosexc/2.+thickness*sinexc/cosexc+6.);
-      IBeamShape = &(IBeamShape->subtract( (*holeBox) << HepGeom::TranslateZ3D(m_hole_pos1/cosexc) ) );
-      IBeamShape = &(IBeamShape->subtract( (*holeBox) << HepGeom::TranslateZ3D(m_hole_pos2/cosexc) ) );
+      IBeamShape = &(IBeamShape->subtract( (*holeBox) << GeoTrf::TranslateZ3D(m_hole_pos1/cosexc) ) );
+      IBeamShape = &(IBeamShape->subtract( (*holeBox) << GeoTrf::TranslateZ3D(m_hole_pos2/cosexc) ) );
       lvol = new GeoLogVol(name, IBeamShape, mat);
       pvol = new GeoPhysVol(lvol);
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/Station.cxx b/MuonSpectrometer/MuonGeoModel/src/Station.cxx
index 9ded49a740c63287e2c0b92b806b480bd222028d..aa0fcdba8110c6df7a79f5e2aff487dc93c1a6a5 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Station.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Station.cxx
@@ -8,8 +8,7 @@
 #include "MuonGeoModel/StandardComponent.h"
 #include "MuonGeoModel/SupComponent.h"
 #include "MuonGeoModel/TgcComponent.h"
-#include "CLHEP/Vector/ThreeVector.h"
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 #include "GaudiKernel/MsgStream.h"
 #include "AthenaKernel/getMessageSvc.h"
 #include <iostream>
@@ -669,7 +668,7 @@ double Station::mdtHalfPitch() const {
 
 
 //this is really needed 
-HepGeom::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
+GeoTrf::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
 
     MsgStream log(m_msgSvc, "MGM-native_to_tsz");
 	const bool dLvl = log.level()<=MSG::DEBUG;
@@ -682,20 +681,20 @@ HepGeom::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
 		<< " for endcap side A so be very careful."
 		<< endmsg;
     
-    HepGeom::Transform3D nominalTransf;
+    GeoTrf::Transform3D nominalTransf{GeoTrf::Transform3D::Identity()};
     
     // first apply here the mirror symmetry: (we, in fact, apply a rotation)
-    HepGeom::Transform3D mirrsym=HepGeom::Transform3D::Identity;
+    GeoTrf::Transform3D mirrsym=GeoTrf::Transform3D::Identity();
     if (p.isMirrored) 
     {
         if (m_name[0]=='B' )
         {
-            mirrsym = HepGeom::RotateX3D(180.*CLHEP::deg);
+            mirrsym = GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
         }
     }
 
     // define the translation to position the chamber in the tzs frame
-    HepGeom::Translate3D AMDBorgTranslation;
+    GeoTrf::Translate3D AMDBorgTranslation(0,0,0);
     if ( (m_name[0]=='B' || p.isBarrelLike) && p.zindex<0 && (!p.isMirrored) && hasMdts())
     {
         //MYSQL* mysql=MYSQL::GetPointer();
@@ -703,7 +702,7 @@ HepGeom::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
         //double halfpitch = (mdtobj->pitch)/2.;
 	double halfpitch = mdtHalfPitch();
         AMDBorgTranslation =
-            HepGeom::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
+            GeoTrf::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
                            0.,
 			   GetLength()/2.-(getAmdbOrigine_along_length()+halfpitch));
                            //GetLength()/2.-(halfpitch));
@@ -718,12 +717,12 @@ HepGeom::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
     {
       if (m_name[0]=='T')
         AMDBorgTranslation =
-            HepGeom::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
+            GeoTrf::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
                            0.,
                            GetLength()/2.-getAmdbOrigine_along_length()+((TgcComponent *)GetComponent(0))->posy);
       else
         AMDBorgTranslation =
-            HepGeom::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
+            GeoTrf::Translate3D(GetThickness()/2.-getAmdbOrigine_along_thickness(),
                            0.,
                            GetLength()/2.-getAmdbOrigine_along_length());
       if (vLvl)
@@ -735,34 +734,34 @@ HepGeom::Transform3D Station::native_to_tsz_frame( const Position & p ) const {
     }
 
     // // define the rotations by alpha, beta, gamma
-    // HepGeom::Rotate3D ralpha = HepGeom::RotateX3D(p.alpha*CLHEP::deg);
-    // HepGeom::Rotate3D rbeta  = HepGeom::RotateZ3D(p.beta*CLHEP::deg);
-    // HepGeom::Rotate3D rgamma;
-    // rgamma = HepGeom::RotateY3D(p.gamma*CLHEP::deg);
+    // GeoTrf::Rotate3D ralpha = GeoTrf::RotateX3D(p.alpha*GeoModelKernelUnits::deg);
+    // GeoTrf::Rotate3D rbeta  = GeoTrf::RotateZ3D(p.beta*GeoModelKernelUnits::deg);
+    // GeoTrf::Rotate3D rgamma;
+    // rgamma = GeoTrf::RotateY3D(p.gamma*GeoModelKernelUnits::deg);
     // log<<MSG::VERBOSE<<" gamma is not changing sign - original "<<p.gamma<<" new one "<<p.gamma<<endmsg;
     // log<<MSG::VERBOSE<<" alpha / beta "<<p.alpha<<" "<<p.beta<<endmsg;
 
     // // apply all transform in sequence 
-    // //    HepGeom::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;  // works for barrel and barrel-like
+    // //    GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;  // works for barrel and barrel-like
     // // imt: tested for CTB2004, seems to work for all amdb versions...
-    // HepGeom::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;
-    HepGeom::Transform3D to_tsz = AMDBorgTranslation*mirrsym;
+    // GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;
+    GeoTrf::Transform3D to_tsz = AMDBorgTranslation*mirrsym;
 
     return to_tsz;
 }
-HepGeom::Transform3D Station::tsz_to_native_frame( const Position & p ) const {
+GeoTrf::Transform3D Station::tsz_to_native_frame( const Position & p ) const {
 
     return (native_to_tsz_frame( p )).inverse();
 }
 // this is really needed 
-HepGeom::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
+GeoTrf::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
 
-    MsgStream log(m_msgSvc, "MGM tsz_to_global_frame");
-	const bool pLvl=log.level()<=MSG::VERBOSE;
+  MsgStream log(m_msgSvc, "MGM tsz_to_global_frame");
+  const bool pLvl=log.level()<=MSG::VERBOSE;
+  
+  GeoTrf::Transform3D nominalTransf= GeoTrf::Transform3D::Identity();
     
-    HepGeom::Transform3D nominalTransf= HepGeom::Transform3D::Identity;
-    
-    CLHEP::Hep3Vector vec;
+    GeoTrf::Vector3D vec;
     double RAD;
     if (m_name[0]=='T')
       {
@@ -771,22 +770,22 @@ HepGeom::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
       }
     else
         RAD=p.radius;
-    vec.setX(RAD*cos(p.phi*CLHEP::deg));
-    vec.setX(vec.x()-p.shift*sin((p.phi)*CLHEP::deg));
-    vec.setY(RAD*sin(p.phi*CLHEP::deg));
-    vec.setY(vec.y()+p.shift*cos((p.phi)*CLHEP::deg));
+    vec.x() = RAD*cos(p.phi*GeoModelKernelUnits::deg);
+    vec.x() = vec.x()-p.shift*sin((p.phi)*GeoModelKernelUnits::deg);
+    vec.y() = RAD*sin(p.phi*GeoModelKernelUnits::deg);
+    vec.y() = vec.y()+p.shift*cos((p.phi)*GeoModelKernelUnits::deg);
     // 
     if (p.isMirrored)
         if ( (p.isBarrelLike) || (m_name[0]=='B') )
         {
             // correct the z location (=-p.z-m_length) for possible m_amdbOrigine_along_length
-            vec.setZ(p.z + getAmdbOrigine_along_length());
+            vec.z() = p.z + getAmdbOrigine_along_length();
 //             std::cout<<" tsz_to_global for station "<<m_name<<" at fi/zi "<<p.phiindex+1<<"/"<<p.zindex<<" isMirr. "<<p.isMirrored
 //                      <<" transl. to "<<vec<<" p.z = "<<p.z<<" length "<<GetLength()<<" AmdbOrigine_along_length "<<getAmdbOrigine_along_length()<<std::endl;
         }
         else
         {
-            vec.setZ(p.z + GetThickness()); // re-establish the amdb z location (with a - sign)
+            vec.z() = p.z + GetThickness(); // re-establish the amdb z location (with a - sign)
         }
     else
     {
@@ -797,10 +796,10 @@ HepGeom::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
             //double halfpitch = (mdtobj->pitch)/2.;
 	    double halfpitch = mdtHalfPitch();
             //vec.setZ(p.z + (-getAmdbOrigine_along_length()+halfpitch));
-            vec.setZ(p.z + halfpitch);
+            vec.z() = p.z + halfpitch;
         }
         else
-            vec.setZ(p.z);
+            vec.z() = p.z;
     }
     
 	if (pLvl)
@@ -808,19 +807,18 @@ HepGeom::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
 
     /////// NEWEWEWWEWEWEWEWEWEWEWEWEW
     // // define the rotations by alpha, beta, gamma
-    HepGeom::Rotate3D ralpha = HepGeom::RotateX3D(p.alpha*CLHEP::deg);
-    HepGeom::Rotate3D rbeta  = HepGeom::RotateZ3D(p.beta*CLHEP::deg);
-    HepGeom::Rotate3D rgamma;
-    rgamma = HepGeom::RotateY3D(p.gamma*CLHEP::deg);
-    if (pLvl)
+    GeoTrf::RotateX3D ralpha(p.alpha*GeoModelKernelUnits::deg);
+    GeoTrf::RotateZ3D rbeta(p.beta*GeoModelKernelUnits::deg);
+    GeoTrf::RotateY3D rgamma(p.gamma*GeoModelKernelUnits::deg);
+    if (pLvl) {
       log<<MSG::VERBOSE<<" gamma is not changing sign - original "<<p.gamma<<" new one "<<p.gamma<<endmsg;
-    if (pLvl)
-    log<<MSG::VERBOSE<<" alpha / beta "<<p.alpha<<" "<<p.beta<<endmsg;
+      log<<MSG::VERBOSE<<" alpha / beta "<<p.alpha<<" "<<p.beta<<endmsg;
+    }
 
     // // apply all transform in sequence 
-    // //    HepGeom::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;  // works for barrel and barrel-like
+    // //    GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;  // works for barrel and barrel-like
     // // imt: tested for CTB2004, seems to work for all amdb versions...
-    HepGeom::Transform3D abgRot = rgamma*rbeta*ralpha;
+    GeoTrf::Transform3D abgRot = rgamma*rbeta*ralpha;
     /////// NEWEWEWWEWEWEWEWEWEWEWEWEW
 
 
@@ -828,51 +826,51 @@ HepGeom::Transform3D Station::tsz_to_global_frame( const Position & p ) const {
     if ( m_name[0]=='B' || p.isBarrelLike )
     {    
         // here all Barrel chambers 
-        nominalTransf =  HepGeom::RotateZ3D(p.phi*CLHEP::deg);
+        nominalTransf =  GeoTrf::RotateZ3D(p.phi*GeoModelKernelUnits::deg);
     }
     else
     {
 // replace this with the folowing lines 8/06/2006 SS because, EC not mirrored chambers have anyway to be rotated
 // by 180deg around z to mov ecoherently their local reference frame and the tube-layer numbering
 //         if ( p.z>=0 || ( p.z<0 && !(p.isMirrored) ) ){
-//             nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*
-// 					    HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg));
+//             nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*
+// 					    GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg));
 //         }
 //         else if (p.z<0 && p.isMirrored){
-//             nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*
-//                                             HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg)*
-//                                             HepGeom::RotateZ3D(180*CLHEP::deg));
+//             nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*
+//                                             GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg)*
+//                                             GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg));
 //         }
         if ( p.z>=0 ){
-            nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*
-					    HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg));
+            nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*
+					    GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg));
         }
         else if ( p.z<0 ){
-            nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*
-                                            HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg)*
-                                            HepGeom::RotateZ3D(180*CLHEP::deg));
+            nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*
+                                            GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg)*
+                                            GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg));
         }
 	else log << MSG::WARNING<<" AAAAAA problem here p.z, mirrored "
 		    <<p.z<<" "<<p.isMirrored<<endmsg;
     }
-    return HepGeom::Translate3D(vec)*nominalTransf*abgRot;
+    return GeoTrf::Translate3D(vec.x(),vec.y(),vec.z())*nominalTransf*abgRot;
 }
 
-HepGeom::Transform3D Station::global_to_tsz_frame( const Position & p ) const {
+GeoTrf::Transform3D Station::global_to_tsz_frame( const Position & p ) const {
     
     return (tsz_to_global_frame( p )).inverse();
 }
-HepGeom::Transform3D Station::getNominalTransform(const Position & p) const 
+GeoTrf::Transform3D Station::getNominalTransform(const Position & p) const 
 {
     //    std::cout<<"Station::getNominalTransform for Position P defined below *********"<<std::endl;
     //    std::cout<<p<<std::endl;
     return  tsz_to_global_frame( p ) * native_to_tsz_frame( p );
 }
-HepGeom::Transform3D Station::getAlignedTransform(const AlignPos & ap, const Position & p) const 
+GeoTrf::Transform3D Station::getAlignedTransform(const AlignPos & ap, const Position & p) const 
 {
     return  tsz_to_global_frame( p ) * getDeltaTransform_tszFrame( ap ) * native_to_tsz_frame( p );
 }
-HepGeom::Transform3D Station::getDeltaTransform_tszFrame(const AlignPos & ap) const
+GeoTrf::Transform3D Station::getDeltaTransform_tszFrame(const AlignPos & ap) const
 {
   MsgStream log(m_msgSvc, "MGM getDeltaTransform_tszFrame");
   if (ap.tras!=0 ||ap.trat!= 0 ||ap.traz!=0 ||
@@ -890,37 +888,37 @@ HepGeom::Transform3D Station::getDeltaTransform_tszFrame(const AlignPos & ap) co
 	}
     }
 
-  HepGeom::Rotate3D rott = HepGeom::RotateX3D(ap.rott);
-  HepGeom::Rotate3D rotz = HepGeom::RotateZ3D(ap.rotz);
-  HepGeom::Rotate3D rots = HepGeom::RotateY3D(ap.rots);
-  HepGeom::Transform3D trans = HepGeom::TranslateY3D(ap.tras)*
-                         HepGeom::TranslateZ3D(ap.traz)*HepGeom::TranslateX3D(ap.trat);
+  GeoTrf::RotateX3D rott(ap.rott);
+  GeoTrf::RotateZ3D rotz(ap.rotz);
+  GeoTrf::RotateY3D rots(ap.rots);
+  GeoTrf::Transform3D trans = GeoTrf::TranslateY3D(ap.tras)*
+                         GeoTrf::TranslateZ3D(ap.traz)*GeoTrf::TranslateX3D(ap.trat);
 
 
-  HepGeom::Transform3D delta = trans*rots*rotz*rott;
+  GeoTrf::Transform3D delta = trans*rots*rotz*rott;
   	
   if (log.level()<=MSG::VERBOSE) log << MSG::VERBOSE<<" delta transform in the tsz frame --------------"<<endmsg
-      <<
-      (delta)[0][0] << " " <<
-      (delta)[0][1] << " " <<
-      (delta)[0][2] << " " <<
-      (delta)[0][3] << " " << endmsg <<
-      (delta)[1][0] << " " <<
-      (delta)[1][1] << " " <<
-      (delta)[1][2] << " " <<
-      (delta)[1][3] << " " << endmsg <<
-      (delta)[2][0] << " " <<
-      (delta)[2][1] << " " <<
-      (delta)[2][2] << " " <<
-      (delta)[2][3] << " " << endmsg;  
+				     <<
+				   delta(0,0) << " " <<
+				   delta(0,1) << " " <<
+				   delta(0,2) << " " <<
+				   delta(0,3) << " " << endmsg <<
+				   delta(1,0) << " " <<
+				   delta(1,1) << " " <<
+				   delta(1,2) << " " <<
+				   delta(1,3) << " " << endmsg <<
+				   delta(2,0) << " " <<
+				   delta(2,1) << " " <<
+				   delta(2,2) << " " <<
+				   delta(2,3) << " " << endmsg;  
 
   // our delta transform must be applied in the tsz frame:
   return delta;
 }
-HepGeom::Transform3D Station::getDeltaTransform(const AlignPos & ap, const Position & p) const
+GeoTrf::Transform3D Station::getDeltaTransform(const AlignPos & ap, const Position & p) const
 {
     // GM applies Delta transform like transform*delta
-    HepGeom::Transform3D deltaGM = tsz_to_native_frame(p) *
+    GeoTrf::Transform3D deltaGM = tsz_to_native_frame(p) *
                              getDeltaTransform_tszFrame( ap ) * native_to_tsz_frame(p);
     return deltaGM;
 }
@@ -950,10 +948,10 @@ double Station::getAmdbOrigine_along_thickness() const
 
 
 // /* 17/06/2008 This is not needed anywhere 
-// HepGeom::Transform3D Station::getTransform( const AlignPos & ap) const {
+// GeoTrf::Transform3D Station::getTransform( const AlignPos & ap) const {
 //   MsgStream log(m_msgSvc, "MuonGeoModel");
-//   HepGeom::Translate3D theTranslation, AMDBorgTranslation;
-//   HepGeom::Transform3D theRotation;
+//   GeoTrf::Translate3D theTranslation, AMDBorgTranslation;
+//   GeoTrf::Transform3D theRotation;
 //   float tras=0, traz=0, trat=0, rots=0, rotz=0, rott=0;
 //   bool isBarrel = false;
 //   isBarrel = ap.isBarrel;
@@ -977,35 +975,35 @@ double Station::getAmdbOrigine_along_thickness() const
 //   if (ap.isBarrel && !(ap.isTrapezoid))
 //     {   // rectangular barrel chambers
 //       // AMDB org is at z=0, t=0 (not z=m_length/2, t=m_thickness/2)
-//       AMDBorgTranslation = HepGeom::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
+//       AMDBorgTranslation = GeoTrf::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
 //       // RSZ = tsz
-//       theTranslation = HepGeom::Translate3D(trat,tras,traz);
+//       theTranslation = GeoTrf::Translate3D(trat,tras,traz);
 //       // SZR = szt
-//       theRotation = HepGeom::RotateY3D(rots)*HepGeom::RotateZ3D(rotz)*
-// 	HepGeom::RotateX3D(rott);
+//       theRotation = GeoTrf::RotateY3D(rots)*GeoTrf::RotateZ3D(rotz)*
+// 	GeoTrf::RotateX3D(rott);
 //     }
 //   else if (ap.isBarrel && ap.isTrapezoid)
 //     {   // we can get rid of isTrapezoid after AMDB version 7.
-//       theTranslation = HepGeom::Translate3D(trat,-tras,traz);
-//       theRotation = HepGeom::RotateY3D(-rots)*HepGeom::RotateZ3D(rotz)*
-// 	HepGeom::RotateX3D(rott);      
-//       AMDBorgTranslation = HepGeom::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
+//       theTranslation = GeoTrf::Translate3D(trat,-tras,traz);
+//       theRotation = GeoTrf::RotateY3D(-rots)*GeoTrf::RotateZ3D(rotz)*
+// 	GeoTrf::RotateX3D(rott);      
+//       AMDBorgTranslation = GeoTrf::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
 //     }
 //   else
 //     { // assumed to be trapezoidal endcap chambers
 // //       
 // //       // RSZ = zst 
-// //       theTranslation = HepGeom::Translate3D(traz,tras,trat);
+// //       theTranslation = GeoTrf::Translate3D(traz,tras,trat);
 // //       // SZR = stz  so you would expect:
-// //       theRotation = HepGeom::RotateY3D(rots)*HepGeom::RotateZ3D(rott)*
-// //       HepGeom::RotateX3D(rotz);
+// //       theRotation = GeoTrf::RotateY3D(rots)*GeoTrf::RotateZ3D(rott)*
+// //       GeoTrf::RotateX3D(rotz);
 // //       
 //       // but in fact the s-axis is flipped in MuonGM wrt AMDB,
 //       // and the z and t axes are exchanged:
-//       theTranslation = HepGeom::Translate3D(trat,-tras,traz);
-//       theRotation = HepGeom::RotateY3D(-rots)*HepGeom::RotateZ3D(rotz)*
-// 	HepGeom::RotateX3D(rott);      
-//       AMDBorgTranslation = HepGeom::Translate3D(GetLength()/2.,0.,GetThickness()/2.);
+//       theTranslation = GeoTrf::Translate3D(trat,-tras,traz);
+//       theRotation = GeoTrf::RotateY3D(-rots)*GeoTrf::RotateZ3D(rotz)*
+// 	GeoTrf::RotateX3D(rott);      
+//       AMDBorgTranslation = GeoTrf::Translate3D(GetLength()/2.,0.,GetThickness()/2.);
 //     }
 //   //  return theTranslation*theRotation;
 //   // put it in AMDB coordinates for the transformation, then go back to MuonGM
@@ -1014,19 +1012,19 @@ double Station::getAmdbOrigine_along_thickness() const
 // }
 // */
 // not needed 17/06/2008 
-// HepGeom::Transform3D Station::getAmdbOrgTrans(const Position & p) const
+// GeoTrf::Transform3D Station::getAmdbOrgTrans(const Position & p) const
 // { // in tsz coordinates:
 //   //MsgStream log(m_msgSvc, "MGM getAmdbOrgTrans");
-//   HepGeom::Translate3D AMDBorgTranslation;
+//   GeoTrf::Translate3D AMDBorgTranslation;
 //   if (m_name[0]=='B' || p.isBarrelLike )
 //     {
 //         AMDBorgTranslation =
-//             HepGeom::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
+//             GeoTrf::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
 //     }
 //   else
 //     {
 //         AMDBorgTranslation =
-//             HepGeom::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
+//             GeoTrf::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
 //     }
 //   //log << MSG::VERBOSE<< "length = "<<GetLength()<<" m_thickness="<<GetThickness()
 //   //	    << endmsg;
@@ -1034,21 +1032,21 @@ double Station::getAmdbOrigine_along_thickness() const
 // }
 
 // 17/06/2008 not needed anywhere
-// HepGeom::Transform3D Station::getTransform( const Position & p) const {
+// GeoTrf::Transform3D Station::getTransform( const Position & p) const {
 //   MsgStream log(m_msgSvc, "MuonGeoModel");
-//     HepGeom::Transform3D nominalTransf;
-//     HepGeom::Transform3D AMDBorgTranslation = HepGeom::Transform3D::Identity;
-//     static CLHEP::Hep3Vector vec;
+//     GeoTrf::Transform3D nominalTransf;
+//     GeoTrf::Transform3D AMDBorgTranslation = GeoTrf::Transform3D::Identity;
+//     static GeoTrf::Vector3D vec;
 //     if (m_name[0]=='B') {
 //         // defining the position of the centre of any station
 //         // here using the stations in DBSC (described in amdb + the ones at z<0)
-//         vec.setX((p.radius+GetThickness()/2.)*cos(p.phi*CLHEP::deg));
-//         vec.setX(vec.x()-p.shift*sin((p.phi)*CLHEP::deg));
-//         vec.setY((p.radius+GetThickness()/2.)*sin(p.phi*CLHEP::deg));
-//         vec.setY(vec.y()+p.shift*cos((p.phi)*CLHEP::deg));
+//         vec.setX((p.radius+GetThickness()/2.)*cos(p.phi*GeoModelKernelUnits::deg));
+//         vec.setX(vec.x()-p.shift*sin((p.phi)*GeoModelKernelUnits::deg));
+//         vec.setY((p.radius+GetThickness()/2.)*sin(p.phi*GeoModelKernelUnits::deg));
+//         vec.setY(vec.y()+p.shift*cos((p.phi)*GeoModelKernelUnits::deg));
 //         vec.setZ(p.z+GetLength()/2.);
-//         AMDBorgTranslation = HepGeom::Translate3D(GetThickness()*cos(p.phi*CLHEP::deg)/2.,
-//                                             GetThickness()*sin(p.phi*CLHEP::deg)/2.,
+//         AMDBorgTranslation = GeoTrf::Translate3D(GetThickness()*cos(p.phi*GeoModelKernelUnits::deg)/2.,
+//                                             GetThickness()*sin(p.phi*GeoModelKernelUnits::deg)/2.,
 //                                             GetLength()/2.);
 //     }
 //     else {      // if (m_name[0]=='T')
@@ -1061,65 +1059,65 @@ double Station::getAmdbOrigine_along_thickness() const
 //             RAD=p.radius;
 //         if (m_name[0]!='C')
 //         {
-//             vec.setX((RAD+GetLength()/2.)*cos(p.phi*CLHEP::deg));
-//             vec.setX(vec.x()-p.shift*sin((p.phi)*CLHEP::deg));
-//             vec.setY((RAD+GetLength()/2.)*sin(p.phi*CLHEP::deg));
-//             vec.setY(vec.y()+p.shift*cos((p.phi)*CLHEP::deg));
+//             vec.setX((RAD+GetLength()/2.)*cos(p.phi*GeoModelKernelUnits::deg));
+//             vec.setX(vec.x()-p.shift*sin((p.phi)*GeoModelKernelUnits::deg));
+//             vec.setY((RAD+GetLength()/2.)*sin(p.phi*GeoModelKernelUnits::deg));
+//             vec.setY(vec.y()+p.shift*cos((p.phi)*GeoModelKernelUnits::deg));
 //             vec.setZ(p.z+GetThickness()/2.);
 //         }
 //         else
 //         {
-//             vec.setX(RAD*cos(p.phi*CLHEP::deg));
-//             vec.setX(vec.x()-p.shift*sin((p.phi)*CLHEP::deg));
-//             vec.setY(RAD*sin(p.phi*CLHEP::deg));
-//             vec.setY(vec.y()+p.shift*cos((p.phi)*CLHEP::deg));
+//             vec.setX(RAD*cos(p.phi*GeoModelKernelUnits::deg));
+//             vec.setX(vec.x()-p.shift*sin((p.phi)*GeoModelKernelUnits::deg));
+//             vec.setY(RAD*sin(p.phi*GeoModelKernelUnits::deg));
+//             vec.setY(vec.y()+p.shift*cos((p.phi)*GeoModelKernelUnits::deg));
 //             if (p.z>0) vec.setZ(p.z);
 //             else vec.setZ(p.z+GetThickness());
 //         }
 //     }
-// //     HepGeom::Transform3D AMDBorgTranslation = HepGeom::Transform3D::Identity;
-// //     AMDBorgTranslation = HepGeom::Translate3D(GetThickness()/2.,
+// //     GeoTrf::Transform3D AMDBorgTranslation = GeoTrf::Transform3D::Identity;
+// //     AMDBorgTranslation = GeoTrf::Translate3D(GetThickness()/2.,
 // //                                         0.,
 // //                                         GetLength()/2.);
 //     const HepVector3D zaxis   = HepVector3D(0.,0.,1.);
 //     const HepVector3D raxis   = HepVector3D(vec.x(), vec.y(), 0.);
 //     const HepVector3D phiaxis = HepVector3D(-raxis.y(), raxis.x(), 0.); // phi = z cross r
 //     // order of extra rotations is alpha(r), then beta(z), then gamma(phi)
-//     HepGeom::Rotate3D ralpha, rbeta, rgamma;
-//     ralpha = HepGeom::Rotate3D(p.alpha*CLHEP::deg, raxis);
-//     rbeta  = HepGeom::Rotate3D(p.beta*CLHEP::deg,  zaxis);
+//     GeoTrf::Rotate3D ralpha, rbeta, rgamma;
+//     ralpha = GeoTrf::Rotate3D(p.alpha*GeoModelKernelUnits::deg, raxis);
+//     rbeta  = GeoTrf::Rotate3D(p.beta*GeoModelKernelUnits::deg,  zaxis);
 //     if ( p.zindex<0 && !(m_name[0] == 'B') ) {
-//         rgamma = HepGeom::Rotate3D(p.gamma*CLHEP::deg, phiaxis);
+//         rgamma = GeoTrf::Rotate3D(p.gamma*GeoModelKernelUnits::deg, phiaxis);
 //         //            if (m_name[0]=='C') log << MSG::DEBUG <<"zi,fi  gamma applied "<<m_name<<" "<<p.zindex<<" "<<p.phiindex<<" "<<p.gamma<<endmsg;
 //     }
 //     else {
-//         rgamma = HepGeom::Rotate3D(-p.gamma*CLHEP::deg, phiaxis);
+//         rgamma = GeoTrf::Rotate3D(-p.gamma*GeoModelKernelUnits::deg, phiaxis);
 //         //            if (m_name[0]=='C') log << MSG::DEBUG<<"zi,fi  gamma applied "<<m_name<<" "<<p.zindex<<" "<<p.phiindex<<" "<<-p.gamma<<endmsg;
 //     }
 //     if (m_name[0]=='B' || p.isBarrelLike)
 //     {
 //         // here all Barrel chambers
-//         if (p.isMirrored) nominalTransf = HepGeom::RotateZ3D(p.phi*CLHEP::deg)*HepGeom::RotateX3D(180.*CLHEP::deg);
-//         else nominalTransf =  HepGeom::RotateZ3D(p.phi*CLHEP::deg);
+//         if (p.isMirrored) nominalTransf = GeoTrf::RotateZ3D(p.phi*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(180.*GeoModelKernelUnits::deg);
+//         else nominalTransf =  GeoTrf::RotateZ3D(p.phi*GeoModelKernelUnits::deg);
 //     }
 //     else
 //     {
 //         if ( p.z>=0 || ( p.z<0 && !(p.isMirrored) ) ){
-//             nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg));
+//             nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg));
 //         }
 //         else if (p.z<0 && p.isMirrored){
-//             nominalTransf =  HepGeom::Transform3D(HepGeom::RotateY3D(-90*CLHEP::deg)*
-//                                             HepGeom::RotateX3D(p.phi*CLHEP::deg-180*CLHEP::deg)*
-//                                             HepGeom::RotateZ3D(180*CLHEP::deg));
+//             nominalTransf =  GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg)*
+//                                             GeoTrf::RotateX3D(p.phi*GeoModelKernelUnits::deg-180*GeoModelKernelUnits::deg)*
+//                                             GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg));
 //         }
 //         else log << MSG::WARNING<<" AAAAAA problem here p.z, mirrored "
 // 	        <<p.z<<" "<<p.isMirrored<<endmsg;
 //     }
-//     HepGeom::Transform3D transf;
-//     if (m_name[0]!='C') transf = HepGeom::Translate3D(vec)*rgamma*rbeta*ralpha*nominalTransf;
-//     else transf = HepGeom::Translate3D(vec)*nominalTransf*
-//                   HepGeom::RotateY3D(p.gamma*CLHEP::deg)*
-//                   HepGeom::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
+//     GeoTrf::Transform3D transf;
+//     if (m_name[0]!='C') transf = GeoTrf::Translate3D(vec)*rgamma*rbeta*ralpha*nominalTransf;
+//     else transf = GeoTrf::Translate3D(vec)*nominalTransf*
+//                   GeoTrf::RotateY3D(p.gamma*GeoModelKernelUnits::deg)*
+//                   GeoTrf::Translate3D(GetThickness()/2.,0.,GetLength()/2.);
 //     return transf;
 // }
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/Tgc.cxx b/MuonSpectrometer/MuonGeoModel/src/Tgc.cxx
index 6306aa9313c24a120116226d379a1b50e3a3d62c..3abfde6a635ad8a3a4969d568f6f3db88b0c424d 100755
--- a/MuonSpectrometer/MuonGeoModel/src/Tgc.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Tgc.cxx
@@ -63,12 +63,12 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
   if (cutoutson && vcutdef.size() > 0) {
     Cutout* cut = 0;
     GeoShape* cutoutShape = 0;
-    HepGeom::Transform3D cutTrans;
+    GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
     for (unsigned i = 0; i < vcutdef.size(); i++) {
       cut = vcutdef[i];
       cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-      cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+      cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
       strd = &(strd->subtract( (*cutoutShape) << cutTrans) );
     }
 //    std::cout << " Tgc cutouts" << std::endl;
@@ -119,12 +119,11 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
 
 	// wire supports
 	GeoTrd* strdsup = new GeoTrd(t->tck[i]/2, t->tck[i]/2, t->widthWireSupport/2,
-                                     t->widthWireSupport/2, lengthActive/2-0.1*CLHEP::mm);
+                                     t->widthWireSupport/2, lengthActive/2-0.1*GeoModelKernelUnits::mm);
 	// button supports
 	GeoTube* stubesup = new GeoTube(0., t->radiusButton,
-					    t->tck[i]/2.+0.005*CLHEP::mm);
-	CLHEP::HepRotation rotY;
-	rotY.set(CLHEP::HepRotationY(3.14159264/2.*CLHEP::rad));
+					    t->tck[i]/2.+0.005*GeoModelKernelUnits::mm);
+	GeoTrf::RotateY3D rotY(3.14159264/2.*GeoModelKernelUnits::rad);
 	  
 	int iymin = int( -(widthActive/2. + lengthActive*tan(t->angleTilt) - t->widthWireSupport/2.
 			  + t->offsetWireSupport[iSenLyr])/t->distanceWireSupport );
@@ -139,15 +138,12 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
 	  } else if (t->offsetWireSupport[iSenLyr]+t->distanceWireSupport*isup == 0.){
             sign = 0;
 	  }
-	  CLHEP::HepRotation rotX;
-	  rotX.set(CLHEP::HepRotationX(sign*t->angleTilt));
-	  CLHEP::Hep3Vector vtransWS;
-	  vtransWS.set(0.,
-                       t->offsetWireSupport[iSenLyr] + t->distanceWireSupport*isup
-                       + lengthActive/2.*tan(sign*t->angleTilt),
-                       0.);
+	  GeoTrf::RotateX3D rotX(sign*t->angleTilt);
+	  GeoTrf::Translate3D vtransWS(0.,
+				       t->offsetWireSupport[iSenLyr] + t->distanceWireSupport*isup + lengthActive/2.*tan(sign*t->angleTilt),
+				       0.);
 
-          sGasVolume = &(sGasVolume->subtract((*strdsup) << HepGeom::Transform3D(rotX,vtransWS)));
+          sGasVolume = &(sGasVolume->subtract((*strdsup) << GeoTrf::Transform3D(vtransWS*rotX)));
 
 	  // place button supports
           int izmin, izmax;
@@ -192,14 +188,12 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
                 GeoTrd* strdsupex = new GeoTrd(t->tck[i]/2, t->tck[i]/2,
                                                t->widthWireSupport/2,
                                                t->widthWireSupport/2,
-                                               lengthWireSupportEx/2-0.1*CLHEP::mm);
-                CLHEP::Hep3Vector vtrans;
-                vtrans.set(0.,
-			       t->offsetWireSupport[iSenLyr]+t->distanceWireSupport*isupy
-			       + lengthActive/2.*tan(sign*t->angleTilt),
-			       (lengthActive-lengthWireSupportEx)/2.);
-
-                sGasVolume = &(sGasVolume->subtract((*strdsupex) << HepGeom::Transform3D(rotX,vtrans)));
+                                               lengthWireSupportEx/2-0.1*GeoModelKernelUnits::mm);
+                GeoTrf::Translate3D vtrans(0.,
+					   t->offsetWireSupport[iSenLyr]+t->distanceWireSupport*isupy + lengthActive/2.*tan(sign*t->angleTilt),
+					   (lengthActive-lengthWireSupportEx)/2.);
+
+                sGasVolume = &(sGasVolume->subtract((*strdsupex) << GeoTrf::Transform3D(vtrans * rotX)));
               }
             } // End special case for TGC01, 06, 12
 
@@ -208,7 +202,7 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
 	  			 + t->offsetWireSupport[iSenLyr]
 				       +lengthActive*tan( t->angleTilt))
 		                      -(-widthActive/2.);
-            if (widthLeftTrd > 8.*CLHEP::cm) {
+            if (widthLeftTrd > 8.*GeoModelKernelUnits::cm) {
               double yLongBase;
               if ((name == "TGC01" || name == "TGC06" || name == "TGC12") &&
 	   	      t->distanceWireSupport*(iymin-1)+t->offsetWireSupport[iSenLyr]
@@ -236,7 +230,7 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
 					+t->offsetWireSupport[iSenLyr]
 					+lengthActive*tan(-t->angleTilt));
 	      
-            if (widthRightTrd > 8.*CLHEP::cm) {
+            if (widthRightTrd > 8.*GeoModelKernelUnits::cm) {
               double yLongBase;
               if ((name == "TGC01" || name == "TGC06" || name == "TGC12") &&
 		      t->distanceWireSupport*(iymax+1)+t->offsetWireSupport[iSenLyr]
@@ -269,10 +263,9 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
               totNBS += nBS;
               double yposleft = yposCentre[iBS] - t->pitchButton[0]/2.
                      + (lengthActive/2.-t->pitchButton[1]/2.*isupz)*tan(angleTiltButton[iBS]);
-              CLHEP::Hep3Vector vtransBS;
-              vtransBS.set(0., yposleft + t->pitchButton[0]*std::abs(isupz%2),
-                           t->pitchButton[1]/2.*isupz);
-              sGasVolume = &(sGasVolume->subtract( (*stubesup) << HepGeom::Transform3D(rotY,vtransBS)));
+              GeoTrf::Translate3D vtransBS(0., yposleft + t->pitchButton[0]*std::abs(isupz%2),
+					   t->pitchButton[1]/2.*isupz);
+              sGasVolume = &(sGasVolume->subtract( (*stubesup) << GeoTrf::Transform3D(vtransBS*rotY)));
             }
           }
         } // loop over wire supports
@@ -283,14 +276,14 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
         // makes a gas boundary
         Cutout* cut = 0;
         GeoShape* cutoutShape = 0;
-        HepGeom::Transform3D cutTrans;
+        GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
         for (unsigned i = 0; i < vcutdef.size(); i++) {
           cut = vcutdef[i];
           cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                    cut->widthXs/2. + t->frame_ab/2., 
                                    cut->widthXl/2. + t->frame_ab/2., 
                                    cut->lengthY/2. + t->frame_h/2.);
-          cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+          cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
           sGasVolume = &(sGasVolume->subtract( (*cutoutShape) << cutTrans) );
         }
       }
@@ -299,7 +292,7 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
                                          matManager->getMaterial(t->materials[i]));
       GeoPhysVol* ptrdtmp = new GeoPhysVol(ltrdtmp);
       GeoNameTag* ntrdtmp = new GeoNameTag(name+t->materials[i]);
-      GeoTransform* ttrdtmp = new GeoTransform(HepGeom::TranslateX3D(newpos + (t->tck[i]/2)));
+      GeoTransform* ttrdtmp = new GeoTransform(GeoTrf::TranslateX3D(newpos + (t->tck[i]/2)));
 
       // Place gas volume inside G10 mother volume so that
       // subtractions from gas volume now become G10
@@ -319,12 +312,12 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
       if (cutoutson && vcutdef.size() > 0) {
         Cutout* cut = 0;
         GeoShape* cutoutShape = 0;
-        HepGeom::Transform3D cutTrans;
+        GeoTrf::Transform3D cutTrans{GeoTrf::Transform3D::Identity()};
         for (unsigned i = 0; i < vcutdef.size(); i++) {
           cut = vcutdef[i];
           cutoutShape = new GeoTrd(thickness/2.+1., thickness/2.+1.,
                                    cut->widthXs/2., cut->widthXl/2., cut->lengthY/2.);
-          cutTrans = HepGeom::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
+          cutTrans = GeoTrf::Translate3D(0.0, cut->dx, -length/2 + cut->dy + cut->lengthY/2.);
           strdtmp = &(strdtmp->subtract( (*cutoutShape) << cutTrans) );
         }
       }
@@ -332,7 +325,7 @@ Tgc::build(int minimalgeo, int cutoutson, std::vector<Cutout*> vcutdef)
                                          matManager->getMaterial(t->materials[i]));
       GeoPhysVol* ptrdtmp = new GeoPhysVol(ltrdtmp);
       GeoNameTag* ntrdtmp = new GeoNameTag(name+t->materials[i]);
-      GeoTransform* ttrdtmp = new GeoTransform(HepGeom::TranslateX3D(newpos+ (t->tck[i]/2)));
+      GeoTransform* ttrdtmp = new GeoTransform(GeoTrf::TranslateX3D(newpos+ (t->tck[i]/2)));
 
       if (!skip_tgc) { 
         ptrd->add(ntrdtmp);
diff --git a/MuonSpectrometer/MuonGeoModel/src/sTGC.cxx b/MuonSpectrometer/MuonGeoModel/src/sTGC.cxx
index d105b6c0f0336a047572cff3123c66ff978a5d8a..e9dd01b9b52b3e68bc82d7848a68dbfd133dccdf 100755
--- a/MuonSpectrometer/MuonGeoModel/src/sTGC.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/sTGC.cxx
@@ -85,12 +85,8 @@ GeoFullPhysVol* sTGC::build(int minimalgeo, int , std::vector<Cutout*> )
 	if (yCutout) solid->addVertex(longWidth/2.,length/2.-yCutout);
 
   //Transform the mother volume to the correct position
-  CLHEP::Hep3Vector v(0,0,0);
-  CLHEP::HepRotation rot;
-  rot.rotateX(M_PI/2.);
-  rot.rotateZ(M_PI/2.);
-  HepGeom::Transform3D transf(rot,v);
-  const GeoShape *strd=new GeoShapeShift(solid,transf);
+  GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(M_PI/2.)*GeoTrf::RotateX3D(M_PI/2.);
+  const GeoShape *strd=new GeoShapeShift(solid,rot);
 									
   logVolName=name;
   if (!(m_component->subType).empty()) logVolName+=("-"+m_component->subType);
@@ -135,16 +131,12 @@ GeoFullPhysVol* sTGC::build(int minimalgeo, int , std::vector<Cutout*> )
 		if (yCutout) sGasVolume->addVertex(longWidthActive/2.,lengthActive/2.-yCutout);
              
     //Transform gas volume
-    CLHEP::Hep3Vector v(0,0,0);
-    CLHEP::HepRotation rot;
-    rot.rotateX(M_PI/2.);
-    rot.rotateZ(M_PI/2.);
-    HepGeom::Transform3D transf(rot,v);
-    const GeoShape *sGasVolume1=new GeoShapeShift(sGasVolume,transf);
+    GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(M_PI/2.)*GeoTrf::RotateX3D(M_PI/2.);
+    const GeoShape *sGasVolume1=new GeoShapeShift(sGasVolume,rot);
     GeoLogVol* ltrdgas = new GeoLogVol("sTGC_Sensitive", sGasVolume1, matManager->getMaterial("muo::TGCGas"));
     GeoPhysVol* ptrdgas = new GeoPhysVol(ltrdgas);
     GeoNameTag* gastag = new GeoNameTag(name+"muo::TGCGas");
-    GeoTransform* chamberpos = new GeoTransform(HepGeom::TranslateX3D(newXPos));
+    GeoTransform* chamberpos = new GeoTransform(GeoTrf::TranslateX3D(newXPos));
 
     //Build two pcb volumes and add them to the gas at -chamberTck/2 and at +chamberTck/2
     for(int i = 0; i < 2; i++){
@@ -161,19 +153,15 @@ GeoFullPhysVol* sTGC::build(int minimalgeo, int , std::vector<Cutout*> )
       if (yCutout) sPcbVolume->addVertex(longWidthActive/2.,lengthActive/2.-yCutout);
 
       //Transform PCB volume
-      CLHEP::Hep3Vector vv(0,0,0);
-      CLHEP::HepRotation rott;
-      rott.rotateX(M_PI/2.);
-      rott.rotateZ(M_PI/2.);
-      HepGeom::Transform3D transff(rott,vv);
-      const GeoShape *sPcbVolume1=new GeoShapeShift(sPcbVolume,transff);
+      GeoTrf::Transform3D rott = GeoTrf::RotateZ3D(M_PI/2.)*GeoTrf::RotateX3D(M_PI/2.);
+      const GeoShape *sPcbVolume1=new GeoShapeShift(sPcbVolume,rott);
 
       const GeoMaterial* mtrdC = matManager->getMaterial("std::G10");
       GeoLogVol* ltrdC = new GeoLogVol(logVolName, sPcbVolume1, mtrdC);
       GeoPhysVol* ptrdPcb = new GeoPhysVol(ltrdC);
       GeoNameTag* ntrdtmpC = new GeoNameTag(name+"std::G10");
 
-      GeoTransform* ttrdtmpC = new GeoTransform(HepGeom::TranslateX3D(pcbpos));
+      GeoTransform* ttrdtmpC = new GeoTransform(GeoTrf::TranslateX3D(pcbpos));
  
 
       // Place pcb volume inside chamber volume
@@ -196,8 +184,7 @@ GeoFullPhysVol* sTGC::build(int minimalgeo, int , std::vector<Cutout*> )
                                     longWidth/2, length/2);
           const GeoShape* trd2 = new GeoTrd(gasTck,gasTck, W-f6,
                                     lW-f6, length/2-(f4+f5)/2.);
-          HepGeom::Transform3D c;
-          c=HepGeom::Translate3D(0,0,(f5-f4)/2.);
+          GeoTrf::Translate3D c(0,0,(f5-f4)/2.);
           trd1= &(trd1->subtract( (*trd2) << c ));
           GeoLogVol* ltrdframe = new GeoLogVol("sTGC_Frame", trd1,
                                          matManager->getMaterial("std::Aluminium"));
@@ -217,7 +204,7 @@ GeoFullPhysVol* sTGC::build(int minimalgeo, int , std::vector<Cutout*> )
 		sGasV->addVertex(W-f6,-lengthActive/2.+f5);
 		sGasV->addVertex(longWidthActive/2.-f6,lengthActive/2.-yCutout);
 	
-	const GeoShape *sGasV1=new GeoShapeShift(sGasV,transf);
+	const GeoShape *sGasV1=new GeoShapeShift(sGasV,rot);
 	
 	const GeoShape* sGasV2=&(sGasVolume1->subtract(*sGasV1));
 	
diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/MuonTGMeasAssocAlg/src/MuonTGMeasAssocAlg.cxx b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/MuonTGMeasAssocAlg/src/MuonTGMeasAssocAlg.cxx
index e41d3bd697a9631b95e8f1beb923f6272ebac8c7..03f62cae69fed6476ea0acbcbf0a41e002275a54 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/MuonTGMeasAssocAlg/src/MuonTGMeasAssocAlg.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/MuonTGMeasAssocAlg/src/MuonTGMeasAssocAlg.cxx
@@ -997,7 +997,7 @@ void Muon::MuonTGMeasAssocAlg::reAlignStations() const
 
   unsigned int moved = 0;
   for ( ;iter!=m_stationMap.end();iter++) {  
-    const Amg::Transform3D transfMS = Amg::CLHEPTransformToEigen(iter->second.first->getGeoTransform()->getTransform());
+    const Amg::Transform3D transfMS = iter->second.first->getGeoTransform()->getTransform();
     const Amg::Transform3D transfTV = iter->second.second->trackingVolume()->transform();
     if ( !transfMS.isApprox(transfTV, 1e-3) ) {
       Amg::Transform3D shift = transfMS*transfTV.inverse();
diff --git a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/CMakeLists.txt b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/CMakeLists.txt
index 69365ab14c1d85973573ccba4916be170667b5d8..d863e754a5a211b9841044cec8315ad777407b07 100644
--- a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/CMakeLists.txt
+++ b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/CMakeLists.txt
@@ -35,12 +35,13 @@ atlas_depends_on_subdirs( PRIVATE
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( HepMC )
+find_package( CLHEP )
 
 # Component(s) in the package:
 atlas_add_component( JetTagD3PDMaker
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                      LINK_LIBRARIES ${Boost_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel AthContainers EventKernel EventPrimitives GaudiKernel GeneratorObjects InDetIdentifier InDetReadoutGeometry D3PDMakerUtils JetTagEvent JetTagInfo MuonIDEvent McParticleEvent JetEvent muonEvent Particle egammaEvent TrkParticleBase VxJetVertex VxSecVertex VxVertex TrkVertexFitterInterfaces )
 
 # Install files from the package:
diff --git a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagTwoTrackVertexFillerTool.cxx b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagTwoTrackVertexFillerTool.cxx
index ebf4b80afe46774d01548dbc1fe1b9e626b55aeb..661d2942566a2a1c52a88f03c24ab93ac1c156ec 100644
--- a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagTwoTrackVertexFillerTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagTwoTrackVertexFillerTool.cxx
@@ -12,7 +12,8 @@
 #include "EventPrimitives/EventPrimitivesHelpers.h"
 
 
-
+#include "CLHEP/Vector/LorentzVector.h"
+#include "CLHEP/Vector/ThreeVector.h"
 using CLHEP::HepLorentzVector;
 using CLHEP::Hep3Vector;
 
diff --git a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagVxOnJetAxisTrackAssociationTool.cxx b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagVxOnJetAxisTrackAssociationTool.cxx
index fc7c29be7d75dd5c67c324515e54b460c11ec186..ef0b2de108dc609fda0c55845196e64f953fd802 100644
--- a/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagVxOnJetAxisTrackAssociationTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/JetTagD3PDMaker/src/JetTagVxOnJetAxisTrackAssociationTool.cxx
@@ -11,8 +11,7 @@
 #include "Particle/TrackParticle.h"
 #include "TrkParticleBase/LinkToTrackParticleBase.h"
 
-
-using HepGeom::Vector3D;
+#include "CLHEP/Vector/ThreeVector.h"
 using CLHEP::Hep3Vector;
 
 
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/CMakeLists.txt b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/CMakeLists.txt
index daf696c5358958aeed120cc58aa54597ef035c7a..a9f5b7960c920be566f7c693e19dc97bcb870aed 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/CMakeLists.txt
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/CMakeLists.txt
@@ -18,6 +18,7 @@ atlas_depends_on_subdirs( PRIVATE
                           DetectorDescription/GeoModel/GeoModelInterfaces
                           DetectorDescription/GeoModel/GeoModelUtilities
                           DetectorDescription/Identifier
+			  DetectorDescription/GeoPrimitives
                           Event/EventInfo
                           Event/xAOD/xAODCaloEvent
                           Event/xAOD/xAODEventInfo
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.cxx
index c0c6a7068fa03a8cae3ea4f12e0d4658d3e717d7..dccaae84fa78a8fdb415a4db073322f9f07baf6e 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.cxx
@@ -11,6 +11,7 @@
  */
 
 // INCLUDE HEADER
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileCellFillerTool.h"
 
 // xAOD tools
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.h b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.h
index 4617a812f5932082dc6c956baa60854e8170b5b4..3c4e1b865f41d8e6aab9fea774b9f9f3318d870b 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.h
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCellFillerTool.h
@@ -20,6 +20,8 @@
 #ifndef TILEMUONCALOD3PDMAKER_CELLFILLERTOOL_H
 #define TILEMUONCALOD3PDMAKER_CELLFILLERTOOL_H
 
+#include "GeoPrimitives/GeoPrimitives.h"
+
 /// D3PD INCLUDES
 #include "D3PDMakerUtils/BlockFillerTool.h"
 
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFillerTool.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFillerTool.cxx
index 0211bcf1481e654e65c987ebb70cae61002d3479..09821d43d08ed0e840bed3adb9beb83c0a7df221 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFillerTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFillerTool.cxx
@@ -10,6 +10,7 @@
  */
 
 // INCLUDE HEADER FILE
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileClusterFillerTool.h"
 
 using namespace D3PD;
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFilterAlg.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFilterAlg.cxx
index 4e2df09da6f2599f328e406c8d27b5d4c400e8fa..7fce1fc645e68fbd50af3b4ef44fed318c124209 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFilterAlg.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileClusterFilterAlg.cxx
@@ -7,6 +7,7 @@
  * Author: Carlos.Solans@cern.ch
  */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileClusterFilterAlg.h"
 
 TileClusterFilterAlg::TileClusterFilterAlg( const std::string& name, ISvcLocator* pSvcLocator ): 
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCosmicMuonFilterAlg.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCosmicMuonFilterAlg.cxx
index 0ae775ed6b176cddaf86c6f746f21958972b6810..36ee9db3e21e1a1387a612dea909800ef4c87eec 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCosmicMuonFilterAlg.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileCosmicMuonFilterAlg.cxx
@@ -8,6 +8,7 @@
  * Author: Archil.Durglishvili@cern.ch
  */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileCosmicMuonFilterAlg.h"
 #include "CaloGeoHelpers/CaloSampling.h" 
 #include "AthContainers/ConstDataVector.h"
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileEopFilterAlg.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileEopFilterAlg.cxx
index a41a2a0f18fc78c7863e979c7f97aa9833484613..e795cf2676a672a3afdca311f7321b9650a30033 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileEopFilterAlg.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileEopFilterAlg.cxx
@@ -7,6 +7,7 @@
  * Author: Carlos.Solans@cern.ch
  */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileEopFilterAlg.h"
 #include "CaloGeoHelpers/CaloSampling.h"
 #include "AthContainers/ConstDataVector.h"
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFillerTool.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFillerTool.cxx
index d9dde1d7f49edf03050ed88e5a3f2a7c02ae3a74..c4d4952895fd64c55762e50fb2fa9efd054a15b9 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFillerTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFillerTool.cxx
@@ -12,6 +12,7 @@
  */
 
 // INCLUDE HEADER FILE
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileMuonFillerTool.h"
 
 // CALORIMETER INCLUDES
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFilterAlg.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFilterAlg.cxx
index 8b2011515a2edeaf6b43d78518cd15a8a11cf52e..3c5fcf91e2e49e7af2d17f0b037bffb937ebee57 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFilterAlg.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileMuonFilterAlg.cxx
@@ -8,6 +8,7 @@
  * Author: Archil.Durglishvili@cern.ch
  */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileMuonFilterAlg.h"
 #include "CaloGeoHelpers/CaloSampling.h" 
 #include "AthContainers/ConstDataVector.h"
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFillerTool.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFillerTool.cxx
index 6dd03a08463212514df1501e9c063f2eeeda99b0..64deebb2cb3ee823920ac65d7793b6b49e947b29 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFillerTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFillerTool.cxx
@@ -10,6 +10,7 @@
  */
 
 // INCLUDE HEADER FILE
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileTrackFillerTool.h"
 
 //xAOD tools
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFilterAlg.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFilterAlg.cxx
index 5cd4424ccbd308a32b7826f71c8885ac1a7c0dae..d0ae019d4370f034258d1107879a8cb7f21fbe88 100644
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFilterAlg.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TileTrackFilterAlg.cxx
@@ -10,6 +10,7 @@
  */
 
 // INCLUDE HEADER
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TileTrackFilterAlg.h"
 
 //===============================================================================================
diff --git a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TrackTools.cxx b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TrackTools.cxx
index 1c0591fd1a2aa5da4368d2a63b43a532008accf9..2ea25a322d419f865a4d1e75026a3e2ee8c096bd 100755
--- a/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TrackTools.cxx
+++ b/PhysicsAnalysis/D3PDMaker/TileD3PDMaker/src/TrackTools.cxx
@@ -10,6 +10,7 @@
  * Created in February 2013.
  * Updated in November 2014
  */
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TrackTools.h"
 
 //=============================================
diff --git a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/PhotonTruthTool.cxx b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/PhotonTruthTool.cxx
index 7e017c2bc7b2275615f85ec248c760feb586601f..4911f172afa5b38ee58d9577e25b4fdc03036d75 100644
--- a/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/PhotonTruthTool.cxx
+++ b/PhysicsAnalysis/D3PDMaker/egammaD3PDAnalysis/src/PhotonTruthTool.cxx
@@ -17,10 +17,6 @@
 #include <vector>
 #include <cmath>
 
-
-using HepGeom::Point3D;
-
-
 namespace D3PD {
 
 
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
index 15dc4f127705854d03512d0f6658d8c8871a46a8..a7a6021694672f01e02894b7c7aeaed6b42d94d1 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools/src/EgammaTagTool.cxx
@@ -13,6 +13,7 @@ Purpose : create a collection of EgammaTag
 
 #include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/Property.h"
+#include "GaudiKernel/SystemOfUnits.h"
 #include "ElectronPhotonTagTools/EgammaTagTool.h"
 #include "TagEvent/EgammaAttributeNames.h"
 #include "xAODEgamma/EgammaContainer.h"
@@ -31,15 +32,15 @@ EgammaTagTool::EgammaTagTool (const std::string& type, const std::string& name,
   declareProperty("ElectronContainer", m_electronContainer = "ElectronCollection");
   declareProperty("PhotonContainer",   m_photonContainer   = "PhotonCollection");
   /** selection cut of Pt */
-  declareProperty("ElectronPtCut",     m_electronPtCut = 20.0*CLHEP::GeV);
-  declareProperty("PhotonPtCut",       m_photonPtCut   = 10.0*CLHEP::GeV);
+  declareProperty("ElectronPtCut",     m_electronPtCut = 20.0*Gaudi::Units::GeV);
+  declareProperty("PhotonPtCut",       m_photonPtCut   = 10.0*Gaudi::Units::GeV);
   /** mass cut for Z */
-  declareProperty("MassZLow",          m_massZLow   = 45.*CLHEP::GeV );
-  declareProperty("MassZHigh",         m_massZHigh  = 180.*CLHEP::GeV);
+  declareProperty("MassZLow",          m_massZLow   = 45.*Gaudi::Units::GeV );
+  declareProperty("MassZHigh",         m_massZHigh  = 180.*Gaudi::Units::GeV);
   /** missing Et cut */
   declareProperty("MissingEtObject",   m_missingEtObject = "MET_RefFinal");
-  declareProperty("MissingEtCut",      m_missingEtCut    = 25.*CLHEP::GeV );
-  declareProperty("WElectronPtCut",    m_welectronPtCut  = 15.*CLHEP::GeV );
+  declareProperty("MissingEtCut",      m_missingEtCut    = 25.*Gaudi::Units::GeV );
+  declareProperty("WElectronPtCut",    m_welectronPtCut  = 15.*Gaudi::Units::GeV );
   declareProperty("MissingEtTerm",     m_missingEtTerm   = "Final");
 
   declareInterface<EgammaTagTool>( this );
diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
index 1003047e27defdd1ad520bfb8bf835a9aa0c797b..fb678a5f084369ebaa925dd566f066ce42e1fb79 100755
--- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
@@ -30,6 +30,8 @@
 #include "LWHists/TH1F_LW.h"
 #include "LWHists/TH2F_LW.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 #include "TH1F.h"
 #include "TH2F.h"
 #include "TMath.h"
@@ -781,13 +783,13 @@ bool JetTagMonitoring::passKinematicCuts(const xAOD::Jet *jet) {
   //* get jet basic kinematics *//
   m_jet_eta->Fill(jet->eta());
   m_jet_phi->Fill(jet->phi());
-  m_jet_et->Fill(jet->pt() / CLHEP::GeV);
+  m_jet_et->Fill(jet->pt() / Gaudi::Units::GeV);
 
-  ATH_MSG_DEBUG("Jet kinematics: eta = " << jet->eta() << ", phi= " << jet->phi() << ", pT= " << jet->pt() / CLHEP::GeV);
+  ATH_MSG_DEBUG("Jet kinematics: eta = " << jet->eta() << ", phi= " << jet->phi() << ", pT= " << jet->pt() / Gaudi::Units::GeV);
 
 
   // kinematic cuts defined as properties
-  if ( jet->pt()  / CLHEP::GeV < m_jet_pt_cut || fabs(jet->eta()) > m_jet_eta_cut )
+  if ( jet->pt()  / Gaudi::Units::GeV < m_jet_pt_cut || fabs(jet->eta()) > m_jet_eta_cut )
     return false;
 
   return true;
@@ -905,7 +907,7 @@ bool JetTagMonitoring::isTopEvent() { // added by SARA for 2017 data taking
   for ( ; electronItr != electronEnd; electronItr++) {
     //select electrons which passed author and pT cut
     if (!(*electronItr)->author(xAOD::EgammaParameters::AuthorElectron)) continue; 
-    if ((*electronItr) -> pt() / CLHEP::GeV < m_ElectronPtCut) continue;
+    if ((*electronItr) -> pt() / Gaudi::Units::GeV < m_ElectronPtCut) continue;
     bool inAcceptance = (TMath::Abs((*electronItr) -> eta()) > m_ElectronEtaCrackHighCut || TMath::Abs((*electronItr) -> eta()) < m_ElectronEtaCrackLowCut) 
       && TMath::Abs((*electronItr) -> eta()) < m_ElectronEtaCut;
     if (!inAcceptance) continue;
@@ -931,7 +933,7 @@ bool JetTagMonitoring::isTopEvent() { // added by SARA for 2017 data taking
   int n_isoMuons = 0;
   for ( ; muonItr != muonEnd; muonItr++) {
     //select muons which passed pT cut
-    if ((*muonItr) -> pt() / CLHEP::GeV < m_MuonPtCut) continue;
+    if ((*muonItr) -> pt() / Gaudi::Units::GeV < m_MuonPtCut) continue;
     bool inAcceptance = TMath::Abs((*muonItr) -> eta()) < m_MuonEtaCut;
     if (!inAcceptance) continue;
     // medium muons
@@ -1110,10 +1112,10 @@ void JetTagMonitoring::fillJetHistograms() {
 
     if (is_top_event && n_jets_kinematic >= 2) { // added by SARA - I have at least 2 kinematic jets, so want to fill top histograms
       m_jet_top->Fill(0., 1.); // added by SARA
-      m_jet_pt_top->Fill((*jetItr)->pt() / CLHEP::GeV, 1.); // added by SARA
+      m_jet_pt_top->Fill((*jetItr)->pt() / Gaudi::Units::GeV, 1.); // added by SARA
       if (n_jets_kinematic == 2) { // added by SARA - now I know I have (at least) two kinematic jets, so I want to fill also for 1st kinematic jet
 	m_jet_top->Fill(0., 1.); // added by SARA
-	m_jet_pt_top->Fill((*firstKinematicjetItr)->pt() / CLHEP::GeV, 1.); // added by SARA
+	m_jet_pt_top->Fill((*firstKinematicjetItr)->pt() / Gaudi::Units::GeV, 1.); // added by SARA
       }
     }
 
@@ -1178,7 +1180,7 @@ void JetTagMonitoring::fillTrackInJetHistograms(const xAOD::Jet *jet) {
     uint8_t nPixHits    = 0;
     uint8_t nSCTHits    = 0;
 
-    m_jet_tracks_pt->Fill(trackPart->pt() / CLHEP::GeV);
+    m_jet_tracks_pt->Fill(trackPart->pt() / Gaudi::Units::GeV);
     m_jet_tracks_eta->Fill(trackPart->eta());
     m_jet_tracks_phi->Fill(trackPart->phi());
     m_jet_tracks_d0->Fill(trackPart->d0());
@@ -1214,7 +1216,7 @@ void JetTagMonitoring::fillBtagHistograms(const xAOD::Jet *jet, bool fill_top_hi
     m_jet_mv_w_top->Fill(mv); // added by SARA
     if (mv > m_mv_70_weight_cut) {
       m_jet_top_tagged->Fill(0., 1.); // added by SARA
-      m_jet_pt_top_tagged->Fill(jet->pt() / CLHEP::GeV, 1.); // added by SARA
+      m_jet_pt_top_tagged->Fill(jet->pt() / Gaudi::Units::GeV, 1.); // added by SARA
     }
   }
   else { // added by SARA - fill non-top histograms
@@ -1400,17 +1402,17 @@ void JetTagMonitoring::fillGoodJetHistos(const xAOD::Jet *jet) {
   m_tag_mv_w->Fill(mv);   
   m_tag_mv_w_LS->Fill(mv);   
 
-  if      ( jet->pt() / CLHEP::GeV > 200. ) m_tag_mv_w_pT200->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV > 100. ) m_tag_mv_w_pT100_200->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  50. ) m_tag_mv_w_pT50_100->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  20. ) m_tag_mv_w_pT20_50->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  10. ) m_tag_mv_w_pT10_20->Fill(mv);   
+  if      ( jet->pt() / Gaudi::Units::GeV > 200. ) m_tag_mv_w_pT200->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV > 100. ) m_tag_mv_w_pT100_200->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  50. ) m_tag_mv_w_pT50_100->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  20. ) m_tag_mv_w_pT20_50->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  10. ) m_tag_mv_w_pT10_20->Fill(mv);   
 
-  if      ( jet->pt() / CLHEP::GeV > 200. ) m_tag_mv_w_pT200_LS->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV > 100. ) m_tag_mv_w_pT100_200_LS->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  50. ) m_tag_mv_w_pT50_100_LS->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  20. ) m_tag_mv_w_pT20_50_LS->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  10. ) m_tag_mv_w_pT10_20_LS->Fill(mv);   
+  if      ( jet->pt() / Gaudi::Units::GeV > 200. ) m_tag_mv_w_pT200_LS->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV > 100. ) m_tag_mv_w_pT100_200_LS->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  50. ) m_tag_mv_w_pT50_100_LS->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  20. ) m_tag_mv_w_pT20_50_LS->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  10. ) m_tag_mv_w_pT10_20_LS->Fill(mv);   
 
 
   if      ( fabs(jet->eta()) > 2.0 ) m_tag_mv_w_eta20_25->Fill(mv);   
@@ -1475,7 +1477,7 @@ bool JetTagMonitoring::passJetQualityCuts(const xAOD::Jet *jet){
  	
   if ( 
       !(
-	(hecf>0.5 && fabs(hecq)>0.5) || (fabs(negE) > 60*CLHEP::GeV) ||
+	(hecf>0.5 && fabs(hecq)>0.5) || (fabs(negE) > 60*Gaudi::Units::GeV) ||
 	(emf>0.95 && fabs(jetQuality)>0.8 && fabs(jet->eta()) < 2.8) || 
 	//(n90<=5 && hecf>0.8) || (hecf>0.5 && fabs(jetQuality)>0.5) || (emf<0.05) ||
 	(fabs(jetTime)>25) ||
@@ -1508,11 +1510,11 @@ void JetTagMonitoring::fillSuspectJetHistos(const xAOD::Jet *jet) {
   m_tag_sv1ip3d_w_sj->Fill(sv1ip3d);
   m_tag_mv_w_sj->Fill(mv);   
 
-  if      ( jet->pt() / CLHEP::GeV > 200. ) m_tag_mv_w_sj_pT200->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV > 100. ) m_tag_mv_w_sj_pT100_200->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  50. ) m_tag_mv_w_sj_pT50_100->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  20. ) m_tag_mv_w_sj_pT20_50->Fill(mv);   
-  else if ( jet->pt() / CLHEP::GeV >  10. ) m_tag_mv_w_sj_pT10_20->Fill(mv);     
+  if      ( jet->pt() / Gaudi::Units::GeV > 200. ) m_tag_mv_w_sj_pT200->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV > 100. ) m_tag_mv_w_sj_pT100_200->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  50. ) m_tag_mv_w_sj_pT50_100->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  20. ) m_tag_mv_w_sj_pT20_50->Fill(mv);   
+  else if ( jet->pt() / Gaudi::Units::GeV >  10. ) m_tag_mv_w_sj_pT10_20->Fill(mv);     
 
   if      ( fabs(jet->eta()) > 2.0 ) m_tag_mv_w_sj_eta20_25->Fill(mv);   
   else if ( fabs(jet->eta()) > 1.5 ) m_tag_mv_w_sj_eta15_20->Fill(mv);   
diff --git a/Projects/AnalysisBase/externals.txt b/Projects/AnalysisBase/externals.txt
index d3a941f4fcb1762a71087477a84ee89918254981..7d68682b44ec151285c13c06dee5823e3a290bc2 100644
--- a/Projects/AnalysisBase/externals.txt
+++ b/Projects/AnalysisBase/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AnalysisBaseExternalsVersion = 2.0.15.1
+AnalysisBaseExternalsVersion = 2.0.17
diff --git a/Projects/AnalysisTop/externals.txt b/Projects/AnalysisTop/externals.txt
index 5d627a3ad9f4ab1afef237153123538c9dd9cd99..8dae2256cecb0081e9b22e07dbe8c45e6b38e11c 100644
--- a/Projects/AnalysisTop/externals.txt
+++ b/Projects/AnalysisTop/externals.txt
@@ -1,4 +1,4 @@
 # Versions of the various externals to build before starting the build of
 # this project, when doing a full stack nightly build.
 
-AnalysisBaseExternalsVersion = 2.0.15.1
+AnalysisBaseExternalsVersion = 2.0.17
diff --git a/Projects/AthDataQuality/externals.txt b/Projects/AthDataQuality/externals.txt
index dd2d05d250dcc9af4adaa02c85f4e3ffa7005824..ccb4bdedc50bfb08d9b72f7b69c660dbdc086f24 100644
--- a/Projects/AthDataQuality/externals.txt
+++ b/Projects/AthDataQuality/externals.txt
@@ -5,4 +5,4 @@
 # an "origin/" prefix before it. For tags however this is explicitly
 # forbidden.
 
-AtlasExternalsVersion = 2.0.15.1
+AtlasExternalsVersion = 2.0.17
diff --git a/Projects/AthSimulation/externals.txt b/Projects/AthSimulation/externals.txt
index f5bcaa4b2550bb5aa4e4bbb3ec69e987115471a4..f3b864223fb8f426c611f1b766000330c60a2108 100644
--- a/Projects/AthSimulation/externals.txt
+++ b/Projects/AthSimulation/externals.txt
@@ -6,7 +6,7 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthSimulationExternalsVersion = 2.0.15.1
+AthSimulationExternalsVersion = 2.0.17
 
 # The version of atlas/Gaudi to use:
 GaudiVersion = v31r0.000
diff --git a/Projects/Athena/externals.txt b/Projects/Athena/externals.txt
index 8c7b973bd3afedd92eb762f71f0299e57c4fa70e..53d70f431462892e2ede812af85cf0ed8ce69eb5 100644
--- a/Projects/Athena/externals.txt
+++ b/Projects/Athena/externals.txt
@@ -6,7 +6,7 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthenaExternalsVersion = 2.0.15.1
+AthenaExternalsVersion = 2.0.17
 
 # The version of atlas/Gaudi to use: 
 GaudiVersion = v31r0.000
diff --git a/Reconstruction/MuonIdentification/CaloTrkMuIdTools/src/TrackDepositInCaloTool.cxx b/Reconstruction/MuonIdentification/CaloTrkMuIdTools/src/TrackDepositInCaloTool.cxx
index 66207b4c8315dd5648e3d20a122b7ea035b4d9d3..94f8f33d00cfb7d6b3615ddcfcc8ac34de0949d9 100755
--- a/Reconstruction/MuonIdentification/CaloTrkMuIdTools/src/TrackDepositInCaloTool.cxx
+++ b/Reconstruction/MuonIdentification/CaloTrkMuIdTools/src/TrackDepositInCaloTool.cxx
@@ -33,6 +33,8 @@
 #include "TH1F.h"
 #include "TH2F.h"
 
+#include "CLHEP/Units/SystemOfUnits.h"
+
 ///////////////////////////////////////////////////////////////////////////////
 // Constructor
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx
index cc4cedfd1b8d48d7b47fdf9563fa6eb479a82f0d..69ac978678f8bdfa456df0ecb672928a94de7dbf 100755
--- a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx
+++ b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx
@@ -525,7 +525,7 @@ MuidCaloEnergyTool::measurement(double		trackMomentum,
     const double EmIso	= caloMeas->LArEM_Isolation();
 
     const double Theta	= 2.*atan(exp(-eta));
-    const double pT	= trackMomentum*sin(Theta)*CLHEP::MeV;
+    const double pT	= trackMomentum*sin(Theta)*Units::MeV;
     const double EmCut	= m_emMinEnergy + (3.-2.)/(100.-15.)*(pT/Units::GeV-15.)*Units::GeV;
     const double HECCut	= m_hecMinEnergy;
     const double pTCut	= m_minMuonPt;
diff --git a/Reconstruction/MuonIdentification/MuonCombinedEvaluationTools/src/MuonMomentumBalanceSignificanceTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedEvaluationTools/src/MuonMomentumBalanceSignificanceTool.cxx
index b26498a2cec3cad68de3ca6e909b7ffa875830e3..a955d201f957e2a9f5cb02f56a3f3a95cda41249 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedEvaluationTools/src/MuonMomentumBalanceSignificanceTool.cxx
+++ b/Reconstruction/MuonIdentification/MuonCombinedEvaluationTools/src/MuonMomentumBalanceSignificanceTool.cxx
@@ -17,10 +17,11 @@
 #include "TrkTrack/Track.h"
 #include "TrkTrack/TrackStateOnSurface.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
+#include "GaudiKernel/SystemOfUnits.h"
 //#include "TrkGeometry/TrackingVolume.h"
 //#include "TrkDetDescrInterfaces/ITrackingVolumesSvc.h"
 
-using CLHEP::GeV;
+using Gaudi::Units::GeV;
 
 namespace Rec
 {
diff --git a/Reconstruction/RecoTools/TrackToCalo/src/MuonCaloEnergyTool.cxx b/Reconstruction/RecoTools/TrackToCalo/src/MuonCaloEnergyTool.cxx
index ad930bb86b9e8a1dbe8db020d7ee6297aea2819c..493367ce8c3575b22c1f12e432145c210c63dcaf 100644
--- a/Reconstruction/RecoTools/TrackToCalo/src/MuonCaloEnergyTool.cxx
+++ b/Reconstruction/RecoTools/TrackToCalo/src/MuonCaloEnergyTool.cxx
@@ -17,6 +17,8 @@
 
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/TrackingPrimitives.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
 #include <math.h>
 
 namespace Rec {
@@ -28,7 +30,7 @@ namespace Rec {
     m_particleCreator("Trk::TrackParticleCreatorTool/MuonCaloParticleCreator"),
     m_caloNoiseTool("CaloNoiseToolDefault"),
     m_sigmasAboveNoise(4.),
-    m_emEtCut(2.5*CLHEP::GeV),
+    m_emEtCut(2.5*Gaudi::Units::GeV),
     m_emF1Cut(0.15),
     m_emipEM(0.42), // 0.42
     m_emipTile(0.86), // 0.86
diff --git a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
index 90fa7d47e6fe768f8b9d8983bc18e50aac89ee50..b432633df7da185e711c27d4165f8b91084b1107 100644
--- a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
+++ b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
@@ -23,6 +23,7 @@
 
 // Gaudi
 #include "GaudiKernel/ITHistSvc.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 // Root
 #include "TTree.h"
@@ -31,7 +32,7 @@
 
 #include <vector>
 
-using CLHEP::GeV;
+using Gaudi::Units::GeV;
 
 CalibrationNtupleMakerTool::CalibrationNtupleMakerTool(const std::string& name, ISvcLocator* pSvcLocator) :
   AthAlgorithm(name, pSvcLocator),
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaBuilder.h b/Reconstruction/egamma/egammaAlgs/src/egammaBuilder.h
index f9611b9a039b92e8c465eaa32cd94b5cd375048a..9afb5d5a9217802dae50d9cd47b349cb0624a306 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaBuilder.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaBuilder.h
@@ -48,6 +48,8 @@
 #include "egammaInterfaces/IEMTrackMatchBuilder.h"
 #include "egammaInterfaces/IEMConversionBuilder.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 class egammaRec;
 
 class egammaBuilder : public AthAlgorithm
@@ -179,7 +181,7 @@ class egammaBuilder : public AthAlgorithm
   //
   /** @brief Discard clusters with energy less than this after corrections. */
   Gaudi::Property<float> m_clusterEnergyCut {this, 
-      "clusterEnergyCut", 10 * CLHEP::MeV,
+      "clusterEnergyCut", 10 * Gaudi::Units::MeV,
       "Discard clusters with energies below this after corrections"};
   
   // @brief Minimum deltaEta to check if clusters overlap
@@ -191,11 +193,11 @@ class egammaBuilder : public AthAlgorithm
       "Minimum deltaPhi to check if clusters overlap"};
   
   // @brief Minimum transverse energy to accept topo-seeded clusters
-  Gaudi::Property<float> m_minEtTopo {this, "minEtTopo", 1.5 * CLHEP::GeV,
+  Gaudi::Property<float> m_minEtTopo {this, "minEtTopo", 1.5 * Gaudi::Units::GeV,
       "Minimum transverse energy to accept topo-seeded clusters"};
 
   // @brief Maximum transverse energy to accept topo-seeded clusters
-  Gaudi::Property<float> m_maxEtTopo {this, "maxEtTopo", 8 * CLHEP::GeV,
+  Gaudi::Property<float> m_maxEtTopo {this, "maxEtTopo", 8 * Gaudi::Units::GeV,
       "Maximum transverse energy to accept topo-seeded clusters"};
   
   // others:
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaForwardBuilder.h b/Reconstruction/egamma/egammaAlgs/src/egammaForwardBuilder.h
index 9af4efff34b8ecca4fca849e374789b11d099dae..80bbccbaf1c5373db9b83c337d61bc8e5186a417 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaForwardBuilder.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaForwardBuilder.h
@@ -43,6 +43,8 @@
 #include "egammaInterfaces/IEMFourMomBuilder.h"
 #include "EgammaAnalysisInterfaces/IAsgForwardElectronIsEMSelector.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 #include <string>
 
 class egammaForwardBuilder : public AthReentrantAlgorithm
@@ -95,7 +97,7 @@ class egammaForwardBuilder : public AthReentrantAlgorithm
   SG::WriteHandleKey<CaloClusterCellLinkContainer> m_outClusterContainerCellLinkKey;
 
   /** @brief  ET cut */
-  Gaudi::Property<double> m_ETcut {this, "EtCut", 5.*CLHEP::GeV, "ET cut"};
+  Gaudi::Property<double> m_ETcut {this, "EtCut", 5.*Gaudi::Units::GeV, "ET cut"};
 
   /** @brief eta cut */
   Gaudi::Property<double> m_etacut {this, "EtaCut", 2.5, "eta cut"};
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaRecBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/egammaRecBuilder.cxx
index 0b86124a21d772c9ba36cc1326a15577b43906a0..fbb5cd22ee606d6e140980d1d17295991823a8b6 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaRecBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaRecBuilder.cxx
@@ -25,9 +25,6 @@
 #include <algorithm> 
 #include <cmath>
 
-using CLHEP::MeV;
-using CLHEP::GeV;
-
 egammaRecBuilder::egammaRecBuilder(const std::string& name, 
 				   ISvcLocator* pSvcLocator): 
   AthAlgorithm(name, pSvcLocator),
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.cxx
index 27583796e4c0a42524097d89adea4fc8e326d6dd..4de501fad70c8458a080c4c4058503aa648acdef 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.cxx
@@ -23,8 +23,6 @@
 
 #include <vector>
 
-using CLHEP::GeV;
-
 namespace {
   /**
    * Duplicate code 
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.h b/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.h
index 4261b3ae00f8578dbe99b36c21d11758182e42d3..2fc404678df32df87fdc6383c55ddc6626960072 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaSuperClusterBuilder.h
@@ -8,6 +8,7 @@
 
 // INCLUDE HEADER FILES:
 #include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/SystemOfUnits.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
 
 //Fwd declarations
@@ -47,7 +48,7 @@ protected:
 
   /** @brief Seed selection requirements */
   Gaudi::Property<float> m_EtThresholdCut {this,
-      "EtThresholdCut", 1.5*CLHEP::GeV,
+      "EtThresholdCut", 1.5*Gaudi::Units::GeV,
       "The minimum EM Et required of SEED clusters (not applied to secondaries)"};
 
   // these are calculated search window values
diff --git a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
index 390aa1e4f487d4ba86abe303d93d0ab2c878dbc9..0085e48572bc1ac85fb22634a647bc27e43cac43 100644
--- a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
@@ -22,8 +22,6 @@
 
 #include <memory>
 
-using CLHEP::GeV;
-
 //////////////////////////////////////////////////////////////////////////////
 //Athena interfaces.
 //////////////////////////////////////////////////////////////////////////////
diff --git a/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
index e2479e8785c1d654843a1926e3fb9f2f93ad0f91..419a6fda55dbb4fd931a457958888e66bed8459f 100644
--- a/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
@@ -22,8 +22,6 @@
 //
 #include <vector>
 
-using CLHEP::GeV;
-
 //////////////////////////////////////////////////////////////////////////////
 //Athena interfaces.
 //////////////////////////////////////////////////////////////////////////////
diff --git a/Reconstruction/egamma/egammaEvent/src/EMConvert.cxx b/Reconstruction/egamma/egammaEvent/src/EMConvert.cxx
index ca6ecece0b147c28b771aacafe1a8999729ab826..cd282cb1bc9dda6983c10e135f47e59ca6bf5dcd 100755
--- a/Reconstruction/egamma/egammaEvent/src/EMConvert.cxx
+++ b/Reconstruction/egamma/egammaEvent/src/EMConvert.cxx
@@ -33,7 +33,7 @@ UPDATED:  Jul 30, 2010 (JM) Add ambiguity result
 #include "AthenaKernel/BaseInfo.h"
 
 
-using CLHEP::Hep3Vector;
+//using CLHEP::Hep3Vector;
 
 
 //  END OF HEADER FILES INCLUDE
diff --git a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVAFunctions.cxx b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVAFunctions.cxx
index 238957c92769ac77641f1dd9a7881e86ecca1d48..e0dc5ba248a85cd65985005f03a0b4715f8a7bfe 100644
--- a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVAFunctions.cxx
+++ b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVAFunctions.cxx
@@ -5,6 +5,13 @@
 
 #include "egammaMVACalib/egammaMVAFunctions.h"
 
+#ifndef XAOD_ANALYSIS
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
+#else
+#define GeV 1000
+#endif
+
 /**
  * These functions are for building the maps of functions
  **/
@@ -73,7 +80,7 @@ namespace egammaMVAFunctions
     funcLibrary["convR"] = [](const xAOD::Egamma* eg, const xAOD::CaloCluster*)->float
       { 
 	auto ph = static_cast<const xAOD::Photon*>(eg);
-	if (compute_ptconv(ph) > 3*CLHEP::GeV) {
+	if (compute_ptconv(ph) > 3*GeV) { 
 	  return xAOD::EgammaHelpers::conversionRadius(ph);
 	} else {
 	  return 799.0;
diff --git a/Reconstruction/egamma/egammaMVACalib/src/egammaMVACalibTool.cxx b/Reconstruction/egamma/egammaMVACalib/src/egammaMVACalibTool.cxx
index 913e682b639ff5c4f9ba1a0ac02ee5be24c3427d..956ec9ac3adc90bc7e6849712bec56fc7f06aaee 100644
--- a/Reconstruction/egamma/egammaMVACalib/src/egammaMVACalibTool.cxx
+++ b/Reconstruction/egamma/egammaMVACalib/src/egammaMVACalibTool.cxx
@@ -11,6 +11,12 @@
 
 #include <cmath>
 
+#ifndef XAOD_ANALYSIS
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
+#else
+#define GeV 1000
+#endif
 
 egammaMVACalibTool::egammaMVACalibTool(const std::string& type, const std::string& name, const IInterface* parent) :
   base_class(type, name, parent)
@@ -209,7 +215,7 @@ float egammaMVACalibTool::getEnergy(const xAOD::CaloCluster& clus,
 			   egammaMVAFunctions::compute_correctedcl_Eacc(clus) :
                            egammaMVAFunctions::compute_rawcl_Eacc(clus));
   
-  const auto energyVarGeV = (initEnergy / std::cosh(clus.eta())) / CLHEP::GeV;
+  const auto energyVarGeV = (initEnergy / std::cosh(clus.eta())) / GeV; 
   const auto etaVar = std::abs(clus.eta());
 
   ATH_MSG_DEBUG("Looking at object with initEnergy = " << initEnergy 
@@ -268,7 +274,7 @@ float egammaMVACalibTool::getEnergy(const xAOD::CaloCluster& clus,
   }
 
   // have to do a shift if here. It's based on the corrected Et in GeV
-  const auto etGeV = (energy / std::cosh(clus.eta())) / CLHEP::GeV;
+  const auto etGeV = (energy / std::cosh(clus.eta())) / GeV; 
 
   // evaluate the TFormula associated with the bin
   const auto shift = m_shifts[bin].Eval(etGeV);
diff --git a/Reconstruction/egamma/egammaPerformance/src/ZeeTaPMonTool.cxx b/Reconstruction/egamma/egammaPerformance/src/ZeeTaPMonTool.cxx
index 10f4a5281afa1c1aa50ae14cc8bf4ed2c78be2ff..8f025246dfa321fd879bc29a44730fc6ad8dfdc7 100755
--- a/Reconstruction/egamma/egammaPerformance/src/ZeeTaPMonTool.cxx
+++ b/Reconstruction/egamma/egammaPerformance/src/ZeeTaPMonTool.cxx
@@ -25,7 +25,8 @@
 #include "xAODEgamma/ElectronContainer.h"
 #include "TH1F.h"
 
-using CLHEP::GeV;
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
 
 ZeeTaPMonTool::ZeeTaPMonTool(const std::string & type, const std::string & name, const IInterface* parent)
   :  egammaMonToolBase(type,name,parent),
diff --git a/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.h b/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.h
index cb93ecac7624eb309fe384c50b41dbf4d3e71893..3f6a5cc5ba454e2f83086bbb97771f75cd0edbae 100644
--- a/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.h
+++ b/Reconstruction/egamma/egammaTools/src/EMConversionBuilder.h
@@ -28,6 +28,7 @@
 // INCLUDE HEADER FILES: 
 #include "GaudiKernel/ToolHandle.h"
 #include "GaudiKernel/EventContext.h"
+#include "GaudiKernel/SystemOfUnits.h"
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "egammaInterfaces/IEMConversionBuilder.h"
 #include "egammaInterfaces/IEMExtrapolationTools.h"
@@ -88,27 +89,27 @@ private:
 
   /** @brief minimum pT for single-track conversion vertices */
   Gaudi::Property<float> m_minPt_singleTrack {this, 
-      "minPt_singleTrack", 0*CLHEP::GeV,
+      "minPt_singleTrack", 0*Gaudi::Units::GeV,
       "minimum pT for single-track conversion vertices"};
 
   /** @brief minimum pT for TRT-only single-track conversion vertices */
   Gaudi::Property<float> m_minPt_singleTRT {this,
-      "minPt_singleTRT", 2*CLHEP::GeV,
+      "minPt_singleTRT", 2*Gaudi::Units::GeV,
       "minimum pT for TRT-only single-track conversion vertices"};
 
   /** @brief minimum pT for each track in TRT-only double-track conversion vertices */  
   Gaudi::Property<float> m_minTRTonlyTrackPt {this,
-      "minTRTonlyTrackPt", 0*CLHEP::GeV,
+      "minTRTonlyTrackPt", 0*Gaudi::Units::GeV,
       "minimum pT for each track in TRT-only double-track conversion vertices"};
 
   /** @brief minimum sum pT for double track conversion vertices */
   Gaudi::Property<float> m_minSumPt_double {this,
-      "minSumPt_double", 0*CLHEP::GeV,
+      "minSumPt_double", 0*Gaudi::Units::GeV,
       "minimum sum pT for double track conversion vertices"};
 
   /** @brief minimum sum pT for double TRT track conversion vertices */
   Gaudi::Property<float> m_minSumPt_doubleTRT {this,
-      "minSumPt_doubleTRT", 2*CLHEP::GeV,
+      "minSumPt_doubleTRT", 2*Gaudi::Units::GeV,
       "minimum sum pT for double TRT track conversion vertices"}; 
 
   /** @brief maximum E/p for single track conversion vertices (E is not calibrated) */
diff --git a/Reconstruction/iPat/iPatGeometryTools/src/LayerNumberAllocator.cxx b/Reconstruction/iPat/iPatGeometryTools/src/LayerNumberAllocator.cxx
index 0d0c880464badec8fac3cd94103449845938a33e..590d8e4cdb56376d10003de0005e5807b3baa21c 100755
--- a/Reconstruction/iPat/iPatGeometryTools/src/LayerNumberAllocator.cxx
+++ b/Reconstruction/iPat/iPatGeometryTools/src/LayerNumberAllocator.cxx
@@ -29,7 +29,7 @@ LayerNumberAllocator::LayerNumberAllocator (const std::string&	type,
 	// pixel layout independent - always start SCT as if 3 preceding layers !
 	m_pixel_layers		(3),
 	m_pixel_sct_boundary	(0.),
-	m_vertex_spread		(112.0*CLHEP::mm)	// TODO: make configurable
+	m_vertex_spread		(112.0*Gaudi::Units::mm)	// TODO: make configurable
 {
     declareInterface<ILayerNumberAllocator>(this);
     declareProperty("LayerAllocator",	m_layerAllocator);
diff --git a/Reconstruction/tauMonitoring/src/tauMonTool.cxx b/Reconstruction/tauMonitoring/src/tauMonTool.cxx
index 89f3eb686ee6a810e1094429034ec5ad499be656..fa1431585dd22a011c1c21a5f740491eb4faa128 100644
--- a/Reconstruction/tauMonitoring/src/tauMonTool.cxx
+++ b/Reconstruction/tauMonitoring/src/tauMonTool.cxx
@@ -15,9 +15,10 @@
 #include "xAODEventInfo/EventInfo.h"
 #include "xAODTracking/TrackParticle.h"
 #include "TrigDecisionTool/TrigDecisionTool.h" 
+#include "GaudiKernel/SystemOfUnits.h"
 
 using xAOD::EventInfo;
-using CLHEP::GeV;
+using Gaudi::Units::GeV;
 
 #define CRACK_MIN 1.3
 #define CRACK_MAX 1.7
diff --git a/Reconstruction/tauRecTools/Root/TauSubstructureVariables.cxx b/Reconstruction/tauRecTools/Root/TauSubstructureVariables.cxx
index cbfce175b1b54578ef9bf537b9b66b3a1af50aae..0d620f4b9433be815b4951edd8e1ae7791fac932 100644
--- a/Reconstruction/tauRecTools/Root/TauSubstructureVariables.cxx
+++ b/Reconstruction/tauRecTools/Root/TauSubstructureVariables.cxx
@@ -29,7 +29,8 @@
 //#include "CaloEvent/CaloVertexedCluster.h"
 
 #ifndef XAOD_ANALYSIS
-using CLHEP::GeV;
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
 #else
 #define GeV 1000
 #endif
diff --git a/Reconstruction/tauRecTools/src/TauCalibrateEM.cxx b/Reconstruction/tauRecTools/src/TauCalibrateEM.cxx
index 34b305bb2373886bfba499d86e7a94c46a63de71..544e438572a2bb3736ff0dd46eb54bff912e7f39 100644
--- a/Reconstruction/tauRecTools/src/TauCalibrateEM.cxx
+++ b/Reconstruction/tauRecTools/src/TauCalibrateEM.cxx
@@ -15,7 +15,8 @@
 #include "tauRecTools/ITauToolBase.h"
 #include "TauCalibrateEM.h"
 
-using CLHEP::GeV;
+#include "GaudiKernel/SystemOfUnits.h"
+using Gaudi::Units::GeV;
 
 //-------------------------------------------------------------------------
 // Constructor
diff --git a/Reconstruction/tauRecTools/src/TauCellVariables.cxx b/Reconstruction/tauRecTools/src/TauCellVariables.cxx
index f6cf367dd5e71f1a0fa5b242d323ad5d24923c1c..7ecf764c2a3143d563b70c95f4adfa40ae6013bb 100644
--- a/Reconstruction/tauRecTools/src/TauCellVariables.cxx
+++ b/Reconstruction/tauRecTools/src/TauCellVariables.cxx
@@ -62,7 +62,7 @@ Jan 2012   - (FF) add cellEnergyRing variables
 #include "tauRecTools/KineUtils.h"
 #include "TauCellVariables.h"
 
-using CLHEP::GeV;
+using Gaudi::Units::GeV;
 
 TauCellVariables::TauCellVariables(const std::string& name) :
   TauRecToolBase(name),
diff --git a/Reconstruction/tauRecTools/src/TauElectronVetoVariables.cxx b/Reconstruction/tauRecTools/src/TauElectronVetoVariables.cxx
index e048895da970276e9136d45ba89205a84b85266c..e51669343a3104a5b1b793c1060b0cf0d783840a 100644
--- a/Reconstruction/tauRecTools/src/TauElectronVetoVariables.cxx
+++ b/Reconstruction/tauRecTools/src/TauElectronVetoVariables.cxx
@@ -33,7 +33,7 @@
 
 //#include "GaudiKernel/ListItem.h"
 //#include "GaudiKernel/IToolSvc.h"
-//#include "GaudiKernel/Property.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 //#include "CaloUtils/CaloCellList.h"
 //#include "CaloEvent/CaloCluster.h"
@@ -52,7 +52,7 @@
 #include "RecoToolInterfaces/IParticleCaloExtensionTool.h"
 #include "TauElectronVetoVariables.h"
 
-using CLHEP::GeV;
+using Gaudi::Units::GeV;
 
 //-------------------------------------------------------------------------
 // Constructor
diff --git a/Simulation/G4Atlas/G4AtlasTests/src/MDTHitsTestTool.cxx b/Simulation/G4Atlas/G4AtlasTests/src/MDTHitsTestTool.cxx
index eadb8758b7247769a1c9ba36476bfe974a446dd3..86f4359a4e084002e696617986f3b71d23defa71 100644
--- a/Simulation/G4Atlas/G4AtlasTests/src/MDTHitsTestTool.cxx
+++ b/Simulation/G4Atlas/G4AtlasTests/src/MDTHitsTestTool.cxx
@@ -75,7 +75,7 @@ StatusCode MDTHitsTestTool::checkIdentifier(Identifier offid) {
   // double mdt_tube_perp  = mdt_gPos.perp();
   // double mdt_tube_z   = mdt_gPos.z();
   // double mdt_tube_cot   = 1./tan(mdt_gPos.theta());
-  HepGeom::Transform3D xf  = descriptor->getMaterialGeom()->getAbsoluteTransform(); //FIXME in the future??
+  //Amg::Transform3D xf  = descriptor->getMaterialGeom()->getAbsoluteTransform(); //FIXME in the future??
   //*AS* Amg::Vector3D xU = xf*Amg::Vector3D((*i_hit).localPosition().x(),-(*i_hit).localPosition().z(), (*i_hit).localPosition().y());
   //*AS*Amg::Vector3D gx = mdt_gPos + xU;
 
diff --git a/Simulation/G4Extensions/G4ScoringProcess/src/G4ScoringProcessTool.cxx b/Simulation/G4Extensions/G4ScoringProcess/src/G4ScoringProcessTool.cxx
index 18ef4ed326d737feb1b5b94be1200e48a931ddb7..1dde222df815eee0f743de93f89cd2ac00c9ad1e 100644
--- a/Simulation/G4Extensions/G4ScoringProcess/src/G4ScoringProcessTool.cxx
+++ b/Simulation/G4Extensions/G4ScoringProcess/src/G4ScoringProcessTool.cxx
@@ -20,7 +20,9 @@
 // 26-10-2015 : Edoardo Farina
 //-----------------------------------------------------------------------------
 
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/Simulation/G4Extensions/Monopole/src/MonopolePhysicsTool.cxx b/Simulation/G4Extensions/Monopole/src/MonopolePhysicsTool.cxx
index 611429fefeff4fc4c2c93a4b472b21c1b98ea0eb..b65b52d29bcce0ae9be399c15665c12691adcc6e 100644
--- a/Simulation/G4Extensions/Monopole/src/MonopolePhysicsTool.cxx
+++ b/Simulation/G4Extensions/Monopole/src/MonopolePhysicsTool.cxx
@@ -22,7 +22,9 @@
 // 14-05-2015 Edoardo Farina
 //-----------------------------------------------------------------------------
 
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/Simulation/G4Extensions/Quirks/src/QuirkPhysicsTool.cxx b/Simulation/G4Extensions/Quirks/src/QuirkPhysicsTool.cxx
index fcf81ccf277c709f4c7c284ce5ada1ce9e52c347..91cb357574b0bac36e460a734df216e27dd88206 100644
--- a/Simulation/G4Extensions/Quirks/src/QuirkPhysicsTool.cxx
+++ b/Simulation/G4Extensions/Quirks/src/QuirkPhysicsTool.cxx
@@ -35,7 +35,9 @@
 // 15-05-2015 : Edoardo Farina
 //-----------------------------------------------------------------------------
 #include "G4Version.hh"
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
index 89c408afbc26abe91ff4116d7c0afc853dd3db5f..f841633b3f567ac3c74ed6cd0e674d9564bc8c44 100644
--- a/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/RHadrons/src/RHadronsPhysicsTool.cxx
@@ -30,7 +30,9 @@
 // 2015-05-14 Edoardo Farina
 //-----------------------------------------------------------------------------
 
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/Simulation/G4Extensions/Sleptons/src/SleptonsPhysicsTool.cxx b/Simulation/G4Extensions/Sleptons/src/SleptonsPhysicsTool.cxx
index 9889a9f7d6834051825a3630a6d31df973ca087f..ef4b01da3846a7f3dca7c650efc20ce738b1969c 100644
--- a/Simulation/G4Extensions/Sleptons/src/SleptonsPhysicsTool.cxx
+++ b/Simulation/G4Extensions/Sleptons/src/SleptonsPhysicsTool.cxx
@@ -33,7 +33,9 @@
 // 15-05-2015 : Edoardo Farina
 //-----------------------------------------------------------------------------
 
-#if G4VERSION_NUMBER > 1009
+#if G4VERSION_NUMBER > 1029
+#define PARTICLEITERATOR (this->GetParticleIterator())
+#elif G4VERSION_NUMBER > 1009
 #define PARTICLEITERATOR aParticleIterator
 #else
 #define PARTICLEITERATOR theParticleIterator
diff --git a/Simulation/G4Sim/FADS/FadsControl/doc/packagedoc.h b/Simulation/G4Sim/FADS/FadsControl/doc/packagedoc.h
deleted file mode 100644
index 34e7ed779e30771533f1a78a263fec9cf4b26373..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsControl/doc/packagedoc.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/**
-@page FadsControl_page FadsControl
-@author Andrea Dell'Acqua (dellacqu@mail.cern.ch)
-
-@section FadsControl_FadsControl Introduction
-
-This package includes several useful base classes that are used throughout the simulation.
-
-@section FadsControl_FadsControl Class Overview
-
-This package's classes are logically divided in the following way:
-
- - DetectorConstructionEntryBase , PhysicsListEntryBase , PrimaryGeneratorEntryBase , RunManagerEntryBase , UserActionEntryBase : Pure athena base classes for the corresponding G4 objects
- - DetectorConstructionEntry , PhysicsListEntry , PrimaryGeneratorEntry , RunManagerEntry , UserActionEntry : Inherit from the pure-athena base classes and add support for the Geant4 object (usually through members rather than through inheritance)
- - DetectorDef , PhysicsListDef , PrimaryGeneratorDef , RunManagerDef , UserActionDef : Definitions for the classes (only C++ definitions)
- - DetectorConstructionManager , PhysicsListManager , PrimaryGeneratorActionManager , RunManagerStore , UserActionManager : Logical managers for keeping track of the defined objects and which are activated
-
-These individual classes are what one would expect.  DetectorConstruction* deal with engines for constructing the detector; PhysicsList* deal with G4PhysicsLists; PrimaryGenerator* deal with G4PrimaryGenerators, RunManager* deal with G4RunManagers (note that there should only be one active at a time, which is why the manager is called a "store"); UserAction* deal with G4UserActions.
-
-Three other classes are included in this package:
-
- - RandomNrCenter : Defines the random number generator to be used, including seeds, for Geant4 (essentially an interface for HepRandomEngines)
- - FadsActionBase : A generic action that includes all the G4 action types (stepping actions, tracking actions, run actions, stacking actions).  All other action types can inherit from this one and select the methods they wish to implement.
- - SteppingVerboseDef : An interface for G4 stepping verbose within the athena framework
-
-
-
-*/
diff --git a/Simulation/G4Sim/FADS/FadsField/CMakeLists.txt b/Simulation/G4Sim/FADS/FadsField/CMakeLists.txt
deleted file mode 100644
index 3ce5e812a6b32fa2dbe14161003789fadd344f59..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-################################################################################
-# Package: FadsField
-################################################################################
-
-# Declare the package name:
-atlas_subdir( FadsField )
-
-# External dependencies:
-find_package( CLHEP )
-find_package( Geant4 )
-find_package( XercesC )
-
-# Component(s) in the package:
-atlas_add_library( FadsField
-                   src/*.cxx
-                   PUBLIC_HEADERS FadsField
-                   INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} )
-
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactory.h b/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactory.h
deleted file mode 100755
index 252b1e65e5e327ea64c9cffec6b09062ac18801e..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactory.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EqOfMotionFactory_H
-#define EqOfMotionFactory_H
-
-#include "FadsField/EqOfMotionFactoryBase.h"
-#include "FadsField/FieldManager.h"
-#include "G4Mag_EqRhs.hh"
-#include "G4MagneticField.hh"
-
-namespace FADS {
-
-template <class T> 
-class EqOfMotionFactory : public EqOfMotionFactoryBase {
-private:
-	T* m_theEqOfMotion;
-public:
-	 EqOfMotionFactory(std::string n): EqOfMotionFactoryBase(n) , m_theEqOfMotion(0)
-	{
-		RegisterToStore();
-	}
-	void Create() 
-	{
-		if (!m_theEqOfMotion) 
-		{
-			m_theEqOfMotion=
-			new T(FieldManager::GetFieldManager()->GetMagneticFieldMap());
-		}
-	}
-	void Delete()
-	{
-		if (m_theEqOfMotion) 
-		{
-			delete m_theEqOfMotion;
-			m_theEqOfMotion=0;
-		}
-	}
-	virtual G4Mag_EqRhs* Build() 
-	{
-		Create(); return m_theEqOfMotion;
-	}
-	void RegisterToStore() {FieldManager::GetFieldManager()->RegisterEqOfMotion(this);}
-};
-
-}	// end namespace
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactoryBase.h b/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactoryBase.h
deleted file mode 100755
index d7511515e5ee2c329df3817772e30cbe9ea69b5b..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/EqOfMotionFactoryBase.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EqOfMotionFactoryBase_H
-#define EqOfMotionFactoryBase_H
-
-#include <string>
-
-class G4EquationOfMotion;
-class G4Mag_EqRhs;
-
-namespace FADS {
-
-// abstract base class for implementing a templated stepper factory
-class EqOfMotionFactoryBase {
-public:
-	EqOfMotionFactoryBase(std::string n):m_EqOfMotionName(n) {}
-	virtual G4Mag_EqRhs* Build()=0;
-	std::string GetName() const {return m_EqOfMotionName;}
-	void SetName(std::string n) {m_EqOfMotionName=n;}
-protected:
-	std::string m_EqOfMotionName;
-};
-
-}	// end namespace
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FadsFieldManager.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FadsFieldManager.h
deleted file mode 100755
index 3137c4c62c9d13aa10c482643918e00ed2b2db4b..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FadsFieldManager.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FadsFieldManager_H
-#define FadsFieldManager_H
-
-#include "G4FieldManager.hh"
-#include <string>
-#include "FadsField/FieldIntParameters.h"
-class G4Track;
-class G4Region;
-class G4MagneticField;
-class G4MagIntegratorStepper;
-
-namespace FADS {
-
-class FadsFieldManager: public G4FieldManager {
-public:
-	FadsFieldManager(std::string);
-	std::string GetName() const;
-	void SetField(std::string);
-	virtual ~FadsFieldManager() {;}
-	void SetStepper(G4MagIntegratorStepper* );
-private:
-	std::string m_name;
-	FADS::FieldIntParameters* m_defaultParameters;
-    const G4Track* m_previousTrack;
-    G4Region* m_previousRegion;
- 
-};
-
-}	// end namespace
-
-#endif
-
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldIntParameters.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldIntParameters.h
deleted file mode 100644
index 3fe550c09e12a4cf38de1279565bce32434bb13e..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldIntParameters.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldIntParameters_H
-#define FieldIntParameters_H
-
-class G4Track;
-#include "globals.hh"
-
-namespace FADS {
-
-class FieldIntParameters
-{
- public:
-  FieldIntParameters();
-  virtual ~FieldIntParameters();
-
- public:
-    void List(G4int iFlg=0) const;
-
- public:
-  virtual void GetParameters(const G4Track*,
-    G4double& /*maxLengthForConstField*/,
-    G4double& /*missDistance*/,
-    G4double& /*typicalLongStep*/,
-    G4double& /*tolerableBiasError*/,
-    G4double& /*tolerableIntegrationError*/,
-    G4double& /*expectedNumBoundaries*/,
-    G4double& /*expectedTrackLength*/);
-  //
-  // This method is invoked when a track gets into the region.
-  //
-  // Return values
-  //
-  // maxLengthForConstField:
-  //  if the estimated step size is shorter than this maxLengthForConstField,
-  //  the field is assumed to be constant for the step.
-  // 
-  // missDistance:
-  //  tolerable deviation between actual trajectory and estimated
-  //  chord.
-  //
-  // typicalLongStep:
-  //  typicalLongStep is a suggestion to G4PathFinder. There is no
-  //  need to be exact in this parameter but just the typical length
-  //  of the "long" step in this detector region.
-  //  Typically it would be 95-98 percentile of the step length in
-  //  the region. For example, it could be (a factor times) distance
-  //  between layers for barrel silicon detector.
-  //
-  // tolerableBiasError:
-  //  tolerable biasing error (in length) accumulated in the region
-  //
-  // tolerableIntegrationError:
-  //  tolerable integration (statistical) error (in length) accumulated
-  //  in the region
-  //
-  // expectedNumBoundaries:
-  //  number of geometrical boundaries this track is exprected to cross
-  //  in the region
-  //
-  // expectedTrackLength:
-  //  maximum distance this track could travel (neglecting spiral path)
-  //  in the region
-  //
-  // Note:
-  //  deltaIntersection, deltaOneStep, maxEpsilonStep, minEpsilonStep
-  //  are given by
-  //   deltaIntersection = tolerableBiasError / expectedNumBoundaries
-  //   maxEpsilonStep = 2. * tolerableIntegrationError / expectedTrackLength
-  //   minEpsilonStep = maxEpsilonStep / 10.
-  //   deltaOneStep = minEpsilonStep * typicalLongStep
-  //
-
- protected:
-  static G4double s_default_kineticEnergyThreshold;
-  static G4double s_default_maxLengthForConstField;
-  static G4double s_default_missDistance;
-  static G4double s_default_typicalLongStep;
-  static G4double s_default_tolerableBiasError;
-  static G4double s_default_tolerableIntegrationError;
-  static G4double s_default_expectedNumBoundaries;
-  static G4double s_default_expectedTrackLength;
-
-  G4double m_current_kineticEnergyThreshold;
-  // in the following parameters
-  //   idx=0 for e+/e- track below E-threshold
-  //   idx=1 for e+/e- track above E-threshold 
-  //      and all other charged track except mu+/mu-
-  //      of any kinetic energy
-  //   idx=2 for mu+/mu- track of any kinetic energy
-  G4double m_current_maxLengthForConstField[3];
-  G4double m_current_missDistance[3];
-  G4double m_current_typicalLongStep[3];
-  G4double m_current_tolerableBiasError[3];
-  G4double m_current_tolerableIntegrationError[3];
-  G4double m_current_expectedNumBoundaries[3];
-  G4double m_current_expectedTrackLength[3];
-
- public:
-  inline static G4double GetDefault_kineticEnergyThreshold()
-  { return s_default_kineticEnergyThreshold; }
-  inline static void SetDefault_kineticEnergyThreshold(G4double val)
-  { s_default_kineticEnergyThreshold= val; }
-  inline static G4double GetDefault_maxLengthForConstField()
-  { return s_default_maxLengthForConstField; }
-  inline static void SetDefault_maxLengthForConstField(G4double val)
-  { s_default_maxLengthForConstField= val; }
-  inline static G4double GetDefault_missDistance()
-  { return s_default_missDistance; }
-  inline static void SetDefault_missDistance(G4double val)
-  { s_default_missDistance = val; }
-  inline static G4double GetDefault_typicalLongStep()
-  { return s_default_typicalLongStep; }
-  inline static void SetDefault_typicalLongStep(G4double val)
-  { s_default_typicalLongStep = val; }
-  inline static G4double GetDefault_tolerableBiasError()
-  { return s_default_tolerableBiasError; }
-  inline static void SetDefault_tolerableBiasError(G4double val)
-  { s_default_tolerableBiasError = val; }
-  inline static G4double GetDefault_tolerableIntegrationError()
-  { return s_default_tolerableIntegrationError; }
-  inline static void SetDefault_tolerableIntegrationError(G4double val)
-  { s_default_tolerableIntegrationError = val; }
-  inline static G4double GetDefault_expectedNumBoundaries()
-  { return s_default_expectedNumBoundaries; }
-  inline static void SetDefault_expectedNumBoundaries(G4double val)
-  { s_default_expectedNumBoundaries = val; }
-  inline static G4double GetDefault_expectedTrackLength()
-  { return s_default_expectedTrackLength; }
-  inline static void SetDefault_expectedTrackLength(G4double val)
-  { s_default_expectedTrackLength = val; }
-
-  inline G4double GetCurrent_kineticEnergyThreshold() const
-  { return m_current_kineticEnergyThreshold; }
-  inline void SetCurrent_kineticEnergyThreshold(G4double val)
-  { m_current_kineticEnergyThreshold= val; }
-  // in the following parameters
-  //   idx=0 for e+/e- track below E-threshold
-  //   idx=1 for e+/e- track above E-threshold 
-  //      and all other charged track except mu+/mu-
-  //      of any kinetic energy
-  //   idx=2 for mu+/mu- track of any kinetic energy
-  inline G4double GetCurrent_maxLengthForConstField(G4int idx) const
-  { return m_current_maxLengthForConstField[idx]; }
-  inline void SetCurrent_maxLengthForConstField(G4int idx,G4double val)
-  { m_current_maxLengthForConstField[idx]= val; }
-  inline G4double GetCurrent_missDistance(G4int idx) const
-  { return m_current_missDistance[idx]; }
-  inline void SetCurrent_missDistance(G4int idx,G4double val)
-  { m_current_missDistance[idx] = val; }
-  inline G4double GetCurrent_typicalLongStep(G4int idx) const
-  { return m_current_typicalLongStep[idx]; }
-  inline void SetCurrent_typicalLongStep(G4int idx,G4double val)
-  { m_current_typicalLongStep[idx] = val; }
-  inline G4double GetCurrent_tolerableBiasError(G4int idx) const
-  { return m_current_tolerableBiasError[idx]; }
-  inline void SetCurrent_tolerableBiasError(G4int idx,G4double val)
-  { m_current_tolerableBiasError[idx] = val; }
-  inline G4double GetCurrent_tolerableIntegrationError(G4int idx) const
-  { return m_current_tolerableIntegrationError[idx]; }
-  inline void SetCurrent_tolerableIntegrationError(G4int idx,G4double val)
-  { m_current_tolerableIntegrationError[idx] = val; }
-  inline G4double GetCurrent_expectedNumBoundaries(G4int idx) const
-  { return m_current_expectedNumBoundaries[idx]; }
-  inline void SetCurrent_expectedNumBoundaries(G4int idx,G4double val)
-  { m_current_expectedNumBoundaries[idx] = val; }
-  inline G4double GetCurrent_expectedTrackLength(G4int idx) const
-  { return m_current_expectedTrackLength[idx]; }
-  inline void SetCurrent_expectedTrackLength(G4int idx,G4double val)
-  { m_current_expectedTrackLength[idx] = val; }
-
- private:
-  G4int m_nLongStep[3];
-  G4int m_nShortStep[3];
-  G4int m_idx;
-
- public:
-  inline void LongStep() 
-  { m_nLongStep[m_idx]++; }
-  inline void ShortStep()
-  { m_nShortStep[m_idx]++; }
-  
-};
-
-}
-
-#endif
-
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManager.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManager.h
deleted file mode 100755
index ba56b2fd5110d9efe10f20bdc8c117669fb8607f..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManager.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldManager_H
-#define FieldManager_H
-
-#include <string>
-#include <map>
-
-class G4MagIntegratorStepper;
-class G4Mag_EqRhs;
-class G4ChordFinder;
-#include "G4MagneticField.hh"
-#include "FadsField/MagneticFieldMap.h"
-
-namespace FADS {
-
-
-  class MagneticFieldMap;
-  class IntegratorStepperBase;
-  class EqOfMotionFactoryBase;
-
-  typedef std::map<std::string, MagneticFieldMap*, std::less<std::string> > FieldMap;
-  typedef std::map<std::string, IntegratorStepperBase*, std::less<std::string> > StepperMap;
-  typedef std::map<std::string, EqOfMotionFactoryBase*, std::less<std::string> > EquationMap;
-
-  class FieldManager {
-  private:
-    static FieldManager* s_thePointer;
-    FieldManager();
-
-  public:
-    static FieldManager* GetFieldManager();
-
-    void RegisterMagneticField(MagneticFieldMap* map);
-    void SelectMagneticField(const std::string& name);
-    void SelectAndCreateMagneticField(const std::string& name);
-    MagneticFieldMap* GetMagneticField(const std::string& name);
-    const MagneticFieldMap* GetMagneticField(const std::string& name) const;
-    void InitializeField();
-    void PrintFieldList() const;
-
-    void RegisterEqOfMotion(EqOfMotionFactoryBase*);
-    G4Mag_EqRhs* GetEqOfMotion(const std::string);
-
-    void RegisterStepper(IntegratorStepperBase* stepper);
-    void ListSteppers() const;
-    const StepperMap Steppers() const { return m_theSteppers; }
-    std::string CurrentStepper() const { return m_currentStepperName; }
-    void SetCurrentStepper(const std::string& name);
-    void UseCurrentStepper();
-    void UseStepper(const std::string& name);
-    G4MagIntegratorStepper* GetStepper(const std::string&); 
-    G4Mag_EqRhs *GetEquationOfMotion();
-
-    static void SetDeltaOneStep(double);
-    static void SetDeltaIntersection(double);
-    static void SetMinimumEpsilonStep(double);
-    static void SetMaximumEpsilonStep(double);
-    void EquationOfMotion(const std::string s) {m_eqOfMotion=s;}
-    std::string EquationOfMotion() const {return m_eqOfMotion;}
-    G4MagneticField* GetMagneticFieldMap() {return m_currentField;}
-
-    G4MagIntegratorStepper* GetCurrentStepper() {return m_currentStepper;}
-
-  private:
-    FieldMap m_fieldCatalog;
-    StepperMap m_theSteppers;
-    EquationMap m_theEquations;
-    MagneticFieldMap* m_currentField;
-    G4MagIntegratorStepper* m_currentStepper;
-    std::string m_currentStepperName;
-    G4Mag_EqRhs* m_theEquation;
-    G4ChordFinder* m_theChordFinder;
-    std::string m_eqOfMotion;
-  };
-
-}
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactory.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactory.h
deleted file mode 100644
index 065045805d21c477105801669edf07ad6d22e716..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactory.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldManagerFactory_H
-#define FieldManagerFactory_H
-
-#include "FadsField/FadsFieldManager.h"
-#include <string>
-
-namespace FADS {
-
-class FieldManagerFactory {
-public:
-	FieldManagerFactory(std::string n):m_name(n) { RegisterToStore(); }
-	std::string GetName() {return m_name;}
-	virtual FadsFieldManager *CreateFieldManager(std::string) = 0;
-	virtual ~FieldManagerFactory() {}
-private:
-	std::string m_name;
-	void RegisterToStore();
-};
-
-}
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryStore.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryStore.h
deleted file mode 100644
index 214aa3b855c4f23f96027c1c6944283e82fe5268..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryStore.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldManagerFactoryStore_H
-#define FieldManagerFactoryStore_H
-
-#include "FadsField/FieldManagerFactory.h"
-#include <map>
-namespace FADS {
-// class FieldManagerFactory;
-
-typedef std::map<std::string,FieldManagerFactory*,std::less<std::string> > factoryMap;
-
-class FieldManagerFactoryStore {
-public:
-	static FieldManagerFactoryStore* GetStore();
-	void AddFieldManagerFactory(FieldManagerFactory *);
-	FieldManagerFactory *GetFieldManagerFactory(std::string n);
-private:
-	FieldManagerFactoryStore();
-	factoryMap m_theFactories;
-};
-
-}
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryT.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryT.h
deleted file mode 100644
index 249aae31fc1ba5a2ec19ca4f0a7c4f663a65e490..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerFactoryT.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldManagerFactoryT_H
-#define FieldManagerFactoryT_H
-
-#include "FadsField/FieldManagerFactory.h"
-
-namespace FADS {
-
-template <class T> class FieldManagerFactoryT:public FieldManagerFactory {
-public:
-	FieldManagerFactoryT(std::string n):FieldManagerFactory(n),m_theFactory(0) {}
-	FadsFieldManager *CreateFieldManager(std::string n)
-	{	
-		if (!m_theFactory) m_theFactory=new T(n);
-		return m_theFactory;
-	}
-private:
-	T* m_theFactory;
-};
-
-}
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerStore.h b/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerStore.h
deleted file mode 100755
index 3fe02abd44f0a4464db385ee00df4203a4b81bfb..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/FieldManagerStore.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef FieldManagerStore_H
-#define FieldManagerStore_H
-
-#include <map>
-#include <string>
-
-namespace FADS {
-
-class FadsFieldManager;
-
-typedef std::map<std::string,FadsFieldManager*,std::less<std::string> > fmList;
-
-class FieldManagerStore {
-friend class FadsFieldManager;
-public:
-	static FieldManagerStore* GetFieldManagerStore();
-	FadsFieldManager*	GetFieldManager(std::string);
-private:
-	FieldManagerStore();
-	FieldManagerStore(const FieldManagerStore&);
-	static FieldManagerStore* GetFMStore();
-	static FieldManagerStore* s_fieldManagerStore;
-	void RegisterFieldManager(FadsFieldManager*);
-	fmList m_fieldManagerList;
-};
-
-}	// end namespace
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperBase.h b/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperBase.h
deleted file mode 100755
index d177818581bcc5f9dc0fa7bebec2614f03ef4f92..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperBase.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef IntegratorStepperBase_H
-#define IntegratorStepperBase_H
-
-#include <string>
-#include "G4MagIntegratorStepper.hh"
-
-namespace FADS {
-
-
-  /// Abstract base class for implementing a templated stepper factory
-  class IntegratorStepperBase {
-  public:
-	IntegratorStepperBase(const std::string& n)
-      : m_stepperName(n)
-    {  }
-
-	virtual G4MagIntegratorStepper* Build() = 0;
-
-	std::string GetName() const {
-      return m_stepperName;
-    }
-
-	void SetName(const std::string& n) {
-      m_stepperName = n;
-    }
-
-  protected:
-	std::string m_stepperName;
-  };
-
-
-}
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperFactory.h b/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperFactory.h
deleted file mode 100755
index e57627c43677c65913fae18364277ccb2750ada5..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/IntegratorStepperFactory.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef IntegratorStepperFactory_H
-#define IntegratorStepperFactory_H
-
-#include "FadsField/IntegratorStepperBase.h"
-#include "FadsField/FieldManager.h"
-#include "G4MagIntegratorStepper.hh"
-
-namespace FADS {
-
-template <class T> 
-class IntegratorStepperFactory : public IntegratorStepperBase {
-private:
-	T* m_theStepper;
-public:
-	IntegratorStepperFactory(std::string n): IntegratorStepperBase(n) , m_theStepper(0)
-	{
-		RegisterToStore();
-	}
-	void Create() 
-	{
-		if (!m_theStepper) 
-		{
-			m_theStepper=
-			new T(FieldManager::GetFieldManager()->GetEquationOfMotion());
-		}
-	}
-	void Delete()
-	{
-		if (m_theStepper) 
-		{
-			delete m_theStepper;
-			m_theStepper=0;
-		}
-	}
-	virtual G4MagIntegratorStepper* Build() 
-	{
-		Create(); return m_theStepper;
-	}
-	void RegisterToStore() {FieldManager::GetFieldManager()->RegisterStepper(this);}
-};
-
-}	// end namespace
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMap.h b/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMap.h
deleted file mode 100755
index 233348c895e5fc713ad0cbbeca70fcf1cd1cb310..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMap.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef MagneticFieldMap_H
-#define MagneticFieldMap_H
-
-#include "G4MagneticField.hh"
-#include <string>
-
-namespace FADS {
-
-class MagneticFieldMap: public G4MagneticField {
-public:
-	MagneticFieldMap();
-	MagneticFieldMap(std::string n);
-	void GetFieldValue( const double *xyzPos, double *xyzField) const;
-	virtual void Initialize() {}
-	virtual void Terminate() {}
-	virtual MagneticFieldMap* Create() {return this;}
-	virtual MagneticFieldMap* Create(std::string) {return this;}
-	bool IsInitialized() {return m_initialized;}
-	virtual void FieldValue( const double *xyzPos, double *xyzField) const = 0;
-	std::string GetName() {return m_name;}
-	void SetInitialValues();
-protected:
-	std::string m_name;
-	bool m_initialized;
-};
-
-}	// end namespace
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMapT.h b/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMapT.h
deleted file mode 100755
index 1f2820c8d4f6b5297ec1dcf61221fd6d03002ecf..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/MagneticFieldMapT.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef MagneticFieldMapT_H
-#define MagneticFieldMapT_H
-
-#include "FadsField/MagneticFieldMap.h"
-#include "FadsField/FieldManager.h"
-
-#include <map>
-#include <string>
-
-#include <iostream>
-
-namespace FADS {
-
-template <class T> class MagneticFieldMapT: public MagneticFieldMap {
-
-private:
-  MagneticFieldMap *m_g;
-  std::map<std::string, MagneticFieldMap *, std::less<std::string> > m_fMaps;
-
-public:
-  MagneticFieldMapT(std::string n): MagneticFieldMap(n),m_g(0)
-  {
-    FieldManager::GetFieldManager()->RegisterMagneticField(this);
-  }
-
-  ~MagneticFieldMapT() {if (m_g) delete m_g;}
-
-  MagneticFieldMap* Create() {
-    //std::cout<<" This is "<<GetName()<<std::endl;
-    if (m_g) return m_g;
-    m_g=new T;
-    return m_g;       
-  }
-
-  MagneticFieldMap* Create(std::string n) {
-    //std::cout<<" This is "<<GetName()<<" field name "<<n<<std::endl;
-    //std::cout<<" building the map ";
-    if (m_fMaps.find(n) != m_fMaps.end() )
-      return m_fMaps[n];
-    else
-    {
-      //std::cout<<" Map not found in the list: building it ";
-      m_fMaps[n]=new T(n);
-      if (m_g==0) m_g=m_fMaps[n];
-      //std::cout<<m_fMaps[n]<<std::endl;
-      return m_fMaps[n];
-    }     
-  }
-
-  void Initialize() {
-    if (m_g) m_g->Initialize();
-  }
-
-  void Terminate() {
-    m_g->Terminate();
-    delete m_g;
-    m_g=0;
-  }   
-
-  void FieldValue(const double *xyzPos, double *xyzField) const {
-    if (m_g) m_g->FieldValue(xyzPos, xyzField);
-    else
-      for (int i=0;i<3;i++) xyzField[i] = 0.;
-  }
-
-};
-
-} // end namespace
-
-#endif 
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/RegionInformation.h b/Simulation/G4Sim/FADS/FadsField/FadsField/RegionInformation.h
deleted file mode 100644
index 9fe75e1b32526ed10fa89354fa4c9ed6b7c1aa90..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/RegionInformation.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef RegionInformation_H
-#define RegionInformation_H
-
-#include "G4VUserRegionInformation.hh"
-#include "FadsField/FieldIntParameters.h"
-
-namespace FADS {
-
-class RegionInformation : public G4VUserRegionInformation
-{
- public:
-  RegionInformation();
-  virtual ~RegionInformation();
-
- public:
-  void Print() const;
-
- private:
-  FADS::FieldIntParameters* m_fieldIntPara;
-
- public:
-  inline FADS::FieldIntParameters* GetFieldIntParameters() const
-  { return m_fieldIntPara; }
-  inline void SetFieldIntParameters(FADS::FieldIntParameters* fip)
-  { m_fieldIntPara = fip; }
-};
-
-}
-
-#endif
-
diff --git a/Simulation/G4Sim/FADS/FadsField/FadsField/TestFieldManager.h b/Simulation/G4Sim/FADS/FadsField/FadsField/TestFieldManager.h
deleted file mode 100644
index 0063ef3787be3e1fdddb7dbe5dc38304158ecbe6..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/FadsField/TestFieldManager.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef TestFieldManager_H
-#define TestFieldManager_H
-
-#include "FadsField/FadsFieldManager.h"
-
-class TestFieldManager: public FADS::FadsFieldManager {
-public:
-	TestFieldManager(std::string s):FADS::FadsFieldManager(s) {;}
-	void ConfigureForTrack(const G4Track* );
-};
-
-#endif
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FadsFieldManager.cxx b/Simulation/G4Sim/FADS/FadsField/src/FadsFieldManager.cxx
deleted file mode 100755
index 8407df4099da2367e218025d2fd359491987e374..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FadsFieldManager.cxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FadsFieldManager.h"
-#include "FadsField/FieldManagerStore.h"
-#include "FadsField/FieldManager.h"
-#include "FadsField/MagneticFieldMap.h"
-
-#include "G4ChordFinder.hh"
-#include "G4Mag_UsualEqRhs.hh"
-#include "G4Track.hh"
-#include "G4VPhysicalVolume.hh"
-#include "G4LogicalVolume.hh"
-#include "G4Region.hh"
-#include "G4MagIntegratorStepper.hh"
-
-#include "FadsField/RegionInformation.h"
-#include "FadsField/FieldIntParameters.h"
-
-namespace FADS {
-
-
-  FadsFieldManager::FadsFieldManager(std::string name):G4FieldManager(),m_name(name)
-  {
-    FieldManagerStore* fms=FieldManagerStore::GetFMStore();
-    fms->RegisterFieldManager(this);
-
-    m_defaultParameters = new FADS::FieldIntParameters();
-    m_previousTrack = NULL;
-    m_previousRegion = NULL;
-  }
-
-
-  void FadsFieldManager::SetField(std::string /*fName*/)
-  {
-    //  FADS::FieldManager *fm=FADS::FieldManager::GetFieldManager();
-
-    // step one - get the field map, create it, initialize it
-    //   MagneticFieldMap* magField=fm->GetMagneticField(fName);
-
-    //     if (!magField) return;
-
-    //  G4MagneticField* theMap=magField->Create(fName);
-    //  if (!magField->IsInitialized()) magField->SetInitialValues();
-    //  std::cout<<"Field initialization completed!"<<std::endl;
-
-    //      G4Mag_EqRhs* eqMotion = fm->GetEquationOfMotion();
-    //  fStepperDispatcher = new FADS::StepperDispatcher(eqMotion);
-
-    //  G4double minStep = 0.001*CLHEP::mm;
-    //  std::cout<<"Making a chord finder with the stepper dispatcher!"<<std::endl;
-
-    //      G4ChordFinder* chordFinder = new G4ChordFinder(theMap,minStep,fStepperDispatcher);
-
-    //  SetDetectorField(theMap);
-    //  SetChordFinder(chordFinder);
-
-    //  std::cout<<"Construction of FadsFieldManager complete!!"<<std::endl;
-  }
-
-  std::string FadsFieldManager::GetName() const
-  {
-    return m_name;
-  }
-
-  void FadsFieldManager::SetStepper(G4MagIntegratorStepper* stepper)
-  {
-    if (stepper == 0)
-      {
-        std::cout<<"FadsFieldManager: Can't set NULL stepper. Nothing changed." <<std::endl;
-        return;
-      }
-
-    G4ChordFinder * theChordFinder = this->GetChordFinder();
-
-    if (theChordFinder)
-      {
-        if (theChordFinder->GetIntegrationDriver())
-          {
-            theChordFinder->GetIntegrationDriver()->RenewStepperAndAdjust(stepper);
-          }
-        else
-          {
-            std::cout<<"FadsFieldManager: theChordFinder=" << theChordFinder <<
-              " theChordFinder->GetIntegrationDriver()=" <<
-              theChordFinder->GetIntegrationDriver() <<
-              ". Something is wrong. " <<std::endl;
-          }
-      }
-    else
-      {
-        std::cout<<"FadsFieldManager: theChordFinder=NULL. Something is wrong. " <<std::endl;
-      }
-    return;
-  }
-
-}
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FieldIntParameters.cxx b/Simulation/G4Sim/FADS/FadsField/src/FieldIntParameters.cxx
deleted file mode 100644
index c9a03b3e910a676624863ea515551deca0a4ccbc..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FieldIntParameters.cxx
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldIntParameters.h"
-
-#include "G4Track.hh"
-#include "G4ParticleDefinition.hh"
-#include "G4Electron.hh"
-#include "G4Positron.hh"
-#include "G4MuonPlus.hh"
-#include "G4MuonMinus.hh"
-//#include "G4ChargedGeantino.hh"
-
-namespace FADS {
-
-G4double FieldIntParameters::s_default_kineticEnergyThreshold = 1.0*CLHEP::GeV;
-G4double FieldIntParameters::s_default_maxLengthForConstField = 1.0*CLHEP::mm;
-G4double FieldIntParameters::s_default_missDistance = 0.25*CLHEP::mm;
-G4double FieldIntParameters::s_default_typicalLongStep = 1.0*CLHEP::cm;
-G4double FieldIntParameters::s_default_tolerableBiasError = 1.0e-5*CLHEP::m;
-G4double FieldIntParameters::s_default_tolerableIntegrationError = 1.0e-4*CLHEP::m;
-G4double FieldIntParameters::s_default_expectedNumBoundaries = 1.0e2;
-G4double FieldIntParameters::s_default_expectedTrackLength = 20.0*CLHEP::m;
-
-FieldIntParameters::FieldIntParameters()
-{
- m_current_kineticEnergyThreshold = s_default_kineticEnergyThreshold;
-
- // for e+/e- track below m_current_kineticEnergyThreshold
- m_current_maxLengthForConstField[0] = s_default_maxLengthForConstField * 100.;
- m_current_missDistance[0] = s_default_missDistance;
- m_current_typicalLongStep[0] = s_default_typicalLongStep;
- m_current_tolerableBiasError[0] = s_default_tolerableBiasError;
- m_current_tolerableIntegrationError[0] = s_default_tolerableIntegrationError * 10.;
- m_current_expectedNumBoundaries[0] = s_default_expectedNumBoundaries / 10.;
- m_current_expectedTrackLength[0] = s_default_expectedTrackLength / 100.;
-
- // for e+/e- track above m_current_kineticEnergyThreshold
- // and all other charged track except mu+/mu- of any kinetic energy
- m_current_maxLengthForConstField[1] = s_default_maxLengthForConstField / 1000.;
- m_current_missDistance[1] = s_default_missDistance;
- m_current_typicalLongStep[1] = s_default_typicalLongStep;
- m_current_tolerableBiasError[1] = s_default_tolerableBiasError;
- m_current_tolerableIntegrationError[1] = s_default_tolerableIntegrationError;
- m_current_expectedNumBoundaries[1] = s_default_expectedNumBoundaries;
- m_current_expectedTrackLength[1] = s_default_expectedTrackLength;
-
- // for mu+/mu- track of any kinetic energy
- m_current_maxLengthForConstField[2] = s_default_maxLengthForConstField / 1000.;
- m_current_missDistance[2] = s_default_missDistance;
- m_current_typicalLongStep[2] = s_default_typicalLongStep;
- m_current_tolerableBiasError[2] = s_default_tolerableBiasError / 10.;
- m_current_tolerableIntegrationError[2] = s_default_tolerableIntegrationError;
- m_current_expectedNumBoundaries[2] = s_default_expectedNumBoundaries;
- m_current_expectedTrackLength[2] = s_default_expectedTrackLength;
-
- for(int i=0;i<3;i++)
- {
-   m_nLongStep[i] = 0;
-   m_nShortStep[i] = 0;
- }
- 
- m_idx = -1;
-}
-
-FieldIntParameters::~FieldIntParameters()
-{;}
-
-void FieldIntParameters::List(G4int iFlg) const
-{
-  if(iFlg)
-  { 
-  G4cout<<" Number of Long Steps for each pType \t"<<m_nLongStep[0]<<"\t"<<m_nLongStep[1]
-          <<"\t"<<m_nLongStep[2]<<"\t-- Total long steps "<<m_nLongStep[0]+m_nLongStep[1]+m_nLongStep[2]<<G4endl;
-  G4cout<<" Number of Short Steps for each pType\t"<<m_nShortStep[0]<<"\t"<<m_nShortStep[1]
-          <<"\t"<<m_nShortStep[2]<<"\t-- Total short steps "<<m_nShortStep[0]+m_nShortStep[1]+m_nShortStep[2]<<G4endl;
-  }
-  G4cout<<" kineticEnergyThreshold [MeV]        \t"<<m_current_kineticEnergyThreshold<<G4endl;
-  G4cout<<" maxLengthForConstField [mm]         \t"<<m_current_maxLengthForConstField[0]<<"\t"
-        <<m_current_maxLengthForConstField[1]<<"\t"
-        <<m_current_maxLengthForConstField[2]<<G4endl;
-  G4cout<<" missDistance [mm]                   \t"<<m_current_missDistance[0]<<"\t"
-        <<m_current_missDistance[1]<<"\t"
-        <<m_current_missDistance[2]<<G4endl;
-  G4cout<<" tolerableBiasError [mm]             \t"<<m_current_tolerableBiasError[0]<<"\t"
-        <<m_current_tolerableBiasError[1]<<"\t"
-        <<m_current_tolerableBiasError[2]<<G4endl;
-  G4cout<<" tolerableIntegrationError [mm]      \t"<<m_current_tolerableIntegrationError[0]<<"\t"
-        <<m_current_tolerableIntegrationError[1]<<"\t"
-        <<m_current_tolerableIntegrationError[2]<<G4endl;
-}
-
-void FieldIntParameters::GetParameters(const G4Track* aTrack,
-    G4double& maxLengthForConstField,
-    G4double& missDistance,
-    G4double& typicalLongStep,
-    G4double& tolerableBiasError,
-    G4double& tolerableIntegrationError,
-    G4double& expectedNumBoundaries,
-    G4double& expectedTrackLength)
-{
-  m_idx = 1;
-  G4ParticleDefinition* partDef = aTrack->GetDefinition();
-  if(partDef==G4Electron::Definition() || partDef==G4Positron::Definition())
-  { if(aTrack->GetKineticEnergy() < m_current_kineticEnergyThreshold) m_idx = 0; }
-  else if(partDef==G4MuonPlus::Definition() || partDef==G4MuonMinus::Definition())
-  { m_idx = 2; }
-
-  maxLengthForConstField = m_current_maxLengthForConstField[m_idx];
-  missDistance = m_current_missDistance[m_idx];
-  typicalLongStep = m_current_typicalLongStep[m_idx];
-  tolerableBiasError = m_current_tolerableBiasError[m_idx];
-  tolerableIntegrationError = m_current_tolerableIntegrationError[m_idx];
-  expectedNumBoundaries = m_current_expectedNumBoundaries[m_idx];
-  expectedTrackLength = m_current_expectedTrackLength[m_idx];
-}
-
-}
-
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FieldManager.cxx b/Simulation/G4Sim/FADS/FadsField/src/FieldManager.cxx
deleted file mode 100755
index 59978f57b6036bbdb235cd59f1af36f4c5cec78c..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FieldManager.cxx
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldManager.h"
-#include "FadsField/MagneticFieldMap.h"
-#include "FadsField/IntegratorStepperBase.h"
-#include "FadsField/IntegratorStepperFactory.h"
-#include "FadsField/EqOfMotionFactoryBase.h"
-#include "FadsField/EqOfMotionFactory.h"
-
-#include "G4FieldManager.hh"
-#include "G4TransportationManager.hh"
-#include "G4ChordFinder.hh"
-#include "G4Mag_UsualEqRhs.hh"
-#include "G4Mag_EqRhs.hh"
-
-using namespace std;
-
-namespace FADS {
-
-
-
-  FieldManager* FieldManager::s_thePointer = FieldManager::GetFieldManager();
-
-
-  FieldManager::FieldManager()
-    : m_currentField(NULL),m_currentStepper(NULL),
-      m_theEquation(NULL),m_theChordFinder(NULL),m_eqOfMotion("Default")
-  {
-    // default primary event action
-  }
-
-
-  FieldManager* FieldManager::GetFieldManager() {
-    if (!s_thePointer) s_thePointer = new FieldManager();
-    return s_thePointer;
-  }
-
-
-  void FieldManager::RegisterMagneticField(MagneticFieldMap* map) {
-    m_fieldCatalog[map->GetName()] = map;
-  }
-
-  void FieldManager::InitializeField()
-  {
-    if (!m_currentField)
-      {
-        std::cout<<" Field Manager initialization: a field map"
-                 <<" has not been set: running without field? "<<std::endl;
-        return;
-      }
-    m_currentField->Create();
-    if (!m_currentField->IsInitialized()) m_currentField->SetInitialValues();
-    G4FieldManager* fieldMgr=G4TransportationManager::GetTransportationManager()->GetFieldManager();
-    fieldMgr->SetDetectorField(m_currentField);
-    fieldMgr->CreateChordFinder(m_currentField);
-    m_theChordFinder=fieldMgr->GetChordFinder();
-    m_theEquation = GetEquationOfMotion();
-  }
-
-  void FieldManager::SelectMagneticField(const string& name) {
-    if (m_fieldCatalog.find(name) == m_fieldCatalog.end()) {
-      cout << "FieldManager Warning!!! Field " << name <<" not found!!!!" << endl;
-      return;
-    }
-    // if (m_currentField) m_currentField->Terminate;
-    m_currentField = m_fieldCatalog[name];
-  }
-
-
-  void FieldManager::SelectAndCreateMagneticField(const string& name) {
-    if (m_fieldCatalog.find(name) == m_fieldCatalog.end())  {
-      cout << "FieldManager Warning!!! Field " << name << " not found!!!!" << endl;
-      return;
-    }
-    // if (m_currentField) m_currentField->Terminate;
-    m_currentField = m_fieldCatalog[name];
-    m_currentField->Create();
-  }
-
-
-  MagneticFieldMap* FieldManager::GetMagneticField(const string& name) {
-    FieldMap::iterator it_f = m_fieldCatalog.find(name);
-    if (it_f == m_fieldCatalog.end()) {
-      cout << " FieldManager Warning!!! Field " << name << " not found!!!!" << endl;
-      return 0;
-    }
-    return it_f->second;
-  }
-
-  G4Mag_EqRhs* FieldManager::GetEquationOfMotion()
-  {
-    if (!m_theEquation) {
-      if (m_eqOfMotion=="Default") {
-        m_theEquation=new G4Mag_UsualEqRhs(m_currentField);
-      }
-      else {
-        m_theEquation=GetEqOfMotion(m_eqOfMotion);
-      }
-    }
-    return m_theEquation;
-  }
-
-
-  const MagneticFieldMap* FieldManager::GetMagneticField(const string& name) const {
-    FieldMap::const_iterator it_f = m_fieldCatalog.find(name);
-    if (it_f == m_fieldCatalog.end()) {
-      cout << " FieldManager Warning!!! Field " << name << " not found!!!!" << endl;
-      return 0;
-    }
-    return it_f->second;
-  }
-
-
-  /// @todo Not very useful... returning the field list would be better
-  void FieldManager::PrintFieldList() const {
-    FieldMap::const_iterator it;
-    cout << " List of Magnetic Field Maps available: " << endl;
-    for (it = m_fieldCatalog.begin(); it != m_fieldCatalog.end(); ++it)
-      cout << "\t---> " << it->first << "\t\t<---" << endl;
-    cout << " <--------------------------------------->" << endl;
-  }
-
-  void FieldManager::RegisterEqOfMotion(EqOfMotionFactoryBase* eq) {
-    cout << "Registering equation of motion" << eq->GetName() << endl;
-    m_theEquations[eq->GetName()] = eq;
-  }
-
-  G4Mag_EqRhs* FieldManager::GetEqOfMotion(const std::string eqM) {
-    if (m_theEquations.find(eqM) == m_theEquations.end())
-      {
-        cout << " FieldManager could not find equation of motion " << eqM << endl;
-        return 0;
-      }
-    return m_theEquations[eqM]->Build();
-  }
-
-  void FieldManager::RegisterStepper(IntegratorStepperBase* stepper) {
-    //cout << "Registering stepper " << stepper->GetName() << endl;
-    m_theSteppers[stepper->GetName()] = stepper;
-  }
-
-
-  void FieldManager::ListSteppers() const {
-    cout << " List of all Integrator Steppers available " << endl;
-    for (StepperMap::const_iterator it = m_theSteppers.begin(); it != m_theSteppers.end(); ++it) {
-      cout << "---- " << it->first << " ----" << endl;
-    }
-  }
-
-
-  void FieldManager::SetCurrentStepper(const string& n) {
-    if (m_theSteppers.find(n) == m_theSteppers.end()) {
-      cout << "Stepper " << n << " not found! Stepper not changed" << endl;
-      return;
-    }
-    m_currentStepperName = n;
-    m_currentStepper = m_theSteppers[n]->Build();
-  }
-
-
-  void FieldManager::UseCurrentStepper() {
-    if (m_theChordFinder && m_theChordFinder->GetIntegrationDriver()) {
-      m_theChordFinder->GetIntegrationDriver()->RenewStepperAndAdjust(m_currentStepper);
-    }
-  }
-
-
-  void FieldManager::UseStepper(const string& n) {
-    /// @todo It would be good to replace most of this with a call to SetCurrentStepper...
-    ///       but we can't since there is no way to report a failure. Is this function actually needed?
-    if (m_theSteppers.find(n) == m_theSteppers.end())  {
-      cout << "Stepper " << n << " not found! Stepper not changed" << endl;
-      return;
-    }
-    m_currentStepperName = n;
-    m_currentStepper = m_theSteppers[n]->Build();
-    UseCurrentStepper();
-  }
-
-  G4MagIntegratorStepper* FieldManager::GetStepper(const std::string& n){
-    if (n == m_currentStepperName) {
-      cout << "FieldManager: the stepper " << n << " and m_currentStepper are the same. Return the m_currentStepper." << endl;
-      return m_currentStepper;
-    }
-    if (m_theSteppers.find(n) == m_theSteppers.end())  {
-      cout << "Stepper " << n << " not found. Return 0!!!" << endl;
-      return 0;
-    }
-    return m_theSteppers[n]->Build();
-  }
-
-  void FieldManager::SetDeltaOneStep(double value) {
-    G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager();
-    fieldMgr->SetDeltaOneStep(value);
-  }
-
-
-  void FieldManager::SetDeltaIntersection(double value) {
-    G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager();
-    fieldMgr->SetDeltaIntersection(value);
-  }
-
-
-  void FieldManager::SetMinimumEpsilonStep(double value) {
-    G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager();
-    fieldMgr->SetMinimumEpsilonStep(value);
-  }
-
-
-  void FieldManager::SetMaximumEpsilonStep(double value) {
-    G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager();
-    fieldMgr->SetMaximumEpsilonStep(value);
-  }
-
-
-}
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactory.cxx b/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactory.cxx
deleted file mode 100644
index e4e4948f97fb0e4fc9379fab7bf40e8192e78fe4..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactory.cxx
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldManagerFactory.h"
-#include "FadsField/FieldManagerFactoryStore.h"
-
-namespace FADS {
-
-void FieldManagerFactory::RegisterToStore()
-{
-	FieldManagerFactoryStore *fStore=FieldManagerFactoryStore::GetStore();
-	fStore->AddFieldManagerFactory(this);
-}
-
-}
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactoryStore.cxx b/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactoryStore.cxx
deleted file mode 100644
index 1cd93bbf9331b5409fc834ecd5b3277d2ff5b3cf..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerFactoryStore.cxx
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldManagerFactory.h"
-#include "FadsField/FieldManagerFactoryStore.h"
-
-namespace FADS {
-
-FieldManagerFactoryStore::FieldManagerFactoryStore()
-{
-}
-
-FieldManagerFactoryStore* FieldManagerFactoryStore::GetStore()
-{
-	static  FieldManagerFactoryStore* theStore=0;
-	if (!theStore)
-		theStore=new FieldManagerFactoryStore;
-	return theStore;
-}
-
-void FieldManagerFactoryStore::AddFieldManagerFactory(FieldManagerFactory *f)
-{
-	m_theFactories[f->GetName()] = f;
-}
-
-FieldManagerFactory *FieldManagerFactoryStore::GetFieldManagerFactory(std::string n)
-{
-	if (m_theFactories.find(n)!=m_theFactories.end()) return m_theFactories[n];
-	else return 0;
-}
-}
diff --git a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerStore.cxx b/Simulation/G4Sim/FADS/FadsField/src/FieldManagerStore.cxx
deleted file mode 100755
index 9e1b3ae49df451d7664f3b1475cdb3b7d384d497..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/FieldManagerStore.cxx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldManagerStore.h" 
-#include "FadsField/FadsFieldManager.h"
-
-namespace FADS {
-
-FieldManagerStore* FieldManagerStore::s_fieldManagerStore=0;
-
-FieldManagerStore::FieldManagerStore()
-{
-}
-
-FieldManagerStore::FieldManagerStore(const FieldManagerStore& )
-{
-}
-
-FieldManagerStore* FieldManagerStore::GetFMStore()
-{
-	if (!s_fieldManagerStore) s_fieldManagerStore=new FieldManagerStore;
-	return s_fieldManagerStore;
-}
-
-FieldManagerStore* FieldManagerStore::GetFieldManagerStore()
-{
-	return s_fieldManagerStore;
-}
-
-void FieldManagerStore::RegisterFieldManager(FadsFieldManager* fm)
-{
-	std::string name=fm->GetName();
-	if (m_fieldManagerList.find(name) != m_fieldManagerList.end()) 
-		std::cout <<"FieldManagerStore: FieldManager "<<name<<
-				  " already registered"<<std::endl;
-	else
-		m_fieldManagerList[name]=fm;
-}
-
-FadsFieldManager* FieldManagerStore::GetFieldManager(std::string managerName)
-{
-	if (m_fieldManagerList.find(managerName) != m_fieldManagerList.end())
-		return m_fieldManagerList[managerName];
-	else
-	{
-		std::cout<<" field manager "<<managerName<<" not found!"<<std::endl;
-		return 0;
-	}	
-}
-
-}
diff --git a/Simulation/G4Sim/FADS/FadsField/src/Integrators.cxx b/Simulation/G4Sim/FADS/FadsField/src/Integrators.cxx
deleted file mode 100755
index 1cbc36c05388440aad3bbb0782c9522aeb7d94df..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/Integrators.cxx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/IntegratorStepperBase.h"
-#include "FadsField/IntegratorStepperFactory.h"
-
-#include "G4CashKarpRKF45.hh"
-static FADS::IntegratorStepperFactory<G4CashKarpRKF45> s1("CashKarpRKF45");
-
-#include "G4ClassicalRK4.hh"
-static FADS::IntegratorStepperFactory<G4ClassicalRK4> s2("ClassicalRK4");
-
-#include "G4SimpleHeum.hh"
-static FADS::IntegratorStepperFactory<G4SimpleHeum> s3("SimpleHeum");
-
-#include "G4SimpleRunge.hh"
-static FADS::IntegratorStepperFactory<G4SimpleRunge> s4("SimpleRunge");
-
-#include "G4HelixExplicitEuler.hh"
-static FADS::IntegratorStepperFactory<G4HelixExplicitEuler> s5("HelixExplicitEuler");
-
-#include "G4HelixImplicitEuler.hh"
-static FADS::IntegratorStepperFactory<G4HelixImplicitEuler> s6("HelixImplicitEuler");
-
-#include "G4HelixSimpleRunge.hh"
-static FADS::IntegratorStepperFactory<G4HelixSimpleRunge> s7("HelixSimpleRunge");
-
-#include "G4AtlasRK4.hh"
-static FADS::IntegratorStepperFactory<G4AtlasRK4> s8("AtlasRK4");
-
-#include "G4NystromRK4.hh"
-static FADS::IntegratorStepperFactory<G4NystromRK4> s9("NystromRK4");
diff --git a/Simulation/G4Sim/FADS/FadsField/src/MagneticFieldMap.cxx b/Simulation/G4Sim/FADS/FadsField/src/MagneticFieldMap.cxx
deleted file mode 100755
index 27da075177d1804de1d8eecdb3f2342060e8468c..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/MagneticFieldMap.cxx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/FieldManager.h"
-#include "FadsField/MagneticFieldMap.h"
-
-#include <string>
-
-namespace FADS {
-
-MagneticFieldMap::MagneticFieldMap()
-{
-	m_name="GenericFieldMap";
-	m_initialized=false;
-}
-
-MagneticFieldMap::MagneticFieldMap(std::string n): m_name(n)
-{
-	m_initialized=false;
-}
-
-void MagneticFieldMap::GetFieldValue(const double *xyzPos, double *xyzField) const {
-  FieldValue(xyzPos, xyzField);
-}
-
-void MagneticFieldMap::SetInitialValues()
-{
-	Initialize();
-	m_initialized=true;
-}
-
-}	// end namespace
diff --git a/Simulation/G4Sim/FADS/FadsField/src/RegionInformation.cxx b/Simulation/G4Sim/FADS/FadsField/src/RegionInformation.cxx
deleted file mode 100644
index b13ff2cf4d0ece9739c6050a027b43f73bdbffb5..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/RegionInformation.cxx
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/RegionInformation.h"
-
-namespace FADS {
-
-RegionInformation::RegionInformation()
-:m_fieldIntPara(0)
-{;}
-
-RegionInformation::~RegionInformation()
-{;}
-
-void RegionInformation::Print() const
-{;}
-
-}
-
diff --git a/Simulation/G4Sim/FADS/FadsField/src/TestFieldManager.cxx b/Simulation/G4Sim/FADS/FadsField/src/TestFieldManager.cxx
deleted file mode 100644
index c60146bcf9c0c1c4d64bf3622ad2a44d74d06dd3..0000000000000000000000000000000000000000
--- a/Simulation/G4Sim/FADS/FadsField/src/TestFieldManager.cxx
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "FadsField/TestFieldManager.h"
-
-#include "FadsField/FieldManagerFactoryT.h"
-
-FADS::FieldManagerFactoryT<TestFieldManager> a("TestFieldManager");
-FADS::FieldManagerFactoryT<TestFieldManager> b("AnotherFieldManager");
-
-
-void TestFieldManager::ConfigureForTrack(const G4Track* )
-{
-	std::cout<<"This is TestFieldManager::ConfigureForTrack"<<std::endl;
-}
diff --git a/Simulation/G4Utilities/Geo2G4/CMakeLists.txt b/Simulation/G4Utilities/Geo2G4/CMakeLists.txt
index 111033d9286a6bd3ddfa038979c95ac8589512b4..8d114f69a1565a9bb7b09ea2ee9f7e00ef005595 100644
--- a/Simulation/G4Utilities/Geo2G4/CMakeLists.txt
+++ b/Simulation/G4Utilities/Geo2G4/CMakeLists.txt
@@ -14,9 +14,9 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/SGTools
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoSpecialShapes
                           DetectorDescription/GeoModel/GeoModelUtilities
+			  DetectorDescription/GeoPrimitives
                           Simulation/G4Atlas/G4AtlasInterfaces
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Sim/SimHelpers
@@ -28,25 +28,26 @@ find_package( CLHEP )
 find_package( Geant4 )
 find_package( ROOT COMPONENTS MathCore RIO Core Tree Hist pthread )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( Geo2G4Lib
                    src/*.cxx
                    PUBLIC_HEADERS Geo2G4
                    INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                    PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
                    LINK_LIBRARIES ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${ROOT_LIBRARIES} GaudiKernel
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps SGTools GeoSpecialShapes G4AtlasToolsLib SimHelpers GeoMaterial2G4 AthenaKernel GeoModelKernel GeoModelUtilities StoreGateLib SGtests )
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps SGTools GeoSpecialShapes G4AtlasToolsLib SimHelpers GeoMaterial2G4 AthenaKernel GeoModelUtilities StoreGateLib SGtests )
 
 atlas_add_component( Geo2G4
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel AthenaBaseComps SGTools StoreGateLib SGtests GeoSpecialShapes G4AtlasToolsLib SimHelpers GeoMaterial2G4 Geo2G4Lib )
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel AthenaBaseComps SGTools StoreGateLib SGtests GeoSpecialShapes G4AtlasToolsLib SimHelpers GeoMaterial2G4 Geo2G4Lib )
 
 atlas_add_dictionary( LArWheelSolidCheckerDict
                       src/LArWheelSolidDDProxy.h
                       src/lcg_dict/selection.xml
-                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel AthenaBaseComps SGTools StoreGateLib SGtests GeoSpecialShapes SimHelpers GeoMaterial2G4 Geo2G4Lib )
+                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GaudiKernel AthenaBaseComps SGTools StoreGateLib SGtests GeoSpecialShapes SimHelpers GeoMaterial2G4 Geo2G4Lib )
 
diff --git a/Simulation/G4Utilities/Geo2G4/src/ExtParameterisedVolumeBuilder.cxx b/Simulation/G4Utilities/Geo2G4/src/ExtParameterisedVolumeBuilder.cxx
index a7b781076cd6c90ff10fce65b3301c12d0ae82b8..68be419d764ef4955406d146a8cbf6db7bdf976b 100644
--- a/Simulation/G4Utilities/Geo2G4/src/ExtParameterisedVolumeBuilder.cxx
+++ b/Simulation/G4Utilities/Geo2G4/src/ExtParameterisedVolumeBuilder.cxx
@@ -28,6 +28,8 @@
 #include "StoreGate/StoreGateSvc.h"
 #include <iostream>
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 ExtParameterisedVolumeBuilder::ExtParameterisedVolumeBuilder(std::string n):
   VolumeBuilder(n),
   m_getMatEther(true),
@@ -123,7 +125,7 @@ G4LogicalVolume* ExtParameterisedVolumeBuilder::Build(const PVConstLink theGeoPh
           // Get child phys volume
           theGeoPhysChild = av.getVolume();
           // Get its transform
-          G4Transform3D theG4Position(av.getTransform());
+          G4Transform3D theG4Position(Amg::EigenTransformToCLHEP(av.getTransform()));
 
           Query<int> Qint =  av.getId();
           if(Qint.isValid()) id = Qint;
@@ -212,7 +214,7 @@ Geo2G4AssemblyVolume* ExtParameterisedVolumeBuilder::BuildAssembly(PVConstLink p
           if(!(theG4AssemblyChild = BuildAssembly(theGeoPhysChild))) return 0;
 
           // Get its transform
-          G4Transform3D theG4Position(av.getTransform());
+          G4Transform3D theG4Position(Amg::EigenTransformToCLHEP(av.getTransform()));
 
           assemblyVolume->AddPlacedAssembly(theG4AssemblyChild,theG4Position);
         }
@@ -224,7 +226,7 @@ Geo2G4AssemblyVolume* ExtParameterisedVolumeBuilder::BuildAssembly(PVConstLink p
           if(!(theG4LogChild = Build(theGeoPhysChild))) return 0;
 
           // Get its transform
-          G4Transform3D theG4Position(av.getTransform());
+          G4Transform3D theG4Position(Amg::EigenTransformToCLHEP(av.getTransform()));
 
           int placedID = 0;
           if(Qint.isValid()) placedID = Qint;
diff --git a/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.cxx b/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.cxx
index efac761918d9516073b3ce39e9e5b576dc66e0e4..2dccb755aeb72147058ff6ff49bbbb3a67ab6c61 100644
--- a/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.cxx
+++ b/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.cxx
@@ -32,11 +32,12 @@
 #include <map>
 #include <iostream>
 
-Geo2G4Builder::Geo2G4Builder(std::string detectorName):
-  m_detectorName(detectorName),
-  m_matAir(0),
-  m_pDetStore(0),
-  m_msg("Geo2G4Builder")
+Geo2G4Builder::Geo2G4Builder(std::string detectorName)
+  : m_detectorName(detectorName)
+  , m_motherTransform(GeoTrf::Transform3D::Identity())
+  , m_matAir(nullptr)
+  , m_pDetStore(nullptr)
+  , m_msg("Geo2G4Builder")
 {
   ISvcLocator* svcLocator = Gaudi::svcLocator(); // from Bootstrap
   StatusCode sc=svcLocator->service("DetectorStore",m_pDetStore);
@@ -126,7 +127,7 @@ G4LogicalVolume* Geo2G4Builder::BuildTree()
         Query<unsigned int> childIndx = world->indexOf(pv);
 
         // Tree Top transformation
-        G4Transform3D theG4Position(world->getXToChildVol(childIndx));
+        G4Transform3D theG4Position(Amg::EigenTransformToCLHEP(world->getXToChildVol(childIndx)));
 
         // Copy number
         int id = 16969;
diff --git a/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.h b/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.h
index f1ad88526e19000d2af3ef8d958bb3500b6000e2..3aa785ebb5e17f74879500e08785150f2dc53749 100644
--- a/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.h
+++ b/Simulation/G4Utilities/Geo2G4/src/Geo2G4Builder.h
@@ -10,6 +10,7 @@
 // GeoVPhysVol
 #include "VolumeBuilder.h"
 #include "GeoModelKernel/GeoVPhysVol.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "G4LogicalVolume.hh"
 //#include "Geo2G4/GenericVolumeBuilder.h"
 
@@ -18,6 +19,8 @@
 
 #include "AthenaKernel/MsgStreamMember.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 // STL includes
 #include <string>
 #include <vector>
@@ -43,7 +46,7 @@ public:
   // Access volume builder:
   VolumeBuilder*        GetVolumeBuilder(std::string);
 
-  HepGeom::Transform3D& GetDetectorTransform() {return m_motherTransform;}
+  HepGeom::Transform3D GetDetectorTransform() {return Amg::EigenTransformToCLHEP(m_motherTransform);}
   /// Log a message using the Athena controlled logging system
   MsgStream& msg( MSG::Level lvl ) const { return m_msg << lvl; }
   /// Check whether the logging system is active at the provided verbosity level
@@ -53,7 +56,7 @@ private:
 
   // GeoVDetectorManager* theDetectorElement;
   std::string m_detectorName;
-  HepGeom::Transform3D m_motherTransform;
+  GeoTrf::Transform3D m_motherTransform;
   std::vector<PVConstLink> m_treeTops;
   VolumeBuilder *m_theBuilder;
 
diff --git a/Simulation/G4Utilities/Geo2G4/src/Geo2G4STParameterisation.cxx b/Simulation/G4Utilities/Geo2G4/src/Geo2G4STParameterisation.cxx
index 79cc9fd5310b592c5f5bfafa743bd502cd36d2b1..65ab76da77c6393a73a59ea5d73c121590badd3e 100644
--- a/Simulation/G4Utilities/Geo2G4/src/Geo2G4STParameterisation.cxx
+++ b/Simulation/G4Utilities/Geo2G4/src/Geo2G4STParameterisation.cxx
@@ -4,7 +4,7 @@
 
 #include "Geo2G4STParameterisation.h"
 #include "G4VPhysicalVolume.hh"
-
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 #include "CLHEP/Geometry/Transform3D.h"
 
 Geo2G4STParameterisation::Geo2G4STParameterisation(const GeoXF::Function* func,
@@ -23,7 +23,7 @@ Geo2G4STParameterisation::~Geo2G4STParameterisation()
 void Geo2G4STParameterisation::ComputeTransformation(const G4int copyNo,
                                                      G4VPhysicalVolume* physVol) const
 {
-  HepGeom::Transform3D transform = (*m_function)(copyNo);
+  HepGeom::Transform3D transform = Amg::EigenTransformToCLHEP((*m_function)(copyNo));
   G4ThreeVector translation = transform.getTranslation();
   *m_rotation = transform.getRotation().inverse();
 
diff --git a/Simulation/G4Utilities/Geo2G4/src/Geo2G4SolidFactory.cxx b/Simulation/G4Utilities/Geo2G4/src/Geo2G4SolidFactory.cxx
index 366f243519398b51a4ffcfffd3de71bdb8e90da1..3e52caad89e3d9710c9c9b9098292b835ec7fd29 100644
--- a/Simulation/G4Utilities/Geo2G4/src/Geo2G4SolidFactory.cxx
+++ b/Simulation/G4Utilities/Geo2G4/src/Geo2G4SolidFactory.cxx
@@ -54,6 +54,8 @@
 #include <map>
 #include <cmath>
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 typedef std::map<const GeoShape*, G4VSolid*, std::less<const GeoShape*> > shapesMap;
 typedef std::map<std::string, G4VSolid*,std::less<std::string> > customSolidMap;
 
@@ -375,15 +377,15 @@ G4VSolid *Geo2G4SolidFactory::Build(const GeoShape* geoShape, std::string name)
         G4FacetVertexType vertexType = (geoFacet->getVertexType()==GeoFacet::ABSOLUTE? ABSOLUTE : RELATIVE);
         G4VFacet* g4Facet(nullptr);
         if(geoFacet->getNumberOfVertices()==3)
-          g4Facet = new G4TriangularFacet(geoFacet->getVertex(0),
-                                          geoFacet->getVertex(1),
-                                          geoFacet->getVertex(2),
+          g4Facet = new G4TriangularFacet(Amg::EigenToHep3Vector(geoFacet->getVertex(0)),
+                                          Amg::EigenToHep3Vector(geoFacet->getVertex(1)),
+					  Amg::EigenToHep3Vector(geoFacet->getVertex(2)),
                                           vertexType);
         else
-          g4Facet = new G4QuadrangularFacet(geoFacet->getVertex(0),
-                                            geoFacet->getVertex(1),
-                                            geoFacet->getVertex(2),
-                                            geoFacet->getVertex(3),
+          g4Facet = new G4QuadrangularFacet(Amg::EigenToHep3Vector(geoFacet->getVertex(0)),
+					    Amg::EigenToHep3Vector(geoFacet->getVertex(1)),
+                                            Amg::EigenToHep3Vector(geoFacet->getVertex(2)),
+                                            Amg::EigenToHep3Vector(geoFacet->getVertex(3)),
                                             vertexType);
 
         g4Tessellated->AddFacet(g4Facet);
@@ -432,9 +434,17 @@ G4VSolid *Geo2G4SolidFactory::Build(const GeoShape* geoShape, std::string name)
     if (nullptr==theGenTrap) throw std::runtime_error("TypeID did not match cast for generic trap");
     if (n.empty()) n="G4GenericTrap";
     if (theGenTrap->getZHalfLength()<=0.){ ATH_MSG_WARNING("GenTrap " << n << " has an z side of " << theGenTrap->getZHalfLength() <<" - using std::abs.");}
+
+    // Translate vector of vertices from Eigen to CLHEP
+    std::vector<CLHEP::Hep2Vector> clhepVertices;
+    clhepVertices.reserve(theGenTrap->getVertices().size());
+    for(const GeoTrf::Vector2D& geoVertex : theGenTrap->getVertices()) {
+      clhepVertices.push_back(CLHEP::Hep2Vector(geoVertex.x(),geoVertex.y()));
+    }
+
     G4GenericTrap* g4GenTrap = new G4GenericTrap(n
                                                  ,std::abs(theGenTrap->getZHalfLength())
-                                                 ,theGenTrap->getVertices());
+                                                 ,clhepVertices);
     theSolid = g4GenTrap;
   }
   //
@@ -450,7 +460,7 @@ G4VSolid *Geo2G4SolidFactory::Build(const GeoShape* geoShape, std::string name)
       if (nullptr==theShapeShift) throw std::runtime_error("TypeID did not match cast for shape shift");
       if (n.empty()) n="DisplacedSolid";
       G4VSolid * undisplacedSolid = Build(theShapeShift->getOp());
-      theSolid = new G4DisplacedSolid(n, undisplacedSolid, theShapeShift->getX());
+      theSolid = new G4DisplacedSolid(n, undisplacedSolid, Amg::EigenTransformToCLHEP(theShapeShift->getX()));
     }
   //
   // GeoShapeUnion
diff --git a/Simulation/G4Utilities/GeoMaterial2G4/CMakeLists.txt b/Simulation/G4Utilities/GeoMaterial2G4/CMakeLists.txt
index 50eaded856a470af33bcabcd71c120f058f37b4d..49c77585532991384e9cf5608773e9bee9f78262 100644
--- a/Simulation/G4Utilities/GeoMaterial2G4/CMakeLists.txt
+++ b/Simulation/G4Utilities/GeoMaterial2G4/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( GeoMaterial2G4 )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           PRIVATE
                           Control/AthenaBaseComps
@@ -16,11 +15,13 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Geant4 )
+find_package( CLHEP )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( GeoMaterial2G4
                    src/*.cxx
                    PUBLIC_HEADERS GeoMaterial2G4
-                   INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${GEANT4_LIBRARIES} AthenaKernel GeoModelKernel GaudiKernel
+                   INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GaudiKernel
                    PRIVATE_LINK_LIBRARIES AthenaBaseComps GeoModelUtilities )
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/FastCaloSimSvcV2.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/FastCaloSimSvcV2.cxx
index 89b12cb02b925247d5f9538bacdb216297380761..a87a7fbd445afd96cc23c8339a52cec44516dec0 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/FastCaloSimSvcV2.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/FastCaloSimSvcV2.cxx
@@ -35,6 +35,8 @@
 
 #include "PathResolver/PathResolver.h"
 
+#include "CLHEP/Units/SystemOfUnits.h"
+
 #include "TFile.h"
 #include <fstream>
 
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/CMakeLists.txt b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/CMakeLists.txt
index 76d5e7e4862c40fb4c7e4be73839ee1ab65f9a36..5dd3d35395b0ed4fd69b4e06c623d849db596c74 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/CMakeLists.txt
@@ -26,13 +26,14 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Eigen )
+find_package( CLHEP )
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
 
 # Component(s) in the package:
 atlas_add_library( ISF_FatrasDetDescrModel
                    src/*.cxx
                    PUBLIC_HEADERS ISF_FatrasDetDescrModel
-                   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel GeoPrimitives Identifier EventPrimitives InDetIdentifier InDetReadoutGeometry ISF_FatrasDetDescrInterfaces TrkDetDescrUtils TrkDetElementBase TrkGeometry TrkSurfaces TrkEventPrimitives TrkParameters StoreGateLib SGtests
+                   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoPrimitives Identifier EventPrimitives InDetIdentifier InDetReadoutGeometry ISF_FatrasDetDescrInterfaces TrkDetDescrUtils TrkDetElementBase TrkGeometry TrkSurfaces TrkEventPrimitives TrkParameters StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES GaudiKernel )
 
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/ISF_FatrasDetDescrModel/PlanarDetElement.h b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/ISF_FatrasDetDescrModel/PlanarDetElement.h
index c2340d8058439d05a6d152daa306f4335d969736..c88e8dbb49816abcc460aa5f634d3d615222bac5 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/ISF_FatrasDetDescrModel/PlanarDetElement.h
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrModel/ISF_FatrasDetDescrModel/PlanarDetElement.h
@@ -28,6 +28,8 @@
 #include "ISF_FatrasDetDescrInterfaces/ISegmentation.h"
 #include "InDetReadoutGeometry/SiDetectorDesign.h"
 
+#include "CLHEP/Geometry/Transform3D.h"
+
 namespace iFatras {
 
   /**
@@ -107,7 +109,7 @@ namespace iFatras {
 
     /// Local (simulation/hit frame) to global transform
     const Amg::Transform3D & HitTransform() const { return m_hitTransform;};
-    const HepGeom::Transform3D & transformHit() const { return m_hitTransformCLHEP;};
+    const Amg::Transform3D & transformHit() const { return m_hitTransform;};
     
     /// Center in global coordinates
     const Amg::Vector3D & center() const {return m_center;};
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrTools/src/PlanarDetLayerBuilder.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrTools/src/PlanarDetLayerBuilder.cxx
index 90b30c1912bffa954a835e9eac3b69a0c4a72ccc..8c5e52aa2c54dfc7f5e5cc047b7c1a474b83f4f9 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrTools/src/PlanarDetLayerBuilder.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasDetDescrTools/src/PlanarDetLayerBuilder.cxx
@@ -910,7 +910,7 @@ const std::vector< const Trk::CylinderLayer* >* iFatras::PlanarDetLayerBuilder::
       
       if(m_pixelCase){
 	ATH_MSG_VERBOSE("Surface " << (*moduleSurface));
-	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString(Amg::CLHEPTransformToEigen((*Elem_Iter)->transformHit())));
+	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString((*Elem_Iter)->transformHit()));
 	if (m_checkGeo)
 	  {
 	    
@@ -933,7 +933,7 @@ const std::vector< const Trk::CylinderLayer* >* iFatras::PlanarDetLayerBuilder::
 	ATH_MSG_VERBOSE("Phi = " << moduleSurface->center().phi() << "  Eta = " << moduleSurface->center().eta());
       } else {
 	ATH_MSG_VERBOSE("Surface " << (*moduleSurface));
-	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString(Amg::CLHEPTransformToEigen((*Elem_Iter)->transformHit())));
+	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString((*Elem_Iter)->transformHit()));
 	if (m_checkGeo)
 	  {
 	    Amg::Vector3D glopos = (*moduleSurface).center();
@@ -1165,7 +1165,7 @@ const std::vector< const Trk::DiscLayer* >* iFatras::PlanarDetLayerBuilder::disc
   
       if(m_pixelCase){
 	ATH_MSG_VERBOSE("Surface " << (*moduleSurface));
-	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString(Amg::CLHEPTransformToEigen((*Elem_Iter)->transformHit())));
+	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString((*Elem_Iter)->transformHit()));
 	Identifier hitId         = moduleSurface->associatedDetectorElementIdentifier();   
 	IdentifierHash hitIdHash = m_pixIdHelper->wafer_hash(hitId);
 	ATH_MSG_VERBOSE("ID " << hitId << ", hash " << hitIdHash );
@@ -1174,7 +1174,7 @@ const std::vector< const Trk::DiscLayer* >* iFatras::PlanarDetLayerBuilder::disc
       }
       else {
 	ATH_MSG_VERBOSE("Surface " << (*moduleSurface));
-	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString(Amg::CLHEPTransformToEigen((*Elem_Iter)->transformHit())));
+	ATH_MSG_VERBOSE("TransformHit = " << Amg::toString((*Elem_Iter)->transformHit()));
 	Identifier hitId         = moduleSurface->associatedDetectorElementIdentifier();   
 	IdentifierHash hitIdHash = m_sctIdHelper->wafer_hash(hitId);
 	ATH_MSG_VERBOSE("ID " << hitId << ", hash " << hitIdHash );
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/HadIntProcessorParametric.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/HadIntProcessorParametric.cxx
index 5231ca399fbb62e6d821243fb77e9576f9168d76..6e9490eff3302d93df6ba4f6eb2385767be76c06 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/HadIntProcessorParametric.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/HadIntProcessorParametric.cxx
@@ -26,6 +26,7 @@
 #include "CLHEP/Matrix/Vector.h"
 #include "CLHEP/Random/RandFlat.h"
 #include "CLHEP/Random/RandGauss.h"
+#include "CLHEP/Geometry/Transform3D.h"
 // Validation mode - TTree includes
 #include "TTree.h"
 #include "GaudiKernel/ITHistSvc.h" 
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhotonConversionTool.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhotonConversionTool.cxx
index 0538b7f0e231b99b3858b5ac0208d228eb7a84f6..42b3e85623d616480593c44488817735ac60c18f 100755
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhotonConversionTool.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhotonConversionTool.cxx
@@ -38,6 +38,7 @@
 #include "CLHEP/Units/SystemOfUnits.h"
 #include "CLHEP/Matrix/Vector.h"
 #include "CLHEP/Random/RandFlat.h"
+#include "CLHEP/Vector/LorentzVector.h"
 // Validation mode - TTree includes
 #include "TTree.h"
 #include "GaudiKernel/ITHistSvc.h" 
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhysicsValidationTool.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhysicsValidationTool.cxx
index 18ffc3801b18d0497fb26aabfc967a55a7d399a0..29be483a236296c7af9ce4ea7c5f4be7aeae690e 100755
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhysicsValidationTool.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/PhysicsValidationTool.cxx
@@ -16,6 +16,7 @@
 #include "ISF_Event/ParticleUserInformation.h"
 // CLHEP
 #include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Units/PhysicalConstants.h"
 //
 // ROOT includes
 #include "TTree.h"
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportEngine.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportEngine.cxx
index 4cf9e151bff1f8cd2128613e4874744d77ea5988..982c6283e11287b70c46e72cf1e03121c8751333 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportEngine.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportEngine.cxx
@@ -32,6 +32,7 @@
 
 // CLHEP
 #include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Units/PhysicalConstants.h"
 #include "CLHEP/Random/RandFlat.h"
 
 // AtlasDetDescr
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx
index fcfdeeaf37af66d75bcedfcac76940ccc71b0368..bfcbdec9400074c1de7ec100f25a5e05c67224dc 100755
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx
@@ -26,6 +26,7 @@
 #include "ISF_Interfaces/IParticleHelper.h"
 // CLHEP
 #include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Units/PhysicalConstants.h"
 #include "CLHEP/Random/RandFlat.h"
 //
 // ROOT includes
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/CMakeLists.txt b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/CMakeLists.txt
index 8fc1f042a414fd4bdfe548997bbc525c0bd1056a..af2dca5955da3c8e9815064fe888b7d2932c8cb1 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/CMakeLists.txt
@@ -16,6 +16,7 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/AtlasDetDescr
                           DetectorDescription/IdDictDetDescr
                           DetectorDescription/Identifier
+			  DetectorDescription/GeoPrimitives
                           InnerDetector/InDetConditions/InDetConditionsSummaryService
                           InnerDetector/InDetConditions/TRT_ConditionsServices
                           InnerDetector/InDetDetDescr/InDetIdentifier
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/src/HitCreatorSilicon.cxx b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/src/HitCreatorSilicon.cxx
index 60a60761571a4332a982bf8955f4dcffe2953198..e28ab75cb83e784bc5ecb28fe3555742b4c97d58 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/src/HitCreatorSilicon.cxx
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasToolsID/src/HitCreatorSilicon.cxx
@@ -38,6 +38,7 @@
 #include "InDetConditionsSummaryService/IInDetConditionsTool.h"
 #include "InDetSimEvent/SiHit.h"
 // CLHEP
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
 #include "CLHEP/Units/SystemOfUnits.h"
 #include "CLHEP/Random/RandFlat.h"
 #include "CLHEP/Random/RandGauss.h"
@@ -447,7 +448,7 @@ void iFatras::HitCreatorSilicon::createSimHit(const ISF::ISFParticle& isp, const
    double localExitY  = interY+0.5*distY;
    double   energyDeposit=0;   
    //!< @todo : fix edge effects 
-   const Amg::Transform3D &hitTransform = Amg::CLHEPTransformToEigen( hitSiDetElement->transformHit().inverse() );
+   const Amg::Transform3D &hitTransform = hitSiDetElement->transformHit().inverse();
    // transform into the hit frame
    Amg::Vector3D localEntry(hitTransform*(sTransform*Amg::Vector3D(localEntryX,localEntryY,-0.5*movingDirection*thickness)));
    Amg::Vector3D localExit(hitTransform*(sTransform*Amg::Vector3D(localExitX,localExitY,0.5*movingDirection*thickness))); 
diff --git a/TestBeam/TBRec/src/TBTrackToCaloAlg.cxx b/TestBeam/TBRec/src/TBTrackToCaloAlg.cxx
index 24600bfffc9922301bf7dec373be02d08beba544..dc98ace338df1d56a07d6128d1a2c7cfb6a04c5f 100644
--- a/TestBeam/TBRec/src/TBTrackToCaloAlg.cxx
+++ b/TestBeam/TBRec/src/TBTrackToCaloAlg.cxx
@@ -38,9 +38,6 @@
 #include "ImpactInCaloCollection.h"
 #include "AthenaKernel/Units.h"
 
-
-using HepGeom::Point3D;
-using HepGeom::Vector3D;
 using Athena::Units::GeV;
 
 
diff --git a/TileCalorimeter/TileCosmicAlgs/src/TileMuonFitter.cxx b/TileCalorimeter/TileCosmicAlgs/src/TileMuonFitter.cxx
index 870d41d3da7871b37d7c42107d525e5c03ef4e67..bcb193fbbb5c89325c56f7e89df632c9540ba008 100755
--- a/TileCalorimeter/TileCosmicAlgs/src/TileMuonFitter.cxx
+++ b/TileCalorimeter/TileCosmicAlgs/src/TileMuonFitter.cxx
@@ -57,6 +57,8 @@
 
 // ROOT includes
 #include "CLHEP/Vector/ThreeVector.h"
+#include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Units/PhysicalConstants.h"
 
 #include <cmath>
 #ifndef __APPLE__
diff --git a/TileCalorimeter/TileDetDescr/CMakeLists.txt b/TileCalorimeter/TileDetDescr/CMakeLists.txt
index 6dd11c28a45a5b3a874a9e0e909c65e04c7a6c17..f642c956a788f2940ada8d55d7a3fbc536faaa92 100644
--- a/TileCalorimeter/TileDetDescr/CMakeLists.txt
+++ b/TileCalorimeter/TileDetDescr/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloIdentifier
                           Control/AthenaKernel
                           Database/RDBAccessSvc
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/Identifier
                           PRIVATE
                           Calorimeter/CaloDetDescr
@@ -21,12 +20,14 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( TileDetDescr
                    src/Tile*.cxx
                    PUBLIC_HEADERS TileDetDescr
-                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} CaloIdentifier AthenaKernel GeoModelKernel Identifier CaloDetDescrLib
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} CaloIdentifier AthenaKernel Identifier CaloDetDescrLib
                    PRIVATE_LINK_LIBRARIES AtlasDetDescr GaudiKernel TileIdentifier )
 
diff --git a/TileCalorimeter/TileDetDescr/src/CellVolumes.h b/TileCalorimeter/TileDetDescr/src/CellVolumes.h
index c1fe739091cdc210bf4a93ca7df73b43839693a3..e8f75d433ef478eaaf667bc760ee511b6baa3f6a 100755
--- a/TileCalorimeter/TileDetDescr/src/CellVolumes.h
+++ b/TileCalorimeter/TileDetDescr/src/CellVolumes.h
@@ -1,47 +1,48 @@
 /*
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
+#include "GeoModelKernel/Units.h"
 
-const double TileDetDescrManager::vBarrelCells[23] = {17799.76*CLHEP::cm3,   //A1
-						      17799.76*CLHEP::cm3,   //A2
-						      18459.01*CLHEP::cm3,   //A3
-						      18459.01*CLHEP::cm3,   //A4
-						      19777.51*CLHEP::cm3,   //A5
-						      20436.76*CLHEP::cm3,   //A6
-						      21096.01*CLHEP::cm3,   //A7
-						      23073.76*CLHEP::cm3,   //A8
-						      24392.26*CLHEP::cm3,   //A9
-						      21096.01*CLHEP::cm3,   //A10
-						      75726.60*CLHEP::cm3,   //BC1
-						      77024.24*CLHEP::cm3,   //BC2
-						      77024.24*CLHEP::cm3,   //BC3
-						      81574.95*CLHEP::cm3,   //BC4
-						      81574.95*CLHEP::cm3,   //BC5
-						      88401.02*CLHEP::cm3,   //BC6
-						      91974.02*CLHEP::cm3,   //BC7
-						      91014.21*CLHEP::cm3,   //BC8
-						      34219.80*CLHEP::cm3,   //B9
-						      110000.61*CLHEP::cm3,  //D0
-						      111375.62*CLHEP::cm3,  //D1
-						      118250.66*CLHEP::cm3,  //D2
-						      137500.77*CLHEP::cm3}; //D3
+const double TileDetDescrManager::vBarrelCells[23] = {17799.76*GeoModelKernelUnits::cm3,   //A1
+						      17799.76*GeoModelKernelUnits::cm3,   //A2
+						      18459.01*GeoModelKernelUnits::cm3,   //A3
+						      18459.01*GeoModelKernelUnits::cm3,   //A4
+						      19777.51*GeoModelKernelUnits::cm3,   //A5
+						      20436.76*GeoModelKernelUnits::cm3,   //A6
+						      21096.01*GeoModelKernelUnits::cm3,   //A7
+						      23073.76*GeoModelKernelUnits::cm3,   //A8
+						      24392.26*GeoModelKernelUnits::cm3,   //A9
+						      21096.01*GeoModelKernelUnits::cm3,   //A10
+						      75726.60*GeoModelKernelUnits::cm3,   //BC1
+						      77024.24*GeoModelKernelUnits::cm3,   //BC2
+						      77024.24*GeoModelKernelUnits::cm3,   //BC3
+						      81574.95*GeoModelKernelUnits::cm3,   //BC4
+						      81574.95*GeoModelKernelUnits::cm3,   //BC5
+						      88401.02*GeoModelKernelUnits::cm3,   //BC6
+						      91974.02*GeoModelKernelUnits::cm3,   //BC7
+						      91014.21*GeoModelKernelUnits::cm3,   //BC8
+						      34219.80*GeoModelKernelUnits::cm3,   //B9
+						      110000.61*GeoModelKernelUnits::cm3,  //D0
+						      111375.62*GeoModelKernelUnits::cm3,  //D1
+						      118250.66*GeoModelKernelUnits::cm3,  //D2
+						      137500.77*GeoModelKernelUnits::cm3}; //D3
 
-const double TileDetDescrManager::vExtendedCells[12] = {11863.88*CLHEP::cm3,   //A12
-							32955.21*CLHEP::cm3,   //A13
-							36909.84*CLHEP::cm3,   //A14
-							39546.25*CLHEP::cm3,   //A15
-							63274.01*CLHEP::cm3,   //A16
-							44472.59*CLHEP::cm3,   //B11
-							75047.49*CLHEP::cm3,   //B12
-							83386.10*CLHEP::cm3,   //B13
-							88945.18*CLHEP::cm3,   //B14
-							97283.79*CLHEP::cm3,   //B15
-							293772.18*CLHEP::cm3,  //D5
-							338967.89*CLHEP::cm3}; //D6
+const double TileDetDescrManager::vExtendedCells[12] = {11863.88*GeoModelKernelUnits::cm3,   //A12
+							32955.21*GeoModelKernelUnits::cm3,   //A13
+							36909.84*GeoModelKernelUnits::cm3,   //A14
+							39546.25*GeoModelKernelUnits::cm3,   //A15
+							63274.01*GeoModelKernelUnits::cm3,   //A16
+							44472.59*GeoModelKernelUnits::cm3,   //B11
+							75047.49*GeoModelKernelUnits::cm3,   //B12
+							83386.10*GeoModelKernelUnits::cm3,   //B13
+							88945.18*GeoModelKernelUnits::cm3,   //B14
+							97283.79*GeoModelKernelUnits::cm3,   //B15
+							293772.18*GeoModelKernelUnits::cm3,  //D5
+							338967.89*GeoModelKernelUnits::cm3}; //D6
 
-const double TileDetDescrManager::vItcGapCells[6] = {13461.47*CLHEP::cm3,  //C10
-						     46542.48*CLHEP::cm3,  //D4
-						     1292.80*CLHEP::cm3,   //E1
-						     1244.11*CLHEP::cm3,   //E2
-						     776.24*CLHEP::cm3,    //E3
-						     468.36*CLHEP::cm3};   //E4
+const double TileDetDescrManager::vItcGapCells[6] = {13461.47*GeoModelKernelUnits::cm3,  //C10
+						     46542.48*GeoModelKernelUnits::cm3,  //D4
+						     1292.80*GeoModelKernelUnits::cm3,   //E1
+						     1244.11*GeoModelKernelUnits::cm3,   //E2
+						     776.24*GeoModelKernelUnits::cm3,    //E3
+						     468.36*GeoModelKernelUnits::cm3};   //E4
diff --git a/TileCalorimeter/TileDetDescr/src/TileDetDescrManager.cxx b/TileCalorimeter/TileDetDescr/src/TileDetDescrManager.cxx
index e5a23993e0bb9e1637563b97dde0e6ef9c8c0667..b16acb26272a3dc8bc162fd66719e2348626db2c 100755
--- a/TileCalorimeter/TileDetDescr/src/TileDetDescrManager.cxx
+++ b/TileCalorimeter/TileDetDescr/src/TileDetDescrManager.cxx
@@ -5,6 +5,7 @@
 #include "TileDetDescr/TileDetDescrManager.h"
 #include "TileDetDescr/TileDddbManager.h"
 #include "TileDetDescr/TileCellDim.h"
+#include "GeoModelKernel/Units.h"
 
 #include "CaloDetDescr/CaloDetDescriptor.h"
 #include "CaloDetDescr/CaloDetectorElements.h"
@@ -488,7 +489,7 @@ void TileDetDescrManager::create_elements()
                 // come out to ~ 1e-14, the exact value varying depending
                 // on platform.  For reproducibility, force very small
                 // numbers to 0.
-                if (std::abs(z) < 1e-8 * CLHEP::mm) z = 0;
+                if (std::abs(z) < 1e-8 * GeoModelKernelUnits::mm) z = 0;
 
                 double dz = 0.5 * fabs(cell_dim->getZMax(0)     // special 
                                        -cell_dim->getZMin(0)    // calculations
@@ -569,7 +570,7 @@ void TileDetDescrManager::create_elements()
 		    m_dbManager->SetCurrentSection(TileID::EXTBAR);
 		    double epThickness = 0.0; // only used for tower == 15
 		    double epVolume    = 0.0; // only used for tower == 15
-		    if ( tower == 15 ) epThickness = m_dbManager->TILBdzend2() * CLHEP::cm;
+		    if ( tower == 15 ) epThickness = m_dbManager->TILBdzend2() * GeoModelKernelUnits::cm;
 		    
 		    double volumeInRow[5];  // book large array
 		    for (int iRow = 0; iRow < 5; iRow++) volumeInRow[iRow] = 0.;
@@ -647,12 +648,12 @@ void TileDetDescrManager::create_elements()
 				  {
 				    rowVolume = radMax + radMin;
 				    rowVolume *= (radMax - radMin);
-				    rowVolume -= 0.5*radMin*(27*CLHEP::mm);
+				    rowVolume -= 0.5*radMin*(27*GeoModelKernelUnits::mm);
 				    rowVolume *= Radius2HL *  ( deltaZ + epThickness ); // adding volume of cutted endplate
 				  }
 				else
 				  {
-				    rowVolume = radMax - radMin - 35*CLHEP::mm;
+				    rowVolume = radMax - radMin - 35*GeoModelKernelUnits::mm;
 				    rowVolume *= (radMax + radMin);
 				    rowVolume *= Radius2HL * deltaZ;
 				  }
@@ -665,8 +666,8 @@ void TileDetDescrManager::create_elements()
 			
 			if ( (ModuleNcp == 60) || (ModuleNcp == 37) )
 			  {
-			    double deltax = 38.7*std::cos(25.3125*CLHEP::deg); 
-			    double pstan  = std::tan(25.3125*CLHEP::deg);
+			    double deltax = 38.7*std::cos(25.3125*GeoModelKernelUnits::deg); 
+			    double pstan  = std::tan(25.3125*GeoModelKernelUnits::deg);
                             double inv_pstan = 1. / pstan;
 			    if ( ( 15 == tower ) )
 			      {
@@ -733,7 +734,7 @@ void TileDetDescrManager::create_elements()
 		    m_dbManager->SetCurrentSection(Id4);
 		    
 		    double standardD4dz = elt->dz();
-		    double specialD4dz = m_dbManager->TILBdzmodul()*CLHEP::cm;
+		    double specialD4dz = m_dbManager->TILBdzmodul()*GeoModelKernelUnits::cm;
 		    if ( Id4 == 8 ) specialD4dz = 0.;
 
 		    elt->set_dz(specialD4dz);
@@ -811,7 +812,7 @@ void TileDetDescrManager::create_elements()
 		    if ( Id4 == 8 )
 		      {
 			double standardD5dz = elt->dz();
-			double specialD4dz = m_dbManager->TILBdzmodul()*CLHEP::cm; 
+			double specialD4dz = m_dbManager->TILBdzmodul()*GeoModelKernelUnits::cm; 
 			elt->set_dz(specialD4dz + standardD5dz);
 			elt->set_volume(elt->volume()* (1. + specialD4dz/standardD5dz));
 			
diff --git a/TileCalorimeter/TileFastCaloSim/src/TileFCSmStepToTileHitVec.cxx b/TileCalorimeter/TileFastCaloSim/src/TileFCSmStepToTileHitVec.cxx
index b07f7c1042823c2c916bce84d208038753215835..22e8c09f06f7c341d16185435e08f4b35ad58dae 100644
--- a/TileCalorimeter/TileFastCaloSim/src/TileFCSmStepToTileHitVec.cxx
+++ b/TileCalorimeter/TileFastCaloSim/src/TileFCSmStepToTileHitVec.cxx
@@ -42,6 +42,7 @@
 // ISF_FCS_Parametrization includes
 #include "ISF_FastCaloSimEvent/FCS_StepInfoCollection.h"
 
+#include "CLHEP/Units/PhysicalConstants.h"
 
 //****************************************************************************
 //* Constructor
diff --git a/TileCalorimeter/TileG4/TileAncillary/CombinedScintillator/CMakeLists.txt b/TileCalorimeter/TileG4/TileAncillary/CombinedScintillator/CMakeLists.txt
index fd2184fe8f479f7f2c997f6b0ef42094f056c68f..a0c23421567030f53111d45f985c897d009b1cb7 100644
--- a/TileCalorimeter/TileG4/TileAncillary/CombinedScintillator/CMakeLists.txt
+++ b/TileCalorimeter/TileG4/TileAncillary/CombinedScintillator/CMakeLists.txt
@@ -6,14 +6,11 @@
 atlas_subdir( CombinedScintillator )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Calorimeter/CaloIdentifier
                           Control/CxxUtils
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Utilities/GeoMaterial2G4
@@ -23,13 +20,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( CombinedScintillator
                      src/*.cc
                      src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GeoModelKernel GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
+                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/TileCalorimeter/TileG4/TileAncillary/DeadMaterial/CMakeLists.txt b/TileCalorimeter/TileG4/TileAncillary/DeadMaterial/CMakeLists.txt
index c5268484ada7f7b397f7479b6e359931292e6b84..47ecdc25bf54f5d46b04cedf68bfe389001812a2 100644
--- a/TileCalorimeter/TileG4/TileAncillary/DeadMaterial/CMakeLists.txt
+++ b/TileCalorimeter/TileG4/TileAncillary/DeadMaterial/CMakeLists.txt
@@ -6,12 +6,9 @@
 atlas_subdir( DeadMaterial )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Utilities/GeoMaterial2G4 )
@@ -20,13 +17,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( DeadMaterial
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} StoreGateLib SGtests GeoModelKernel GaudiKernel G4AtlasToolsLib GeoMaterial2G4 )
+                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} StoreGateLib SGtests GaudiKernel G4AtlasToolsLib GeoMaterial2G4 )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/TileCalorimeter/TileG4/TileAncillary/LarCrate/CMakeLists.txt b/TileCalorimeter/TileG4/TileAncillary/LarCrate/CMakeLists.txt
index 12c900232ddf9aecf72d56cef0383aaa9784ac66..766720a412ce007b8c308ef164f9da7632d0785e 100644
--- a/TileCalorimeter/TileG4/TileAncillary/LarCrate/CMakeLists.txt
+++ b/TileCalorimeter/TileG4/TileAncillary/LarCrate/CMakeLists.txt
@@ -6,12 +6,9 @@
 atlas_subdir( LarCrate )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Utilities/GeoMaterial2G4 )
@@ -20,13 +17,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( LarCrate
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} StoreGateLib SGtests GeoModelKernel GaudiKernel G4AtlasToolsLib GeoMaterial2G4 )
+                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} StoreGateLib SGtests GaudiKernel G4AtlasToolsLib GeoMaterial2G4 )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/TileCalorimeter/TileG4/TileAncillary/MuonWall/CMakeLists.txt b/TileCalorimeter/TileG4/TileAncillary/MuonWall/CMakeLists.txt
index 61baaab34bd42b780c37626fb1f64b63feb779b5..e8ad05c8183edcf514f670f18b18c36721da92e8 100644
--- a/TileCalorimeter/TileG4/TileAncillary/MuonWall/CMakeLists.txt
+++ b/TileCalorimeter/TileG4/TileAncillary/MuonWall/CMakeLists.txt
@@ -6,14 +6,11 @@
 atlas_subdir( MuonWall )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Calorimeter/CaloIdentifier
                           Control/CxxUtils
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Utilities/GeoMaterial2G4
@@ -23,13 +20,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( MuonWall
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GeoModelKernel GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
+                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/TileCalorimeter/TileG4/TileAncillary/PhantomCalorimeter/CMakeLists.txt b/TileCalorimeter/TileG4/TileAncillary/PhantomCalorimeter/CMakeLists.txt
index 15ae2c982ce9b7ec9005abf9971a86123c8f7b53..e2d25967e8a18b5e42de5688e2ac7d323979af1f 100644
--- a/TileCalorimeter/TileG4/TileAncillary/PhantomCalorimeter/CMakeLists.txt
+++ b/TileCalorimeter/TileG4/TileAncillary/PhantomCalorimeter/CMakeLists.txt
@@ -6,14 +6,11 @@
 atlas_subdir( PhantomCalorimeter )
 
 # Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          
-                          PRIVATE
+atlas_depends_on_subdirs( PRIVATE
                           Calorimeter/CaloIdentifier
                           Control/CxxUtils
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           Simulation/G4Atlas/G4AtlasTools
                           Simulation/G4Utilities/GeoMaterial2G4
@@ -23,13 +20,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( Geant4 )
 find_package( XercesC )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( PhantomCalorimeter
                      src/*.cc
                      src/components/*.cxx
-                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GeoModelKernel GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
+                     INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${GEANT4_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} CaloIdentifier CxxUtils StoreGateLib SGtests GaudiKernel G4AtlasToolsLib GeoMaterial2G4 TileSimEvent )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/TileCalorimeter/TileG4/TileGeoG4Calib/src/TileGeoG4DMLookupBuilder.cc b/TileCalorimeter/TileG4/TileGeoG4Calib/src/TileGeoG4DMLookupBuilder.cc
index 3eed38ebd4cc9c43ba5ae2cc669e84676198c1b0..eceab515f85a159749fe765b0ded6b5f81e99aca 100644
--- a/TileCalorimeter/TileG4/TileGeoG4Calib/src/TileGeoG4DMLookupBuilder.cc
+++ b/TileCalorimeter/TileG4/TileGeoG4Calib/src/TileGeoG4DMLookupBuilder.cc
@@ -37,6 +37,7 @@
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 
 #include "G4ios.hh"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 /////////// C O N S T R U C T O R
 
diff --git a/TileCalorimeter/TileGeoModel/CMakeLists.txt b/TileCalorimeter/TileGeoModel/CMakeLists.txt
index 06634042e0998522689a161968f977986bb04ccc..dc2579f6f3ff5046ed8396ac383bd0f39f36bb8d 100644
--- a/TileCalorimeter/TileGeoModel/CMakeLists.txt
+++ b/TileCalorimeter/TileGeoModel/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( TileGeoModel )
 atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
                           DetectorDescription/GeoModel/GeoModelInterfaces
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
                           TileCalorimeter/TileDetDescr
                           PRIVATE
@@ -24,21 +23,21 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
-find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( TileGeoModelLib
                    src/*.cxx
                    PUBLIC_HEADERS TileGeoModel
-                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-                   LINK_LIBRARIES GeoModelKernel GeoModelUtilities TileDetDescr StoreGateLib SGtests CaloDetDescrLib TileConditionsLib
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} CaloIdentifier SGTools GaudiKernel TileIdentifier )
+                   PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GeoModelUtilities TileDetDescr StoreGateLib SGtests CaloDetDescrLib TileConditionsLib
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${EIGEN_LIBRARIES} CaloIdentifier SGTools GaudiKernel TileIdentifier )
 
 atlas_add_component( TileGeoModel
                      src/components/*.cxx
-                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
                      LINK_LIBRARIES TileGeoModelLib )
 
 
diff --git a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx
index 181b7eec90fcdd263038e197d0ee3cffb48b8545..474e46831704b109612d53573e526a7de066f846 100755
--- a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx
@@ -25,12 +25,14 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 //#include "GeoModelKernel/GeoCutVolAction.h"
 //#include "GeoModelKernel/GeoSimplePolygonBrep.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoXF.h" 
 #include "GeoModelKernel/GeoSerialTransformer.h"
 
@@ -46,7 +48,7 @@
 #include <cmath>
 #include <string>
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
 // Constructor:
@@ -85,13 +87,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   //int   NcpFrom = 34, NcpPlus = 29; // ext.barrel, special
 
   double deltaPhi = 360./64; // we know apriory that 64 modules makes full cylinder 
-  double AnglMin = (NcpFrom-1)*deltaPhi*CLHEP::deg, AnglMax = (NcpPlus+1)*deltaPhi*CLHEP::deg;
+  double AnglMin = (NcpFrom-1)*deltaPhi*GeoModelKernelUnits::deg, AnglMax = (NcpPlus+1)*deltaPhi*GeoModelKernelUnits::deg;
 
   // phi range of modules with special C10
-  // double AnglMin1 = 38. * deltaPhi*CLHEP::deg;
-  // double AnglMax1 = 42. * deltaPhi*CLHEP::deg;
-  // double AnglMin2 = 54. * deltaPhi*CLHEP::deg;
-  // double AnglMax2 = 58. * deltaPhi*CLHEP::deg;
+  // double AnglMin1 = 38. * deltaPhi*GeoModelKernelUnits::deg;
+  // double AnglMax1 = 42. * deltaPhi*GeoModelKernelUnits::deg;
+  // double AnglMin2 = 54. * deltaPhi*GeoModelKernelUnits::deg;
+  // double AnglMax2 = 58. * deltaPhi*GeoModelKernelUnits::deg;
 
   (*m_log) << MSG::INFO <<" Entering TileAtlasFactory::create()" << endmsg;
 
@@ -116,8 +118,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
      dbManager->SetCurrentSaddle(0);
 
-     DzSaddleSupport = dbManager->DzSaddleSupport()*CLHEP::cm;
-     RadiusSaddle = dbManager->RadiusSaddle()*CLHEP::cm;
+     DzSaddleSupport = dbManager->DzSaddleSupport()*GeoModelKernelUnits::cm;
+     RadiusSaddle = dbManager->RadiusSaddle()*GeoModelKernelUnits::cm;
      if(m_log->level()<=MSG::DEBUG)
        (*m_log) << MSG::DEBUG << " DzSaddleSupport()= "<<DzSaddleSupport<<" RadiusSaddle= "<<RadiusSaddle
 		<< endmsg;
@@ -166,7 +168,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
   // Barrel finger 
   dbManager->SetCurrentTifg(1);
-  BFingerLength  = BFingerLengthNeg  = BFingerLengthPos  = dbManager->TIFGdz()*CLHEP::cm;
+  BFingerLength  = BFingerLengthNeg  = BFingerLengthPos  = dbManager->TIFGdz()*GeoModelKernelUnits::cm;
 
   double EBFingerLength =0;
   double EBFingerLengthNeg =0;
@@ -174,7 +176,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
   // EBarrel finger 
   dbManager->SetCurrentTifg(2);
-  EBFingerLength = EBFingerLengthNeg = EBFingerLengthPos = dbManager->TIFGdz()*CLHEP::cm;
+  EBFingerLength = EBFingerLengthNeg = EBFingerLengthPos = dbManager->TIFGdz()*GeoModelKernelUnits::cm;
 
   int n_env = dbManager->GetNumberOfEnv();
   
@@ -194,13 +196,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     if (Type == 3) EBA = true;
     */
 
-    ZLength  [Type] = dbManager->GetEnvZLength()*CLHEP::cm;
-    EnvDZPos [Type] = dbManager->GetEnvDZ()*CLHEP::cm;
+    ZLength  [Type] = dbManager->GetEnvZLength()*GeoModelKernelUnits::cm;
+    EnvDZPos [Type] = dbManager->GetEnvDZ()*GeoModelKernelUnits::cm;
     PhiMin   [Type] = std::min(PhiMin[Type], dbManager->GetEnvDPhi());
     PhiMax   [Type] = std::max(PhiMax[Type], dbManager->GetEnvNModules()*deltaPhi + dbManager->GetEnvDPhi());
-    RInMin   [Type] = std::min(RInMin[Type], dbManager->GetEnvRin()*CLHEP::cm);
-    ROutMax  [Type] = std::max(ROutMax[Type],dbManager->GetEnvRout()*CLHEP::cm);
-    FingerRmax         = std::max(FingerRmax,dbManager->GetEnvRout()*CLHEP::cm);
+    RInMin   [Type] = std::min(RInMin[Type], dbManager->GetEnvRin()*GeoModelKernelUnits::cm);
+    ROutMax  [Type] = std::max(ROutMax[Type],dbManager->GetEnvRout()*GeoModelKernelUnits::cm);
+    FingerRmax         = std::max(FingerRmax,dbManager->GetEnvRout()*GeoModelKernelUnits::cm);
 
     //std::cout << "# Type " <<Type<< " ZLength " <<ZLength [Type]<< " EnvDZPos "<<EnvDZPos [Type]<< "\n"; 
   }
@@ -271,9 +273,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   /** setfinger length */
   double BFingerRmin=0, EFingerRmin=0;
   dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL);
-  BFingerRmin = dbManager->TILBrmax()*CLHEP::cm;
+  BFingerRmin = dbManager->TILBrmax()*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
-  EFingerRmin = dbManager->TILBrmax()*CLHEP::cm;
+  EFingerRmin = dbManager->TILBrmax()*GeoModelKernelUnits::cm;
   
   /** calculation PosEnvThickness enlarge mother volume by extra distance between barrel and positive ext.barrel */
   dbManager->SetCurrentEnvByType(3);
@@ -299,7 +301,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   // R maximal
   double rmaxTotal = ROutMax[1];
     
-  GeoPcon* tileEnvPconeBarrel = new GeoPcon(PhiMin[1]*CLHEP::deg, PhiMax[1]*CLHEP::deg);
+  GeoPcon* tileEnvPconeBarrel = new GeoPcon(PhiMin[1]*GeoModelKernelUnits::deg, PhiMax[1]*GeoModelKernelUnits::deg);
 
    tileEnvPconeBarrel->addPlane(-endEnvelopeNeg,                   BFingerRmin,             rmaxTotal);
    tileEnvPconeBarrel->addPlane(-endCentralBarrel-DzSaddleSupport, BFingerRmin,             rmaxTotal);
@@ -342,7 +344,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   }
 
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-  double PosEndITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double PosEndITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   double corr = PosEndITC - PosEndITC1;
   if (fabs(corr)>0.01) {
      (*m_log) << MSG::WARNING
@@ -351,19 +353,19 @@ void TileAtlasFactory::create(GeoPhysVol *world)
               <<endmsg;
   }
 
-  //double beginITC1   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  //double beginITC1   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-  double PosBeginITC2  = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double PosBeginITC2  = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
-  double PosBeginGap = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
-  double PosEndGap   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double PosBeginGap = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+  double PosEndGap   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-  double PosBeginCrack = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
-  double PosEndCrack   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double PosBeginCrack = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+  double PosEndCrack   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
 
   if (!spC10) { // recovering old (wrong) positioning of gap scintillators
     double GapWidth = PosEndGap - PosBeginGap;
-    PosBeginGap = PosBeginCrack + 0.9 * CLHEP::cm;
+    PosBeginGap = PosBeginCrack + 0.9 * GeoModelKernelUnits::cm;
     PosEndGap   = PosBeginGap + GapWidth;
   }
   
@@ -377,11 +379,11 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   
   // R minimals 
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-  double PosRminITC1  = dbManager->TILBrminimal()*CLHEP::cm;
+  double PosRminITC1  = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-  double PosRminITC   = rMinC10 /* dbManager->TILBrminimal() */ *CLHEP::cm;
+  double PosRminITC   = rMinC10 /* dbManager->TILBrminimal() */ *GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-  double PosRminCrack = rMinE4pos*CLHEP::cm;
+  double PosRminCrack = rMinE4pos*GeoModelKernelUnits::cm;
 
   double PosRminExt = RInMin[3];
     
@@ -397,7 +399,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
              << " PosRmaxTotal = " << PosRmaxTotal
 	     << endmsg;
 
-  GeoPcon* tileEnvPconePosEndcap = new GeoPcon(PhiMin[3]*CLHEP::deg, PhiMax[3]*CLHEP::deg);
+  GeoPcon* tileEnvPconePosEndcap = new GeoPcon(PhiMin[3]*GeoModelKernelUnits::deg, PhiMax[3]*GeoModelKernelUnits::deg);
 
   // Positive Endcap 
   tileEnvPconePosEndcap->addPlane(PosEndBarrelFinger,             PosRminITC1,              PosRmaxTotal);
@@ -442,7 +444,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
   }
 
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-  double NegEndITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double NegEndITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   corr = NegEndITC - NegEndITC1;
 
   if (fabs(corr)>0.01) { (*m_log) << MSG::WARNING
@@ -450,19 +452,19 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                   << NegEndITC << " != " << NegEndITC1 << "; take this into account" 
                                   << endmsg;
     }
-  //double NegBeginITC1 = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  //double NegBeginITC1 = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-  double NegBeginITC2   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double NegBeginITC2   = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
-  double NegBeginGap    = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
-  double NegEndGap      = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double NegBeginGap    = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+  double NegEndGap      = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-  double NegBeginCrack  = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*CLHEP::cm;
-  double NegEndCrack    = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*CLHEP::cm;
+  double NegBeginCrack  = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+  double NegEndCrack    = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()+dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
 
   if (!spC10) { // recovering old (wrong) positioning of gap scintillators
     double GapWidth = NegEndGap - NegBeginGap;
-    NegBeginGap = NegBeginCrack + 0.9 * CLHEP::cm;
+    NegBeginGap = NegBeginCrack + 0.9 * GeoModelKernelUnits::cm;
     NegEndGap = NegBeginGap + GapWidth;
   }
   
@@ -476,11 +478,11 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
   // R minimals 
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-  double NegRminITC1 = dbManager->TILBrminimal()*CLHEP::cm;
+  double NegRminITC1 = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-  double NegRminITC = rMinC10 /* dbManager->TILBrminimal() */ *CLHEP::cm;
+  double NegRminITC = rMinC10 /* dbManager->TILBrminimal() */ *GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-  double NegRminCrack = rMinE4neg*CLHEP::cm;
+  double NegRminCrack = rMinE4neg*GeoModelKernelUnits::cm;
   dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
 
   double NegRminExt = RInMin[2];
@@ -497,7 +499,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
              << " NegRmaxTotal = " << NegRmaxTotal
 	     << endmsg;
 
-  GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(PhiMin[2]*CLHEP::deg, PhiMax[2]*CLHEP::deg);
+  GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(PhiMin[2]*GeoModelKernelUnits::deg, PhiMax[2]*GeoModelKernelUnits::deg);
 
   // Negative Endcap 
   tileEnvPconeNegEndcap->addPlane(-NegEndExtBarrelFinger,          EFingerRmin,              NegRmaxTotal);
@@ -527,8 +529,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	      - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) 
 		 -  dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1));
 
-    sectionBuilder->setBarrelPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*CLHEP::cm);
-    sectionBuilder->setBarrelGlue(dzGlue*CLHEP::cm);
+    sectionBuilder->setBarrelPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*GeoModelKernelUnits::cm);
+    sectionBuilder->setBarrelGlue(dzGlue*GeoModelKernelUnits::cm);
 
     // Ext barrel part
     dbManager->SetCurrentSectionByNumber(2);
@@ -536,20 +538,20 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
 	      - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
 
-    sectionBuilder->setExtendedPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*CLHEP::cm);
+    sectionBuilder->setExtendedPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*GeoModelKernelUnits::cm);
   }
 
-  GeoPhysVol *pvBarrelMother =NULL,     *pvFingerMotherNeg =NULL, *pvFingerMotherPos =NULL, 
-             *pvSaddleMotherNeg =NULL,  *pvSaddleMotherPos =NULL;
-  GeoPhysVol *pvEBarrelMotherNeg =NULL, *pvEBarrelMotherPos =NULL;
-  GeoPhysVol *pvEFingerMotherNeg =NULL, *pvEFingerMotherPos =NULL,
-             *pvESaddleMotherNeg =NULL, *pvESaddleMotherPos =NULL;
-  GeoPhysVol *pvITCMotherNeg =NULL,     *pvITCMotherPos =NULL;
-  GeoPhysVol *pvGapMotherNeg =NULL,     *pvGapMotherPos =NULL;
-  GeoPhysVol *pvCrackMotherNeg =NULL,   *pvCrackMotherPos =NULL;
+  GeoPhysVol *pvBarrelMother{nullptr},     *pvFingerMotherNeg{nullptr}, *pvFingerMotherPos{nullptr}, 
+             *pvSaddleMotherNeg{nullptr},  *pvSaddleMotherPos{nullptr};
+  GeoPhysVol *pvEBarrelMotherNeg{nullptr}, *pvEBarrelMotherPos{nullptr};
+  GeoPhysVol *pvEFingerMotherNeg{nullptr}, *pvEFingerMotherPos{nullptr},
+             *pvESaddleMotherNeg{nullptr}, *pvESaddleMotherPos{nullptr};
+  GeoPhysVol *pvITCMotherNeg{nullptr},     *pvITCMotherPos{nullptr};
+  GeoPhysVol *pvGapMotherNeg{nullptr},     *pvGapMotherPos{nullptr};
+  GeoPhysVol *pvCrackMotherNeg{nullptr},   *pvCrackMotherPos{nullptr};
 
-  GeoLogVol  *lvEBarrelModuleMotherPos =NULL, *lvEBarrelModuleMotherNeg =NULL;
-  GeoPhysVol *pvEBarrelModuleMotherPos =NULL, *pvEBarrelModuleMotherNeg =NULL;
+  GeoLogVol  *lvEBarrelModuleMotherPos{nullptr}, *lvEBarrelModuleMotherNeg{nullptr};
+  GeoPhysVol *pvEBarrelModuleMotherPos{nullptr}, *pvEBarrelModuleMotherNeg{nullptr};
 
   /*
   GeoPhysVol *pvTmp_EBarrelModuleMotherPos =0,*pvTmL_EBarrelModuleMotherPos =0,*pvTmR_EBarrelModuleMotherPos =0;
@@ -651,7 +653,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       checking("Cut2down", false, 1, dX1,dX2,dY1,dY2,dZ2);
       GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2);
  
-      HepGeom::Translate3D yPosA(0.,0.,-dZ1-dZ2);
+      GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2);
       
       const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA);
       CutA = &CutA1;
@@ -772,8 +774,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       // nominal position of end plate
       zEndSection = ZLength[1]/2 - BFingerLength;
 
-      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*CLHEP::cm,
-					   dbManager->GetEnvRout()*CLHEP::cm,
+      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*GeoModelKernelUnits::cm,
+					   dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
 					   zEndSection,
 					   AnglMin, AnglMax);
 
@@ -784,13 +786,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       if(m_log->level()<=MSG::DEBUG)
 	(*m_log) << MSG::DEBUG << "Barrel envelope parameters: " 
 		 << " Length=" << zEndSection
-		 << " Rmin=" << dbManager->GetEnvRin()*CLHEP::cm
-		 << " Rmax=" << dbManager->GetEnvRout()*CLHEP::cm
+		 << " Rmin=" << dbManager->GetEnvRin()*GeoModelKernelUnits::cm
+		 << " Rmax=" << dbManager->GetEnvRout()*GeoModelKernelUnits::cm
 		 << endmsg;
       
       // Envelopes for two barrel fingers, positive finger 
       GeoTubs* fingerMotherPos = new GeoTubs(BFingerRmin,
-                                             dbManager->GetEnvRout()*CLHEP::cm,
+                                             dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
                                              BFingerLengthPos/2,
                                              AnglMin, AnglMax);
 
@@ -810,7 +812,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
        // Negative finger
        GeoTubs* fingerMotherNeg = new GeoTubs(BFingerRmin,
-                                              dbManager->GetEnvRout()*CLHEP::cm,
+                                              dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
                                               BFingerLengthNeg/2,
                                               AnglMin, AnglMax);
 
@@ -820,7 +822,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
        if(m_log->level()<=MSG::DEBUG)
 	 (*m_log) << MSG::DEBUG << "Barrel finger envelope parameters: " 
 		  << " length Pos/Neg=" << BFingerLengthPos << "/" << BFingerLengthNeg
-		  << " Rmin=" << BFingerRmin << " Rmax=" << dbManager->GetEnvRout()*CLHEP::cm
+		  << " Rmin=" << BFingerRmin << " Rmax=" << dbManager->GetEnvRout()*GeoModelKernelUnits::cm
 		  << endmsg;
 
        // Envelopes for two barrel saddle supports, positive
@@ -838,15 +840,15 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     if(EnvType == 3) {   
 
       if(m_log->level()<=MSG::DEBUG)
-	(*m_log) << MSG::DEBUG <<" EBarrelPos DZ "<<(dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2<< endmsg;
+	(*m_log) << MSG::DEBUG <<" EBarrelPos DZ "<<(dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2<< endmsg;
 
       checking("EBarrel (+)", false, 0, 
-               dbManager->GetEnvRin()*CLHEP::cm,dbManager->GetEnvRout()*CLHEP::cm,
-               AnglMin,AnglMax,(dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2);
+               dbManager->GetEnvRin()*GeoModelKernelUnits::cm,dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+               AnglMin,AnglMax,(dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2);
 
-      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*CLHEP::cm,
-					   dbManager->GetEnvRout()*CLHEP::cm,
-					   (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2,
+      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*GeoModelKernelUnits::cm,
+					   dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2,
 					   AnglMin, AnglMax);
 
       GeoTubs* ebarrelMotherPos = GeneralMother;
@@ -855,18 +857,18 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       if(m_log->level()<=MSG::DEBUG)
 	(*m_log) << MSG::DEBUG << "Positive ext.barrel envelope parameters: " 
-		 << " length=" << (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLength)
-		 << " Rmin=" << dbManager->GetEnvRin()*CLHEP::cm
-		 << " Rmax=" << dbManager->GetEnvRout()*CLHEP::cm
+		 << " length=" << (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLength)
+		 << " Rmin=" << dbManager->GetEnvRin()*GeoModelKernelUnits::cm
+		 << " Rmax=" << dbManager->GetEnvRout()*GeoModelKernelUnits::cm
 		 << endmsg;
 
       // Envelope for finger separately
       checking("EBarrel (+)", false, 0, 
-               EFingerRmin,dbManager->GetEnvRout()*CLHEP::cm,
+               EFingerRmin,dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
                AnglMin,AnglMax, EBFingerLength/2);
 
       GeoTubs* fingerMother = new GeoTubs(EFingerRmin,
-					  dbManager->GetEnvRout()*CLHEP::cm,
+					  dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
 					  EBFingerLength/2,
 					  AnglMin, AnglMax);
 
@@ -877,7 +879,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	(*m_log) << MSG::DEBUG << "Positive ext.barrel finger envelope parameters: " 
 		 << " length=" << EBFingerLength
 		 << " Rmin=" << EFingerRmin
-		 << " Rmax=" << (dbManager->GetEnvRout())*CLHEP::cm
+		 << " Rmax=" << (dbManager->GetEnvRout())*GeoModelKernelUnits::cm
 		 << endmsg;
 
       if (dbManager->BoolSaddle())
@@ -898,11 +900,11 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     // Negative Ext.Barrel
     if(EnvType == 2) { 
       if(m_log->level()<=MSG::DEBUG)
-	(*m_log) << MSG::DEBUG <<" EBarrelNeg DZ "<<(dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthNeg)/2<< endmsg;
+	(*m_log) << MSG::DEBUG <<" EBarrelNeg DZ "<<(dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthNeg)/2<< endmsg;
 
-      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*CLHEP::cm,
-					   dbManager->GetEnvRout()*CLHEP::cm,
-					   (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthNeg)/2,
+      GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*GeoModelKernelUnits::cm,
+					   dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthNeg)/2,
 					   AnglMin, AnglMax);
 
       GeoTubs* ebarrelMotherNeg = GeneralMother;
@@ -911,14 +913,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       
       if(m_log->level()<=MSG::DEBUG)
 	(*m_log) << MSG::DEBUG << "Nevative ext.barrel envelope parameters: " 
-		 << " length=" << (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLength)
-		 << " Rmin=" << dbManager->GetEnvRin()*CLHEP::cm
-		 << " Rmax=" << dbManager->GetEnvRout()*CLHEP::cm
+		 << " length=" << (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLength)
+		 << " Rmin=" << dbManager->GetEnvRin()*GeoModelKernelUnits::cm
+		 << " Rmax=" << dbManager->GetEnvRout()*GeoModelKernelUnits::cm
 		 << endmsg;
 
       // Envelope for finger separately
       GeoTubs* fingerMother = new GeoTubs(EFingerRmin,
-					  dbManager->GetEnvRout()*CLHEP::cm,
+					  dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
 					  EBFingerLengthNeg/2,
 					  AnglMin, AnglMax);
       
@@ -929,7 +931,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	(*m_log) << MSG::DEBUG <<"Negative ext.barrel finger envelope parameters: " 
 		 << " length=" << EBFingerLengthNeg
 		 << " Rmin=" << EFingerRmin
-		 << " Rmax=" << dbManager->GetEnvRout()*CLHEP::cm
+		 << " Rmax=" << dbManager->GetEnvRout()*GeoModelKernelUnits::cm
 		 << endmsg;
 
       if (dbManager->BoolSaddle())
@@ -963,28 +965,28 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dzITC1   = dbManager->TILBdzmodul();
       
       (*m_log) << MSG::INFO << " Positive ITC envelope parameters: PLUG1 " 
-               <<" Rmin= "<<rMinITC1*CLHEP::cm<<" Rmax= "<<rMaxITC1*CLHEP::cm<<" dzITC1= "<<dzITC1/2*CLHEP::cm<< endmsg;
+               <<" Rmin= "<<rMinITC1*GeoModelKernelUnits::cm<<" Rmax= "<<rMaxITC1*GeoModelKernelUnits::cm<<" dzITC1= "<<dzITC1/2*GeoModelKernelUnits::cm<< endmsg;
       (*m_log) << MSG::INFO << "                                   PLUG2 "
-               <<" Rmin= "<<rMinITC2*CLHEP::cm<<" Rmax= "<<rMaxITC2*CLHEP::cm<<" dzITC2= "<<dzITC2/2*CLHEP::cm<< endmsg;
+               <<" Rmin= "<<rMinITC2*GeoModelKernelUnits::cm<<" Rmax= "<<rMaxITC2*GeoModelKernelUnits::cm<<" dzITC2= "<<dzITC2/2*GeoModelKernelUnits::cm<< endmsg;
 
       checking("ITC itcWheel1 (+)", false, 0, 
-               rMinITC1*CLHEP::cm,rMaxITC1*CLHEP::cm, AnglMin,AnglMax, dzITC1/2*CLHEP::cm);
+               rMinITC1*GeoModelKernelUnits::cm,rMaxITC1*GeoModelKernelUnits::cm, AnglMin,AnglMax, dzITC1/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*CLHEP::cm,
-                                       rMaxITC1*CLHEP::cm,
-                                       dzITC1/2*CLHEP::cm,
+      GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*GeoModelKernelUnits::cm,
+                                       rMaxITC1*GeoModelKernelUnits::cm,
+                                       dzITC1/2*GeoModelKernelUnits::cm,
                                        AnglMin, AnglMax);
 
       checking("ITC itcWheel2 (+)", false, 0,
-               rMinITC2*CLHEP::cm,rMaxITC2*CLHEP::cm, AnglMin,AnglMax, dzITC2/2*CLHEP::cm);
+               rMinITC2*GeoModelKernelUnits::cm,rMaxITC2*GeoModelKernelUnits::cm, AnglMin,AnglMax, dzITC2/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* itcWheel2 = new GeoTubs(rMinITC2*CLHEP::cm,
-                                       rMaxITC2*CLHEP::cm,
-                                       dzITC2/2*CLHEP::cm,
+      GeoTubs* itcWheel2 = new GeoTubs(rMinITC2*GeoModelKernelUnits::cm,
+                                       rMaxITC2*GeoModelKernelUnits::cm,
+                                       dzITC2/2*GeoModelKernelUnits::cm,
                                        AnglMin, AnglMax);
       
-      Z = ( dzITC1 - dzITC2)/2*CLHEP::cm;
-      HepGeom::Translate3D itcWheel2OffsetPos(0.,0., Z);
+      Z = ( dzITC1 - dzITC2)/2*GeoModelKernelUnits::cm;
+      GeoTrf::Translate3D itcWheel2OffsetPos(0.,0., Z);
 
       zITCStandard = Z;
 
@@ -997,13 +999,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
 
       checking("Gap (+)", false, 0, 
-              dbManager->TILBrminimal()*CLHEP::cm,
-              dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*CLHEP::cm);
+              dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+              dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* GapMotherPos = new GeoTubs(dbManager->TILBrminimal()*CLHEP::cm,
-	                                  dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-                                          dbManager->TILBdzmodul()/2*CLHEP::cm,
+      GeoTubs* GapMotherPos = new GeoTubs(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+	                                  dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+                                          dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm,
                                           AnglMin, AnglMax);
 
       GeoLogVol* lvGapMotherPos = new GeoLogVol("Gap",GapMotherPos,matAir);
@@ -1013,13 +1015,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
 
       checking("Crack (+)", spE4, 0, 
-              rMinE4pos*CLHEP::cm,
-              dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*CLHEP::cm);
+              rMinE4pos*GeoModelKernelUnits::cm,
+              dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* crackMotherPos = new GeoTubs(rMinE4pos*CLHEP::cm,
-				            dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-				            dbManager->TILBdzmodul()/2*CLHEP::cm,
+      GeoTubs* crackMotherPos = new GeoTubs(rMinE4pos*GeoModelKernelUnits::cm,
+				            dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+				            dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm,
                                             AnglMin, AnglMax);
     
       GeoLogVol* lvCrackMotherPos = new GeoLogVol("Crack",crackMotherPos,matAir);
@@ -1042,28 +1044,28 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dzITC1   = dbManager->TILBdzmodul();
       
       (*m_log) << MSG::INFO << " Negative ITC envelope parameters: PLUG1 " 
-               <<" Rmin= "<<rMinITC1*CLHEP::cm<<" Rmax= "<<rMaxITC1*CLHEP::cm<<" dzITC1= "<<dzITC1/2*CLHEP::cm<<endmsg;
+               <<" Rmin= "<<rMinITC1*GeoModelKernelUnits::cm<<" Rmax= "<<rMaxITC1*GeoModelKernelUnits::cm<<" dzITC1= "<<dzITC1/2*GeoModelKernelUnits::cm<<endmsg;
       (*m_log) << MSG::INFO << "                                   PLUG2 "
-               <<" Rmin= "<<rMinITC2*CLHEP::cm<<" Rmax= "<<rMaxITC2*CLHEP::cm<<" dzITC2= "<<dzITC2/2*CLHEP::cm<<endmsg;
+               <<" Rmin= "<<rMinITC2*GeoModelKernelUnits::cm<<" Rmax= "<<rMaxITC2*GeoModelKernelUnits::cm<<" dzITC2= "<<dzITC2/2*GeoModelKernelUnits::cm<<endmsg;
 
       checking("ITC itcWheel1 (-)", false, 0, 
-               rMinITC1*CLHEP::cm,rMaxITC1*CLHEP::cm, AnglMin,AnglMax, dzITC1/2*CLHEP::cm);
+               rMinITC1*GeoModelKernelUnits::cm,rMaxITC1*GeoModelKernelUnits::cm, AnglMin,AnglMax, dzITC1/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*CLHEP::cm,
-                                       rMaxITC1*CLHEP::cm,
-                                       dzITC1/2*CLHEP::cm,
+      GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*GeoModelKernelUnits::cm,
+                                       rMaxITC1*GeoModelKernelUnits::cm,
+                                       dzITC1/2*GeoModelKernelUnits::cm,
                                        AnglMin, AnglMax);
 
       checking("ITC itcWheel2 (-)", false, 0,
-               rMinITC2*CLHEP::cm,rMaxITC2*CLHEP::cm, AnglMin,AnglMax, dzITC2/2*CLHEP::cm);
+               rMinITC2*GeoModelKernelUnits::cm,rMaxITC2*GeoModelKernelUnits::cm, AnglMin,AnglMax, dzITC2/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* itcWheel2 = new GeoTubs(rMinITC2*CLHEP::cm,
-                                       rMaxITC2*CLHEP::cm,
-                                       dzITC2/2*CLHEP::cm,
+      GeoTubs* itcWheel2 = new GeoTubs(rMinITC2*GeoModelKernelUnits::cm,
+                                       rMaxITC2*GeoModelKernelUnits::cm,
+                                       dzITC2/2*GeoModelKernelUnits::cm,
                                        AnglMin, AnglMax);
 
-      Z = (-dzITC1 + dzITC2)/2*CLHEP::cm;
-      HepGeom::Translate3D itcWheel2OffsetNeg(0.,0., Z);
+      Z = (-dzITC1 + dzITC2)/2*GeoModelKernelUnits::cm;
+      GeoTrf::Translate3D itcWheel2OffsetNeg(0.,0., Z);
 
       zITCStandard = Z;
 
@@ -1076,13 +1078,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
 
       checking("Gap (-)", false, 1, 
-              dbManager->TILBrminimal()*CLHEP::cm,
-              dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*CLHEP::cm);
+              dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+              dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* GapMotherNeg = new GeoTubs(dbManager->TILBrminimal()*CLHEP::cm,
-	                                  dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-                                          dbManager->TILBdzmodul()/2*CLHEP::cm,
+      GeoTubs* GapMotherNeg = new GeoTubs(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+	                                  dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+                                          dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm,
                                           AnglMin, AnglMax);
 
       GeoLogVol* lvGapMotherNeg = new GeoLogVol("Gap",GapMotherNeg,matAir);
@@ -1092,13 +1094,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
   
       checking("Crack (-)", spE4, 0, 
-              rMinE4neg*CLHEP::cm,
-              dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*CLHEP::cm);
+              rMinE4neg*GeoModelKernelUnits::cm,
+              dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+              AnglMin,AnglMax, dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm);
 
-      GeoTubs* crackMotherNeg = new GeoTubs(rMinE4neg*CLHEP::cm,
-				            dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2*CLHEP::deg),
-				            dbManager->TILBdzmodul()/2*CLHEP::cm,
+      GeoTubs* crackMotherNeg = new GeoTubs(rMinE4neg*GeoModelKernelUnits::cm,
+				            dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2*GeoModelKernelUnits::deg),
+				            dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm,
                                             AnglMin, AnglMax);
     
       GeoLogVol* lvCrackMotherNeg = new GeoLogVol("Crack",crackMotherNeg,matAir);
@@ -1117,9 +1119,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     // the main loop around all phi modules position
     int ModuleNcp =0;
 
-    GeoTransform* yrotMod = new GeoTransform(HepGeom::RotateY3D(90*CLHEP::deg));
+    GeoTransform* yrotMod = new GeoTransform(GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg));
     yrotMod->ref();
-    GeoTransform* XYrtMod = new GeoTransform(HepGeom::RotateX3D(180*CLHEP::deg) * HepGeom::RotateY3D(90*CLHEP::deg));
+    GeoTransform* XYrtMod = new GeoTransform(GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg));
     XYrtMod->ref();
 
     for(int ModCounter = 0; ModCounter < NumberOfMod; ModCounter++){
@@ -1130,9 +1132,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       double phi = (double(ModuleNcp-1) + 0.5)*deltaPhi;
       double ph1 = (double(ModuleNcp-1))*deltaPhi;
 
-      GeoTransform* zrotMod = new GeoTransform(HepGeom::RotateZ3D(phi*CLHEP::deg));
+      GeoTransform* zrotMod = new GeoTransform(GeoTrf::RotateZ3D(phi*GeoModelKernelUnits::deg));
       zrotMod->ref();
-      GeoTransform* zrotSaddle =  new GeoTransform(HepGeom::RotateZ3D(ph1*CLHEP::deg));
+      GeoTransform* zrotSaddle =  new GeoTransform(GeoTrf::RotateZ3D(ph1*GeoModelKernelUnits::deg));
       zrotSaddle->ref();
 
       dbManager->SetCurrentModuleByIndex(ModuleNcp-1);
@@ -1159,10 +1161,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
 	dbManager->SetCurrentSectionByNumber(ModType);
 
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm; 
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm; 
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
        
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
                - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) 
@@ -1186,8 +1188,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 				      deltaPhi); 
 	}
        
-        GeoTransform* xtraMod = new GeoTransform(HepGeom::TranslateX3D(
-                                    (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * CLHEP::cm));
+        GeoTransform* xtraMod = new GeoTransform(GeoTrf::TranslateX3D(
+                                    (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * GeoModelKernelUnits::cm));
 
         pvBarrelMother->add(zrotMod);
         pvBarrelMother->add(xtraMod);
@@ -1201,9 +1203,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	dbManager->SetCurrentTifg(1);  // Barrel finger 
         zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2;
 
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax())*CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*CLHEP::deg)*CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*CLHEP::deg)*CLHEP::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax())*GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg)*GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg)*GeoModelKernelUnits::cm;
 
 	// Finger Positive, positioning (only Left ModFingpattern == 10) 
 	if ( ModFingpattern != 10 ) {
@@ -1223,9 +1225,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 				       deltaPhi,
 				       m_testbeamGeometry,
 				       ModuleNcp,
-				       BFingerLengthPos*(1./CLHEP::cm)); 
+				       BFingerLengthPos*(1./GeoModelKernelUnits::cm)); 
 
-	  GeoTransform* xtraModFingerPos  = new GeoTransform(HepGeom::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*CLHEP::cm));
+	  GeoTransform* xtraModFingerPos  = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*GeoModelKernelUnits::cm));
 
           //(*m_log) << MSG::DEBUG << "R  Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg;
  
@@ -1256,9 +1258,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 				       deltaPhi,
 				       m_testbeamGeometry,
 				       ModuleNcp*100,
-				       BFingerLengthNeg*(1./CLHEP::cm));
+				       BFingerLengthNeg*(1./GeoModelKernelUnits::cm));
 
-	  GeoTransform* xtraModFingerNeg  = new GeoTransform(HepGeom::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*CLHEP::cm));
+	  GeoTransform* xtraModFingerNeg  = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*GeoModelKernelUnits::cm));
 
           // (*m_log) << MSG::DEBUG << "L  Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg;
 
@@ -1277,7 +1279,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle,
                                                 BFingerRmin,
                                                 DzSaddleSupport/2,
-                                                0.,deltaPhi*CLHEP::deg);
+                                                0.,deltaPhi*GeoModelKernelUnits::deg);
      
             GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron);
             GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule);
@@ -1300,16 +1302,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	dbManager->SetCurrentSectionByNumber(ModType);
 
         // Mother module 
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
                 - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*
                   dbManager->TILBnperiod());
         
-        double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * CLHEP::cm;
+        double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * GeoModelKernelUnits::cm;
 
         checking("EBarrelModule (+)", false, 1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1334,19 +1336,19 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	  if(m_log->level()<=MSG::DEBUG)
 	    (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg;
  
-           double PoZ2 =0, PoZ1 =0, thicknessEndPlate =dbManager->TILBdzend1()*CLHEP::cm;
+           double PoZ2 =0, PoZ1 =0, thicknessEndPlate =dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2;
+           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2;
            PoZ2 = PoZ1 + modl_length/4;
 
            if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))
-	    { HepGeom::Transform3D  TransCut2 = HepGeom::TranslateZ3D(-Radius) * HepGeom::RotateX3D((90-phi)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg)
-                                        * HepGeom::Translate3D(-PoZ2,0.,-PosY);
+	    { GeoTrf::Transform3D  TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)
+                                        * GeoTrf::Translate3D(-PoZ2,0.,-PosY);
  
               if (ModuleNcp>=60 && ModuleNcp<=62)
-	       { HepGeom::Transform3D TransCutL = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,PosYcut,-PosXcut);
+	       { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut);
 
                  // Cuting of module (Left)
                  const GeoShape& TmL_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2).
@@ -1355,9 +1357,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                  lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherPos,matAir);
 
                } else if (ModuleNcp>=35 && ModuleNcp<=37) 
-	       { HepGeom::Transform3D TransCutR = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,PosYcut,PosXcut) * HepGeom::RotateY3D(180*CLHEP::deg);
+	       { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
 
                  // Cuting of module (Right)
                  const GeoShape& TmR_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2).
@@ -1384,7 +1386,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                       ModuleNcp);
 	}
 
-        GeoTransform* xtraModPos = new GeoTransform(HepGeom::TranslateX3D(Radius));
+        GeoTransform* xtraModPos = new GeoTransform(GeoTrf::TranslateX3D(Radius));
 
         pvEBarrelMotherPos->add(zrotMod);
         pvEBarrelMotherPos->add(xtraModPos);
@@ -1403,14 +1405,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg;
  
            double PoZ2 =0, PoZ1 =0;
-           double thicknessEndPlate = dbManager->TILBdzend1()*CLHEP::cm;
+           double thicknessEndPlate = dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2;
+           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2;
            PoZ2 = modl_length/4 + PoZ1;
 
            if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))
-	    { HepGeom::Transform3D  TransCut2 = HepGeom::TranslateZ3D(-Radius) * HepGeom::RotateX3D((90-phi)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg)
-                                        * HepGeom::Translate3D(-PoZ2,0.,-PosY);
+	    { GeoTrf::Transform3D  TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)
+                                        * GeoTrf::Translate3D(-PoZ2,0.,-PosY);
  
               // Cuting of pvEBarrelModuleMotherPos (-)
               GeoCutVolAction action1(*CutA, TransCut2);
@@ -1419,9 +1421,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
               pvEBarrelModuleMotherPos->unref(); // Cleaning useless volume
 
               if (ModuleNcp>=60 && ModuleNcp<=62)
-	       { HepGeom::Transform3D TransCutL = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,PosYcut,-PosXcut);
+	       { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut);
 
                  // Cuting of pvEBarrelModuleMotherPos (Left)
                  GeoCutVolAction action2(*CutB, TransCutL);
@@ -1432,9 +1434,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                  pvEBarrelMotherPos->add(pvTmL_EBarrelModuleMotherPos);
 
                } else if (ModuleNcp>=35 && ModuleNcp<=37) 
-	       { HepGeom::Transform3D TransCutR = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,PosYcut,PosXcut) * HepGeom::RotateY3D(180*CLHEP::deg);
+	       { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
 
                  // Cuting of pvEBarrelModuleMotherPos (Right)
                  GeoCutVolAction action3(*CutB, TransCutR);
@@ -1457,10 +1459,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dbManager->SetCurrentTifg(2);  //barrel efinger (small)
         
         // Trd - one finger mother
-        thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         checking("EFingerModule (+)", false,  1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1483,8 +1485,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                       m_testbeamGeometry,
                                       ModuleNcp);
 	 }
-        GeoTransform* xtraModFingerPos  = new GeoTransform(HepGeom::TranslateX3D(
-                                              (dbManager->TILErmax() + dbManager->TILBrmax())/2*CLHEP::cm));
+        GeoTransform* xtraModFingerPos  = new GeoTransform(GeoTrf::TranslateX3D(
+                                              (dbManager->TILErmax() + dbManager->TILBrmax())/2*GeoModelKernelUnits::cm));
         pvEFingerMotherPos->add(zrotMod);
         pvEFingerMotherPos->add(xtraModFingerPos);
         pvEFingerMotherPos->add(XYrtMod);
@@ -1499,7 +1501,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle,
                                                 BFingerRmin,
                                                 DzSaddleSupport/2,
-                                                0.,deltaPhi*CLHEP::deg);
+                                                0.,deltaPhi*GeoModelKernelUnits::deg);
      
             GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron);
             GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule);
@@ -1519,16 +1521,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	dbManager->SetCurrentSectionByNumber(ModType);
 
         // Mother module
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
                 - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() 
                 + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
   
-        double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * CLHEP::cm;
+        double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * GeoModelKernelUnits::cm;
 
         checking("EBarrelModule (-)", false, 1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1553,20 +1555,20 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	   if(m_log->level()<=MSG::DEBUG)
 	     (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg;
  
-           double PoZ2 =0, PoZ1 =0, thicknessEndPlate = dbManager->TILBdzend1()*CLHEP::cm;
+           double PoZ2 =0, PoZ1 =0, thicknessEndPlate = dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthNeg)/2;
+           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthNeg)/2;
            PoZ2 = PoZ1 + modl_length/4;
 
            if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))
-	    { HepGeom::Transform3D  TransCut2 = HepGeom::TranslateZ3D(-Radius) 
-                                        * HepGeom::RotateX3D((phi-90)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg)
-                                        * HepGeom::Translate3D(-PoZ2,0,-PosY);
+	    { GeoTrf::Transform3D  TransCut2 = GeoTrf::TranslateZ3D(-Radius) 
+                                        * GeoTrf::RotateX3D((phi-90)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)
+                                        * GeoTrf::Translate3D(-PoZ2,0,-PosY);
  
               if (ModuleNcp>=60 && ModuleNcp<=62)
-	       { HepGeom::Transform3D TransCutL = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(-phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,-PosYcut,-PosXcut);
+	       { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(-phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut);
 
                  // Cuting of module (Left)
                  const GeoShape& TmL_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2).
@@ -1575,9 +1577,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                  lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherNeg,matAir);
 
                } else if (ModuleNcp>=35 && ModuleNcp<=37)
-	       { HepGeom::Transform3D TransCutR = HepGeom::TranslateZ3D(-Radius)
-                                          * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(-phi*CLHEP::deg)
-                                          * HepGeom::Translate3D(PoZ1,-PosYcut,PosXcut) * HepGeom::RotateY3D(180*CLHEP::deg);
+	       { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius)
+                                          * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(-phi*GeoModelKernelUnits::deg)
+                                          * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
 
                  // Cuting of module (Right)
                  const GeoShape& TmR_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2).
@@ -1605,7 +1607,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 				      0.,true);
          }
 
-        GeoTransform* xtraModNeg = new GeoTransform(HepGeom::TranslateX3D(Radius));
+        GeoTransform* xtraModNeg = new GeoTransform(GeoTrf::TranslateX3D(Radius));
 
         pvEBarrelMotherNeg->add(zrotMod);
         pvEBarrelMotherNeg->add(xtraModNeg);
@@ -1623,15 +1625,15 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg;
 
            double PoZ2 =0, PoZ1 =0;
-           double thicknessEndPlate = dbManager->TILBdzend1()*CLHEP::cm;
+           double thicknessEndPlate = dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2;
+           PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2;
            PoZ2 = modl_length/4 + PoZ1;
 
           if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))
-	   { HepGeom::Transform3D  TransCut2 = HepGeom::TranslateZ3D(-Radius) 
-                                       * HepGeom::RotateX3D((phi-90)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg)   
-                                       * HepGeom::Translate3D(-PoZ2,0.,-PosY);
+	   { GeoTrf::Transform3D  TransCut2 = GeoTrf::TranslateZ3D(-Radius) 
+                                       * GeoTrf::RotateX3D((phi-90)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)   
+                                       * GeoTrf::Translate3D(-PoZ2,0.,-PosY);
 
              // Cuting of pvEBarrelModuleMotherNeg (-)
              GeoCutVolAction action1(*CutA, TransCut2);
@@ -1640,9 +1642,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
              pvEBarrelModuleMotherNeg->unref(); // Cleaning useless volume
 
              if (ModuleNcp>=60 && ModuleNcp<=62)
-	      { HepGeom::Transform3D TransCutL = HepGeom::TranslateZ3D(-Radius)
-                                         * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(-phi*CLHEP::deg)
-                                         * HepGeom::Translate3D(PoZ1,-PosYcut,-PosXcut);
+	      { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius)
+                                         * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(-phi*GeoModelKernelUnits::deg)
+                                         * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut);
 
                 // Cuting of pvEBarrelModuleMotherNeg (Left)
                 GeoCutVolAction action2(*CutB, TransCutL);
@@ -1653,9 +1655,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                 pvEBarrelMotherNeg->add(pvTmL_EBarrelModuleMotherNeg);
 
               } else if (ModuleNcp>=35 && ModuleNcp<=37) 
-	      { HepGeom::Transform3D TransCutR = HepGeom::TranslateZ3D(-Radius)
-                                         * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(-phi*CLHEP::deg)
-                                         * HepGeom::Translate3D(PoZ1,-PosYcut,PosXcut) * HepGeom::RotateY3D(180*CLHEP::deg);
+	      { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius)
+                                         * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(-phi*GeoModelKernelUnits::deg)
+                                         * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg);
 
                 // Cuting of pvEBarrelModuleMotherNeg (Right)
                 GeoCutVolAction action3(*CutB, TransCutR);
@@ -1679,10 +1681,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         //zEndSection = extOffset + dbManager->TILBdzmodul()/2 + dbManager->TILEzshift();
 
         // Trd - one finger mother
-        thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         checking("EFingerModule (-)", false, 1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1705,8 +1707,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                       m_testbeamGeometry,
                                       ModuleNcp*100);
          }
-        GeoTransform* xtraModFingerNeg  = new GeoTransform(HepGeom::TranslateX3D(
-                                              (dbManager->TILErmax() + dbManager->TILBrmax())/2*CLHEP::cm));
+        GeoTransform* xtraModFingerNeg  = new GeoTransform(GeoTrf::TranslateX3D(
+                                              (dbManager->TILErmax() + dbManager->TILBrmax())/2*GeoModelKernelUnits::cm));
         pvEFingerMotherNeg->add(zrotMod);
         pvEFingerMotherNeg->add(xtraModFingerNeg); 
         pvEFingerMotherNeg->add(yrotMod);
@@ -1721,7 +1723,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle,
                                                 BFingerRmin,
                                                 DzSaddleSupport/2,
-                                                0.,deltaPhi*CLHEP::deg);
+                                                0.,deltaPhi*GeoModelKernelUnits::deg);
      
             GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron);
             GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule);
@@ -1777,7 +1779,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            }
          } else
          { (*m_log) << MSG::INFO <<" D4 unavailable "<<endmsg;
-	   dzITC1 = 9.485; //sb [CLHEP::cm]
+	   dzITC1 = 9.485; //sb [GeoModelKernelUnits::cm]
          }
 
         bool specialC10 = (Ifd4 && Ifc10 && rMaxITC2 < rMinITC1);
@@ -1792,10 +1794,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           if (Ifd4 || Ifc10) {
 
             //  The first sub shape
-            thicknessWedgeMother = dzITC1 * CLHEP::cm;
-            heightWedgeMother = (rMaxITC1 - rMinITC1) * CLHEP::cm;
-            dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-            dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+            thicknessWedgeMother = dzITC1 * GeoModelKernelUnits::cm;
+            heightWedgeMother = (rMaxITC1 - rMinITC1) * GeoModelKernelUnits::cm;
+            dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+            dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
             checking("ITCModule tcModuleSub1Neg (-) ", false, 1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1806,10 +1808,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                   dy2WedgeMother,
                                                   heightWedgeMother/2);
             // The second sub shape
-            thicknessWedgeMother = dzITC2 * CLHEP::cm;
-            heightWedgeMother    = (rMaxITC2 - rMinITC2) * CLHEP::cm;
-            dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-            dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+            thicknessWedgeMother = dzITC2 * GeoModelKernelUnits::cm;
+            heightWedgeMother    = (rMaxITC2 - rMinITC2) * GeoModelKernelUnits::cm;
+            dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+            dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
             checking("ITCModule itcModuleSub2Neg (-)", false, 1, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1820,15 +1822,15 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                   dy2WedgeMother,
                                                   heightWedgeMother/2 );
 
-            X = (dzITC1 - dzITC2)/2*CLHEP::cm; 
-            Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*CLHEP::cm;
+            X = (dzITC1 - dzITC2)/2*GeoModelKernelUnits::cm; 
+            Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*GeoModelKernelUnits::cm;
 	    if(m_log->level()<=MSG::DEBUG)
 	      (*m_log) << MSG::DEBUG <<"  ITCModule Negative, position X= "<<X<<" Z= "<<Z<< endmsg;
 
-            HepGeom::Translate3D itcModule_SubShiftNeg(X, 0., Z);
+            GeoTrf::Translate3D itcModule_SubShiftNeg(X, 0., Z);
             const GeoShapeUnion& itcModuleMotherNeg = itcModuleSub1Neg->add(*itcModuleSub2Neg<<itcModule_SubShiftNeg);
 
-            HepGeom::Translate3D itcModuleSubShiftNeg(X, 0., Z);
+            GeoTrf::Translate3D itcModuleSubShiftNeg(X, 0., Z);
 
             GeoLogVol* lvITCModuleMotherNeg = new GeoLogVol("ITCModule",&itcModuleMotherNeg,matAir);
             GeoPhysVol* pvITCModuleMotherNeg = new GeoPhysVol(lvITCModuleMotherNeg);
@@ -1841,10 +1843,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             // The D4, PLUG1
             dbManager->SetCurrentSectionByNumber(Id4);
 
-            thicknessWedgeMother = dzITC1 * CLHEP::cm;
-            heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * CLHEP::cm;
-            dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-            dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+            thicknessWedgeMother = dzITC1 * GeoModelKernelUnits::cm;
+            heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * GeoModelKernelUnits::cm;
+            dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+            dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 	    // ps changes dzITC1 -> dzmodul
             Glue =  dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2();
             NbPeriod = dbManager->TILBnperiod();
@@ -1881,7 +1883,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                    heightWedgeMother/2);
             //Second submother for frontplate
             double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap
-            thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * CLHEP::cm;
+            thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * GeoModelKernelUnits::cm;
 	    if(m_log->level()<=MSG::DEBUG)
               if (specialC10)
                 (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg;
@@ -1889,9 +1891,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             GeoLogVol *lvPlug1ModuleMotherNeg=0;
             if (thicknessWedgeMother > rless)
              { 
-               heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * CLHEP::cm;
-               dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-               dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+               heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+               dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+               dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
                checking("Plug1Module plug2SubMotherNeg (-)", false, 2, 
                    thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -1902,8 +1904,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                       dy2WedgeMother,
                                                       heightWedgeMother/2);
     
-               HepGeom::Translate3D plug1SubOffsetNeg(-dzITC2Bis*CLHEP::cm/2, 0.,
-                                               (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*CLHEP::cm/2);
+               GeoTrf::Translate3D plug1SubOffsetNeg(-dzITC2Bis*GeoModelKernelUnits::cm/2, 0.,
+                                               (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2);
     
                const GeoShapeUnion& plug1ModuleMotherNeg = 
                                     plug1SubMotherNeg->add(*plug2SubMotherNeg<<plug1SubOffsetNeg);
@@ -1926,8 +1928,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                            dzITC2Bis); 
              }
         
-            Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*CLHEP::cm/2;
-            GeoTransform* tfPlug1ModuleMotherNeg = new GeoTransform(HepGeom::Translate3D(0.,0.,Z));
+            Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*GeoModelKernelUnits::cm/2;
+            GeoTransform* tfPlug1ModuleMotherNeg = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z));
 
             pvITCModuleMotherNeg->add(tfPlug1ModuleMotherNeg);
             pvITCModuleMotherNeg->add(pvPlug1ModuleMotherNeg);
@@ -1938,10 +1940,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
               // TILE_PLUG2
               dbManager->SetCurrentSectionByNumber(Ic10);
 
-              thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-              heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-              dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-              dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+              thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+              heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+              dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+              dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
               if (dbManager->TILBnperiod() > 1)
                { dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
@@ -1984,21 +1986,21 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
           double zShift = 0;
           NbPeriod = dbManager->TILBnperiod();
-	  //          Z = (dbManager->TILBdzmodul()-dzITC2)/2*CLHEP::cm;
+	  //          Z = (dbManager->TILBdzmodul()-dzITC2)/2*GeoModelKernelUnits::cm;
 	  // ps Zshift calculated from length of volumes rather than modules (account for special modules) 
 	  //
-          Z = (dzITC1 - dzITC2)/2*CLHEP::cm;
+          Z = (dzITC1 - dzITC2)/2*GeoModelKernelUnits::cm;
 
-          if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./CLHEP::cm);
+          if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./GeoModelKernelUnits::cm);
 
 	  if(m_log->level()<=MSG::DEBUG)
 	    (*m_log) << MSG::DEBUG <<"  ITCModule Negative, position X= "<<X<<" Z= "<<Z
 		     <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift
 		     <<endmsg;
 
-          GeoTransform* xtraITCNeg = new GeoTransform(HepGeom::TranslateX3D(
-                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
-	  GeoTransform* ztraITCNeg = new GeoTransform(HepGeom::TranslateZ3D(zShift*CLHEP::cm));
+          GeoTransform* xtraITCNeg = new GeoTransform(GeoTrf::TranslateX3D(
+                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
+	  GeoTransform* ztraITCNeg = new GeoTransform(GeoTrf::TranslateZ3D(zShift*GeoModelKernelUnits::cm));
 
           pvITCMotherNeg->add(zrotMod);
           pvITCMotherNeg->add(xtraITCNeg);
@@ -2017,10 +2019,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           dbManager->SetCurrentSectionByNumber(Igap); 
 
           // Trd - module mother
-          thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
           dzGlue = 0.;
 
@@ -2046,8 +2048,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            }
 
           // Module position inside mother
-          GeoTransform* xtraGapNeg = new GeoTransform(HepGeom::TranslateX3D(
-                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
+          GeoTransform* xtraGapNeg = new GeoTransform(GeoTrf::TranslateX3D(
+                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
           pvGapMotherNeg->add(zrotMod);
           pvGapMotherNeg->add(xtraGapNeg);
           pvGapMotherNeg->add(yrotMod);
@@ -2063,10 +2065,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           dbManager->SetCurrentSectionByNumber(Icrack);
 
           // mother
-          thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
           dzGlue = 0.;
 
@@ -2091,8 +2093,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 					 deltaPhi);
            }
           // Module position inside mother
-          GeoTransform* xtraCrackNeg = new GeoTransform(HepGeom::TranslateX3D(
-                                           (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
+          GeoTransform* xtraCrackNeg = new GeoTransform(GeoTrf::TranslateX3D(
+                                           (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
           pvCrackMotherNeg->add(zrotMod);
           pvCrackMotherNeg->add(xtraCrackNeg);
           pvCrackMotherNeg->add(yrotMod);
@@ -2110,10 +2112,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         if(Ifd4 || Ifc10) {
 
           // The first sub shape
-          thicknessWedgeMother = dzITC1 * CLHEP::cm;
-          heightWedgeMother = (rMaxITC1 - rMinITC1) * CLHEP::cm;
-          dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dzITC1 * GeoModelKernelUnits::cm;
+          heightWedgeMother = (rMaxITC1 - rMinITC1) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
           checking("ITCModule itcModuleSub2Pos (+)", false, 1,
 	        thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -2124,10 +2126,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                 dy2WedgeMother        ,
                                                 heightWedgeMother/2  );
           // The second sub shape
-          thicknessWedgeMother = dzITC2 * CLHEP::cm;
-          heightWedgeMother    = (rMaxITC2 - rMinITC2) * CLHEP::cm;
-          dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dzITC2 * GeoModelKernelUnits::cm;
+          heightWedgeMother    = (rMaxITC2 - rMinITC2) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
           checking("ITCModule itcModuleSub2Pos (+)", false, 1,
 	        thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -2138,15 +2140,15 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                 dy2WedgeMother        ,
                                                 heightWedgeMother/2  );
 
-          X = (dzITC1 - dzITC2)/2*CLHEP::cm; 
-          Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*CLHEP::cm;
+          X = (dzITC1 - dzITC2)/2*GeoModelKernelUnits::cm; 
+          Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*GeoModelKernelUnits::cm;
 	  if(m_log->level()<=MSG::DEBUG)
 	    (*m_log) << MSG::DEBUG <<"  ITCModule Positive, position X= "<<X<<" Z= "<<Z<< endmsg;
 
-          HepGeom::Translate3D itcModule_SubShiftPos(X, 0., Z);
+          GeoTrf::Translate3D itcModule_SubShiftPos(X, 0., Z);
           const GeoShapeUnion& itcModuleMotherPos = itcModuleSub1Pos->add(*itcModuleSub2Pos<<itcModule_SubShiftPos);
 
-          HepGeom::Translate3D itcModuleSubShiftPos(X, 0., Z);
+          GeoTrf::Translate3D itcModuleSubShiftPos(X, 0., Z);
 
           GeoLogVol* lvITCModuleMotherPos = new GeoLogVol("ITCModule",&itcModuleMotherPos,matAir);
           GeoPhysVol* pvITCModuleMotherPos = new GeoPhysVol(lvITCModuleMotherPos);
@@ -2159,10 +2161,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           // The D4, PLUG1
           dbManager->SetCurrentSectionByNumber(Id4);
 
-          thicknessWedgeMother = dzITC1 * CLHEP::cm;
-          dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * CLHEP::cm;
+          thicknessWedgeMother = dzITC1 * GeoModelKernelUnits::cm;
+          dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * GeoModelKernelUnits::cm;
 
 	  // ps changes dzITC1 -> dzmodul
 	  Glue =  dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2();
@@ -2202,7 +2204,7 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
           //Second submother C10, PLUG2
           double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap
-          thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * CLHEP::cm;
+          thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * GeoModelKernelUnits::cm;
           if(m_log->level()<=MSG::DEBUG)
             if (specialC10)
               (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg;
@@ -2210,9 +2212,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           GeoLogVol *lvPlug1ModuleMotherPos=0;
           if (thicknessWedgeMother > rless)
            { 
-             heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * CLHEP::cm;
-             dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-             dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+             heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+             dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+             dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
              checking("Plug1Module plug2SubMotherPos (+)", false, 2, 
                  thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2);
@@ -2223,8 +2225,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                                     dy2WedgeMother        ,
                                                     heightWedgeMother/2   );
 
-             HepGeom::Translate3D plug1SubOffsetPos(-dzITC2Bis/2*CLHEP::cm, 0.,
-                                        (dbManager->TILBrminimal()-dbManager->TILBrmaximal())/2*CLHEP::cm);
+             GeoTrf::Translate3D plug1SubOffsetPos(-dzITC2Bis/2*GeoModelKernelUnits::cm, 0.,
+                                        (dbManager->TILBrminimal()-dbManager->TILBrmaximal())/2*GeoModelKernelUnits::cm);
         
              const GeoShapeUnion& plug1ModuleMotherPos = plug1SubMotherPos->add(*plug2SubMotherPos<<plug1SubOffsetPos);
 
@@ -2246,8 +2248,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
                                          dzITC2Bis);
            }
         
-          Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*CLHEP::cm/2;
-          GeoTransform* tfPlug1ModuleMotherPos = new GeoTransform(HepGeom::Translate3D(0.,0.,Z));
+          Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*GeoModelKernelUnits::cm/2;
+          GeoTransform* tfPlug1ModuleMotherPos = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z));
 
           pvITCModuleMotherPos->add(tfPlug1ModuleMotherPos);
           pvITCModuleMotherPos->add(pvPlug1ModuleMotherPos);
@@ -2258,10 +2260,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
             // TILE_PLUG2, C10
             dbManager->SetCurrentSectionByNumber(Ic10); 
 
-            thicknessWedgeMother = dzITC2 * CLHEP::cm;
-            heightWedgeMother    = (rMaxITC2 - rMinITC2) * CLHEP::cm;
-            dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-            dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+            thicknessWedgeMother = dzITC2 * GeoModelKernelUnits::cm;
+            heightWedgeMother    = (rMaxITC2 - rMinITC2) * GeoModelKernelUnits::cm;
+            dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+            dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
             if (dbManager->TILBnperiod() > 1)
              { dzGlue = (dzITC2 - dbManager->TILBdzend1() - dbManager->TILBdzend2() 
@@ -2304,19 +2306,19 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
           double zShift = 0;
           NbPeriod = dbManager->TILBnperiod();
-	  //ps          Z = (dbManager->TILBdzmodul()-dzITC2)/2*CLHEP::cm;
-          Z = (dzITC1 - dzITC2)/2*CLHEP::cm;
+	  //ps          Z = (dbManager->TILBdzmodul()-dzITC2)/2*GeoModelKernelUnits::cm;
+          Z = (dzITC1 - dzITC2)/2*GeoModelKernelUnits::cm;
 
-          if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./CLHEP::cm);
+          if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./GeoModelKernelUnits::cm);
 
 	  if(m_log->level()<=MSG::DEBUG)
 	    (*m_log) << MSG::DEBUG <<"  ITCModule Positive, position X= "<<X<<" Z= "<<Z
 		     <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift
 		     <<endmsg;
 
-	  GeoTransform* xtraITCPos = new GeoTransform(HepGeom::TranslateX3D(
-                                        (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
-	  GeoTransform* ztraITCPos = new GeoTransform(HepGeom::TranslateZ3D(zShift*CLHEP::cm));
+	  GeoTransform* xtraITCPos = new GeoTransform(GeoTrf::TranslateX3D(
+                                        (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
+	  GeoTransform* ztraITCPos = new GeoTransform(GeoTrf::TranslateZ3D(zShift*GeoModelKernelUnits::cm));
 
           pvITCMotherPos->add(zrotMod);
           pvITCMotherPos->add(xtraITCPos);
@@ -2336,10 +2338,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           dbManager->SetCurrentSectionByNumber(Igap); 
 
           // Mother
-          thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
           dzGlue = 0;
 
@@ -2365,8 +2367,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            }
 
           // Module position inside mother
-          GeoTransform* xtraGapPos = new GeoTransform(HepGeom::TranslateX3D(
-                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
+          GeoTransform* xtraGapPos = new GeoTransform(GeoTrf::TranslateX3D(
+                                         (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
           pvGapMotherPos->add(zrotMod);
           pvGapMotherPos->add(xtraGapPos);
           pvGapMotherPos->add(XYrtMod);
@@ -2382,10 +2384,10 @@ void TileAtlasFactory::create(GeoPhysVol *world)
           dbManager->SetCurrentSectionByNumber(Icrack); 
 
           // Trd - module mother
-          thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
-          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*CLHEP::deg) * CLHEP::cm;
+          thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+          heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+          dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+          dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
           dzGlue = 0.;
     
@@ -2411,8 +2413,8 @@ void TileAtlasFactory::create(GeoPhysVol *world)
            }
     
           // Module position inside mother
-          GeoTransform* xtraCrackPos = new GeoTransform(HepGeom::TranslateX3D(
-                                          (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*CLHEP::cm));
+          GeoTransform* xtraCrackPos = new GeoTransform(GeoTrf::TranslateX3D(
+                                          (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*GeoModelKernelUnits::cm));
           pvCrackMotherPos->add(zrotMod);
           pvCrackMotherPos->add(xtraCrackPos);
           pvCrackMotherPos->add(XYrtMod);
@@ -2454,9 +2456,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       // consider 3 options - with/without ext.barrels and take into account DZ correction
       ztrans = 0;
 
-      tfBarrelMother = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfBarrelMother = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning barrel with translation "<<ztrans*CLHEP::cm<< endmsg;
+      (*m_log) << MSG::INFO <<" Positioning barrel with translation "<<ztrans*GeoModelKernelUnits::cm<< endmsg;
 
       GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); 
 
@@ -2466,11 +2468,11 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       
       GeoTransform* tfFingerMotherPos;
 
-      ztrans = (dbManager->GetEnvZLength()*CLHEP::cm/2 - BFingerLengthPos/2 + PosDelta)*(1./CLHEP::cm);
+      ztrans = (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm/2 - BFingerLengthPos/2 + PosDelta)*(1./GeoModelKernelUnits::cm);
 
-      tfFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)*HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)*GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning positive barrel finger with translation "<<ztrans*CLHEP::cm<< endmsg;
+      (*m_log) << MSG::INFO <<" Positioning positive barrel finger with translation "<<ztrans*GeoModelKernelUnits::cm<< endmsg;
 
       GeoNameTag* ntFingerMotherPos = new GeoNameTag("TileFingerPos");
 
@@ -2481,9 +2483,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       if (dbManager->BoolSaddle())
       { GeoTransform* tfSaddleMotherPos;
 
-        ztrans = (dbManager->GetEnvZLength()*CLHEP::cm/2 - BFingerLengthPos + DzSaddleSupport/2 + PosDelta)*(1./CLHEP::cm);
+        ztrans = (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm/2 - BFingerLengthPos + DzSaddleSupport/2 + PosDelta)*(1./GeoModelKernelUnits::cm);
 
-        tfSaddleMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)*HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+        tfSaddleMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)*GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
 
         GeoNameTag* ntSaddleMotherPos = new GeoNameTag("TileSaddlePos");
 
@@ -2496,11 +2498,11 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       GeoTransform* tfFingerMotherNeg;
 
-      ztrans = (-dbManager->GetEnvZLength()*CLHEP::cm/2 + BFingerLengthNeg/2 - NegDelta)*(1./CLHEP::cm);
+      ztrans = (-dbManager->GetEnvZLength()*GeoModelKernelUnits::cm/2 + BFingerLengthNeg/2 - NegDelta)*(1./GeoModelKernelUnits::cm);
 
-      tfFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)*HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)*GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning negative barrel finger with translation "<<ztrans*CLHEP::cm<< endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative barrel finger with translation "<<ztrans*GeoModelKernelUnits::cm<< endmsg;
 
       GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg");
       pvTileEnvelopeBarrel->add(tfFingerMotherNeg);
@@ -2510,9 +2512,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       if (dbManager->BoolSaddle())
       { GeoTransform* tfSaddleMotherNeg;
 
-        ztrans = (-dbManager->GetEnvZLength()*CLHEP::cm/2 + BFingerLengthNeg - DzSaddleSupport/2 - NegDelta)*(1./CLHEP::cm);
+        ztrans = (-dbManager->GetEnvZLength()*GeoModelKernelUnits::cm/2 + BFingerLengthNeg - DzSaddleSupport/2 - NegDelta)*(1./GeoModelKernelUnits::cm);
 
-        tfSaddleMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)*HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+        tfSaddleMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)*GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
 
         GeoNameTag* ntSaddleMotherNeg = new GeoNameTag("TileSaddleNeg");
 
@@ -2528,9 +2530,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     if(EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
-      double thicknessEndPlate = dbManager->TILBdzend1()*CLHEP::cm;
+      double thicknessEndPlate = dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-      double PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthPos)/2;
+      double PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthPos)/2;
       double PoZ2 = modl_length/4 + PoZ1;
 
       //--------------------------------------------------------------------------------------------------------------
@@ -2545,14 +2547,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	if(m_log->level()<=MSG::DEBUG)
 	  (*m_log) << MSG::DEBUG << " Iron1: " << dxIron << " " << dyIron << endmsg;
 
-        GeoTransform* tfIron1 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY-dyIron,PoZ2) 
-	                                       * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) 
+	                                       * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIron1);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(1));
         pvEBarrelMotherPos->add(pvIron1);
 
-                      tfIron1 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY-dyIron,PoZ2) 
-					       * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2) 
+					       * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherPos->add(tfIron1);
         pvEBarrelMotherPos->add(pvIron1);
 
@@ -2563,14 +2565,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	if(m_log->level()<=MSG::DEBUG)
 	  (*m_log) << MSG::DEBUG << " Iron2: " << dxIron << " " << dyIron << endmsg;
 
-        GeoTransform* tfIron2 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY+dyIron,PoZ2) 
-	                      * HepGeom::RotateZ3D(-84.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) 
+	                      * GeoTrf::RotateZ3D(-84.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIron2);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(2));
         pvEBarrelMotherPos->add(pvIron2);
 
-                      tfIron2 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY+dyIron,PoZ2) 
-	                      * HepGeom::RotateZ3D(84.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+                      tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) 
+	                      * GeoTrf::RotateZ3D(84.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIron2);
         pvEBarrelMotherPos->add(pvIron2);
 
@@ -2581,14 +2583,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	if(m_log->level()<=MSG::DEBUG)
 	  (*m_log) << MSG::DEBUG << " Iron3: " << dxIron << " " << dyIron << endmsg;
 
-        GeoTransform* tfIron3 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY+dyIron,PoZ2) 
-	                      * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) 
+	                      * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIron3);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(3));
         pvEBarrelMotherPos->add(pvIron3);
 
-                      tfIron3 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY+dyIron,PoZ2) 
-	                      * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) 
+	                      * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherPos->add(tfIron3);
         pvEBarrelMotherPos->add(pvIron3);
 
@@ -2597,14 +2599,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIron = dbManager->CutsXpos();
 	dyIron = dbManager->CutsYpos();
 
-        GeoTransform* tfIrBoxL = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY-dyIron,PoZ2) 
-					       * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) 
+					       * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIrBoxL);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(4));
         pvEBarrelMotherPos->add(pvIrBox);
 
-        GeoTransform* tfIrBoxR = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY-dyIron,PoZ2)
-                                                * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+        GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2)
+                                                * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherPos->add(tfIrBoxR);
         pvEBarrelMotherPos->add(pvIrBox);
 
@@ -2615,16 +2617,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	if(m_log->level()<=MSG::DEBUG)
 	  (*m_log) << MSG::DEBUG << " IrUp: " <<dxIr<< " " <<dyIr<< endmsg;
 
-        GeoTransform* tfIrUp = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
-		             * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
+		             * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIrUp);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(5));
         pvEBarrelMotherPos->add(pvIrUp);
 
-                      tfIrUp = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,-PoZ1) 
-		             * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,-PoZ1) 
+		             * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherPos->add(tfIrUp);
         pvEBarrelMotherPos->add(pvIrUp);
 
@@ -2635,16 +2637,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 	if(m_log->level()<=MSG::DEBUG)
 	  (*m_log) << MSG::DEBUG << " IrDw: " <<dxIr<< " " <<dyIr<< endmsg;
 
-        GeoTransform* tfIrDw = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
-		             * HepGeom::RotateZ3D(70.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
+		             * GeoTrf::RotateZ3D(70.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherPos->add(tfIrDw);
         pvEBarrelMotherPos->add(new GeoIdentifierTag(6));
         pvEBarrelMotherPos->add(pvIrDw);
 
-                      tfIrDw = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
-		             * HepGeom::RotateZ3D(-70.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+                      tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) 
+		             * GeoTrf::RotateZ3D(-70.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
 
         pvEBarrelMotherPos->add(tfIrDw);
         pvEBarrelMotherPos->add(pvIrDw);
@@ -2652,12 +2654,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       }
       //--------------------------------------------------------------------------------------------------------------
       // Ext.Barrel
-      ztrans = (PosEndCrack + (dbManager->GetEnvZLength()*CLHEP::cm - EBFingerLengthPos)/2 + 19.5)*(1./CLHEP::cm); 
+      ztrans = (PosEndCrack + (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm - EBFingerLengthPos)/2 + 19.5)*(1./GeoModelKernelUnits::cm); 
 
-      GeoTransform* tfEBarrelMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                             HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                             GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning positive ext.barrel with translation "<< ztrans*CLHEP::cm << endmsg; 
+      (*m_log) << MSG::INFO <<" Positioning positive ext.barrel with translation "<< ztrans*GeoModelKernelUnits::cm << endmsg; 
 
       //
       GeoNameTag* ntEBarrelMotherPos = new GeoNameTag("EBarrelPos");
@@ -2669,12 +2671,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       //--------------------------------------------------------------------------------------------------------------
       // Finger 
-      ztrans = (PosEndExBarrel + EBFingerLengthPos/2)*(1./CLHEP::cm); 
+      ztrans = (PosEndExBarrel + EBFingerLengthPos/2)*(1./GeoModelKernelUnits::cm); 
 
-      GeoTransform* tfEFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                                          HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                                          GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning positive ext.barrel finger with translation ztrans= "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning positive ext.barrel finger with translation ztrans= "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
       GeoNameTag* ntEFingerMotherPos = new GeoNameTag("TileEFingerPos");
 
@@ -2685,12 +2687,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       //--------------------------------------------------------------------------------------------------------------
       // Ext. Saddle Support
       if (dbManager->BoolSaddle())
-      { ztrans = (PosEndExBarrel + DzSaddleSupport/2)*(1./CLHEP::cm); 
+      { ztrans = (PosEndExBarrel + DzSaddleSupport/2)*(1./GeoModelKernelUnits::cm); 
 
-        GeoTransform* tfESaddleMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                                            HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+        GeoTransform* tfESaddleMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                                            GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
 
-        (*m_log) << MSG::INFO <<" Positioning positive ext.barrel saddle with translation ztrans= "<<ztrans*CLHEP::cm
+        (*m_log) << MSG::INFO <<" Positioning positive ext.barrel saddle with translation ztrans= "<<ztrans*GeoModelKernelUnits::cm
                  << endmsg;
 
         GeoNameTag* ntESaddleMotherPos = new GeoNameTag("TileESaddlePos");
@@ -2708,9 +2710,9 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     if(EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
-      double thicknessEndPlate = dbManager->TILBdzend1()*CLHEP::cm;
+      double thicknessEndPlate = dbManager->TILBdzend1()*GeoModelKernelUnits::cm;
 
-      double PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*CLHEP::cm- EBFingerLengthNeg)/2;
+      double PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm- EBFingerLengthNeg)/2;
       double PoZ2 = modl_length/4 + PoZ1;
 
       //*>------------------------------------------------------------------------------------------------------
@@ -2722,14 +2724,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIron = dbManager->CutsXpos();
 	dyIron = dbManager->CutsYpos();
 
-        GeoTransform* tfIron1 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY-dyIron,-PoZ2) 
-					       * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2) 
+					       * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIron1);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(1));
         pvEBarrelMotherNeg->add(pvIron1);
 
-                      tfIron1 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY-dyIron,-PoZ2)
-					       * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2)
+					       * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherNeg->add(tfIron1);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(2));
         pvEBarrelMotherNeg->add(pvIron1);
@@ -2739,14 +2741,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIron = dbManager->CutsXpos();
 	dyIron = dbManager->CutsYpos();
 
-        GeoTransform* tfIron2 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY+dyIron,-PoZ2) 
-	                      * HepGeom::RotateZ3D(-84.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) 
+	                      * GeoTrf::RotateZ3D(-84.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIron2);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(2));
         pvEBarrelMotherNeg->add(pvIron2);
 
-                      tfIron2 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY+dyIron,-PoZ2)
-                              * HepGeom::RotateZ3D(84.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+                      tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2)
+                              * GeoTrf::RotateZ3D(84.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIron2);
         pvEBarrelMotherNeg->add(pvIron2);
 
@@ -2755,14 +2757,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIron = dbManager->CutsXpos();
 	dyIron = dbManager->CutsYpos();
 
-        GeoTransform* tfIron3 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY+dyIron,-PoZ2) 
-	                      * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) 
+	                      * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIron3);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(3));
         pvEBarrelMotherNeg->add(pvIron3); 
 
-                      tfIron3 = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(-dxIron,PosY+dyIron,-PoZ2)
-                              * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2)
+                              * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherNeg->add(tfIron3);
         pvEBarrelMotherNeg->add(pvIron3);
 
@@ -2770,14 +2772,14 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>>
         dxIron = dbManager->CutsXpos();
 	dyIron = dbManager->CutsYpos();
-        GeoTransform* tfIrBoxL = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::Translate3D(dxIron,PosY-dyIron,-PoZ2)
-                               * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2)
+                               * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIrBoxL); 
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(4));
         pvEBarrelMotherNeg->add(pvIrBox); 
 
-        GeoTransform* tfIrBoxR = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) *HepGeom::Translate3D(-dxIron,PosY-dyIron,-PoZ2)
-		               * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+        GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) *GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2)
+		               * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherNeg->add(tfIrBoxR);
         pvEBarrelMotherNeg->add(pvIrBox);
 
@@ -2786,16 +2788,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIr = dbManager->CutsXpos();
 	dyIr = dbManager->CutsYpos();
 
-        GeoTransform* tfIrUp = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
-		             * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
+		             * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIrUp);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(5));
         pvEBarrelMotherNeg->add(pvIrUp);
 
-                      tfIrUp = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,PoZ1) 
-		             * HepGeom::RotateZ3D(90.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Right
+                      tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,PoZ1) 
+		             * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Right
         pvEBarrelMotherNeg->add(tfIrUp);
         pvEBarrelMotherNeg->add(pvIrUp);
 
@@ -2804,16 +2806,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
         dxIr = dbManager->CutsXpos();
 	dyIr = dbManager->CutsYpos();
 
-        GeoTransform* tfIrDw = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
-		             * HepGeom::RotateZ3D(70.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+        GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
+		             * GeoTrf::RotateZ3D(70.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
         pvEBarrelMotherNeg->add(tfIrDw);
         pvEBarrelMotherNeg->add(new GeoIdentifierTag(6));
         pvEBarrelMotherNeg->add(pvIrDw);
 
-                      tfIrDw = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) 
-                             * HepGeom::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
-		             * HepGeom::RotateZ3D(-70.*CLHEP::deg) * HepGeom::RotateX3D(90.*CLHEP::deg) * HepGeom::RotateZ3D(90.*CLHEP::deg)); // Left
+                      tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) 
+                             * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,PoZ1) 
+		             * GeoTrf::RotateZ3D(-70.*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(90.*GeoModelKernelUnits::deg) * GeoTrf::RotateZ3D(90.*GeoModelKernelUnits::deg)); // Left
 
         pvEBarrelMotherNeg->add(tfIrDw);
         pvEBarrelMotherNeg->add(pvIrDw);
@@ -2822,12 +2824,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       //
       //*>------------------------------------------------------------------------------------------------------
       // Ext.Barrel
-      ztrans = (-NegEndCrack - (dbManager->GetEnvZLength()*CLHEP::cm - EBFingerLengthNeg)/2 - 19.5)*(1./CLHEP::cm);
+      ztrans = (-NegEndCrack - (dbManager->GetEnvZLength()*GeoModelKernelUnits::cm - EBFingerLengthNeg)/2 - 19.5)*(1./GeoModelKernelUnits::cm);
 
-      GeoTransform* tfEBarrelMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                             HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                             GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning negative ext.barrel with translation ztrans "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative ext.barrel with translation ztrans "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
       
       GeoNameTag* ntEBarrelMotherNeg = new GeoNameTag("EBarrelNeg");
 
@@ -2838,12 +2840,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       //*>------------------------------------------------------------------------------------------------------
       // Finger
-      ztrans = (-NegEndExBarrel - EBFingerLengthPos/2)*(1./CLHEP::cm); 
+      ztrans = (-NegEndExBarrel - EBFingerLengthPos/2)*(1./GeoModelKernelUnits::cm); 
 
-      GeoTransform* tfEFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                             HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                             GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
 
-      (*m_log) << MSG::INFO <<" Positioning negative ext.barrel finger with translation ztrans= "<<ztrans*CLHEP::cm<< endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative ext.barrel finger with translation ztrans= "<<ztrans*GeoModelKernelUnits::cm<< endmsg;
 
       GeoNameTag* ntEFingerMotherNeg = new GeoNameTag("TileEFingerNeg");
 
@@ -2854,12 +2856,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       //*>------------------------------------------------------------------------------------------------------
       // Ext. Saddle Support
       if (dbManager->BoolSaddle())
-      { ztrans = (-NegEndExBarrel - DzSaddleSupport/2)*(1./CLHEP::cm); 
+      { ztrans = (-NegEndExBarrel - DzSaddleSupport/2)*(1./GeoModelKernelUnits::cm); 
 
-        GeoTransform* tfESaddleMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                               HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+        GeoTransform* tfESaddleMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                               GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
 
-        (*m_log) << MSG::INFO <<" Positioning negative ext.barrel saddle with translation ztrans= "<<ztrans*CLHEP::cm
+        (*m_log) << MSG::INFO <<" Positioning negative ext.barrel saddle with translation ztrans= "<<ztrans*GeoModelKernelUnits::cm
                  << endmsg;
 
         GeoNameTag* ntESaddleMotherNeg = new GeoNameTag("TileESaddleNeg");
@@ -2878,15 +2880,15 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
 
-      ztrans = PosEndBarrelFinger*(1./CLHEP::cm) + dbManager->TILBdzmodul()/2;
+      ztrans = PosEndBarrelFinger*(1./GeoModelKernelUnits::cm) + dbManager->TILBdzmodul()/2;
 
-      //std::cout <<" ztrans "<<ztrans<<" PosEndBarrelFinger/CLHEP::cm "<<PosEndBarrelFinger/CLHEP::cm
-      //          <<" dbManager->TILBdzmodul()/2*CLHEP::cm"<<dbManager->TILBdzmodul()/2<<"\n";
+      //std::cout <<" ztrans "<<ztrans<<" PosEndBarrelFinger/GeoModelKernelUnits::cm "<<PosEndBarrelFinger/GeoModelKernelUnits::cm
+      //          <<" dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm"<<dbManager->TILBdzmodul()/2<<"\n";
       
-      (*m_log) << MSG::INFO <<" Positioning positive ITC with translation "<<ztrans*CLHEP::cm<< endmsg;
+      (*m_log) << MSG::INFO <<" Positioning positive ITC with translation "<<ztrans*GeoModelKernelUnits::cm<< endmsg;
 
-      GeoTransform* tfITCMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * 
-                                         HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * 
+                                         GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
 
       GeoNameTag* ntITCMotherPos = new GeoNameTag("ITCPos");
 
@@ -2895,12 +2897,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       pvTileEnvelopePosEndcap->add(pvITCMotherPos);
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
-      ztrans = PosBeginGap*(1./CLHEP::cm) + dbManager->TILBdzmodul()/2;
+      ztrans = PosBeginGap*(1./GeoModelKernelUnits::cm) + dbManager->TILBdzmodul()/2;
 
-      (*m_log) << MSG::INFO <<" Positioning positive Gap with translation "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning positive Gap with translation "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
-      GeoTransform* tfGapMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)* 
-                                         HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfGapMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)* 
+                                         GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
       GeoNameTag* ntGapMotherPos = new GeoNameTag("GapPos");
 
@@ -2910,12 +2912,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       // Crack
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-      ztrans = PosBeginCrack*(1./CLHEP::cm) + dbManager->TILBdzmodul()/2;
+      ztrans = PosBeginCrack*(1./GeoModelKernelUnits::cm) + dbManager->TILBdzmodul()/2;
 
-      (*m_log) << MSG::INFO <<" Positioning positive Crack with translation "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning positive Crack with translation "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
-      GeoTransform* tfCrackMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)* 
-                                         HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfCrackMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)* 
+                                         GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
  
       GeoNameTag* ntCrackMotherPos = new GeoNameTag("CrackPos");
 
@@ -2932,12 +2934,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
     if(EnvType == 4) { 
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-      ztrans = -NegEndBarrelFinger*(1./CLHEP::cm) - dbManager->TILBdzmodul()/2;
+      ztrans = -NegEndBarrelFinger*(1./GeoModelKernelUnits::cm) - dbManager->TILBdzmodul()/2;
 
-      (*m_log) << MSG::INFO <<" Positioning negative ITC with translation "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative ITC with translation "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
-      GeoTransform* tfITCMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)* 
-                                         HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)* 
+                                         GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
       GeoNameTag* ntITCMotherNeg = new GeoNameTag("ITCNeg");
 
@@ -2946,12 +2948,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
       pvTileEnvelopeNegEndcap->add(pvITCMotherNeg);
 
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3);
-      ztrans = -NegBeginGap*(1./CLHEP::cm) - dbManager->TILBdzmodul()/2;
+      ztrans = -NegBeginGap*(1./GeoModelKernelUnits::cm) - dbManager->TILBdzmodul()/2;
 
-      (*m_log) << MSG::INFO <<" Positioning negative Gap with translation "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative Gap with translation "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
-      GeoTransform* tfGapMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)* 
-                                         HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfGapMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)* 
+                                         GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
       GeoNameTag* ntGapMotherNeg = new GeoNameTag("GapNeg");
 
@@ -2961,12 +2963,12 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
       // Crack
       dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-      ztrans = -NegBeginCrack*(1./CLHEP::cm) - dbManager->TILBdzmodul()/2;
+      ztrans = -NegBeginCrack*(1./GeoModelKernelUnits::cm) - dbManager->TILBdzmodul()/2;
 
-      (*m_log) << MSG::INFO <<" Positioning negative Crack with translation "<<ztrans*CLHEP::cm<<endmsg;
+      (*m_log) << MSG::INFO <<" Positioning negative Crack with translation "<<ztrans*GeoModelKernelUnits::cm<<endmsg;
 
-      GeoTransform* tfCrackMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm)* 
-                                           HepGeom::RotateZ3D(dbManager->GetEnvDPhi()*CLHEP::deg));
+      GeoTransform* tfCrackMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm)* 
+                                           GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*GeoModelKernelUnits::deg));
 
       GeoNameTag* ntCrackMotherNeg = new GeoNameTag("CrackNeg");
 
@@ -2992,13 +2994,13 @@ void TileAtlasFactory::create(GeoPhysVol *world)
        dbManager->SetCurrentEnvByIndex(EnvCounter);
        int EnvType = dbManager->GetEnvType();
        int NumberOfMod = dbManager->GetEnvNModules();
-       double Zshift = dbManager->GetEnvZShift()*CLHEP::cm;
+       double Zshift = dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
 
        if(m_log->level()<=MSG::DEBUG)
 	 (*m_log) << MSG::DEBUG 
 		  << " EnvCounter is " << EnvCounter
 		  << " EnvType is " << EnvType
-		  << " Zshift is " << Zshift*(1./CLHEP::cm) << " cm"
+		  << " Zshift is " << Zshift*(1./GeoModelKernelUnits::cm) << " cm"
 		  << endmsg;
 
        // Central barrel 
@@ -3047,16 +3049,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
     // Top transform for the Central barrel
     dbManager->SetCurrentEnvByType(1);
-    HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-    HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-    HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-    HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-    GeoTransform* barrelTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+    GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+    GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+    GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+    GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+    GeoTransform* barrelTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
 
     (*m_log) << MSG::INFO << " Global positioning of barrel with rotation ("
              << dbManager->GetEnvDPhi() << "," << dbManager->GetEnvDTheta() << "," << dbManager->GetEnvDPsi() << ")"
              << ") and translation (" << dbManager->GetEnvDX() << "," << dbManager->GetEnvDY() << "," << dbManager->GetEnvDZ()
-             << ") CLHEP::cm" << endmsg;
+             << ") GeoModelKernelUnits::cm" << endmsg;
 
     world->add(barrelTT);
     world->add(pvTileEnvelopeBarrel);
@@ -3069,16 +3071,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
  
     // Top transform for the Positive endcap
     dbManager->SetCurrentEnvByType(3);
-    HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-    HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-    HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-    HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-    GeoTransform*  posEcTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+    GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+    GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+    GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+    GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+    GeoTransform*  posEcTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
 
     (*m_log) << MSG::INFO << " Global positioning of positive ext.barrel with rotation ("
              << dbManager->GetEnvDPhi() << "," << dbManager->GetEnvDTheta() << "," << dbManager->GetEnvDPsi() << ")"
              << ") and translation (" << dbManager->GetEnvDX() << "," << dbManager->GetEnvDY() << "," << dbManager->GetEnvDZ()
-             << ") CLHEP::cm" << endmsg;
+             << ") GeoModelKernelUnits::cm" << endmsg;
 
     world->add(posEcTT);
     world->add(pvTileEnvelopePosEndcap);
@@ -3091,16 +3093,16 @@ void TileAtlasFactory::create(GeoPhysVol *world)
 
     // Top transform for the Negative endcap
     dbManager->SetCurrentEnvByType(2);
-    HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-    HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-    HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-    HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-    GeoTransform* negEcTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+    GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+    GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+    GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+    GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+    GeoTransform* negEcTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
 
     (*m_log) << MSG::INFO << " Global positioning of negative ext.barrel with rotation ("
              << dbManager->GetEnvDPhi() << "," << dbManager->GetEnvDTheta() << "," << dbManager->GetEnvDPsi() << ")"
              << ") and translation (" << dbManager->GetEnvDX() << "," << dbManager->GetEnvDY() << "," << dbManager->GetEnvDZ()
-             << ") CLHEP::cm" << endmsg;
+             << ") GeoModelKernelUnits::cm" << endmsg;
 
     world->add(negEcTT);
     world->add(pvTileEnvelopeNegEndcap);
diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx
index ba6ed22153bdcddf8d90fb00e6b70bdc26938997..4764c9b6e2339a87b73cedffaacd888e0beb23fd 100755
--- a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx
@@ -21,9 +21,11 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
 
@@ -35,7 +37,7 @@
 #include <stdexcept>
 #include <iostream>
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
    
 
@@ -105,20 +107,20 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   {
     // Z planes
     dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL);
-    double endCentralBarrel = dbManager->TILBdzmodul()/2.*CLHEP::cm;
+    double endCentralBarrel = dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-    //sb double beginITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*CLHEP::cm;
+    //sb double beginITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-    double beginITC2 = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*CLHEP::cm;
+    double beginITC2 = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-    double beginCrack = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*CLHEP::cm;
-    double endCrack = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2.)*CLHEP::cm;
+    double beginCrack = (dbManager->TILBzoffset() + dbManager->TILEzshift() - dbManager->TILBdzmodul()/2.)*GeoModelKernelUnits::cm;
+    double endCrack = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2.)*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
-    double endExtendedBarrel = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2.)*CLHEP::cm;
-    double endTile = dbManager->TILEzmam()*CLHEP::cm;
+    double endExtendedBarrel = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2.)*GeoModelKernelUnits::cm;
+    double endTile = dbManager->TILEzmam()*GeoModelKernelUnits::cm;
 
     dbManager->SetCurrentTifg(1);
-    double endBarrelFinger = endCentralBarrel + dbManager->TIFGdz()*CLHEP::cm;
+    double endBarrelFinger = endCentralBarrel + dbManager->TIFGdz()*GeoModelKernelUnits::cm;
 
     // Offsets
     /* sb
@@ -130,23 +132,23 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 
     // R minimals
     dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL);
-    double rminBarrel = dbManager->TILBrminimal()*CLHEP::cm;
+    double rminBarrel = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-    double rminITC1 = dbManager->TILBrminimal()*CLHEP::cm;
+    double rminITC1 = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-    double rminITC = dbManager->TILBrminimal()*CLHEP::cm;
+    double rminITC = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4);
-    double rminCrack = dbManager->TILBrminimal()*CLHEP::cm;
+    double rminCrack = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL);
-    double rminExtended = dbManager->TILBrminimal()*CLHEP::cm;
-    double rminFinger = dbManager->TILBrmax()*CLHEP::cm;
+    double rminExtended = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
+    double rminFinger = dbManager->TILBrmax()*GeoModelKernelUnits::cm;
     
     // R maximal
-    double rmaxTotal = dbManager->TILErmam()*CLHEP::cm;
+    double rmaxTotal = dbManager->TILErmam()*GeoModelKernelUnits::cm;
     
-    GeoPcon* tileEnvPconeBarrel    = new GeoPcon(0, 360*CLHEP::deg);
-    GeoPcon* tileEnvPconePosEndcap = new GeoPcon(0, 360*CLHEP::deg);
-    GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(0, 360*CLHEP::deg);
+    GeoPcon* tileEnvPconeBarrel    = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
+    GeoPcon* tileEnvPconePosEndcap = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
+    GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
 
     // Negative Endcap
     tileEnvPconeNegEndcap->addPlane(-endTile,rminFinger,rmaxTotal);
@@ -189,13 +191,13 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvTileEnvelopeNegEndcap = new GeoPhysVol(lvTileEnvelopeNegEndcap);
 
     /*
-    const GeoShape& bbqEnvelope = ((*tileEnvPconeBarrel)<<HepGeom::TranslateX3D(1000.)).
-      add(((*tileEnvPconePosEndcap)<<HepGeom::TranslateZ3D(0.))).
-      add(((*tileEnvPconeNegEndcap)<<HepGeom::TranslateZ3D(0.)));
+    const GeoShape& bbqEnvelope = ((*tileEnvPconeBarrel)<<GeoTrf::TranslateX3D(1000.)).
+      add(((*tileEnvPconePosEndcap)<<GeoTrf::TranslateZ3D(0.))).
+      add(((*tileEnvPconeNegEndcap)<<GeoTrf::TranslateZ3D(0.)));
     lvTileEnvelope = new GeoLogVol("Tile",&bbqEnvelope,matAir);
     pvTileEnvelope = new GeoPhysVol(lvTileEnvelope);
 
-    pvTileEnvelope->add(new GeoTransform(HepGeom::TranslateX3D(1000.)));
+    pvTileEnvelope->add(new GeoTransform(GeoTrf::TranslateX3D(1000.)));
     pvTileEnvelope->add(pvTileEnvelopeBarrel);
     pvTileEnvelope->add(pvTileEnvelopePosEndcap);
     pvTileEnvelope->add(pvTileEnvelopeNegEndcap);
@@ -207,17 +209,17 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     dbManager->SetCurrentTifg(1);
 
     // Z planes
-    double endCentralBarrel = dbManager->TILBdzmodul()/2.*CLHEP::cm;
-    double endEnvelope = endCentralBarrel + dbManager->TIFGdz()*CLHEP::cm;
+    double endCentralBarrel = dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm;
+    double endEnvelope = endCentralBarrel + dbManager->TIFGdz()*GeoModelKernelUnits::cm;
 
     // R minimals
-    double rminBarrel = dbManager->TILBrminimal()*CLHEP::cm;
-    double rminFinger = dbManager->TILBrmax()*CLHEP::cm;
+    double rminBarrel = dbManager->TILBrminimal()*GeoModelKernelUnits::cm;
+    double rminFinger = dbManager->TILBrmax()*GeoModelKernelUnits::cm;
     
     // R maximal
-    double rmaxTotal = dbManager->TILErmam()*CLHEP::cm;
+    double rmaxTotal = dbManager->TILErmam()*GeoModelKernelUnits::cm;
     
-    GeoPcon* tileEnvPconeBarrel = new GeoPcon(0, 360*CLHEP::deg);
+    GeoPcon* tileEnvPconeBarrel = new GeoPcon(0, 360*GeoModelKernelUnits::deg);
     tileEnvPconeBarrel->addPlane(-endEnvelope,rminFinger,rmaxTotal);
     tileEnvPconeBarrel->addPlane(-endCentralBarrel,rminFinger,rmaxTotal);
     tileEnvPconeBarrel->addPlane(-endCentralBarrel,rminBarrel,rmaxTotal);
@@ -235,7 +237,7 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   double deltaPhi = 360./dbManager->TILEnmodul();
 
   Variable varInd;
-  GENFUNCTION phiInd = deltaPhi*(varInd+0.5)*CLHEP::deg;
+  GENFUNCTION phiInd = deltaPhi*(varInd+0.5)*GeoModelKernelUnits::deg;
 
   //------------------------------- B A R R E L --------------------------------------
   // Tube - barrel mother
@@ -243,18 +245,18 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   if(dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL))
   {
 
-    GeoTube* barrelMother = new GeoTube(dbManager->TILBrminimal()*CLHEP::cm,
-					dbManager->TILErmam()*CLHEP::cm,
-					dbManager->TILBdzmodul()/2.*CLHEP::cm);
+    GeoTube* barrelMother = new GeoTube(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+					dbManager->TILErmam()*GeoModelKernelUnits::cm,
+					dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm);
 
     GeoLogVol* lvBarrelMother = new GeoLogVol("Barrel",barrelMother,matAir);
     GeoFullPhysVol* pvBarrelMother = new GeoFullPhysVol(lvBarrelMother);
 
     // Trd - module mother
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1));
 
@@ -280,9 +282,9 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   {
     phi = j*deltaPhi;
 
-    GeoTransform* zrotateMod = new GeoTransform(HepGeom::RotateZ3D(phi*CLHEP::deg));
-    GeoTransform* xtransMod = new GeoTransform(HepGeom::TranslateX3D((dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2. * cm));
-    GeoTransform* yrotateMod = new GeoTransform(HepGeom::RotateY3D(90*CLHEP::deg));
+    GeoTransform* zrotateMod = new GeoTransform(GeoTrf::RotateZ3D(phi*GeoModelKernelUnits::deg));
+    GeoTransform* xtransMod = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2. * cm));
+    GeoTransform* yrotateMod = new GeoTransform(GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg));
 
     pvBarrelMother->add(zrotateMod);
     pvBarrelMother->add(xtransMod);
@@ -292,7 +294,7 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 */
 
     // --- Using the parameterization -----
-    TRANSFUNCTION xfBarrelModuleMother = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfBarrelModuleMother = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     GeoSerialTransformer* stBarrelModuleMother = new GeoSerialTransformer(pvBarrelModuleMother,
 									  &xfBarrelModuleMother,
 									  dbManager->TILEnmodul());
@@ -312,7 +314,7 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   {
     dbManager->SetCurrentEnvByType(1);
     nModules=dbManager->GetEnvNModules();
-    zShift=dbManager->GetEnvZShift()*CLHEP::cm;
+    zShift=dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
 
     sectionBuilder->computeCellDim(m_detectorManager, 
                                    TILE_REGION_CENTRAL,
@@ -367,19 +369,19 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   if(dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL))
   {
   
-    GeoTube* ebarrelMother = new GeoTube(dbManager->TILBrminimal()*CLHEP::cm,
-					 dbManager->TILErmam()*CLHEP::cm,
-					 dbManager->TILBdzmodul()/2.*CLHEP::cm);
+    GeoTube* ebarrelMother = new GeoTube(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+					 dbManager->TILErmam()*GeoModelKernelUnits::cm,
+					 dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm);
 
     GeoLogVol* lvEBarrelMother = new GeoLogVol("EBarrel",ebarrelMother,matAir);
     GeoFullPhysVol* pvEBarrelMotherPos = new GeoFullPhysVol(lvEBarrelMother);
     GeoFullPhysVol* pvEBarrelMotherNeg = new GeoFullPhysVol(lvEBarrelMother);
 
     // Trd - module mother
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
     
@@ -401,8 +403,8 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     				deltaPhi);
 
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
     GeoSerialTransformer* stEBarrelModuleMotherPos = new GeoSerialTransformer(pvEBarrelModuleMother,
 									      &xfEBarrelModuleMotherPos,
@@ -420,14 +422,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvEBarrelMotherNeg->add(stEBarrelModuleMotherNeg);
 
 
-    GeoTransform* tfEBarrelMotherPos = new GeoTransform(HepGeom::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntEBarrelMotherPos = new GeoNameTag("TileEBarrelPos");
     pvTileEnvelopePosEndcap->add(tfEBarrelMotherPos);
     pvTileEnvelopePosEndcap->add(ntEBarrelMotherPos);
     pvTileEnvelopePosEndcap->add(pvEBarrelMotherPos);
 
     
-    GeoTransform* tfEBarrelMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntEBarrelMotherNeg = new GeoNameTag("TileEBarrelNeg");
     pvTileEnvelopeNegEndcap->add(tfEBarrelMotherNeg);
     pvTileEnvelopeNegEndcap->add(ntEBarrelMotherNeg);
@@ -441,10 +443,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   {
     dbManager->SetCurrentEnvByType(2);
     nModulesNeg=dbManager->GetEnvNModules();
-    zShiftNeg=dbManager->GetEnvZShift()*CLHEP::cm;
+    zShiftNeg=dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentEnvByType(3);
     nModulesPos=dbManager->GetEnvNModules();
-    zShiftPos=dbManager->GetEnvZShift()*CLHEP::cm;
+    zShiftPos=dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
 
     sectionBuilder->computeCellDim(m_detectorManager,
                                    TILE_REGION_EXTENDED,
@@ -454,7 +456,7 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   } else
   {
     nModulesPos=nModulesNeg=dbManager->TILEnmodul();
-    zShiftPos=zShiftNeg=dbManager->TILEzshift()*CLHEP::cm;
+    zShiftPos=zShiftNeg=dbManager->TILEzshift()*GeoModelKernelUnits::cm;
     // do not compute cell volumes for old setups (before DC3), 
     // because cell-size table might be missing in DB
   }
@@ -505,13 +507,13 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
 
-    GeoTube* itcWheel1 = new GeoTube(dbManager->TILBrminimal()*CLHEP::cm,
-				     dbManager->TILErmam()*CLHEP::cm,
-				     dbManager->TILBdzmodul()/2.*CLHEP::cm);
+    GeoTube* itcWheel1 = new GeoTube(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+				     dbManager->TILErmam()*GeoModelKernelUnits::cm,
+				     dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm);
 
-    GeoTube* itcWheel2 = new GeoTube(rMinITC2*CLHEP::cm,rMaxITC2*CLHEP::cm,dzITC2/2.*CLHEP::cm);
-    HepGeom::Translate3D itcWheel2OffsetPos(0.,0.,(dbManager->TILBdzmodul()-dzITC2)/2*CLHEP::cm);
-    HepGeom::Translate3D itcWheel2OffsetNeg(0.,0.,(-dbManager->TILBdzmodul()+dzITC2)/2*CLHEP::cm);
+    GeoTube* itcWheel2 = new GeoTube(rMinITC2*GeoModelKernelUnits::cm,rMaxITC2*GeoModelKernelUnits::cm,dzITC2/2.*GeoModelKernelUnits::cm);
+    GeoTrf::Translate3D itcWheel2OffsetPos(0.,0.,(dbManager->TILBdzmodul()-dzITC2)/2*GeoModelKernelUnits::cm);
+    GeoTrf::Translate3D itcWheel2OffsetNeg(0.,0.,(-dbManager->TILBdzmodul()+dzITC2)/2*GeoModelKernelUnits::cm);
 
     const GeoShapeUnion& itcMotherPos = itcWheel1->add(*itcWheel2<<itcWheel2OffsetPos);
     const GeoShapeUnion& itcMotherNeg = itcWheel1->add(*itcWheel2<<itcWheel2OffsetNeg);
@@ -525,10 +527,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     // Common mother for ITC1/2 modules
 
     // -- first sub shape
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal()* tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal()* tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal()* tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal()* tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     GeoTrd* itcModuleSub1 = new GeoTrd(thicknessWedgeMother/2.,
 				       thicknessWedgeMother/2.,
@@ -537,10 +539,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 				       heightWedgeMother/2.);
 
     // -- second sub shape
-    thicknessWedgeMother = dzITC2 * CLHEP::cm;
-    heightWedgeMother = (rMaxITC2 - rMinITC2) * CLHEP::cm;
-    dy1WedgeMother = rMinITC2* tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = rMaxITC2* tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dzITC2 * GeoModelKernelUnits::cm;
+    heightWedgeMother = (rMaxITC2 - rMinITC2) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = rMinITC2* tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = rMaxITC2* tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     GeoTrd* itcModuleSub2 = new GeoTrd(thicknessWedgeMother/2.,
 				       thicknessWedgeMother/2.,
@@ -548,9 +550,9 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 				       dy2WedgeMother,
 				       heightWedgeMother/2.);
 
-    HepGeom::Translate3D itcModuleSubShift ((dbManager->TILBdzmodul()-dzITC2)/2*CLHEP::cm,
+    GeoTrf::Translate3D itcModuleSubShift ((dbManager->TILBdzmodul()-dzITC2)/2*GeoModelKernelUnits::cm,
 				      0.,
-				      ((rMinITC2+rMaxITC2)-(dbManager->TILBrmaximal()+dbManager->TILBrminimal()))/2.*CLHEP::cm);
+				      ((rMinITC2+rMaxITC2)-(dbManager->TILBrmaximal()+dbManager->TILBrminimal()))/2.*GeoModelKernelUnits::cm);
 
     const GeoShapeUnion& itcModuleMother = itcModuleSub1->add(*itcModuleSub2<<itcModuleSubShift);
 
@@ -563,10 +565,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     // 2. Mother for frontplate (since it's short)
     
     //First submother
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
     dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
     
@@ -577,10 +579,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 					heightWedgeMother/2.);
 
     //Second submother
-    thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
     GeoTrd* plug2SubMother = new GeoTrd(thicknessWedgeMother/2.,
 					thicknessWedgeMother/2.,
@@ -588,9 +590,9 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 					dy2WedgeMother,
 					heightWedgeMother/2.);
     
-    HepGeom::Translate3D plug1SubOffset(-dzITC2*CLHEP::cm/2.,
+    GeoTrf::Translate3D plug1SubOffset(-dzITC2*GeoModelKernelUnits::cm/2.,
 				  0.,
-				  (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*CLHEP::cm/2.);
+				  (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2.);
     
     const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset);
     GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir);
@@ -604,9 +606,9 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     				deltaPhi, ModuleNcp,
     				dzITC2);
     
-    GeoTransform* tfPlug1ModuleMother = new GeoTransform(HepGeom::Translate3D(0.,
+    GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0.,
 									0.,
-									(dbManager->TILBrmin()-dbManager->TILBrminimal())*CLHEP::cm/2.));
+									(dbManager->TILBrmin()-dbManager->TILBrminimal())*GeoModelKernelUnits::cm/2.));
     
     pvITCModuleMother->add(tfPlug1ModuleMother);
     pvITCModuleMother->add(pvPlug1ModuleMother);
@@ -614,10 +616,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     //Mother volume for ITC2
     dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
     
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1));
     
@@ -646,8 +648,8 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvITCModuleMother->add(pvPlug2ModuleMother);
 
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfITCModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfITCModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfITCModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfITCModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
     GeoSerialTransformer* stITCModuleMotherPos = new GeoSerialTransformer(pvITCModuleMother,
 									  &xfITCModuleMotherPos,
@@ -662,14 +664,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvITCMotherNeg->add(stITCModuleMotherNeg);
     
     
-    GeoTransform* tfITCMotherPos = new GeoTransform(HepGeom::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntITCMotherPos = new GeoNameTag("TileITCPos");
     pvTileEnvelopePosEndcap->add(tfITCMotherPos);
     pvTileEnvelopePosEndcap->add(ntITCMotherPos);
     pvTileEnvelopePosEndcap->add(pvITCMotherPos);
 
     
-    GeoTransform* tfITCMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntITCMotherNeg = new GeoNameTag("TileITCNeg");
     pvTileEnvelopeNegEndcap->add(tfITCMotherNeg);
     pvTileEnvelopeNegEndcap->add(ntITCMotherNeg);
@@ -680,19 +682,19 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 
   if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3))
   {
-    GeoTube* gapMother = new GeoTube(dbManager->TILBrminimal()*CLHEP::cm,
-				     dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2.*CLHEP::deg),
-				     dbManager->TILBdzmodul()/2.*CLHEP::cm);
+    GeoTube* gapMother = new GeoTube(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+				     dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2.*GeoModelKernelUnits::deg),
+				     dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm);
 
     GeoLogVol* lvGapMother = new GeoLogVol("Gap",gapMother,matAir);
     GeoFullPhysVol* pvGapMotherPos = new GeoFullPhysVol(lvGapMother);
     GeoFullPhysVol* pvGapMotherNeg = new GeoFullPhysVol(lvGapMother);
 
     // Trd - module mother
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
 
     dzGlue = 0.;
 
@@ -714,8 +716,8 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     				deltaPhi);
 
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfGapModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfGapModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfGapModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfGapModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
     GeoSerialTransformer* stGapModuleMotherPos = new GeoSerialTransformer(pvGapModuleMother,
 									  &xfGapModuleMotherPos,
@@ -730,14 +732,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvGapMotherNeg->add(stGapModuleMotherNeg);
 
     
-    GeoTransform* tfGapMotherPos = new GeoTransform(HepGeom::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfGapMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntGapMotherPos = new GeoNameTag("TileGapPos");
     pvTileEnvelopePosEndcap->add(tfGapMotherPos);
     pvTileEnvelopePosEndcap->add(ntGapMotherPos);
     pvTileEnvelopePosEndcap->add(pvGapMotherPos);
     
     
-    GeoTransform* tfGapMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfGapMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntGapMotherNeg = new GeoNameTag("TileGapNeg");
     pvTileEnvelopeNegEndcap->add(tfGapMotherNeg);
     pvTileEnvelopeNegEndcap->add(ntGapMotherNeg);
@@ -748,10 +750,10 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   {
     dbManager->SetCurrentEnvByType(4);
     nModulesNeg=dbManager->GetEnvNModules();
-    zShiftNeg=dbManager->GetEnvZShift()*CLHEP::cm;
+    zShiftNeg=dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
     dbManager->SetCurrentEnvByType(5);
     nModulesPos=dbManager->GetEnvNModules();
-    zShiftPos=dbManager->GetEnvZShift()*CLHEP::cm;
+    zShiftPos=dbManager->GetEnvZShift()*GeoModelKernelUnits::cm;
 
     sectionBuilder->computeCellDim(m_detectorManager,
                                    TILE_REGION_GAP,
@@ -761,7 +763,7 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   } else
   {
     nModulesPos=nModulesNeg=dbManager->TILEnmodul();
-    zShiftPos=zShiftNeg=dbManager->TILEzshift()*CLHEP::cm;
+    zShiftPos=zShiftNeg=dbManager->TILEzshift()*GeoModelKernelUnits::cm;
     // do not compute cell volumes for old setups (before DC3), 
     // because cell-size table might be missing in DB
   }
@@ -805,19 +807,19 @@ void TileDetectorFactory::create(GeoPhysVol *world)
   
   if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4))
   {
-    GeoTube* crackMother = new GeoTube(dbManager->TILBrminimal()*CLHEP::cm,
-				       dbManager->TILBrmaximal()*CLHEP::cm/cos(deltaPhi/2.*CLHEP::deg),
-				       dbManager->TILBdzmodul()/2.*CLHEP::cm);
+    GeoTube* crackMother = new GeoTube(dbManager->TILBrminimal()*GeoModelKernelUnits::cm,
+				       dbManager->TILBrmaximal()*GeoModelKernelUnits::cm/cos(deltaPhi/2.*GeoModelKernelUnits::deg),
+				       dbManager->TILBdzmodul()/2.*GeoModelKernelUnits::cm);
     
     GeoLogVol* lvCrackMother = new GeoLogVol("Crack",crackMother,matAir);
     GeoFullPhysVol* pvCrackMotherPos = new GeoFullPhysVol(lvCrackMother);
     GeoFullPhysVol* pvCrackMotherNeg = new GeoFullPhysVol(lvCrackMother);
     
     // Trd - module mother
-    thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
     dzGlue = 0.;
     
@@ -839,8 +841,8 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     				deltaPhi);
     
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfCrackModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfCrackModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfCrackModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfCrackModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
     GeoSerialTransformer* stCrackModuleMotherPos = new GeoSerialTransformer(pvCrackModuleMother,
 									    &xfCrackModuleMotherPos,
@@ -855,14 +857,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvCrackMotherNeg->add(stCrackModuleMotherNeg);
     
     
-    GeoTransform* tfCrackMotherPos = new GeoTransform(HepGeom::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfCrackMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntCrackMotherPos = new GeoNameTag("TileCrackPos");
     pvTileEnvelopePosEndcap->add(tfCrackMotherPos);
     pvTileEnvelopePosEndcap->add(ntCrackMotherPos);
     pvTileEnvelopePosEndcap->add(pvCrackMotherPos);
     
     
-    GeoTransform* tfCrackMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*CLHEP::cm));
+    GeoTransform* tfCrackMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*GeoModelKernelUnits::cm));
     GeoNameTag* ntCrackMotherNeg = new GeoNameTag("TileCrackNeg");
     pvTileEnvelopeNegEndcap->add(tfCrackMotherNeg);
     pvTileEnvelopeNegEndcap->add(ntCrackMotherNeg);
@@ -880,9 +882,9 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 
     zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2.;
 
-    GeoTube* fingerMother = new GeoTube(dbManager->TILBrmax()*CLHEP::cm,
-					dbManager->TILErmam()*CLHEP::cm,
-					dbManager->TIFGdz()/2.*CLHEP::cm);
+    GeoTube* fingerMother = new GeoTube(dbManager->TILBrmax()*GeoModelKernelUnits::cm,
+					dbManager->TILErmam()*GeoModelKernelUnits::cm,
+					dbManager->TIFGdz()/2.*GeoModelKernelUnits::cm);
     
     GeoLogVol* lvFingerMother = new GeoLogVol("Finger",fingerMother,matAir);
     GeoFullPhysVol* pvFingerMotherPos = new GeoFullPhysVol(lvFingerMother);
@@ -890,14 +892,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     
     // Trd - one finger mother
     //    if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1))
-    //      thicknessWedgeMother = (dbManager->TILBzoffset() - dbManager->TILBdzmodul()/2. + dbManager->TILEzshift() - zEndSection) * CLHEP::cm;
+    //      thicknessWedgeMother = (dbManager->TILBzoffset() - dbManager->TILBdzmodul()/2. + dbManager->TILEzshift() - zEndSection) * GeoModelKernelUnits::cm;
     //    else
-    thicknessWedgeMother = dbManager->TIFGdz()*CLHEP::cm;
+    thicknessWedgeMother = dbManager->TIFGdz()*GeoModelKernelUnits::cm;
 
     dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL);
-    heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
     GeoTrd* fingerModuleMother = new GeoTrd(thicknessWedgeMother/2.,
 					    thicknessWedgeMother/2.,
@@ -915,11 +917,11 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 			       deltaPhi,
 			       m_testbeamGeometry,
 			       ModuleNcp,
-			       thicknessWedgeMother*(1./CLHEP::cm));
+			       thicknessWedgeMother*(1./GeoModelKernelUnits::cm));
     
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfFingerModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfFingerModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
     GeoSerialTransformer* stFingerModuleMotherPos = new GeoSerialTransformer(pvFingerModuleMother,
 									     &xfFingerModuleMotherPos,
@@ -935,14 +937,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvFingerMotherNeg->add(stFingerModuleMotherNeg);
     
     
-    GeoTransform* tfFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*CLHEP::cm));
+    GeoTransform* tfFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*GeoModelKernelUnits::cm));
     GeoNameTag* ntFingerMotherPos = new GeoNameTag("TileFingerPos");
     pvTileEnvelopeBarrel->add(tfFingerMotherPos);
     pvTileEnvelopeBarrel->add(ntFingerMotherPos);
     pvTileEnvelopeBarrel->add(pvFingerMotherPos);
 
     
-    GeoTransform* tfFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*CLHEP::cm));
+    GeoTransform* tfFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*GeoModelKernelUnits::cm));
     GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg");
     pvTileEnvelopeBarrel->add(tfFingerMotherNeg);
     pvTileEnvelopeBarrel->add(ntFingerMotherNeg);
@@ -958,19 +960,19 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 
     zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2. + dbManager->TILEzshift();
 
-    GeoTube* efingerMother = new GeoTube(dbManager->TILBrmax()*CLHEP::cm,
-					 dbManager->TILErmam()*CLHEP::cm,
-					 dbManager->TIFGdz()/2.*CLHEP::cm);
+    GeoTube* efingerMother = new GeoTube(dbManager->TILBrmax()*GeoModelKernelUnits::cm,
+					 dbManager->TILErmam()*GeoModelKernelUnits::cm,
+					 dbManager->TIFGdz()/2.*GeoModelKernelUnits::cm);
 
     GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",efingerMother,matAir);
     GeoFullPhysVol* pvEFingerMotherPos = new GeoFullPhysVol(lvEFingerMother);
     GeoFullPhysVol* pvEFingerMotherNeg = new GeoFullPhysVol(lvEFingerMother);
     
     // Trd - one finger mother
-    thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-    heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-    dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-    dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+    thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+    heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+    dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+    dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
     
     GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2.,
 					     thicknessWedgeMother/2.,
@@ -990,8 +992,8 @@ void TileDetectorFactory::create(GeoPhysVol *world)
 			       m_testbeamGeometry);
 
     // --- Position N modules inside mother (positive/negative) -----
-    TRANSFUNCTION xfEFingerModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
-    TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+    TRANSFUNCTION xfEFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
+    TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     
     GeoSerialTransformer* stEFingerModuleMotherPos = new GeoSerialTransformer(pvEFingerModuleMother,
 									      &xfEFingerModuleMotherPos,
@@ -1006,14 +1008,14 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     pvEFingerMotherNeg->add(stEFingerModuleMotherNeg);
     
     
-    GeoTransform* tfEFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*CLHEP::cm));
+    GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*GeoModelKernelUnits::cm));
     GeoNameTag* ntEFingerMotherPos = new GeoNameTag("TileEFingerPos");
     pvTileEnvelopePosEndcap->add(tfEFingerMotherPos);
     pvTileEnvelopePosEndcap->add(ntEFingerMotherPos);
     pvTileEnvelopePosEndcap->add(pvEFingerMotherPos);
 
     
-    GeoTransform* tfEFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*CLHEP::cm));
+    GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*GeoModelKernelUnits::cm));
     GeoNameTag* ntEFingerMotherNeg = new GeoNameTag("TileEFingerNeg");
     pvTileEnvelopeNegEndcap->add(tfEFingerMotherNeg);
     pvTileEnvelopeNegEndcap->add(ntEFingerMotherNeg);
@@ -1031,11 +1033,11 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     {
       // Top transform for the central barrel
       dbManager->SetCurrentEnvByType(1);
-      HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-      HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-      HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-      HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-      GeoTransform* barrelTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+      GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+      GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+      GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+      GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+      GeoTransform* barrelTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
       world->add(barrelTT);
     }
 
@@ -1051,11 +1053,11 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     {
       // Top transform for the positive endcap
       dbManager->SetCurrentEnvByType(3);
-      HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-      HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-      HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-      HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-      GeoTransform* posEcTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+      GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+      GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+      GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+      GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+      GeoTransform* posEcTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
       world->add(posEcTT);
     }
 
@@ -1071,11 +1073,11 @@ void TileDetectorFactory::create(GeoPhysVol *world)
     {
       // Top transform for the positive endcap
       dbManager->SetCurrentEnvByType(2);
-      HepGeom::Transform3D mz = HepGeom::RotateZ3D(dbManager->GetEnvDPhi());
-      HepGeom::Transform3D my = HepGeom::RotateY3D(dbManager->GetEnvDTheta());
-      HepGeom::Transform3D mx = HepGeom::RotateZ3D(dbManager->GetEnvDPsi());
-      HepGeom::Transform3D vpos = HepGeom::Translate3D(dbManager->GetEnvDX()*CLHEP::cm,dbManager->GetEnvDY()*CLHEP::cm,dbManager->GetEnvDZ()*CLHEP::cm);
-      GeoTransform* negEcTT = new GeoTransform(HepGeom::Transform3D(vpos*(mx*(my*(mz)))));
+      GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi());
+      GeoTrf::Transform3D my = GeoTrf::RotateY3D(dbManager->GetEnvDTheta());
+      GeoTrf::Transform3D mx = GeoTrf::RotateZ3D(dbManager->GetEnvDPsi());
+      GeoTrf::Transform3D vpos = GeoTrf::Translate3D(dbManager->GetEnvDX()*GeoModelKernelUnits::cm,dbManager->GetEnvDY()*GeoModelKernelUnits::cm,dbManager->GetEnvDZ()*GeoModelKernelUnits::cm);
+      GeoTransform* negEcTT = new GeoTransform(GeoTrf::Transform3D(vpos*(mx*(my*(mz)))));
       world->add(negEcTT);
     }
 
diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx
index be22d9e39f49325cd7cb72cec3d7f88e8d7d2396..d7237e3e504b1eab7a5ded0391d7e9c839d8ae81 100755
--- a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx
@@ -19,9 +19,11 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
 
@@ -54,7 +56,7 @@ void TileGeoCutBuilder::MakeCut(GeoPhysVol*&   mother,
   const GeoMaterial* matIron = theMaterialManager->getMaterial("std::Iron");
   */
 
-  GeoTransform* tfTmp = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+  GeoTransform* tfTmp = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
   mother->add(tfTmp);
 
   (*m_log) << MSG::INFO <<"  MakeCut : number= "<<number<<endmsg;
diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx
index 8bfaf0054854442358f72e6568a1357dcddd7f27..d88faeba510ce1a9e43d144ce8578d85d8c969a7 100755
--- a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx
@@ -21,14 +21,16 @@
 #include "GeoModelKernel/GeoTransform.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
 #include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeSubtraction.h"
 #include "GeoModelKernel/GeoCutVolAction.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
 
@@ -43,7 +45,7 @@
 
 #include <assert.h>
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
   
 TileGeoSectionBuilder::TileGeoSectionBuilder(const StoredMaterialManager* matManager,
@@ -84,7 +86,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 {
   (*m_log) << MSG::VERBOSE <<" TileGeoSectionBuilder::fillSection ModuleNcp= "<<ModuleNcp<< endmsg;
 
-  double tan_delta_phi_2 = tan(delta_phi/2*CLHEP::deg);
+  double tan_delta_phi_2 = tan(delta_phi/2*GeoModelKernelUnits::deg);
   
   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   // Obtain required materials - Air and Iron
@@ -110,10 +112,12 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   int SideFl = 1;
   if (ModuleNcp>=35 && ModuleNcp<=37) SideFl = -1;
 
-  HepGeom::Transform3D  TransCut2, TransCutL, TransCutR;
+  GeoTrf::Transform3D TransCut2(GeoTrf::Transform3D::Identity()); 
+  GeoTrf::Transform3D TransCutL(GeoTrf::Transform3D::Identity());
+  GeoTrf::Transform3D TransCutR(GeoTrf::Transform3D::Identity());
 
-  const GeoShapeUnion *CutA= NULL;
-  GeoShape *CutB= NULL;
+  const GeoShapeUnion *CutA{nullptr};
+  GeoShape *CutB{nullptr};
 
   // ext. barrel Cuts description
   if (sec_number==2 && m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)))
@@ -121,7 +125,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       volname = "CutB"; m_dbManager->SetCurrentCuts(volname); 
       PosXcut = m_dbManager->CutsXpos(); 
       PosYcut = m_dbManager->CutsYpos();
-      Rmore   = 0.8*CLHEP::cm;
+      Rmore   = 0.8*GeoModelKernelUnits::cm;
 
       // Inert materials, CutB1
       dX1 = m_dbManager->CutsDX1()+Rmore; 
@@ -158,47 +162,47 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       checking("Cut2down", false, 1, dX1,dX2,dY1,dY2,dZ2);
       GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2);
  
-      HepGeom::Translate3D yPosA(0.,0.,-dZ1-dZ2);
+      GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2);
 
       const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA);
       CutA = &CutA1;
       
-      Radius = (m_dbManager->TILBrmaximal() + m_dbManager->TILBrminimal())/2 * CLHEP::cm; 
+      Radius = (m_dbManager->TILBrmaximal() + m_dbManager->TILBrminimal())/2 * GeoModelKernelUnits::cm; 
 
-      if (ModuleNcp==35||ModuleNcp==62) { YcorA = 5*CLHEP::cm;   YcorB = 5*CLHEP::cm; lenPla =0.8*CLHEP::cm, Blia = 17.4*CLHEP::cm;}  
-      if (ModuleNcp==36||ModuleNcp==61) { YcorA = 6.5*CLHEP::cm; YcorB = 6*CLHEP::cm; lenPla =1.7*CLHEP::cm; Blia = 16.9*CLHEP::cm;} 
-      if (ModuleNcp==37||ModuleNcp==60) { YcorA = 8*CLHEP::cm;   YcorB = 9*CLHEP::cm; lenPla =2.8*CLHEP::cm; Blia = 16.4*CLHEP::cm;} 
+      if (ModuleNcp==35||ModuleNcp==62) { YcorA = 5*GeoModelKernelUnits::cm;   YcorB = 5*GeoModelKernelUnits::cm; lenPla =0.8*GeoModelKernelUnits::cm, Blia = 17.4*GeoModelKernelUnits::cm;}  
+      if (ModuleNcp==36||ModuleNcp==61) { YcorA = 6.5*GeoModelKernelUnits::cm; YcorB = 6*GeoModelKernelUnits::cm; lenPla =1.7*GeoModelKernelUnits::cm; Blia = 16.9*GeoModelKernelUnits::cm;} 
+      if (ModuleNcp==37||ModuleNcp==60) { YcorA = 8*GeoModelKernelUnits::cm;   YcorB = 9*GeoModelKernelUnits::cm; lenPla =2.8*GeoModelKernelUnits::cm; Blia = 16.4*GeoModelKernelUnits::cm;} 
 
-      TransCut2 = HepGeom::TranslateZ3D(-Radius) 
-	* HepGeom::RotateX3D((90-phi)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg) 
-	* HepGeom::Translate3D(0.1*CLHEP::cm,SideFl*17.5*CLHEP::cm,-PosY+YcorA); 
+      TransCut2 = GeoTrf::TranslateZ3D(-Radius) 
+	* GeoTrf::RotateX3D((90-phi)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) 
+	* GeoTrf::Translate3D(0.1*GeoModelKernelUnits::cm,SideFl*17.5*GeoModelKernelUnits::cm,-PosY+YcorA); 
 
       // For modules on the side C apply extra transformation
       // which implements ReflectZ(0)
       if(neg) {
-	HepGeom::Point3D<double> ptTmp = TransCut2*HepGeom::Point3D<double>(0.,0.,0.);
-	TransCut2 = HepGeom::TranslateX3D(2*ptTmp.x())*HepGeom::RotateZ3D(180*CLHEP::deg)*TransCut2;
+	GeoTrf::Vector3D ptTmp = TransCut2*GeoTrf::Vector3D(0.,0.,0.);
+	TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg)*TransCut2;
       }
 
       if (ModuleNcp>=60 && ModuleNcp<=62) {   
-	TransCutL = HepGeom::TranslateZ3D(-Radius) 
-	  * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg) 
-	  * HepGeom::Translate3D(-1.4*CLHEP::cm,PosYcut+YcorB,-PosXcut-Blia); 
+	TransCutL = GeoTrf::TranslateZ3D(-Radius) 
+	  * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg) 
+	  * GeoTrf::Translate3D(-1.4*GeoModelKernelUnits::cm,PosYcut+YcorB,-PosXcut-Blia); 
 
 	// ReflectZ for C side
 	if(neg) {
-	  HepGeom::Point3D<double> ptTmp = TransCutL*HepGeom::Point3D<double>(0.,0.,0.);
-	  TransCutL = HepGeom::TranslateX3D(2*ptTmp.x())*HepGeom::RotateZ3D(180*CLHEP::deg)*TransCutL;
+	  GeoTrf::Vector3D ptTmp = TransCutL*GeoTrf::Vector3D(0.,0.,0.);
+	  TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg)*TransCutL;
 	}
       } else if (ModuleNcp>=35 && ModuleNcp<=37)  { 
-	TransCutR = HepGeom::TranslateZ3D(-Radius) 
-	  * HepGeom::RotateY3D(180*CLHEP::deg) * HepGeom::RotateX3D(phi*CLHEP::deg) 
-	  * HepGeom::Translate3D(-1.4*CLHEP::cm,PosYcut+YcorB,PosXcut+Blia)  
-	  * HepGeom::RotateY3D(180*CLHEP::deg); 
+	TransCutR = GeoTrf::TranslateZ3D(-Radius) 
+	  * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg) * GeoTrf::RotateX3D(phi*GeoModelKernelUnits::deg) 
+	  * GeoTrf::Translate3D(-1.4*GeoModelKernelUnits::cm,PosYcut+YcorB,PosXcut+Blia)  
+	  * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg); 
 	// ReflectZ for C side
 	if(neg) {
-	  HepGeom::Point3D<double> ptTmp = TransCutR*HepGeom::Point3D<double>(0.,0.,0.);
-	  TransCutR = HepGeom::TranslateX3D(2*ptTmp.x())*HepGeom::RotateZ3D(180*CLHEP::deg)*TransCutR;
+	  GeoTrf::Vector3D ptTmp = TransCutR*GeoTrf::Vector3D(0.,0.,0.);
+	  TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg)*TransCutR;
 	}
       }
       
@@ -215,21 +219,21 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   if (m_dbManager->TILBngirder() > 0)
   {
     // Mother volume for girder
-    thicknessGirderMother = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend() - m_dbManager->TILBdzend2())*CLHEP::cm;
+    thicknessGirderMother = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend() - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
     // special module with special girder
     if ((Id4 == 7) && (sec_number == 3))
-      thicknessGirderMother = (m_dbManager->TILBdzgir() - m_dbManager->TILBdzend() - m_dbManager->TILBdzend2())*CLHEP::cm;
+      thicknessGirderMother = (m_dbManager->TILBdzgir() - m_dbManager->TILBdzend() - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
 
-    double heightGirderMother = (tile_rmax - m_dbManager->TILBrmax())*CLHEP::cm;
-    double dy1GirderMother = m_dbManager->TILBrmax() * tan_delta_phi_2 * CLHEP::cm;
-    double dy2GirderMother = tile_rmax * tan_delta_phi_2 * CLHEP::cm;
+    double heightGirderMother = (tile_rmax - m_dbManager->TILBrmax())*GeoModelKernelUnits::cm;
+    double dy1GirderMother = m_dbManager->TILBrmax() * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+    double dy2GirderMother = tile_rmax * tan_delta_phi_2 * GeoModelKernelUnits::cm;
     // ps test the TILB DZGIR
     //     std::cout <<"\t\t PS Girder Module = "<<ModuleNcp<< std::endl;
     //     std::cout <<"\t\t PS thicknessGirderMother = "<<thicknessGirderMother<< std::endl;
     //ps account for special ITC modules 14,15,18,19
     if  ((Id4 == 7) && (sec_number == 3))
       {
-	specialModuleZShift = 0.5*CLHEP::cm*(m_dbManager->TILBdzgir() - m_dbManager->TILBdzmodul());
+	specialModuleZShift = 0.5*GeoModelKernelUnits::cm*(m_dbManager->TILBdzgir() - m_dbManager->TILBdzmodul());
       }
     //
     checking("GirderMother", false, 3, 
@@ -248,16 +252,16 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
                tile_rmax,
                m_dbManager->TILBrmax(),
                tan_delta_phi_2,
-               thicknessGirderMother*(1./CLHEP::cm));
+               thicknessGirderMother*(1./GeoModelKernelUnits::cm));
 
     GeoTransform* tfGirderMother = 0;
 
     if(sec_number==3)
-      tfGirderMother = new GeoTransform(HepGeom::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*CLHEP::cm/2, 0.,
-						       (m_dbManager->TILBrmax()-m_dbManager->TILBrmin())*CLHEP::cm/2));
+      tfGirderMother = new GeoTransform(GeoTrf::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm/2, 0.,
+						       (m_dbManager->TILBrmax()-m_dbManager->TILBrmin())*GeoModelKernelUnits::cm/2));
     else
-      tfGirderMother = new GeoTransform(HepGeom::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*CLHEP::cm/2, 0.,
-						       (m_dbManager->TILBrmax()-rminb)*CLHEP::cm/2));
+      tfGirderMother = new GeoTransform(GeoTrf::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm/2, 0.,
+						       (m_dbManager->TILBrmax()-rminb)*GeoModelKernelUnits::cm/2));
 
     mother->add(tfGirderMother);
     mother->add(pvGirderMother); 
@@ -277,13 +281,13 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
     if(sec_number==3)
     {
       //ITC coverplate
-      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - zlen_itc2)*CLHEP::cm;
+      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - zlen_itc2)*GeoModelKernelUnits::cm;
 
       if (thicknessFrontPlate > rless)
        {
-         heightFrontPlate = m_dbManager->TILBdrfront()*CLHEP::cm;
-         dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-         dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+         heightFrontPlate = m_dbManager->TILBdrfront()*GeoModelKernelUnits::cm;
+         dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+         dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
 	 if(m_log->level()<=MSG::DEBUG)
 	   (*m_log) << MSG::DEBUG <<"   FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<", "<<thicknessFrontPlate/2
@@ -298,9 +302,9 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
          GeoLogVol* lvFrontPlateSh = new GeoLogVol("FrontPlateSh",frontPlateSh,matIron);
          GeoPhysVol* pvFrontPlateSh = new GeoPhysVol(lvFrontPlateSh);
-         GeoTransform* tfFrontPlateSh = new GeoTransform(HepGeom::Translate3D(
-                    -m_dbManager->TILBdzmodul()/2*CLHEP::cm+thicknessFrontPlate/2, 0., 
-                    (rminb - tile_rmax)/2*CLHEP::cm)); 
+         GeoTransform* tfFrontPlateSh = new GeoTransform(GeoTrf::Translate3D(
+                    -m_dbManager->TILBdzmodul()/2*GeoModelKernelUnits::cm+thicknessFrontPlate/2, 0., 
+                    (rminb - tile_rmax)/2*GeoModelKernelUnits::cm)); 
 
          mother->add(tfFrontPlateSh);
          mother->add(pvFrontPlateSh);
@@ -323,10 +327,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       volname = "CutB"; m_dbManager->SetCurrentCuts(volname); 
       dXCutB = m_dbManager->CutsDX1(); 
       
-      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*CLHEP::cm;
-      heightFrontPlate = m_dbManager->TILBdrfront()*CLHEP::cm;
-      dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-      dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
+      heightFrontPlate = m_dbManager->TILBdrfront()*GeoModelKernelUnits::cm;
+      dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+      dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
       GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2 -(dXCutA+dXCutB),
 				      thicknessFrontPlate/2 -(dXCutA+dXCutB),
@@ -336,8 +340,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       // Cuting of Plate
       /*
-      HepGeom::Transform3D  TCu2 = HepGeom::RotateX3D((90-phi)*CLHEP::deg) * HepGeom::RotateY3D(180*CLHEP::deg)
-                           * HepGeom::Translate3D(thicknessFrontPlate/2-dXCutA,0,0); 
+      GeoTrf::Transform3D  TCu2 = GeoTrf::RotateX3D((90-phi)*GeoModelKernelUnits::deg) * GeoTrf::RotateY3D(180*GeoModelKernelUnits::deg)
+                           * GeoTrf::Translate3D(thicknessFrontPlate/2-dXCutA,0,0); 
       GeoTransform* TCu = new GeoTransform(TCu2);
 
       const GeoShape &tmp_frontPlate = frontPlate->subtract((*CutA)<<TCu2);
@@ -346,9 +350,9 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); 
       GeoPhysVol* pvFrontPlate = new GeoPhysVol(lvFrontPlate); 
-      GeoTransform* tfFrontPlate = new GeoTransform(HepGeom::Translate3D(
-		    (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*CLHEP::cm+ dXCutB, 0.,
-                    (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*CLHEP::cm));
+      GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D(
+		    (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*GeoModelKernelUnits::cm+ dXCutB, 0.,
+                    (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*GeoModelKernelUnits::cm));
 
       mother->add(tfFrontPlate);
       mother->add(pvFrontPlate);
@@ -360,10 +364,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
     else
     {
       //Ordinary frontplate
-      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*CLHEP::cm;
-      heightFrontPlate = m_dbManager->TILBdrfront()*CLHEP::cm;
-      dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-      dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+      thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
+      heightFrontPlate = m_dbManager->TILBdrfront()*GeoModelKernelUnits::cm;
+      dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+      dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
       GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2,
 				      thicknessFrontPlate/2,
@@ -373,9 +377,9 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); 
       GeoPhysVol* pvFrontPlate = new GeoPhysVol(lvFrontPlate);
-      GeoTransform* tfFrontPlate = new GeoTransform(HepGeom::Translate3D(
-                    (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*CLHEP::cm, 0.,
-                    (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*CLHEP::cm));
+      GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D(
+                    (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*GeoModelKernelUnits::cm, 0.,
+                    (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*GeoModelKernelUnits::cm));
 
       mother->add(tfFrontPlate);
       mother->add(pvFrontPlate);
@@ -386,13 +390,13 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   double dy1EndPlate, dy2EndPlate, thicknessEndPlate, heightEndPlate;
 
   //VARIABLES FOR END PLATE HOLE  
-  double heightEPHole = m_dbManager->TILBflangex()*CLHEP::cm;
-  double dyEPHole = m_dbManager->TILBflangex()*CLHEP::cm/2;
+  double heightEPHole = m_dbManager->TILBflangex()*GeoModelKernelUnits::cm;
+  double dyEPHole = m_dbManager->TILBflangex()*GeoModelKernelUnits::cm/2;
 
   // ps . shifts for end plates in cutout regions 
-  HepGeom::Transform3D cutOutTransformation ; 
+  GeoTrf::Transform3D cutOutTransformation(GeoTrf::Transform3D::Identity()); 
   //first endplate
-  GeoTransform* tfEndPlateSh =NULL;
+  GeoTransform* tfEndPlateSh{nullptr};
 
   if (m_dbManager->TILBdzend1() > 0)
   {
@@ -400,10 +404,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
     {
  
       //Short endplate
-      dy1EndPlate = rminb * tan_delta_phi_2 * CLHEP::cm;
-      dy2EndPlate = m_dbManager->TILBrmax() * tan_delta_phi_2 * CLHEP::cm;
-      thicknessEndPlate = m_dbManager->TILBdzend1() * CLHEP::cm;
-      heightEndPlate = (m_dbManager->TILBrmax() - rminb) * CLHEP::cm;
+      dy1EndPlate = rminb * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      dy2EndPlate = m_dbManager->TILBrmax() * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      thicknessEndPlate = m_dbManager->TILBdzend1() * GeoModelKernelUnits::cm;
+      heightEndPlate = (m_dbManager->TILBrmax() - rminb) * GeoModelKernelUnits::cm;
       //
       // creating standart endplate. It is the same for 
       // both standard mosules and modules with cuts
@@ -438,40 +442,40 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
 	if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) )
 	  {
-	    rotationAngle = (180.0 - 25.3125 )* CLHEP::deg ;  // ATLLEMS_0003 0004
-	    shiftCutPlate =  38.7 * CLHEP::mm;
+	    rotationAngle = (180.0 - 25.3125 )* GeoModelKernelUnits::deg ;  // ATLLEMS_0003 0004
+	    shiftCutPlate =  38.7 * GeoModelKernelUnits::mm;
 
 	    cutOutTransformation = 
-	      HepGeom::Translate3D(0,0, -heightEndPlate/2.) *  
-	      HepGeom::RotateX3D(  90 * CLHEP::deg ) *
-	      HepGeom::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) *
-	      HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+	      GeoTrf::Translate3D(0,0, -heightEndPlate/2.) *  
+	      GeoTrf::RotateX3D(  90 * GeoModelKernelUnits::deg ) *
+	      GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) *
+	      GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 	    
 	    const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;	    
 	    lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3760) , matIron);
 	  }
 	else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) )
 	  {
-	    rotationAngle = - ( 116.4832 - 90. )* CLHEP::deg ;  // ATLLEMS_0005 0006
-	    shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*CLHEP::cm - 1448.4 * CLHEP::mm);
+	    rotationAngle = - ( 116.4832 - 90. )* GeoModelKernelUnits::deg ;  // ATLLEMS_0005 0006
+	    shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*GeoModelKernelUnits::cm - 1448.4 * GeoModelKernelUnits::mm);
 
 	    cutOutTransformation = 
-	      HepGeom::Translate3D( 0, 0, -heightEndPlate/2. ) *  
-	      HepGeom::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate + 0.5*dy2EndPlate*(1.- std::cos(rotationAngle*CLHEP::rad)))  ) *  
-	      HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+	      GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *  
+	      GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate + 0.5*dy2EndPlate*(1.- std::cos(rotationAngle*GeoModelKernelUnits::rad)))  ) *  
+	      GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
 	    const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;	    
 	    lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3661) , matIron);
 	  }
 	else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) )
 	  {
-	    rotationAngle = - ( 104.0625 - 90.0 )* CLHEP::deg ;  // ATLLEMS_0007 0008
-	    shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*CLHEP::cm - 1534.6 * CLHEP::mm);
+	    rotationAngle = - ( 104.0625 - 90.0 )* GeoModelKernelUnits::deg ;  // ATLLEMS_0007 0008
+	    shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*GeoModelKernelUnits::cm - 1534.6 * GeoModelKernelUnits::mm);
 	    
 	    cutOutTransformation = 
-	      HepGeom::Translate3D( 0, 0, -heightEndPlate/2. ) *  
-	      HepGeom::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
-	      HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+	      GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *  
+	      GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
+	      GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 	    
 	    const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;	    
 	    lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3562) , matIron);
@@ -497,10 +501,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       GeoPhysVol* pvEndPlateSh = new GeoPhysVol(lvEndPlateSh);
 
-      tfEndPlateSh = new GeoTransform(HepGeom::Translate3D(
+      tfEndPlateSh = new GeoTransform(GeoTrf::Translate3D(
 						     specialModuleZShift + 
-						     (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*CLHEP::cm/2, 0.,
-						     (m_dbManager->TILBrmax() - tile_rmax)*CLHEP::cm/2));
+						     (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*GeoModelKernelUnits::cm/2, 0.,
+						     (m_dbManager->TILBrmax() - tile_rmax)*GeoModelKernelUnits::cm/2));
       tfEndPlateSh->ref();
       
       mother->add(tfEndPlateSh);
@@ -513,10 +517,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
     else
     {
       //Ordinary endplate
-      dy1EndPlate = rminb * tan_delta_phi_2 * CLHEP::cm;
-      dy2EndPlate = tile_rmax * tan_delta_phi_2 * CLHEP::cm;
-      thicknessEndPlate = m_dbManager->TILBdzend1() * CLHEP::cm;
-      heightEndPlate = (tile_rmax-rminb)*CLHEP::cm; 
+      dy1EndPlate = rminb * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      dy2EndPlate = tile_rmax * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      thicknessEndPlate = m_dbManager->TILBdzend1() * GeoModelKernelUnits::cm;
+      heightEndPlate = (tile_rmax-rminb)*GeoModelKernelUnits::cm; 
 
       GeoTrd* endPlate1 = new GeoTrd(thicknessEndPlate/2,
 				     thicknessEndPlate/2,
@@ -538,14 +542,14 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
 	GeoLogVol* lvEPHole1 = new GeoLogVol("EPHole1",epHole1,matAir);
 	GeoPhysVol* pvEPHole1 = new GeoPhysVol(lvEPHole1);
-	GeoTransform* tfEPHole1 = new GeoTransform(HepGeom::Translate3D(0.,0.,
-                                      (m_dbManager->TILBflangey()-(tile_rmax + rminb)/2)*CLHEP::cm));
+	GeoTransform* tfEPHole1 = new GeoTransform(GeoTrf::Translate3D(0.,0.,
+                                      (m_dbManager->TILBflangey()-(tile_rmax + rminb)/2)*GeoModelKernelUnits::cm));
 	pvEndPlate1->add(tfEPHole1);
 	pvEndPlate1->add(pvEPHole1);
       }
 
-      GeoTransform* tfEndPlate1 = new GeoTransform(HepGeom::Translate3D(
-                                      (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*CLHEP::cm/2, 0., 0.));
+      GeoTransform* tfEndPlate1 = new GeoTransform(GeoTrf::Translate3D(
+                                      (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*GeoModelKernelUnits::cm/2, 0., 0.));
       mother->add(tfEndPlate1);
       mother->add(pvEndPlate1);  
 
@@ -555,7 +559,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   }
 
   //second endplate
-  GeoTransform* tfEndPlate2 =NULL;
+  GeoTransform* tfEndPlate2{nullptr};
 
   if (m_dbManager->TILBdzend2() > 0)
   {
@@ -563,10 +567,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       double radShift =lenPla;
       double rminbT=rminb + radShift;
 
-      dy1EndPlate = rminb * tan_delta_phi_2 * CLHEP::cm;
-      dy2EndPlate = tile_rmax * tan_delta_phi_2 * CLHEP::cm;
-      thicknessEndPlate = m_dbManager->TILBdzend2() * CLHEP::cm;
-      heightEndPlate = (tile_rmax-rminb) * CLHEP::cm;
+      dy1EndPlate = rminb * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      dy2EndPlate = tile_rmax * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+      thicknessEndPlate = m_dbManager->TILBdzend2() * GeoModelKernelUnits::cm;
+      heightEndPlate = (tile_rmax-rminb) * GeoModelKernelUnits::cm;
 
 
       GeoLogVol* lvEndPlate2 = 0;
@@ -576,8 +580,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 				     dy2EndPlate,
 				     heightEndPlate/2);  
       
-      tfEndPlate2 = new GeoTransform(HepGeom::Translate3D(
-						    (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*CLHEP::cm/2, 0., 0.));
+      tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D(
+						    (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*GeoModelKernelUnits::cm/2, 0., 0.));
       tfEndPlate2->ref();
       
       if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) 
@@ -596,51 +600,51 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  
 	  if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) )
 	    {
-	      rotationAngle = - ( 115.3125 - 90.0 )* CLHEP::deg ;  // ATLLEMS_0011 0012
-	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*CLHEP::cm - 1364.0 * CLHEP::mm);
+	      rotationAngle = - ( 115.3125 - 90.0 )* GeoModelKernelUnits::deg ;  // ATLLEMS_0011 0012
+	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*GeoModelKernelUnits::cm - 1364.0 * GeoModelKernelUnits::mm);
 	      
 	      cutOutTransformation = 
-		HepGeom::Translate3D( 0, 0, -heightEndPlate/2. ) *  
-		HepGeom::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
-		HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+		GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *  
+		GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
+		GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 	      
 	      const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;	    
 	      lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3760) , matIron);
 	    }
 	  else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) )
 	    {
-	      rotationAngle = - ( 109.6875 - 90.0 )* CLHEP::deg ;  // ATLLEMS_0009 0010
-	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*CLHEP::cm - 1464.0 * CLHEP::mm);
+	      rotationAngle = - ( 109.6875 - 90.0 )* GeoModelKernelUnits::deg ;  // ATLLEMS_0009 0010
+	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*GeoModelKernelUnits::cm - 1464.0 * GeoModelKernelUnits::mm);
 	      
 	      cutOutTransformation = 
-		HepGeom::Translate3D( 0, 0, -heightEndPlate/2. ) *  
-		HepGeom::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
-		HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+		GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *  
+		GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
+		GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 	      
 	      const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;	    
 	      lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3661) , matIron);
 	    }
 	  else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) )
 	    {
-	      rotationAngle = - ( 104.0625 - 90.0 )* CLHEP::deg ;  // ATLLEMS_0009 0010
-	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*CLHEP::cm - ( 1915.0 -385.0 )* CLHEP::mm); // girder is subtracted (no drawing)
+	      rotationAngle = - ( 104.0625 - 90.0 )* GeoModelKernelUnits::deg ;  // ATLLEMS_0009 0010
+	      shiftCutPlate =  ( ( m_dbManager->TILBrmax() - rminb )*GeoModelKernelUnits::cm - ( 1915.0 -385.0 )* GeoModelKernelUnits::mm); // girder is subtracted (no drawing)
 	      
 	      cutOutTransformation = 
-		HepGeom::Translate3D( 0, 0, -heightEndPlate/2. ) *  
-		HepGeom::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
-		HepGeom::RotateX3D( rotationSign * rotationAngle ) ;
+		GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *  
+		GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *  
+		GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 	      
 	      const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;	    
 	      lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3562) , matIron);
 	    }
 	  
-	  //         dy1EndPlate = rminbT * tan_delta_phi_2 * CLHEP::cm;
-	  //         dy2EndPlate = tile_rmax * tan_delta_phi_2 * CLHEP::cm;
-	  //         thicknessEndPlate = m_dbManager->TILBdzend2() * CLHEP::cm;
-	  //         heightEndPlate = (tile_rmax - rminbT) * CLHEP::cm;
+	  //         dy1EndPlate = rminbT * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+	  //         dy2EndPlate = tile_rmax * tan_delta_phi_2 * GeoModelKernelUnits::cm;
+	  //         thicknessEndPlate = m_dbManager->TILBdzend2() * GeoModelKernelUnits::cm;
+	  //         heightEndPlate = (tile_rmax - rminbT) * GeoModelKernelUnits::cm;
 	  
-	  //         tfEndPlate2 = new GeoTransform(HepGeom::Translate3D(
-	  //                                       (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*CLHEP::cm/2, 0, radShift/2*CLHEP::cm));
+	  //         tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D(
+	  //                                       (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*GeoModelKernelUnits::cm/2, 0, radShift/2*GeoModelKernelUnits::cm));
 	  
 	}
       else
@@ -653,7 +657,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       //Position air hole
       if (m_dbManager->TILBflangex() > 0)
       {
-        dyEPHole = m_dbManager->TILBflangex()*CLHEP::cm/2;
+        dyEPHole = m_dbManager->TILBflangex()*GeoModelKernelUnits::cm/2;
 
 	GeoTrd* epHole2 = new GeoTrd (thicknessEndPlate/2,
 				      thicknessEndPlate/2,
@@ -663,8 +667,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
 	GeoLogVol* lvEPHole2 = new GeoLogVol("EPHole2",epHole2,matAir);
 	GeoPhysVol* pvEPHole2 = new GeoPhysVol(lvEPHole2);
-	GeoTransform* tfEPHole2 = new GeoTransform(HepGeom::Translate3D(0.,0.,
-                                      (m_dbManager->TILBflangey()-(tile_rmax + rminbT)/2)*CLHEP::cm));
+	GeoTransform* tfEPHole2 = new GeoTransform(GeoTrf::Translate3D(0.,0.,
+                                      (m_dbManager->TILBflangey()-(tile_rmax + rminbT)/2)*GeoModelKernelUnits::cm));
 	pvEndPlate2->add(tfEPHole2);
 	pvEndPlate2->add(pvEPHole2);
       }
@@ -679,10 +683,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   } // End Plates
 
   //---------------------------------------------------Absorber--------------------------------------------------------
-  double heightAbsorber = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*CLHEP::cm;
-  double thicknessAbsorber = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*CLHEP::cm;
-  double dy1Absorber = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-  double dy2Absorber = (m_dbManager->TILBrmax()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+  double heightAbsorber = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*GeoModelKernelUnits::cm;
+  double thicknessAbsorber = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
+  double dy1Absorber = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+  double dy2Absorber = (m_dbManager->TILBrmax()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
   checking("Absorber", true, 3, 
       thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -692,10 +696,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0; 
   int nA1 =32, nA2 = 0, nA3 =16;
 
-  GeoTrd *absorber =NULL, *absorber1 =NULL, *absorber3 =NULL;
-  GeoLogVol *lvAbsorber =NULL, *lvAbsorber1 =NULL, *lvAbsorber3 =NULL;
-  GeoPhysVol *pvAbsorber =NULL, *pvAbsorber1 =NULL, *pvAbsorber3 =NULL;
-  GeoPhysVol *pvTmp_Absorber1 =NULL, *pvTmp_Absorber3 =NULL;
+  GeoTrd *absorber{nullptr}, *absorber1{nullptr}, *absorber3{nullptr};
+  GeoLogVol *lvAbsorber{nullptr}, *lvAbsorber1{nullptr}, *lvAbsorber3{nullptr};
+  GeoPhysVol *pvAbsorber{nullptr}, *pvAbsorber1{nullptr}, *pvAbsorber3{nullptr};
+  GeoPhysVol *pvTmp_Absorber1{nullptr}, *pvTmp_Absorber3{nullptr};
   
   // Perform different actions depending on sections
   switch (sec_number)
@@ -703,7 +707,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   case 2:
     {
       //Extended barrel - consists of ordinary periods of type 1 only
-      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 
       // The period number for middle absorber
       nA2 = m_dbManager->TILBnperiod() - (nA1+nA3);
@@ -803,10 +807,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       //nrOfPeriods-1 ordinary period and second with one special period of type 2
 
       //First division
-      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 
       m_barrelPeriodThickness = thicknessPeriod;
-      m_barrelGlue = dzglue*CLHEP::cm;
+      m_barrelGlue = dzglue*GeoModelKernelUnits::cm;
 
       checking("Period 0", false, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -821,7 +825,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvPeriod = new GeoPhysVol(lvPeriod);
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  1); // 1-period type
@@ -838,7 +842,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       // Place periods into Absorber Child like G4 replica
       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
-      TRANSFUNCTION xfReplica1 = Pow(HepGeom::TranslateX3D(1.),periodPos1);
+      TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
       if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,m_dbManager->TILBnperiod()-1,
                                     (thicknessAbsorberChild - thicknessAbsorber)/2);
 
@@ -850,12 +854,12 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvAbsorberChild->add(stPeriod);
 
       // Place absorber child
-      tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
+      tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
       pvAbsorber->add(tfAbsorberChild);
       pvAbsorber->add(pvAbsorberChild);
 
       //Second division
-      thicknessPeriod = (m_dbManager->TILBdzmast() + 2.*m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+      thicknessPeriod = (m_dbManager->TILBdzmast() + 2.*m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 
       checking("Period 1", false, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -869,7 +873,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvPeriod = new GeoPhysVol(lvPeriod);
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  2); // 2-period type
@@ -888,14 +892,14 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
                                     (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
       // Place period in the absorber child
-      tfPeriod = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+      tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
       pvAbsorberChild->add(new GeoIdentifierTag(m_dbManager->TILBnperiod()-1));
       pvAbsorberChild->add(tfPeriod);
       pvAbsorberChild->add(pvPeriod);
 
       // Place absorber child
-      tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
+      tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
       pvAbsorber->add(tfAbsorberChild);
       pvAbsorber->add(pvAbsorberChild);
 
@@ -904,7 +908,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   case 2:
     {
       //Extended barrel - consists of ordinary periods of type 1 only
-      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 
       checking("Period 2", false, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -920,7 +924,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       m_extendedPeriodThickness = thicknessPeriod;
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  1); // 1-period type
@@ -929,7 +933,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       //  - first partr of absorber
       //
       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber1)/2;
-      TRANSFUNCTION xfReplica1 = Pow(HepGeom::TranslateX3D(1.),periodPos1);
+      TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
       if (m_verbose) checktransfunc(thicknessAbsorber1,thicknessPeriod,nA1,
                                     (-thicknessAbsorber+thicknessAbsorber1)/2.);
 
@@ -957,7 +961,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       // middle partr of absorber
       GENFUNCTION periodPos2 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber2)/2;
-      TRANSFUNCTION xfReplica2 = Pow(HepGeom::TranslateX3D(1.),periodPos2);
+      TRANSFUNCTION xfReplica2 = Pow(GeoTrf::TranslateX3D(1.),periodPos2);
       if (m_verbose) checktransfunc(thicknessAbsorber2,thicknessPeriod,nA2,
                                     (-thicknessAbsorber+thicknessAbsorber2)/2.+thicknessAbsorber1);
 
@@ -972,7 +976,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       // second partr of absorber
       //
       GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber3)/2;
-      TRANSFUNCTION xfReplica3 = Pow(HepGeom::TranslateX3D(1.),periodPos3);
+      TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
       if (m_verbose) checktransfunc(thicknessAbsorber3,thicknessPeriod,nA3,
                                     (-thicknessAbsorber+thicknessAbsorber3)/2.+thicknessAbsorber2+thicknessAbsorber1);
 
@@ -1016,7 +1020,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  //nrOfPeriods-1 ordinary period of type 1 and second with one special period of type 4
 	  
 	  //First division
-	  thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+	  thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 	  
 	  checking("Period 3 (ITC1 special)", true, 4, 
 		   thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -1030,7 +1034,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  pvPeriod = new GeoPhysVol(lvPeriod);
 	  
  	  fillPeriod(pvPeriod,
- 		     thicknessPeriod*(1./CLHEP::cm),
+ 		     thicknessPeriod*(1./GeoModelKernelUnits::cm),
  		     dzglue,
  		     tan_delta_phi_2,
  		     1); // 1-period type
@@ -1047,7 +1051,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  
 	  // Place periods into Absorber Child like G4 replica
 	  GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
-	  TRANSFUNCTION xfReplicaITC1sp = Pow(HepGeom::TranslateX3D(1.),periodPosITC1sp);
+	  TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp);
           if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,m_dbManager->TILBnperiod()-1,
                                         (thicknessAbsorberChild - thicknessAbsorber)/2);
 	  
@@ -1059,13 +1063,13 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  pvAbsorberChild->add(stPeriod);
 	  
 	  // Place absorber child
-	  tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
+	  tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
 	  pvAbsorber->add(tfAbsorberChild);
 	  pvAbsorber->add(pvAbsorberChild);
 	  //
 	  //Second division
 	  //
-	  thicknessPeriod = m_dbManager->TILBdzspac()*CLHEP::cm;
+	  thicknessPeriod = m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
 	  
 	  checking("Period 5 (ITC1 special)", true, 4, 
 		   thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -1079,7 +1083,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  pvPeriod = new GeoPhysVol(lvPeriod);
 	  
 	  fillPeriod(pvPeriod,
-		     thicknessPeriod*(1./CLHEP::cm),
+		     thicknessPeriod*(1./GeoModelKernelUnits::cm),
 		     dzglue,
 		     tan_delta_phi_2,
 		     4); // 4-period type
@@ -1097,13 +1101,13 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
                                         (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
 	  // Place period in the absorber child
-	  tfPeriod = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	  tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	  pvAbsorberChild->add(new GeoIdentifierTag(m_dbManager->TILBnperiod()-1));
 	  pvAbsorberChild->add(tfPeriod);
 	  pvAbsorberChild->add(pvPeriod);
 	  
 	  // Place absorber child
-	  tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
+	  tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
 	  pvAbsorber->add(tfAbsorberChild);
 	  pvAbsorber->add(pvAbsorberChild);
 	  
@@ -1112,7 +1116,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	}
       else
 	{
-	  thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+	  thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 	  
 	  checking("Period 3", true, 4, 
 		   thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -1126,14 +1130,14 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 	  pvPeriod = new GeoPhysVol(lvPeriod);
 	  
 	  fillPeriod(pvPeriod,
-		     thicknessPeriod*(1./CLHEP::cm),
+		     thicknessPeriod*(1./GeoModelKernelUnits::cm),
 		     dzglue,
 		     tan_delta_phi_2,
 		     3); // 3-period type
 	  
 	  // Place periods into Absorber like G4 replica
 	  GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2;
-	  TRANSFUNCTION xfReplica3 = Pow(HepGeom::TranslateX3D(1.),periodPos3);
+	  TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
           if (m_verbose) checktransfunc(thicknessAbsorber,thicknessPeriod,m_dbManager->TILBnperiod(),0.0);
 	  
 	  //ps      if( (m_dbManager->TILBsection()==7 || m_dbManager->TILBsection()==8) && m_dbManager->SCNTitem()==302) 
@@ -1162,7 +1166,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       //nrOfPeriods-1 ordinary period of type 1 and second with one special period of type 4
 
       //First division
-      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*CLHEP::cm;
+      thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*GeoModelKernelUnits::cm;
 
       checking("Period 4", true, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -1176,7 +1180,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvPeriod = new GeoPhysVol(lvPeriod);
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  1); // 1-period type
@@ -1193,7 +1197,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
 
       // Place periods into Absorber Child like G4 replica
       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
-      TRANSFUNCTION xfReplica1 = Pow(HepGeom::TranslateX3D(1.),periodPos1);
+      TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
       if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,m_dbManager->TILBnperiod()-1,
                                     (thicknessAbsorberChild - thicknessAbsorber)/2);
 
@@ -1205,12 +1209,12 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvAbsorberChild->add(stPeriod);
 
       // Place absorber child
-      tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
+      tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
       pvAbsorber->add(tfAbsorberChild);
       pvAbsorber->add(pvAbsorberChild);
 
       //Second division
-      thicknessPeriod = m_dbManager->TILBdzspac()*CLHEP::cm;
+      thicknessPeriod = m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
 
       checking("Period 5", true, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
@@ -1224,7 +1228,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvPeriod = new GeoPhysVol(lvPeriod);
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  4); // 4-period type
@@ -1242,13 +1246,13 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
                                     (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
       // Place period in the absorber child
-      tfPeriod = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+      tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
       pvAbsorberChild->add(new GeoIdentifierTag(m_dbManager->TILBnperiod()-1));
       pvAbsorberChild->add(tfPeriod);
       pvAbsorberChild->add(pvPeriod);
 
       // Place absorber child
-      tfAbsorberChild = new GeoTransform(HepGeom::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
+      tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
       pvAbsorber->add(tfAbsorberChild);
       pvAbsorber->add(pvAbsorberChild);
 
@@ -1276,8 +1280,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       checking("Period 6", true, 4, 
 	       thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
-      double dy1Period = m_dbManager->TILBflangex()/2.*CLHEP::cm; // correct size from the drawings
-      double dy2Period = m_dbManager->TILBflangey()/2.*CLHEP::cm; // correct size from the drawings
+      double dy1Period = m_dbManager->TILBflangex()/2.*GeoModelKernelUnits::cm; // correct size from the drawings
+      double dy2Period = m_dbManager->TILBflangey()/2.*GeoModelKernelUnits::cm; // correct size from the drawings
       if (dy1Period <= 0.0 || dy2Period <= 0.0 || dy1Period > dy1Absorber || dy2Period > dy2Absorber || dy1Period >= dy2Period ) {
           dy1Period = dy1Absorber;
           dy2Period = dy2Absorber;
@@ -1293,7 +1297,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       pvPeriod = new GeoPhysVol(lvPeriod);
 
       fillPeriod(pvPeriod,
-                 thicknessPeriod*(1./CLHEP::cm),
+                 thicknessPeriod*(1./GeoModelKernelUnits::cm),
                  dzglue,
                  tan_delta_phi_2,
                  5, period);
@@ -1301,7 +1305,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       if (m_verbose) checktransfunc(thicknessAbsorber,thicknessPeriod,1,0.0);
 
       // Place period in the absorber
-      tfPeriod = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+      tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
       pvAbsorber->add(new GeoIdentifierTag(0));
       pvAbsorber->add(tfPeriod);
       pvAbsorber->add(pvPeriod);
@@ -1313,7 +1317,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   }
 
   // Place absorber in the module mother
-  GeoTransform *tfAbsorber = NULL, *tfAbsorber1 =NULL, *tfAbsorber3 =NULL;
+  GeoTransform *tfAbsorber{nullptr}, *tfAbsorber1{nullptr}, *tfAbsorber3{nullptr};
 
   double dXAbsorber = (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2());
   double dZAbsorber = (m_dbManager->TILBrmax() - tile_rmax);
@@ -1321,7 +1325,7 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
   if (sec_number==3)
     { 
       // ps specialModuleZShift
-      tfAbsorber = new GeoTransform(HepGeom::Translate3D( specialModuleZShift + dXAbsorber*CLHEP::cm/2, 0., dZAbsorber*CLHEP::cm/2));
+      tfAbsorber = new GeoTransform(GeoTrf::Translate3D( specialModuleZShift + dXAbsorber*GeoModelKernelUnits::cm/2, 0., dZAbsorber*GeoModelKernelUnits::cm/2));
       mother->add(tfAbsorber);
       mother->add(pvAbsorber);
     }
@@ -1330,8 +1334,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
       if(m_log->level()<=MSG::DEBUG)
 	(*m_log) << MSG::DEBUG << " _fillsection  Ex.barrel in "<< endmsg;
  
-     tfAbsorber1 = new GeoTransform(HepGeom::Translate3D(dXAbsorber*CLHEP::cm/2 - PosAbsor1, 0.,
-                                   (dZAbsorber + m_dbManager->TILBrmin() - rminb)*CLHEP::cm/2)); 
+     tfAbsorber1 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*GeoModelKernelUnits::cm/2 - PosAbsor1, 0.,
+                                   (dZAbsorber + m_dbManager->TILBrmin() - rminb)*GeoModelKernelUnits::cm/2)); 
      mother->add(tfAbsorber1);
      if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) { 
        mother->add(pvTmp_Absorber1);
@@ -1343,16 +1347,16 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
      if(m_log->level()<=MSG::DEBUG)
        (*m_log) << MSG::DEBUG << " _fillsection  ext.barrel pvAbsorber1 Ok"<< endmsg;
 
-     tfAbsorber  = new GeoTransform(HepGeom::Translate3D(dXAbsorber*CLHEP::cm/2 - PosAbsor2, 0.,
-                                    (dZAbsorber + m_dbManager->TILBrmin() - rminb)*CLHEP::cm/2));  
+     tfAbsorber  = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*GeoModelKernelUnits::cm/2 - PosAbsor2, 0.,
+                                    (dZAbsorber + m_dbManager->TILBrmin() - rminb)*GeoModelKernelUnits::cm/2));  
      mother->add(tfAbsorber);
      mother->add(pvAbsorber);
 
      if(m_log->level()<=MSG::DEBUG)
        (*m_log) << MSG::DEBUG << " _fillsection  ext.barrel pvAbsorber Ok"<< endmsg;
 
-     tfAbsorber3 = new GeoTransform(HepGeom::Translate3D(dXAbsorber*CLHEP::cm/2 - PosAbsor3, 0.,  
-                                    (dZAbsorber + m_dbManager->TILBrmin() - rminb)*CLHEP::cm/2));                
+     tfAbsorber3 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*GeoModelKernelUnits::cm/2 - PosAbsor3, 0.,  
+                                    (dZAbsorber + m_dbManager->TILBrmin() - rminb)*GeoModelKernelUnits::cm/2));                
      mother->add(tfAbsorber3);
      if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
        mother->add(pvTmp_Absorber3);
@@ -1366,8 +1370,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*&             mother,
    }
   else                                           
    { 
-     tfAbsorber = new GeoTransform(HepGeom::Translate3D(dXAbsorber*CLHEP::cm/2, 0.,
-                                   (dZAbsorber + m_dbManager->TILBrmin() - rminb)*CLHEP::cm/2));
+     tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*GeoModelKernelUnits::cm/2, 0.,
+                                   (dZAbsorber + m_dbManager->TILBrmin() - rminb)*GeoModelKernelUnits::cm/2));
      mother->add(tfAbsorber);
      mother->add(pvAbsorber);
      if(m_log->level()<=MSG::DEBUG)
@@ -1433,11 +1437,11 @@ void TileGeoSectionBuilder::fillGirder(GeoPhysVol*&             mother,
       dy2GirderElement = (elementRC + elementSizeInR/2) * tan_delta_phi_2;
     }
 
-    girderElement = new GeoTrd(thickness/2*CLHEP::cm,
-			       thickness/2*CLHEP::cm,
-			       dy1GirderElement*CLHEP::cm,
-			       dy2GirderElement*CLHEP::cm,
-			       elementSizeInR/2*CLHEP::cm);
+    girderElement = new GeoTrd(thickness/2*GeoModelKernelUnits::cm,
+			       thickness/2*GeoModelKernelUnits::cm,
+			       dy1GirderElement*GeoModelKernelUnits::cm,
+			       dy2GirderElement*GeoModelKernelUnits::cm,
+			       elementSizeInR/2*GeoModelKernelUnits::cm);
 
     switch(m_dbManager->TIGRmaterial())
     {
@@ -1465,9 +1469,9 @@ void TileGeoSectionBuilder::fillGirder(GeoPhysVol*&             mother,
     }
 
     pvGirderElement = new GeoPhysVol(lvGirderElement);
-    tfGirderElement = new GeoTransform(HepGeom::Translate3D(0.,
-						      elementOffsetInY*CLHEP::cm,
-						      (elementRC-(tilb_rmax + tile_rmax)/2)*CLHEP::cm));
+    tfGirderElement = new GeoTransform(GeoTrf::Translate3D(0.,
+						      elementOffsetInY*GeoModelKernelUnits::cm,
+						      (elementRC-(tilb_rmax + tile_rmax)/2)*GeoModelKernelUnits::cm));
     mother->add(tfGirderElement);
     mother->add(pvGirderElement);
   }
@@ -1509,7 +1513,7 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 
   // InDetServices
   if (m_matLArServices == 0)
-   { m_matLArServices = new GeoMaterial("LArServices", 2.5*CLHEP::gram/CLHEP::cm3);
+   { m_matLArServices = new GeoMaterial("LArServices", 2.5*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
      m_matLArServices->add(shieldSteel, 0.20);
      m_matLArServices->add(copper, 0.60);
      m_matLArServices->add(matRubber, 0.10);
@@ -1519,7 +1523,7 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 
   // m_matIronHalfDens
   if (m_matIronHalfDens == 0)
-   { m_matIronHalfDens = new GeoMaterial("LArIronBox", 4.5*CLHEP::gram/CLHEP::cm3);
+   { m_matIronHalfDens = new GeoMaterial("LArIronBox", 4.5*GeoModelKernelUnits::gram/GeoModelKernelUnits::cm3);
      m_matIronHalfDens->add(shieldSteel, 0.80);
      m_matIronHalfDens->add(matRubber, 0.10);
      m_matIronHalfDens->add(copper, 0.10);
@@ -1531,16 +1535,16 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
   GeoTrd* fingerElementTrd = 0;
   GeoTrap* fingerElementTrap = 0;
 
-  GeoBox *fingerCablesL = NULL, *fingerCablesR = NULL;
-  GeoPhysVol *pvFingerElement = 0, *pvFingerCablesL = NULL, *pvFingerCablesR = NULL;
-  GeoLogVol *lvFingerElement = 0, *lvFingerCablesL = NULL, *lvFingerCablesR = NULL; 
-  GeoTransform* tfFingerElement = 0, *tfFingerCables = NULL;
+  GeoBox *fingerCablesL{nullptr}, *fingerCablesR{nullptr};
+  GeoPhysVol *pvFingerElement = 0, *pvFingerCablesL{nullptr}, *pvFingerCablesR{nullptr};
+  GeoLogVol *lvFingerElement = 0, *lvFingerCablesL{nullptr}, *lvFingerCablesR{nullptr}; 
+  GeoTransform* tfFingerElement = 0, *tfFingerCables{nullptr};
 
   GeoTransform* ZrotateMod = 0;
   GeoTransform* yrotateMod = 0;
   GeoTransform* zrotateMod = 0;
 
-  const GeoMaterial *currentMaterial = NULL, *leftMaterial = NULL, *rightMaterial = NULL;
+  const GeoMaterial *currentMaterial{nullptr}, *leftMaterial{nullptr}, *rightMaterial{nullptr};
   std::string currentName, leftName, rightName;
 
   int CurrentTicg = 100*sec_number + 1;
@@ -1570,7 +1574,7 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 	  (*m_log) << MSG::DEBUG << "TileFinger: AirVolumeSize ="<< AirVolumeSize << endmsg;
 	}
       }
-      if (elementZPozition*2-AirVolumeSize<-0.01) { // compare with zero with 0.1 CLHEP::mm precision
+      if (elementZPozition*2-AirVolumeSize<-0.01) { // compare with zero with 0.1 GeoModelKernelUnits::mm precision
         elementZPozition += AirVolumeShift; // shift all volumes keeping size
       } else { // resize finger cover with shims attached to it
 	if(m_log->level()<=MSG::DEBUG)
@@ -1616,26 +1620,26 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 
     if(m_dbManager->TICGshape()==1)
     {
-      fingerElementTrd = new GeoTrd(elementDz/2*CLHEP::cm,
-				    elementDz/2*CLHEP::cm,
-				    elementDy1/2*CLHEP::cm,
-				    elementDy2/2*CLHEP::cm,
-				    elementHeight/2*CLHEP::cm);
+      fingerElementTrd = new GeoTrd(elementDz/2*GeoModelKernelUnits::cm,
+				    elementDz/2*GeoModelKernelUnits::cm,
+				    elementDy1/2*GeoModelKernelUnits::cm,
+				    elementDy2/2*GeoModelKernelUnits::cm,
+				    elementHeight/2*GeoModelKernelUnits::cm);
       lvFingerElement = new GeoLogVol(currentName,fingerElementTrd,currentMaterial);
     }
     else if(m_dbManager->TICGshape()==2)
     {
  
-      fingerElementTrap = new GeoTrap(elementDz/2*CLHEP::cm,
+      fingerElementTrap = new GeoTrap(elementDz/2*GeoModelKernelUnits::cm,
 				      0.,
 				      0.,
-				      elementHeight/2*CLHEP::cm,
-				      elementDy2/2*CLHEP::cm,
-				      elementDy1/2*CLHEP::cm,
+				      elementHeight/2*GeoModelKernelUnits::cm,
+				      elementDy2/2*GeoModelKernelUnits::cm,
+				      elementDy1/2*GeoModelKernelUnits::cm,
 				      atan((elementDy1-elementDy2)/(2.*elementHeight)),
-				      elementHeight/2*CLHEP::cm,
-				      elementDy2/2*CLHEP::cm,
-				      elementDy1/2*CLHEP::cm,
+				      elementHeight/2*GeoModelKernelUnits::cm,
+				      elementDy2/2*GeoModelKernelUnits::cm,
+				      elementDy1/2*GeoModelKernelUnits::cm,
 				      atan((elementDy1-elementDy2)/(2.*elementHeight)));
  
       lvFingerElement = new GeoLogVol(currentName,fingerElementTrap,currentMaterial);
@@ -1649,21 +1653,21 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 
 
     pvFingerElement = new GeoPhysVol(lvFingerElement);
-    tfFingerElement = new GeoTransform(HepGeom::Translate3D(elementZPozition*CLHEP::cm,
-						      elementOffset*CLHEP::cm,
-						      (elementRC-(tilb_rmax + tile_rmax)/2)*CLHEP::cm));
+    tfFingerElement = new GeoTransform(GeoTrf::Translate3D(elementZPozition*GeoModelKernelUnits::cm,
+						      elementOffset*GeoModelKernelUnits::cm,
+						      (elementRC-(tilb_rmax + tile_rmax)/2)*GeoModelKernelUnits::cm));
 
     mother->add(tfFingerElement);
     if (m_dbManager->TICGshape()==2)
     {
       if(elementOffset<0)
       {
-	ZrotateMod = new GeoTransform(HepGeom::RotateZ3D(180*CLHEP::deg));
+	ZrotateMod = new GeoTransform(GeoTrf::RotateZ3D(180*GeoModelKernelUnits::deg));
 	mother->add(ZrotateMod); 
       }
 
-      zrotateMod = new GeoTransform(HepGeom::RotateZ3D(90*CLHEP::deg));
-      yrotateMod = new GeoTransform(HepGeom::RotateY3D(-90*CLHEP::deg));
+      zrotateMod = new GeoTransform(GeoTrf::RotateZ3D(90*GeoModelKernelUnits::deg));
+      yrotateMod = new GeoTransform(GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg));
       mother->add(yrotateMod);
       mother->add(zrotateMod);
     }
@@ -1733,17 +1737,17 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
 	     << " LRflag= " << LRflag <<" Neg "<< boolNeg 
 	     << endmsg;
 
-  GeoTransform *rotateY = new GeoTransform(HepGeom::RotateY3D(90*CLHEP::deg));
-  GeoTransform *rotateZ = new GeoTransform(HepGeom::RotateZ3D(3*CLHEP::deg));
-  GeoTransform *rotateZm = new GeoTransform(HepGeom::RotateZ3D(-3*CLHEP::deg));
+  GeoTransform *rotateY = new GeoTransform(GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg));
+  GeoTransform *rotateZ = new GeoTransform(GeoTrf::RotateZ3D(3*GeoModelKernelUnits::deg));
+  GeoTransform *rotateZm = new GeoTransform(GeoTrf::RotateZ3D(-3*GeoModelKernelUnits::deg));
 
   // Left (+phi)
-  fingerCablesL = new GeoBox(dXleft/2*CLHEP::cm, dY/2*CLHEP::cm, dZleft/2*CLHEP::cm);
+  fingerCablesL = new GeoBox(dXleft/2*GeoModelKernelUnits::cm, dY/2*GeoModelKernelUnits::cm, dZleft/2*GeoModelKernelUnits::cm);
   lvFingerCablesL = new GeoLogVol(leftName,fingerCablesL,leftMaterial);
   pvFingerCablesL = new GeoPhysVol(lvFingerCablesL);
 
   // Right (-phi)
-  fingerCablesR = new GeoBox(dXright/2*CLHEP::cm, dY/2*CLHEP::cm, dZright/2*CLHEP::cm);
+  fingerCablesR = new GeoBox(dXright/2*GeoModelKernelUnits::cm, dY/2*GeoModelKernelUnits::cm, dZright/2*GeoModelKernelUnits::cm);
   lvFingerCablesR = new GeoLogVol(rightName,fingerCablesR,rightMaterial);
   pvFingerCablesR = new GeoPhysVol(lvFingerCablesR);
 
@@ -1755,9 +1759,9 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
     { YpoFinger = elementOffset-5.4;  
     }
 
-  tfFingerCables = new GeoTransform(HepGeom::Translate3D(elementZPozition*CLHEP::cm +0.5*CLHEP::cm -dZsaddleL*CLHEP::cm,
-	                                           YpoFinger*CLHEP::cm,
-				                   (elementRC-(tilb_rmax + tile_rmax)/2)*CLHEP::cm));
+  tfFingerCables = new GeoTransform(GeoTrf::Translate3D(elementZPozition*GeoModelKernelUnits::cm +0.5*GeoModelKernelUnits::cm -dZsaddleL*GeoModelKernelUnits::cm,
+	                                           YpoFinger*GeoModelKernelUnits::cm,
+				                   (elementRC-(tilb_rmax + tile_rmax)/2)*GeoModelKernelUnits::cm));
   mother->add(tfFingerCables);
 
   // inversion for negativ fingers, Left
@@ -1778,9 +1782,9 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*&             mother,
     { YpoFinger = -elementOffset+5.4;
     }
 
-  tfFingerCables = new GeoTransform(HepGeom::Translate3D(elementZPozition*CLHEP::cm +0.5*CLHEP::cm -dZsaddleR*CLHEP::cm,
-	                                           YpoFinger*CLHEP::cm,
-	                                           (elementRC-(tilb_rmax + tile_rmax)/2)*CLHEP::cm));
+  tfFingerCables = new GeoTransform(GeoTrf::Translate3D(elementZPozition*GeoModelKernelUnits::cm +0.5*GeoModelKernelUnits::cm -dZsaddleR*GeoModelKernelUnits::cm,
+	                                           YpoFinger*GeoModelKernelUnits::cm,
+	                                           (elementRC-(tilb_rmax + tile_rmax)/2)*GeoModelKernelUnits::cm));
   mother->add(tfFingerCables);
 
   // inversion for negativ fingers, Right
@@ -1873,13 +1877,13 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
   const GeoMaterial* matScin = m_theMaterialManager->getMaterial("tile::Scintillator");
 
   //Cs hole parameters
-  double csHoleR       = 0.45 * CLHEP::cm;
-  double csTubeOuterR  = 0.4  * CLHEP::cm;
-  double csTubeInnerR  = 0.3  * CLHEP::cm;
-  double csTubeOffCorr = 1.35 * CLHEP::cm;
+  double csHoleR       = 0.45 * GeoModelKernelUnits::cm;
+  double csTubeOuterR  = 0.4  * GeoModelKernelUnits::cm;
+  double csTubeInnerR  = 0.3  * GeoModelKernelUnits::cm;
+  double csTubeOffCorr = 1.35 * GeoModelKernelUnits::cm;
 
-  double thicknessMother2 = thickness/2.*CLHEP::cm;
-  double heightMother2    = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*CLHEP::cm/2.;
+  double thicknessMother2 = thickness/2.*GeoModelKernelUnits::cm;
+  double heightMother2    = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*GeoModelKernelUnits::cm/2.;
 
   const bool removeGlue = (m_glue == 0 || m_glue == 2);
 
@@ -1887,18 +1891,18 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
   if (dzglue>0.0 && period_type<4 && !removeGlue) {
     const GeoMaterial* matGlue = m_theMaterialManager->getMaterial("tile::Glue");
 
-    double dzglue2 = dzglue/2*CLHEP::cm;
+    double dzglue2 = dzglue/2*GeoModelKernelUnits::cm;
     dzglue2 = floor(dzglue2*1.0e+10)*1.0e-10;
 
     if (m_verbose) {
-      printdouble(" period thickness/2 = ",thickness/2*CLHEP::cm);
-      printdouble("   glue thickness/2 = ",dzglue/2*CLHEP::cm);
+      printdouble(" period thickness/2 = ",thickness/2*GeoModelKernelUnits::cm);
+      printdouble("   glue thickness/2 = ",dzglue/2*GeoModelKernelUnits::cm);
       printdouble("rounded thickness/2 = ",dzglue2);
     }
 
-    double dy1Glue = (m_dbManager->TILBrmin() * tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-    double dy2Glue = (m_dbManager->TILBrmax() * tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
-    double heightGlue2 = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*CLHEP::cm/2.;
+    double dy1Glue = (m_dbManager->TILBrmin() * tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+    double dy2Glue = (m_dbManager->TILBrmax() * tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
+    double heightGlue2 = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*GeoModelKernelUnits::cm/2.;
 
     checking("Glue 0", false, 4, 
              dzglue2,dzglue2,dy1Glue,dy2Glue,heightGlue2);
@@ -1912,16 +1916,16 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
       idTag = new GeoIdentifierTag(j-CurrentScin);
       m_dbManager->SetCurrentScin(j);
 
-      double off0 = m_dbManager->SCNTrc()*CLHEP::cm - heightMother2;
-      double off  = m_dbManager->SCNTdr()/2.*CLHEP::cm - csTubeOffCorr;
+      double off0 = m_dbManager->SCNTrc()*GeoModelKernelUnits::cm - heightMother2;
+      double off  = m_dbManager->SCNTdr()/2.*GeoModelKernelUnits::cm - csTubeOffCorr;
 
-      HepGeom::Transform3D tfHole1 = HepGeom::Translate3D(0.,0.,(off0-off)) * HepGeom::RotateY3D(-90*CLHEP::deg);
-      HepGeom::Transform3D tfHole2 = HepGeom::Translate3D(0.,0.,(off0+off)) * HepGeom::RotateY3D(-90*CLHEP::deg);
+      GeoTrf::Transform3D tfHole1 = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
+      GeoTrf::Transform3D tfHole2 = GeoTrf::Translate3D(0.,0.,(off0+off)) * GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
 
       // air around iron rod, around Cs tube and inside Cs tube
-      GeoShape *air1 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * CLHEP::deg);
-      GeoShape *air2 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * CLHEP::deg);
-      GeoShape *air3 = new GeoTubs(0.,      csTubeInnerR, thicknessMother2, 0.,360.0 * CLHEP::deg);
+      GeoShape *air1 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * GeoModelKernelUnits::deg);
+      GeoShape *air2 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * GeoModelKernelUnits::deg);
+      GeoShape *air3 = new GeoTubs(0.,      csTubeInnerR, thicknessMother2, 0.,360.0 * GeoModelKernelUnits::deg);
 
       GeoLogVol * lvAir1 = new GeoLogVol("CsTubeAir1",air1,matAir);
       GeoLogVol * lvAir2 = new GeoLogVol("CsTubeAir2",air2,matAir);
@@ -1961,26 +1965,26 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
       if (glue)
       {
         if (m_verbose)
-            printdouble("      glue position = ",(-3.*dzglue/2-m_dbManager->TILBdzmast())*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((-3.*dzglue/2-m_dbManager->TILBdzmast())*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",(-3.*dzglue/2-m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((-3.*dzglue/2-m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",-dzglue/2*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D(-dzglue/2*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",-dzglue/2*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D(-dzglue/2*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",(dzglue/2+m_dbManager->TILBdzspac())*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((dzglue/2+m_dbManager->TILBdzspac())*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",(dzglue/2+m_dbManager->TILBdzspac())*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue/2+m_dbManager->TILBdzspac())*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",(thickness-dzglue)/2*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((thickness-dzglue)/2*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",(thickness-dzglue)/2*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((thickness-dzglue)/2*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
       }
@@ -1999,15 +2003,15 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         scintiDeltaInPhi = (m_uShape > 0) ? 0.0 : m_dbManager->SCNTdphi();
 
         thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ?
-                           (scintiThickness + 2*scintiWrapInZ)*CLHEP::cm: m_dbManager->TILBdzspac()*CLHEP::cm;
+                           (scintiThickness + 2*scintiWrapInZ)*GeoModelKernelUnits::cm: m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
         if (m_glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness);
 
         // create wrapper
-        heightWrapper = (scintiHeight + 2*scintiWrapInR)*CLHEP::cm;
+        heightWrapper = (scintiHeight + 2*scintiWrapInR)*GeoModelKernelUnits::cm;
         dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
         dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
         checking("Wrapper 0", true, 5, 
             thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
@@ -2019,34 +2023,34 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
 			     heightWrapper/2);
 
 	if (m_csTube) {
-          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
         }
 	lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir);
 	pvWrapper = new GeoPhysVol(lvWrapper);
 
         // create scintillator
         dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
         dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 
         checking("Scintillator 0", true, 6, 
-                 scintiThickness/2*CLHEP::cm,scintiThickness/2*CLHEP::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*CLHEP::cm);
+                 scintiThickness/2*GeoModelKernelUnits::cm,scintiThickness/2*GeoModelKernelUnits::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*GeoModelKernelUnits::cm);
 
-	scintillator = new GeoTrd(scintiThickness/2*CLHEP::cm,
-				  scintiThickness/2*CLHEP::cm,
+	scintillator = new GeoTrd(scintiThickness/2*GeoModelKernelUnits::cm,
+				  scintiThickness/2*GeoModelKernelUnits::cm,
 				  dy1Scintillator,
 				  dy2Scintillator,
-				  scintiHeight/2*CLHEP::cm);
+				  scintiHeight/2*GeoModelKernelUnits::cm);
 
 	if (m_csTube) {
-          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * CLHEP::cm, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * GeoModelKernelUnits::cm, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
 	}
 	lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin);
 	pvScintillator = new GeoPhysVol(lvScintillator);
 
         // place scintillator in wrapper
-	tfScintillator = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	pvWrapper->add(idTag);
 	pvWrapper->add(tfScintillator);
 	pvWrapper->add(pvScintillator);
@@ -2054,13 +2058,13 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         //place wrapper in period
         if (m_verbose) {
           (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos;
-          printdouble("  ==>  ",(scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*CLHEP::cm);
+          printdouble("  ==>  ",(scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*GeoModelKernelUnits::cm);
           (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg;
         }
         
-	tfWrapper = new GeoTransform(HepGeom::Translate3D((scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*CLHEP::cm,
+	tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*GeoModelKernelUnits::cm,
 						    0.,
-						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*CLHEP::cm));
+						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*GeoModelKernelUnits::cm));
 	mother->add(idTag);
 	mother->add(tfWrapper);
 	mother->add(pvWrapper);
@@ -2075,14 +2079,14 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
       if (glue)
       {
         if (m_verbose)
-            printdouble("      glue position = ",(dzglue + m_dbManager->TILBdzmast())*CLHEP::cm/2);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((dzglue + m_dbManager->TILBdzmast())*CLHEP::cm/2,0.,0.));
+            printdouble("      glue position = ",(dzglue + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm/2);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm/2,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",-(dzglue + m_dbManager->TILBdzmast())*CLHEP::cm/2);
-	tfGlue = new GeoTransform(HepGeom::Translate3D(-(dzglue + m_dbManager->TILBdzmast())*CLHEP::cm/2,0.,0.));
+            printdouble("      glue position = ",-(dzglue + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm/2);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D(-(dzglue + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm/2,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
       }
@@ -2101,15 +2105,15 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         scintiDeltaInPhi = (m_uShape > 0) ? 0.0 : m_dbManager->SCNTdphi();
 
         thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ?
-                           (scintiThickness + 2*scintiWrapInZ)*CLHEP::cm: m_dbManager->TILBdzspac()*CLHEP::cm;
+                           (scintiThickness + 2*scintiWrapInZ)*GeoModelKernelUnits::cm: m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
         if (m_glue == 2)   thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness);
 
         // create wrapper
-        heightWrapper = (scintiHeight + 2*scintiWrapInR)*CLHEP::cm;
+        heightWrapper = (scintiHeight + 2*scintiWrapInR)*GeoModelKernelUnits::cm;
         dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
         dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
         checking("Wrapper 1", true, 5, 
             thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
@@ -2121,34 +2125,34 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
 			     heightWrapper/2);
 
 	if (m_csTube) {
-          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
         }
 	lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir);
 	pvWrapper = new GeoPhysVol(lvWrapper);
 
         // create scintillator
         dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
         dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 
         checking("Scintillator 1", true, 6, 
-                 scintiThickness/2*CLHEP::cm,scintiThickness/2*CLHEP::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*CLHEP::cm);
+                 scintiThickness/2*GeoModelKernelUnits::cm,scintiThickness/2*GeoModelKernelUnits::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*GeoModelKernelUnits::cm);
 
-	scintillator = new GeoTrd(scintiThickness/2*CLHEP::cm,
-				  scintiThickness/2*CLHEP::cm,
+	scintillator = new GeoTrd(scintiThickness/2*GeoModelKernelUnits::cm,
+				  scintiThickness/2*GeoModelKernelUnits::cm,
 				  dy1Scintillator,
 				  dy2Scintillator,
-				  scintiHeight/2*CLHEP::cm);
+				  scintiHeight/2*GeoModelKernelUnits::cm);
 
 	if (m_csTube) {
-          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * CLHEP::cm, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * GeoModelKernelUnits::cm, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
 	}
 	lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin);
 	pvScintillator = new GeoPhysVol(lvScintillator);
 
         // place scintillator in wrapper
-	tfScintillator = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	pvWrapper->add(idTag);
 	pvWrapper->add(tfScintillator);
 	pvWrapper->add(pvScintillator);
@@ -2156,13 +2160,13 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         //place wrapper in period
         if (m_verbose) {
           (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; 
-          printdouble("  ==>  ",(2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*CLHEP::cm);
+          printdouble("  ==>  ",(2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*GeoModelKernelUnits::cm);
           (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg;
         }
         
-	tfWrapper = new GeoTransform(HepGeom::Translate3D((2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*CLHEP::cm,
+	tfWrapper = new GeoTransform(GeoTrf::Translate3D((2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*GeoModelKernelUnits::cm,
 						    0.,
-						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*CLHEP::cm));
+						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*GeoModelKernelUnits::cm));
 	mother->add(idTag);
 	mother->add(tfWrapper);
 	mother->add(pvWrapper);
@@ -2177,26 +2181,26 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
       if (glue)
       {
         if (m_verbose)
-            printdouble("      glue position = ",(-thickness + dzglue)*CLHEP::cm/2);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((-thickness + dzglue)*CLHEP::cm/2,0.,0.));
+            printdouble("      glue position = ",(-thickness + dzglue)*GeoModelKernelUnits::cm/2);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((-thickness + dzglue)*GeoModelKernelUnits::cm/2,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D(((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D(((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",dzglue/2*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D(dzglue/2*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",dzglue/2*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D(dzglue/2*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
 
         if (m_verbose)
-            printdouble("      glue position = ",(3.*dzglue/2 + m_dbManager->TILBdzmast())*CLHEP::cm);
-	tfGlue = new GeoTransform(HepGeom::Translate3D((3.*dzglue/2 + m_dbManager->TILBdzmast())*CLHEP::cm,0.,0.));
+            printdouble("      glue position = ",(3.*dzglue/2 + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm);
+	tfGlue = new GeoTransform(GeoTrf::Translate3D((3.*dzglue/2 + m_dbManager->TILBdzmast())*GeoModelKernelUnits::cm,0.,0.));
 	mother->add(tfGlue);
 	mother->add(pvGlue);
       }
@@ -2215,16 +2219,16 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         scintiDeltaInPhi = (m_uShape > 0) ? 0. : m_dbManager->SCNTdphi();
 
         thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ?
-                           (scintiThickness + 2*scintiWrapInZ)*CLHEP::cm: m_dbManager->TILBdzspac()*CLHEP::cm;
+                           (scintiThickness + 2*scintiWrapInZ)*GeoModelKernelUnits::cm: m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
         if (m_glue == 2)   thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness);
 
         // create wrapper
-        heightWrapper = (scintiHeight + 2*scintiWrapInR)*CLHEP::cm;
+        heightWrapper = (scintiHeight + 2*scintiWrapInR)*GeoModelKernelUnits::cm;
 
         dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
         dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) *
-                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                     tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 
         checking("Wrapper 2", true, 5, 
             thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
@@ -2236,34 +2240,34 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
 			     heightWrapper/2);
 
 	if (m_csTube) {
-          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
         }
 	lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir);
 	pvWrapper = new GeoPhysVol(lvWrapper);
 
         // create scintillator
         dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
         dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) *
-                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                          tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 
         checking("Scintillator 2", true, 6, 
-                 scintiThickness/2*CLHEP::cm,scintiThickness/2*CLHEP::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*CLHEP::cm);
+                 scintiThickness/2*GeoModelKernelUnits::cm,scintiThickness/2*GeoModelKernelUnits::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*GeoModelKernelUnits::cm);
 
-	scintillator = new GeoTrd(scintiThickness/2*CLHEP::cm,
-				  scintiThickness/2*CLHEP::cm,
+	scintillator = new GeoTrd(scintiThickness/2*GeoModelKernelUnits::cm,
+				  scintiThickness/2*GeoModelKernelUnits::cm,
 				  dy1Scintillator,
 				  dy2Scintillator,
-				  scintiHeight/2*CLHEP::cm);
+				  scintiHeight/2*GeoModelKernelUnits::cm);
 
 	if (m_csTube) {
-          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * CLHEP::cm, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+          scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * GeoModelKernelUnits::cm, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
 	}
 	lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin);
 	pvScintillator = new GeoPhysVol(lvScintillator);
 
         // place scintillator in wrapper
-	tfScintillator = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	pvWrapper->add(idTag);
 	pvWrapper->add(tfScintillator);
 	pvWrapper->add(pvScintillator);
@@ -2271,13 +2275,13 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         //place wrapper in period
         if (m_verbose) {
           (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; 
-          printdouble("  ==>  ",(scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*CLHEP::cm);
+          printdouble("  ==>  ",(scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*GeoModelKernelUnits::cm);
           (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg;
         }
       
-	tfWrapper = new GeoTransform(HepGeom::Translate3D((scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*CLHEP::cm,
+	tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*GeoModelKernelUnits::cm,
 						    0.,
-						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*CLHEP::cm));
+						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*GeoModelKernelUnits::cm));
 	mother->add(idTag);
 	mother->add(tfWrapper);
 	mother->add(pvWrapper);
@@ -2301,18 +2305,18 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         scintiDeltaInPhi = (m_uShape > 0) ? 0.0 : m_dbManager->SCNTdphi();
 
         thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ?
-                           (scintiThickness + 2*scintiWrapInZ)*CLHEP::cm: m_dbManager->TILBdzspac()*CLHEP::cm;
+                           (scintiThickness + 2*scintiWrapInZ)*GeoModelKernelUnits::cm: m_dbManager->TILBdzspac()*GeoModelKernelUnits::cm;
         if (m_glue == 2)   thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness);
 
 	if(scintiZPos<0)
 	{
 	  idTag = new GeoIdentifierTag(j-CurrentScin);
 	  // create wrapper
-	  heightWrapper = (scintiHeight + 2*scintiWrapInR)*CLHEP::cm;
+	  heightWrapper = (scintiHeight + 2*scintiWrapInR)*GeoModelKernelUnits::cm;
 	  dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) *
-                       tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                       tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 	  dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) *
-                       tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*CLHEP::cm;
+                       tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*GeoModelKernelUnits::cm;
 	  
           checking("Wrapper 3", true, 5, 
               thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
@@ -2324,34 +2328,34 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
 			       heightWrapper/2);
 
           if (m_csTube) {
-            wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+            wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
           }
 	  lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir);
 	  pvWrapper = new GeoPhysVol(lvWrapper);
 
 	  // create scintillator
 	  dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) *
-                            tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                            tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 	  dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) *
-                            tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*CLHEP::cm;
+                            tan_delta_phi_2 -  m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 	  
           checking("Scintillator 3", true, 6, 
-                   scintiThickness/2*CLHEP::cm,scintiThickness/2*CLHEP::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*CLHEP::cm);
+                   scintiThickness/2*GeoModelKernelUnits::cm,scintiThickness/2*GeoModelKernelUnits::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*GeoModelKernelUnits::cm);
 
-	  scintillator = new GeoTrd(scintiThickness/2*CLHEP::cm,
-				    scintiThickness/2*CLHEP::cm,
+	  scintillator = new GeoTrd(scintiThickness/2*GeoModelKernelUnits::cm,
+				    scintiThickness/2*GeoModelKernelUnits::cm,
 				    dy1Scintillator,
 				    dy2Scintillator,
-				    scintiHeight/2*CLHEP::cm);
+				    scintiHeight/2*GeoModelKernelUnits::cm);
 
           if (m_csTube) {
-            scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * CLHEP::cm, scintiHeight/2.*CLHEP::cm - csTubeOffCorr);
+            scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * GeoModelKernelUnits::cm, scintiHeight/2.*GeoModelKernelUnits::cm - csTubeOffCorr);
           }
 	  lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin);
 	  pvScintillator = new GeoPhysVol(lvScintillator);
 	  
 	  // place scintillator in wrapper
-	  tfScintillator = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	  tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	  pvWrapper->add(idTag);
 	  pvWrapper->add(tfScintillator);
 	  pvWrapper->add(pvScintillator);
@@ -2362,9 +2366,9 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
             (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg;
           }
           
-	  tfWrapper = new GeoTransform(HepGeom::Translate3D(0.,
+	  tfWrapper = new GeoTransform(GeoTrf::Translate3D(0.,
 						      0.,
-						      (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*CLHEP::cm));
+						      (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*GeoModelKernelUnits::cm));
 	  mother->add(idTag);
 	  mother->add(tfWrapper);
 	  mother->add(pvWrapper);
@@ -2397,13 +2401,13 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
         scintiDeltaInPhi = m_dbManager->SCNTdphi(); // don't need to check m_uShape for single scintillator
 
         // create wrapper
-        heightWrapper = (scintiHeight + 2*scintiWrapInR)*CLHEP::cm;
-        thicknessWrapper = (scintiThickness + 2*scintiWrapInZ)*CLHEP::cm;
+        heightWrapper = (scintiHeight + 2*scintiWrapInR)*GeoModelKernelUnits::cm;
+        thicknessWrapper = (scintiThickness + 2*scintiWrapInZ)*GeoModelKernelUnits::cm;
         if (m_glue == 2)   thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness);
 
-        double thicknessEnvelope = (m_dbManager->TILBdzmodul()*CLHEP::cm - thicknessWrapper); // along phi thickness is twice bigger than along Z 
-        dy1Wrapper = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2. - scintiWrapInR)*tanphi)*CLHEP::cm;
-        dy2Wrapper = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2. + scintiWrapInR)*tanphi)*CLHEP::cm;
+        double thicknessEnvelope = (m_dbManager->TILBdzmodul()*GeoModelKernelUnits::cm - thicknessWrapper); // along phi thickness is twice bigger than along Z 
+        dy1Wrapper = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2. - scintiWrapInR)*tanphi)*GeoModelKernelUnits::cm;
+        dy2Wrapper = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2. + scintiWrapInR)*tanphi)*GeoModelKernelUnits::cm;
 
         if(m_log->level()<=MSG::DEBUG)
             (*m_log) << MSG::DEBUG <<"Envelope thickness is " << thicknessEnvelope <<endmsg;
@@ -2419,22 +2423,22 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
 	pvWrapper = new GeoPhysVol(lvWrapper);
 
         // create scintillator
-        dy1Scintillator = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2.)*tanphi - scintiDeltaInPhi)*CLHEP::cm;
-        dy2Scintillator = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2.)*tanphi - scintiDeltaInPhi)*CLHEP::cm;
+        dy1Scintillator = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2.)*tanphi - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
+        dy2Scintillator = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2.)*tanphi - scintiDeltaInPhi)*GeoModelKernelUnits::cm;
 
         checking("Scintillator 4", true, 6, 
-            scintiThickness/2*CLHEP::cm,scintiThickness/2*CLHEP::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*CLHEP::cm);
+            scintiThickness/2*GeoModelKernelUnits::cm,scintiThickness/2*GeoModelKernelUnits::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*GeoModelKernelUnits::cm);
 
-	scintillator = new GeoTrd(scintiThickness/2*CLHEP::cm,
-				  scintiThickness/2*CLHEP::cm,
+	scintillator = new GeoTrd(scintiThickness/2*GeoModelKernelUnits::cm,
+				  scintiThickness/2*GeoModelKernelUnits::cm,
 				  dy1Scintillator,
 				  dy2Scintillator,
-				  scintiHeight/2*CLHEP::cm);
+				  scintiHeight/2*GeoModelKernelUnits::cm);
 	lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin);
 	pvScintillator = new GeoPhysVol(lvScintillator);
 
         // place scintillator in wrapper
-	tfScintillator = new GeoTransform(HepGeom::Translate3D(0.,0.,0.));
+	tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 	pvWrapper->add(idTag);
 	pvWrapper->add(tfScintillator);
 	pvWrapper->add(pvScintillator);
@@ -2445,9 +2449,9 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*&              mother,
           (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg;
         }
         
-	tfWrapper = new GeoTransform(HepGeom::Translate3D(0.,
+	tfWrapper = new GeoTransform(GeoTrf::Translate3D(0.,
 						    0.,
-						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*CLHEP::cm));
+						    (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*GeoModelKernelUnits::cm));
 	mother->add(idTag);
 	mother->add(tfWrapper);
 	mother->add(pvWrapper);
@@ -2534,16 +2538,16 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*&   descriptor,
   float drGap[] = {450., 380., 313., 341., 478., 362.};
 
   if (addPlates) {
-    rBarrel[0] -= 10*CLHEP::mm/2;
-    rBarrel[2] += 40*CLHEP::mm/2;
-    drBarrel[0] += 10*CLHEP::mm;
-    drBarrel[2] += 40*CLHEP::mm;
-    rExtended[0] -= 10*CLHEP::mm/2;
-    rExtended[2] += 40*CLHEP::mm/2;
-    drExtended[0] += 10*CLHEP::mm;
-    drExtended[2] += 40*CLHEP::mm;
-    rGap[1] += 40*CLHEP::mm/2;
-    drGap[1] += 40*CLHEP::mm;
+    rBarrel[0] -= 10*GeoModelKernelUnits::mm/2;
+    rBarrel[2] += 40*GeoModelKernelUnits::mm/2;
+    drBarrel[0] += 10*GeoModelKernelUnits::mm;
+    drBarrel[2] += 40*GeoModelKernelUnits::mm;
+    rExtended[0] -= 10*GeoModelKernelUnits::mm/2;
+    rExtended[2] += 40*GeoModelKernelUnits::mm/2;
+    drExtended[0] += 10*GeoModelKernelUnits::mm;
+    drExtended[2] += 40*GeoModelKernelUnits::mm;
+    rGap[1] += 40*GeoModelKernelUnits::mm/2;
+    drGap[1] += 40*GeoModelKernelUnits::mm;
   }
     
   int indHardcoded = 0;
@@ -2796,10 +2800,10 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
       dzPeriod = m_extendedPeriodThickness;
     }
 
-    rMin = m_dbManager->TILBrmin() *CLHEP::cm;
-    if (addPlates) rMin -= m_dbManager->TILBdrfront() *CLHEP::cm;
+    rMin = m_dbManager->TILBrmin() *GeoModelKernelUnits::cm;
+    if (addPlates) rMin -= m_dbManager->TILBdrfront() *GeoModelKernelUnits::cm;
     CurrentScin = 100*m_dbManager->TILBsection() + 1;
-    //dzMaster = m_dbManager->TILBdzmast()*CLHEP::cm;
+    //dzMaster = m_dbManager->TILBdzmast()*GeoModelKernelUnits::cm;
 
     /** Initialize rMin, rMax vectors  - once per region
         Initial values for zMin - leftmost edge
@@ -2811,13 +2815,13 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
 
       if ( (j == CurrentScin + m_dbManager->TILBnscin() - 1) && addPlates ) {
         // use end of the master as end of last cell 
-        rMax = m_dbManager->TILBrmax()*CLHEP::cm; 
+        rMax = m_dbManager->TILBrmax()*GeoModelKernelUnits::cm; 
       } else {
         double tileSize=m_dbManager->SCNTdr();
         if (m_dbManager->SCNTdrw() > 0)
           // round to integer for all tiles except gap scin 
           tileSize=round(tileSize); 
-        rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*CLHEP::cm;
+        rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*GeoModelKernelUnits::cm;
       }
 
       rmins.push_back(rMin);
@@ -2825,19 +2829,19 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
       rMin = rMax;
 
       if(detector == TILE_REGION_CENTRAL) {
-	zmins.push_back((-m_dbManager->TILBdzmast()/2 - m_barrelGlue*(1./CLHEP::cm) 
-                         -(m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend1()))*CLHEP::cm);
-        zEnd1Lim = (-m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1())*CLHEP::cm;
-        zEnd2Lim = ( m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2())*CLHEP::cm;
-        zEnd1 = (-m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
-        zEnd2 = ( m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
+	zmins.push_back((-m_dbManager->TILBdzmast()/2 - m_barrelGlue*(1./GeoModelKernelUnits::cm) 
+                         -(m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend1()))*GeoModelKernelUnits::cm);
+        zEnd1Lim = (-m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1())*GeoModelKernelUnits::cm;
+        zEnd2Lim = ( m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm;
+        zEnd1 = (-m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+        zEnd2 = ( m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
       }
       else {
-	zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*CLHEP::cm);
-        zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*CLHEP::cm;
-        zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*CLHEP::cm;
-        zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
-        zEnd2 = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
+	zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*GeoModelKernelUnits::cm);
+        zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*GeoModelKernelUnits::cm;
+        zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*GeoModelKernelUnits::cm;
+        zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+        zEnd2 = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
       }
       
       zmaxs.push_back(0.);
@@ -3002,7 +3006,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                         << cellDim->getRMax(jj) << " "
                         << cellDim->getZMin(jj) << " "
                         << cellDim->getZMax(jj) << "\n";
-            std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+            std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
 
             if(detector != TILE_REGION_CENTRAL)
             {
@@ -3012,7 +3016,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                           << cellDimNeg->getRMax(jj) << " "
                           << cellDimNeg->getZMin(jj) << " "
                           << cellDimNeg->getZMax(jj) << "\n";
-              std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+              std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
             }
           }
 	  /* ------------------------------------------------------------------------------------------------ */	  
@@ -3048,8 +3052,8 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
         m_dbManager->SetNextTiclInDet();
       }
 
-      rMin = m_dbManager->TILBrmin()*CLHEP::cm;
-      if (addPlates) rMin -= m_dbManager->TILBdrfront() *CLHEP::cm;
+      rMin = m_dbManager->TILBrmin()*GeoModelKernelUnits::cm;
+      if (addPlates) rMin -= m_dbManager->TILBdrfront() *GeoModelKernelUnits::cm;
       CurrentScin = 100*m_dbManager->TILBsection() + 1;
 
       for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++)
@@ -3058,33 +3062,33 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
 
         if ( (j == CurrentScin + m_dbManager->TILBnscin() - 1)  && addPlates ) {
           /** use end of the master as end of last cell */
-          rMax = m_dbManager->TILBrmax()*CLHEP::cm; 
+          rMax = m_dbManager->TILBrmax()*GeoModelKernelUnits::cm; 
           /** subtract from C10 thickness of D4 front plate  */
           if (addPlates && sec)
-            rMax -= m_dbManager->TILBdrfront()*CLHEP::cm;
+            rMax -= m_dbManager->TILBdrfront()*GeoModelKernelUnits::cm;
         } else {
           double tileSize=m_dbManager->SCNTdr();
           if (m_dbManager->SCNTdrw() > 0)
             /** round to integer for all tiles except gap scin */
             tileSize=round(tileSize); 
-          rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*CLHEP::cm;
+          rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*GeoModelKernelUnits::cm;
         }
 
         rmins.push_back(rMin);
         rmaxs.push_back(rMax);
         rMin = rMax;
         
-        zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*CLHEP::cm;
-        zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*CLHEP::cm;
-        zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
-        zEnd2 = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*CLHEP::cm;
+        zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*GeoModelKernelUnits::cm;
+        zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*GeoModelKernelUnits::cm;
+        zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
+        zEnd2 = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm;
 
         if ( addPlates ) {
-          zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*CLHEP::cm);
-          zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*CLHEP::cm);
+          zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm);
+          zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm);
         } else {
-          zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*CLHEP::cm);
-          zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2 - m_dbManager->TILBdzend2())*CLHEP::cm);
+          zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*GeoModelKernelUnits::cm);
+          zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2 - m_dbManager->TILBdzend2())*GeoModelKernelUnits::cm);
         }
       }
 
@@ -3134,7 +3138,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                     << cellDim->getRMax(jj) << " "
                     << cellDim->getZMin(jj) << " "
                     << cellDim->getZMax(jj) << "\n";
-        std::cout<< " >> Cell Volume is " << cellDim->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+        std::cout<< " >> Cell Volume is " << cellDim->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
     
         std::cout << " >> CellDimNeg contains " << cellDimNeg->getNRows() << " rows\n";
         for(unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++)
@@ -3142,7 +3146,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                     << cellDimNeg->getRMax(jj) << " "
                     << cellDimNeg->getZMin(jj) << " "
                     << cellDimNeg->getZMax(jj) << "\n";
-        std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+        std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
       }
 /* -------------------------------------------- */
     }
@@ -3165,20 +3169,20 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
 	CurrentScin = 100*m_dbManager->TILBsection()+1;
       }
 
-      rMin = m_dbManager->TILBrmin()*CLHEP::cm;
+      rMin = m_dbManager->TILBrmin()*GeoModelKernelUnits::cm;
 
       // Initialize rMin, rMax, zMin, zMax vectors
       for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++)
       {
 	m_dbManager->SetCurrentScin(j);
-	rMax = rMin + m_dbManager->SCNTdr()*CLHEP::cm;
+	rMax = rMin + m_dbManager->SCNTdr()*GeoModelKernelUnits::cm;
 	
 	rmins.push_back(rMin);
 	rmaxs.push_back(rMax);
 	rMin = rMax;
 	
-	zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*CLHEP::cm);
-	zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*CLHEP::cm);
+	zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm);
+	zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*GeoModelKernelUnits::cm);
       }
 
       // Iterate through scintillators and create corresponding TileCellDim objects (+/-)
@@ -3226,7 +3230,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                       << cellDim->getRMax(jj) << " "
                       << cellDim->getZMin(jj) << " "
                       << cellDim->getZMax(jj) << "\n";
-          std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+          std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
     
           std::cout << " >> CellDimNeg contains " << cellDimNeg->getNRows() << " rows\n";
           for(unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++)
@@ -3234,7 +3238,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager,
                       << cellDimNeg->getRMax(jj) << " "
                       << cellDimNeg->getZMin(jj) << " "
                       << cellDimNeg->getZMax(jj) << "\n";
-          std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./CLHEP::cm3) << " cm^3\n";
+          std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./GeoModelKernelUnits::cm3) << " cm^3\n";
         }
 /* -------------------------------------------- */
       }
@@ -3276,10 +3280,10 @@ void TileGeoSectionBuilder::calculateZ(int detector,
   // first - find position in ideal world before Z-shift and misalignment
   if (detector == TILE_REGION_CENTRAL) {
     // need to split one cylinder in pos/neg halves
-    float zmin=m_dbManager->TILBzoffset()/2 * CLHEP::cm ;
-    float zmax=zmin+m_dbManager->TILBdzmodul()/2 * CLHEP::cm ;
+    float zmin=m_dbManager->TILBzoffset()/2 * GeoModelKernelUnits::cm ;
+    float zmax=zmin+m_dbManager->TILBdzmodul()/2 * GeoModelKernelUnits::cm ;
     if (sample==3) { // fix for D0 cell 
-      float D0size = 560.58/307*40 * CLHEP::cm; // size of D0 along Z in CLHEP::cm
+      float D0size = 560.58/307*40 * GeoModelKernelUnits::cm; // size of D0 along Z in GeoModelKernelUnits::cm
                                   // FIXME:: should be taken from DB
       if (side>0) // positive
         zmin = - D0size/2;
@@ -3289,13 +3293,13 @@ void TileGeoSectionBuilder::calculateZ(int detector,
     zcenter = (zmin+zmax)/2;
     dz = (zmax-zmin);
   } else if (detector == TILE_REGION_GAP && (sample > 9) ){
-    zcenter=m_dbManager->TILBzoffset() * CLHEP::cm ;
+    zcenter=m_dbManager->TILBzoffset() * GeoModelKernelUnits::cm ;
     m_dbManager->SetCurrentScin(100*m_dbManager->TILBsection() + 1 );
-    dz =  m_dbManager->SCNTdt()*CLHEP::cm;
+    dz =  m_dbManager->SCNTdt()*GeoModelKernelUnits::cm;
   }
   else {
-    zcenter=m_dbManager->TILBzoffset() * CLHEP::cm ;
-    dz=m_dbManager->TILBdzmodul() * CLHEP::cm ;
+    zcenter=m_dbManager->TILBzoffset() * GeoModelKernelUnits::cm ;
+    dz=m_dbManager->TILBdzmodul() * GeoModelKernelUnits::cm ;
   }
 
   // apply zshift from ideal pseudo-projective eta (which includes alignment also!)
@@ -3421,18 +3425,18 @@ void TileGeoSectionBuilder::printdouble(const char * name, double val)
 }
 
 const GeoShape * TileGeoSectionBuilder::makeHolesScint(const GeoShape * mother, double R, double H2, double off, double off0) {
-    GeoShape *hole = new GeoTubs(0., R, H2, 0., 360.0 * CLHEP::deg);
-    const  GeoShapeUnion& scintUnion = hole->add( *hole << HepGeom::Translate3D((off0-off*2.0),0.,0.));
-    HepGeom::Transform3D tfHole = HepGeom::Translate3D(0.,0.,(off0-off)) * HepGeom::RotateY3D(90*CLHEP::deg);
+    GeoShape *hole = new GeoTubs(0., R, H2, 0., 360.0 * GeoModelKernelUnits::deg);
+    const  GeoShapeUnion& scintUnion = hole->add( *hole << GeoTrf::Translate3D((off0-off*2.0),0.,0.));
+    GeoTrf::Transform3D tfHole = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
     const GeoShape & motherWithHoles = (mother->subtract(scintUnion<<tfHole));
     return &motherWithHoles;
 }
 
 const GeoShape * TileGeoSectionBuilder::makeHoles(const GeoShape * mother, double R, double H2, double off, double off0) {
-  GeoShape *hole1 = new GeoTubs(0., R, H2, 0., 360.0 * CLHEP::deg);
-  GeoShape *hole2 = new GeoTubs(0., R, H2, 0., 360.0 * CLHEP::deg);
-  HepGeom::Transform3D tfHole1 = HepGeom::Translate3D(0.,0.,(off0-off)) * HepGeom::RotateY3D(-90*CLHEP::deg);
-  HepGeom::Transform3D tfHole2 = HepGeom::Translate3D(0.,0.,(off0+off)) * HepGeom::RotateY3D(-90*CLHEP::deg);
+  GeoShape *hole1 = new GeoTubs(0., R, H2, 0., 360.0 * GeoModelKernelUnits::deg);
+  GeoShape *hole2 = new GeoTubs(0., R, H2, 0., 360.0 * GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D tfHole1 = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
+  GeoTrf::Transform3D tfHole2 = GeoTrf::Translate3D(0.,0.,(off0+off)) * GeoTrf::RotateY3D(-90*GeoModelKernelUnits::deg);
   const GeoShape & motherWithHoles = (mother->subtract((*hole1)<<tfHole1).subtract((*hole2)<<tfHole2));
   return &motherWithHoles;
 }
diff --git a/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx
index bf473a1e05391caeff21505beeb0dedd244b8078..8a25b3f8affb8cbd23d091f5e00fa37bb55114fa 100755
--- a/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx
@@ -19,9 +19,11 @@
 #include "GeoModelKernel/GeoNameTag.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
-#include "CLHEP/GenericFunctions/AbsFunction.hh"
-#include "CLHEP/GenericFunctions/Variable.hh"
+#include "GeoGenericFunctions/AbsFunction.h"
+#include "GeoGenericFunctions/Variable.h"
 #include "GeoModelKernel/GeoXF.h"
 #include "GeoModelKernel/GeoSerialTransformer.h"
 #include "GeoModelKernel/GeoSerialIdentifier.h"
@@ -36,7 +38,7 @@
 #include <iostream>
 #include <algorithm>
 
-using namespace Genfun;
+using namespace GeoGenfun;
 using namespace GeoXF;
 
  
@@ -179,11 +181,11 @@ void TileTBFactory::create(GeoPhysVol *world)
   //int EnvNumLayer = 64;
   //dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL);
   //double deltaPhi = 360./dbManager->TILEnmodul();
-  GeoTubs* tileTBEnv = new GeoTubs(RInMin * CLHEP::cm,
-				   ROutMax * CLHEP::cm,
-				   tileTBEnvThickness/2.0 * CLHEP::cm,
-				   PhiMin*CLHEP::deg,
-				   (PhiMax - PhiMin)*CLHEP::deg);
+  GeoTubs* tileTBEnv = new GeoTubs(RInMin * GeoModelKernelUnits::cm,
+				   ROutMax * GeoModelKernelUnits::cm,
+				   tileTBEnvThickness/2.0 * GeoModelKernelUnits::cm,
+				   PhiMin*GeoModelKernelUnits::deg,
+				   (PhiMax - PhiMin)*GeoModelKernelUnits::deg);
   
   (*m_log) << MSG::DEBUG << "TileTB envelope parameters: " 
       << " length=" << tileTBEnvThickness << " cm"
@@ -211,19 +213,19 @@ void TileTBFactory::create(GeoPhysVol *world)
     //----------------------- BUILDING ENVELOPES------------------------
     
     // It may be usful on the way of universalization
-    //    GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-    //					 (dbManager->GetEnvRout()) * CLHEP::cm,
-    //				 (dbManager->GetEnvZLength())/2.0 * CLHEP::cm,
-    //				 0.0 * deltaPhi * CLHEP::deg,
-    //				 (NumberOfMod)*deltaPhi*CLHEP::deg);
+    //    GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+    //					 (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+    //				 (dbManager->GetEnvZLength())/2.0 * GeoModelKernelUnits::cm,
+    //				 0.0 * deltaPhi * GeoModelKernelUnits::deg,
+    //				 (NumberOfMod)*deltaPhi*GeoModelKernelUnits::deg);
   
     if(EnvType == 1) {
 
-      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-					   (dbManager->GetEnvRout()) * CLHEP::cm,
-					   (dbManager->GetEnvZLength() - 2 * BFingerLength)/2.0 * CLHEP::cm,
-					   0.0 * CLHEP::deg,
-					   NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength() - 2 * BFingerLength)/2.0 * GeoModelKernelUnits::cm,
+					   0.0 * GeoModelKernelUnits::deg,
+					   NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
 
       GeoTubs* barrelMother = GeneralMother;      
       GeoLogVol* lvBarrelMother = new GeoLogVol("Barrel",barrelMother,matAir);
@@ -239,11 +241,11 @@ void TileTBFactory::create(GeoPhysVol *world)
       //Envelopes for two barrel fingers
       dbManager->SetCurrentTifg(2);  //use small size for barrel finger !
 
-      GeoTubs* fingerMother = new GeoTubs(FingerRmin*CLHEP::cm,
-      					  dbManager->GetEnvRout()*CLHEP::cm,
-      					  BFingerLength/2.*CLHEP::cm,
-      					  0.0 * CLHEP::deg,
-      					  NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* fingerMother = new GeoTubs(FingerRmin*GeoModelKernelUnits::cm,
+      					  dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+      					  BFingerLength/2.*GeoModelKernelUnits::cm,
+      					  0.0 * GeoModelKernelUnits::deg,
+      					  NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
 
       GeoLogVol* lvFingerMother = new GeoLogVol("Finger",fingerMother,matAir);
       pvFingerMotherPos = new GeoFullPhysVol(lvFingerMother);
@@ -258,11 +260,11 @@ void TileTBFactory::create(GeoPhysVol *world)
     }
     
     if(EnvType == 3) {   
-      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-					   (dbManager->GetEnvRout()) * CLHEP::cm,
-					   (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * CLHEP::cm,
-					   0.0 * CLHEP::deg,
-					   NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * GeoModelKernelUnits::cm,
+					   0.0 * GeoModelKernelUnits::deg,
+					   NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
 
       GeoTubs* ebarrelMotherPos = GeneralMother;
       GeoLogVol* lvEBarrelMotherPos = new GeoLogVol("EBarrel",ebarrelMotherPos,matAir);
@@ -276,11 +278,11 @@ void TileTBFactory::create(GeoPhysVol *world)
           << endmsg;
 
       //Envelope for finger separately
-      GeoTubs* fingerMother = new GeoTubs(FingerRmin*CLHEP::cm,
-					  dbManager->GetEnvRout()*CLHEP::cm,
-					  EBFingerLength/2.*CLHEP::cm,
-					  0.0 * CLHEP::deg,
-					  NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* fingerMother = new GeoTubs(FingerRmin*GeoModelKernelUnits::cm,
+					  dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+					  EBFingerLength/2.*GeoModelKernelUnits::cm,
+					  0.0 * GeoModelKernelUnits::deg,
+					  NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
 
       GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir);
       pvEFingerMotherPos = new GeoFullPhysVol(lvEFingerMother);
@@ -294,11 +296,11 @@ void TileTBFactory::create(GeoPhysVol *world)
     }
     
     if(EnvType == 2) {    
-      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-					   (dbManager->GetEnvRout()) * CLHEP::cm,
-					   (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * CLHEP::cm,
-					   0.0 * CLHEP::deg,
-					   NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * GeoModelKernelUnits::cm,
+					   0.0 * GeoModelKernelUnits::deg,
+					   NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
       GeoTubs* ebarrelMotherNeg = GeneralMother;
       GeoLogVol* lvEBarrelMotherNeg = new GeoLogVol("EBarrel",ebarrelMotherNeg,matAir);  
       pvEBarrelMotherNeg = new GeoFullPhysVol(lvEBarrelMotherNeg);
@@ -311,11 +313,11 @@ void TileTBFactory::create(GeoPhysVol *world)
           << endmsg;
 
       //Envelope for finger separately
-      GeoTubs* fingerMother = new GeoTubs(FingerRmin*CLHEP::cm,
-					  dbManager->GetEnvRout()*CLHEP::cm,
-					  EBFingerLength/2.*CLHEP::cm,
-					  0.0 * CLHEP::deg,
-					  NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* fingerMother = new GeoTubs(FingerRmin*GeoModelKernelUnits::cm,
+					  dbManager->GetEnvRout()*GeoModelKernelUnits::cm,
+					  EBFingerLength/2.*GeoModelKernelUnits::cm,
+					  0.0 * GeoModelKernelUnits::deg,
+					  NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
       
       GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir);
       pvEFingerMotherNeg = new GeoFullPhysVol(lvEFingerMother);
@@ -329,11 +331,11 @@ void TileTBFactory::create(GeoPhysVol *world)
     }
     
     if(EnvType == 5) {
-      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-					   (dbManager->GetEnvRout()) * CLHEP::cm,
-					   (dbManager->GetEnvZLength())/2.0 * CLHEP::cm,
-					   0.0 * CLHEP::deg,
-					   NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength())/2.0 * GeoModelKernelUnits::cm,
+					   0.0 * GeoModelKernelUnits::deg,
+					   NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
       
       GeoTubs* itcMother = GeneralMother;
       GeoLogVol* lvITCMother = new GeoLogVol("ITC",itcMother,matAir);
@@ -348,11 +350,11 @@ void TileTBFactory::create(GeoPhysVol *world)
     }
     
     if(EnvType == 4) {
-      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * CLHEP::cm,
-					   (dbManager->GetEnvRout()) * CLHEP::cm,
-					   (dbManager->GetEnvZLength())/2.0 * CLHEP::cm,
-					   0.0 * CLHEP::deg,
-					   NumberOfMod*deltaPhi*CLHEP::deg);
+      GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvRout()) * GeoModelKernelUnits::cm,
+					   (dbManager->GetEnvZLength())/2.0 * GeoModelKernelUnits::cm,
+					   0.0 * GeoModelKernelUnits::deg,
+					   NumberOfMod*deltaPhi*GeoModelKernelUnits::deg);
 
       GeoTubs* itcMotherNeg = GeneralMother;
       GeoLogVol* lvITCMotherNeg = new GeoLogVol("ITC",itcMotherNeg,matAir);
@@ -384,17 +386,17 @@ void TileTBFactory::create(GeoPhysVol *world)
           << endmsg;
           
       Variable varInd;
-      GENFUNCTION phiInd = deltaPhi*(varInd + ModCounter + 0.5) * CLHEP::deg; 
+      GENFUNCTION phiInd = deltaPhi*(varInd + ModCounter + 0.5) * GeoModelKernelUnits::deg; 
 
 
       //------------------- BARREL BLOCKS -------------------------------------
      
       if( EnvType == 1 || EnvType == 0 ) { // normal barrel module or module zero
         dbManager->SetCurrentSectionByNumber(ModType);	  
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
        
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1));
        
@@ -415,7 +417,7 @@ void TileTBFactory::create(GeoPhysVol *world)
                                     dzGlue,
                                     deltaPhi); 
        
-        TRANSFUNCTION xfBarrelModuleMother = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfBarrelModuleMother = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
         GeoSerialTransformer* stBarrelModuleMother = new GeoSerialTransformer(pvBarrelModuleMother,
                                                                               &xfBarrelModuleMother,
@@ -431,10 +433,10 @@ void TileTBFactory::create(GeoPhysVol *world)
 
         // Trd - one finger mother
 
-        thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
        
         GeoTrd* fingerModuleMother = new GeoTrd(thicknessWedgeMother/2.,
                                                 thicknessWedgeMother/2.,
@@ -452,10 +454,10 @@ void TileTBFactory::create(GeoPhysVol *world)
                                    deltaPhi,
                                    m_testbeamGeometry,
                                    ModuleNcp,
-                                   thicknessWedgeMother*(1./CLHEP::cm));
+                                   thicknessWedgeMother*(1./GeoModelKernelUnits::cm));
        
         // --- Position N modules inside mother (positive/negative) -----
-        TRANSFUNCTION xfFingerModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
         
         GeoSerialTransformer* stFingerModuleMotherPos = new GeoSerialTransformer(pvFingerModuleMother,
                                                                                  &xfFingerModuleMotherPos,
@@ -463,7 +465,7 @@ void TileTBFactory::create(GeoPhysVol *world)
         pvFingerMotherPos->add(new GeoSerialIdentifier(ModPositionNumber));
         pvFingerMotherPos->add(stFingerModuleMotherPos);
        
-        TRANSFUNCTION xfFingerModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
         GeoSerialTransformer* stFingerModuleMotherNeg = new GeoSerialTransformer(pvFingerModuleMother,
                                                                                  &xfFingerModuleMotherNeg,
@@ -478,10 +480,10 @@ void TileTBFactory::create(GeoPhysVol *world)
       if((ModType == 2)&&(EnvType == 3)){
         dbManager->SetCurrentSectionByNumber(ModType);
         // Trd - module mother 
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
         
@@ -502,7 +504,7 @@ void TileTBFactory::create(GeoPhysVol *world)
                                     dzGlue,
                                     deltaPhi);
              
-        TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
         
         GeoSerialTransformer* stEBarrelModuleMotherPos = new GeoSerialTransformer(pvEBarrelModuleMotherPos,
                                                                                   &xfEBarrelModuleMotherPos,
@@ -516,10 +518,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         dbManager->SetCurrentTifg(2);  //barrel efinger (small)
         
         // Trd - one finger mother
-        thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2.,
                                                  thicknessWedgeMother/2.,
@@ -540,7 +542,7 @@ void TileTBFactory::create(GeoPhysVol *world)
         
         // --- Position N modules inside mother (positive/negative) -----
   
-        TRANSFUNCTION xfEFingerModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfEFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
         
         GeoSerialTransformer* stEFingerModuleMotherPos = new GeoSerialTransformer(pvEFingerModuleMother,
                                                                                   &xfEFingerModuleMotherPos,
@@ -555,10 +557,10 @@ void TileTBFactory::create(GeoPhysVol *world)
       if((ModType == 2)&&(EnvType == 2)){
         dbManager->SetCurrentSectionByNumber(ModType);
         // Trd - module mother 
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
   
@@ -579,7 +581,7 @@ void TileTBFactory::create(GeoPhysVol *world)
                                     dzGlue,
                                     deltaPhi);
       
-        TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
         GeoSerialTransformer* stEBarrelModuleMotherNeg = new GeoSerialTransformer(pvEBarrelModuleMotherNeg,
                                                                                   &xfEBarrelModuleMotherNeg,
@@ -594,10 +596,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         
         //zEndSection = extOffset + dbManager->TILBdzmodul()/2. + dbManager->TILEzshift();
         // Trd - one finger mother
-        thicknessWedgeMother = dbManager->TIFGdz() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TIFGdz() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2.,
                                                  thicknessWedgeMother/2.,
@@ -616,7 +618,7 @@ void TileTBFactory::create(GeoPhysVol *world)
                                    deltaPhi,
                                    m_testbeamGeometry);
           
-        TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
 
         GeoSerialTransformer* stEFingerModuleMotherNeg = new GeoSerialTransformer(pvEFingerModuleMother,
                                                                                   &xfEFingerModuleMotherNeg,
@@ -636,10 +638,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
         
         // Common mother for ITC1/2 modules
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * CLHEP::cm;
-        dy1WedgeMother = rMinITC * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = rMinITC * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         GeoTrd* itcModuleMotherPos = new GeoTrd(thicknessWedgeMother/2.,
                                                 thicknessWedgeMother/2.,
@@ -656,10 +658,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         // 2. Mother for frontplate (since it's short)
         
         //First submother
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
         
@@ -670,19 +672,19 @@ void TileTBFactory::create(GeoPhysVol *world)
                                             heightWedgeMother/2.);
         
         //Second submother
-        thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         GeoTrd* plug2SubMother = new GeoTrd(thicknessWedgeMother/2.,
                                             thicknessWedgeMother/2.,
                                             dy1WedgeMother,
                                             dy2WedgeMother,
                                             heightWedgeMother/2.);
         
-        HepGeom::Translate3D plug1SubOffset(-dzITC2*CLHEP::cm/2.,
+        GeoTrf::Translate3D plug1SubOffset(-dzITC2*GeoModelKernelUnits::cm/2.,
                                       0.,
-                                      (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*CLHEP::cm/2.);
+                                      (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2.);
         
         const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset);
         GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir);
@@ -697,9 +699,9 @@ void TileTBFactory::create(GeoPhysVol *world)
                                     ModuleNcp,
                                     dzITC2);
         
-        GeoTransform* tfPlug1ModuleMother = new GeoTransform(HepGeom::Translate3D(0.,
+        GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0.,
                                                                             0.,
-                                                                            (dbManager->TILBrmin()-rMinITC)*CLHEP::cm/2.));
+                                                                            (dbManager->TILBrmin()-rMinITC)*GeoModelKernelUnits::cm/2.));
         
         
         pvITCModuleMotherPos->add(tfPlug1ModuleMother);
@@ -707,10 +709,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         	 
         //Mother volume for ITC2
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1));
         
         GeoTrd* plug2ModuleMother = new GeoTrd(thicknessWedgeMother/2.,
@@ -732,13 +734,13 @@ void TileTBFactory::create(GeoPhysVol *world)
         
         
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-        GeoTransform* tfPlug2ModuleMother = new GeoTransform(HepGeom::Translate3D((dbManager->TILBdzmodul() - dzITC2)*CLHEP::cm/2.,
+        GeoTransform* tfPlug2ModuleMother = new GeoTransform(GeoTrf::Translate3D((dbManager->TILBdzmodul() - dzITC2)*GeoModelKernelUnits::cm/2.,
                                                                             0.,
-                                                                            (dbManager->TILBrmin() - dbManager->TILBrmaximal())*CLHEP::cm/2.));
+                                                                            (dbManager->TILBrmin() - dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2.));
         pvITCModuleMotherPos->add(tfPlug2ModuleMother);
         pvITCModuleMotherPos->add(pvPlug2ModuleMother);
         
-        TRANSFUNCTION xfITCModuleMotherPos = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*CLHEP::cm)*HepGeom::RotateX3D(180*CLHEP::deg)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfITCModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateX3D(180*GeoModelKernelUnits::deg)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
         
         GeoSerialTransformer* stITCModuleMotherPos = new GeoSerialTransformer(pvITCModuleMotherPos,
                                                                               &xfITCModuleMotherPos,
@@ -758,10 +760,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
           
         // Common mother for ITC1/2 modules
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * CLHEP::cm;
-        dy1WedgeMother = rMinITC * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = rMinITC * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
           
         GeoTrd* itcModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2.,
                                                 thicknessWedgeMother/2.,
@@ -778,10 +780,10 @@ void TileTBFactory::create(GeoPhysVol *world)
         // 2. Mother for frontplate (since it's short)
           
         //First submother
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
           
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod());
           
@@ -792,19 +794,19 @@ void TileTBFactory::create(GeoPhysVol *world)
                                             heightWedgeMother/2.);
           
         //Second submother
-        thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         GeoTrd* plug2SubMother = new GeoTrd(thicknessWedgeMother/2.,
                                             thicknessWedgeMother/2.,
                                             dy1WedgeMother,
                                             dy2WedgeMother,
                                             heightWedgeMother/2.);
           
-        HepGeom::Translate3D plug1SubOffset(-dzITC2*CLHEP::cm/2.,
+        GeoTrf::Translate3D plug1SubOffset(-dzITC2*GeoModelKernelUnits::cm/2.,
                                       0.,
-                                      (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*CLHEP::cm/2.);
+                                      (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2.);
           
         const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset);
         GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir);
@@ -820,9 +822,9 @@ void TileTBFactory::create(GeoPhysVol *world)
                                     ModuleNcp,
                                     dzITC2);
         
-        GeoTransform* tfPlug1ModuleMother = new GeoTransform(HepGeom::Translate3D(0.,
+        GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0.,
                                                                             0.,
-                                                                            (dbManager->TILBrmin()-rMinITC)*CLHEP::cm/2.));
+                                                                            (dbManager->TILBrmin()-rMinITC)*GeoModelKernelUnits::cm/2.));
           
           
         pvITCModuleMotherNeg->add(tfPlug1ModuleMother);
@@ -830,10 +832,10 @@ void TileTBFactory::create(GeoPhysVol *world)
           	 
         //Mother volume for ITC2
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2);
-        thicknessWedgeMother = dbManager->TILBdzmodul() * CLHEP::cm;
-        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * CLHEP::cm;
-        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
-        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*CLHEP::deg) * CLHEP::cm;
+        thicknessWedgeMother = dbManager->TILBdzmodul() * GeoModelKernelUnits::cm;
+        heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * GeoModelKernelUnits::cm;
+        dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
+        dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*GeoModelKernelUnits::deg) * GeoModelKernelUnits::cm;
         dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1));
           
         GeoTrd* plug2ModuleMother = new GeoTrd(thicknessWedgeMother/2.,
@@ -855,13 +857,13 @@ void TileTBFactory::create(GeoPhysVol *world)
         
           
         dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1);
-        GeoTransform* tfPlug2ModuleMother = new GeoTransform(HepGeom::Translate3D((dbManager->TILBdzmodul() - dzITC2)*CLHEP::cm/2.,
+        GeoTransform* tfPlug2ModuleMother = new GeoTransform(GeoTrf::Translate3D((dbManager->TILBdzmodul() - dzITC2)*GeoModelKernelUnits::cm/2.,
                                                                             0.,
-                                                                            (dbManager->TILBrmin() - dbManager->TILBrmaximal())*CLHEP::cm/2.));
+                                                                            (dbManager->TILBrmin() - dbManager->TILBrmaximal())*GeoModelKernelUnits::cm/2.));
         pvITCModuleMotherNeg->add(tfPlug2ModuleMother);
         pvITCModuleMotherNeg->add(pvPlug2ModuleMother);
           
-        TRANSFUNCTION xfITCModuleMotherNeg = Pow(HepGeom::RotateZ3D(1.0),phiInd)*HepGeom::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*CLHEP::cm)*HepGeom::RotateY3D(90*CLHEP::deg);
+        TRANSFUNCTION xfITCModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*GeoModelKernelUnits::cm)*GeoTrf::RotateY3D(90*GeoModelKernelUnits::deg);
           
         GeoSerialTransformer* stITCModuleMotherNeg = new GeoSerialTransformer(pvITCModuleMotherNeg,
                                                                               &xfITCModuleMotherNeg,
@@ -888,7 +890,7 @@ void TileTBFactory::create(GeoPhysVol *world)
       else {
         ztrans = 0;
       }
-      tfBarrelMother = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfBarrelMother = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning barrel with translation " << ztrans << " cm" << endmsg;
       GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); 
 
@@ -910,7 +912,7 @@ void TileTBFactory::create(GeoPhysVol *world)
       else {
         ztrans = 0;
       }
-      tfFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning positive barrel finger with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
       GeoNameTag* ntFingerMotherPos = new GeoNameTag("TileFingerPos");
@@ -932,7 +934,7 @@ void TileTBFactory::create(GeoPhysVol *world)
       else {
         ztrans = 0;
       }
-      tfFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D((dbManager->GetEnvDPhi())*CLHEP::deg));
+      tfFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning negative barrel finger with translation " << ztrans 
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
       GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg");
@@ -945,7 +947,7 @@ void TileTBFactory::create(GeoPhysVol *world)
 
     if(EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger
       ztrans = (tileTBEnvThickness/2. - dbManager->GetEnvZLength()/2. - EBFingerLength/2.);
-      GeoTransform* tfEBarrelMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning positive ext.barrel with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
       
@@ -955,7 +957,7 @@ void TileTBFactory::create(GeoPhysVol *world)
       pvTileTBEnv->add(pvEBarrelMotherPos);
       
       ztrans = (tileTBEnvThickness/2. - EBFingerLength/2.);
-      GeoTransform* tfEFingerMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning positive ext.barrel finger with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
 
@@ -968,7 +970,7 @@ void TileTBFactory::create(GeoPhysVol *world)
    
     if(EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger
       ztrans = (-tileTBEnvThickness/2. + dbManager->GetEnvZLength()/2. + EBFingerLength/2.);
-      GeoTransform* tfEBarrelMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning negative ext.barrel with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
       
@@ -978,7 +980,7 @@ void TileTBFactory::create(GeoPhysVol *world)
       pvTileTBEnv->add(pvEBarrelMotherNeg);
       
       ztrans = (-tileTBEnvThickness/2. + EBFingerLength/2.);
-      GeoTransform* tfEFingerMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning negative ext.barrel finger with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
 
@@ -991,7 +993,7 @@ void TileTBFactory::create(GeoPhysVol *world)
 
     if(EnvType == 5) { // positive ITC attached to positive ext.barrel
       ztrans = (tileTBEnvThickness/2. - ZLengthEBarrelPos - dbManager->GetEnvZLength()/2.);
-      GeoTransform* tfITCMotherPos = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning positive ITC with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
 
@@ -1003,7 +1005,7 @@ void TileTBFactory::create(GeoPhysVol *world)
 
     if(EnvType == 4) { // negative ITC attached to negative ext.barrel
       ztrans = (-tileTBEnvThickness/2. + ZLengthEBarrelNeg + dbManager->GetEnvZLength()/2.);
-      GeoTransform* tfITCMotherNeg = new GeoTransform(HepGeom::TranslateZ3D(ztrans*CLHEP::cm) * HepGeom::RotateZ3D(dbManager->GetEnvDPhi() * CLHEP::deg));
+      GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*GeoModelKernelUnits::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * GeoModelKernelUnits::deg));
       (*m_log) << MSG::DEBUG << "Positioning negative ITC with translation " << ztrans
           << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg;
 
@@ -1024,12 +1026,12 @@ void TileTBFactory::create(GeoPhysVol *world)
     dbManager->SetCurrentEnvByIndex(EnvCounter);
     int EnvType = dbManager->GetEnvType();
     int NumberOfMod = dbManager->GetEnvNModules();
-    float Zshift = dbManager->GetEnvZShift() * CLHEP::cm;
+    float Zshift = dbManager->GetEnvZShift() * GeoModelKernelUnits::cm;
     (*m_log) << MSG::DEBUG 
         << "EnvCounter is " << EnvCounter
         << " EnvType is " << EnvType
         << " Nmodules is " << NumberOfMod
-        << " Zshift is " << Zshift*(1./CLHEP::cm) << " cm"
+        << " Zshift is " << Zshift*(1./GeoModelKernelUnits::cm) << " cm"
         << endmsg;
 
     if(EnvType == 1 || EnvType == 0) { // central barrel
diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
index 6475b62cbceced40d1d0ed7acba607c1aa6f096d..fc80db7a7251f288442a0095e2e70dd5328afd2b 100644
--- a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
+++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
@@ -31,6 +31,7 @@
 #include "StoreGate/ReadHandle.h"
 #include "StoreGate/WriteHandle.h"
 
+#include "CLHEP/Units/SystemOfUnits.h"
 using CLHEP::MeV;
  
 // uncomment line below for debug output
diff --git a/TileCalorimeter/TileTrackingGeometry/CMakeLists.txt b/TileCalorimeter/TileTrackingGeometry/CMakeLists.txt
index 8eb89649d84a9509146490b41ab885f918223719..0463b37f08b7a922931d2104ba8f7c0a1bad736a 100644
--- a/TileCalorimeter/TileTrackingGeometry/CMakeLists.txt
+++ b/TileCalorimeter/TileTrackingGeometry/CMakeLists.txt
@@ -15,8 +15,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloDetDescr
                           Control/CxxUtils
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
-                          DetectorDescription/GeoPrimitives
                           TileCalorimeter/TileDetDescr
                           Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv
                           Tracking/TrkDetDescr/TrkDetDescrUtils
@@ -27,13 +25,14 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( CLHEP )
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_component( TileTrackingGeometry
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib CxxUtils StoreGateLib SGtests GeoModelKernel GeoPrimitives TileDetDescr TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkSurfaces TrkVolumes )
+                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib CxxUtils StoreGateLib SGtests GeoPrimitives TileDetDescr TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkSurfaces TrkVolumes )
 
 # Install files from the package:
 atlas_install_headers( TileTrackingGeometry )
diff --git a/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx b/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx
index 98da0e7d9268059efdbbf12a6e2b57b3e92a6a44..17da0de671113224c4b85ffbbdd67ab400def605 100755
--- a/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx
+++ b/TileCalorimeter/TileTrackingGeometry/src/TileVolumeBuilder.cxx
@@ -27,8 +27,7 @@
 #include "GeoModelKernel/GeoPVConstLink.h"
 #include "GeoModelKernel/GeoVPhysVol.h"
 #include "GeoModelKernel/GeoVolumeCursor.h"
-// Amg
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+#include "GeoModelKernel/Units.h"
 // Trk
 #include "TrkDetDescrInterfaces/ITrackingVolumeHelper.h"
 #include "TrkDetDescrInterfaces/ITrackingVolumeCreator.h"
@@ -49,18 +48,13 @@
 #include "TrkSurfaces/CylinderBounds.h"
 #include "TrkSurfaces/DiscSurface.h"
 #include "TrkSurfaces/DiscBounds.h"
-// CLHEP
-#include "CLHEP/Units/SystemOfUnits.h"
 // Gaudi
 #include "GaudiKernel/MsgStream.h"
 // StoreGate
 #include "StoreGate/StoreGateSvc.h"
 #include "CxxUtils/make_unique.h"
 
-using HepGeom::Transform3D;
-using HepGeom::Translate3D;
-using CLHEP::Hep3Vector;
-using CLHEP::mm;
+using GeoModelKernelUnits::mm;
 using CxxUtils::make_unique;
 
 // constructor
@@ -268,13 +262,13 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
       const GeoTubs* currentTubs  = dynamic_cast<const GeoTubs*>(childShape);
       Trk::CylinderVolumeBounds* childCylVolBounds = currentTubs ? geoShapeToVolumeBounds.convert(currentTubs) : 0;
       // get the transform
-      Transform3D childTransform = currentVPhysVolLink->getXToChildVol(ichild);
-      double childZposition = childTransform.getTranslation().z();
+      GeoTrf::Transform3D childTransform = currentVPhysVolLink->getXToChildVol(ichild);
+      double childZposition = childTransform.translation().z();
       
       if (childCylVolBounds){
 	// screen output    
 	ATH_MSG_VERBOSE( "  ---> CylinderVolumeBounds created as: " );
-	ATH_MSG_VERBOSE( "  ---> Position in z: " << childTransform.getTranslation().z() );
+	ATH_MSG_VERBOSE( "  ---> Position in z: " << childTransform.translation().z() );
 	ATH_MSG_VERBOSE( *childCylVolBounds );
 	
 	  // retrieve split radius from the TileBar2 exit surface
@@ -823,7 +817,7 @@ void Tile::TileVolumeBuilder::printInfo(const PVConstLink pv) const
   std::cout << "New Tile Object:"<<lv->getName()<<", made of"<<lv->getMaterial()->getName()<<","<<lv->getShape()->type()<<std::endl;
   //m_geoShapeConverter->decodeShape(lv->getShape());
   int igen=0;
-  Amg::Transform3D transf =  Amg::CLHEPTransformToEigen(pv->getX());
+  Amg::Transform3D transf =  pv->getX();
   printChildren(pv,igen,transf);
 }
 
@@ -834,7 +828,7 @@ void Tile::TileVolumeBuilder::printChildren(const PVConstLink pv,int igen, Amg::
   igen++; 
   std::string cname; 
   for (unsigned int ic=0; ic<nc; ic++) {
-    Amg::Transform3D transf = trIn*Amg::CLHEPTransformToEigen(pv->getXToChildVol(ic));
+    Amg::Transform3D transf = trIn*pv->getXToChildVol(ic);
  
     //
     //std::cout << " dumping transform to subcomponent" << std::endl;
diff --git a/Tracking/Acts/ActsGeometry/src/ActsDetectorElement.cxx b/Tracking/Acts/ActsGeometry/src/ActsDetectorElement.cxx
index d2c3a95b26a9c6e337af12e13555fcd299503a90..56c85d53d68ae45a31820a274fcbe2bb084550ad 100644
--- a/Tracking/Acts/ActsGeometry/src/ActsDetectorElement.cxx
+++ b/Tracking/Acts/ActsGeometry/src/ActsDetectorElement.cxx
@@ -172,10 +172,10 @@ ActsDetectorElement::storeTransform(ActsAlignmentStore* gas) const
 
     Transform3D operator()(const InDetDD::SiDetectorElement* detElem) const
     {
-      HepGeom::Transform3D g2l 
+      Amg::Transform3D g2l 
         = detElem->getMaterialGeom()->getAbsoluteTransform(m_store);
 
-      return Amg::CLHEPTransformToEigen(g2l * detElem->recoToHitTransform());
+      return g2l * Amg::CLHEPTransformToEigen(detElem->recoToHitTransform());
     }
     
     Transform3D operator()(const InDetDD::TRT_BaseElement*) const
@@ -206,10 +206,10 @@ ActsDetectorElement::getDefaultTransformMutexed() const
 
     Transform3D operator()(const InDetDD::SiDetectorElement* detElem) const
     {
-      HepGeom::Transform3D g2l 
+      Amg::Transform3D g2l 
         = detElem->getMaterialGeom()->getDefAbsoluteTransform();
 
-      return Amg::CLHEPTransformToEigen(g2l * detElem->recoToHitTransform());
+      return g2l * Amg::CLHEPTransformToEigen(detElem->recoToHitTransform());
     }
     
     Transform3D operator()(const InDetDD::TRT_BaseElement*) const
diff --git a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/CMakeLists.txt b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/CMakeLists.txt
index 77e3a5d7d1b60ee80f8a623cc363611a9ed85cbd..ec8f8498dcc164e47a7c0aedf6c322dcfaeee8a5 100644
--- a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/CMakeLists.txt
+++ b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/CMakeLists.txt
@@ -10,20 +10,19 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/GeoPrimitives
                           Tracking/TrkDetDescr/TrkGeometry
                           PRIVATE
-                          DetectorDescription/GeoModel/GeoModelKernel
                           Tracking/TrkDetDescr/TrkVolumes )
 
 # External dependencies:
 find_package( CLHEP )
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( TrkDetDescrGeoModelCnv
                    src/*.cxx
                    PUBLIC_HEADERS TrkDetDescrGeoModelCnv
                    INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                   PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                   PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
+                   PRIVATE_INCLUDE_DIRS ${GEOMODEL_INCLUDE_DIRS}
                    LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives TrkGeometry
-                   PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel TrkVolumes )
+                   PRIVATE_LINK_LIBRARIES ${GEOMODEL_LIBRARIES} TrkVolumes )
 
diff --git a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoMaterialConverter.cxx b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoMaterialConverter.cxx
index ced74187ff390894a1b565e0f689af5ec047c036..3d46044d3d6a02b87ebde019a39b61ea43a8e2dc 100755
--- a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoMaterialConverter.cxx
+++ b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoMaterialConverter.cxx
@@ -11,10 +11,10 @@
 // GeoModelKernel
 #include "GeoModelKernel/GeoMaterial.h"
 #include "GeoModelKernel/GeoElement.h"
-// CLHEP
-#include "CLHEP/Units/SystemOfUnits.h"
+#include "GeoModelKernel/Units.h"
 
-double Trk::GeoMaterialConverter::s_densityCnvFactor = 1./CLHEP::gram;
+
+double Trk::GeoMaterialConverter::s_densityCnvFactor = 1./GeoModelKernelUnits::gram;
 
 Trk::Material Trk::GeoMaterialConverter::convert(const GeoMaterial* gm) const {
   // get the obvious things 
@@ -30,7 +30,7 @@ Trk::Material Trk::GeoMaterialConverter::convert(const GeoMaterial* gm) const {
   for (int iEl=0; iEl<numberOfElements; iEl++){
         const GeoElement* geoEl = gm->getElement(iEl);
         float fraction = gm->getFraction(iEl);
-        A += fraction*(geoEl->getA()/(CLHEP::gram));
+        A += fraction*(geoEl->getA()/(GeoModelKernelUnits::gram));
         Z += fraction*(geoEl->getZ());             
    }
   // return the result
diff --git a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoShapeConverter.cxx b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoShapeConverter.cxx
index 52de12f99ed95974d5c1d0d9b0bd648a724888ac..0533d79f2ecba4977cc7ce9fba521d5a5f10ab91 100755
--- a/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoShapeConverter.cxx
+++ b/Tracking/TrkDetDescr/TrkDetDescrGeoModelCnv/src/GeoShapeConverter.cxx
@@ -35,8 +35,8 @@
 #include "GeoModelKernel/GeoPgon.h"
 #include "GeoModelKernel/GeoPara.h"
 #include "GeoModelKernel/GeoVolumeCursor.h"
-
-#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 // #define DEBUG
 #ifdef DEBUG
@@ -50,7 +50,7 @@ namespace {
 	//commonly used axes
 	const Amg::Vector3D gXAxis(1.0, 0.0, 0.0), gYAxis(0.0, 1.0, 0.0), gZAxis(0.0, 0.0, 1.0);
 	//commonly used angles, ±90°, 180°
-	const double p90deg(90.0 * CLHEP::deg), m90deg(-90.0 * CLHEP::deg), p180deg(180.0 * CLHEP::deg);
+	const double p90deg(90.0 * GeoModelKernelUnits::deg), m90deg(-90.0 * GeoModelKernelUnits::deg), p180deg(180.0 * GeoModelKernelUnits::deg);
 }
 
 
@@ -522,7 +522,7 @@ Trk::Volume* Trk::GeoShapeConverter::translateGeoShape(const GeoShape* sh, Amg::
     if (!shift) return 0;
     const GeoShape* shA = shift->getOp();
     //check this!
-    const Amg::Transform3D tr = Amg::CLHEPTransformToEigen(shift->getX());
+    const Amg::Transform3D tr = shift->getX();
     Amg::Transform3D newtransf = *transf * tr;
     Trk::Volume* vol = translateGeoShape(shA, &newtransf);
     return vol;
@@ -602,9 +602,9 @@ void Trk::GeoShapeConverter::decodeShape(const GeoShape* sh) const
   if ( sh->type()=="Shift") {
     const GeoShapeShift* shift = dynamic_cast<const GeoShapeShift*> (sh);
     const GeoShape* shA = shift->getOp();
-    const HepGeom::Transform3D transf = shift->getX();
-    std::cout << "shifted by:transl:" <<transf.getTranslation() <<", rot:"
-              << transf[0][0]<<"," << transf[1][1] <<"," << transf[2][2] << std::endl;
+    const GeoTrf::Transform3D transf = shift->getX();
+    std::cout << "shifted by:transl:" <<transf.translation() <<", rot:"
+              << transf(0,0)<<"," << transf(1,1) <<"," << transf(2,2) << std::endl;
     decodeShape(shA);
   }
 }
diff --git a/Tracking/TrkDetDescr/TrkDetElementBase/CMakeLists.txt b/Tracking/TrkDetDescr/TrkDetElementBase/CMakeLists.txt
index ac31e33995fea0528b5eb3bdfa28e6611307b6f8..4e927fdc0a40b2abeadff0e03757d43fc56fa899 100644
--- a/Tracking/TrkDetDescr/TrkDetElementBase/CMakeLists.txt
+++ b/Tracking/TrkDetDescr/TrkDetElementBase/CMakeLists.txt
@@ -7,18 +7,18 @@ atlas_subdir( TrkDetElementBase )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoPrimitives
                           DetectorDescription/Identifier
                           Event/EventPrimitives )
 
 # External dependencies:
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( TrkDetElementBase
                    src/*.cxx
                    PUBLIC_HEADERS TrkDetElementBase
-                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoModelKernel GeoPrimitives Identifier EventPrimitives )
+                   INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} GeoPrimitives Identifier EventPrimitives )
 
diff --git a/Tracking/TrkDetDescr/TrkDetElementBase/TrkDetElementBase/TrkDetElementBase.h b/Tracking/TrkDetDescr/TrkDetElementBase/TrkDetElementBase/TrkDetElementBase.h
index f878dba67d819b59d8b16c54d4ae18bee281cca7..f9be125f01baf8a2ed7c30346feacd855a52cb36 100755
--- a/Tracking/TrkDetDescr/TrkDetElementBase/TrkDetElementBase/TrkDetElementBase.h
+++ b/Tracking/TrkDetDescr/TrkDetElementBase/TrkDetElementBase/TrkDetElementBase.h
@@ -9,13 +9,14 @@
 #ifndef TRKDETELEMENTBASE_TRKDETELEMENTBASE_H
 #define TRKDETELEMENTBASE_TRKDETELEMENTBASE_H
 
-#include "GeoModelKernel/GeoVDetectorElement.h"
-#include "Identifier/Identifier.h"
-#include "Identifier/IdentifierHash.h"
 // Math & Geometry library
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "EventPrimitives/EventPrimitives.h"
 
+#include "GeoModelKernel/GeoVDetectorElement.h"
+#include "Identifier/Identifier.h"
+#include "Identifier/IdentifierHash.h"
+
 namespace Trk 
 {
 
diff --git a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx
index 11e2d09e7ee461e13101fdefed39fdb8e4f41253..81cb4272b04e3ab5312bc414a7220e3f59eb1441 100644
--- a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx
+++ b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx
@@ -35,6 +35,8 @@
 // for detector id
 #include "AtlasDetDescr/AtlasDetectorID.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 namespace JiveXML {
   ///Namespace for all helper functions
   namespace TrackRetrieverHelpers {
@@ -61,10 +63,10 @@ namespace JiveXML {
 
 			//write out p_T
 			if ((perigee->parameters())[Trk::qOverP]==0) pt.push_back(DataType(9999.));
-			else pt.push_back( (perigee->charge() > 0) ? DataType(perigee->pT()/CLHEP::GeV) : DataType((-perigee->pT())/CLHEP::GeV));
+			else pt.push_back( (perigee->charge() > 0) ? DataType(perigee->pT()/Gaudi::Units::GeV) : DataType((-perigee->pT())/Gaudi::Units::GeV));
 
-			d0.push_back(DataType((perigee->parameters())[Trk::d0]/CLHEP::cm));
-			z0.push_back(DataType(perigee->parameters()[Trk::z0]/CLHEP::cm));
+			d0.push_back(DataType((perigee->parameters())[Trk::d0]/Gaudi::Units::cm));
+			z0.push_back(DataType(perigee->parameters()[Trk::z0]/Gaudi::Units::cm));
 			phi0.push_back(DataType(perigee->parameters()[Trk::phi0]));
 
 			if (perigee->parameters()[Trk::theta] == 0.) cotTheta.push_back(DataType(9999.));
diff --git a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx
index da02025c9585be243f078196666b6d8684029cc4..e8445ef286ceeb5ce04637b19a5abad5dcdf0598 100755
--- a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx
+++ b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/src/STEP_Propagator.cxx
@@ -31,6 +31,7 @@
 // CLHEP
 #include "CLHEP/Random/RandFlat.h"
 #include "CLHEP/Random/RandGauss.h"
+#include "CLHEP/Units/PhysicalConstants.h"
 //Gaudi
 #include "GaudiKernel/PhysicalConstants.h"
 #include "EventPrimitives/EventPrimitivesToStringConverter.h"
diff --git a/Tracking/TrkFitter/TrkDistributedKalmanFilter/src/DistributedKalmanFilter.cxx b/Tracking/TrkFitter/TrkDistributedKalmanFilter/src/DistributedKalmanFilter.cxx
index fc62ca93544298d0ac2be98aaeec2d8d1409c0f7..ca27bf8d4fa87e131dc7ea8923b788af10cb3720 100755
--- a/Tracking/TrkFitter/TrkDistributedKalmanFilter/src/DistributedKalmanFilter.cxx
+++ b/Tracking/TrkFitter/TrkDistributedKalmanFilter/src/DistributedKalmanFilter.cxx
@@ -13,6 +13,7 @@
 ///////////////////////////////////////////////////////////////////
 
 #include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 #include "StoreGate/StoreGateSvc.h"
 #include "TrkTrack/Track.h"
@@ -929,7 +930,7 @@ void Trk::DistributedKalmanFilter::getMagneticField(double gP[3], double* pB) co
   pB[0]=0.0;pB[1]=0.0;pB[2]=0.0;
   double field[3];
   m_MagFieldSvc->getField(gP,field);//field is returned in kT
-  for(int i=0;i<3;i++) pB[i]=field[i]/CLHEP::kilogauss;//convert to kG
+  for(int i=0;i<3;i++) pB[i]=field[i]/Gaudi::Units::kilogauss;//convert to kG
 }
 
 // fit a set of PrepRawData objects
diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
index 78036c33da28fbf44eaa77e7125ce27402658e68..58a83461be57977ddbbe697cf5b62f8507430cef 100644
--- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
+++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
@@ -64,6 +64,10 @@
 
 #include "MagFieldInterfaces/IMagFieldSvc.h"
 
+#include "CLHEP/Matrix/Matrix.h"
+#include "CLHEP/Matrix/SymMatrix.h"
+#include "CLHEP/Matrix/Vector.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "IdDictDetDescr/IdDictManager.h"
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
index 6b8a765c87100b67467160968a5890a4a305ec55..cc6ce5abe802ad0c810ba6e9a50763c1d358866c 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
@@ -42,6 +42,8 @@
 #include "TrkParameters/TrackParameters.h"
 #include "TrkSurfaces/StraightLineSurface.h"
 
+#include "CLHEP/Units/SystemOfUnits.h"
+
 #include <ext/algorithm>
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/Tracking/TrkTools/TrkTrackFieldIntegralTools/src/FieldIntegralByTrackQueryTool.cxx b/Tracking/TrkTools/TrkTrackFieldIntegralTools/src/FieldIntegralByTrackQueryTool.cxx
index 7ff653abec04be673ebe7d483becdb5136eb0359..b139b244d6a8ce792983f6360060078f64261915 100755
--- a/Tracking/TrkTools/TrkTrackFieldIntegralTools/src/FieldIntegralByTrackQueryTool.cxx
+++ b/Tracking/TrkTools/TrkTrackFieldIntegralTools/src/FieldIntegralByTrackQueryTool.cxx
@@ -16,7 +16,7 @@
 #include "TrkMaterialOnTrack/MaterialEffectsOnTrack.h"
 #include "TrkMaterialOnTrack/ScatteringAngles.h"
 #include "TrkGeometry/TrackingVolume.h"
-
+#include "GaudiKernel/SystemOfUnits.h"
 // ================ Constructor =================================================
 
 Trk::FieldIntegralByTrackQueryTool::FieldIntegralByTrackQueryTool(const std::string& t,
@@ -159,7 +159,7 @@ double Trk::FieldIntegralByTrackQueryTool::fieldIntegral(const Trk::Track& track
 						     cosTheta);
             }
         }
-      Amg::Vector3D momentumKick        =  startMomentum.cross(endDirection)/(0.3*CLHEP::GeV);     
+      Amg::Vector3D momentumKick        =  startMomentum.cross(endDirection)/(0.3*Gaudi::Units::GeV);     
       integratedMomentumKick                  += momentumKick;
 
       // accumulate abs(Bdl) between measurements
diff --git a/Tracking/TrkTruthTracks/TrkTruthTrackTools/src/TruthTrackBuilder.cxx b/Tracking/TrkTruthTracks/TrkTruthTrackTools/src/TruthTrackBuilder.cxx
index b5bb7456fe7fbbb0acf1ddd61287317d52939fa1..9e9f2ecda87488335e36bf181bb06b248d742a2c 100644
--- a/Tracking/TrkTruthTracks/TrkTruthTrackTools/src/TruthTrackBuilder.cxx
+++ b/Tracking/TrkTruthTracks/TrkTruthTrackTools/src/TruthTrackBuilder.cxx
@@ -23,6 +23,7 @@
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 // Gaudi
 #include "GaudiKernel/IPartPropSvc.h"
+#include "GaudiKernel/SystemOfUnits.h"
 // HepMC
 #include "HepMC/GenParticle.h"
 #include "HepMC/GenVertex.h"
@@ -30,8 +31,6 @@
 
 #include "AtlasDetDescr/AtlasDetectorID.h"
 
-using namespace CLHEP;
-
 /** Constructor **/
 Trk::TruthTrackBuilder::TruthTrackBuilder(const std::string& t, const std::string& n, const IInterface* p) : 
   AthAlgTool(t,n,p),
@@ -209,7 +208,7 @@ Trk::Track* Trk::TruthTrackBuilder::createTrack(const PRD_TruthTrajectory& prdTr
         
         const Trk::TrackParameters *thispar = m_extrapolator->extrapolate(*prevpar,surf,Trk::alongMomentum,false,Trk::nonInteracting);
         if (!thispar) break;
-        if (!surf.insideBounds(thispar->localPosition(),20*mm,50*mm)) {
+        if (!surf.insideBounds(thispar->localPosition(),20*Gaudi::Units::mm,50*Gaudi::Units::mm)) {
           delete thispar;
           continue;
         }
diff --git a/Tracking/TrkValidation/TrkValAlgs/src/TrackValidationNtupleWriter.cxx b/Tracking/TrkValidation/TrkValAlgs/src/TrackValidationNtupleWriter.cxx
index 84dc79917a27764c178f91b5d0ea16a37d518681..23a4057f8a52e1548af9169a2cad11c720f0a2cd 100644
--- a/Tracking/TrkValidation/TrkValAlgs/src/TrackValidationNtupleWriter.cxx
+++ b/Tracking/TrkValidation/TrkValAlgs/src/TrackValidationNtupleWriter.cxx
@@ -38,6 +38,7 @@
 #include "TrkValInterfaces/ITruthNtupleTool.h"
 #include "TrkValInterfaces/IEventPropertyNtupleTool.h"
 
+#include "CLHEP/Vector/LorentzVector.h"
 using CLHEP::HepLorentzVector;
 
 Trk::TrackValidationNtupleWriter::TrackValidationNtupleWriter(const std::string& name, ISvcLocator* pSvcLocator):
diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx
index 2fbf5b0f9aeca4cc472da64eca202aa58d2975d2..2161baf258a38d434c179370e969f55f594e50f5 100755
--- a/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx
+++ b/Tracking/TrkVertexFitter/TrkVKalVrtFitter/src/VKalMagFld.cxx
@@ -28,6 +28,7 @@
 // Header include
 #include "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
 #include "TrkVKalVrtFitter/VKalVrtAtlas.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 //-------------------------------------------------
 #include<iostream>
 
diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h
index 0fbcb9cde67837922ed6112ed525cb4e3c6d5847..e6838a8e32c5334430ea479401147ce724642f56 100644
--- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h
+++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h
@@ -9,6 +9,7 @@
 #include "TrkParameters/TrackParameters.h"
 #include "xAODTracking/TrackParticleFwd.h"
 #include "xAODTracking/VertexFwd.h"
+#include "CLHEP/Vector/ThreeVector.h"
 
 /**
  * An abstract base class  for algorithms estimating the transverse impact parameter d0 and
diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/TrkVertexFitterUtils/TrackToVertexIPEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/TrkVertexFitterUtils/TrackToVertexIPEstimator.h
index 4a2db55308d9d113a7ffdf2f83db75981a73369a..3dd1fda2cf0f2a3f46b474590673856f95355b5a 100644
--- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/TrkVertexFitterUtils/TrackToVertexIPEstimator.h
+++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/TrkVertexFitterUtils/TrackToVertexIPEstimator.h
@@ -11,6 +11,7 @@
 
 #include "xAODTracking/TrackParticleFwd.h"
 #include "xAODTracking/VertexFwd.h"
+#include "CLHEP/Vector/ThreeVector.h"
 
 namespace Trk
 {
diff --git a/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtx.cxx b/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtx.cxx
index dfe3a608296e6101a92d8bbf40a3834eae23abb1..1c1d7d96c617f9ea902c85c04713a115ff76f2f2 100755
--- a/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtx.cxx
+++ b/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtx.cxx
@@ -24,6 +24,8 @@
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODBase/IParticle.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 //** ----------------------------------------------------------------------------------------------------------------- **//
 
 
@@ -45,8 +47,8 @@ TrigT2HistoPrmVtx::TrigT2HistoPrmVtx(const std::string& name, ISvcLocator* pSvcL
   declareProperty ("EFTrkSel_BLayer",    m_c->m_efTrkSelBLayer     = 1);
   declareProperty ("EFTrkSel_PixHits",   m_c->m_efTrkSelPixHits    = 2);
   declareProperty ("EFTrkSel_SiHits",    m_c->m_efTrkSelSiHits     = 7);
-  declareProperty ("EFTrkSel_D0",        m_c->m_efTrkSelD0         = 1*CLHEP::mm);
-  declareProperty ("EFTrkSel_Pt",        m_c->m_efTrkSelPt         = 1*CLHEP::GeV);
+  declareProperty ("EFTrkSel_D0",        m_c->m_efTrkSelD0         = 1*Gaudi::Units::mm);
+  declareProperty ("EFTrkSel_Pt",        m_c->m_efTrkSelPt         = 1*Gaudi::Units::GeV);
 
   declareMonitoredVariable("PrmVtx",          m_c->m_zPrmVtx[0]          = -1);
   declareMonitoredVariable("PrmVtxSigmaAll",  m_c->m_zPrmVtxSigmaAll[0]  = -1);
diff --git a/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtxAllTE.cxx b/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtxAllTE.cxx
index ce575b96019e8d4edf5a1ced29f0cf6a4d6c08cb..1550ea5dd32528c46c62c2d9200bb02686c4ddc6 100755
--- a/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtxAllTE.cxx
+++ b/Trigger/TrigAlgorithms/TrigT2HistoPrmVtx/src/TrigT2HistoPrmVtxAllTE.cxx
@@ -26,7 +26,7 @@
 #include "xAODBase/IParticle.h"
 
 #include "BeamSpotConditionsData/BeamSpotData.h"
-
+#include "GaudiKernel/SystemOfUnits.h"
 
 
 //** ----------------------------------------------------------------------------------------------------------------- **//
@@ -50,8 +50,8 @@ TrigT2HistoPrmVtxAllTE::TrigT2HistoPrmVtxAllTE(const std::string& name, ISvcLoca
   declareProperty ("EFTrkSel_BLayer",    m_c->m_efTrkSelBLayer     = 1);
   declareProperty ("EFTrkSel_PixHits",   m_c->m_efTrkSelPixHits    = 2);
   declareProperty ("EFTrkSel_SiHits",    m_c->m_efTrkSelSiHits     = 7);
-  declareProperty ("EFTrkSel_D0",        m_c->m_efTrkSelD0         = 1*CLHEP::mm);
-  declareProperty ("EFTrkSel_Pt",        m_c->m_efTrkSelPt         = 1*CLHEP::GeV);
+  declareProperty ("EFTrkSel_D0",        m_c->m_efTrkSelD0         = 1*Gaudi::Units::mm);
+  declareProperty ("EFTrkSel_Pt",        m_c->m_efTrkSelPt         = 1*Gaudi::Units::GeV);
 
   declareMonitoredVariable("PrmVtx",          m_c->m_zPrmVtx[0]          = -1);
   declareMonitoredVariable("PrmVtxSigmaAll",  m_c->m_zPrmVtxSigmaAll[0]  = -1);
diff --git a/Trigger/TrigAlgorithms/TrigmuComb/TrigmuComb/muCombMT.h b/Trigger/TrigAlgorithms/TrigmuComb/TrigmuComb/muCombMT.h
index 1cb386fbdf8c1dffc1cac424980fad8e374e122b..395cc97bfb84373eb55ecb83dc30f3023c7eb84b 100644
--- a/Trigger/TrigAlgorithms/TrigmuComb/TrigmuComb/muCombMT.h
+++ b/Trigger/TrigAlgorithms/TrigmuComb/TrigmuComb/muCombMT.h
@@ -42,6 +42,7 @@
 //#include "TrigT1Interfaces/RecMuonRoI.h"
 
 #include "AthenaMonitoring/GenericMonitoringTool.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 /** Main LVL2 Algorithm. Sided by a xAOD::L2StandaloneMuon, match the muon spectrometer track with an ID track, and produces a xAOD::L2CombinedMuon. */
 class muCombMT : public AthAlgorithm
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx
index 56aee1710fc14567a21bb0b1a0bd54025580e6da..0b904b37334b2a8ab59de539bc3f3bb708db3b77 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx
@@ -35,7 +35,7 @@
 // additions of xAOD objects
 #include "TrigBphysHelperUtilsTool.h"
 #include "xAODTrigBphys/TrigBphysContainer.h"
-
+#include "CLHEP/Units/SystemOfUnits.h"
 
 class ISvcLocator;
 
diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigEFCaloHypoNoise.cxx b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigEFCaloHypoNoise.cxx
index ac0836911b1fba2aaf4b3ed0006757e1f19e2ddb..f68f2fbb6de96fdcea011cbd0860fa90da0723fe 100755
--- a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigEFCaloHypoNoise.cxx
+++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigEFCaloHypoNoise.cxx
@@ -32,6 +32,8 @@
 #include "hltinterface/IInfoRegister.h"
 #include "hltinterface/ContainerFactory.h"
 
+#include "CLHEP/Units/SystemOfUnits.h"
+
 class ISvcLocator;
 
 /////////////////////////////////////////////////////////////////////
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEFMtAllTE.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEFMtAllTE.cxx
index a6f260a707712c2bfcd4dcc06470a08025093cdf..4e680975f39167283de908749b53ddeaa54b1e69 100755
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEFMtAllTE.cxx
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEFMtAllTE.cxx
@@ -17,6 +17,8 @@
 #include "TrigMissingEtEvent/TrigMissingET.h"
 #include "xAODEgamma/ElectronContainer.h"
 #include "xAODTrigger/TrigPassBits.h"
+#include "CLHEP/Units/SystemOfUnits.h"
+
 using namespace std;
 
 struct DescendingEt:std::binary_function<const xAOD::Electron*,
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFex.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFex.cxx
index fc43bb151458efa943fd64a2cca32b3ecf73eacd..bedcb8853bcf71c1f4fc7a33c0070a6f296942ea 100755
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFex.cxx
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFex.cxx
@@ -24,6 +24,8 @@
 #include "TrkCaloExtension/CaloExtensionHelpers.h" 
 #include "TrigEgammaHypo/TrigL2ElectronFex.h"
 #include "xAODTrigCalo/TrigEMClusterContainer.h"
+#include "CLHEP/Units/SystemOfUnits.h"
+
 class ISvcLocator;
 
 template <class SRC>
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.h b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.h
index 782dc0f7177c6247d8b12c76ac38e24f0d91a91f..4ccda710657776ecd0c119e1239e0fd5ca874fdf 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.h
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.h
@@ -46,6 +46,8 @@
 #include "RecoToolInterfaces/IParticleCaloExtensionTool.h" 
 
 #include "AthenaMonitoring/GenericMonitoringTool.h"
+#include "CLHEP/Units/SystemOfUnits.h"
+
 //namespace Trk
 //{ class IParticleCaloExtensionTool; } 
 
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronHypo.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronHypo.cxx
index 718cb79fa4547080873cad6f8472fcd7ea853bf1..06cfc09b95fa7723f7cab0080c21ed86f59a5c3e 100755
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronHypo.cxx
@@ -23,6 +23,7 @@
 
 #include "TrigEgammaHypo/TrigL2ElectronHypo.h"
 #include "xAODTrigger/TrigPassBits.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 
 class ISvcLocator;
 
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
index ef0afeef58e6f7a00480948b5d73e390ec9d9c9d..6a6e20258142f40d093fb01555663382ab003faf 100755
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigEFDPhiMetJetAllTE.cxx
@@ -19,6 +19,7 @@
 #include "xAODTrigger/TrigPassBits.h"
 #include <math.h>
 
+#include "GaudiKernel/SystemOfUnits.h"
 
 TrigEFDPhiMetJetAllTE::TrigEFDPhiMetJetAllTE(const std::string & name, ISvcLocator* pSvcLocator)
  : HLT::AllTEAlgo(name, pSvcLocator)
@@ -27,7 +28,7 @@ TrigEFDPhiMetJetAllTE::TrigEFDPhiMetJetAllTE(const std::string & name, ISvcLocat
 {
   declareProperty("MinDPhiCut",   m_MinDPhiCut  = 0.3    );
   declareProperty("MaxDPhiJets",  m_MaxDPhiJets = 3      ); 
-  declareProperty("MinJetEt",     m_MinJetEt    = 20*CLHEP::GeV  ); 
+  declareProperty("MinJetEt",     m_MinJetEt    = 20*Gaudi::Units::GeV  ); 
   declareProperty("MinJetEta",    m_MinJetEta   = 0   );   
   declareProperty("MaxJetEta",    m_MaxJetEta   = 3.2 ); 
   
diff --git a/Trigger/TrigHypothesis/TrigLongLivedParticlesHypo/src/TrigCaloRatioHypo.cxx b/Trigger/TrigHypothesis/TrigLongLivedParticlesHypo/src/TrigCaloRatioHypo.cxx
index 8819bd6482cfffbd116425dd48afe1c53edda888..7dd83479ac83df23f61a11af0d2d93391e4d5ea8 100755
--- a/Trigger/TrigHypothesis/TrigLongLivedParticlesHypo/src/TrigCaloRatioHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigLongLivedParticlesHypo/src/TrigCaloRatioHypo.cxx
@@ -23,7 +23,7 @@
 
 #include "CxxUtils/fpcompare.h"
 
-
+#include "CLHEP/Units/SystemOfUnits.h"
 
 //** ----------------------------------------------------------------------------------------------------------------- **//
 
diff --git a/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFCombinerHypoTool.h b/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFCombinerHypoTool.h
index e45d82593377d1f668da9e36595bf8a898f9eb14..a4b260f4df51f06009045c5902a581f12a5f2ef4 100644
--- a/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFCombinerHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFCombinerHypoTool.h
@@ -11,6 +11,7 @@
 #include "AthenaMonitoring/GenericMonitoringTool.h"
 #include "TrigSteeringEvent/TrigRoiDescriptor.h" 
 #include "xAODMuon/MuonContainer.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 class StoreGateSvc;
 class TriggerElement;
 class TrigMuonEFCombinerHypoTool: public ::AthAlgTool {
diff --git a/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFMSonlyHypoTool.h b/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFMSonlyHypoTool.h
index 872d49ff88403490c662f11e1a5fa64bce5949a2..c7fa09cb3f6c4038b5694ce0b92a8b847cf976e8 100644
--- a/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFMSonlyHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigMuonHypo/TrigMuonHypo/TrigMuonEFMSonlyHypoTool.h
@@ -11,6 +11,7 @@
 #include "AthenaMonitoring/GenericMonitoringTool.h"
 #include "TrigSteeringEvent/TrigRoiDescriptor.h" 
 #include "xAODMuon/MuonContainer.h"
+#include "CLHEP/Units/SystemOfUnits.h"
 class StoreGateSvc;
 class TriggerElement;
 class TrigMuonEFMSonlyHypoTool: public ::AthAlgTool {
diff --git a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx
index 758bfd2fe9c8fed48a343d76493971c54896c612..0beea014e786c2a02b1064f4849df5d36467a12e 100755
--- a/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx
+++ b/Trigger/TrigMonitoring/TrigJetMonitoring/src/HLTJetMonTool.cxx
@@ -12,6 +12,8 @@
 #include "TrigDecisionTool/TrigDecisionTool.h"
 #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h"
 
+#include "GaudiKernel/SystemOfUnits.h"
+
 //#include "TrigCaloEvent/TrigT2JetContainer.h"
 //#include "JetEvent/JetCollection.h"
 
@@ -1437,7 +1439,7 @@ StatusCode HLTJetMonTool::fillBasicHists() {
     xAOD::JetRoIContainer::const_iterator it_e_L1 = m_L1JetRoIC->end();
     for ( ; it_L1 != it_e_L1; it_L1++) {
       L1Roi_num++;
-      double et = ( (*it_L1)->et4x4())/CLHEP::GeV;
+      double et = ( (*it_L1)->et4x4())/Gaudi::Units::GeV;
       if(et < 1.e-3) et = 0.;
       double eta = (*it_L1)->eta();
       double ene = et * cosh(eta);
@@ -1531,9 +1533,9 @@ StatusCode HLTJetMonTool::fillBasicHists() {
         // for basic hists, don't cut eta/pt
         //come back to this - LS//if(m_doselOFBasicHists) if(!selectJet(jet)) continue;
 	
-        double e = (thisjet->e())/CLHEP::GeV;
+        double e = (thisjet->e())/Gaudi::Units::GeV;
         double et = 0., epsilon = 1.e-3;
-        if(thisjet->pt() > epsilon) et = (thisjet->pt())/CLHEP::GeV;
+        if(thisjet->pt() > epsilon) et = (thisjet->pt())/Gaudi::Units::GeV;
         if(et < epsilon) et = 0;
         double eta = thisjet->eta();
         double phi = thisjet->phi();
@@ -1622,9 +1624,9 @@ StatusCode HLTJetMonTool::fillBasicHists() {
             // for basic hists, don't cut eta/pt
             //come back to this - LS//if(m_doselOFBasicHists) if(!selectJet(jet)) continue;
 
-            double e = (thisjet->e())/CLHEP::GeV;
+            double e = (thisjet->e())/Gaudi::Units::GeV;
             double et = 0., epsilon = 1.e-3;
-            if(thisjet->pt() > epsilon) et = (thisjet->pt())/CLHEP::GeV;
+            if(thisjet->pt() > epsilon) et = (thisjet->pt())/Gaudi::Units::GeV;
             if(et < epsilon) et = 0;
             ATH_MSG_DEBUG( lvl << " thisjet->pt() =  " << et );
             double  eta     = thisjet->eta();
@@ -1639,7 +1641,7 @@ StatusCode HLTJetMonTool::fillBasicHists() {
             ATH_MSG_DEBUG( lvl << " et =  " << et <<  "\teta = " << eta << "\temfrac = " << emfrac <<"\thecfrac");
 
 
-	    v_thisjet.SetPtEtaPhiE(thisjet->pt()/CLHEP::GeV,eta,phi,e);
+	    v_thisjet.SetPtEtaPhiE(thisjet->pt()/Gaudi::Units::GeV,eta,phi,e);
 	    m_v_OFjet.push_back(v_thisjet);
 	    m_n_index++;
 
@@ -1721,10 +1723,10 @@ void HLTJetMonTool::fillBasicHLTforChain( const std::string& theChain, double th
 
        for (auto j : *jcont.cptr()) {
 
-	 double e = (j->e())/CLHEP::GeV;
+	 double e = (j->e())/Gaudi::Units::GeV;
 	 double et = 0., epsilon = 1.e-3;
 
-	 if(j->pt() > epsilon) et = (j->pt())/CLHEP::GeV;
+	 if(j->pt() > epsilon) et = (j->pt())/Gaudi::Units::GeV;
 
 	 ATH_MSG_DEBUG("jet et = "<<et);
 
@@ -1741,7 +1743,7 @@ void HLTJetMonTool::fillBasicHLTforChain( const std::string& theChain, double th
 	      hecfrac = j->getAttribute<float>(xAOD::JetAttribute::HECFrac); 
 	    }
 
-	   v_thisjet.SetPtEtaPhiE(j->pt()/CLHEP::GeV,j->eta(), j->phi(),j->e()/CLHEP::GeV);
+	   v_thisjet.SetPtEtaPhiE(j->pt()/Gaudi::Units::GeV,j->eta(), j->phi(),j->e()/Gaudi::Units::GeV);
 	   m_v_HLTjet.push_back(v_thisjet);
            m_n_index++;
 		   
@@ -1824,7 +1826,7 @@ void HLTJetMonTool::fillBasicL1forChain(const std::string& theChain, double thrE
 	
         for (; it_L1 != it_e_L1; ++it_L1) {
 
-          double et = ((*it_L1)->et4x4())/CLHEP::GeV;
+          double et = ((*it_L1)->et4x4())/Gaudi::Units::GeV;
 	  if(et < 1.e-3) et = 0;
           double eta = (*it_L1)->eta();
           double phi = (*it_L1)->phi();
@@ -1834,8 +1836,8 @@ void HLTJetMonTool::fillBasicL1forChain(const std::string& theChain, double thrE
           if(msgLvl(MSG::DEBUG)) {
             const Jet_ROI::thresholds_type thrVec = (*it_L1)->thrNames();
             const Jet_ROI::thr_value_type thrVal = (*it_L1)->thrValues();
-            double et6 = ((*it_L1)->et6x6())/CLHEP::GeV;
-            double et8 = ((*it_L1)->et8x8())/CLHEP::GeV;
+            double et6 = ((*it_L1)->et6x6())/Gaudi::Units::GeV;
+            double et8 = ((*it_L1)->et8x8())/Gaudi::Units::GeV;
             std::ostringstream thrv; 
             unsigned int kk = 0;
             for(Jet_ROI::thresholds_type::const_iterator l1i = thrVec.begin(); l1i != thrVec.end(); ++l1i,kk++ ) {
@@ -2300,7 +2302,7 @@ bool HLTJetMonTool::selectJet(const Jet *jet) {
   // pt / eta
   // don't cut on eta here since we have FJ signatures to contend with:
   // if(m_reqEtaCut)       if (fabs(jet->eta()) >= m_EtaCut )              return false;
-  if(m_reqMinPtCut)     if (jet->pt()/CLHEP::GeV <= m_MinPtCut )               return false;
+  if(m_reqMinPtCut)     if (jet->pt()/Gaudi::Units::GeV <= m_MinPtCut )               return false;
 
 
   /* jet quality
@@ -2456,7 +2458,7 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 
 	  //passL1thr = (jet->pt()/CLHEP::GeV > thrGeVItem);
 	  
-	  ATH_MSG_DEBUG(" L1 Chain= "<<itemName<<" OF Jet pt= "<<jet->pt()/CLHEP::GeV<<" OF Jet eta= "<<jet->eta()<<" Threshold= "<<thrGeVItem<<" TDT= "<<getTDT()->isPassed(itemName)<<" Eta Low "<<EtaLowThres<<" Eta High "<<EtaHighThres);
+	  ATH_MSG_DEBUG(" L1 Chain= "<<itemName<<" OF Jet pt= "<<jet->pt()/Gaudi::Units::GeV<<" OF Jet eta= "<<jet->eta()<<" Threshold= "<<thrGeVItem<<" TDT= "<<getTDT()->isPassed(itemName)<<" Eta Low "<<EtaLowThres<<" Eta High "<<EtaHighThres);
 	  
 	  // if L1 eff required
 	  if(m_doL1TrigEff) {
@@ -2464,11 +2466,11 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 	      
 	      ATH_MSG_DEBUG(" OF Jet passed requirements->Filling the denominator");
 	      
-	      if((h = hist(Form("%s_Eff_vs_pt_den",itemName.c_str()))))          h->Fill(jet->pt()/CLHEP::GeV);
+	      if((h = hist(Form("%s_Eff_vs_pt_den",itemName.c_str()))))          h->Fill(jet->pt()/Gaudi::Units::GeV);
 	      if((h = hist(Form("%s_Eff_vs_eta_den",itemName.c_str()))))         h->Fill(jet->eta());
 	      if((h = hist(Form("%s_Eff_vs_phi_den",itemName.c_str()))))         h->Fill(jet->phi());
-	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_den",itemName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->eta());
-	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_den",itemName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->phi());
+	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_den",itemName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->eta());
+	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_den",itemName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->phi());
 	      
 	    }  
 	  } //if trigeff
@@ -2496,14 +2498,14 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 		  
 		  ATH_MSG_DEBUG(" OF Jet passed requirements->Filling the numerator");	 	
 		  
-		  if((h = hist(Form("%s_Eff_vs_pt_num",itemName.c_str()))))          h->Fill(jet->pt()/CLHEP::GeV); //fill numerator histogram		 
+		  if((h = hist(Form("%s_Eff_vs_pt_num",itemName.c_str()))))          h->Fill(jet->pt()/Gaudi::Units::GeV); //fill numerator histogram		 
 		  if((h = hist(Form("%s_Eff_vs_eta_num",itemName.c_str()))))         h->Fill(jet->eta());
 		  if((h = hist(Form("%s_Eff_vs_phi_num",itemName.c_str()))))         h->Fill(jet->phi());
-		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_num",itemName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->eta());
-		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_num",itemName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->phi());
-		  if((h2 = hist2(Form("%s_pt_vs_OF_pt",itemName.c_str()))))          h2->Fill(jet->pt()/CLHEP::GeV,v_trigjet_tmp.Pt()/CLHEP::GeV);
+		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_num",itemName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->eta());
+		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_num",itemName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->phi());
+		  if((h2 = hist2(Form("%s_pt_vs_OF_pt",itemName.c_str()))))          h2->Fill(jet->pt()/Gaudi::Units::GeV,v_trigjet_tmp.Pt()/Gaudi::Units::GeV);
 
-		  if((p = profile(Form("%s_EffPt",itemName.c_str()))))  p->Fill(jet->pt()/CLHEP::GeV,1.0,1.0); //fill profile with 1
+		  if((p = profile(Form("%s_EffPt",itemName.c_str()))))  p->Fill(jet->pt()/Gaudi::Units::GeV,1.0,1.0); //fill profile with 1
 		  if((p = profile(Form("%s_EffEta",itemName.c_str())))) p->Fill(jet->eta(),1.0,1.0);
 		  if((p = profile(Form("%s_EffPhi",itemName.c_str())))) p->Fill(jet->phi(),1.0,1.0);
 		  
@@ -2512,7 +2514,7 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 		  
 		} if (!getTDT()->isPassed(itemName)){
 		  
-		  if((p = profile(Form("%s_EffPt",itemName.c_str()))))  p->Fill(jet->pt()/CLHEP::GeV,0.0,1.0); //fill profile with 0
+		  if((p = profile(Form("%s_EffPt",itemName.c_str()))))  p->Fill(jet->pt()/Gaudi::Units::GeV,0.0,1.0); //fill profile with 0
 		  if((p = profile(Form("%s_EffEta",itemName.c_str())))) p->Fill(jet->eta(),0.0,1.0);
 		  if((p = profile(Form("%s_EffPhi",itemName.c_str())))) p->Fill(jet->phi(),0.0,1.0);
 
@@ -2538,7 +2540,7 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 	  if(m_doL1TrigEff) {
 	    if(getTDT()->isPassed(itemName) /*&& passHLTthr*/) {
 	      
-	      if((h = hist(Form("%s_unmatched_pt",itemName.c_str())))) h->Fill(v_trigjet_tmp.Pt()/CLHEP::GeV);   
+	      if((h = hist(Form("%s_unmatched_pt",itemName.c_str())))) h->Fill(v_trigjet_tmp.Pt()/Gaudi::Units::GeV);   
 	          
 	    }//TDT
 	  } // doTrigEff
@@ -2566,11 +2568,11 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
           if(m_doHLTTrigEff) {
 	    if (isLeadingJet(jet,jetcoll,EtaLowThres,EtaHighThres,NJet)){ //OF nth leading jet in the same eta region of HLTJet	    
 	    
-	      if((h = hist(Form("%s_Eff_vs_pt_den",chainName.c_str()))))          h->Fill(jet->pt()/CLHEP::GeV);
+	      if((h = hist(Form("%s_Eff_vs_pt_den",chainName.c_str()))))          h->Fill(jet->pt()/Gaudi::Units::GeV);
 	      if((h = hist(Form("%s_Eff_vs_eta_den",chainName.c_str()))))         h->Fill(jet->eta());
 	      if((h = hist(Form("%s_Eff_vs_phi_den",chainName.c_str()))))         h->Fill(jet->phi());
-	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_den",chainName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->eta());
-	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_den",chainName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->phi());
+	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_den",chainName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->eta());
+	      if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_den",chainName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->phi());
 	    
 	    } //isLeading
           }//doTrigEff
@@ -2595,14 +2597,14 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 	      if (isLeadingJet(jet,jetcoll,EtaLowThres,EtaHighThres,NJet)){ //OF leading jet in the same eta region of HLTJet	  
 		if(getTDT()->isPassed(Form("HLT_%s",chainName.c_str()))) {
 		  
-		  if((h = hist(Form("%s_Eff_vs_pt_num",chainName.c_str()))))          h->Fill(jet->pt()/CLHEP::GeV);
+		  if((h = hist(Form("%s_Eff_vs_pt_num",chainName.c_str()))))          h->Fill(jet->pt()/Gaudi::Units::GeV);
 		  if((h = hist(Form("%s_Eff_vs_eta_num",chainName.c_str()))))         h->Fill(jet->eta());
 		  if((h = hist(Form("%s_Eff_vs_phi_num",chainName.c_str()))))         h->Fill(jet->phi());
-		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_num",chainName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->eta());
-		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_num",chainName.c_str())))) h2->Fill(jet->pt()/CLHEP::GeV,jet->phi());
-		  if((h2 = hist2(Form("%s_pt_vs_OF_pt",chainName.c_str()))))          h2->Fill(jet->pt()/CLHEP::GeV,v_trigjet_tmp.Pt()/CLHEP::GeV);
+		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_eta_num",chainName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->eta());
+		  if((h2 = hist2(Form("%s_Eff_vs_pt_vs_phi_num",chainName.c_str())))) h2->Fill(jet->pt()/Gaudi::Units::GeV,jet->phi());
+		  if((h2 = hist2(Form("%s_pt_vs_OF_pt",chainName.c_str()))))          h2->Fill(jet->pt()/Gaudi::Units::GeV,v_trigjet_tmp.Pt()/Gaudi::Units::GeV);
 
-		  if((p = profile(Form("%s_EffPt",chainName.c_str()))))  p->Fill(jet->pt()/CLHEP::GeV,1.0,1.0); //fill profile with 1
+		  if((p = profile(Form("%s_EffPt",chainName.c_str()))))  p->Fill(jet->pt()/Gaudi::Units::GeV,1.0,1.0); //fill profile with 1
 		  if((p = profile(Form("%s_EffEta",chainName.c_str())))) p->Fill(jet->eta(),1.0,1.0);
 		  if((p = profile(Form("%s_EffPhi",chainName.c_str())))) p->Fill(jet->phi(),1.0,1.0);
 		  
@@ -2610,7 +2612,7 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 		  if((h = hist(Form("%s_Resolution_pt",chainName.c_str())))) h->Fill(res);
 		  
 		} if (! getTDT()->isPassed(Form("HLT_%s",chainName.c_str()))){
-		  if((p = profile(Form("%s_EffPt",chainName.c_str()))))  p->Fill(jet->pt()/CLHEP::GeV,0.0,1.0); //fill profile with 0
+		  if((p = profile(Form("%s_EffPt",chainName.c_str()))))  p->Fill(jet->pt()/Gaudi::Units::GeV,0.0,1.0); //fill profile with 0
 		  if((p = profile(Form("%s_EffEta",chainName.c_str())))) p->Fill(jet->eta(),0.0,1.0);
 		  if((p = profile(Form("%s_EffPhi",chainName.c_str())))) p->Fill(jet->phi(),0.0,1.0);
 		}	 
@@ -2635,7 +2637,7 @@ StatusCode HLTJetMonTool::fillOfflineHists() {
 	  if(m_doHLTTrigEff) {
 	    if(getTDT()->isPassed(Form("HLT_%s",chainName.c_str())) /*&& passHLTthr*/) {
 	      	      
-	      if((h = hist(Form("%s_unmatched_pt",chainName.c_str())))) h->Fill(v_trigjet_tmp.Pt()/CLHEP::GeV);  
+	      if((h = hist(Form("%s_unmatched_pt",chainName.c_str())))) h->Fill(v_trigjet_tmp.Pt()/Gaudi::Units::GeV);  
 	      
 	    }//TDT
 	  } // doTrigEff
@@ -2837,7 +2839,7 @@ TLorentzVector HLTJetMonTool::DeltaRMatching(const xAOD::Jet *jet, const std::st
       for (auto j : *jcont.cptr()) {
 		
 	double et = 0., epsilon = 1.e-3;
-	if(j->pt() > epsilon) et = (j->pt())/CLHEP::GeV;
+	if(j->pt() > epsilon) et = (j->pt())/Gaudi::Units::GeV;
 	if(et < epsilon) et = 0;
 
 	TLorentzVector v_HLT;
diff --git a/graphics/GeometryJiveXML/CMakeLists.txt b/graphics/GeometryJiveXML/CMakeLists.txt
index 50cfbb141f65511bf993f18a53bb5178bc2b0dd5..8e57bf2cbdd83ab28dc9e4ee69a5bafb2d371538 100644
--- a/graphics/GeometryJiveXML/CMakeLists.txt
+++ b/graphics/GeometryJiveXML/CMakeLists.txt
@@ -12,7 +12,6 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           Calorimeter/CaloDetDescr
                           Control/StoreGate
-                          DetectorDescription/GeoModel/GeoModelKernel
                           GaudiKernel
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
@@ -29,7 +28,7 @@ atlas_add_component( GeometryJiveXML
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps JiveXMLLib CaloDetDescrLib StoreGateLib SGtests GeoModelKernel GaudiKernel InDetIdentifier InDetReadoutGeometry LArReadoutGeometry MuonReadoutGeometry MuonIdHelpersLib TileDetDescr )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps JiveXMLLib CaloDetDescrLib StoreGateLib SGtests GaudiKernel InDetIdentifier InDetReadoutGeometry LArReadoutGeometry MuonReadoutGeometry MuonIdHelpersLib TileDetDescr )
 
 # Install files from the package:
 atlas_install_headers( GeometryJiveXML )
diff --git a/graphics/GeometryJiveXML/src/GeometryWriter.cxx b/graphics/GeometryJiveXML/src/GeometryWriter.cxx
index 4efbc3990f431ed934db5f83f4716ec1e3578898..f654f5951a2d4b164990cda7c382d55ea2fa74b5 100755
--- a/graphics/GeometryJiveXML/src/GeometryWriter.cxx
+++ b/graphics/GeometryJiveXML/src/GeometryWriter.cxx
@@ -16,9 +16,9 @@
 #include "TileDetDescr/TileDetDescrManager.h"
 
 #include "LArReadoutGeometry/LArDetectorManager.h"
-#include "GeoModelKernel/GeoPVConstLink.h"
-#include "GeoModelKernel/GeoTube.h"
-#include "GeoModelKernel/GeoTrd.h"
+// #include "GeoModelKernel/GeoPVConstLink.h"
+// #include "GeoModelKernel/GeoTube.h"
+// #include "GeoModelKernel/GeoTrd.h"
 
 #include "InDetReadoutGeometry/SiDetectorManager.h"
 #include "InDetReadoutGeometry/SiDetectorElement.h"
diff --git a/graphics/VP1/VP1Systems/VP12DGeometrySystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP12DGeometrySystems/CMakeLists.txt
index 2dbf43805736dfb40915e0c5ee0811480ed9845d..d8d05a5d0d5a48de297e51fa96f3e7e1fc32c93c 100644
--- a/graphics/VP1/VP1Systems/VP12DGeometrySystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP12DGeometrySystems/CMakeLists.txt
@@ -12,7 +12,6 @@ atlas_depends_on_subdirs( PUBLIC
                           graphics/VP1/VP1Base
                           PRIVATE
                           Calorimeter/CaloDetDescr
-                          DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/IdDictDetDescr
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
@@ -23,6 +22,7 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Eigen )
+find_package( GeoModel )
 
 # Component(s) in the package:
 atlas_add_library( VP12DGeometrySystems
@@ -30,5 +30,5 @@ atlas_add_library( VP12DGeometrySystems
                    PUBLIC_HEADERS VP12DGeometrySystems
                    INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
                    LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives VP1Base StoreGateLib SGtests CaloDetDescrLib MuonIdHelpersLib
-                   PRIVATE_LINK_LIBRARIES GeoModelKernel IdDictDetDescr InDetIdentifier InDetReadoutGeometry LArReadoutGeometry MuonReadoutGeometry TileDetDescr )
+                   PRIVATE_LINK_LIBRARIES ${GEOMODEL_LIBRARIES} IdDictDetDescr InDetIdentifier InDetReadoutGeometry LArReadoutGeometry MuonReadoutGeometry TileDetDescr )
 
diff --git a/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/StoreGateGeometryReader.h b/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/StoreGateGeometryReader.h
index cfdabd351fd3e94675f1a71853707a1e23e549d1..0d89032b5e011bee09c988ce7475d81bbaaa6540 100644
--- a/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/StoreGateGeometryReader.h
+++ b/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/StoreGateGeometryReader.h
@@ -169,8 +169,6 @@ class StoreGateGeometryReader
   bool readMuonGeometry();
 
  private:
-  Detector *newDetector;
-
   /** Pixel detector manager. */
   const InDetDD::SiDetectorManager* m_pixel_manager;
 
diff --git a/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/VP12DGeometrySystem.h b/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/VP12DGeometrySystem.h
index fb6d05a6fface18847f497426af94094c52dd5f7..5dcd1d04682c62a6db7e4c8ade253720ce17bec4 100755
--- a/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/VP12DGeometrySystem.h
+++ b/graphics/VP1/VP1Systems/VP12DGeometrySystems/VP12DGeometrySystems/VP12DGeometrySystem.h
@@ -33,7 +33,7 @@ public:
   VP12DGeometrySystem & operator= ( const VP12DGeometrySystem & );
 
   class Imp;
-  Imp *d;
+  Imp *m_d;
 
 };
 
diff --git a/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/StoreGateGeometryReader.cxx b/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/StoreGateGeometryReader.cxx
index de5b3c8ea3c4ab8915ab26ac4c015ee4ed6552c1..f0bdaa16d8923959c2ac39a3a270afc33b169265 100644
--- a/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/StoreGateGeometryReader.cxx
+++ b/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/StoreGateGeometryReader.cxx
@@ -10,6 +10,7 @@
 #include "TileDetDescr/TileDetDescrManager.h"
 
 #include "LArReadoutGeometry/LArDetectorManager.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "GeoModelKernel/GeoPVConstLink.h"
 #include "GeoModelKernel/GeoTrd.h"
 
@@ -32,8 +33,7 @@
 
 
 StoreGateGeometryReader::StoreGateGeometryReader()
-  : newDetector(nullptr),
-    m_pixel_manager(nullptr),
+  : m_pixel_manager(nullptr),
     m_silicon_manager(nullptr),
     m_trt_manager(nullptr),
     m_calo_manager(nullptr),
@@ -138,12 +138,11 @@ bool StoreGateGeometryReader::readGeometry()
 bool StoreGateGeometryReader::readPixelGeometry()
 {
   const PixelID* pixelIdHelper = 0;
-  if(m_detStore->retrieve(pixelIdHelper,"PixelID").isFailure() || !pixelIdHelper)
-    return false;
+  if(m_detStore->retrieve(pixelIdHelper,"PixelID").isFailure() || !pixelIdHelper) return false;
 
-    InDetDD::SiDetectorElementCollection::const_iterator it;
+  InDetDD::SiDetectorElementCollection::const_iterator it;
 
-    for (it=m_pixel_manager->getDetectorElementBegin(); it<m_pixel_manager->getDetectorElementEnd(); it++)
+  for (it=m_pixel_manager->getDetectorElementBegin(); it<m_pixel_manager->getDetectorElementEnd(); it++)
       {
 
 	const InDetDD::SiDetectorElement *element = *it;
@@ -168,7 +167,7 @@ bool StoreGateGeometryReader::readPixelGeometry()
 	      }
 	    zMax += 5;
 
-	    newDetector = new Detector;
+	    Detector* newDetector = new Detector;
 
 	    newDetector->type      = Detector::ABarrelSiliconDetector;
 	    newDetector->name      = "Pixel";
@@ -224,7 +223,7 @@ bool StoreGateGeometryReader::readPixelGeometry()
 	    zMin -= 5;
 	    zMax += 5;
 
-	    newDetector = new Detector;
+	    Detector* newDetector = new Detector;
 
 	    newDetector->type      = Detector::AEndcapSiliconDetector;
 	    newDetector->name      = "Pixel";
@@ -308,7 +307,7 @@ bool StoreGateGeometryReader::readSCTGeometry()
 	    }
 	  zMax += 5;
 
-	  newDetector = new Detector;
+	  Detector* newDetector = new Detector;
 
 	  newDetector->type      = Detector::ABarrelSiliconDetector;
 	  newDetector->name      = "Silicon";
@@ -375,7 +374,7 @@ bool StoreGateGeometryReader::readSCTGeometry()
 	  zMin -= 5;
 	  zMax += 5;
 
-	  newDetector = new Detector;
+	  Detector* newDetector = new Detector;
 
 	  newDetector->type      = Detector::AEndcapSiliconDetector;
 	  newDetector->name      = "Silicon";
@@ -459,7 +458,7 @@ bool StoreGateGeometryReader::readTRTGeometry()
 	  double dphiIn = 2.*M_PI / (nphi * trtIdHelper->straw_max(elementIn->identify()));
 	  double dphiOut = 2.*M_PI / (nphi * trtIdHelper->straw_max(elementOut->identify()));
 
-	  newDetector = new Detector;
+	  Detector* newDetector = new Detector;
 
 	  newDetector->type   = Detector::ABarrelTRTDetector;
 	  newDetector->name   = "TRT";
@@ -502,7 +501,7 @@ bool StoreGateGeometryReader::readTRTGeometry()
 	  // floor() instead of round() becuase we are neglecting the space between two modules
 	  int nphi = (int) floor(2.*M_PI / fabs(posOut.phi() - posIn.phi()));
 
-	  newDetector = new Detector;
+	  Detector* newDetector = new Detector;
 
 	  newDetector->type   = Detector::AEndcapTRTDetector;
 	  newDetector->name   = "TRT";
@@ -541,7 +540,7 @@ bool StoreGateGeometryReader::readSolenoidGeometry()
   double rIn = 122.9;
   double rOut = 127.4;
 
-  newDetector = new Detector;
+  Detector* newDetector = new Detector;
 
   newDetector->type       = Detector::ADisc;
   newDetector->name       = "Solenoid";
@@ -607,7 +606,7 @@ bool StoreGateGeometryReader::readTILEGeometry()
 
 	  if (!name.compare(0, 3, "ITC"))
 	    {
-	      newDetector = new Detector;
+	      Detector* newDetector = new Detector;
 
 	      newDetector->type     = Detector::AGapCalorimeter;
 	      newDetector->name     = name;
@@ -644,7 +643,7 @@ bool StoreGateGeometryReader::readTILEGeometry()
 	      int tower = tileIdHelper->tower(descriptor->identify());
 	      Identifier id = tileIdHelper->cell_id(section, side, module, tower, i);
 
-	      newDetector = new Detector;
+	      Detector* newDetector = new Detector;
 
 	      newDetector->type     = Detector::ABarrelCalorimeter;
 	      newDetector->name     = name;
@@ -694,11 +693,8 @@ bool StoreGateGeometryReader::readMBTSGeometry()
 	 {
 	   int sampling=0,numPhi=0;
 	   std::string stringOfNames="";
-	   HepGeom::Scale3D     scale;
-	   HepGeom::Rotate3D    rotate;
-	   HepGeom::Translate3D translate;
-	   (child->getX()).getDecomposition(scale, rotate, translate);
-	   double zlocation = translate.dz();
+	   GeoTrf::Vector3D translate = (child->getX()).translation();
+	   double zlocation = translate.z();
     	  if(zlocation<0)
 	    zlocation=-zlocation;
     	  for (unsigned int cc=0; cc< child->getNChildVols();cc++)
@@ -715,17 +711,16 @@ bool StoreGateGeometryReader::readMBTSGeometry()
 		  if(stringOfNames.find(currentName,0) == std::string::npos)
 		    {
 		      stringOfNames+=" " + currentName;
-		      HepGeom::Translate3D translateToChild;
-		      (child->getXToChildVol(cc)).getDecomposition(scale, rotate, translateToChild);
+		      GeoTrf::Vector3D translateToChild = (child->getXToChildVol(cc)).translation();
 		      const GeoTrd* theTrd = dynamic_cast<const GeoTrd*> ((childschild->getLogVol())->getShape());
-		      double rho=pow(translateToChild.dx(),2.0) + pow(translateToChild.dy(),2.0);
+		      double rho=pow(translateToChild.x(),2.0) + pow(translateToChild.y(),2.0);
 		      rho=pow(rho,0.5);
 		      double RMin=rho-theTrd->getZHalfLength();
 		      double RMax=rho+theTrd->getZHalfLength();
-		      double zmovement=translateToChild.dz();
+		      double zmovement=translateToChild.z();
 		      double zthickness=theTrd->getXHalfLength1();
 
-		      newDetector = new Detector;
+		      Detector* newDetector = new Detector;
 
 		      newDetector->type = Detector::AEndcapCryostat;
 		      newDetector->name = "Minimum Bias Trigger Scintillators";
@@ -764,6 +759,7 @@ bool StoreGateGeometryReader::readLArGeometry()
   QColor lArColor;
   const CaloCell_ID *idHelper = m_calo_manager->getCaloCell_ID();
   CaloDetDescrManager::calo_element_const_iterator it;
+  Detector* newDetector{nullptr};
 
   // This code is not very efficient in terms of speed. Since it will only be used
   // when the geometry has changed, the code is made to be easily readable instead.
@@ -1062,7 +1058,8 @@ bool StoreGateGeometryReader::readMuonGeometry()
   // this is not MDT specific and any of the other IdHelpers would have worked as well.
   const MdtIdHelper *mdtIdHelper = m_muon_manager->mdtIdHelper();
   int snMax = mdtIdHelper->nStationNames()-1;
-
+  Detector* newDetector{nullptr};
+  
   // Loop over all station types.
   for (int sn=0; sn<=snMax; sn++)
     {
diff --git a/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/VP12DGeometrySystem.cxx b/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/VP12DGeometrySystem.cxx
index 0d03a2fc0e3f09cb7a7146eb3a8c9cdf1d14bc63..c876ae01818555b669e440eab11ab5ea7206db7e 100755
--- a/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/VP12DGeometrySystem.cxx
+++ b/graphics/VP1/VP1Systems/VP12DGeometrySystems/src/VP12DGeometrySystem.cxx
@@ -105,15 +105,15 @@ VP12DGeometrySystem::VP12DGeometrySystem()
   : IVP12DDetViewsSystem("2DGeo",
 		       "This is an illustration of an extremely basic 2D system.\n "
 		       "It is a placeholder for the future 2D geometry system.",
-			 "Thomas.Kittelmann@cern.ch"), d(new Imp)
+			 "Thomas.Kittelmann@cern.ch"), m_d(new Imp)
 {
-  d->theclass=this;
+  m_d->theclass=this;
 }
 
 
 VP12DGeometrySystem::~VP12DGeometrySystem()
 {
-  delete d; d = 0;
+  delete m_d; m_d = nullptr;
 }
 
 //Initializes system members, loads geometry
@@ -122,10 +122,10 @@ void VP12DGeometrySystem::systemcreate(StoreGateSvc *detStore)
   if (detStore)
     {
       //set detector store pointer of geometry reader
-      d->mGeoReader.setDetStore(detStore);
+      m_d->mGeoReader.setDetStore(detStore);
 
       //read geometry and test for success
-      if (!d->mGeoReader.readGeometry())
+      if (!m_d->mGeoReader.readGeometry())
 	{
 	  //here we had an error somewhere while reading geometry
 	  message("Error parsing DetStore geometry!");
@@ -142,7 +142,7 @@ void VP12DGeometrySystem::systemcreate(StoreGateSvc *detStore)
 
   //print number of detector elements found for sanity check
   std::stringstream outputdata;
-  outputdata << "2D Geometry System finds: " << d->mGeoReader.mDetectors.size() << " elements." << std::endl;
+  outputdata << "2D Geometry System finds: " << m_d->mGeoReader.mDetectors.size() << " elements." << std::endl;
   QString qstrout = outputdata.str().c_str();
   message(qstrout);
 }
@@ -154,10 +154,10 @@ void VP12DGeometrySystem::buildPermanentItemCollections(StoreGateSvc* /*detstore
   //todo: Add all four at once, but only make one visible, depending
   //on a UI radio selector
 
-  d->addYXProjectionToCollection(ic_xy);
+  m_d->addYXProjectionToCollection(ic_xy);
   message("Just wrote X-Y Projection");
 
-  d->addRZProjectionToCollection(ic_rz);
+  m_d->addRZProjectionToCollection(ic_rz);
   message("Just wrote Rho-Z Projection");
 
 //   if (PROJECTION == "FR")
@@ -1526,8 +1526,8 @@ void VP12DGeometrySystem::Imp::processMuonDetector(const Detector& theDetector,
 //   Ui::VP12DGeometryControllerForm ui;
 //   ui.setupUi(theWidget);
 
-//   d->xy_RadioBtn = ui.radio_xy;
-//   d->rz_RadioBtn = ui.radio_rz;
+//   m_d->xy_RadioBtn = ui.radio_xy;
+//   m_d->xrz_RadioBtn = ui.radio_rz;
 
 //   return theWidget;
 // }
diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_CaloCluster.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_CaloCluster.cxx
index 09a13fab27202a70fb69986b4ae6fe7be4997f74..04375ddd61b8e8400376fef1b853d056f0ecf323 100644
--- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_CaloCluster.cxx
+++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleCollHandle_CaloCluster.cxx
@@ -43,7 +43,7 @@
 
 
 #include "PathResolver/PathResolver.h"
-
+#include "GaudiKernel/SystemOfUnits.h"
 
 
 //____________________________________________________________________
@@ -92,8 +92,8 @@ public:
  * DEFINITIONS
  */
 //Fixme: Just some approximate values for now:
-double IParticleCollHandle_CaloCluster::calo_start_r = 1.1*CLHEP::m + 0.05*CLHEP::m;
-double IParticleCollHandle_CaloCluster::calo_start_z = 3.671*CLHEP::m + 0.05*CLHEP::m;
+double IParticleCollHandle_CaloCluster::calo_start_r = 1.1*Gaudi::Units::m + 0.05*Gaudi::Units::m;
+double IParticleCollHandle_CaloCluster::calo_start_z = 3.671*Gaudi::Units::m + 0.05*Gaudi::Units::m;
 double IParticleCollHandle_CaloCluster::calo_crack_eta = fabs(log(tan(0.5*atan(calo_start_r/calo_start_z))));
 
 
@@ -216,7 +216,7 @@ double IParticleCollHandle_CaloCluster::energyToLength(const double&energy) cons
 {
 	VP1Msg::messageDebug("IParticleCollHandle_CaloCluster::energyToLength()");
 
-	return std::max(1*CLHEP::mm, m_d->scale.second*(m_d->scale.first?log(1+fabs(energy)):energy));
+	return std::max(1*Gaudi::Units::mm, m_d->scale.second*(m_d->scale.first?log(1+fabs(energy)):energy));
 }
 
 //____________________________________________________________________
diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx
index a4ebaa97113cb4acfdbede773717fa3c0118d626..0669d0c5d7bbdd434a1ae6b317935843b6d524c1 100644
--- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx
+++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Muon.cxx
@@ -30,6 +30,7 @@
 #include <Inventor/nodes/SoTranslation.h>
 #include <Inventor/nodes/SoRotationXYZ.h>
 
+#include "GaudiKernel/SystemOfUnits.h"
 //AOD
 
 //____________________________________________________________________
@@ -425,7 +426,7 @@ QString IParticleHandle_Muon::qualityString() const{
 
 QString IParticleHandle_Muon::shortInfo() const
 {
-  QString l("|P|="+VP1Msg::str(momentum().mag()/CLHEP::GeV)+" [GeV], " +muonTypeString() + ", "+qualityString()  );
+  QString l("|P|="+VP1Msg::str(momentum().mag()/Gaudi::Units::GeV)+" [GeV], " +muonTypeString() + ", "+qualityString()  );
   
   return l;
 }
diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx
index aa834f27956231544d8637652c71ce9d6754bc55..6226fb3e741a09c1e4d00e197b517bcac68c2720 100644
--- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx
+++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_TrackParticle.cxx
@@ -32,6 +32,7 @@
 
 //Athena
 #include "TrkExInterfaces/IExtrapolationEngine.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 //____________________________________________________________________
 class IParticleHandle_TrackParticle::Imp {
@@ -419,7 +420,7 @@ unsigned IParticleHandle_TrackParticle::getNMuonPhiHoleLayers() const
 
 QString IParticleHandle_TrackParticle::shortInfo() const
 {
-  QString l("|P|="+VP1Msg::str(momentum().mag()/CLHEP::GeV)+" [GeV], ");
+  QString l("|P|="+VP1Msg::str(momentum().mag()/Gaudi::Units::GeV)+" [GeV], ");
   l+= "Pix["+QString::number(getNPixelHits())+"], SCT["+QString::number(getNSCTHits())+"], TRT["+QString::number(getNTRTHits())
    +"], Muon prec. layers/holes ["+QString::number(getNMuonPrecisionLayers())+"/"+QString::number(getNMuonPrecisionHoleLayers())+"]";
   return l;
diff --git a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/CMakeLists.txt
index 77cadf6c74cd729a0df224a17f83307a3d36adc1..b9f8e46c76dbac98a4967a77d5b0f026da78ba73 100644
--- a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/CMakeLists.txt
@@ -11,6 +11,7 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           LArCalorimeter/LArGeoModel/LArHV
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
+			  DetectorDescription/GeoPrimitives
                           graphics/VP1/VP1Utils )
 
 # External dependencies:
diff --git a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
index 54f9fa8cc4afa7b1a83cc7bd30407c8f631ad465..f9010d5760f6a7c449b2a3dd2a03be1da40071c7 100755
--- a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
+++ b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
@@ -56,6 +56,8 @@
 #include "LArHV/HECHVSubgap.h"
 #include "LArHV/LArHVManager.h"
 
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
 #include "VP1Utils/VP1LinAlgUtils.h"
 #include <sstream>
 
@@ -1044,7 +1046,7 @@ void VP1CaloReadoutSystem::createHV() {
 
 	  const HECDetectorManager *hecManager = VP1DetInfo::hecDetMgr();
 	  const HECDetectorRegion  *region = hecManager->getDetectorRegion(element->getEndcapIndex(),element->getSamplingIndex(),element->getRegionIndex());
-	  const HepGeom::Transform3D &XF= region->getAbsoluteTransform();
+	  const HepGeom::Transform3D &XF= Amg::EigenTransformToCLHEP(region->getAbsoluteTransform());
 	  double z0 = (XF*HepGeom::Point3D<double>(0,0,element->getZLocal(HECCell::FRONT))).z();
 	  double z1 = (XF*HepGeom::Point3D<double>(0,0,element->getZLocal(HECCell::BACK))).z();
 
@@ -1113,7 +1115,7 @@ void VP1CaloReadoutSystem::createHV() {
 		for (e=fcalManager->beginFCAL();e!=fcalManager->endFCAL();  e++) {
 
 		  const FCALModule *fcalMod = *e;
-		  const HepGeom::Transform3D &xf          =  fcalMod->getAbsoluteTransform();
+		  const HepGeom::Transform3D &xf =  Amg::EigenTransformToCLHEP(fcalMod->getAbsoluteTransform());
 
 		  SoTransform  *XF = VP1LinAlgUtils::toSoTransform(xf);
 		  SoSeparator  *sep = new SoSeparator();
@@ -1174,7 +1176,7 @@ void VP1CaloReadoutSystem::createEtaPhi() {
       EMBDetectorManager::DetectorRegionConstIterator e;
       for (e=manager->beginDetectorRegion();e!=manager->endDetectorRegion();  e++) {
 	const EMBDetectorRegion *region = *e;
-	const HepGeom::Transform3D &xf          =  region->getAbsoluteTransform();
+	const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(region->getAbsoluteTransform());
 	SoTransform  *XF = VP1LinAlgUtils::toSoTransform(xf);
 	SoSeparator *sep[NPHISECTORS]= {new SoSeparator(), new SoSeparator(), new SoSeparator(), new SoSeparator(),
 			       new SoSeparator(), new SoSeparator(), new SoSeparator(), new SoSeparator(),
@@ -1274,7 +1276,7 @@ void VP1CaloReadoutSystem::createEtaPhi() {
       EMECDetectorManager::DetectorRegionConstIterator e;
       for (e=manager->beginDetectorRegion();e!=manager->endDetectorRegion();  e++) {
 	const EMECDetectorRegion *region = *e;
-	const HepGeom::Transform3D &xf          =  region->getAbsoluteTransform();
+	const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(region->getAbsoluteTransform());
 
 	// First Focal Points:
 	try {
@@ -1358,7 +1360,7 @@ void VP1CaloReadoutSystem::createEtaPhi() {
 
 
 	const HECDetectorRegion *region = *e;
-	const HepGeom::Transform3D &xf          =  region->getAbsoluteTransform();
+	const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(region->getAbsoluteTransform());
 
 	// First Focal Points:
 	if (region->getSamplingIndex()==1) {
@@ -1444,7 +1446,7 @@ void VP1CaloReadoutSystem::createEtaPhi() {
      for (e=manager->beginFCAL();e!=manager->endFCAL();  e++) {
 
        const FCALModule *fcalMod = *e;
-       const HepGeom::Transform3D &xf          =  fcalMod->getAbsoluteTransform();
+       const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(fcalMod->getAbsoluteTransform());
 
        SoTransform  *XF = VP1LinAlgUtils::toSoTransform(xf);
 
@@ -1751,7 +1753,7 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
 	const FCALModule *fcalMod=element->getModule();
 
 
-	const HepGeom::Transform3D &xf          =  fcalMod->getAbsoluteTransform();
+	const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(fcalMod->getAbsoluteTransform());
 	SoTransform  *XF = VP1LinAlgUtils::toSoTransform(xf);
 
 	SoSeparator * sep = new SoSeparator();
@@ -1800,7 +1802,7 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
       }
       if (m_clockwork->ui.fcalTubesCheckBox->isChecked()) {
 	const FCALModule *fcalMod=element->getModule();
-	const HepGeom::Transform3D &xf          =  fcalMod->getAbsoluteTransform();
+	const HepGeom::Transform3D &xf = Amg::EigenTransformToCLHEP(fcalMod->getAbsoluteTransform());
 	SoTransform  *XF = VP1LinAlgUtils::toSoTransform(xf);
 
 	SoSeparator * sep = new SoSeparator();
@@ -1895,7 +1897,7 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
 
 	const HECDetectorManager *hecManager = VP1DetInfo::hecDetMgr();
 	const HECDetectorRegion  *region = hecManager->getDetectorRegion(element->getEndcapIndex(),element->getSamplingIndex(),element->getRegionIndex());
-	const HepGeom::Transform3D &XF= region->getAbsoluteTransform();
+	const HepGeom::Transform3D &XF= Amg::EigenTransformToCLHEP(region->getAbsoluteTransform());
 	double z = (XF*HepGeom::Point3D<double>(0,0,element->getZLocal(HECCell::FRONT))).z();
 
 	double phiMin = module->getPhiMin();
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1CaloSystems/CMakeLists.txt
index d2bc10e5d617f71e15ce919022066498d5c7c20d..78d206c3dd5516b2833d678076283b254571c4ef 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/CMakeLists.txt
@@ -17,7 +17,6 @@ atlas_depends_on_subdirs(
    Calorimeter/CaloEvent
    Calorimeter/CaloIdentifier
    Control/StoreGate
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoModel/GeoModelUtilities
    GaudiKernel
    LArCalorimeter/LArIdentifier
@@ -36,6 +35,7 @@ find_package( CLHEP )
 find_package( Coin3D )
 find_package( Qt5 COMPONENTS Core Gui Widgets )
 #find_package( Qwt )
+find_package( GeoModel )
 
 # Generate UI files automatically:
 set( CMAKE_AUTOUIC TRUE )
@@ -51,8 +51,8 @@ atlas_add_library( VP1CaloSystems
    ${CMAKE_CURRENT_BINARY_DIR}
    DEFINITIONS ${CLHEP_DEFINITIONS}
    LINK_LIBRARIES ${CLHEP_LIBRARIES} Identifier VP1Base Qt5::Core
-   PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${QWT_LIBRARIES} CaloDetDescrLib
+   PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${QWT_LIBRARIES} ${GEOMODEL_LIBRARIES} CaloDetDescrLib
    StoreGateLib LArCablingLib TileConditionsLib CaloConditions CaloEvent
-   CaloIdentifier GeoModelKernel GeoModelUtilities GaudiKernel LArIdentifier
+   CaloIdentifier GeoModelUtilities GaudiKernel LArIdentifier
    LArRawEvent TileDetDescr TileEvent TileIdentifier VP1HEPVis VP1Utils
    Qt5::Gui )
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCellController.h b/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCellController.h
index 52a764f477e8da5c00948c6f8f3a5b91685918fd..b61bbc46678f624d04de2cffc721c09471dc3c53 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCellController.h
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCellController.h
@@ -7,6 +7,7 @@
 
 #include "VP1Base/VP1Controller.h"
 #include "VP1CaloSystems/VP1CaloCells.h"
+#include "GeoModelKernel/Units.h"
 #include <QByteArray>
 #include <QString>
 #include <map>
@@ -113,7 +114,7 @@ class VP1CaloCellController : public VP1Controller
   //For verbose output:
   template <class T> static QString toString( const T& t ) { return VP1Controller::toString(t); }//unhide base methods
   static QString toString(const VP1CCIntervalMap& m) { return "VP1CCIntervalMap of size "+QString::number(m.count()); }
-  static QString toString(const QPair<bool,double>& par) { return "<"+QString(par.first?"log":"linear")+", "+QString::number(par.second/(CLHEP::cm/CLHEP::GeV))+" cm/GeV>"; }
+  static QString toString(const QPair<bool,double>& par) { return "<"+QString(par.first?"log":"linear")+", "+QString::number(par.second/(GeoModelKernelUnits::cm/GeoModelKernelUnits::GeV))+" cm/GeV>"; }
   static QString toString(const VP1CC_GlobalCuts& cuts) { return "VP1CC global cuts: sideA=" + QString(cuts.sideA?"True":"False") + ", sideC=" + QString(cuts.sideC?"True":"False") + ", allowedEta=" + VP1Controller::toString(cuts.allowedEta) + ", allowedPhi="  + VP1Controller::toString(cuts.allowedEta); }
 
 //  // FIXME:You have to compile Qwt with Qt5. LCG's Qwt is compiled with Qt4 only...
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCells.h b/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCells.h
index c8a9d387039944d24d652306e6b6bd44c3a5419e..7b00191e1d9506191e1d7b35f47178a5bba97630 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCells.h
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/VP1CaloSystems/VP1CaloCells.h
@@ -10,7 +10,9 @@
 #include "Identifier/Identifier.h"
 #include "Identifier/IdentifierHash.h"
 
-#include "CLHEP/Geometry/Transform3D.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoModelKernel/Units.h"
 
 #include <map>
 #include <set>
@@ -185,7 +187,7 @@ class VP1CaloCell
             const VP1CC_GlobalCuts& ) = 0;
 
   double cellDepth(const QPair<bool,double>& scale, const double& energy)
-  { return std::max(1.0*CLHEP::mm,scale.second*(scale.first?log(1+fabs(energy)):fabs(energy))); }
+  { return std::max(1.0*GeoModelKernelUnits::mm,scale.second*(scale.first?log(1+fabs(energy)):fabs(energy))); }
 
   virtual bool isInsideClipVolume(const VP1CC_GlobalCuts&  globalCuts) ; // by default uses radius to determine this
   
@@ -386,7 +388,7 @@ class VP1CC_TileCrack : public VP1CC_Tile
 //   1. MBTS scintillator shape parameters (2 different shapes)
 //   2. MBTS scintillator global positions
 
-typedef std::map<int, HepGeom::Transform3D, std::less<int> > VP1CC_MbtsXfMap;
+typedef std::map<int, GeoTrf::Transform3D, std::less<int> > VP1CC_MbtsXfMap;
 
 typedef struct
 {
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCellController.cxx b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCellController.cxx
index 710d7a84ac99697bbe1be217ca6652287279bdd0..c275a81ab16e0ea0874aa6a04389880bb24e526d 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCellController.cxx
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCellController.cxx
@@ -1137,7 +1137,7 @@ VP1CCIntervalMap VP1CaloCellController::selectionIntervals() const
 
 QPair<bool,double> VP1CaloCellController::scale() const
 {
-	double scl = m_d->ui_visopts.chbxLogscale->isChecked() ? m_d->ui_visopts.dspbxScale->value()*CLHEP::m/log(1+10*CLHEP::GeV) : m_d->ui_visopts.dspbxScale->value()*CLHEP::m/(10*CLHEP::GeV);
+	double scl = m_d->ui_visopts.chbxLogscale->isChecked() ? m_d->ui_visopts.dspbxScale->value()*GeoModelKernelUnits::m/log(1+10*GeoModelKernelUnits::GeV) : m_d->ui_visopts.dspbxScale->value()*GeoModelKernelUnits::m/(10*GeoModelKernelUnits::GeV);
 	return QPair<bool,double>(m_d->ui_visopts.chbxLogscale->isChecked(),scl);
 }
 
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCells.cxx b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCells.cxx
index ea8e67278f57917aae0ed71669dfa5552fbdf9a5..b91cd28aabaae22f6c0a1f9cb7bc55c29448e445 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCells.cxx
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1CaloCells.cxx
@@ -24,8 +24,6 @@
 #include <stdexcept>
 #include <sstream>
 
-#include "CLHEP/Units/SystemOfUnits.h"
-
 // MBTS
 #include "CaloIdentifier/TileTBID.h"
 #include <Inventor/nodes/SoTransform.h>
diff --git a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1MbtsHelper.cxx b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1MbtsHelper.cxx
index 7ff23be36a775b0a7fb6f4de3e93c3e2f4c0ccdc..04dc2eda7c73241a4c97ec9c00060a6122836d0f 100644
--- a/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1MbtsHelper.cxx
+++ b/graphics/VP1/VP1Systems/VP1CaloSystems/src/VP1MbtsHelper.cxx
@@ -92,11 +92,11 @@ void VP1MbtsHelper::systemcreate(StoreGateSvc* detstore)
   GeoFullPhysVol* pvLArECA = storedLArECA->getPhysVol();
   GeoFullPhysVol* pvLArECC = storedLArECC->getPhysVol();
 
-  HepGeom::Transform3D xfLArECA = pvLArECA->getAbsoluteTransform();
-  HepGeom::Transform3D xfLArECC = pvLArECC->getAbsoluteTransform();
+  GeoTrf::Transform3D xfLArECA = pvLArECA->getAbsoluteTransform();
+  GeoTrf::Transform3D xfLArECC = pvLArECC->getAbsoluteTransform();
 
   // Find a pointer to MBTS mother volume and its local transform
-  HepGeom::Transform3D xfMbtsMother;
+  GeoTrf::Transform3D xfMbtsMother;
   PVConstLink pvMbtsMother;
   bool mbtsExists = false;
 
diff --git a/graphics/VP1/VP1Systems/VP1GeometrySystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1GeometrySystems/CMakeLists.txt
index 6763fda413f7c7e0bc7bea75b2c0038a8a9bd906..72a59b24ebb2974cfff8b0a9fce276b932b2ef58 100644
--- a/graphics/VP1/VP1Systems/VP1GeometrySystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1GeometrySystems/CMakeLists.txt
@@ -9,7 +9,7 @@ atlas_subdir( VP1GeometrySystems )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs(
    PUBLIC
-   DetectorDescription/GeoModel/GeoModelKernel
+   DetectorDescription/GeoPrimitives
    MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
    Generators/TruthUtils
    Event/xAOD/xAODTruth
@@ -23,6 +23,7 @@ atlas_depends_on_subdirs(
 find_package( CLHEP )
 find_package( Coin3D )
 find_package( Qt5 COMPONENTS Core Gui Widgets  )
+find_package( GeoModel )
 
 # Find includes in corresponding build directories
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -45,5 +46,5 @@ atlas_add_library( VP1GeometrySystems
    INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} 
    PRIVATE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}  
    PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
-   LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoModelKernel MuonReadoutGeometry TruthUtils xAODTruth VP1Base GL Qt5::Core Qt5::Widgets
+   LINK_LIBRARIES ${COIN3D_LIBRARIES} ${GEOMODEL_LIBRARIES} MuonReadoutGeometry TruthUtils xAODTruth VP1Base GL Qt5::Core Qt5::Widgets
    PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelUtilities VP1HEPVis VP1Utils Qt5::Gui )
diff --git a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/DumpShape.cxx b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/DumpShape.cxx
index 16317bd07b9cf7f411334d93538c0d8471e0a3f5..8b619104ad4e90b6af2ed9799dbbddf153ebdc55 100644
--- a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/DumpShape.cxx
+++ b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/DumpShape.cxx
@@ -4,6 +4,7 @@
 
 #include "VP1GeometrySystems/DumpShape.h"
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoBox.h"
 #include "GeoModelKernel/GeoTubs.h"
@@ -21,6 +22,7 @@
 #include "GeoModelKernel/GeoGenericTrap.h"
 
 #include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Vector/TwoVector.h"
 
 #include "VP1Utils/VP1LinAlgUtils.h"
 #include "Inventor/SbMatrix.h"
@@ -149,7 +151,7 @@ QStringList DumpShape::shapeToStringList(const GeoShape* shape)
     if (theShift){
       out << " =========> GeoShapeShift:";
       SbMatrix t;
-      VP1LinAlgUtils::transformToMatrix(theShift->getX(), t);
+      VP1LinAlgUtils::transformToMatrix(Amg::EigenTransformToCLHEP(theShift->getX()), t);
       float translation_x, translation_y, translation_z, rotaxis_x, rotaxis_y, rotaxis_z, rotangle_radians;
       VP1LinAlgUtils::decodeTransformation( t,
               translation_x, translation_y, translation_z,
@@ -212,7 +214,11 @@ QStringList DumpShape::shapeToStringList(const GeoShape* shape)
     if (theGenericTrap){
       out << " =========> GenericTrap:";
       out << " halfZlength = "+QString::number(theGenericTrap->getZHalfLength()/CLHEP::mm)+" mm";
-      std::vector<CLHEP::Hep2Vector> vertices = theGenericTrap->getVertices();
+      std::vector<CLHEP::Hep2Vector> vertices;
+      vertices.reserve(theGenericTrap->getVertices().size());
+      for(const auto& geoVertex : theGenericTrap->getVertices()) {
+	vertices.push_back(CLHEP::Hep2Vector(geoVertex.x(),geoVertex.y()));
+      }
       //in total 8 vertices by definition!
       out << "==> First 4 vertices at - hz/2";
       out << "(Ax,Ay) = ( "+QString::number(vertices[0].x()/CLHEP::mm)+" , "+QString::number(vertices[0].y()/CLHEP::mm)+" ) mm";
diff --git a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VP1GeometrySystem.cxx b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VP1GeometrySystem.cxx
index caeaf57606a73ea3521bdb441f59fe9004021d77..8ce1c04fdc7e5c5c71de0ef849fda6c24a2a258b 100644
--- a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VP1GeometrySystem.cxx
+++ b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VP1GeometrySystem.cxx
@@ -540,7 +540,7 @@ void VP1GeometrySystem::buildPermanentSceneGraph(StoreGateSvc*/*detstore*/, SoSe
 			  //We did... now, time to extract info:
 			  subsys->treetopinfo.resize(subsys->treetopinfo.size()+1);
 			  subsys->treetopinfo.back().pV = av.getVolume();
-			  subsys->treetopinfo.back().xf = av.getTransform();
+			  subsys->treetopinfo.back().xf = Amg::EigenTransformToCLHEP(av.getTransform());
 			  subsys->treetopinfo.back().volname = av.getName();
 
 			  //Add a switch for this system (turned off for now):
@@ -995,7 +995,7 @@ void VP1GeometrySystem::Imp::buildSystem(SubSystemInfo* si)
 			  if (si->childrenRegExpNameCompatible(av.getName().c_str())) {
 				  PVConstLink pVD = av.getVolume();
 				  SbMatrix matr;
-				  VP1LinAlgUtils::transformToMatrix(av.getTransform(),matr);
+				  VP1LinAlgUtils::transformToMatrix(Amg::EigenTransformToCLHEP(av.getTransform()),matr);
 				  VolumeHandle * vh=0;
           // std::cout<<count++<<": dump SubSystemInfo\n"<<"---"<<std::endl;
           // si->dump();
diff --git a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VolumeHandle.cxx b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VolumeHandle.cxx
index 6809aeda9ba37cc8ce8c2b7806e2199393f94063..eeaa2ae73cf846e7f5c5e809a87d9a0caf969fd4 100644
--- a/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VolumeHandle.cxx
+++ b/graphics/VP1/VP1Systems/VP1GeometrySystems/src/VolumeHandle.cxx
@@ -141,7 +141,7 @@ void VolumeHandle::initialiseChildren()
   while (!av.atEnd()) {
     //Add transformation between parent and child to find the complete transformation of the child:
     SbMatrix matr;
-    VP1LinAlgUtils::transformToMatrix(av.getTransform(), matr);
+    VP1LinAlgUtils::transformToMatrix(Amg::EigenTransformToCLHEP(av.getTransform()), matr);
     matr.multRight(m_d->accumTrans);
     m_children.push_back(new VolumeHandle(m_d->commondata,this,av.getVolume(),ichild++,(isInMuonChamber()?MUONCHAMBERCHILD:NONMUONCHAMBER),matr));
     av.next();
@@ -271,7 +271,7 @@ void VolumeHandle::ensureBuildNodeSep()
   //In the case of a GeoShapeShift we add its contained transformation here:
   //Fixme: Remember to use this extra transformation for phisector cuts also!
   if (m_d->pV->getLogVol()->getShape()->typeID()==GeoShapeShift::getClassTypeID())
-    m_d->nodesep->addChild(VP1LinAlgUtils::toSoTransform(dynamic_cast<const GeoShapeShift*>(m_d->pV->getLogVol()->getShape())->getX()));
+    m_d->nodesep->addChild(VP1LinAlgUtils::toSoTransform(Amg::EigenTransformToCLHEP(dynamic_cast<const GeoShapeShift*>(m_d->pV->getLogVol()->getShape())->getX())));
 
   //Add shape child(ren) and get the separator (helper) where we attach the nodesep when volume is visible:
   if (iphi>=-1) {
diff --git a/graphics/VP1/VP1Systems/VP1PRDSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1PRDSystems/CMakeLists.txt
index 664ae08e27a8ebaa6a38c0c38c89385af9f39ef3..64389e93480aaea132e72de82357bb6f9b29f343 100644
--- a/graphics/VP1/VP1Systems/VP1PRDSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1PRDSystems/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( VP1PRDSystems )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs(
    PUBLIC
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoPrimitives
    InnerDetector/InDetDetDescr/InDetReadoutGeometry
    InnerDetector/InDetRecEvent/InDetPrepRawData
@@ -38,6 +37,7 @@ atlas_depends_on_subdirs(
 find_package( CLHEP )
 find_package( Coin3D )
 find_package( Qt5 COMPONENTS Core Gui Widgets)
+find_package( GeoModel )
 
 # Generate UI files automatically:
 set( CMAKE_AUTOUIC TRUE )
@@ -49,7 +49,7 @@ atlas_add_library( VP1PRDSystems VP1PRDSystems/*.h src/*.cxx
    PUBLIC_HEADERS VP1PRDSystems
    PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
-   LINK_LIBRARIES GeoModelKernel GeoPrimitives InDetReadoutGeometry
+   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GeoPrimitives InDetReadoutGeometry
    InDetPrepRawData MuonPrepRawData TrkPrepRawData TrkSpacePoint VP1Base
    VP1Utils MuonIdHelpersLib Qt5::Core Qt5::Gui
    PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${CLHEP_LIBRARIES} AthContainers
diff --git a/graphics/VP1/VP1Systems/VP1PRDSystems/src/MuonChamberProjectionHelper.cxx b/graphics/VP1/VP1Systems/VP1PRDSystems/src/MuonChamberProjectionHelper.cxx
index 2dd115542e6ac70738a64e963bd7eca7ad9d6dcc..f4598bb17c23629129b2e30b2c68edd519c4028a 100644
--- a/graphics/VP1/VP1Systems/VP1PRDSystems/src/MuonChamberProjectionHelper.cxx
+++ b/graphics/VP1/VP1Systems/VP1PRDSystems/src/MuonChamberProjectionHelper.cxx
@@ -215,7 +215,7 @@ bool MuonChamberProjectionHelper::Imp::init()
       av.next();
       continue;
     }
-    Amg::Transform3D toptransform = Amg::CLHEPTransformToEigen(av.getTransform());
+    Amg::Transform3D toptransform = av.getTransform();
     GeoVolumeCursor av2(av.getVolume());
     while (!av2.atEnd()) {
       if (nameIsMDTChamber(av2.getName())) {
@@ -240,7 +240,7 @@ bool MuonChamberProjectionHelper::Imp::init()
 	       && trd->getYHalfLength1() > 0.0
 	       && trd->getYHalfLength2() > 0.0 ) {
 	    trd->ref();
-	    Amg::Transform3D geovolume_transf = Amg::CLHEPTransformToEigen(av2.getTransform());
+	    Amg::Transform3D geovolume_transf = av2.getTransform();
 	    mdtchambervolinfo.insert(std::pair<const GeoPVConstLink,MDTChamberInfo>( av2.getVolume(), Imp::MDTChamberInfo(toptransform * geovolume_transf, trd) ));
 	  } else {
 	    theclass->message("MuonChamberProjectionHelper Error: Chamber trd has non-positive shape parameters!");
diff --git a/graphics/VP1/VP1Systems/VP1PRDSystems/src/PRDHandle_TGC.cxx b/graphics/VP1/VP1Systems/VP1PRDSystems/src/PRDHandle_TGC.cxx
index f4e30fd42dfb97265dcec96ef2f881d7a27da983..e78f4cbaeb45fbf8457af919a46ec57422ff3ac9 100644
--- a/graphics/VP1/VP1Systems/VP1PRDSystems/src/PRDHandle_TGC.cxx
+++ b/graphics/VP1/VP1Systems/VP1PRDSystems/src/PRDHandle_TGC.cxx
@@ -54,7 +54,7 @@ SoTransform * PRDHandle_TGC::createTransform() const
     } 
     Amg::Vector3D lpos_shift(lposTGC.x(),locy_shift,z_shift);
     
-    const Amg::Transform3D tgcTrans = Amg::CLHEPTransformToEigen(detEl->getMaterialGeom()->getAbsoluteTransform());
+    const Amg::Transform3D tgcTrans = detEl->getMaterialGeom()->getAbsoluteTransform();
     Amg::Vector3D gpos = tgcTrans*lposTGC;
     Amg::Vector3D gpos_shift = tgcTrans*lpos_shift;
     
diff --git a/graphics/VP1/VP1Systems/VP1RawDataSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1RawDataSystems/CMakeLists.txt
index fa5f972f94b9a7989070d36f53fff3ec6e7930fb..de4431bdaf8d439a08a8b7c6ee5f8aef11ffe705 100644
--- a/graphics/VP1/VP1Systems/VP1RawDataSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1RawDataSystems/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/GeoPrimitives
                           graphics/VP1/VP1Base
                           PRIVATE
-                          DetectorDescription/GeoModel/GeoModelKernel
                           Event/EventPrimitives
                           ForwardDetectors/LUCID/LUCID_RawEvent
                           GaudiKernel
@@ -25,6 +24,7 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( Coin3D )
 find_package( Eigen )
 find_package( Qt5 COMPONENTS Core Gui Widgets )
+find_package( GeoModel )
 
 # Generate UI files automatically:
 set( CMAKE_AUTOUIC TRUE )
@@ -43,5 +43,5 @@ atlas_add_library( VP1RawDataSystems VP1RawDataSystems/*.h src/*.h src/*.cxx src
                    PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS}
                    FILES LUCID_RawEvent/LUCID_Digit.h
                    LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives VP1Base GL
-                   PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoModelKernel EventPrimitives LUCID_RawEvent GaudiKernel InDetIdentifier InDetReadoutGeometry InDetBCM_RawData InDetRawData VP1HEPVis VP1Utils )
+                   PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${GEOMODEL_LIBRARIES} EventPrimitives LUCID_RawEvent GaudiKernel InDetIdentifier InDetReadoutGeometry InDetBCM_RawData InDetRawData VP1HEPVis VP1Utils )
 
diff --git a/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_BCM_RDO.cxx b/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_BCM_RDO.cxx
index d3fff54a0a87aca854641e643ec2f2bd0461c9f8..6ba77420390640b0d98b1e6d8262eb4c0be42a8c 100644
--- a/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_BCM_RDO.cxx
+++ b/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_BCM_RDO.cxx
@@ -132,12 +132,12 @@ void VP1RawDataHandle_BCM_RDO::Imp::ensureInitModuleInfo()
     GeoVolumeCursor av(*world);
     while (!av.atEnd()) {
       if (av.getName()=="Pixel") {
-	Amg::Transform3D tr_pix = Amg::CLHEPTransformToEigen( av.getTransform() );
+	Amg::Transform3D tr_pix = av.getTransform();
 	GeoVolumeCursor pv(av.getVolume());
 	while (!pv.atEnd()) {
 	  int bcmModLogCopyNumber(-1);
 	  if (pv.getVolume()->getLogVol()->getName()=="bcmModLog") {
-	    Amg::Transform3D tr_bcmmod = Amg::CLHEPTransformToEigen( pv.getTransform() );
+	    Amg::Transform3D tr_bcmmod = pv.getTransform();
 	    Query<int> Qint = pv.getId();
 	    if (Qint.isValid()) {
 	      bcmModLogCopyNumber = int(Qint);
@@ -145,7 +145,7 @@ void VP1RawDataHandle_BCM_RDO::Imp::ensureInitModuleInfo()
 	      GeoVolumeCursor bv(pv.getVolume());
 	      while (!bv.atEnd()) {
 		if (bv.getVolume()->getLogVol()->getName()=="bcmDiamondLog") {
-		  Amg::Transform3D tr_diamond( Amg::CLHEPTransformToEigen( bv.getTransform() ) );
+		  Amg::Transform3D tr_diamond(bv.getTransform());
 		  const GeoBox * box = bv.getVolume()->getLogVol()->getShape()->typeID()==GeoBox::getClassTypeID() ?
 		    static_cast<const GeoBox*>(bv.getVolume()->getLogVol()->getShape()) : 0;
 		  modInfo->addBox(tr_pix*tr_bcmmod*tr_diamond,box);
diff --git a/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_LUCID.cxx b/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_LUCID.cxx
index 3d7b1c9fc671ce23de266a3e80e5d2c51d1aa511..7f3c0fc790f4808f3e37ef95473079e611422ee7 100644
--- a/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_LUCID.cxx
+++ b/graphics/VP1/VP1Systems/VP1RawDataSystems/src/VP1RawDataHandle_LUCID.cxx
@@ -138,7 +138,7 @@ void VP1RawDataHandle_LUCID::Imp::ensureInitTubeInfo()
 		    if (tubeID>=0) {
 		      const GeoTube * geotube = av4.getVolume()->getLogVol()->getShape()->typeID()==GeoTube::getClassTypeID() ?
 			static_cast<const GeoTube*>(av4.getVolume()->getLogVol()->getShape()) : 0;
-		      Amg::Transform3D tr( Amg::CLHEPTransformToEigen(av.getTransform()*av2.getTransform()*av3.getTransform()*av4.getTransform() ) );
+		      Amg::Transform3D tr( av.getTransform()*av2.getTransform()*av3.getTransform()*av4.getTransform() );
 		      (*tubeID2TubeInfo)[tubeID] = new TubeInfo(tubeID,tr,geotube);
 		      if (VP1Msg::verbose())
 			VP1Msg::messageVerbose("VP1RawDataHandle_LUCID Added TubeInfo for tubeID = "+QString::number(tubeID));
diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1TrackSystems/CMakeLists.txt
index ee2d554f7ae707304cb18a89c005edc4420e828e..12a83342665aa5b70ee1408ced61936719d36bb5 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( VP1TrackSystems )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs(
    PUBLIC
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoPrimitives
    DetectorDescription/Identifier
    Event/xAOD/xAODTracking
@@ -65,6 +64,7 @@ find_package( CLHEP )
 find_package( Coin3D )
 find_package( HepMC )
 find_package( Qt5 COMPONENTS Core Gui Widgets  )
+find_package( GeoModel )
 
 # Generate UI files automatically:
 # Note: add the "Widgets" component to "find_package( Qt5 ...)" if you have UI files, otherwise UIC, even if CMAKE_AUTOUIC is set to ON, is not run
@@ -77,7 +77,7 @@ atlas_add_library( VP1TrackSystems VP1TrackSystems/*.h src/*.cxx
    PUBLIC_HEADERS VP1TrackSystems
    PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
    ${HEPMC_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}
-   LINK_LIBRARIES GeoModelKernel GeoPrimitives Identifier xAODTracking
+   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} GeoPrimitives Identifier xAODTracking
    GaudiKernel GeneratorObjects TrkDetDescrInterfaces TrkSurfaces
    TrkEventPrimitives TrkParameters VP1Base VP1Utils StoreGateLib SGtests
    MuonIdHelpersLib MuonRecHelperToolsLib Qt5::Core Qt5::Gui
diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/SimHitHandle_SiHit.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/SimHitHandle_SiHit.cxx
index aa2930a835b441edbcb68e8626333d8b72ae462c..4fda1569d553e02bddec737df6adff55d7682119 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/SimHitHandle_SiHit.cxx
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/SimHitHandle_SiHit.cxx
@@ -94,7 +94,7 @@ Amg::Vector3D SimHitHandle_SiHit::Imp::localToGlobal( const HepGeom::Point3D<dou
 {
   if (!ensureDetElemInit())
     return Amg::Vector3D(0,0,0);
-  return Amg::Vector3D(detelem->transformHit() * local);
+  return Amg::Vector3D(Amg::EigenTransformToCLHEP(detelem->transformHit()) * local);
 }
 
 //____________________________________________________________________
diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackPropagationHelper.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackPropagationHelper.cxx
index 04076ecd1d8c51510015419129fb13059fda65ab..7e8bb6a37d53b54cd2d9cfe8671de543937935bb 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackPropagationHelper.cxx
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackPropagationHelper.cxx
@@ -26,6 +26,7 @@
 #include "TrkVolumes/BoundarySurface.h"
 #include "TrkVolumes/VolumeBounds.h"
 
+#include "CLHEP/Units/PhysicalConstants.h"
 
 #include "VP1Base/VP1QtUtils.h"
 #include <limits>
diff --git a/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/CMakeLists.txt
index 72b1e98ca491b7dafd120cd3b22e810d0935d510..17ac75c5f040bd67e4fb6ff46652d887df399ead 100644
--- a/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( VP1TrackingGeometrySystems )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          DetectorDescription/GeoModel/GeoModelKernel
                           Tracking/TrkDetDescr/TrkVolumes
                           graphics/VP1/VP1Base
                           PRIVATE
@@ -24,6 +23,7 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( Coin3D )
 find_package( Eigen )
 find_package( Qt5 COMPONENTS Core Gui Widgets )
+find_package( GeoModel )
 
 # Generate UI files automatically:
 set( CMAKE_AUTOUIC TRUE )
@@ -41,6 +41,6 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
 atlas_add_library( VP1TrackingGeometrySystems VP1TrackingGeometrySystems/*.h src/*.h src/*.cxx src/*.qrc  
                    PUBLIC_HEADERS VP1TrackingGeometrySystems
                    PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                   LINK_LIBRARIES GeoModelKernel TrkVolumes VP1Base GL StoreGateLib SGtests
+                   LINK_LIBRARIES ${GEOMODEL_LIBRARIES} TrkVolumes VP1Base GL StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${EIGEN_LIBRARIES} GeoPrimitives GaudiKernel TrkDetDescrInterfaces TrkDetDescrUtils TrkGeometry VP1HEPVis VP1Utils )
 
diff --git a/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/src/TrackingVolumeToSoNode.cxx b/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/src/TrackingVolumeToSoNode.cxx
index 90d08766755331cf23978a97d142141ca702426d..559a76663a6f9f492d62dd82103c5993669a321f 100755
--- a/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/src/TrackingVolumeToSoNode.cxx
+++ b/graphics/VP1/VP1Systems/VP1TrackingGeometrySystems/src/TrackingVolumeToSoNode.cxx
@@ -13,6 +13,7 @@
 //                                                                     //
 /////////////////////////////////////////////////////////////////////////
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "VP1TrackingGeometrySystems/TrackingVolumeToSoNode.h"
 #include "VP1HEPVis/nodes/SoGenericBox.h"
 #include "VP1HEPVis/nodes/SoTubs.h"
@@ -42,6 +43,7 @@
 #include "GeoModelKernel/GeoShapeIntersection.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
 #include "GeoModelKernel/GeoSimplePolygonBrep.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 
 #include "GeoPrimitives/GeoPrimitives.h"
 
@@ -146,8 +148,8 @@ SoNode*  TrackingVolumeToSoNode::translateTrackingVolume(const Trk::TrackingVolu
     Trk::TrapezoidVolumeBounds* trBoundB = new Trk::TrapezoidVolumeBounds(medX,maxX,z,y2);
     const GeoShape* trdA = getShapeFromBounds( trBoundA );
     const GeoShape* trdB = getShapeFromBounds( trBoundB );
-    const GeoShapeShift* shiftA = new GeoShapeShift(trdA,HepGeom::TranslateY3D(-y1)*HepGeom::RotateX3D(-90*CLHEP::deg)*HepGeom::RotateZ3D(-90*CLHEP::deg));
-    const GeoShapeShift* shiftB = new GeoShapeShift(trdB,HepGeom::TranslateY3D(+y2)*HepGeom::RotateX3D(-90*CLHEP::deg)*HepGeom::RotateZ3D(-90*CLHEP::deg));
+    const GeoShapeShift* shiftA = new GeoShapeShift(trdA,GeoTrf::TranslateY3D(-y1)*GeoTrf::RotateX3D(-90*CLHEP::deg)*GeoTrf::RotateZ3D(-90*CLHEP::deg));
+    const GeoShapeShift* shiftB = new GeoShapeShift(trdB,GeoTrf::TranslateY3D(+y2)*GeoTrf::RotateX3D(-90*CLHEP::deg)*GeoTrf::RotateZ3D(-90*CLHEP::deg));
     const GeoShapeUnion* dtrd   = new GeoShapeUnion(shiftA,shiftB); 
 
     SoVisualizeAction* sa = new SoVisualizeAction();
@@ -175,14 +177,14 @@ SoNode*  TrackingVolumeToSoNode::translateTrackingVolume(const Trk::TrackingVolu
     } else if ( type==1 ) {
       const GeoTubs* tubs = new GeoTubs(innerR,outerR,hZ,-hPhi,2*hPhi);
       const GeoBox*  box = new GeoBox( innerR, tp*innerR, hZ);
-      const GeoShapeSubtraction* sub = new GeoShapeSubtraction(tubs,new GeoShapeShift(box,HepGeom::Transform3D()));
+      const GeoShapeSubtraction* sub = new GeoShapeSubtraction(tubs,new GeoShapeShift(box,GeoTrf::Transform3D::Identity()));
       SoVisualizeAction* sa = new SoVisualizeAction();
       sa->handleShape(sub);
       sovol = sa->getShape();
     } else if ( type==2 ) {
       const GeoTubs* tubs = new GeoTubs(innerR,outerR/cos(hPhi),hZ,-hPhi,2*hPhi);
       const GeoBox*  box = new GeoBox( outerR*(1./cos(hPhi)-1.),tp*outerR,hZ );
-      const GeoShapeSubtraction* sub = new GeoShapeSubtraction(tubs,new GeoShapeShift(box,HepGeom::TranslateX3D(outerR/cos(hPhi))));
+      const GeoShapeSubtraction* sub = new GeoShapeSubtraction(tubs,new GeoShapeShift(box,GeoTrf::TranslateX3D(outerR/cos(hPhi))));
       SoVisualizeAction* sa = new SoVisualizeAction();
       sa->handleShape(sub);
       sovol = sa->getShape();
@@ -190,7 +192,7 @@ SoNode*  TrackingVolumeToSoNode::translateTrackingVolume(const Trk::TrackingVolu
       const GeoTubs* tubs = new GeoTubs(innerR,outerR/cos(hPhi),hZ,-hPhi,2*hPhi);
       const GeoBox*  boxO = new GeoBox( outerR*(1./cos(hPhi)-1.),tp*outerR,hZ );
       const GeoBox*  boxI = new GeoBox( innerR, tp*innerR, hZ);
-      const GeoShapeUnion* uni = new GeoShapeUnion(boxI,new GeoShapeShift(boxO,HepGeom::TranslateX3D(outerR/cos(hPhi))));
+      const GeoShapeUnion* uni = new GeoShapeUnion(boxI,new GeoShapeShift(boxO,GeoTrf::TranslateX3D(outerR/cos(hPhi))));
       const GeoShapeSubtraction* sub = new GeoShapeSubtraction(tubs,uni);
       SoVisualizeAction* sa = new SoVisualizeAction();
       sa->handleShape(sub);
@@ -267,9 +269,9 @@ const GeoShape* TrackingVolumeToSoNode::getShapeFromBounds(const Trk::VolumeBoun
     double thPlus = tvolBevCylBounds->thetaPlus();
     double thMinus= tvolBevCylBounds->thetaMinus();
     const GeoTube* tub = new GeoTube(innerR, outerR, halfZ); 
-    HepGeom::Transform3D trBoxP = HepGeom::TranslateZ3D(+halfZ)*HepGeom::RotateY3D(thPlus);
+    GeoTrf::Transform3D trBoxP = GeoTrf::TranslateZ3D(+halfZ)*GeoTrf::RotateY3D(thPlus);
     const GeoShapeShift* boxP = new GeoShapeShift(new GeoBox(2*outerR/cos(thPlus),outerR ,outerR*sin(thPlus)),trBoxP); 
-    HepGeom::Transform3D trBoxM = HepGeom::TranslateZ3D(-halfZ)*HepGeom::RotateY3D(-thMinus);
+    GeoTrf::Transform3D trBoxM = GeoTrf::TranslateZ3D(-halfZ)*GeoTrf::RotateY3D(-thMinus);
     const GeoShapeShift* boxM = new GeoShapeShift(new GeoBox(2*outerR/cos(thPlus),outerR ,outerR*sin(thPlus)),trBoxM); 
     const GeoShapeSubtraction* shape= new GeoShapeSubtraction( new GeoShapeSubtraction(tub,boxM), boxP);
 
@@ -298,8 +300,8 @@ const GeoShape* TrackingVolumeToSoNode::getShapeFromBounds(const Trk::VolumeBoun
     }
     const GeoShape* shape1 = getShapeFromBounds(vb1);
     const GeoShape* shape2 = getShapeFromBounds(vb2);
-    const GeoShapeShift* shift1 = new GeoShapeShift(shape1, Amg::EigenTransformToCLHEP(transf1) );
-    const GeoShapeShift* shift2 = new GeoShapeShift(shape2, Amg::EigenTransformToCLHEP(transf2) );
+    const GeoShapeShift* shift1 = new GeoShapeShift(shape1, transf1);
+    const GeoShapeShift* shift2 = new GeoShapeShift(shape2, transf2);
     const GeoShapeSubtraction* subtr= new GeoShapeSubtraction(shift1, shift2);
     return subtr;
   }
@@ -325,8 +327,8 @@ const GeoShape* TrackingVolumeToSoNode::getShapeFromBounds(const Trk::VolumeBoun
     }
     const GeoShape* shape1 = getShapeFromBounds(vb1);
     const GeoShape* shape2 = getShapeFromBounds(vb2);
-    const GeoShapeShift* shift1 = new GeoShapeShift(shape1, Amg::EigenTransformToCLHEP(transf1) );
-    const GeoShapeShift* shift2 = new GeoShapeShift(shape2, Amg::EigenTransformToCLHEP(transf2) );
+    const GeoShapeShift* shift1 = new GeoShapeShift(shape1,transf1);
+    const GeoShapeShift* shift2 = new GeoShapeShift(shape2,transf2);
     if (tvolCombBounds->intersection()) {
       const GeoShapeIntersection* intersection= new GeoShapeIntersection( shift1, shift2);
       return intersection;
diff --git a/graphics/VP1/VP1Systems/VP1VertexSystems/src/VP1VertexCollection.cxx b/graphics/VP1/VP1Systems/VP1VertexSystems/src/VP1VertexCollection.cxx
index 13826815f6d78723d44a81fa064b30361b729df7..9c6e6b42b46269d9e9e083b3fcc3014533b0f055 100644
--- a/graphics/VP1/VP1Systems/VP1VertexSystems/src/VP1VertexCollection.cxx
+++ b/graphics/VP1/VP1Systems/VP1VertexSystems/src/VP1VertexCollection.cxx
@@ -42,6 +42,7 @@
 #include "TrkParticleBase/LinkToTrackParticleBase.h"
 #include "TrkTrackLink/ITrackLink.h"
 #include "GeoPrimitives/GeoPrimitives.h"
+#include "GaudiKernel/SystemOfUnits.h"
 
 #include <iostream>
 
@@ -511,8 +512,8 @@ QStringList VP1VertexCollection::infoOnClicked(SoPath* pickedPath)
 
     //Make output:
     l <<"Reconstructed vertex from collection "+text()+":" ;
-    l << "--Position [CLHEP::mm]: ("+str(vtx->recVertex().position().x()/CLHEP::mm)+", "+
-      str(vtx->recVertex().position().y()/CLHEP::mm)+", "+str(vtx->recVertex().position().z()/CLHEP::mm)+")";
+    l << "--Position [CLHEP::mm]: ("+str(vtx->recVertex().position().x()/Gaudi::Units::mm)+", "+
+      str(vtx->recVertex().position().y()/Gaudi::Units::mm)+", "+str(vtx->recVertex().position().z()/Gaudi::Units::mm)+")";
 
     //Track associations. (in the future we will use them to tell the
     //track system to e.g. colour tracks by vertex - for now just print the number of those):
diff --git a/graphics/VP1/VP1Utils/CMakeLists.txt b/graphics/VP1/VP1Utils/CMakeLists.txt
index 1de2eb71f69a20058c3102ed43375672a177a6be..09ebbed35daca1bb830c1e0777deaa621e929320 100644
--- a/graphics/VP1/VP1Utils/CMakeLists.txt
+++ b/graphics/VP1/VP1Utils/CMakeLists.txt
@@ -13,7 +13,6 @@ atlas_depends_on_subdirs(
    PUBLIC
    Control/AthenaKernel
    Control/StoreGate
-   DetectorDescription/GeoModel/GeoModelKernel
    DetectorDescription/GeoPrimitives
    Event/EventPrimitives
    GaudiKernel
@@ -44,6 +43,7 @@ find_package( Coin3D )
 find_package( Eigen )
 find_package( HepPDT )
 find_package( Qt5 COMPONENTS Core HINTS ${QT5_ROOT} )
+find_package( GeoModel )
 
 # CLHEP definitions:
 add_definitions( -DCLHEP_MAX_MIN_DEFINED
@@ -59,7 +59,7 @@ atlas_add_library( VP1Utils VP1Utils/*.h src/*.cxx src/*.cpp
    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
    PRIVATE_INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} ${COIN3D_INCLUDE_DIRS}
    ${EIGEN_INCLUDE_DIRS}
-   LINK_LIBRARIES ${CLHEP_LIBRARIES} GeoModelKernel EventPrimitives
+   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} EventPrimitives
    GaudiKernel VP1Base StoreGateLib SGtests AthDSoCallBacks MuonIdHelpersLib
    GeoPrimitives Qt5::Core
    PRIVATE_LINK_LIBRARIES ${HEPPDT_LIBRARIES} ${COIN3D_LIBRARIES}
diff --git a/graphics/VP1/VP1Utils/src/HitToSodeNode.cxx b/graphics/VP1/VP1Utils/src/HitToSodeNode.cxx
index 2802dc71c0b9643465e0bb354f2df505da36948b..6a2b2f121eebf2679cef971b0699cb11ff3d25b4 100644
--- a/graphics/VP1/VP1Utils/src/HitToSodeNode.cxx
+++ b/graphics/VP1/VP1Utils/src/HitToSodeNode.cxx
@@ -100,7 +100,7 @@ double HitToSoNode::getTGCAngle(Identifier id) const {
     } 
     Amg::Vector3D lpos_shift(lposTGC.x(),locy_shift,z_shift);
 
-    const Amg::Transform3D tgcTrans = Amg::CLHEPTransformToEigen(detEl->getMaterialGeom()->getAbsoluteTransform());
+    const Amg::Transform3D tgcTrans = detEl->getMaterialGeom()->getAbsoluteTransform();
     Amg::Vector3D gpos = tgcTrans * lposTGC;
     Amg::Vector3D gpos_shift = tgcTrans*lpos_shift;
 
diff --git a/graphics/VP1/VP1Utils/src/SbPolyhedrizeAction.cxx b/graphics/VP1/VP1Utils/src/SbPolyhedrizeAction.cxx
index ac6d6f4903621446fc6f092eccb98ca19957e1b3..c9400065b618d611268d819154d9c950f8a6e2fc 100644
--- a/graphics/VP1/VP1Utils/src/SbPolyhedrizeAction.cxx
+++ b/graphics/VP1/VP1Utils/src/SbPolyhedrizeAction.cxx
@@ -2,6 +2,7 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "GeoModelKernel/GeoShapeShift.h"
 #include "GeoModelKernel/GeoShapeIntersection.h"
 #include "GeoModelKernel/GeoShapeUnion.h"
@@ -19,6 +20,7 @@
 #include "GeoModelKernel/GeoTessellatedSolid.h"
 #include "GeoModelKernel/GeoFacet.h"
 #include "GeoModelKernel/GeoGenericTrap.h"
+#include "GeoModelKernel/GeoDefinitions.h"
 #include "VP1Utils/SbPolyhedrizeAction.h"
 
 #include "VP1HEPVis/SbPolyhedron.h"
@@ -40,8 +42,8 @@ SbPolyhedrizeAction::~SbPolyhedrizeAction()
 void SbPolyhedrizeAction::handleShift(const GeoShapeShift *shift)
 {
   shift->getOp()->exec(this);
-  CLHEP::HepRotation rotation=shift->getX().getRotation();
-  CLHEP::Hep3Vector  translation = shift->getX().getTranslation();
+  GeoTrf::RotationMatrix3D rotation=shift->getX().rotation();
+  GeoTrf::Vector3D  translation = shift->getX().translation();
 
   // rbianchi - 14.12.2012
 //  SbVec3f    trx(translation.x(),translation.y(),translation.z());
@@ -51,9 +53,9 @@ void SbPolyhedrizeAction::handleShift(const GeoShapeShift *shift)
 //			  0,0,0,1));
   SbVec3d    trx(translation.x(),translation.y(),translation.z());
   #include <VP1HEPVis/SbRotation.h> //using doubles instead of floats.
-  HEPVis::SbRotation rot(rotation.xx(),rotation.yx(),rotation.zx(),0,
-			  rotation.xy(),rotation.yy(),rotation.zy(),0,
-			  rotation.xz(),rotation.yz(),rotation.zz(),0,
+  HEPVis::SbRotation rot(rotation(0,0),rotation(1,0),rotation(2,0),0,
+			 rotation(0,1),rotation(1,1),rotation(2,1),0,
+			 rotation(0,2),rotation(1,2),rotation(2.2),0,
 			  0,0,0,1);
   //---
 
diff --git a/graphics/VP1/VP1Utils/src/SoVisualizeAction.cxx b/graphics/VP1/VP1Utils/src/SoVisualizeAction.cxx
index 3867818cc94885884b4a92121dd5630878fb007a..dec8091d1fe4688b73a66fefa83cef202ea222d7 100644
--- a/graphics/VP1/VP1Utils/src/SoVisualizeAction.cxx
+++ b/graphics/VP1/VP1Utils/src/SoVisualizeAction.cxx
@@ -14,6 +14,7 @@
 #include "GeoModelKernel/GeoTessellatedSolid.h"
 #include "GeoModelKernel/GeoFacet.h"
 #include "GeoModelKernel/GeoGenericTrap.h"
+#include "GeoModelKernel/Units.h"
 #include "GeoSpecialShapes/LArCustomShape.h"
 #include "GeoSpecialShapes/LArWheelCalculator.h"
 #include "VP1HEPVis/nodes/SoTubs.h"
@@ -154,11 +155,11 @@ void SoVisualizeAction::handleLArCustom(const LArCustomShape *custom)
   static const double eta_low = 1.375;
 
 
-  //  static const double zWheelRefPoint       = 3689.5*CLHEP::mm;  //=endg_z0
-  static const double dMechFocaltoWRP      = 3691. *CLHEP::mm;  //=endg_z1
-  //  static const double dElecFocaltoWRP      = 3689. *CLHEP::mm;  //=endg_dcf
-  static const double dWRPtoFrontFace      =   11. *CLHEP::mm;
-  static const double rOuterCutoff         = 2034. *CLHEP::mm;  //=endg_rlimit
+  //  static const double zWheelRefPoint       = 3689.5*GeoModelKernelUnits::mm;  //=endg_z0
+  static const double dMechFocaltoWRP      = 3691. *GeoModelKernelUnits::mm;  //=endg_z1
+  //  static const double dElecFocaltoWRP      = 3689. *GeoModelKernelUnits::mm;  //=endg_dcf
+  static const double dWRPtoFrontFace      =   11. *GeoModelKernelUnits::mm;
+  static const double rOuterCutoff         = 2034. *GeoModelKernelUnits::mm;  //=endg_rlimit
 
 
   SoLAr::initClass();
@@ -181,7 +182,7 @@ void SoVisualizeAction::handleLArCustom(const LArCustomShape *custom)
     rInner[1] = zWheelBackFace  * tanThetaInner;
     // Note that there is a 3mm gap between the outer surface of the
     // inner wheel and the inner surface of the outer wheel.
-    double HalfGapBetweenWheels = 0.15*CLHEP::cm;  // In DB EMECGEOMETRY.DCRACK
+    double HalfGapBetweenWheels = 0.15*GeoModelKernelUnits::cm;  // In DB EMECGEOMETRY.DCRACK
     rOuter[0] = zWheelFrontFace * tanThetaMid - HalfGapBetweenWheels;
     rOuter[1] = zWheelBackFace  * tanThetaMid - HalfGapBetweenWheels;
     solar->fRmin.setValues(0,2,rInner);
@@ -201,7 +202,7 @@ void SoVisualizeAction::handleLArCustom(const LArCustomShape *custom)
     double zWheelBackFace = zWheelFrontFace + calc->GetWheelThickness();
     // Note that there is a 3mm gap between the outer surface of the
     // inner wheel and the inner surface of the outer wheel.
-    double HalfGapBetweenWheels = 0.15*CLHEP::cm;  // In DB! (EMECGEOMETRY.DCRACK);
+    double HalfGapBetweenWheels = 0.15*GeoModelKernelUnits::cm;  // In DB! (EMECGEOMETRY.DCRACK);
     rInner[0] = zWheelFrontFace * tanThetaMid + HalfGapBetweenWheels;
     rInner[2] = zWheelBackFace  * tanThetaMid + HalfGapBetweenWheels;
     rOuter[0] = zWheelFrontFace * tanThetaOuter;