diff --git a/Simulation/ISF/ISF_SimulationSelectors/cmt/requirements b/Simulation/ISF/ISF_SimulationSelectors/cmt/requirements
index 45d46ccde40128bbc5d859d44de50d46e9de4f64..10816c5a3b7403e7c13882de523a29d999a5322f 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/cmt/requirements
+++ b/Simulation/ISF/ISF_SimulationSelectors/cmt/requirements
@@ -9,24 +9,20 @@ manager Wolfgang Lukas <Wolfgang.Lukas@cern.ch>
 # public use statements
 use AtlasPolicy                 AtlasPolicy-*
 use GaudiInterface              GaudiInterface-*        External
-use AtlasHepMC                  AtlasHepMC-*            External
 
-use ISF_Event                   ISF_Event-*             Simulation/ISF/ISF_Core
-use ISF_Interfaces              ISF_Interfaces-*        Simulation/ISF/ISF_Core
 
 use AtlasROOT                   AtlasROOT-*             External
-use BarcodeServices             BarcodeServices-*       Simulation/Barcode      
 
 #################################################################
 # private use statements
 private
+use AtlasHepMC                  AtlasHepMC-*            External
+use ISF_Event                   ISF_Event-*             Simulation/ISF/ISF_Core
+use ISF_Interfaces              ISF_Interfaces-*        Simulation/ISF/ISF_Core
 use ISF_HepMC_Event             ISF_HepMC_Event-*       Simulation/ISF/ISF_HepMC
+use ISF_TrackingInterfaces      ISF_TrackingInterfaces-* Simulation/ISF/ISF_Tracking
 
-use TrkDetDescrInterfaces       TrkDetDescrInterfaces-* Tracking/TrkDetDescr
-use TrkExInterfaces             TrkExInterfaces-*       Tracking/TrkExtrapolation
-use TrkEventPrimitives          TrkEventPrimitives-*    Tracking/TrkEvent
-use TrkParameters               TrkParameters-*         Tracking/TrkEvent
-use TrkGeometry                 TrkGeometry-*           Tracking/TrkDetDescr
+use BarcodeServices             BarcodeServices-*       Simulation/Barcode      
 
 public
 library ISF_SimulationSelectors *.cxx components/*.cxx
diff --git a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
index ab65f6fdbd0ca2e347a4ae41506ff9437e966346..ffc5f043517134c3a8ff5a8a745ada5618bb4abf 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
+++ b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
@@ -82,9 +82,15 @@ def getDefaultFatrasNewExtrapolationSelector(name="ISF_DefaultFatrasNewExtrapola
     return getDefaultSimSelector(name, **kwargs )
 
 def getFatrasPileupSelector(name="ISF_FatrasPileupSelector", **kwargs): 
+    kwargs.setdefault("PileupBCID"   , [1] )    
     kwargs.setdefault("Simulator"   , getService('ISF_FatrasPileupSimSvc'))
     return getPileupSimSelector(name, **kwargs )
 
+def getFatrasPileupSelector_noHits(name="ISF_FatrasPileupSelector_noHits", **kwargs):    
+    kwargs.setdefault("PileupBCID"   , [2] )    
+    kwargs.setdefault("Simulator"   , getService('ISF_FatrasPileupSimSvc_noHits'))
+    return getPileupSimSelector(name, **kwargs )
+
 def getFatrasRandomSelector(name="ISF_FatrasRandomSelector", **kwargs):
     kwargs.setdefault("Simulator"   , getService('ISF_FatrasSimSvc'))
     return getRandomSimSelector(name, **kwargs )
@@ -201,14 +207,8 @@ def getElectronsMuonsConeSimSelector(name="ISF_ElectronsMuonsConeSimSelector", *
     return ISF__ConeSimSelector(name, **kwargs)
 
 def getHiggsLeptonsConeGeant4CaloSelector(name="ISF_HiggsLeptonsConeGeant4CaloSelector", **kwargs):
-    # set tracking geometry (use Fatras for now)    
-    kwargs.setdefault( 'ExtrapolateToCaloEntry', 1 )
-    kwargs.setdefault( "TrackingGeometrySvc", getService("AtlasTrackingGeometrySvc") )
-
-    atlasExtrapolator = getPublicTool("AtlasExtrapolator")
-    atlasExtrapolator.ApplyMaterialEffects=False
-    kwargs.setdefault("Extrapolator" , atlasExtrapolator )      
-
+    kwargs.setdefault( 'ExtrapolateToCaloEntry', True                           )
+    kwargs.setdefault( 'Extrapolator'          , 'ISF_CaloEntryTrkExtrapolator' )
     return getHiggsLeptonsConeGeant4Selector(name, **kwargs)
 
 def getWLeptonsConeGeant4Selector(name="ISF_WLeptonsConeGeant4Selector", **kwargs):
diff --git a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
index 13eef64c4f99564710dcbf0564aafd497c4a471e..9d0815ea90f95419426b4b18660b593ff3bf37d2 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
+++ b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
@@ -38,7 +38,7 @@ addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getEtaGreater5Par
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getSubDetStickyGeant4SimSelector"        , "ISF_SubDetStickyGeant4SimSelector"       )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getGlobalStickyGeant4SimSelector"        , "ISF_GlobalStickyGeant4SimSelector"       )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultFastCaloSimSelector"           , "ISF_DefaultFastCaloSimSelector"          )
-addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastCaloSimPileupSelector"            , "ISF_FastCaloSimPileupSelector"          )
+addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastCaloSimPileupSelector"            , "ISF_FastCaloSimPileupSelector"           )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastHitConvAlgFastCaloSimSelector"    , "ISF_FastHitConvAlgFastCaloSimSelector"   )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultLegacyAFIIFastCaloSimSelector" , "ISF_DefaultLegacyAFIIFastCaloSimSelector")
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastHitConvAlgLegacyAFIIFastCaloSimSelector" , "ISF_FastHitConvAlgLegacyAFIIFastCaloSimSelector")
@@ -49,7 +49,8 @@ addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultGeant4S
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultAFIIGeant4Selector"            , "ISF_DefaultAFIIGeant4Selector"           )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultLongLivedGeant4Selector"       , "ISF_DefaultLongLivedGeant4Selector"      )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFullGeant4Selector"                   , "ISF_FullGeant4Selector"                  )
-addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getPassBackGeant4Selector"               , "ISF_PassBackGeant4Selector"                  )
+addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getPassBackGeant4Selector"               , "ISF_PassBackGeant4Selector"              )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFatrasPileupSelector"                 , "ISF_FatrasPileupSelector"                )
+addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFatrasPileupSelector_noHits"          , "ISF_FatrasPileupSelector_noHits"         )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFatrasRandomSelector"                 , "ISF_FatrasRandomSelector"                )
 
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.cxx
index 401fb3c15a1f64bd89f3955750f5f34e57ab7422..6d7f172ce67ed835e74b2202f49cea74eafd3f98 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.cxx
@@ -7,21 +7,14 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/ConeSimSelector.h"
+#include "ConeSimSelector.h"
 // ISF includes
 #include "ISF_Event/ISFParticle.h"
 #include "ISF_Event/HepMCHelper.h"
 #include "ISF_HepMC_Event/HepMC_TruthBinding.h"
 
 // Trk
-#include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h"
-
-#include "TrkExInterfaces/IExtrapolator.h"
-
-#include "TrkGeometry/TrackingGeometry.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkEventPrimitives/PdgToParticleHypothesis.h"
+#include "ISF_TrackingInterfaces/ITrkExtrapolator.h"
 
 /** Constructor **/
 ISF::ConeSimSelector::ConeSimSelector(const std::string& t, const std::string& n, const IInterface* p) : 
@@ -33,58 +26,51 @@ ISF::ConeSimSelector::ConeSimSelector(const std::string& t, const std::string& n
   m_relatives(),
   m_relationProp(),
   m_relation(HepMC::parents),
-  m_trackingGeometry(0),
-  m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc",n),
-  m_trackingGeometryName("AtlasTrackingGeometry"),
-  m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
   m_extrapolateToCalo(false),
-  m_caloEntrance(0),
-  m_pdgToParticleHypothesis(new Trk::PdgToParticleHypothesis())
+  m_extrapolator()
 {
     declareInterface<ISF::ISimulationSelector>(this);
     
     // cone options
     declareProperty( "ConeCreatorPDGs",
-                     m_absPDGVector,
-                     "Register cones around particles with this PDG code" );
+        m_absPDGVector,
+        "Register cones around particles with this PDG code" );
     declareProperty( "ConeCreatorMinPt",
-                     m_cut_minPt,
-                     "Register cones around particles with this minimum pT" );
+        m_cut_minPt,
+        "Register cones around particles with this minimum pT" );
     declareProperty( "ConeSize",
-                     m_cut_coneSize2,
-                     "Size of cone around initial particles." );
+        m_cut_coneSize2,
+        "Size of cone around initial particles." );
     declareProperty( "CheckParticlePosition",
-                     m_cut_checkPosition,
-                     "Choose if particle position (or momentum direction) has to be within cone." );
+        m_cut_checkPosition,
+        "Choose if particle position (or momentum direction) has to be within cone." );
 
 
     declareProperty( "CheckConeCreatorAncestors",
-                     m_checkRelatives,
-                     "on/off switch to check ancestor particles for cone creation (eg. cone only around e from Z decay)" );
+        m_checkRelatives,
+        "on/off switch to check ancestor particles for cone creation (eg. cone only around e from Z decay)" );
     declareProperty( "ConeCreatorAncestor",
-                     m_relativesVec,
-                     "Only ISFParticles which have specified 'Relation' to the given PDGCode are selected." );
+        m_relativesVec,
+        "Only ISFParticles which have specified 'Relation' to the given PDGCode are selected." );
     // as defined in the HepMC manual HepMC::GenVertex::particle iterator
     declareProperty( "ConeCreatorAncestorRelation",
-                     m_relationProp,
-                     "Relation to the given PDG codes: 0=parents, 1=family, 2=ancestors, 3=relatives." );
+        m_relationProp,
+        "Relation to the given PDG codes: 0=parents, 1=family, 2=ancestors, 3=relatives." );
 
-    declareProperty( "TrackingGeometrySvc", 
-		     m_trackingGeometrySvc,
-		     "TrackingGeometrySvc used for track extrapolation" );
-    declareProperty( "Extrapolator", 
-		     m_extrapolator,
-		     "Extrapolator used for track extrapolation" );   
+    // track extrapolation to estimate impact point of particle on next sub-detector
     declareProperty( "ExtrapolateToCaloEntry",
-		     m_extrapolateToCalo,
-		     "Extrapolate particles to calorimeter entry layer and build cone there" );
+        m_extrapolateToCalo,
+        "Extrapolate particles to calorimeter entry layer and build cone there" );
+    declareProperty( "Extrapolator", 
+        m_extrapolator,
+        "Extrapolator used for track extrapolation" );   
 }
 
 
 /** Destructor **/
 ISF::ConeSimSelector::~ConeSimSelector()
 {
-  delete m_pdgToParticleHypothesis;
+
 }
 
 
@@ -106,18 +92,8 @@ StatusCode  ISF::ConeSimSelector::initialize()
       m_relation = HepMCHelper::convertIteratorRange( m_relationProp);
     }
     
-    StatusCode sc = StatusCode::SUCCESS;
-
-    if ( m_extrapolateToCalo ){
-      sc = m_extrapolator.retrieve();
-      if (sc.isFailure()){
-	ATH_MSG_FATAL( "Could not get " << m_extrapolator );
-	return StatusCode::FAILURE;
-      }
-    }
-    
     ATH_MSG_VERBOSE( "Initialize successful" );
-    return sc;
+    return StatusCode::SUCCESS;
 }
 
 
@@ -130,7 +106,6 @@ StatusCode  ISF::ConeSimSelector::finalize()
 }
 
 
-
 void ISF::ConeSimSelector::beginEvent()
 {
     ATH_MSG_VERBOSE("beginEvent being called. Resetting the cone container.");
@@ -186,62 +161,35 @@ void ISF::ConeSimSelector::update(const ISFParticle& particle) {
     
     if ( m_extrapolateToCalo ) {
       
-      if( m_extrapolator.empty() ) {
-	ATH_MSG_ERROR( "Problem with extrapolator!" );
-	return;
-      }
-      
-      if ( !m_caloEntrance ) {
-	if ( !m_trackingGeometry ) { 
-	  if ( !retrieveTrackingGeometry() ) {
-	    ATH_MSG_ERROR( "Problem with TrackingGeometrySvc!" );
-	    return;
-	  }
-	}
-	m_caloEntrance = m_trackingGeometry->trackingVolume("InDet::Containers::EntryVolume");
-	if (!m_caloEntrance) ATH_MSG_FATAL("Failed to retrieve calo entrance!");
-      }
-      
-      // create objects from ISFParticle needed for extrapolation
-      Trk::CurvilinearParameters par(particle.position(),particle.momentum(),particle.charge());
-      
-      int  absPdg   = abs(particle.pdgCode());
-      //bool photon   = (absPdg == 22);
-      //bool geantino = (absPdg == 999);
-      //bool charged  = photon || geantino ? false : (particle.charge()*particle.charge() > 0) ;
-      
-      Trk::ParticleHypothesis particleHypo = 
-	m_pdgToParticleHypothesis->convert(particle.pdgCode(),particle.charge());
-      if ( absPdg == 999 ) particleHypo = Trk::geantino;
-      
-      // extrapolate to calorimeter entry
-      const Trk::TrackParameters* extrapolatedPars = 
-	m_extrapolator->extrapolateToVolume(par,*m_caloEntrance,Trk::alongMomentum,particleHypo);
-      
-      // get momentum from extrapolatedPars
-      const Amg::Vector3D& extrapolatedMomentum = extrapolatedPars->momentum();
-      
+      ISF::ISFParticle *extrapolatedParticle = m_extrapolator->extrapolate( particle );
+
+      const Amg::Vector3D& initialPos      = particle.position();
+      const Amg::Vector3D& initialMom      = particle.momentum();
+      const Amg::Vector3D& extrapolatedPos = extrapolatedParticle->position();
+      const Amg::Vector3D& extrapolatedMom = extrapolatedParticle->momentum();
+
       // check if passes cuts
-      passes = ConeParticleCuts::checkAndRegisterCone(particle,extrapolatedMomentum);
-      eta=extrapolatedMomentum.eta();
-      phi=extrapolatedMomentum.phi();
+      passes = ConeParticleCuts::checkAndRegisterCone(particle, extrapolatedMom);
+      eta=extrapolatedMom.eta();
+      phi=extrapolatedMom.phi();
       
       ATH_MSG_DEBUG("Initial position: ("
-		    <<particle.position().x()<<","
-		    <<particle.position().y()<<","
-		    <<particle.position().z()<<"), final position: ("
-		    <<extrapolatedPars->position().x()<<","
-		    <<extrapolatedPars->position().y()<<","
-		    <<extrapolatedPars->position().z()<<")");
+            <<initialPos.x()<<","
+            <<initialPos.y()<<","
+            <<initialPos.z()<<"), final position: ("
+            <<extrapolatedPos.x()<<","
+            <<extrapolatedPos.y()<<","
+            <<extrapolatedPos.z()<<")");
       
       ATH_MSG_DEBUG("Initial eta/phi: ("
-		    <<particle.momentum().eta()<<"/"
-		    <<particle.momentum().phi()<<"), final eta/phi: ("
-		    <<extrapolatedPars->momentum().eta()<<"/"
-		    <<extrapolatedPars->momentum().phi()<<")");
-      
+            <<initialMom.eta()<<"/"
+            <<initialMom.phi()<<"), final eta/phi: ("
+            <<extrapolatedMom.eta()<<"/"
+            <<extrapolatedMom.phi()<<")");
+
       // cleanup
-      delete extrapolatedPars;
+      delete extrapolatedParticle;
+
     }
     else {
       passes = ConeParticleCuts::checkAndRegisterCone(particle);
@@ -251,10 +199,10 @@ void ISF::ConeSimSelector::update(const ISFParticle& particle) {
     
     if (passes) {
       ATH_MSG_DEBUG("Particle (eta=" << eta << ", " 
-		    << " phi=" << phi << ","
-		    << " pdg=" << particle.pdgCode() << ","
-		    << " barcode=" << particle.barcode() << ")"
-		    << " has passed all cuts. A new simulation cone around it has been created");
+            << " phi=" << phi << ","
+            << " pdg=" << particle.pdgCode() << ","
+            << " barcode=" << particle.barcode() << ")"
+            << " has passed all cuts. A new simulation cone around it has been created");
     }
   }
 
@@ -276,19 +224,3 @@ bool  ISF::ConeSimSelector::passSelectorCuts(const ISFParticle& isfpart) const
   return passes;
 }
 
-bool ISF::ConeSimSelector::retrieveTrackingGeometry() const 
-{
-  if ( m_trackingGeometry ) return true;
-  if ( m_trackingGeometrySvc.empty() ) return false;
-  MsgStream log(msgSvc(),name());
-  StatusCode sc = m_trackingGeometrySvc.retrieve();
-  if ( sc.isFailure() ){
-    log << MSG::WARNING << " failed to retrieve geometry Svc " << m_trackingGeometrySvc << endreq;
-    return false;
-  } 
-  log << MSG::INFO << "  geometry Svc " << m_trackingGeometrySvc << " retrieved " << endreq;
-  
-  m_trackingGeometry = m_trackingGeometrySvc->trackingGeometry();
-  if ( !m_trackingGeometry ) return false;
-  return true;
-}
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/ConeSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.h
similarity index 73%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/ConeSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.h
index 4442330bb880b8c0e5fd179bfac466cb1ec42ebf..b22c118ac4ef0252c316581bb7672dcdae630b98 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/ConeSimSelector.h
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/ConeSimSelector.h
@@ -18,16 +18,11 @@
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
 
-namespace Trk {
-  class IExtrapolator;
-  class ITrackingGeometrySvc;
-  class TrackingGeometry;
-  class TrackingVolume;
-  class PdgToParticleHypothesis;
-}
-
 namespace ISF {
 
+  // forward delcarations
+  class ITrkExtrapolator;
+
   /** @class ConeSimSelector
   
       This SimulationSelector implementation registers cones around particles that
@@ -66,9 +61,6 @@ namespace ISF {
       virtual bool passSelectorCuts(const ISFParticle& particle) const;
 
     private:
-
-      bool retrieveTrackingGeometry() const;
-
       std::vector<int>                          m_absPDGVector;  //!< abs(PDG) for particles to create cones around
       /** ISFParticle has to have a relative which is in this list to create a cone*/
       bool                                      m_checkRelatives;//!< on/off for checking relatives
@@ -79,20 +71,9 @@ namespace ISF {
       int                                       m_relationProp;  //!< Python property
       HepMC::IteratorRange                      m_relation;      //!< HepMC
 
-      /** tracking geometry for geometry signature */
-      mutable const Trk::TrackingGeometry*      m_trackingGeometry;     //!< the tracking geometry owned by the navigator      
-      ServiceHandle<Trk::ITrackingGeometrySvc>  m_trackingGeometrySvc;  //!< ServiceHandle to the TrackingGeometrySvc
-      std::string                               m_trackingGeometryName; //!< default name of the TrackingGeometry  
-
-      /** extrapolation to calo entry */
-      ToolHandle<Trk::IExtrapolator>       m_extrapolator;              //!< ToolHandle for track extrapolator
-
-      bool                                      m_extrapolateToCalo; //!< on/off for extrapolating track to CaloEntry prior before building cone
-
-      mutable const Trk::TrackingVolume*        m_caloEntrance;
-
-      Trk::PdgToParticleHypothesis*             m_pdgToParticleHypothesis; //!< converts PDG ID to hypothesis for TrackParameters
-
+      /** Track extrapolation to estimate impact point of particle on next sub-detector*/
+      bool                                      m_extrapolateToCalo; //!< enable/disable
+      ToolHandle<ISF::ITrkExtrapolator>         m_extrapolator;      //!< extrapolator tool
   };
 
 }
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.cxx
index 9b088df08f96d8eeed1b6a4f5f8c5b9eab9f64c3..b8f59cf65bdb1a688b85c82482dad26b5a0d9830 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/DefaultSimSelector.h"
+#include "DefaultSimSelector.h"
 // HepMC includes
 #include "ISF_Event/ISFParticle.h"
 // Units includes
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/DefaultSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.h
similarity index 100%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/DefaultSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/DefaultSimSelector.h
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.cxx
index b351681337d67a7a7fc3f2d4a3f50d757134aa51..f0277cca240ac6567e17654d4a8e67d5db003b62 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/HistorySimSelector.h"
+#include "HistorySimSelector.h"
 
 // ISF includes
 #include "ISF_Event/ISFParticle.h"
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/HistorySimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.h
similarity index 100%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/HistorySimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/HistorySimSelector.h
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.cxx
index 4426d9c775ccce37e62a3471d96d1e4ba33d9178..01b08e47015e22ee32b180252c472d6e858b5a3e 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/KinematicSimSelector.h"
+#include "KinematicSimSelector.h"
 
 /** Constructor **/
 ISF::KinematicSimSelector::KinematicSimSelector(const std::string& t, const std::string& n, const IInterface* p) : 
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/KinematicSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.h
similarity index 100%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/KinematicSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/KinematicSimSelector.h
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.cxx
index ff80a721139a7b0420e8765167d857d03b75bd3a..af0dc8a2711b14b8b47e3ed7dbbdd2ad18222b13 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/PileupSimSelector.h"
+#include "PileupSimSelector.h"
 // HepMC includes
 #include "ISF_Event/ISFParticle.h"
 // Units includes
@@ -15,9 +15,12 @@
 
 /** Constructor **/
 ISF::PileupSimSelector::PileupSimSelector(const std::string& t, const std::string& n, const IInterface* p) : 
-  ISimulationSelector(t,n,p)
+  ISimulationSelector(t,n,p),
+  m_npass(0),m_nfail(0)
 {
     declareInterface<ISF::ISimulationSelector>(this);
+    declareProperty("PileupBCID",m_pileupbcid,
+		   "BICDs to be flagged as being pileup");
 }
 
 /** Destructor **/
@@ -28,28 +31,41 @@ ISF::PileupSimSelector::~PileupSimSelector()
 // Athena algtool's Hooks
 StatusCode  ISF::PileupSimSelector::initialize()
 {
-    ATH_MSG_VERBOSE("Initializing ...");
-    return StatusCode::SUCCESS;
+  ATH_MSG_INFO("Initializing with " << m_pileupbcid.size() <<
+	       " BCIDs to be accepted");
+  for (std::vector<int>::const_iterator itr=m_pileupbcid.begin();
+       itr!=m_pileupbcid.end();++itr)
+    ATH_MSG_INFO(" - accept BCID " << *itr);
+  return StatusCode::SUCCESS;
 }
 
 StatusCode  ISF::PileupSimSelector::finalize()
 {
-    ATH_MSG_VERBOSE("Finalizing ...");
-    return StatusCode::SUCCESS;
+  ATH_MSG_INFO("Finalizing with " << m_npass << " particles accepted and " 
+	       << m_nfail << " rejected by filter");
+  return StatusCode::SUCCESS;
 }
 
 /** check whether given particle passes all cuts -> will be used for routing decision*/
 bool  ISF::PileupSimSelector::passSelectorCuts(const ISFParticle& particle) const
 {
-  Barcode::ParticleBarcode barcode = particle.barcode();
+  // test to see if extra barcode BCID is in list to accept
+  // if no ExtraBC present, default to BCID 0
 
-  int bcid = m_bitcalculator.GetBCID( barcode );
-
-  ATH_MSG_VERBOSE( "[fatras pileupselector] barcode = " << barcode << " bcid = " << bcid 
-                   << " extra = " << ( particle.getUserInformation()!=0 ? particle.getUserInformation()->getExtraBC() : -1 ) );
-
-  //if ( bcid!=0 ) { return false; }
-
-  return true;
+  int extrabc=particle.getUserInformation()!=0 ? particle.getUserInformation()->getExtraBC() : -1;
+  int bcid2=0;
+  if (extrabc>=0) {
+    bcid2=m_bitcalculator.GetBCID(extrabc);
+  }
+  // check if extra BCID is in list
+  for (std::vector<int>::const_iterator itr=m_pileupbcid.begin();
+       itr!=m_pileupbcid.end();++itr) {
+    if ((*itr)==bcid2) {
+      ++m_npass;
+      return true;
+    }
+  }
+  ++m_nfail;
+  return false;
 }
 
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/PileupSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.h
similarity index 87%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/PileupSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.h
index 810c6a888cc0ed24787224206130e9d68bf82b2c..2edc83c6f12b3471f7c8d169d768c27ee3015921 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/PileupSimSelector.h
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/PileupSimSelector.h
@@ -42,6 +42,12 @@ namespace ISF {
 
     private:
      mutable Barcode::BitCalculator m_bitcalculator;
+
+     std::vector<int> m_pileupbcid; // vector of BCIDs to select
+
+     mutable int m_npass; // number of particles filter accepts
+     mutable int m_nfail; // number of particles filter rejects
+
   }; 
   
 }
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.cxx
index 3e53f1635f0d38b1cb5c7c4a3f5a3687ed971c63..03cb13a1a7b14125fc80ad6e377ec7d0f28b8da8 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // class include
-#include "ISF_SimulationSelectors/RandomSimSelector.h"
+#include "RandomSimSelector.h"
 // HepMC includes
 #include "ISF_Event/ISFParticle.h"
 // Units includes
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/RandomSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.h
similarity index 100%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/RandomSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/RandomSimSelector.h
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.cxx
index 1603117dfdfceead55261504ea0fadf56bd46768..15e31b13fce32c7da293fa26e625a331c0d2b3f2 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.cxx
@@ -6,7 +6,7 @@
 // TruthAssocSimSelector.cxx, (c) ATLAS Detector software
 /////////////////////////////////////////////////////////////////// 
 // class include
-#include "ISF_SimulationSelectors/TruthAssocSimSelector.h"
+#include "TruthAssocSimSelector.h"
 
 // ISF includes
 #include "ISF_Event/ISFParticle.h"
diff --git a/Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/TruthAssocSimSelector.h b/Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.h
similarity index 100%
rename from Simulation/ISF/ISF_SimulationSelectors/ISF_SimulationSelectors/TruthAssocSimSelector.h
rename to Simulation/ISF/ISF_SimulationSelectors/src/TruthAssocSimSelector.h
diff --git a/Simulation/ISF/ISF_SimulationSelectors/src/components/ISF_SimulationSelectors_entries.cxx b/Simulation/ISF/ISF_SimulationSelectors/src/components/ISF_SimulationSelectors_entries.cxx
index 5f42a1b1eaca1570b421eeb3a004f80e666d812e..efeb0fa9ed4ab60f65532206d7c9ba791edc00b7 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/src/components/ISF_SimulationSelectors_entries.cxx
+++ b/Simulation/ISF/ISF_SimulationSelectors/src/components/ISF_SimulationSelectors_entries.cxx
@@ -1,11 +1,11 @@
 #include "GaudiKernel/DeclareFactoryEntries.h"
-#include "ISF_SimulationSelectors/DefaultSimSelector.h"
-#include "ISF_SimulationSelectors/KinematicSimSelector.h"
-#include "ISF_SimulationSelectors/TruthAssocSimSelector.h"
-#include "ISF_SimulationSelectors/HistorySimSelector.h"
-#include "ISF_SimulationSelectors/ConeSimSelector.h"
-#include "ISF_SimulationSelectors/PileupSimSelector.h"
-#include "ISF_SimulationSelectors/RandomSimSelector.h"
+#include "../DefaultSimSelector.h"
+#include "../KinematicSimSelector.h"
+#include "../TruthAssocSimSelector.h"
+#include "../HistorySimSelector.h"
+#include "../ConeSimSelector.h"
+#include "../PileupSimSelector.h"
+#include "../RandomSimSelector.h"
 
 DECLARE_NAMESPACE_TOOL_FACTORY( ISF , DefaultSimSelector         )
 DECLARE_NAMESPACE_TOOL_FACTORY( ISF , KinematicSimSelector       )