diff --git a/DDExamples/ILDExDet/compact/Tesla.xml b/DDExamples/ILDExDet/compact/Tesla.xml
index e2c9ae84a92751ea6e1e88d0c1b29627e83c13c3..f4e10a1473c4ab6482e21a66a7220d2a8ea93d91 100644
--- a/DDExamples/ILDExDet/compact/Tesla.xml
+++ b/DDExamples/ILDExDet/compact/Tesla.xml
@@ -50,6 +50,7 @@
         <constant name="Hcal_R_max"                            value="3000*mm"/>
         <constant name="Hcal_Ecal_gap"                         value="26*mm"/>
         <constant name="Yoke_barrel_inner_radius"              value="4450*mm"/>
+        <constant name="Yoke_symmetry"                         value="8"/>
 
 
         <!--                    VXD03 parameters                       -->
@@ -68,7 +69,7 @@
         <constant name="VXD_support_ladder_thickness"          value="0.134*mm"/>
         <constant name="VXD_support_structure_thickness"       value="VXD_support_ladder_thickness/2."/>
         <constant name="VXD_support_endplate_half_z"           value="VXD_shell_half_z"/>
-        <constant name="VXD_support_endplate_inner_radius"     value="VXD_radius_r5+VXD_layer_gap+5.0*mm"/>
+        <constant name="VXD_support_endplate_inner_radius"     value="23.2*mm"/>
         <constant name="VXD_support_endplate_inner_radius_L1"  value="VXD_inner_radius-0.3*mm"/>
         <constant name="VXD_support_endplate_outer_radius_L1"  value="VXD_inner_radius+VXD_layer_gap+2.0*mm"/>
         <constant name="VXD_side_band_electronics_width"       value="0.5*mm"/>
@@ -111,13 +112,14 @@
         <constant name="Ecal_Si_thickness"                     value="0.5*mm"/>
 
         <constant name="Ecal_EC_ring_gap"                      value="10*mm"/>
+        <constant name="Ecal_cables_gap"                       value="100*mm"/>
 
         <constant name="Ecal_Barrel_halfZ"                     value="2350*mm"/>
-        <constant name="Ecal_barrel_number_of_towers"          value="5"/>
+        <constant name="Ecal_barrel_number_of_towers"          value="7"/>
         <constant name="Ecal_endcap_extra_size"                value="60.8*mm"/>
-        <constant name="Ecal_endcap_center_box_size"           value="800*mm"/>
+        <constant name="Ecal_endcap_center_box_size"           value="600*mm"/>
         <constant name="Ecal_H_fiber_thickness"                value="0.30*mm"/>
-        <constant name="Ecal_cells_size"                       value="4.9*mm"/>
+        <constant name="Ecal_cells_size"                       value="10*mm"/>
         <constant name="Ecal_endcap_zmax"                      value="1825*mm"/>
         <constant name="Ecal_endcap_zmin"                      value="2329*mm"/>
         <constant name="Ecal_nlayers1"                         value="20"/>
@@ -127,25 +129,63 @@
         <constant name="Ecal_radiator_layers_set2_thickness"   value="4.2*mm"/>
         <constant name="Ecal_radiator_layers_set3_thickness"   value="0*mm"/>
 
+        <!--                  hcal04 parameters                      -->
+        <constant name="Hcal_radiator_thickness"               value="20*mm"/>
+        <constant name="Hcal_stave_gaps"                       value="3*mm"/>
+        <constant name="Hcal_back_plate_thickness"             value="30*mm"/>
+        <constant name="Hcal_barrel_end_module_type"           value="2"/>
+        <constant name="Hcal_endcap_cables_gap"                value="214*mm"/>
+        <constant name="Hcal_endcap_center_box_size"           value="600*mm"/>
+        <constant name="Hcal_endcap_module_dim_z"              value="1010*mm"/>
+
+        <constant name="Hcal_lateral_structure_thickness"      value="10*mm"/>
+        <constant name="Hcal_lateral_plate_thickness"          value="Hcal_lateral_structure_thickness"/>
+        <constant name="Hcal_nlayers"                          value="8"/>
+        <constant name="Hcal_outer_radius"                     value="3000*mm"/>
+        <constant name="Hcal_modules_gap"                      value="2*mm"/>
+        <constant name="Hcal_fiber_gap"                        value="1.5*mm"/>
+        <constant name="Hcal_cells_size"                       value="10*mm"/>
+
+        <constant name="Hcal_chamber_thickness"                value="6.5*mm"/>
+        <constant name="Hcal_total_z_size"                     value="140*mm + 2*TPC_Ecal_Hcal_barrel_halfZ"/>
+        <constant name="Hcal_normal_dim_z"                     value="Hcal_total_z_size/5*1080/1120"/>
+        <constant name="Hcal_top_end_dim_z"                    value="(Hcal_total_z_size-3*Hcal_normal_dim_z)/2"/>
+        <constant name="Hcal_start_z"                          value="1.5*Hcal_normal_dim_z + Hcal_top_end_dim_z + 2*Hcal_modules_gap + Hcal_endcap_cables_gap"/>
+        <constant name="Hcal_total_dim_y"                      value="Hcal_nlayers*(Hcal_radiator_thickness+Hcal_chamber_thickness) + Hcal_back_plate_thickness"/>
+        <constant name="Hcal_inner_radius"                     value="Ecal_outer_radius + Hcal_Ecal_gap"/>
+        <constant name="Hcal_module_radius"                    value="Hcal_inner_radius+Hcal_total_dim_y"/>
+
+        <constant name="Hcal_y_dim2_for_x"                     value="Hcal_module_radius*(1-cos(pi/8)) - Hcal_stave_gaps"/>
+        <constant name="Hcal_y_dim1_for_x"                     value="Hcal_total_dim_y - Hcal_y_dim2_for_x"/>
+        <constant name="Hcal_bottom_dim_x"                     value="2*Hcal_y_dim1_for_x*tan(pi/8) - Hcal_stave_gaps"/>
+        <constant name="Hcal_middle_dim_x"                     value="Hcal_bottom_dim_x+2*Hcal_y_dim1_for_x*tan(pi/8)"/>
+        <constant name="Hcal_top_dim_x"                        value="Hcal_middle_dim_x-2*Hcal_y_dim2_for_x/tan(pi/8)"/>
+
+        <constant name="Hcal_y_dim1_for_z"                     value="134.8"/>
+        <constant name="Hcal_y_dim2_for_z"                     value="(Hcal_top_end_dim_z-Hcal_normal_dim_z)*tan(39.28/2/pi)"/>
+        <constant name="Hcal_y_dim3_for_z"                     value="Hcal_total_dim_y-Hcal_y_dim1_for_z-Hcal_y_dim2_for_z"/>
+        <constant name="Hcal_regular_chamber_dim_z"            value="Hcal_normal_dim_z - 2*(Hcal_lateral_plate_thickness)"/>
+
+
         <!--                  Tube01 parameters                      -->
-        <constant name="Tube_central_thickness"                value="0.5*mm"/>
-        <constant name="Tube_central_zhalf"                    value="61*mm"/>
-        <constant name="Tube_central_inner_radius"             value="10*mm"/>
-        <constant name="Tube_ends_thickness"                   value="1*mm"/>
-        <constant name="Tube_ends_start"                       value="233.372*mm"/>
-        <constant name="Tube_ends_end"                         value="3550*mm"/>
-        <constant name="Tube_strips_gap"                       value="1*mm"/>
-        <constant name="Tube_strips_tickness"                  value="0.755*mm"/>
-        <constant name="Tube_lateral_start"                    value="150*mm"/>
-        <constant name="Tube_lateral_radius"                   value="20*mm"/>
-        <constant name="Tube_lateral_tickness"                 value="1*mm"/>
-        <constant name="Tube_lateral_z1"                       value="2850*mm"/>
-        <constant name="Tube_lateral_z2"                       value="3040*mm"/>
-        <constant name="Tube_lateral_z3"                       value="3620*mm"/>
-        <constant name="Tube_lateral_z4"                       value="7000*mm"/>
-        <constant name="Tube_lateral_r1"                       value="244.245*mm"/>
-        <constant name="Tube_lateral_r2"                       value="70*mm"/>
-        <constant name="Tube_lateral_r3"                       value="12*mm"/>
+        <constant name="TUBE_central_thickness"                value="0.5*mm"/>
+        <constant name="TUBE_central_zhalf"                    value="61*mm"/>
+        <constant name="TUBE_central_inner_radius"             value="10*mm"/>
+        <constant name="TUBE_ends_thickness"                   value="1*mm"/>
+        <constant name="TUBE_ends_start"                       value="233.372*mm"/>
+        <constant name="TUBE_ends_end"                         value="3550*mm"/>
+        <constant name="TUBE_strips_gap"                       value="1*mm"/>
+        <constant name="TUBE_strips_tickness"                  value="0.755*mm"/>
+        <constant name="TUBE_lateral_start"                    value="150*mm"/>
+        <constant name="TUBE_lateral_radius"                   value="20*mm"/>
+        <constant name="TUBE_lateral_tickness"                 value="1*mm"/>
+        <constant name="TUBE_lateral_z1"                       value="2850*mm"/>
+        <constant name="TUBE_lateral_z2"                       value="3040*mm"/>
+        <constant name="TUBE_lateral_z3"                       value="3620*mm"/>
+        <constant name="TUBE_lateral_z4"                       value="7000*mm"/>
+        <constant name="TUBE_lateral_r1"                       value="244.245*mm"/>
+        <constant name="TUBE_lateral_r2"                       value="70*mm"/>
+        <constant name="TUBE_lateral_r3"                       value="12*mm"/>
 
         <!--                   SIT parameters                        -->
         <constant name="Sit_layer1_inner_radius"               value="160*mm"/>
@@ -190,7 +230,6 @@
         <constant name="Yoke_barrel_inner_radius"              value="4450*mm"/>
         <constant name="Yoke_thickness"                        value="2000*mm"/>
         <constant name="Yoke_endcap_inner_radius"              value="240.50*mm"/>
-        <constant name="Yoke_symmetry"                         value="8"/>
         <constant name="Yoke_Barrel_Half_Z"                    value="TPC_Ecal_Hcal_barrel_halfZ+Coil_extra_size+Yoke_thickness+20*mm"/>
 
     </define>
@@ -242,6 +281,12 @@
             <limit name="step_length_max" particles="*" value="5.0" unit="mm" />
         </limitset>
 
+        <limitset name="HcalLimits">
+            <limit name="step_length_max" particles="*" 
+                   value="min(Hcal_cells_size,Hcal_regular_chamber_dim_z/floor(Hcal_regular_chamber_dim_z/Hcal_cells_size))" 
+                   unit="mm" />
+        </limitset>
+
     </limits>
 
     <display>
@@ -262,17 +307,24 @@
       <vis name="LcalAbsorberVis"      alpha="1.0" r="0"   g="0"   b="1"        drawingStyle="solid"     showDaughters="true" visible="true"/>
       <vis name="LcalActiveVis"        alpha="1.0" r="1"   g="0"   b="0"        drawingStyle="wireframe"     showDaughters="true" visible="true"/>
 
-      <vis name="EcalEndcapVis"        alpha="1.0" r="0" g="1" b="0"            drawingStyle="wireframe" showDaughters="true"  visible="false"/>
-      <vis name="EcalLayerVis"         alpha="1.0" r="1" g="0" b="0"            drawingStyle="solid"     showDaughters="true"  visible="false"/>
-      <vis name="EcalPCBVis"           alpha="1.0" r="0.5" g="0.5" b="0"        drawingStyle="wireframe" showDaughters="true"  visible="true"/>
-      <vis name="EcalRadiatorVis"      alpha="1.0" r="0" g="1" b="0"            drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalTowerVis"         alpha="1.0" r="0" g="0.1" b="0.9"        drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalRingVis"          alpha="1.0" r="0" g="0" b="1"            drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalWaferVis"         alpha="1.0" r=".7" g=".7" b=".7"         drawingStyle="solid"                           visible="true"/>
-      <vis name="EcalSlabVis"          alpha="1.0" r="1" g="1" b="1"            drawingStyle="wireframe" showDaughters="true"  visible="true"/>
-      <vis name="EcalSlabGroundVis"    alpha="1.0" r="0" g="0" b="1"            drawingStyle="wireframe"                       visible="true"/>
-      <vis name="EcalSlabSensitiveVis" alpha="1.0" r=".5" g=".5" b=".5"         drawingStyle="wireframe"                       visible="false"/>
-
+      <vis name="EcalVis"              alpha="1.0" r="0.8"  g="0.4"  b="0"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalPCBVis"           alpha="1.0" r="0.5"  g="0.5"  b="0"      drawingStyle="wireframe" showDaughters="true"  visible="true"/>
+      <vis name="EcalRadiatorVis"      alpha="1.0" r="0.2"  g="0.5"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalTowerVis"         alpha="1.0" r="0"    g="0.1"  b="0.9"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalRingVis"          alpha="1.0" r="0"    g="0"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalWaferVis"         alpha="1.0" r=".7"   g=".7"   b=".7"     drawingStyle="solid"                           visible="false"/>
+      <vis name="EcalSlabVis"          alpha="1.0" r="1"    g="1"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalSlabGroundVis"    alpha="1.0" r="0"    g="0"    b="1"      drawingStyle="wireframe" showDaughters="true"  visible="true"/>
+      <vis name="EcalSlabSensitiveVis" alpha="1.0" r="0.5"  g="0.5"  b="0.5"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+
+      <vis name="HcalVis"              alpha="1.0" r="0.8"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalChamberVis"       alpha="1.0" r="0"    g="1"    b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalModuleVis"        alpha="1.0" r="0"    g="0.6"  b="0.6"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalEndModuleVis"     alpha="1.0" r="1"    g="0"    b="0.5"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcGasVis"        alpha="1.0" r="0.1"  g="0"    b="0.8"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcGlassVis"      alpha="1.0" r="0.8"  g="0"    b="0"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcSpacerVis"     alpha="1.0" r="1"    g="1"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalScintillatorVis"  alpha="1.0" r="0.8"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
 
       <vis name="TubeCentralVis"       alpha="1.0" r="0.0" g="0.75" b="0.5"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
       <vis name="TubeConeVis"          alpha="1.0" r="0.0" g="0.6"  b="0.0"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
@@ -311,36 +363,36 @@
         <!--                  tube01 parameters        -->
         <detector id="1" name="Beampipe" type="Tesla_tube01" material="Beryllium" vis="TubeBeampipeVis">
 
-          <central_tube id="0" thickness="Tube_central_thickness" 
-                               zhalf="Tube_central_zhalf" 
-                               inner_r="Tube_central_inner_radius" 
+          <central_tube id="0" thickness="TUBE_central_thickness" 
+                               zhalf="TUBE_central_zhalf" 
+                               inner_r="TUBE_central_inner_radius" 
                                vis="TubeCentralVis"/>
-          <ends   thickness="Tube_ends_thickness" zmin="Tube_ends_start" zmax="Tube_ends_end" vis="TubeConeVis"/>
-          <strips gap="Tube_strips_gap"
-                               thickness="Tube_strips_tickness"
+          <ends   thickness="TUBE_ends_thickness" zmin="TUBE_ends_start" zmax="TUBE_ends_end" vis="TubeConeVis"/>
+          <strips gap="TUBE_strips_gap"
+                               thickness="TUBE_strips_tickness"
                                material="Kapton" 
                                vis="TubeStripsVis"/>
           <vacuum vis="TubeVacuumVis"/>
 
-          <lateral_tubes thickness="Tube_lateral_tickness" 
-                         dz="(Tube_lateral_z1-Tube_lateral_r3+Tube_ends_thickness)/2.0" 
-                         zmin="Tube_lateral_start" 
-                         inner_r="Tube_lateral_radius">
-             <cone id="1" z="(Tube_lateral_z2 - Tube_lateral_z1)/2.0" 
-                          rmin="Tube_lateral_r1" 
-                          rmax="Tube_lateral_r1+Tube_ends_thickness"/>
-             <cone id="2" z="Tube_ends_thickness/2.0"
-                          rmin="Tube_lateral_r2" 
-                          rmax="Tube_lateral_r1+Tube_ends_thickness"/>
-             <cone id="3" z="(Tube_lateral_z3-Tube_lateral_z2)/2.0"
-                          rmin="Tube_lateral_r2" 
-                          rmax="Tube_lateral_r2+Tube_ends_thickness"/>
-             <cone id="4" z="Tube_ends_thickness/2.0"
-                          rmin="Tube_lateral_r3"
-                          rmax="Tube_lateral_r2+Tube_ends_thickness"/>
-             <cone id="5" z="(Tube_lateral_z4-Tube_lateral_z3)/2.0"
-                          rmin="Tube_lateral_r3" 
-                          rmax="Tube_lateral_r3+Tube_ends_thickness"/>
+          <lateral_tubes thickness="TUBE_lateral_tickness" 
+                         dz="(TUBE_lateral_z1-TUBE_lateral_r3+TUBE_ends_thickness)/2.0" 
+                         zmin="TUBE_lateral_start" 
+                         inner_r="TUBE_lateral_radius">
+             <cone id="1" z="(TUBE_lateral_z2 - TUBE_lateral_z1)/2.0" 
+                          rmin="TUBE_lateral_r1" 
+                          rmax="TUBE_lateral_r1+TUBE_ends_thickness"/>
+             <cone id="2" z="TUBE_ends_thickness/2.0"
+                          rmin="TUBE_lateral_r2" 
+                          rmax="TUBE_lateral_r1+TUBE_ends_thickness"/>
+             <cone id="3" z="(TUBE_lateral_z3-TUBE_lateral_z2)/2.0"
+                          rmin="TUBE_lateral_r2" 
+                          rmax="TUBE_lateral_r2+TUBE_ends_thickness"/>
+             <cone id="4" z="TUBE_ends_thickness/2.0"
+                          rmin="TUBE_lateral_r3"
+                          rmax="TUBE_lateral_r2+TUBE_ends_thickness"/>
+             <cone id="5" z="(TUBE_lateral_z4-TUBE_lateral_z3)/2.0"
+                          rmin="TUBE_lateral_r3" 
+                          rmax="TUBE_lateral_r3+TUBE_ends_thickness"/>
           </lateral_tubes>
         </detector>
 <!--
@@ -395,7 +447,7 @@
 --> 
 
         <!--                  sit00 parameters        -->
-        <detector id="3" name="SIT" type="Tesla_sit00" vis="SitVis">
+        <detector id="3" name="SIT" type="Tesla_sit00" readout="FTDHits" vis="SitVis">
           <layer id="1" inner_r="Sit_layer1_inner_radius"
                         zhalf="Sit_layer1_zhalf" 
                         thickness="Sit_layer1_thickness"
@@ -411,7 +463,7 @@
 --> 
 
         <!--                  ftd01 parameters        -->
-        <detector id="4" name="FTD" type="Tesla_ftd01">
+        <detector id="4" name="FTD" type="Tesla_ftd01" readout="FTDHits">
            <cylinder thickness="Ftd_total_cylinder_thickness"
                      material="Kapton" 
                      vis="FtdCylinderVis"/>
@@ -486,11 +538,13 @@
                       outer_r="TPC_outer_radius-TPC_sensitive_outer_gap" 
                       number="(int)((TPC_outer_radius-TPC_sensitive_outer_gap - TPC_inner_radius+TPC_sensitive_inner_gap + 1*mm) / 6.2*mm)"
                       material="Argon"
+                      readout="TPCHits"
                       vis="TPCChamberVis"/>
           <fch        inner_r="TPC_inner_radius"
                       outer_r="TPC_outer_radius-90*mm" 
                       thickness="TPC_fch_thickness"
                       material="silicon_2.33gccm"
+                      readout="TPCfchHits"
                       vis="TPCFchVis"/>
         </detector>
 
@@ -523,23 +577,33 @@
 
         <!--                  SEcal03 parameters
         -->
-<!--
-        <detector id="10" name="ECAL" type="Tesla_SEcal03"
-          inner_r="TPC_outer_radius+Ecal_TPC_gap"
-          lateral_face_thickness="Ecal_lateral_face_thickness"
-          fiber_thickness="Ecal_fiber_thickness"
-          guard_ring_size="Ecal_guard_ring_size"
-          cell_size="Ecal_cell_size"
-          alveolus_gap="Ecal_Alveolus_Air_Gap"
-        >
-          <support   thickness="Ecal_support_thickness"/>
-          <front     thickness="Ecal_front_face_thickness"/>
+
+        <detector id="10" name="ECAL" type="Tesla_SEcal03" limits="EcalLimits" vis="EcalVis">
+          <param lateral_face_thickness="Ecal_lateral_face_thickness"
+                 fiber_thickness="Ecal_fiber_thickness"
+                 guard_ring_size="Ecal_guard_ring_size"
+                 cell_size="Ecal_cell_size"
+                 alveolus_gap="Ecal_Alveolus_Air_Gap"
+                 crossing_angle="ILC_Main_Crossing_Angle"
+                 cables_gap="Ecal_cables_gap"
+                 front_face_thickness="Ecal_front_face_thickness"
+                 support_thickness="Ecal_support_thickness"
+               />
           <pcbshield thickness="Ecal_Slab_PCB_thickness + Ecal_Slab_copper_thickness + Ecal_Slab_shield_thickness" vis="EcalPCBVis" material="G10"/>
-          <barrel    zhalf="Ecal_Barrel_halfZ" towers="Ecal_barrel_number_of_towers"/>
+          <barrel    inner_r="TPC_outer_radius+TPC_Ecal_gap"
+                     zhalf="Ecal_Barrel_halfZ" 
+                     towers="Ecal_barrel_number_of_towers"
+                     radiatorMaterial="tungsten_19.3gccm"
+                     material="G10"
+                     readout="EcalBarrelHits"
+                     vis="EcalVis"/>
           <endcap    inner_r="Lcal_outer_radius + Ecal_Lcal_ring_gap"
                      ring_gap="Ecal_EC_ring_gap"
                      extra_size="Ecal_endcap_extra_size"
-                     center_box_size="Ecal_endcap_center_box_size"/>
+                     center_box_size="Ecal_endcap_center_box_size"
+                     readout="EcalEndcapHits"
+                     ring_readout="EcalEndcapRingHits"
+                     vis="EcalVis"/>
 
           <layer id="1" repeat="Ecal_nlayers1" thickness="Ecal_radiator_layers_set1_thickness" material="tungsten_19.3gccm"/>
           <layer id="2" repeat="Ecal_nlayers2" thickness="Ecal_radiator_layers_set2_thickness" material="tungsten_19.3gccm"/>
@@ -553,7 +617,208 @@
           </slab>
         </detector>
 
--->
+
+        <!--                  Hcal04 description
+        -->
+
+        <detector id="9" name="Hcal" type="Tesla_hcal04" limits="HcalLimits" vis="HcalVis">
+           <param  radiator_thickness="Hcal_radiator_thickness"
+                   radiator_material="Iron"
+                   sensitive_model="scintillator"
+                   fiber_gap="Hcal_fiber_gap"
+                   chamber_vis="HcalChamberVis"
+           />
+           <rpc cables_gap="Hcal_endcap_cables_gap">
+                <radiator thickness="" material="G10"/>
+                <gas      thickness="" material="RPCGAS1" vis="HcalRpcGasVis"/>
+                <glass    thickness="" material="pyrex"   vis="HcalRpcGlassVis"/>
+           </rpc>
+           <scintillator material="Polystyrene" vis="HcalScintillatorVis"/>
+           
+           <barrel    end_module_type="Hcal_barrel_end_module_type"
+                      center_box_size="Hcal_endcap_center_box_size"
+                      num_layer="Hcal_nlayers"
+                      chamber_thickness="Hcal_chamber_thickness" 
+                      inner_r="Hcal_inner_radius"
+                            >
+            <module dim_z="1080*mm"                  
+                    chamber_dim_z="1060*mm"
+                    module_y_offset="2415.0*mm"
+                    middle_dim_x="2238.81*mm"
+                    bottom_dim_x="1579.3*mm"
+                    top_dim_x="1206.01*mm"
+                    y_dim1_for_x="796.1*mm"
+                    y_dim2_for_x="213.9*mm"
+                    cell_dim_x="Hcal_cells_size"
+                    cell_dim_z="Hcal_regular_chamber_dim_z / floor(Hcal_regular_chamber_dim_z/Hcal_cells_size)"
+                    readout="HcalRegularHits"
+                    vis="HcalModuleVis"/>
+            <end_module y_dim3_for_z="793.409"
+                        y_dim2_for_z="81.7908"
+                        y_dim1_for_z="134.8"
+                        top_end_dim_z="1180.0"
+                        readout="HcalEndModuleHits"
+                        vis="HcalModuleVis"/>
+            <layers>
+              <layer id="1" y_offset="-483.75" dim_x="1590.0"/>
+              <layer id="2" y_offset="-459.25" dim_x="1610.0"/>
+              <layer id="3" y_offset="-434.75" dim_x="1630.0"/>
+              <layer id="4" y_offset="-410.25" dim_x="1650.0"/>
+              <layer id="5" y_offset="-385.75" dim_x="1670.0"/>
+              <layer id="6" y_offset="-361.25" dim_x="1690.0"/>
+              <layer id="7" y_offset="-336.75" dim_x="1710.0"/>
+              <layer id="8" y_offset="-312.25" dim_x="1730.0"/>
+              <layer id="9" y_offset="-287.75" dim_x="1750.0"/>
+              <layer id="10" y_offset="-263.25" dim_x="1770.0"/>
+              <layer id="11" y_offset="-238.75" dim_x="1790.0"/>
+              <layer id="12" y_offset="-214.25" dim_x="1810.0"/>
+              <layer id="13" y_offset="-189.75" dim_x="1830.0"/>
+              <layer id="14" y_offset="-165.25" dim_x="1850.0"/>
+              <layer id="15" y_offset="-140.75" dim_x="1870.0"/>
+              <layer id="16" y_offset="-116.25" dim_x="1890.0"/>
+              <layer id="17" y_offset="-91.75" dim_x="1910.0"/>
+              <layer id="18" y_offset="-67.25" dim_x="1930.0"/>
+              <layer id="19" y_offset="-42.75" dim_x="1950.0"/>
+              <layer id="20" y_offset="-18.25" dim_x="1970.0"/>
+              <layer id="21" y_offset="6.25" dim_x="2000.0"/>
+              <layer id="22" y_offset="30.75" dim_x="2020.0"/>
+              <layer id="23" y_offset="55.25" dim_x="2040.0"/>
+              <layer id="24" y_offset="79.75" dim_x="2060.0"/>
+              <layer id="25" y_offset="104.25" dim_x="2080.0"/>
+              <layer id="26" y_offset="128.75" dim_x="2100.0"/>
+              <layer id="27" y_offset="153.25" dim_x="2120.0"/>
+              <layer id="28" y_offset="177.75" dim_x="2140.0"/>
+              <layer id="29" y_offset="202.25" dim_x="2160.0"/>
+              <layer id="30" y_offset="226.75" dim_x="2180.0"/>
+              <layer id="31" y_offset="251.25" dim_x="2200.0"/>
+              <layer id="32" y_offset="275.75" dim_x="2220.0"/>
+              <layer id="33" y_offset="300.25" dim_x="2110.0"/>
+              <layer id="34" y_offset="324.75" dim_x="2000.0"/>
+              <layer id="35" y_offset="349.25" dim_x="1880.0"/>
+              <layer id="36" y_offset="373.75" dim_x="1760.0"/>
+              <layer id="37" y_offset="398.25" dim_x="1640.0"/>
+              <layer id="38" y_offset="422.75" dim_x="1520.0"/>
+              <layer id="39" y_offset="447.25" dim_x="1400.0"/>
+              <layer id="40" y_offset="471.75" dim_x="1290.0"/>
+            </layers>
+             <end_layers>
+               <end_layer z_offset="0.0" id="1" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="2" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="3" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="4" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="5" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="6" dim_z="1060.0"/>
+               <end_layer z_offset="15.0" id="7" dim_z="1090.0"/>
+               <end_layer z_offset="30.0" id="8" dim_z="1120.0"/>
+               <end_layer z_offset="50.0" id="9" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="10" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="11" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="12" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="13" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="14" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="15" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="16" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="17" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="18" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="19" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="20" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="21" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="22" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="23" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="24" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="25" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="26" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="27" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="28" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="29" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="30" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="31" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="32" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="33" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="34" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="35" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="36" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="37" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="38" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="39" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="40" dim_z="1160.0"/>
+             </end_layers>
+             <staves>
+               <stave phi="0.0/180*pi" id="1"/>
+               <stave phi="45.0/180*pi" id="2"/>
+               <stave phi="90.0/180*pi" id="3"/>
+               <stave phi="135.0/180*pi" id="4"/>
+               <stave phi="180.0/180*pi" id="5"/>
+               <stave phi="225.0/180*pi" id="6"/>
+               <stave phi="270.0/180*pi" id="7"/>
+               <stave phi="315.0/180*pi" id="8"/>
+             </staves>
+             <modules>
+               <module z_offset="-2164.0" id="1" type="2"/>
+               <module z_offset="-1082.0" id="2" type="1"/>
+               <module z_offset="0.0"     id="3" type="1"/>
+               <module z_offset="1082.0"  id="4" type="1"/>
+               <module z_offset="2164.0"  id="5" type="2"/>
+             </modules>
+           </barrel>
+           <endcap readout_plus="HcalEncapPlusHits"
+                   readout_minus="HcalEncapMinusHits"
+              >
+              <module 
+                rmin="Hcal_endcap_center_box_size/2" 
+                rmax="Hcal_module_radius"
+                dz="Hcal_endcap_module_dim_z/2"
+                readout="HcalEndcapHits"
+                vis="HcalModuleVis"
+              />
+             <layers>
+               <layer id="1" z_offset="-483.75"/>
+               <layer id="2" z_offset="-459.25"/>
+               <layer id="3" z_offset="-434.75"/>
+               <layer id="4" z_offset="-410.25"/>
+               <layer id="5" z_offset="-385.75"/>
+               <layer id="6" z_offset="-361.25"/>
+               <layer id="7" z_offset="-336.75"/>
+               <layer id="8" z_offset="-312.25"/>
+               <layer id="9" z_offset="-287.75"/>
+               <layer id="10" z_offset="-263.25"/>
+               <layer id="11" z_offset="-238.75"/>
+               <layer id="12" z_offset="-214.25"/>
+               <layer id="13" z_offset="-189.75"/>
+               <layer id="14" z_offset="-165.25"/>
+               <layer id="15" z_offset="-140.75"/>
+               <layer id="16" z_offset="-116.25"/>
+               <layer id="17" z_offset="-91.75"/>
+               <layer id="18" z_offset="-67.25"/>
+               <layer id="19" z_offset="-42.75"/>
+               <layer id="20" z_offset="-18.25"/>
+               <layer id="21" z_offset="6.25"/>
+               <layer id="22" z_offset="30.75"/>
+               <layer id="23" z_offset="55.25"/>
+               <layer id="24" z_offset="79.75"/>
+               <layer id="25" z_offset="104.25"/>
+               <layer id="26" z_offset="128.75"/>
+               <layer id="27" z_offset="153.25"/>
+               <layer id="28" z_offset="177.75"/>
+               <layer id="29" z_offset="202.25"/>
+               <layer id="30" z_offset="226.75"/>
+               <layer id="31" z_offset="251.25"/>
+               <layer id="32" z_offset="275.75"/>
+               <layer id="33" z_offset="300.25"/>
+               <layer id="34" z_offset="324.75"/>
+               <layer id="35" z_offset="349.25"/>
+               <layer id="36" z_offset="373.75"/>
+               <layer id="37" z_offset="398.25"/>
+               <layer id="38" z_offset="422.75"/>
+               <layer id="39" z_offset="447.25"/>
+               <layer id="40" z_offset="471.75"/>
+            </layers>
+            <positions>
+              <position phi="0.0" id="1" x="0" y="0" z="3523*mm"/>
+              <position phi="0.0" id="2" x="0" y="0" z="-3523*mm"/>
+            </positions>
+         </endcap>
+      </detector>
 
     </detectors>
 
@@ -568,9 +833,33 @@
         <readout name="SITHits">
             <id>system:6,barrel:3,layer:4,module:16,sensor:1,side:32:-2,strip:20</id>
         </readout>
+        <readout name="FTDHits">
+            <id>system:6,barrel:3,layer:4,module:16,sensor:1,side:32:-2,strip:20</id>
+        </readout>
         <readout name="TPCHits">
             <id>system:6,barrel:3,layer:4,module:16,sensor:1,side:32:-2,strip:20</id>
         </readout>
+        <readout name="TPCfchHits">
+            <id>system:6,barrel:3,layer:4,module:16,sensor:1,side:32:-2,strip:20</id>
+        </readout>
+        <readout name="EcalBarrelHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="EcalEndcapHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="EcalEndcapRingHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalRegularHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalEndModuleHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalEndcapHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
     </readouts>
 
     <fields>
diff --git a/DDExamples/ILDExDet/compact/test.xml b/DDExamples/ILDExDet/compact/test.xml
index 7c465de04dc8d7d404e167fc72e377e9d5f6b515..1694bdaadeabecbab3d00d54a48090a6542de2fa 100644
--- a/DDExamples/ILDExDet/compact/test.xml
+++ b/DDExamples/ILDExDet/compact/test.xml
@@ -133,6 +133,46 @@
         <constant name="Ecal_radiator_layers_set1_thickness"   value="2.1*mm"/>
         <constant name="Ecal_radiator_layers_set2_thickness"   value="4.2*mm"/>
         <constant name="Ecal_radiator_layers_set3_thickness"   value="0*mm"/>
+
+
+        <constant name="Yoke_symmetry"                         value="8"/>
+        <constant name="Yoke_symmetry"                         value="8"/>
+        <constant name="Hcal_radiator_thickness"               value="20*mm"/>
+        <constant name="Hcal_stave_gaps"                       value="3*mm"/>
+        <constant name="Hcal_back_plate_thickness"             value="30*mm"/>
+        <constant name="Hcal_barrel_end_module_type"           value="2"/>
+        <constant name="Hcal_endcap_cables_gap"                value="214*mm"/>
+        <constant name="Hcal_endcap_center_box_size"           value="600*mm"/>
+        <constant name="Hcal_endcap_module_dim_z"              value="1010*mm"/>
+
+        <constant name="Hcal_lateral_structure_thickness"      value="10*mm"/>
+        <constant name="Hcal_lateral_plate_thickness"          value="Hcal_lateral_structure_thickness"/>
+        <constant name="Hcal_nlayers"                          value="8"/>
+        <constant name="Hcal_outer_radius"                     value="3000*mm"/>
+        <constant name="Hcal_modules_gap"                      value="2*mm"/>
+        <constant name="Hcal_fiber_gap"                        value="1.5*mm"/>
+        <constant name="Hcal_cells_size"                       value="10*mm"/>
+
+        <constant name="Hcal_chamber_thickness"                value="6.5*mm"/>
+        <constant name="Hcal_total_z_size"                     value="140*mm + 2*TPC_Ecal_Hcal_barrel_halfZ"/>
+        <constant name="Hcal_normal_dim_z"                     value="Hcal_total_z_size/5*1080/1120"/>
+        <constant name="Hcal_top_end_dim_z"                    value="(Hcal_total_z_size-3*Hcal_normal_dim_z)/2"/>
+        <constant name="Hcal_start_z"                          value="1.5*Hcal_normal_dim_z + Hcal_top_end_dim_z + 2*Hcal_modules_gap + Hcal_endcap_cables_gap"/>
+        <constant name="Hcal_total_dim_y"                      value="Hcal_nlayers*(Hcal_radiator_thickness+Hcal_chamber_thickness) + Hcal_back_plate_thickness"/>
+        <constant name="Hcal_inner_radius"                     value="Ecal_outer_radius + Hcal_Ecal_gap"/>
+        <constant name="Hcal_module_radius"                    value="Hcal_inner_radius+Hcal_total_dim_y"/>
+
+        <constant name="Hcal_y_dim2_for_x"                     value="Hcal_module_radius*(1-cos(pi/8)) - Hcal_stave_gaps"/>
+        <constant name="Hcal_y_dim1_for_x"                     value="Hcal_total_dim_y - Hcal_y_dim2_for_x"/>
+        <constant name="Hcal_bottom_dim_x"                     value="2*Hcal_y_dim1_for_x*tan(pi/8) - Hcal_stave_gaps"/>
+        <constant name="Hcal_middle_dim_x"                     value="Hcal_bottom_dim_x+2*Hcal_y_dim1_for_x*tan(pi/8)"/>
+        <constant name="Hcal_top_dim_x"                        value="Hcal_middle_dim_x-2*Hcal_y_dim2_for_x/tan(pi/8)"/>
+
+        <constant name="Hcal_y_dim1_for_z"                     value="134.8"/>
+        <constant name="Hcal_y_dim2_for_z"                     value="(Hcal_top_end_dim_z-Hcal_normal_dim_z)*tan(39.28/2/pi)"/>
+        <constant name="Hcal_y_dim3_for_z"                     value="Hcal_total_dim_y-Hcal_y_dim1_for_z-Hcal_y_dim2_for_z"/>
+        <constant name="Hcal_regular_chamber_dim_z"            value="Hcal_normal_dim_z - 2*(Hcal_lateral_plate_thickness)"/>
+
     </define>
 
     <materials>
@@ -177,6 +217,12 @@
             <limit name="step_length_max" particles="*" value="5.0" unit="mm" />
         </limitset>
 
+        <limitset name="HcalLimits">
+            <limit name="step_length_max" particles="*" 
+                   value="min(Hcal_cells_size,Hcal_regular_chamber_dim_z/floor(Hcal_regular_chamber_dim_z/Hcal_cells_size))" 
+                   unit="mm" />
+        </limitset>
+
         <limitset name="EcalLimits">
             <limit name="step_length_max" particles="*" value="5.0" unit="mm" />
         </limitset>
@@ -205,49 +251,55 @@
       <vis name="CoilVis"              alpha="1.0" r="0.0"  g="0.0"  b="0.7"    drawingStyle="wireframe" showDaughters="true"  visible="true"/>
       <vis name="YokeVis"              alpha="1.0" r="0.1"  g="0.8"  b="0.8"    drawingStyle="wireframe" showDaughters="true"  visible="true"/>
 
-      <vis name="EcalVis"              alpha="1.0" r="1"    g="0"   b="0"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalPCBVis"           alpha="1.0" r="0.5"  g="0.5" b="0"       drawingStyle="wireframe" showDaughters="true"  visible="true"/>
-      <vis name="EcalRadiatorVis"      alpha="1.0" r="0"    g="1"   b="0"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalTowerVis"         alpha="1.0" r="0"    g="0.1" b="0.9"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalRingVis"          alpha="1.0" r="0"    g="0"   b="1"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalWaferVis"         alpha="1.0" r=".7"   g=".7"  b=".7"      drawingStyle="solid"                           visible="false"/>
-      <vis name="EcalSlabVis"          alpha="1.0" r="1"    g="1"   b="1"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="EcalSlabGroundVis"    alpha="1.0" r="0"    g="0"   b="1"       drawingStyle="wireframe"                       visible="true"/>
-      <vis name="EcalSlabSensitiveVis" alpha="1.0" r=".5"   g=".5"  b=".5"      drawingStyle="solid"                           visible="true"/>
-
-      <vis name="HcalVis"              alpha="1.0" r="0.8"  g="0.8" b="0.2"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="HcalChamberVis"       alpha="1.0" r="0.2"  g="0.8" b="0.2"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="HcalRpcGasVis"        alpha="1.0" r="0.1"  g="0"   b="0.8"     drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="HcalRpcGlassVis"      alpha="1.0" r="0.8"  g="0"   b="0"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="HcalRpcSpacerVis"     alpha="1.0" r="1"    g="1"   b="1"       drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalVis"              alpha="1.0" r="0.8"  g="0.4"  b="0"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalPCBVis"           alpha="1.0" r="0.5"  g="0.5"  b="0"      drawingStyle="wireframe" showDaughters="true"  visible="true"/>
+      <vis name="EcalRadiatorVis"      alpha="1.0" r="0.2"  g="0.5"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalTowerVis"         alpha="1.0" r="0"    g="0.1"  b="0.9"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalRingVis"          alpha="1.0" r="0"    g="0"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalWaferVis"         alpha="1.0" r=".7"   g=".7"   b=".7"     drawingStyle="solid"                           visible="false"/>
+      <vis name="EcalSlabVis"          alpha="1.0" r="1"    g="1"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="EcalSlabGroundVis"    alpha="1.0" r="0"    g="0"    b="1"      drawingStyle="wireframe" showDaughters="true"  visible="true"/>
+      <vis name="EcalSlabSensitiveVis" alpha="1.0" r="0.5"  g="0.5"  b="0.5"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalVis"              alpha="1.0" r="0.8"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalChamberVis"       alpha="1.0" r="0"    g="1"    b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalModuleVis"        alpha="1.0" r="0"    g="0.6"  b="0.6"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalEndModuleVis"     alpha="1.0" r="1"    g="0"    b="0.5"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcGasVis"        alpha="1.0" r="0.1"  g="0"    b="0.8"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcGlassVis"      alpha="1.0" r="0.8"  g="0"    b="0"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalRpcSpacerVis"     alpha="1.0" r="1"    g="1"    b="1"      drawingStyle="solid"     showDaughters="true"  visible="true"/>
+      <vis name="HcalScintillatorVis"  alpha="1.0" r="0.8"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
 
     </display>
 
     <detectors>
         <comment>Trackers</comment>
-
-        <detector id="10" name="ECAL" type="Tesla_SEcal03"
-          lateral_face_thickness="Ecal_lateral_face_thickness"
-          fiber_thickness="Ecal_fiber_thickness"
-          guard_ring_size="Ecal_guard_ring_size"
-          cell_size="Ecal_cell_size"
-          alveolus_gap="Ecal_Alveolus_Air_Gap"
-          crossing_angle="ILC_Main_Crossing_Angle"
-          cables_gap="Ecal_cables_gap"
-        >
-          <support   thickness="Ecal_support_thickness"/>
-          <front     thickness="Ecal_front_face_thickness"/>
+<!--
+-->
+        <detector id="10" name="ECAL" type="Tesla_SEcal03" limits="EcalLimits" vis="EcalVis">
+          <param lateral_face_thickness="Ecal_lateral_face_thickness"
+                 fiber_thickness="Ecal_fiber_thickness"
+                 guard_ring_size="Ecal_guard_ring_size"
+                 cell_size="Ecal_cell_size"
+                 alveolus_gap="Ecal_Alveolus_Air_Gap"
+                 crossing_angle="ILC_Main_Crossing_Angle"
+                 cables_gap="Ecal_cables_gap"
+                 front_face_thickness="Ecal_front_face_thickness"
+                 support_thickness="Ecal_support_thickness"
+               />
           <pcbshield thickness="Ecal_Slab_PCB_thickness + Ecal_Slab_copper_thickness + Ecal_Slab_shield_thickness" vis="EcalPCBVis" material="G10"/>
           <barrel    inner_r="TPC_outer_radius+TPC_Ecal_gap"
                      zhalf="Ecal_Barrel_halfZ" 
                      towers="Ecal_barrel_number_of_towers"
                      radiatorMaterial="tungsten_19.3gccm"
                      material="G10"
+                     readout="EcalBarrelHits"
                      vis="EcalVis"/>
           <endcap    inner_r="Lcal_outer_radius + Ecal_Lcal_ring_gap"
                      ring_gap="Ecal_EC_ring_gap"
                      extra_size="Ecal_endcap_extra_size"
-                     center_box_size="Ecal_endcap_center_box_size"/>
+                     center_box_size="Ecal_endcap_center_box_size"
+                     readout="EcalEndcapHits"
+                     vis="EcalVis"/>
 
           <layer id="1" repeat="Ecal_nlayers1" thickness="Ecal_radiator_layers_set1_thickness" material="tungsten_19.3gccm"/>
           <layer id="2" repeat="Ecal_nlayers2" thickness="Ecal_radiator_layers_set2_thickness" material="tungsten_19.3gccm"/>
@@ -260,94 +312,207 @@
             <sensitive thickness="Ecal_Si_thickness" material="silicon_2.33gccm"/>
           </slab>
         </detector>
-
         <!--                  Hcal04 description
         -->
-<!--
-        <constant name="Yoke_symmetry"                         value="8"/>
-        <constant name="Hcal_radiator_thickness"               value="20*mm"/>
-        <constant name="Hcal_stave_gaps"                       value="3*mm"/>
-        <constant name="Hcal_back_plate_thickness"             value="30*mm"/>
-        <constant name="Hcal_barrel_end_module_type"           value="2"/>
-        <constant name="Hcal_endcap_cables_gap"                value="214*mm"/>
-        <constant name="Hcal_endcap_center_box_size"           value="600*mm"/>
-        <constant name="Hcal_lateral_structure_thickness"      value="10*mm"/>
-        <constant name="Hcal_nlayers"                          value="8"/>
-        <constant name="Hcal_outer_radius"                     value="3000*mm"/>
-        <constant name="Hcal_modules_gap"                      value="2*mm"/>
-        <constant name="Hcal_fiber_gap"                        value="1.5*mm"/>
-        <constant name="Hcal_cells_size"                       value="*mm"/>
-
-        <constant name="Hcal_chamber_thickness"                value="6.5*mm"/>
-        <constant name="Hcal_total_z_size"                     value="140*mm + 2*TPC_Ecal_Hcal_barrel_halfZ"/>
-        <constant name="Hcal_normal_dim_z"                     value="Hcal_total_z_size/5*1080/1120"/>
-        <constant name="Hcal_top_end_dim_z"                    value="(Hcal_total_z_size-3*Hcal_normal_dim_z)/2"/>
-        <constant name="Hcal_start_z"                          value="1.5*Hcal_normal_dim_z + Hcal_top_end_dim_z + 2*Hcal_modules_gap + Hcal_cables_gap"/>
-        <constant name="Hcal_total_dim_y"                      value="Hcal_nlayers*(Hcal_radiator_thickness+Hcal_chamber_tickness) + Hcal_back_plate_thickness"/>
-        <constant name="Hcal_inner_radius"                     value="Ecal_outer_radius + Hcal_Ecal_gap"/>
-        <constant name="Hcal_module_radius"                    value="Hcal_inner_radius+Hcal_total_dim_y"/>
 
-        <constant name="Hcal_y_dim2_for_x"                     value="Hcal_module_radius*(1-cos(3.141/8) - Hcal_stave_gaps"/>
-        <constant name="Hcal_y_dim1_for_x"                     value="Hcal_total_dim_y - Hcal_y_dim2_for_x"/>
-        <constant name="Hcal_bottom_dim_x"                     value="2*Hcal_y_dim1_for_x*tan(3.141/8) - Hcal_stave_gaps"/>
-        <constant name="Hcal_middle_dim_x"                     value="Hcal_bottom_dim_x+2*Hcal_y_dim1_for_x*tan(3.141/8)"/>
-        <constant name="Hcal_top_dim_x"                        value="Hcal_middle_dim_x-2*Hcal_y_dim2_for_x/tan(3.141/8)"/>
-
-        <constant name="Hcal_y_dim1_for_z"                     value="134.8"/>
-        <constant name="Hcal_y_dim2_for_z"                     value="(Hcal_top_end_dim_z-Hcal_normal_dim_z)*tan(39.28/2/3.141)"/>
-        <constant name="Hcal_y_dim3_for_z"                     value="Hcal_total_dim_y-Hcal_y_dim1_for_z-Hcal_y_dim2_for_z"/>
-        <constant name="Hcal_regular_chamber_dim_z"            value="Hcal_normal_dim_z - 2*(Hcal_lateral_plate_thickness)"/>
-        <constant name="Hcal_cell_dim_z"                       value="Hcal_regular_chamber_dim_z / FLOOR(Hcal_regular_chamber_dim_z/Hcal_cell_dim_x)"/>
-
-      <vis name="HcalModuleVis"       alpha="1.0" r="0.8"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="HcalChamberVis"      alpha="1.0" r="0.2"  g="0.8"  b="0.2"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
-      <vis name="Hcal"        alpha="1.0" r="1.0"  g="0.5"  b="0.5"    drawingStyle="solid"     showDaughters="true"  visible="true"/>
-        <detector id="9" name="Hcal" type="Tesla_hcal04" vis="HcalVis">
-           <params
-                   radiator_thickness="Hcal_radiator_thickness"
+        <detector id="9" name="Hcal" type="Tesla_hcal04" limits="HcalLimits" vis="HcalVis">
+           <param  radiator_thickness="Hcal_radiator_thickness"
                    radiator_material="Iron"
                    sensitive_model="scintillator"
-                   back_plate_thickness="Hcal_back_plate_thickness"
-                   staves_gap="Hcal_stave_gaps"
-                   modules_gap="Hcal_modules_gap"
-                   nlayers="Hcal_nlayers"
-                   barrel_end_module_type="Hcal_barrel_end_module_type"
                    fiber_gap="Hcal_fiber_gap"
-                   chamber_thickness="Hcal_chamber_thickness"
-                   inner_radius="Hcal_inner_radius"
-                   cables_gap="Hcal_endcap_cables_gap"
-                   normal_dim_z="Hcal_normal_dim_z"
-                   top_end_dim_z="Hcal_top_end_dim_z"
-                   start_z="Hcal_start_z"
-                   lateral_plate_thickness="Hcal_lateral_plate_thickness"
-                   cell_dim_x="Hcal_cell_dim_x"
-                   endcap_center_box_size="Hcal_endcap_center_box_size"
-                   total_dim_y="Hcal_total_dim_y"
-                   module_radius="Hcal_module_radius"
-                   y_dim2_for_x="Hcal_y_dim2_for_x"
-
-
+                   chamber_vis="HcalChamberVis"
            />
-           <radiator  thickness="Hcal_radiator_thickness" material="Iron"/>
-           <sensitive model="scintillator"/>
-           <barrel    end_module_type="Hcal_barrel_end_module_type"
-                      cell_dim_x="Hcal_cells_size" 
-                      center_box_size="Hcal_endcap_center_box_size"/>
-           <stave     gap="Hcal_stave_gaps"/>
-           <modules   gap="Hcal_modules_gap"/>
-           <fibers    gap="Hcal_fiber_gap"/>
-           <backplate thickness="Hcal_back_plate_thickness"/>
-           <lateral_structure thickness="Hcal_lateral_structure_thickness"/>
-           <rpc chamber_thickness="6.5*mm" 
-                inner_r="Ecal_outer_radius+Hcal_Ecal_gap"
-                cables_gap="Hcal_endcap_cables_gap"
-                />
+           <rpc cables_gap="Hcal_endcap_cables_gap">
+                <radiator thickness="" material="G10"/>
+                <gas      thickness="" material="RPCGAS1" vis="HcalRpcGasVis"/>
+                <glass    thickness="" material="pyrex"   vis="HcalRpcGlassVis"/>
            </rpc>
-           <cell x="Hcal_cells_size">
+           <scintillator material="Polystyrene" vis="HcalScintillatorVis"/>
            
+           <barrel    end_module_type="Hcal_barrel_end_module_type"
+                      center_box_size="Hcal_endcap_center_box_size"
+                      num_layer="Hcal_nlayers"
+                      chamber_thickness="Hcal_chamber_thickness" 
+                      inner_r="Hcal_inner_radius"
+                            >
+            <module dim_z="1080*mm"                  
+                    chamber_dim_z="1060*mm"
+                    module_y_offset="2415.0*mm"
+                    middle_dim_x="2238.81*mm"
+                    bottom_dim_x="1579.3*mm"
+                    top_dim_x="1206.01*mm"
+                    y_dim1_for_x="796.1*mm"
+                    y_dim2_for_x="213.9*mm"
+                    cell_dim_x="Hcal_cells_size"
+                    cell_dim_z="Hcal_regular_chamber_dim_z / floor(Hcal_regular_chamber_dim_z/Hcal_cells_size)"
+                    readout="HcalRegularHits"
+                    vis="HcalModuleVis"/>
+            <end_module y_dim3_for_z="793.409"
+                        y_dim2_for_z="81.7908"
+                        y_dim1_for_z="134.8"
+                        top_end_dim_z="1180.0"
+                        readout="HcalEndModuleHits"
+                        vis="HcalModuleVis"/>
+            <layers>
+              <layer id="1" y_offset="-483.75" dim_x="1590.0"/>
+              <layer id="2" y_offset="-459.25" dim_x="1610.0"/>
+              <layer id="3" y_offset="-434.75" dim_x="1630.0"/>
+              <layer id="4" y_offset="-410.25" dim_x="1650.0"/>
+              <layer id="5" y_offset="-385.75" dim_x="1670.0"/>
+              <layer id="6" y_offset="-361.25" dim_x="1690.0"/>
+              <layer id="7" y_offset="-336.75" dim_x="1710.0"/>
+              <layer id="8" y_offset="-312.25" dim_x="1730.0"/>
+              <layer id="9" y_offset="-287.75" dim_x="1750.0"/>
+              <layer id="10" y_offset="-263.25" dim_x="1770.0"/>
+              <layer id="11" y_offset="-238.75" dim_x="1790.0"/>
+              <layer id="12" y_offset="-214.25" dim_x="1810.0"/>
+              <layer id="13" y_offset="-189.75" dim_x="1830.0"/>
+              <layer id="14" y_offset="-165.25" dim_x="1850.0"/>
+              <layer id="15" y_offset="-140.75" dim_x="1870.0"/>
+              <layer id="16" y_offset="-116.25" dim_x="1890.0"/>
+              <layer id="17" y_offset="-91.75" dim_x="1910.0"/>
+              <layer id="18" y_offset="-67.25" dim_x="1930.0"/>
+              <layer id="19" y_offset="-42.75" dim_x="1950.0"/>
+              <layer id="20" y_offset="-18.25" dim_x="1970.0"/>
+              <layer id="21" y_offset="6.25" dim_x="2000.0"/>
+              <layer id="22" y_offset="30.75" dim_x="2020.0"/>
+              <layer id="23" y_offset="55.25" dim_x="2040.0"/>
+              <layer id="24" y_offset="79.75" dim_x="2060.0"/>
+              <layer id="25" y_offset="104.25" dim_x="2080.0"/>
+              <layer id="26" y_offset="128.75" dim_x="2100.0"/>
+              <layer id="27" y_offset="153.25" dim_x="2120.0"/>
+              <layer id="28" y_offset="177.75" dim_x="2140.0"/>
+              <layer id="29" y_offset="202.25" dim_x="2160.0"/>
+              <layer id="30" y_offset="226.75" dim_x="2180.0"/>
+              <layer id="31" y_offset="251.25" dim_x="2200.0"/>
+              <layer id="32" y_offset="275.75" dim_x="2220.0"/>
+              <layer id="33" y_offset="300.25" dim_x="2110.0"/>
+              <layer id="34" y_offset="324.75" dim_x="2000.0"/>
+              <layer id="35" y_offset="349.25" dim_x="1880.0"/>
+              <layer id="36" y_offset="373.75" dim_x="1760.0"/>
+              <layer id="37" y_offset="398.25" dim_x="1640.0"/>
+              <layer id="38" y_offset="422.75" dim_x="1520.0"/>
+              <layer id="39" y_offset="447.25" dim_x="1400.0"/>
+              <layer id="40" y_offset="471.75" dim_x="1290.0"/>
+            </layers>
+             <end_layers>
+               <end_layer z_offset="0.0" id="1" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="2" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="3" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="4" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="5" dim_z="1060.0"/>
+               <end_layer z_offset="0.0" id="6" dim_z="1060.0"/>
+               <end_layer z_offset="15.0" id="7" dim_z="1090.0"/>
+               <end_layer z_offset="30.0" id="8" dim_z="1120.0"/>
+               <end_layer z_offset="50.0" id="9" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="10" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="11" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="12" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="13" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="14" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="15" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="16" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="17" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="18" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="19" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="20" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="21" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="22" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="23" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="24" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="25" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="26" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="27" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="28" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="29" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="30" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="31" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="32" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="33" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="34" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="35" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="36" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="37" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="38" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="39" dim_z="1160.0"/>
+               <end_layer z_offset="50.0" id="40" dim_z="1160.0"/>
+             </end_layers>
+             <staves>
+               <stave phi="0.0/180*pi" id="1"/>
+               <stave phi="45.0/180*pi" id="2"/>
+               <stave phi="90.0/180*pi" id="3"/>
+               <stave phi="135.0/180*pi" id="4"/>
+               <stave phi="180.0/180*pi" id="5"/>
+               <stave phi="225.0/180*pi" id="6"/>
+               <stave phi="270.0/180*pi" id="7"/>
+               <stave phi="315.0/180*pi" id="8"/>
+             </staves>
+             <modules>
+               <module z_offset="-2164.0" id="1" type="2"/>
+               <module z_offset="-1082.0" id="2" type="1"/>
+               <module z_offset="0.0"     id="3" type="1"/>
+               <module z_offset="1082.0"  id="4" type="1"/>
+               <module z_offset="2164.0"  id="5" type="2"/>
+             </modules>
+           </barrel>
+           <endcap readout_plus="HcalEncapPlusHits"
+                   readout_minus="HcalEncapMinusHits"
+              >
+              <module 
+                rmin="Hcal_endcap_center_box_size/2" 
+                rmax="Hcal_module_radius"
+                dz="Hcal_endcap_module_dim_z/2"
+                readout="HcalEndcapHits"
+                vis="HcalModuleVis"
+              />
+             <layers>
+               <layer id="1" z_offset="-483.75"/>
+               <layer id="2" z_offset="-459.25"/>
+               <layer id="3" z_offset="-434.75"/>
+               <layer id="4" z_offset="-410.25"/>
+               <layer id="5" z_offset="-385.75"/>
+               <layer id="6" z_offset="-361.25"/>
+               <layer id="7" z_offset="-336.75"/>
+               <layer id="8" z_offset="-312.25"/>
+               <layer id="9" z_offset="-287.75"/>
+               <layer id="10" z_offset="-263.25"/>
+               <layer id="11" z_offset="-238.75"/>
+               <layer id="12" z_offset="-214.25"/>
+               <layer id="13" z_offset="-189.75"/>
+               <layer id="14" z_offset="-165.25"/>
+               <layer id="15" z_offset="-140.75"/>
+               <layer id="16" z_offset="-116.25"/>
+               <layer id="17" z_offset="-91.75"/>
+               <layer id="18" z_offset="-67.25"/>
+               <layer id="19" z_offset="-42.75"/>
+               <layer id="20" z_offset="-18.25"/>
+               <layer id="21" z_offset="6.25"/>
+               <layer id="22" z_offset="30.75"/>
+               <layer id="23" z_offset="55.25"/>
+               <layer id="24" z_offset="79.75"/>
+               <layer id="25" z_offset="104.25"/>
+               <layer id="26" z_offset="128.75"/>
+               <layer id="27" z_offset="153.25"/>
+               <layer id="28" z_offset="177.75"/>
+               <layer id="29" z_offset="202.25"/>
+               <layer id="30" z_offset="226.75"/>
+               <layer id="31" z_offset="251.25"/>
+               <layer id="32" z_offset="275.75"/>
+               <layer id="33" z_offset="300.25"/>
+               <layer id="34" z_offset="324.75"/>
+               <layer id="35" z_offset="349.25"/>
+               <layer id="36" z_offset="373.75"/>
+               <layer id="37" z_offset="398.25"/>
+               <layer id="38" z_offset="422.75"/>
+               <layer id="39" z_offset="447.25"/>
+               <layer id="40" z_offset="471.75"/>
+            </layers>
+            <positions>
+              <position phi="0.0" id="1" x="0" y="0" z="3523*mm"/>
+              <position phi="0.0" id="2" x="0" y="0" z="-3523*mm"/>
+            </positions>
+         </endcap>
       </detector>
--->
-
 
     </detectors>
 
@@ -365,6 +530,21 @@
         <readout name="TPCHits">
             <id>system:6,barrel:3,layer:4,module:16,sensor:1,side:32:-2,strip:20</id>
         </readout>
+        <readout name="EcalBarrelHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="EcalEndcapHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalRegularHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalEndModuleHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
+        <readout name="HcalEndcapHits">
+            <id>system:6,barrel:3,layer:4,module:16</id>
+        </readout>
     </readouts>
 
     <fields>
diff --git a/DDG4/include/DDG4/Geant4Converter.h b/DDG4/include/DDG4/Geant4Converter.h
index c86ed4d01ca42329ef3cc181e15c99879c743de0..0ccc723c30ba752d6e7c2ba4bc75085963ec5554 100644
--- a/DDG4/include/DDG4/Geant4Converter.h
+++ b/DDG4/include/DDG4/Geant4Converter.h
@@ -34,6 +34,7 @@ class G4Region;
 class G4Field;
 class G4FieldManager;
 class G4UserLimits;
+class G4VisAttributes;
 
 /*
  *   DD4hep namespace declaration
@@ -64,7 +65,7 @@ namespace DD4hep {
       typedef std::map<const TNamed*,     Geant4SensitiveDetector*> SensDetMap;
       typedef std::map<const TGeoVolume*, G4LogicalVolume*>         VolumeMap;
       typedef std::map<const TGeoShape*,  G4VSolid*>                SolidMap;
-
+      typedef std::map<const TNamed*,     G4VisAttributes*>         VisMap;
       struct G4GeometryInfo : public GeometryInfo {
 	ElementMap              g4Elements;
 	MaterialMap             g4Materials;
@@ -72,6 +73,7 @@ namespace DD4hep {
 	VolumeMap               g4Volumes;
 	PlacementMap            g4Placements;
 	RegionMap               g4Regions;
+	VisMap                  g4Vis;
 	LimitMap                g4Limits;
 	SensDetMap              g4SensDets;
 
@@ -100,8 +102,10 @@ namespace DD4hep {
 
       /// Convert the geometry type material into the corresponding Geant4 object(s).
       virtual void* handleMaterial(const std::string& name, const TGeoMedium* medium) const;
+
       /// Convert the geometry type element into the corresponding Geant4 object(s).
       virtual void* handleElement(const std::string& name, const TGeoElement* element) const;
+
       /// Convert the geometry type solid into the corresponding Geant4 object(s).
       virtual void* handleSolid(const std::string& name, const TGeoShape* volume) const;
 
@@ -117,10 +121,16 @@ namespace DD4hep {
 
       /// Convert the geometry type region into the corresponding Geant4 object(s).
       virtual void* handleRegion(const TNamed* region, const std::set<const TGeoVolume*>& volumes) const;
+
+      /// Convert the geometry visualisation attributes to the corresponding Geant4 object(s).
+      virtual void* handleVis(const std::string& name, const TNamed* vis) const;
+
       /// Convert the geometry type LimitSet into the corresponding Geant4 object(s).
       virtual void* handleLimitSet(const TNamed* limitset, const std::set<const TGeoVolume*>& volumes) const;
+
       /// Convert the geometry type SensitiveDetector into the corresponding Geant4 object(s).
       virtual void* handleSensitive(const TNamed* sens_det, const std::set<const TGeoVolume*>& volumes) const;
+
       /// Handle the geant 4 specific properties
       void handleProperties(LCDD::Properties& prp) const;
 
diff --git a/DDG4/src/Geant4Converter.cpp b/DDG4/src/Geant4Converter.cpp
index ca141091dec4041d8f27d6ce142b4e4e8ec1c897..e931825b55bc90c0c4d69402f8e24eafefaf7244 100644
--- a/DDG4/src/Geant4Converter.cpp
+++ b/DDG4/src/Geant4Converter.cpp
@@ -37,6 +37,7 @@
 #include <iostream>
 #include <iomanip>
 
+#include "G4VisAttributes.hh"
 #include "G4ProductionCuts.hh"
 #include "G4VUserRegionInformation.hh"
 // Geant4 include files
@@ -338,12 +339,12 @@ void* Geant4Converter::handleVolume(const string& name, const TGeoVolume* volume
   if ( !vol ) {
     const TGeoVolume* v = volume;
     Volume           _v = Ref_t(v);
-    string      n       = v->GetName();
-    TGeoMedium* m       = v->GetMedium();
-    TGeoShape*  s       = v->GetShape();
-    G4VSolid*   solid   = (G4VSolid*)handleSolid(s->GetName(),s);
-    G4Material* medium  = (G4Material*)handleMaterial(m->GetName(),m);
-
+    VisAttr          vis    = _v.visAttributes();
+    string           n      = v->GetName();
+    TGeoMedium*      m      = v->GetMedium();
+    TGeoShape*       s      = v->GetShape();
+    G4VSolid*        solid  = (G4VSolid*)handleSolid(s->GetName(),s);
+    G4Material*      medium = (G4Material*)handleMaterial(m->GetName(),m);
     if ( !solid )   {
       throw runtime_error("G4Converter: No Geant4 Solid present for volume:"+n);
     }
@@ -371,6 +372,10 @@ void* Geant4Converter::handleVolume(const string& name, const TGeoVolume* volume
       }
     }
     vol = new G4LogicalVolume(solid,medium,n,0,sd,l);
+    if ( vis.isValid() ) {
+      G4VisAttributes* attr   = (G4VisAttributes*)handleVis(vis.name(),vis.ptr());
+      if ( attr ) vol->SetVisAttributes(attr);
+    }
     info.g4Volumes[v] = vol;
     if ( sd )   {
       cout << "G4Cnv::volume:    + " << name << " <> " << vol->GetName() 
@@ -550,6 +555,33 @@ void* Geant4Converter::handleSensitive(const TNamed* sens_det, const set<const T
   return g4;
 }
 
+/// Convert the geometry visualisation attributes to the corresponding Geant4 object(s).
+void* Geant4Converter::handleVis(const string& name, const TNamed* vis) const  {
+  G4GeometryInfo& info = data();
+  G4VisAttributes* g4 = info.g4Vis[vis];
+  if ( !g4 )   {
+    float   r=0, g=0, b=0;
+    VisAttr attr  = Ref_t(vis);
+    int     style = attr.lineStyle();
+    attr.rgb(r,g,b);
+    g4 = new G4VisAttributes(attr.visible(),G4Colour(r,g,b,attr.alpha()));
+    //g4->SetLineWidth(attr->GetLineWidth());
+    g4->SetDaughtersInvisible(attr.showDaughters());
+    if ( style == VisAttr::SOLID ) {
+      g4->SetLineStyle(G4VisAttributes::unbroken);
+      g4->SetForceWireframe(false);
+      g4->SetForceSolid(true);
+    }
+    else if ( style == VisAttr::WIREFRAME || style == VisAttr::DASHED ) {
+      g4->SetLineStyle(G4VisAttributes::dashed);
+      g4->SetForceSolid(false);
+      g4->SetForceWireframe(true);
+    }
+    info.g4Vis[vis] = g4;
+  }
+  return g4;
+}
+
 /// Handle the geant 4 specific properties
 void Geant4Converter::handleProperties(LCDD::Properties& prp)   const {
   map<string,string> processors;
@@ -707,6 +739,9 @@ void Geant4Converter::create(DetElement top) {
   handle(this, geo.solids,    &Geant4Converter::handleSolid);
   cout << "++ Handled " << geo.solids.size() << " solids." << endl;
 
+  handle(this, geo.vis,       &Geant4Converter::handleVis);
+  cout << "++ Handled " << geo.solids.size() << " visualization attributes." << endl;
+
   handleMap(this, geo.sensitives, &Geant4Converter::handleSensitive);
   cout << "++ Handled " << geo.sensitives.size() << " sensitive detectors." << endl;