diff --git a/DDRec/src/gear/createGearForILD.cpp b/DDRec/src/gear/createGearForILD.cpp
index c58941743c6706a3cd49acae0331dfc13090608d..7557baece828dbf472f47e5fbcec5f74cf6a8e82 100644
--- a/DDRec/src/gear/createGearForILD.cpp
+++ b/DDRec/src/gear/createGearForILD.cpp
@@ -9,6 +9,8 @@
 
 #include "DDSurfaces/Vector3D.h"
 
+#include "DDSegmentation/Segmentation.h"
+
 #include "gearimpl/TPCParametersImpl.h"
 #include "gearimpl/FixedPadSizeDiskLayout.h"
 #include "gearimpl/ZPlanarParametersImpl.h"
@@ -39,7 +41,14 @@ namespace DD4hep{
       
       std::cout << " **** running plugin createGearForILD ! " <<  std::endl ;
       
-
+      
+      // ===========================================================================================
+      // global parameters:
+      
+      double crossing_angle(0.) ;
+      try{ crossing_angle = lcdd.constant<double>("ILC_Main_Crossing_Angle") ; } catch(std::runtime_error&e) {std::cerr << " >>>> " << e.what() << std::endl ;} 
+      
+      
       //========= TPC ==============================================================================
       try{
 
@@ -371,14 +380,51 @@ namespace DD4hep{
 	
 	  if( it->first == "HcalBarrel" ){
 	    // additional parameters needed by MarlinPandora
-	    gearCalo->setIntVal("Hcal_outer_polygon_order"   , calo->outer_symmetry  ) ;
+	    gearCalo->setIntVal("Hcal_outer_polygon_order"   ,  calo->outer_symmetry  ) ;
 	    gearCalo->setDoubleVal("Hcal_outer_polygon_phi0" ,  calo->phi0 ) ;
 	  }
 		  
+	  if( it->first == "BeamCal" ){
+
+	    try{
+	      // additional parameters needed by BCalReco
+	      
+	      SensitiveDetector sD = lcdd.sensitiveDetector( it->first   )   ;
+	      Readout readOut = sD.readout() ;
+	      Segmentation seg = readOut.segmentation() ;
+	      
+	      //	    DDSegmentation::DoubleVecParameter rPar =  dynamic_cast<DDSegmentation::DoubleVecParameter>( seg.segmentation()->parameter("grid_r_values"));
+	      DDSegmentation::DoubleVecParameter pPar =  dynamic_cast<DDSegmentation::DoubleVecParameter>( seg.segmentation()->parameter("grid_phi_values"));
+	      DDSegmentation::DoubleParameter    oPPar=  dynamic_cast<DDSegmentation::DoubleParameter>(    seg.segmentation()->parameter("offset_phi"));
+	      
+
+	      //offset_phi="-180*degree+(360*degree-BCal_SpanningPhi)*0.5"
+	      double offsetPhi   = oPPar->typedValue() ;
+	      double spanningPhi = 360.*dd4hep::deg - 2.*( offsetPhi + 180.*dd4hep::deg ) ;  
+
+	      gearCalo->setDoubleVals( "phi_segmentation"     , pPar->typedValue()  );
+	      gearCalo->setDoubleVal(  "cylinder_starting_phi", offsetPhi  );
+	      gearCalo->setDoubleVal(  "cylinder_spanning_phi", spanningPhi );
+	      gearCalo->setDoubleVal(  "beam_crossing_angle"  , crossing_angle );
+
+	      //fixme: don't know how to get these parameters at this stage ...
+	      //       probably need a named parameter object at every DetElement  ....
+	      gearCalo->setDoubleVal(  "dead_area_outer_r"       ,   0 );
+	      gearCalo->setDoubleVal(  "pairsMonitorZ"           ,   0. );
+	      gearCalo->setDoubleVal(  "FIXME_dead_area_outer_r" ,  -1. );
+	      gearCalo->setDoubleVal(  "FIXME_pairsMonitorZ"     ,  -1. );
+	    
+	    } catch( std::runtime_error& e ){  
+	      std::cerr << " >>>> BeamCal: " << e.what() << std::endl ;
+	    }
+	  }
 
+	  if( it->first == "Lcal" ||  it->first == "LHcal" ){
+	    gearCalo->setDoubleVal(  "beam_crossing_angle"  , crossing_angle );
+	  }
 
 	  caloDE.addExtension< GearHandle >( new GearHandle( gearCalo, it->second ) ) ;
-
+	  
 	} catch( std::runtime_error& e ){  
 	  std::cerr << " >>>> " << e.what() << std::endl ;
 	}