diff --git a/ip6/far_forward_ZDC_Ecal.xml b/ip6/far_forward_ZDC_Ecal.xml
index 1b35de18eddbd8cf2908129a730c28317613aecf..e49278909d82297fb5fe025623226fb2ec0db3f6 100644
--- a/ip6/far_forward_ZDC_Ecal.xml
+++ b/ip6/far_forward_ZDC_Ecal.xml
@@ -1,30 +1,38 @@
 <lccdd>
   <comment>
     //////////////////////////////////////////////////
-    // Far Forward Ion Zero Degree Calorimeter - Ecal
-    // PWO crystal bars
+    // Far Forward Ion Zero Degree Calorimeter
+    // Silicon/PbWO4 for Ecal
     //////////////////////////////////////////////////
   </comment>        
 
   <detectors>
-    <detector id="ffi_ZDC_ECAL_ID" name="ffi_ZDC_ECAL" type="ffi_ZDC_ECAL" readout="ffi_ZDC_ECAL_Hits" vis="ffi_ZDC_ECAL_Vis">
+    <detector id="ffi_ZDC_ECAL_ID" name="ffi_ZDC_ECAL" type="ffi_ZDC_Sampling" readout="ffi_ZDC_ECAL_Hits" vis="ffi_ZDC_ECAL_Vis">
       <position x="ffi_ZDC_ECAL_x_pos" y="ffi_ZDC_ECAL_y_pos" z="ffi_ZDC_ECAL_z_pos"/>
       <rotation x="ffi_ZDC_ECAL_rotateX_angle" y="ffi_ZDC_ECAL_rotateY_angle" z="ffi_ZDC_ECAL_rotateZ_angle"/>
-      <dimensions x="ffi_ZDC_ECAL_width" z="ffi_ZDC_ECAL_thickness"/>
-      <module name="ffi_ZDC_ECAL_module" 
-	      vis="ffi_ZDC_ECAL_module_Vis" 
-	      material="PbWO4" 
-	      thickness="ffi_ZDC_ECAL_module_thickness" 
-	      width="ffi_ZDC_ECAL_module_width" 
-	      gap="ffi_ZDC_ECAL_module_gap" 
-	      ntower="ffi_ZDC_ECAL_module_ntower"/>
+      <dimensions x="ffi_ZDC_ECAL_width" z="ffi_ZDC_ECAL_length"/>
+      <layer repeat="ffi_ZDC_SiPbWO4_NRepeat">
+        <slice name="Silicon_1_slice" material="Silicon" thickness="ffi_ZDC_Silicon_1_Thickness" vis="AnlRed"  sensitive="true"/>
+	<slice name="Glue_1_slice"    material="Epoxy"   thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+	<slice name="FPC_slice"       material="Epoxy"   thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+	<slice name="Air_1_slice"     material="Air"     thickness="ffi_ZDC_Air_1_Thickness"     vis="InvisibleNoDaughters"/>
+        <slice name="PbWO4_slice"     material="PbWO4"   thickness="ffi_ZDC_PbWO4_Thickness"     vis="AnlGold" sensitive="true"/>
+	<slice name="Air_2_slice"     material="Air"     thickness="ffi_ZDC_Air_2_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
     </detector>
   </detectors>
 
   <readouts>
     <readout name="ffi_ZDC_ECAL_Hits">
-      <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
-      <id>system:8,module:14,x:32:-16,y:-16</id>  
+      <segmentation type="MultiSegmentation" key="slice">
+        <segmentation name="Si_HG_grid" type="CartesianGridXY" key_value="1"  grid_size_x="3.0*mm" grid_size_y="3.0*mm"/>
+        <segmentation name="PbWO4_grid" type="CartesianGridXY" key_value="5"  grid_size_x="3.0*cm" grid_size_y="3.0*cm"/>
+      </segmentation>
+      <hits_collections>
+	<hits_collection name="ffiZDCSiHits"    key="slice" key_value="1"/>
+        <hits_collection name="ffiZDCPbWO4Hits" key="slice" key_value="5"/>
+      </hits_collections>
+      <id>system:8,layer:12,slice:12,x:32:-16,y:-16</id>  
     </readout>
   </readouts>
 </lccdd>
diff --git a/ip6/far_forward_ZDC_Hcal.xml b/ip6/far_forward_ZDC_Hcal.xml
index 41b673aceb3f70d5bb20f8e778c6de17c47b98b3..c42684e00cde82e678dd7c944823722156fa4966 100644
--- a/ip6/far_forward_ZDC_Hcal.xml
+++ b/ip6/far_forward_ZDC_Hcal.xml
@@ -1,56 +1,94 @@
 <lccdd>
   <comment>
     //////////////////////////////////////////////////
-    // Far Forward Ion Zero Degree Calorimeter - Hcal
-    // Si+W sampling
+    // Far Forward Ion Zero Degree Calorimeter
+    // Silicon/W for Hcal
     //////////////////////////////////////////////////
   </comment>        
 
-  <define>
-    <constant name="ffi_ZDC_HCAL_SiW_NRepeat"     value="20"/>
-    <constant name="ffi_ZDC_HCAL_SiPb_NRepeat"    value="12"/>
-    <constant name="ffi_ZDC_HCAL_PbScint_NRepeat" value="30"/>
-    <constant name="ffiZDCHcalTungstenThickness"  value="3.5 * mm"/>
-    <constant name="ffiZDCHcalSiliconThickness"   value="320.0 * um"/>
-    <constant name="ffiZDCHcalGlueThickness"      value="0.11 * mm"/>
-    <constant name="ffiZDCHcalFPCThickness"       value="0.28 * mm"/>
-    <constant name="ffiZDCHcalAirThickness"       value="1.0 * mm"/>
-    <constant name="ffiZDCHcalLeadThickness"      value="30.0 * mm"/>
-    <constant name="ffiZDCHcalScintThickness"     value="2.0 * mm"/>
-  </define>
-
   <detectors>
-    <detector id="ffi_ZDC_HCAL_ID" name="ffi_ZDC_HCAL" type="ffi_ZDC_HCAL" readout="ffi_ZDC_HCAL_Hits" vis="ffi_ZDC_HCAL_Vis">
+    <detector id="ffi_ZDC_HCAL_ID" name="ffi_ZDC_HCAL" type="ffi_ZDC_Sampling" readout="ffi_ZDC_HCAL_Hits" vis="ffi_ZDC_HCAL_Vis">
       <position x="ffi_ZDC_HCAL_x_pos" y="ffi_ZDC_HCAL_y_pos" z="ffi_ZDC_HCAL_z_pos"/>
       <rotation x="ffi_ZDC_HCAL_rotateX_angle" y="ffi_ZDC_HCAL_rotateY_angle" z="ffi_ZDC_HCAL_rotateZ_angle"/>
       <dimensions x="ffi_ZDC_HCAL_width" z="ffi_ZDC_HCAL_length"/>
-      <layer repeat="ffi_ZDC_HCAL_SiW_NRepeat">
-        <slice name="Tungsten_slice" material="TungstenDens24" thickness="ffiZDCHcalTungstenThickness" vis="AnlBlue"/>
-	<slice name="Air_slice"      material="Air"            thickness="ffiZDCHcalGlueThickness"     vis="AnlGold"/>
-	<slice name="Silicon_slice"  material="Silicon"        thickness="ffiZDCHcalSiliconThickness"  vis="AnlRed" sensitive="true"/>
-	<slice name="Air_slice"      material="Air"            thickness="ffiZDCHcalGlueThickness"     vis="AnlGold"/>
-	<slice name="Air_slice"      material="Air"            thickness="ffiZDCHcalFPCThickness"      vis="AnlGold"/>
-	<slice name="Air_slice"      material="Air"            thickness="ffiZDCHcalAirThickness"      vis="AnlGold"/>
-      </layer>
-      <layer repeat="ffi_ZDC_HCAL_SiPb_NRepeat">
-        <slice name="Lead_slice"    material="Pb"      thickness="ffiZDCHcalLeadThickness"    vis="BlueGreenVis"/>
-	<slice name="Air_slice"     material="Air"     thickness="ffiZDCHcalGlueThickness"    vis="AnlGold"/>
-	<slice name="Silicon_slice" material="Silicon" thickness="ffiZDCHcalSiliconThickness" vis="AnlRed" sensitive="true"/>
-	<slice name="Air_slice"     material="Air"     thickness="ffiZDCHcalGlueThickness"    vis="AnlGold"/>
-	<slice name="Air_slice"     material="Air"     thickness="ffiZDCHcalFPCThickness"     vis="AnlGold"/>
-	<slice name="Air_slice"     material="Air"     thickness="ffiZDCHcalAirThickness"     vis="AnlGold"/>
-      </layer>
-      <layer repeat="ffi_ZDC_HCAL_PbScint_NRepeat">
-        <slice name="Lead_slice"  material="Pb"           thickness="ffiZDCHcalLeadThickness"  vis="BlueGreenVis"/>
-        <slice name="Scint_slice" material="PlasticScint" thickness="ffiZDCHcalScintThickness" vis="AnlOrange" sensitive="true"/>
-	<slice name="Air_slice"   material="Air"          thickness="ffiZDCHcalAirThickness"   vis="AnlGold"/>
+      <layer repeat="ffi_ZDC_SiW_LG_Layer_NRepeat">
+        <slice name="Tungsten_slice"  material="TungstenDens24" thickness="ffi_ZDC_Tungsten_Thickness"  vis="AnlBlue"/>
+	<slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+	<slice name="Silicon_2_slice" material="Silicon"        thickness="ffi_ZDC_Silicon_2_Thickness" vis="AnlRed" sensitive="true"/>
+	<slice name="Glue_2_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_2_Thickness"    vis="AnlGold"/>
+	<slice name="FPC_slice"       material="Epoxy"          thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+	<slice name="Air_3_slice"     material="Air"            thickness="ffi_ZDC_Air_3_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_SiW_HG_Layer_NRepeat">
+        <slice name="Tungsten_slice"  material="TungstenDens24" thickness="ffi_ZDC_Tungsten_Thickness"  vis="AnlBlue"/>
+	<slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+        <slice name="Silicon_1_slice" material="Silicon"        thickness="ffi_ZDC_Silicon_1_Thickness" vis="AnlRed" sensitive="true"/>
+	<slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+	<slice name="FPC_slice"       material="Epoxy"          thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+	<slice name="Air_1_slice"     material="Air"            thickness="ffi_ZDC_Air_1_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_SiW_LG_Layer_NRepeat">
+        <slice name="Tungsten_slice"  material="TungstenDens24" thickness="ffi_ZDC_Tungsten_Thickness"  vis="AnlBlue"/>
+        <slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+        <slice name="Silicon_2_slice" material="Silicon"        thickness="ffi_ZDC_Silicon_2_Thickness" vis="AnlRed" sensitive="true"/>
+        <slice name="Glue_2_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_2_Thickness"    vis="AnlGold"/>
+        <slice name="FPC_slice"       material="Epoxy"          thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+        <slice name="Air_3_slice"     material="Air"            thickness="ffi_ZDC_Air_3_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_SiW_HG_Layer_NRepeat">
+        <slice name="Tungsten_slice"  material="TungstenDens24" thickness="ffi_ZDC_Tungsten_Thickness"  vis="AnlBlue"/>
+        <slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+        <slice name="Silicon_1_slice" material="Silicon"        thickness="ffi_ZDC_Silicon_1_Thickness" vis="AnlRed" sensitive="true"/>
+        <slice name="Glue_1_slice"    material="Epoxy"          thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+        <slice name="FPC_slice"       material="Epoxy"          thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+        <slice name="Air_1_slice"     material="Air"            thickness="ffi_ZDC_Air_1_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_Gap_NRepeat">
+        <slice name="Gap_slice" material="Air" thickness="ffi_ZDC_Gap_Thickness" vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_SiPb_NRepeat">
+        <slice name="Lead_slice"      material="Pb"      thickness="ffi_ZDC_Lead_Thickness"      vis="BlueGreenVis"/>
+        <slice name="Glue_1_slice"    material="Epoxy"   thickness="ffi_ZDC_Glue_1_Thickness"    vis="AnlGold"/>
+        <slice name="Silicon_2_slice" material="Silicon" thickness="ffi_ZDC_Silicon_2_Thickness" vis="AnlRed" sensitive="true"/>
+        <slice name="Glue_2_slice"    material="Epoxy"   thickness="ffi_ZDC_Glue_2_Thickness"    vis="AnlGold"/>
+        <slice name="FPC_slice"       material="Epoxy"   thickness="ffi_ZDC_FPC_Thickness"       vis="AnlGold"/>
+        <slice name="Air_3_slice"     material="Air"     thickness="ffi_ZDC_Air_3_Thickness"     vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_Gap_NRepeat">
+        <slice name="Gap_slice" material="Air" thickness="ffi_ZDC_Gap_Thickness" vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_PbScint_NRepeat">
+        <slice name="Lead_slice"  material="Pb"           thickness="ffi_ZDC_Lead_Thickness"  vis="BlueGreenVis"/>
+        <slice name="Scint_slice" material="PlasticScint" thickness="ffi_ZDC_Scint_Thickness" vis="AnlOrange" sensitive="true"/>
+	<slice name="Air_4_slice" material="Air"          thickness="ffi_ZDC_Air_4_Thickness" vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_Gap_NRepeat">
+        <slice name="Gap_slice" material="Air" thickness="ffi_ZDC_Gap_Thickness" vis="InvisibleNoDaughters"/>
+      </layer>
+      <layer repeat="ffi_ZDC_PbScint_NRepeat">
+        <slice name="Lead_slice"  material="Pb"           thickness="ffi_ZDC_Lead_Thickness"  vis="BlueGreenVis"/>
+        <slice name="Scint_slice" material="PlasticScint" thickness="ffi_ZDC_Scint_Thickness" vis="AnlOrange" sensitive="true"/>
+        <slice name="Air_4_slice" material="Air"          thickness="ffi_ZDC_Air_4_Thickness" vis="InvisibleNoDaughters"/>
       </layer>
     </detector>
   </detectors>
 
   <readouts>
     <readout name="ffi_ZDC_HCAL_Hits">
-      <segmentation type="CartesianGridXY" grid_size_x="1.0*cm" grid_size_y="1.0*cm" />
+      <segmentation type="MultiSegmentation" key="layer">
+        <segmentation name="Si_LG_grid" type="CartesianGridXY" key_min="1" key_max="20" grid_size_x="1.0*cm" grid_size_y="1.0*cm"/>
+        <segmentation name="Si_HG_grid" type="CartesianGridXY" key_value="21" grid_size_x="3.0*mm" grid_size_y="3.0*mm"/>
+        <segmentation name="Si_LG_grid" type="CartesianGridXY" key_min="22" key_max="41" grid_size_x="1.0*cm" grid_size_y="1.0*cm"/>
+        <segmentation name="Si_HG_grid" type="CartesianGridXY" key_value="42" grid_size_x="3.0*mm" grid_size_y="3.0*mm"/>
+        <segmentation name="Si_LG_grid" type="CartesianGridXY" key_min="44" key_max="55" grid_size_x="1.0*cm" grid_size_y="1.0*cm"/>
+        <segmentation name="Scint_grid" type="CartesianGridXY" key_min="57" key_max="71" grid_size_x="10.0*cm" grid_size_y="10.0*cm"/>
+        <segmentation name="Scint_grid" type="CartesianGridXY" key_min="73" key_max="87" grid_size_x="10.0*cm" grid_size_y="10.0*cm"/>
+      </segmentation>
+      <hits_collections>
+        <hits_collection name="ffiZDCSiWHits"   key="layer" key_min="1" key_max="42"/>
+        <hits_collection name="ffiZDCSiPbHits"  key="layer" key_min="44" key_max="55"/>
+        <hits_collection name="ffiZDCScintHits" key="layer" key_min="57" key_max="87"/>
+      </hits_collections>
       <id>system:8,layer:12,slice:12,x:32:-16,y:-16</id>  
     </readout>
   </readouts>
diff --git a/ip6/far_forward_detectors.xml b/ip6/far_forward_detectors.xml
index 0e557ef17fc5fb437b9d2db73b0f93e830f9c6d4..ddceac38915b1a80df88c6a2b9ae1e7293fd8acc 100644
--- a/ip6/far_forward_detectors.xml
+++ b/ip6/far_forward_detectors.xml
@@ -4,32 +4,72 @@
 
   <define>
     <comment>
-      ----------------------
-      Zero Degree Parameters
-      ----------------------
+      -------------------------------------------
+      Zero Degree Calorimeter General Parameters
+      -------------------------------------------
     </comment>
-    <constant name="ffi_ZDC_ECAL_z_pos"            value="3720.0 * cm"/>
-    <constant name="ffi_ZDC_ECAL_x_pos"            value="ffi_ZDC_ECAL_z_pos * ionCrossingAngle"/>
-    <constant name="ffi_ZDC_ECAL_y_pos"            value="0.0 * cm"/>
-    <constant name="ffi_ZDC_ECAL_rotateX_angle"    value="0.0 * rad"/>
-    <constant name="ffi_ZDC_ECAL_rotateY_angle"    value="-0.0125 * rad"/>
-    <constant name="ffi_ZDC_ECAL_rotateZ_angle"    value="0.0 * rad"/>
-    <constant name="ffi_ZDC_ECAL_module_width"     value="3.0 * cm"/>
-    <constant name="ffi_ZDC_ECAL_module_thickness" value="20.0 * cm"/>
-    <constant name="ffi_ZDC_ECAL_module_gap"       value="0.000001 * mm"/>
-    <constant name="ffi_ZDC_ECAL_module_ntower"    value="20"/>
-    <constant name="ffi_ZDC_ECAL_width"            value="(ffi_ZDC_ECAL_module_width + ffi_ZDC_ECAL_module_gap) * ffi_ZDC_ECAL_module_ntower + 2.0 * cm"/>
-    <constant name="ffi_ZDC_ECAL_thickness"        value="ffi_ZDC_ECAL_module_thickness + 1.0 * cm"/>
-
-    <constant name="ffi_ZDC_HCAL_x_pos"            value="ffi_ZDC_ECAL_x_pos"/>
-    <constant name="ffi_ZDC_HCAL_y_pos"            value="ffi_ZDC_ECAL_y_pos"/>
-    <constant name="ffi_ZDC_HCAL_z_pos"            value="ffi_ZDC_ECAL_z_pos + ffi_ZDC_ECAL_thickness + 1.0 * cm"/>
-    <constant name="ffi_ZDC_HCAL_rotateX_angle"    value="ffi_ZDC_ECAL_rotateX_angle"/>
-    <constant name="ffi_ZDC_HCAL_rotateY_angle"    value="ffi_ZDC_ECAL_rotateY_angle"/>
-    <constant name="ffi_ZDC_HCAL_rotateZ_angle"    value="ffi_ZDC_ECAL_rotateZ_angle"/>
-    <constant name="ffi_ZDC_HCAL_width"            value="ffi_ZDC_ECAL_module_width * ffi_ZDC_ECAL_module_ntower"/>
-    <constant name="ffi_ZDC_HCAL_length"           value="200.0 * cm"/>
+    <constant name="ffi_ZDC_z_pos"         value="3710.0 * cm"/>
+    <constant name="ffi_ZDC_x_pos"         value="ffi_ZDC_z_pos * ionCrossingAngle"/>
+    <constant name="ffi_ZDC_y_pos"         value="0.0 * cm"/>
+    <constant name="ffi_ZDC_rotateX_angle" value="0.0 * rad"/>
+    <constant name="ffi_ZDC_rotateY_angle" value="-0.0125 * rad"/>
+    <constant name="ffi_ZDC_rotateZ_angle" value="0.0 * rad"/>
+    <constant name="ffi_ZDC_width"         value="60.0 * cm"/>
+    <constant name="ffi_ZDC_length"        value="200.0 * cm"/>
 
+    <comment>
+      -------------------------------
+      Zero Degree Calorimeter - ECAL
+      -------------------------------
+    </comment>
+    <constant name="ffi_ZDC_ECAL_z_pos"           value="ffi_ZDC_z_pos"/>
+    <constant name="ffi_ZDC_ECAL_x_pos"           value="ffi_ZDC_ECAL_z_pos * ionCrossingAngle"/>
+    <constant name="ffi_ZDC_ECAL_y_pos"           value="ffi_ZDC_y_pos"/>
+    <constant name="ffi_ZDC_ECAL_rotateX_angle"   value="ffi_ZDC_rotateX_angle"/>
+    <constant name="ffi_ZDC_ECAL_rotateY_angle"   value="ffi_ZDC_rotateY_angle"/>
+    <constant name="ffi_ZDC_ECAL_rotateZ_angle"   value="ffi_ZDC_rotateZ_angle"/>
+    <constant name="ffi_ZDC_ECAL_width"           value="ffi_ZDC_width"/>
+
+    <constant name="ffi_ZDC_SiPbWO4_NRepeat"      value="2"/>
+    
+    <constant name="ffi_ZDC_Silicon_1_Thickness"  value="300.0 * um"/>
+    <constant name="ffi_ZDC_PbWO4_Thickness"      value="100.0 * mm"/>
+    <constant name="ffi_ZDC_Glue_1_Thickness"     value="0.11 * mm"/>
+    <constant name="ffi_ZDC_FPC_Thickness"        value="0.28 * mm"/>
+    <constant name="ffi_ZDC_Air_1_Thickness"      value="1.2 * mm"/>
+    <constant name="ffi_ZDC_Air_2_Thickness"      value="3.0 * cm"/>
+
+    <constant name="ffi_ZDC_ECAL_layer_thickness" value="ffi_ZDC_Silicon_1_Thickness + ffi_ZDC_Glue_1_Thickness + ffi_ZDC_FPC_Thickness +                                                          ffi_ZDC_Air_1_Thickness + ffi_ZDC_PbWO4_Thickness + ffi_ZDC_Air_2_Thickness"/>
+    <constant name="ffi_ZDC_ECAL_length"          value="ffi_ZDC_SiPbWO4_NRepeat * ffi_ZDC_ECAL_layer_thickness"/>
+
+    <comment>
+      -------------------------------
+      Zero Degree Calorimeter - HCAL
+      -------------------------------
+    </comment>
+    <constant name="ffi_ZDC_HCAL_x_pos"           value="ffi_ZDC_ECAL_x_pos"/>
+    <constant name="ffi_ZDC_HCAL_y_pos"           value="ffi_ZDC_ECAL_y_pos"/>
+    <constant name="ffi_ZDC_HCAL_z_pos"           value="ffi_ZDC_ECAL_z_pos + ffi_ZDC_ECAL_length"/>
+    <constant name="ffi_ZDC_HCAL_rotateX_angle"   value="ffi_ZDC_rotateX_angle"/>
+    <constant name="ffi_ZDC_HCAL_rotateY_angle"   value="ffi_ZDC_rotateY_angle"/>
+    <constant name="ffi_ZDC_HCAL_rotateZ_angle"   value="ffi_ZDC_rotateZ_angle"/>
+    <constant name="ffi_ZDC_HCAL_width"           value="ffi_ZDC_width"/>
+    <constant name="ffi_ZDC_HCAL_length"          value="ffi_ZDC_length"/>
+
+    <constant name="ffi_ZDC_SiW_LG_Layer_NRepeat" value="20"/>
+    <constant name="ffi_ZDC_SiW_HG_Layer_NRepeat" value="1"/>
+    <constant name="ffi_ZDC_SiPb_NRepeat"         value="12"/>
+    <constant name="ffi_ZDC_PbScint_NRepeat"      value="15"/>
+    <constant name="ffi_ZDC_Gap_NRepeat"          value="1"/>
+    
+    <constant name="ffi_ZDC_Silicon_2_Thickness"  value="320.0 * um"/>
+    <constant name="ffi_ZDC_Tungsten_Thickness"   value="3.5 * mm"/>
+    <constant name="ffi_ZDC_Glue_2_Thickness"     value="0.13 * mm"/>
+    <constant name="ffi_ZDC_Air_3_Thickness"      value="1.0 * mm"/>
+    <constant name="ffi_ZDC_Air_4_Thickness"      value="0.0013 * mm"/>
+    <constant name="ffi_ZDC_Lead_Thickness"       value="30.0 * mm"/>
+    <constant name="ffi_ZDC_Scint_Thickness"      value="2.0 * mm"/>
+    <constant name="ffi_ZDC_Gap_Thickness"        value="2.0 * cm"/>
   </define>
 
   <limits>
@@ -41,9 +81,8 @@
   <display>
   </display>
 
-
-  <include ref="far_forward_ZDC_Ecal.xml" />
-  <include ref="far_forward_ZDC_Hcal.xml" />
+  <include ref="far_forward_ZDC_Ecal.xml"/>
+  <include ref="far_forward_ZDC_Hcal.xml"/>
   
   <detectors>
   </detectors>
diff --git a/src/ZeroDegreeCalorimeterHcal_geo.cpp b/src/ZeroDegreeCalorimeterSampling_geo.cpp
similarity index 97%
rename from src/ZeroDegreeCalorimeterHcal_geo.cpp
rename to src/ZeroDegreeCalorimeterSampling_geo.cpp
index 7df26f3e93025cc032cd3a0359cbeab00a6d561b..e45301682b06971a051f427d29e8bade39431a8c 100644
--- a/src/ZeroDegreeCalorimeterHcal_geo.cpp
+++ b/src/ZeroDegreeCalorimeterSampling_geo.cpp
@@ -28,9 +28,6 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
 
   Material   Vacuum     = desc.material("Vacuum");
 
-  int layer_num = 1;
-  int slice_num = 1;
-
   double totWidth = Layering(x_det).totalThickness();
   
   Box envelope (Width/2.0, Width/2.0, totWidth/2.0);
@@ -39,7 +36,8 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
   PlacedVolume pv;
 	
   xml_comp_t x_layer = x_det.child(_U(layer));
-
+  
+  int layer_num = 1;
   // Read layers
   for(xml_coll_t c(x_det,_U(layer)); c; ++c) {
     xml_comp_t x_layer = c;
@@ -55,6 +53,7 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
       string layer_name = detName + _toString(layer_num,"_layer%d");
       Volume layer_vol(layer_name,Box(Width/2.0, Width/2.0,layerWidth/2.0), Vacuum);
 
+      int slice_num = 1;
       // Loop over slices
       for(xml_coll_t l(x_layer,_U(slice)); l; ++l) {
 	xml_comp_t x_slice = l;
@@ -92,4 +91,4 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
 
   return det;
 }
-DECLARE_DETELEMENT(ffi_ZDC_HCAL, createDetector)
+DECLARE_DETELEMENT(ffi_ZDC_Sampling, createDetector)