diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinStep.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinStep.h
index b92b0a8339621f37c9786bc40db4ae1baee60d5e..996bfa1723b221e025a074c41b5cc7a60a5dc74c 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinStep.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinStep.h
@@ -52,14 +52,14 @@ public:
                       const IInterface * ifc) : AthAlgTool(algname, name, ifc) {}
 
   virtual StatusCode initialize() override;
-  StatusCode setRanges(const FPGATrackSimBinStep* prev,const ParSet& parMin, const ParSet& parMax);
+  StatusCode setRanges(FPGATrackSimBinStep* prev,const ParSet& parMin, const ParSet& parMax);
 
   // property of step
   const std::vector<unsigned> stepIdx(IdxSet idx) const; // index for only the pars used in this step
   const std::vector<unsigned> stepBins() const;   // bin sizes for only the pars used in this step
   const std::vector<unsigned>& stepPars() const {return m_pars;}  // parameters used for this step
   const std::vector<unsigned> nBins() const {return m_parBins;}   // bin sizes for only the pars used in this step
-  const std::string& stepName() const {return m_name;}
+  const std::string stepName() const {return this->name().substr(this->name().find_last_of(".")+1);}
   unsigned stepNum() const {return m_stepNum;}
 
   // Calculation of bin boundaries
@@ -78,8 +78,8 @@ public:
   IdxSet binIdx(const ParSet &pars) const;
 
   // Convert to previous steps idx
-  IdxSet convertToPrev(const IdxSet& cur) const;  
-
+  IdxSet convertToPrev(const IdxSet& cur) const;
+  
   //--------------------------------------------------------------------------------------------------
   //
   //  Set which bins are valid
@@ -95,7 +95,6 @@ public:
   const FPGATrackSimBinArray<int>& validBinsLocal() const { return m_validBinLocal;}
 
 private:
-  Gaudi::Property<std::string> m_name{this, "name", {}, "String name assigned to Binning Step"};
   Gaudi::Property<std::vector<unsigned>> m_parBinsConfig{this,"parBins",{},"Vector of number of bins for each parameter (expect 5)"};
 
   // pars used in this step
@@ -108,7 +107,7 @@ private:
   FPGATrackSimBinArray<int> m_validBinLocal; // this is for the pars used at this step
 
   // pointer to FPGATrackSimBinStep of previous step
-  const FPGATrackSimBinStep *m_prev{0};
+  FPGATrackSimBinStep *m_prev{0};
   unsigned m_stepNum{}; // number of step
   
   // the bins for this step
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinTool.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinTool.h
index b344b03d76cacc9bb813beff1ec9e391b8efeca8..801e0e0390c55425223eca2d549f27a5079ddc9d 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinTool.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinTool.h
@@ -45,9 +45,7 @@ class FPGATrackSimBinTool : virtual public AthAlgTool {
 public:
   friend FPGATrackSimBinStep;
 
-  FPGATrackSimBinTool(const std::string &algname, const std::string &name,
-                      const IInterface *ifc)
-      : AthAlgTool(algname, name, ifc) {}
+  FPGATrackSimBinTool(const std::string &algname, const std::string &name, const IInterface *ifc);
   
   virtual StatusCode initialize() override;
 
@@ -101,19 +99,19 @@ private:
   Gaudi::Property<double> m_etaFractionalPadding{this, "etaFractionalPadding", {}, "Fractional padding used when calculating the valid range of bins"};
   Gaudi::Property<double> m_phiFractionalPadding{this, "phiFractionalPadding", {}, "Fractional padding used when calculating the valid range of bins"};
   Gaudi::Property<double> m_qOverPtFractionalPadding{this, "qOverPtFractionalPadding", {}, "Fractional padding used when calculating the valid range of bins"};
-  Gaudi::Property<std::vector<float>> m_parMinConfig{this, "parMin", {}, "Vector of minimum bounds of parameters (expect 5"};
-  Gaudi::Property<std::vector<float>> m_parMaxConfig{this, "parMax", {}, "Vector of maximum bounds of parameters (expect 5"};
-
-  ToolHandleArray<FPGATrackSimBinStep> m_steps;
-  ToolHandle<IFPGATrackSimBinDesc> m_binDesc;
+  Gaudi::Property<std::vector<double>> m_parMinConfig{this, "parMin", {}, "Vector of minimum bounds of parameters (expect 5"};
+  Gaudi::Property<std::vector<double>> m_parMaxConfig{this, "parMax", {}, "Vector of maximum bounds of parameters (expect 5"};
 
+  ToolHandleArray<FPGATrackSimBinStep> m_steps{this, "Steps", {}, "Array of FPGATrackSimBinStep: describes which parameters are binned at each step"};
+  ToolHandle<IFPGATrackSimBinDesc> m_binDesc{this, "BinDesc", "FPGATrackSimBinDescBase", "FPGATrackSimBinDescBase: describes binning track parameters"};
+  
   //
   // Internal data
   //
 
   // These indicate the range of the full binning
-  ParSet m_parMin;
-  ParSet m_parMax;
+  ParSet m_parMin{};
+  ParSet m_parMax{};
 
   // A list of the step names for convienience
   std::vector<std::string> m_stepNames;
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinUtil.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinUtil.h
index 266f182e3987e1348c9dcd21ca28ec83ae1622d1..6d19e048d3e2abd71c284ac04a3c829aadc5ede7 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinUtil.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinUtil.h
@@ -94,6 +94,7 @@ struct StoredHit {
   double etaShift;  // shift in r-z plane as  quantified by BinDesc
   unsigned layer;
   double rzrad() const;
+  static const unsigned invalidLayer = std::numeric_limits<unsigned>::max();
 };
 std::ostream &operator<<(std::ostream &os, const StoredHit &hit);
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinnedHits.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinnedHits.h
index 2a12b906d44789e14617374fa961c01bb3f0dbd4..218dc640565d84423b74eedb8c1240a25d6e0b0f 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinnedHits.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/FPGATrackSimBinning/FPGATrackSimBinnedHits.h
@@ -54,7 +54,7 @@ public:
                          const IInterface *ifc)
       : AthAlgTool(algname, name, ifc) {}
 
-  StatusCode initialize() override;
+  virtual StatusCode initialize() override;
   void initBinnedDataArrays();
 
   StatusCode fill(const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits);
@@ -105,8 +105,10 @@ private:
   std::vector<FPGATrackSimBinArray<BinEntry>> m_binnedHitsStep;
 
   // The tool where the steps are defined
-  ToolHandle<FPGATrackSimBinTool> m_bintool;
-
+  ToolHandle<FPGATrackSimBinTool> m_bintool {
+    this, "BinTool", "FPGATrackSimBinTool",
+        "FPGATrackSimBinTool: contains tools describe which parameters are used and each step of binning"};
+  
   // The number of layers, either set externally from pmap or set by the layerMap
   unsigned m_nLayers{0}; 
 };
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinStep.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinStep.cxx
index 5e7cc40a109d8eec1e5b554c4473c24d9fb5e032..ae8564b3cb29fd604f528773ab1e66aca8d1a652 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinStep.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinStep.cxx
@@ -9,7 +9,7 @@
  */
 
 #include "AthenaBaseComps/AthMsgStreamMacros.h"
-#include "FPGATrackSimBinning/FPGATrackSimBinTool.h"
+#include "FPGATrackSimBinning/IFPGATrackSimBinDesc.h"
 #include <GaudiKernel/StatusCode.h>
 #include "FPGATrackSimBinning/FPGATrackSimBinStep.h"
 
@@ -26,16 +26,15 @@ StatusCode FPGATrackSimBinStep::initialize()
   return StatusCode::SUCCESS;
 }
 
-StatusCode FPGATrackSimBinStep::setRanges(const FPGATrackSimBinStep *prev,
+StatusCode FPGATrackSimBinStep::setRanges(FPGATrackSimBinStep *prev,
                                           const ParSet &parMin,
                                           const ParSet &parMax) {
+
   m_prev = prev;
   if (prev) {
     m_stepNum = prev->m_stepNum+1;
   } else {
-    m_stepNum = 0;
-    //prev is dereferenced in several places after this; better to exit than crash
-    return StatusCode::FAILURE;
+    m_stepNum = 0;    
   }
   m_parMin = parMin;
   m_parMax = parMax;
@@ -46,22 +45,28 @@ StatusCode FPGATrackSimBinStep::setRanges(const FPGATrackSimBinStep *prev,
       return StatusCode::FAILURE;
     }
     m_parStep[par] = (m_parMax[par] - m_parMin[par]) / m_parBins[par];
-
     if (m_parBins[par] <= 0)
     {
       ATH_MSG_FATAL("Every dimension must be at least one bin (set #bins=1 for not binning in that parameter)");
     }
-    if (m_parBins[par] < prev->m_parBins[par]) {
-      ATH_MSG_FATAL("Number of bins can only increase with each step");
-      return StatusCode::FAILURE;
-    }
-    if (m_parBins[par] % prev->m_parBins[par] !=0) {
-      ATH_MSG_FATAL("Number of bins must be integer multiple of bins in previous step");
-      return StatusCode::FAILURE;
-    }
-    if (m_parBins[par] != prev->m_parBins[par]) {
-      // This step involves this parameter
-      m_pars.push_back(par);      
+    if (prev) {
+      if (m_parBins[par] < prev->m_parBins[par]) {
+        ATH_MSG_FATAL("Number of bins can only increase with each step");
+        return StatusCode::FAILURE;
+      }
+      if (m_parBins[par] % prev->m_parBins[par] !=0) {
+        ATH_MSG_FATAL("Number of bins must be integer multiple of bins in previous step");
+        return StatusCode::FAILURE;
+      }
+      if (m_parBins[par] != prev->m_parBins[par]) {
+        // This step involves this parameter
+        m_pars.push_back(par);
+      }
+    } else {
+      if (m_parBins[par] != 1) {
+        // This step involves this parameter
+        m_pars.push_back(par);
+      }
     }
   }
 
@@ -105,7 +110,7 @@ IdxSet FPGATrackSimBinStep::convertToPrev(const IdxSet &cur) const {
   IdxSet retv{};
   if (m_prev) {
     for (unsigned par =0; par < FPGATrackSimTrackPars::NPARS; par++) {
-      retv[par] = (cur[par]*m_prev->m_parBins[par]/m_parBins[par]);
+      retv[par] = int(cur[par]*((const FPGATrackSimBinStep*)m_prev)->m_parBins[par]/m_parBins[par]);
     }
   } else {
     ATH_MSG_FATAL("convertToPrev called, but no previous");
@@ -123,12 +128,12 @@ const std::vector<unsigned> FPGATrackSimBinStep::stepBins() const {
 void FPGATrackSimBinStep::setValidBin(const std::vector<unsigned>& idx) {
   m_validBinFull[idx] = true;
   m_validBinLocal[stepIdx(idx)] = true;
-  if (m_prev) setValidBin(convertToPrev(idx));
+  if (m_prev) m_prev->setValidBin(convertToPrev(idx));
 }
 
 void FPGATrackSimBinStep::initValidBins() {
   m_validBinFull.setsize(m_parBins, false);
-  m_validBinLocal[stepBins()] = true;
+  m_validBinLocal.setsize(stepBins(), false);
 }
 
 void FPGATrackSimBinStep::printValidBin() const {
@@ -139,7 +144,7 @@ void FPGATrackSimBinStep::printValidBin() const {
     if (bin.data())
       validBinsFull++;
   }
-  ATH_MSG_INFO("Step" << m_name<< "Valid Bins Full: " << validBinsFull);
+  ATH_MSG_INFO("Step" << name() << "Valid Bins Full: " << validBinsFull);
 
   // count valid bins
   int validBinsLocal = 0;
@@ -147,7 +152,7 @@ void FPGATrackSimBinStep::printValidBin() const {
   if (bin.data())
     validBinsLocal++;
   }
-  ATH_MSG_INFO("Step" << m_name<<  "Valid Bins Local: " << validBinsLocal);
+  ATH_MSG_INFO("Step" << name() <<  "Valid Bins Local: " << validBinsLocal);
   
 }
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinTool.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinTool.cxx
index 21af3113dbb62d5e301325ba86ec93900b93f155..49340db1bdd94645c5759b590f5d2107547f8cb9 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinTool.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinTool.cxx
@@ -9,12 +9,25 @@
 
 #include "FPGATrackSimBinning/FPGATrackSimBinTool.h"
 
+FPGATrackSimBinTool::FPGATrackSimBinTool(const std::string &algname, const std::string &name,
+  const IInterface *ifc)
+: AthAlgTool(algname, name, ifc) {
+}
+
 
 // ----------------------------------------------------------------------------------------
 //  AthTool Methods
 // ----------------------------------------------------------------------------------------
 
 StatusCode FPGATrackSimBinTool::initialize() {
+  // Dump the configuration to make sure it propagated through right
+  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
+  for( Gaudi::Details::PropertyBase* prop : props ) {
+    if (prop->ownerTypeName()==this->type()) {      
+      ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
+    }
+  }
+
   // Retrieve
   ATH_MSG_INFO("Using " << m_steps.size() << " steps");
   ATH_CHECK(m_steps.retrieve());
@@ -24,11 +37,14 @@ StatusCode FPGATrackSimBinTool::initialize() {
     return StatusCode::FAILURE;
   }
 
+  m_parMin = std::vector<double>(m_parMinConfig);
+  m_parMax = std::vector<double>(m_parMaxConfig);
+
   FPGATrackSimBinStep* prev = 0;
   for (auto &step : m_steps) {
     ATH_MSG_INFO("Got Binning Step " << step->stepName());
     m_stepNames.push_back(step->stepName());
-    if (step->setRanges(prev, m_parMin, m_parMax)) {
+    if (!step->setRanges(prev, m_parMin, m_parMax)) {
       ATH_MSG_FATAL("Failed to setRange on step");
       return StatusCode::FAILURE;
     }
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinUtil.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinUtil.cxx
index eaa97e4ff628eb2ae6de743bee8193ed7f82cd15..a42f440dffe6a476464b72f7e5591290a3663bec 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinUtil.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinUtil.cxx
@@ -164,10 +164,8 @@ double GeomHelpers::zFromPars(double r, const FPGATrackSimTrackPars &pars)
     return zhit;
 }
 
-double GeomHelpers::phiFromPars(double r, const FPGATrackSimTrackPars &pars)
-{
+double GeomHelpers::phiFromPars(double r, const FPGATrackSimTrackPars &pars) {
     double phi_hit = xAOD::P4Helpers::deltaPhi(pars.phi,asin(r * CurvatureConstant * pars.qOverPt - pars.d0 / r));
-
     return phi_hit;
 }
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinnedHits.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinnedHits.cxx
index 59a7c0d67d35abfefa74856d7632c5dbde8a4760..be6a9bfe8d60bc971e7d1f09e4fcb3d68718c107 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinnedHits.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimBinnedHits.cxx
@@ -9,6 +9,8 @@
 
 #include "FPGATrackSimBinning/FPGATrackSimBinnedHits.h"
 #include "FPGATrackSimBinning/IFPGATrackSimBinDesc.h"
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
+#include "FPGATrackSimBinning/IFPGATrackSimBinDesc.h"
 #include "FPGATrackSimBinning/FPGATrackSimBinStep.h"
 #include "FPGATrackSimBinning/FPGATrackSimBinUtil.h"
 #include <GaudiKernel/StatusCode.h>
@@ -16,9 +18,19 @@
 
 
 StatusCode FPGATrackSimBinnedHits::initialize() {
+  // Dump the configuration to make sure it propagated through right
+  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
+  for( Gaudi::Details::PropertyBase* prop : props ) {
+    if (prop->ownerTypeName()==this->type()) {      
+      ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
+    }
+  }
+
+
+  ATH_MSG_DEBUG("Retrieving BinTool");
   ATH_CHECK(m_bintool.retrieve());
+  ATH_MSG_DEBUG("Retrieving EvtSel");
   ATH_CHECK(m_EvtSel.retrieve());
-
   // Compute which bins correspond to track parameters that are in the region
   // i.e. the pT, eta, phi, z0 and d0 bounds
   // list of valid bins is extracted from the layer map if its loaded
@@ -30,9 +42,8 @@ StatusCode FPGATrackSimBinnedHits::initialize() {
     readLayerMap(m_lyrmapFile);
   }
   m_bintool->printValidBin(); // also dumps firmware constants
-
   initBinnedDataArrays();
-  
+
   return StatusCode::SUCCESS;
 }
 
@@ -60,54 +71,57 @@ void FPGATrackSimBinnedHits::resetBins() {
 // by m_binning object)
 StatusCode FPGATrackSimBinnedHits::fill(
     const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits) {
-  ATH_MSG_DEBUG("In fillImage");
+  ATH_MSG_DEBUG("In fill");
 
   for (const auto &step : m_bintool->steps()) {
     int stepnum = 0;
 
+    ATH_MSG_DEBUG("fill binning: step num " << stepnum << " " << step->stepName());
     for (auto &bin : step->validBinsFull()) {
 
       // skip bin if it is invalid
       if (!bin.data())
         continue;
 
+      //ATH_MSG_DEBUG("valid bin");
       if (stepnum == 0) {
 
         // first step, hits from input stream
         for (const std::shared_ptr<const FPGATrackSimHit> &hit : hits) {
           StoredHit storedhit(hit);
           if (m_bintool->binDesc()->hitInBin(*step.get(), bin.idx(),
-                                            storedhit)) {
+                                             storedhit)) {
             m_binnedHitsStep[stepnum][bin.idx()].addHit(storedhit);
           }
         }
 
-      } else {
-
+      } else {        
         // subsequent steps, use hits from previous step
         for (const auto &hit :
              m_binnedHitsStep[stepnum - 1][step->convertToPrev(bin.idx())].hits) {
           StoredHit storedhit(hit);
           if (m_bintool->binDesc()->hitInBin(*step.get(), bin.idx(),
-                                            storedhit)) {
+                                             storedhit)) {
+            
             // One last step, set layer based on layerMap or use default from pmap
             if (step.get() == m_bintool->lastStep()) {
               if (m_mod_to_lyr_map.size() != 0) {
                 if (m_mod_to_lyr_map[bin.idx()].contains(hit.hitptr->getIdentifierHash())) {
                   storedhit.layer = m_mod_to_lyr_map[bin.idx()][hit.hitptr->getIdentifierHash()];
-                }
+                  m_binnedHitsStep[stepnum][bin.idx()].addHit(storedhit);
+                } 
               } else {
                 storedhit.layer = hit.hitptr->getLayer();
+                m_binnedHitsStep[stepnum][bin.idx()].addHit(storedhit);
               }
-            }
-
-            m_binnedHitsStep[stepnum][bin.idx()].addHit(storedhit);
-
+            }            
           }
         }
       }
 
     } //  end loop over bins
+      
+    stepnum++;
   } // end loop over stepsd
 
   return StatusCode::SUCCESS;
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.cxx
index 6c89f8d7e2b8fabc68c348c6de65a42df00c6d26..3d6eb749888f38021648779f1cb66583f6109247 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.cxx
@@ -9,9 +9,24 @@
  */
 
 #include "FPGATrackSimKeyLayerBinDesc.h"
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
 #include "FPGATrackSimBinning/FPGATrackSimBinStep.h"
 
+StatusCode FPGATrackSimKeyLayerBinDesc::initialize()
+{
+  // Dump the configuration to make sure it propagated through right
+  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
+  for( Gaudi::Details::PropertyBase* prop : props ) {
+    if (prop->ownerTypeName()==this->type()) {      
+      ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
+    }
+  }
 
+  m_keylyrtool.setR1(m_rin);
+  m_keylyrtool.setR2(m_rout);
+
+  return StatusCode::SUCCESS;
+}
 
 bool FPGATrackSimKeyLayerBinDesc::hitInBin(const FPGATrackSimBinStep &step,
                                            const IdxSet &idx,
@@ -26,8 +41,9 @@ bool FPGATrackSimKeyLayerBinDesc::hitInBin(const FPGATrackSimBinStep &step,
 
     if (stepIsRPhi(step)) {
         // distance of hit from bin center
-        storedhit.phiShift = phiResidual(step.binCenter(idx),storedhit.hitptr.get());
-
+        storedhit.phiShift =
+            phiResidual(step.binCenter(idx), storedhit.hitptr.get());
+        
         // Get expected curvature shift from bin center    
         auto half_xm_bin_pars = parSetToKeyPars(step.binCenter(idx));
         half_xm_bin_pars.xm = step.binWidth(4)/2.0; // 4 = xm par
@@ -43,8 +59,8 @@ bool FPGATrackSimKeyLayerBinDesc::hitInBin(const FPGATrackSimBinStep &step,
         // distance of hit from bin center
         storedhit.etaShift = etaResidual(step.binCenter(idx),storedhit.hitptr.get());
     
-        double width_z_in  = step.binWidth(0);
-        double width_z_out = step.binWidth(1);
+        double width_z_in  = step.binWidth(0)/2.0;
+        double width_z_out = step.binWidth(1)/2.0;
         double zrange = width_z_in + (width_z_out-width_z_in) * (hitr-r1)/(r2-r1);
         
         passesEta = std::abs(storedhit.etaShift) < zrange;
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.h
index 9293feb85b4b24f5cf5d2715a930ccaa42c11af6..cea3fcddf6bb00e75abb87f12163634ad01b62b7 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimBinning/src/FPGATrackSimKeyLayerBinDesc.h
@@ -23,6 +23,8 @@
  */
 #include "AthenaBaseComps/AthAlgTool.h"
 
+#include "FPGATrackSimBinning/IFPGATrackSimBinDesc.h"
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
 #include "FPGATrackSimBinning/IFPGATrackSimBinDesc.h"
 #include "FPGATrackSimObjects/FPGATrackSimTrackPars.h"
 #include "FPGATrackSimObjects/FPGATrackSimHit.h"
@@ -48,10 +50,13 @@ public:
       declareInterface<IFPGATrackSimBinDesc>(this);
     }
 
+    virtual StatusCode initialize() override;
+
     virtual const std::string &parNames(unsigned i) const override { return m_parNames[i]; }
 
     // convert back and forth from pT, eta, phi, d0, z0 and internal paramater set
-    virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override {
+    virtual const ParSet
+    trackParsToParSet(const FPGATrackSimTrackPars &pars) const override {
       return keyparsToParSet(m_keylyrtool.trackParsToKeyPars(pars));
     }
     virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override {