diff --git a/DDRec/src/MaterialManager.cpp b/DDRec/src/MaterialManager.cpp
index 90a9deedf50d004eab784ba8c4c98258e61b734e..dc527f04756504beb23a34c80ffe80d92e8edb90 100644
--- a/DDRec/src/MaterialManager.cpp
+++ b/DDRec/src/MaterialManager.cpp
@@ -114,6 +114,13 @@ namespace DD4hep {
 	  node1=node2;
 	}
 	
+
+	//fg: protect against empty list:
+	if( _mV.empty() ){
+	  _mV.push_back( std::make_pair( Material( node1->GetMedium() ), totDist  )  ) ; 
+	}
+
+
 	_tgeoMgr->ClearTracks();
 	_tgeoMgr->CleanGarbage();
 	
diff --git a/DDRec/src/gear/createGearForILD.cpp b/DDRec/src/gear/createGearForILD.cpp
index bce26111f89bb85d6e732a2615e6a72df582a350..aeb50463c9631ad1f90de1fe9a3692bd1526d083 100644
--- a/DDRec/src/gear/createGearForILD.cpp
+++ b/DDRec/src/gear/createGearForILD.cpp
@@ -41,224 +41,261 @@ namespace DD4hep{
       
 
       //========= TPC ==============================================================================
-      DetElement tpcDE = lcdd.detector("TPC") ;
+      try{
 
-      FixedPadSizeTPCData* tpc = tpcDE.extension<FixedPadSizeTPCData>() ;
-
-      gear::TPCParametersImpl* gearTPC = new gear::TPCParametersImpl( tpc->driftLength /dd4hep::mm , gear::PadRowLayout2D::POLAR ) ;
-  
-      gearTPC->setPadLayout( new gear::FixedPadSizeDiskLayout( tpc->rMinReadout/dd4hep::mm , tpc->rMaxReadout/dd4hep::mm, tpc->padHeight/dd4hep::mm,
-							       tpc->padWidth/dd4hep::mm , tpc->maxRow, tpc->padGap /dd4hep::mm  ) ) ;
-      
-      gearTPC->setDoubleVal("tpcInnerRadius", tpc->rMin/dd4hep::mm  )  ; // inner r of support tube
-      gearTPC->setDoubleVal("tpcOuterRadius", tpc->rMax/dd4hep::mm  )  ; // outer radius of TPC
-      gearTPC->setDoubleVal("tpcInnerWallThickness", tpc->innerWallThickness/dd4hep::mm  )  ;   // thickness of inner shell
-      gearTPC->setDoubleVal("tpcOuterWallThickness", tpc->outerWallThickness/dd4hep::mm  )  ;   // thickness of outer shell
-      
-      tpcDE.addExtension< GearHandle >( new GearHandle( gearTPC, "TPCParameters" ) ) ;
-      
-      //========= VXD ==============================================================================
-      
-      DetElement vxdDE = lcdd.detector("VTX") ;
-      
-      ZPlanarData* vxd = vxdDE.extension<ZPlanarData>() ;
-      
-      //      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
-      int vxdType =  gear::ZPlanarParameters::CMOS ;
-      gear::ZPlanarParametersImpl* gearVXD = new gear::ZPlanarParametersImpl( vxdType, vxd->rInnerShell/dd4hep::mm,  vxd->rOuterShell/dd4hep::mm,
-									      vxd->zHalfShell/dd4hep::mm , vxd->gapShell/dd4hep::mm , 0.  ) ;
-      
-      for(unsigned i=0,n=vxd->layers.size() ; i<n; ++i){
+	DetElement tpcDE = lcdd.detector("TPC") ;
 	
-	const DDRec::ZPlanarData::LayerLayout& l = vxd->layers[i] ;
+	FixedPadSizeTPCData* tpc = tpcDE.extension<FixedPadSizeTPCData>() ;
 	
-	// FIXME set rad lengths to 0 -> need to get from DD4hep ....
-	gearVXD->addLayer( l.ladderNumber, l.phi0, 
-			   l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l.thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
-			   l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	gear::TPCParametersImpl* gearTPC = new gear::TPCParametersImpl( tpc->driftLength /dd4hep::mm , gear::PadRowLayout2D::POLAR ) ;
 	
-      }
-      
-      GearHandle* handle = new GearHandle( gearVXD, "VXDParameters" )  ;
-       
-      // quick hack for now: add the one material that is needed by KalDet :  
-      //      handle->addMaterial( "VXDSupportMaterial", 2.075865162e+01, 1.039383117e+01, 2.765900000e+02, 1.014262421e+03, 3.341388059e+03)  ; 
+	gearTPC->setPadLayout( new gear::FixedPadSizeDiskLayout( tpc->rMinReadout/dd4hep::mm , tpc->rMaxReadout/dd4hep::mm, tpc->padHeight/dd4hep::mm,
+								 tpc->padWidth/dd4hep::mm , tpc->maxRow, tpc->padGap /dd4hep::mm  ) ) ;
+	
+	gearTPC->setDoubleVal("tpcInnerRadius", tpc->rMin/dd4hep::mm  )  ; // inner r of support tube
+	gearTPC->setDoubleVal("tpcOuterRadius", tpc->rMax/dd4hep::mm  )  ; // outer radius of TPC
+	gearTPC->setDoubleVal("tpcInnerWallThickness", tpc->innerWallThickness/dd4hep::mm  )  ;   // thickness of inner shell
+	gearTPC->setDoubleVal("tpcOuterWallThickness", tpc->outerWallThickness/dd4hep::mm  )  ;   // thickness of outer shell
+	
+	tpcDE.addExtension< GearHandle >( new GearHandle( gearTPC, "TPCParameters" ) ) ;
 
-      // -------- better: get right averaged material from first ladder:  ------------------
-      MaterialManager matMgr ;
-      
-      const DDRec::ZPlanarData::LayerLayout& l = vxd->layers[0] ;
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
-      Vector3D a( l.distanceSupport                      , l.phi0 , 0. ,  Vector3D::cylindrical ) ;
-      Vector3D b( l.distanceSupport + l.thicknessSupport , l.phi0 , 0. ,  Vector3D::cylindrical ) ;
+      //========= VXD ==============================================================================
       
-      const MaterialVec& materials = matMgr.materialsBetween( a , b  ) ;
-
-      MaterialData mat = ( materials.size() > 1  ? matMgr.createAveragedMaterial( materials ) : materials[0].first  ) ;
+      try{
+	DetElement vxdDE = lcdd.detector("VXD") ;
+	
+	ZPlanarData* vxd = vxdDE.extension<ZPlanarData>() ;
+	
+	//      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
+	int vxdType =  gear::ZPlanarParameters::CMOS ;
+	gear::ZPlanarParametersImpl* gearVXD = new gear::ZPlanarParametersImpl( vxdType, vxd->rInnerShell/dd4hep::mm,  vxd->rOuterShell/dd4hep::mm,
+										vxd->zHalfShell/dd4hep::mm , vxd->gapShell/dd4hep::mm , 0.  ) ;
+	
+	for(unsigned i=0,n=vxd->layers.size() ; i<n; ++i){
+	  
+	  const DDRec::ZPlanarData::LayerLayout& l = vxd->layers[i] ;
+	  
+	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	  gearVXD->addLayer( l.ladderNumber, l.phi0, 
+			     l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l.thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
+			     l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	
+	}
+	
+	GearHandle* handle = new GearHandle( gearVXD, "VXDParameters" )  ;
+	
+	// quick hack for now: add the one material that is needed by KalDet :  
+	//      handle->addMaterial( "VXDSupportMaterial", 2.075865162e+01, 1.039383117e+01, 2.765900000e+02, 1.014262421e+03, 3.341388059e+03)  ; 
+	
+	// -------- better: get right averaged material from first ladder:  ------------------
+	MaterialManager matMgr ;
       
-      // std::cout << " ####### found materials between points : " << a << " and " << b << " : " ;
-      // for( unsigned i=0,n=materials.size();i<n;++i){
-      // 	std::cout <<  materials[i].first.name() << "[" <<   materials[i].second << "], " ;
-      // }
-      // std::cout << std::endl ;
-      // std::cout << "   averaged material : " << mat << std::endl ;
-
-      handle->addMaterial( "VXDSupportMaterial", mat.A(), mat.Z() , mat.density()/(dd4hep::kg/(dd4hep::g*dd4hep::m3)) , mat.radiationLength()/dd4hep::mm , mat.interactionLength()/dd4hep::mm )  ; 
-
+	const DDRec::ZPlanarData::LayerLayout& l = vxd->layers[0] ;
+	
+	Vector3D a( l.distanceSupport                      , l.phi0 , 0. ,  Vector3D::cylindrical ) ;
+	Vector3D b( l.distanceSupport + l.thicknessSupport , l.phi0 , 0. ,  Vector3D::cylindrical ) ;
+	
+	const MaterialVec& materials = matMgr.materialsBetween( a , b  ) ;
+	
+	MaterialData mat = ( materials.size() > 1  ? matMgr.createAveragedMaterial( materials ) : materials[0].first  ) ;
+	
+	// std::cout << " ####### found materials between points : " << a << " and " << b << " : " ;
+	// for( unsigned i=0,n=materials.size();i<n;++i){
+	// 	std::cout <<  materials[i].first.name() << "[" <<   materials[i].second << "], " ;
+	// }
+	// std::cout << std::endl ;
+	// std::cout << "   averaged material : " << mat << std::endl ;
+	
+	handle->addMaterial( "VXDSupportMaterial", mat.A(), mat.Z() , mat.density()/(dd4hep::kg/(dd4hep::g*dd4hep::m3)) , mat.radiationLength()/dd4hep::mm , mat.interactionLength()/dd4hep::mm )  ; 
+	
+	
+	vxdDE.addExtension< GearHandle >( handle ) ;
 
-      vxdDE.addExtension< GearHandle >( handle ) ;
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
       //========= SIT ==============================================================================
       
-      DetElement sitDE = lcdd.detector("SIT") ;
-      
-      ZPlanarData* sit = sitDE.extension<ZPlanarData>() ;
-      
-      //      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
-      int sitType =  gear::ZPlanarParameters::CCD ;
-      gear::ZPlanarParametersImpl* gearSIT = new gear::ZPlanarParametersImpl( sitType, sit->rInnerShell/dd4hep::mm,  sit->rOuterShell/dd4hep::mm,
-									      sit->zHalfShell/dd4hep::mm , sit->gapShell/dd4hep::mm , 0.  ) ;
-      std::vector<int> n_sensors_per_ladder ;
+      try{ 
 
-      for(unsigned i=0,n=sit->layers.size() ; i<n; ++i){
+	DetElement sitDE = lcdd.detector("SIT") ;
 	
-	const DDRec::ZPlanarData::LayerLayout& l = sit->layers[i] ;
+	ZPlanarData* sit = sitDE.extension<ZPlanarData>() ;
 	
-	// FIXME set rad lengths to 0 -> need to get from DD4hep ....
-	gearSIT->addLayer( l.ladderNumber, l.phi0, 
-			   l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l. thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
-			   l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	//      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
+	int sitType =  gear::ZPlanarParameters::CCD ;
+	gear::ZPlanarParametersImpl* gearSIT = new gear::ZPlanarParametersImpl( sitType, sit->rInnerShell/dd4hep::mm,  sit->rOuterShell/dd4hep::mm,
+										sit->zHalfShell/dd4hep::mm , sit->gapShell/dd4hep::mm , 0.  ) ;
+	std::vector<int> n_sensors_per_ladder ;
 	
+	for(unsigned i=0,n=sit->layers.size() ; i<n; ++i){
+	  
+	  const DDRec::ZPlanarData::LayerLayout& l = sit->layers[i] ;
+	  
+	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	  gearSIT->addLayer( l.ladderNumber, l.phi0, 
+			     l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l. thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
+			     l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	  
+	  
+	  n_sensors_per_ladder.push_back( l.sensorsPerLadder);
+	}
+	
+	gearSIT->setDoubleVal("strip_width_mm"  , sit->widthStrip / dd4hep::mm ) ;
+	gearSIT->setDoubleVal("strip_length_mm" , sit->lengthStrip/ dd4hep::mm ) ;
+	gearSIT->setDoubleVal("strip_pitch_mm"  , sit->pitchStrip / dd4hep::mm ) ;
+	gearSIT->setDoubleVal("strip_angle_deg" , sit->angleStrip / dd4hep::deg ) ;
+	
+	
+	gearSIT->setIntVals("n_sensors_per_ladder",n_sensors_per_ladder);
+	
+	sitDE.addExtension< GearHandle >( new GearHandle( gearSIT, "SITParameters" ) ) ;
 
-	n_sensors_per_ladder.push_back( l.sensorsPerLadder);
-      }
-     
-      gearSIT->setDoubleVal("strip_width_mm"  , sit->widthStrip / dd4hep::mm ) ;
-      gearSIT->setDoubleVal("strip_length_mm" , sit->lengthStrip/ dd4hep::mm ) ;
-      gearSIT->setDoubleVal("strip_pitch_mm"  , sit->pitchStrip / dd4hep::mm ) ;
-      gearSIT->setDoubleVal("strip_angle_deg" , sit->angleStrip / dd4hep::deg ) ;
-
-      
-      gearSIT->setIntVals("n_sensors_per_ladder",n_sensors_per_ladder);
+      } catch( std::runtime_error& e ){ 
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
-      sitDE.addExtension< GearHandle >( new GearHandle( gearSIT, "SITParameters" ) ) ;
       //============================================================================================
 
-      DetElement setDE = lcdd.detector("SET") ;
-      
-      ZPlanarData* set = setDE.extension<ZPlanarData>() ;
-      
-      //      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
-      int setType =  gear::ZPlanarParameters::CCD ;
-      gear::ZPlanarParametersImpl* gearSET = new gear::ZPlanarParametersImpl( setType, set->rInnerShell/dd4hep::mm,  set->rOuterShell/dd4hep::mm,
-									      set->zHalfShell/dd4hep::mm , set->gapShell/dd4hep::mm , 0.  ) ;
-      //      std::vector<int> n_sensors_per_ladder ;
-      n_sensors_per_ladder.clear() ;
+      try {
 
-      for(unsigned i=0,n=set->layers.size() ; i<n; ++i){
+	DetElement setDE = lcdd.detector("SET") ;
 	
-	const DDRec::ZPlanarData::LayerLayout& l = set->layers[i] ;
+	ZPlanarData* set = setDE.extension<ZPlanarData>() ;
 	
-	// FIXME set rad lengths to 0 -> need to get from DD4hep ....
-	gearSET->addLayer( l.ladderNumber, l.phi0, 
-			   l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l. thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
-			   l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	//      ZPlanarParametersImpl (int type, double shellInnerRadius, double shellOuterRadius, double shellHalfLength, double shellGap, double shellRadLength)
+	int setType =  gear::ZPlanarParameters::CCD ;
+	gear::ZPlanarParametersImpl* gearSET = new gear::ZPlanarParametersImpl( setType, set->rInnerShell/dd4hep::mm,  set->rOuterShell/dd4hep::mm,
+										set->zHalfShell/dd4hep::mm , set->gapShell/dd4hep::mm , 0.  ) ;
+	std::vector<int> n_sensors_per_ladder ;
+	//n_sensors_per_ladder.clear() ;
 	
+	for(unsigned i=0,n=set->layers.size() ; i<n; ++i){
+	  
+	  const DDRec::ZPlanarData::LayerLayout& l = set->layers[i] ;
+	  
+	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	  gearSET->addLayer( l.ladderNumber, l.phi0, 
+			     l.distanceSupport/dd4hep::mm,   l.offsetSupport/dd4hep::mm,   l. thicknessSupport/dd4hep::mm,   l.zHalfSupport/dd4hep::mm,   l.widthSupport/dd4hep::mm,   0. , 
+			     l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. )  ;
+	  
+	  
+	  n_sensors_per_ladder.push_back( l.sensorsPerLadder);
+	}
+	
+	gearSET->setDoubleVal("strip_width_mm"  , set->widthStrip / dd4hep::mm ) ;
+	gearSET->setDoubleVal("strip_length_mm" , set->lengthStrip/ dd4hep::mm ) ;
+	gearSET->setDoubleVal("strip_pitch_mm"  , set->pitchStrip / dd4hep::mm ) ;
+	gearSET->setDoubleVal("strip_angle_deg" , set->angleStrip / dd4hep::deg ) ;
+	
+	
+	gearSET->setIntVals("n_sensors_per_ladder",n_sensors_per_ladder);
+	
+	setDE.addExtension< GearHandle >( new GearHandle( gearSET, "SETParameters" ) ) ;
 
-	n_sensors_per_ladder.push_back( l.sensorsPerLadder);
-      }
-     
-      gearSET->setDoubleVal("strip_width_mm"  , set->widthStrip / dd4hep::mm ) ;
-      gearSET->setDoubleVal("strip_length_mm" , set->lengthStrip/ dd4hep::mm ) ;
-      gearSET->setDoubleVal("strip_pitch_mm"  , set->pitchStrip / dd4hep::mm ) ;
-      gearSET->setDoubleVal("strip_angle_deg" , set->angleStrip / dd4hep::deg ) ;
-
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
       
-      gearSET->setIntVals("n_sensors_per_ladder",n_sensors_per_ladder);
-
-      setDE.addExtension< GearHandle >( new GearHandle( gearSET, "SETParameters" ) ) ;
       //============================================================================================
 
-      DetElement ftdDE = lcdd.detector("FTD") ;
-      
-      ZDiskPetalsData* ftd = ftdDE.extension<ZDiskPetalsData>() ;
-      
-      gear::FTDParametersImpl* gearFTD = new gear::FTDParametersImpl();
-      
-      for(unsigned i=0,n=ftd->layers.size() ; i<n; ++i){
-	
-	const DDRec::ZDiskPetalsData::LayerLayout& l = ftd->layers[i] ;
-	
-
-	bool isDoubleSided  = l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::DoubleSided ] ;
- 
-	// avoid 'undefined reference' at link time ( if built w/o optimization ):
-	static const int PIXEL = gear::FTDParameters::PIXEL ;
-	static const int STRIP = gear::FTDParameters::STRIP ;
-	int  sensorType   = ( l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::Pixel ] ? PIXEL : STRIP ) ;
-	//			      gear::FTDParameters::PIXEL :  gear::FTDParameters::STRIP ) ;
-
-	double zoffset = fabs( l.zOffsetSupport ) ;
-	double signoffset =  l.zOffsetSupport > 0  ?  1. : -1 ;
-	
-	gearFTD->addLayer( l.petalNumber, l.sensorsPerPetal, 
-			   isDoubleSided, sensorType, 
-			   l.petalHalfAngle, l.phi0, l.alphaPetal, 
-			   l.zPosition/dd4hep::mm, zoffset/dd4hep::mm, signoffset,
-			   l.distanceSupport/dd4hep::mm, l.thicknessSupport/dd4hep::mm,
-			   l.widthInnerSupport/dd4hep::mm, l.widthOuterSupport/dd4hep::mm,
-			   l.lengthSupport/dd4hep::mm, 
-			   0.,
-			   l.distanceSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm,
-			   l.widthInnerSensitive/dd4hep::mm, l.widthOuterSensitive/dd4hep::mm,
-			   l.lengthSensitive/dd4hep::mm, 
-			   0. ) ;
-	
-
-	// FIXME set rad lengths to 0 -> need to get from DD4hep ....
-      }
-     
-      gearFTD->setDoubleVal("strip_width_mm"  , ftd->widthStrip / dd4hep::mm ) ;
-      gearFTD->setDoubleVal("strip_length_mm" , ftd->lengthStrip/ dd4hep::mm ) ;
-      gearFTD->setDoubleVal("strip_pitch_mm"  , ftd->pitchStrip / dd4hep::mm ) ;
-      gearFTD->setDoubleVal("strip_angle_deg" , ftd->angleStrip / dd4hep::deg ) ;
-
-     
-      ftdDE.addExtension< GearHandle >( new GearHandle( gearFTD, "FTDParameters" ) ) ;
+      try {
 
-      //============================================================================================
+	DetElement ftdDE = lcdd.detector("FTD") ;
+	
+	ZDiskPetalsData* ftd = ftdDE.extension<ZDiskPetalsData>() ;
+	
+	gear::FTDParametersImpl* gearFTD = new gear::FTDParametersImpl();
+	
+	for(unsigned i=0,n=ftd->layers.size() ; i<n; ++i){
+	  
+	  const DDRec::ZDiskPetalsData::LayerLayout& l = ftd->layers[i] ;
+	  
+	  
+	  bool isDoubleSided  = l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::DoubleSided ] ;
+	  
+	  // avoid 'undefined reference' at link time ( if built w/o optimization ):
+	  static const int PIXEL = gear::FTDParameters::PIXEL ;
+	  static const int STRIP = gear::FTDParameters::STRIP ;
+	  int  sensorType   = ( l.typeFlags[ DDRec::ZDiskPetalsStruct::SensorType::Pixel ] ? PIXEL : STRIP ) ;
+	  //			      gear::FTDParameters::PIXEL :  gear::FTDParameters::STRIP ) ;
+	  
+	  double zoffset = fabs( l.zOffsetSupport ) ;
+	  double signoffset =  l.zOffsetSupport > 0  ?  1. : -1 ;
+	  
+	  gearFTD->addLayer( l.petalNumber, l.sensorsPerPetal, 
+			     isDoubleSided, sensorType, 
+			     l.petalHalfAngle, l.phi0, l.alphaPetal, 
+			     l.zPosition/dd4hep::mm, zoffset/dd4hep::mm, signoffset,
+			     l.distanceSupport/dd4hep::mm, l.thicknessSupport/dd4hep::mm,
+			     l.widthInnerSupport/dd4hep::mm, l.widthOuterSupport/dd4hep::mm,
+			     l.lengthSupport/dd4hep::mm, 
+			     0.,
+			     l.distanceSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm,
+			     l.widthInnerSensitive/dd4hep::mm, l.widthOuterSensitive/dd4hep::mm,
+			     l.lengthSensitive/dd4hep::mm, 
+			     0. ) ;
+	  
+	  
+	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	}
+	
+	gearFTD->setDoubleVal("strip_width_mm"  , ftd->widthStrip / dd4hep::mm ) ;
+	gearFTD->setDoubleVal("strip_length_mm" , ftd->lengthStrip/ dd4hep::mm ) ;
+	gearFTD->setDoubleVal("strip_pitch_mm"  , ftd->pitchStrip / dd4hep::mm ) ;
+	gearFTD->setDoubleVal("strip_angle_deg" , ftd->angleStrip / dd4hep::deg ) ;
+	
+	
+	ftdDE.addExtension< GearHandle >( new GearHandle( gearFTD, "FTDParameters" ) ) ;
 
-      DetElement tubeDE = lcdd.detector("Tube") ;
-      
-      ConicalSupportData* tube = tubeDE.extension<ConicalSupportData>() ;
-      
-      gear::GearParametersImpl* gearTUBE = new gear::GearParametersImpl();
-      
-      tube->isSymmetricInZ = true ;
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
-      unsigned n = tube->sections.size() ;
-      
-      std::vector<double> rInner(n) ;
-      std::vector<double> rOuter(n) ;
-      std::vector<double> zStart(n) ;
+      //============================================================================================
 
-      for(unsigned i=0 ; i<n ; ++i){
+      try {
+
+	DetElement tubeDE = lcdd.detector("Tube") ;
 	
-	const ConicalSupportData::Section& s = tube->sections[i] ;
+	ConicalSupportData* tube = tubeDE.extension<ConicalSupportData>() ;
 	
-	rInner[i] = s.rInner/ dd4hep::mm  ; 
-	rOuter[i] = s.rOuter/ dd4hep::mm  ; 
-	zStart[i] = s.zPos  / dd4hep::mm  ; 
-
-	// FIXME set rad lengths to 0 -> need to get from DD4hep ....
-      }
-     
-      gearTUBE->setDoubleVals("RInner" , rInner ) ;
-      gearTUBE->setDoubleVals("ROuter" , rOuter ) ;
-      gearTUBE->setDoubleVals("Z"      , zStart ) ;
-
-     
-      tubeDE.addExtension< GearHandle >( new GearHandle( gearTUBE, "BeamPipe" ) ) ;
+	gear::GearParametersImpl* gearTUBE = new gear::GearParametersImpl();
+	
+	tube->isSymmetricInZ = true ;
+	
+	unsigned n = tube->sections.size() ;
+	
+	std::vector<double> rInner(n) ;
+	std::vector<double> rOuter(n) ;
+	std::vector<double> zStart(n) ;
+	
+	for(unsigned i=0 ; i<n ; ++i){
+	  
+	  const ConicalSupportData::Section& s = tube->sections[i] ;
+	  
+	  rInner[i] = s.rInner/ dd4hep::mm  ; 
+	  rOuter[i] = s.rOuter/ dd4hep::mm  ; 
+	  zStart[i] = s.zPos  / dd4hep::mm  ; 
+	  
+	  // FIXME set rad lengths to 0 -> need to get from DD4hep ....
+	}
+	
+	gearTUBE->setDoubleVals("RInner" , rInner ) ;
+	gearTUBE->setDoubleVals("ROuter" , rOuter ) ;
+	gearTUBE->setDoubleVals("Z"      , zStart ) ;
+	
+	
+	tubeDE.addExtension< GearHandle >( new GearHandle( gearTUBE, "BeamPipe" ) ) ;
+      
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
       //========= CALO ==============================================================================
 
@@ -266,32 +303,40 @@ namespace DD4hep{
       //*  test gear interface w/ LayeredCalorimeterData extension
       //**********************************************************
 
-      DetElement caloDE = lcdd.detector("HcalBarrel") ;
-      
-      LayeredCalorimeterData* calo = caloDE.extension<LayeredCalorimeterData>() ;
-      
-      gear::CalorimeterParametersImpl* gearCalo = 
-	( calo->layoutType == LayeredCalorimeterData::BarrelLayout  ?
-	  new gear::CalorimeterParametersImpl(  calo->extent[0]/dd4hep::mm, calo->extent[3]/dd4hep::mm, calo->symmetry, calo->phi0 )  :
-	  //CalorimeterParametersImpl (double rMin, double zMax, int symOrder=8, double phi0=0.0) - C'tor for a cylindrical (octagonal) BARREL calorimeter.
-	  new gear::CalorimeterParametersImpl(  calo->extent[0]/dd4hep::mm,  calo->extent[1]/dd4hep::mm,  calo->extent[2]/dd4hep::mm, calo->symmetry, calo->phi0 )   ) ;
-      //CalorimeterParametersImpl (double rMin, double rMax, double zMin, int symOrder=2, double phi0=0.0) - C'tor for a cylindrical (octagonal) ENDCAP calorimeter. 
-	  
-      for( unsigned i=0, nL = calo->layers.size() ; i <nL ; ++i ){
+      try {
 
-	LayeredCalorimeterData::Layer& l = calo->layers[i] ;
-
-	if( i == 0 ) {
-	  gearCalo->layerLayout().positionLayer( l.distance/dd4hep::mm, l.thickness/dd4hep::mm , l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, l.absorberThickness/dd4hep::mm ) ;
-	}else{
-	  gearCalo->layerLayout().addLayer(                             l.thickness/dd4hep::mm , l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, l.absorberThickness/dd4hep::mm ) ;
+	DetElement caloDE = lcdd.detector("HcalBarrel") ;
+	
+	LayeredCalorimeterData* calo = caloDE.extension<LayeredCalorimeterData>() ;
+      
+	gear::CalorimeterParametersImpl* gearCalo = 
+	  ( calo->layoutType == LayeredCalorimeterData::BarrelLayout  ?
+	    new gear::CalorimeterParametersImpl(  calo->extent[0]/dd4hep::mm, calo->extent[3]/dd4hep::mm, calo->symmetry, calo->phi0 )  :
+	    //CalorimeterParametersImpl (double rMin, double zMax, int symOrder=8, double phi0=0.0) - C'tor for a cylindrical (octagonal) BARREL calorimeter.
+	    new gear::CalorimeterParametersImpl(  calo->extent[0]/dd4hep::mm,  calo->extent[1]/dd4hep::mm,  calo->extent[2]/dd4hep::mm, calo->symmetry, calo->phi0 )   ) ;
+	//CalorimeterParametersImpl (double rMin, double rMax, double zMin, int symOrder=2, double phi0=0.0) - C'tor for a cylindrical (octagonal) ENDCAP calorimeter. 
+	
+	for( unsigned i=0, nL = calo->layers.size() ; i <nL ; ++i ){
+	  
+	  LayeredCalorimeterData::Layer& l = calo->layers[i] ;
+	  
+	  if( i == 0 ) {
+	    gearCalo->layerLayout().positionLayer( l.distance/dd4hep::mm, l.thickness/dd4hep::mm , l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, l.absorberThickness/dd4hep::mm ) ;
+	  }else{
+	    gearCalo->layerLayout().addLayer(                             l.thickness/dd4hep::mm , l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, l.absorberThickness/dd4hep::mm ) ;
+	  }
+	  
+	  
 	}
+	
+	caloDE.addExtension< GearHandle >( new GearHandle( gearCalo, "HcalBarrelParameters" ) ) ;
+      
 
+      } catch( std::runtime_error& e ){  
+	std::cerr << " >>>> " << e.what() << std::endl ;
+      } 
 
-      }
 
-      caloDE.addExtension< GearHandle >( new GearHandle( gearCalo, "HcalBarrelParameters" ) ) ;
-      
       //**********************************************************
       //*  test gear interface w/ LayeredExtensionImpl extension
       //**********************************************************
diff --git a/examples/SimpleDetector/compact/Simple_ILD.xml b/examples/SimpleDetector/compact/Simple_ILD.xml
index cbf8fc1cddab046e04afc6562b71901dc8151ea5..097c6bb62d56a0d61fca3df4a47d9a6dab0fbae1 100644
--- a/examples/SimpleDetector/compact/Simple_ILD.xml
+++ b/examples/SimpleDetector/compact/Simple_ILD.xml
@@ -86,7 +86,7 @@
         </layer>
       </detector>
 
-      <detector name="SIT" type="ZPlanarTracker" vis="SITVis" id="1" limits="Tracker_limits" readout="SITCollection" insideTrackingVolume="true">
+      <detector name="SIT" type="ZPlanarTracker" vis="SITVis" id="2" limits="Tracker_limits" readout="SITCollection" insideTrackingVolume="true">
         <layer nLadders="10" phi0="0.000000000e+00" id="0">
           <ladder distance="1.531000000e+02*mm" thickness="1.000000000e+00*mm" width="9.916044311e+01*mm" length="3.680000000e+02*mm" offset="0.000000000e+00*mm"  material="CarbonFiber" /> 
           <sensitive distance="1.529000000e+02*mm" thickness="2.000000000e-01*mm" width="9.916044311e+01*mm" length="3.680000000e+02*mm" offset="0.000000000e+00*mm" material="G4_Si"/>
diff --git a/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp b/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp
index 35bb49b6f689ee8d2c48f92246efcacd00592ce1..0fe1bea9535d20e3b615aaecdc7f7358d210e0fe 100644
--- a/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp
+++ b/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp
@@ -11,6 +11,8 @@
 #include "DD4hep/DetFactoryHelper.h"
 
 #include "DDRec/Surface.h"
+#include "DDRec/DetectorData.h"
+
 
 using namespace DD4hep;
 using namespace DD4hep::Geometry;
@@ -31,6 +33,8 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens)  {
 
   PlacedVolume pv;
   
+  DDRec::ZPlanarData*  zPlanarData = new DDRec::ZPlanarData ;
+
   //=========  loop over layer elements in xml  ======================================
 
   for(xml_coll_t c(e, _U(layer) ); c; ++c)  {
@@ -85,6 +89,30 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens)  {
 
 
     //-----------------------------------
+    //  store the data in an extension to be used for reconstruction 
+    DDRec::ZPlanarData::LayerLayout thisLayer ;
+
+    thisLayer.sensorsPerLadder =  1 ; // for now only one planar sensor
+    thisLayer.lengthSensor     =  2. * sens_zhalf ;
+    
+    thisLayer.distanceSupport  = supp_distance ;
+    thisLayer.offsetSupport    = supp_offset ;
+    thisLayer.thicknessSupport = supp_thickness ;
+    thisLayer.zHalfSupport     = supp_zhalf ;
+    thisLayer.widthSupport     = supp_width ;      
+    
+    thisLayer.distanceSensitive  = sens_distance ;  
+    thisLayer.offsetSensitive    = sens_offset ;	  
+    thisLayer.thicknessSensitive = sens_thickness ; 
+    thisLayer.zHalfSensitive     = sens_zhalf ;	  
+    thisLayer.widthSensitive     = sens_width ;     
+    
+    thisLayer.ladderNumber =  nLadders ;
+    thisLayer.phi0         =  phi0 ;
+    
+    zPlanarData->layers.push_back( thisLayer ) ;
+    //-----------------------------------
+
 
     Material supp_mat     = lcdd.material( supp_matS ) ;
     Material sens_mat     = lcdd.material( sens_matS ) ;
@@ -170,6 +198,9 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens)  {
 
   }
 
+
+  tracker.addExtension< DDRec::ZPlanarData >( zPlanarData ) ;
+  
   Volume mother =  lcdd.pickMotherVolume( tracker ) ;
 
   pv = mother.placeVolume(assembly);