diff --git a/compact/ecal.xml b/compact/ecal.xml
index a98a381b76bfe0771f08fd436b3c17cb2c8e60a6..9013cb9d64d51d281320dbbd7ae08c0bf5c9dfd6 100644
--- a/compact/ecal.xml
+++ b/compact/ecal.xml
@@ -1,6 +1,77 @@
 <lccdd>
 
   <define>
+    <constant name="cb_EMCAL_ID"           value="20"/>
+    <comment>
+      ------------
+      Calorimeters
+      ------------
+    </comment>
+    <constant name="EcalBarrel_rmin"                       value="1000*mm"/>
+    <constant name="HcalBarrel_rmax"                       value="Solenoid_rmin - 5.0 *cm "/>
+    <constant name="AvailTotalBarrelCalorimetryThickness"  value="HcalBarrel_rmax - EcalBarrel_rmin"/>
+    <constant name="CalBarrelDivider"                      value="0.5"/> <comment> Ecal and Hcal have the same thickness </comment>
+    <constant name="EcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * CalBarrelDivider"/>
+    <constant name="HcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * (1.0 - CalBarrelDivider)"/>
+
+    <constant name="EcalBarrelLength"                      value="SiliconTrackerOuterBarrelLength+50.0*cm"/>
+    <constant name="EcalEndcap_zmin"                       value="EcalBarrelLength/2.0"/>
+
+    <constant name="AvailTotalEndcapCalorimetryThickness"  value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcap_zmin + 10.0 * mm)"/>
+    <constant name="CalEndcapDivider"                      value="0.5"/> <comment> Ecal and Hcal have the same thickness </comment>
+    <constant name="EcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * CalEndcapDivider"/>
+    <constant name="HcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * (1.0 - CalEndcapDivider)"/>
+
+    <comment> These need to be set in sync with the forward and backward  detectors </comment>
+    <constant name="EcalEndcapP_rmin"                      value="250.0*mm"/>
+    <constant name="EcalEndcapN_rmin"                      value="350.0*mm"/>
+
+    <constant name="HcalEndcapP_rmin"                      value="250.0 * mm"/>
+    <constant name="HcalEndcapN_rmin"                      value="350.0 * mm"/>
+
+    <comment>
+      -------------------------
+      EM Calorimeter Parameters
+      -------------------------
+    </comment>
+    <constant name="CaloSides"                  value="12"/>
+	    
+    <comment>Material Thickness</comment>
+    <constant name="EcalSiliconThickness"       value="9.00 * mm"/>
+    <constant name="EcalCopperThickness"        value="0.05 * mm"/>
+    <constant name="EcalKaptonThickness"        value="0.30 * mm"/>
+    <constant name="EcalAir1Thickness"          value="0.33 * mm"/>
+    <constant name="EcalAir2Thickness"          value="0.25 * mm"/>
+    <constant name="EcalThinTungstenThickness"  value="2.50 * mm"/>
+    <constant name="EcalThickTungstenThickness" value="5.00 * mm"/>
+	    
+    <comment> Layer Thickness  </comment>
+    <constant name="EcalFirstLayerThickness"
+	    value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+    <constant name="EcalThinOneLayerThickness"   
+	    value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+    <constant name="EcalThickOneLayerThickness"   
+	    value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+	    
+    <comment> EM Barrel N Layer; same number of layers for EcalThin and EcalThick</comment>
+    <constant name="EcalBarrelLayers" 
+	    value="floor((EcalBarrelAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalBarrelThinLayers"       value="EcalBarrelLayers"/>
+    <constant name="EcalBarrelThickLayers"      value="EcalBarrelLayers"/>
+    <comment> EM Barrel Thickness </comment>
+    <constant name="EcalBarrelThickness"
+	    value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/>
+    <constant name="EcalBarrel_rmax"            value="EcalBarrel_rmin + EcalBarrelThickness"/>
+
+    <comment> EM Endcap N Layer; same number of layers for EcalThin and EcalThick </comment>
+    <constant name="EcalEndcapLayers" 
+	    value="floor((EcalEndcapAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalEndcapThinLayers"       value="EcalEndcapLayers"/>
+    <constant name="EcalEndcapThickLayers"      value="EcalEndcapLayers"/>
+    <comment> EM Endcap Thickness </comment>
+    <constant name="EcalEndcapThickness"        
+	    value="EcalFirstLayerThickness + (EcalEndcapThinLayers * EcalThinOneLayerThickness) + (EcalEndcapThickLayers * EcalThickOneLayerThickness)"/>
+
   </define>
 
   <limits>
@@ -27,7 +98,7 @@
     <detector 
       id="cb_EMCAL_ID"
       name="cb_EMCAL"
-      type="cb_EMCAL"
+      type="DD4hep_PolyhedraEndcapCalorimeter2" 
       readout="EcalBarrelHits"
       calorimeterType="EM_BARREL">
       <dimensions 
@@ -67,7 +138,6 @@
     </comment>
     <detector id="ECalEndcapP_ID" 
       name="EcalEndcapP" 
-      type="DD4hep_PolyhedraEndcapCalorimeter2" 
       reflect="false" 
       readout="EcalEndcapHits" 
       vis="EcalEndcapVis"