diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..936c8faf89fa07a3ff97ccd463e091b5ee08e2f2
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt
@@ -0,0 +1,60 @@
+################################################################################
+# Package: InDetTrackValidation
+################################################################################
+
+# Declare the package name:
+atlas_subdir( InDetTrackValidation )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaBaseComps
+                          Control/AthenaKernel
+                          GaudiKernel
+                          InnerDetector/InDetRawEvent/InDetRawData
+                          InnerDetector/InDetRecEvent/InDetPrepRawData
+                          InnerDetector/InDetSimEvent
+                          Tracking/TrkEvent/TrkParameters
+                          Tracking/TrkEvent/TrkTrack
+                          Tracking/TrkValidation/TrkValInterfaces
+                          PRIVATE
+                          Control/DataModel
+                          DetectorDescription/AtlasDetDescr
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          Event/EventPrimitives
+                          Event/xAOD/xAODEventInfo
+                          Generators/GeneratorObjects
+                          InnerDetector/InDetConditions/InDetBeamSpotService
+                          InnerDetector/InDetConditions/InDetConditionsSummaryService
+                          InnerDetector/InDetConditions/PixelConditionsServices
+                          InnerDetector/InDetConditions/SCT_ConditionsServices
+                          InnerDetector/InDetConditions/TRT_ConditionsData
+                          InnerDetector/InDetConditions/TRT_ConditionsServices
+                          InnerDetector/InDetDetDescr/InDetIdentifier
+                          InnerDetector/InDetDetDescr/InDetReadoutGeometry
+                          InnerDetector/InDetDetDescr/PixelGeoModel
+                          InnerDetector/InDetDetDescr/SCT_Cabling
+                          InnerDetector/InDetRecEvent/InDetRIO_OnTrack
+                          InnerDetector/InDetValidation/InDetTrackSplitterTool
+                          Tracking/TrkDetDescr/TrkSurfaces
+                          Tracking/TrkEvent/TrkEventPrimitives
+                          Tracking/TrkEvent/TrkMeasurementBase
+                          Tracking/TrkEvent/TrkPrepRawData
+                          Tracking/TrkEvent/TrkRIO_OnTrack
+                          Tracking/TrkEvent/TrkSpacePoint
+                          Tracking/TrkTools/TrkToolInterfaces )
+
+# External dependencies:
+find_package( CLHEP )
+find_package( HepMC )
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_component( InDetTrackValidation
+                     src/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel InDetRawData InDetPrepRawData InDetSimEvent TrkParameters TrkTrack TrkValInterfaces DataModel AtlasDetDescr EventPrimitives xAODEventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry SCT_CablingLib InDetRIO_OnTrack TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkPrepRawData TrkRIO_OnTrack TrkSpacePoint TrkToolInterfaces )
+
+# Install files from the package:
+atlas_install_headers( InDetTrackValidation )
+
diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h b/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h
index 8fedf15b0755807f670f0aa4637732099a6ab916..80db021a5a7ae031f37c255d757dbb38be17c799 100644
--- a/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h
+++ b/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h
@@ -48,6 +48,10 @@ private:
     bool                                   m_makeTRTStandaloneTracks;
     /** flag for using si only tracks **/
     bool                                   m_makeSiOnlyTracks;
+    /** flag to accept the upper segment **/
+    bool                                   m_takeUpperSegment;
+    /** flag to accept the lower segment **/
+    bool                                   m_takeLowerSegment;
     /** instances of IInDet */
     ToolHandle< InDet::IInDetTrackSplitterTool >  m_trackSplitterTool;
 
diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx b/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx
index 46debcec28a1e72079892a2d24f6c5fef5b471b6..b4946f6cc1b1e501e0385e6e4d264957e7705c3e 100644
--- a/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx
+++ b/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx
@@ -24,6 +24,8 @@ m_trackSplitterTool()
   declareProperty("OutputTrackCollection"   , m_OutputTrackCol);
   declareProperty("TrackSplitterTool"       , m_trackSplitterTool);
   declareProperty("makeSiOnlyTracks"        , m_makeSiOnlyTracks=false);
+  declareProperty("takeUpperSegment"        , m_takeUpperSegment=true);
+  declareProperty("takeLowerSegment"        , m_takeLowerSegment=true);
 }
 
 InDet::InDetSplittedTracksCreator::~InDetSplittedTracksCreator() {}
@@ -46,27 +48,30 @@ StatusCode InDet::InDetSplittedTracksCreator::initialize(){
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 StatusCode InDet::InDetSplittedTracksCreator::execute() {
    ATH_MSG_DEBUG("InDetSplittedTracksCreator execute()");
+   ATH_MSG_DEBUG("Input Track Collection: " << m_TrackCol);
 
    //return if no input collection is found
    const TrackCollection* trks = 0;
-   if (evtStore()->contains<TrackCollection>(m_TrackCol) &&
+   if ((not evtStore()->contains<TrackCollection>(m_TrackCol)) or
         (evtStore()->retrieve(trks,m_TrackCol)).isFailure()){
-      ATH_MSG_ERROR(" Could not retrieve the track collection" <<m_TrackCol);
+      ATH_MSG_ERROR(" Could not retrieve the track collection " <<m_TrackCol);
       return StatusCode::SUCCESS;
    }
 
    TrackCollection* splittedTracks=0;
-   if (evtStore()->contains<TrackCollection>(m_OutputTrackCol) &&
-        (evtStore()->retrieve(splittedTracks,m_OutputTrackCol)).isFailure()){
-   } else {
+   if ((not evtStore()->contains<TrackCollection>(m_OutputTrackCol)) or
+       (evtStore()->retrieve(splittedTracks,m_OutputTrackCol)).isFailure()) {
      splittedTracks = new TrackCollection;
+   } else {
+     ATH_MSG_WARNING("Output split track collection already exists: " << m_OutputTrackCol << ". Quitting.");
+     return StatusCode::SUCCESS;
    }
 
    //loop over tracks and split them in upper and lower part
    TrackCollection::const_iterator it = trks->begin();
    TrackCollection::const_iterator itE = trks->end();
    for (; it != itE; ++it){
-     
+     ATH_MSG_VERBOSE("Splitting Track");
      std::pair<Trk::Track*, Trk::Track*> splitTracks =  std::pair<Trk::Track*, Trk::Track*> (0,0);
      if (m_makeSiOnlyTracks){
        splitTracks = m_trackSplitterTool->splitInUpperLowerTrack(**it,true); //use Si only hits
@@ -76,14 +81,20 @@ StatusCode InDet::InDetSplittedTracksCreator::execute() {
      }
      //only save them if both track fits succeeded       
      if(splitTracks.first && splitTracks.second){
-       splittedTracks->push_back( splitTracks.first );
-       splittedTracks->push_back( splitTracks.second );
+       if (m_takeUpperSegment) {
+	 ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** Accept upper segment ");
+	 splittedTracks->push_back( splitTracks.first );
+       }
+       if (m_takeLowerSegment) {
+	 ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** Accept lower segment ");
+	 splittedTracks->push_back( splitTracks.second );
+       }
      } else {
        delete splitTracks.first; delete splitTracks.second;
      }
        
    }
-   ATH_MSG_DEBUG("SplittedTracks->size() " <<splittedTracks->size());
+   ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** SplittedTracks->size() " << splittedTracks->size() << "  stored in " << m_OutputTrackCol );
    
    if(evtStore()->record(splittedTracks, m_OutputTrackCol,false).isFailure() ){
      ATH_MSG_ERROR("Could not save the "<<m_OutputTrackCol);
diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx b/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx
index 32fa5d831908825b8f7fbaa79fe906b0175787e7..3cb849485a169f27ac498f83f9ad9eaa5d086cfc 100755
--- a/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx
+++ b/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx
@@ -49,12 +49,10 @@ using CLHEP::GeV;
 InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(const std::string& name, ISvcLocator* pSvcLocator):
   AthAlgorithm(name,pSvcLocator),
   m_riocontainer(0),
-  m_geoModel(0),
   m_hitcontainer(0),
   m_rdocontainer(0),
   //       m_inputTrackCollection("Tracks")
   //m_fullNtupleName("/NTUPLES/FILE1/FitterValidation/TrackStatistics"),
-  m_IBLAbsent(true),
   mjo_riocontainername("PixelClusters"),
   mjo_hitcontainername("PixelHits"),
   mjo_rdocontainername("PixelRDOs"),
@@ -66,6 +64,8 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co
   mjo_NN(false),
   mjo_ToT(false),
   mjo_onTrack(false),
+  m_IBLAbsent(true),
+  m_IBLParameterSvc("IBLParameterSvc",name),
   m_pixelCalib("PixelOfflineCalibSvc",name),
   m_iBeamCondSvc("BeamCondSvc",name),
   m_ntupleFileName("/NTUPLES/FILE1"),
@@ -75,6 +75,7 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co
   m_pixelid(0),
   m_nt(0),
   m_nnt(0),
+  m_geoModel(0),
   m_PixClusLocX(0),
   m_PixClusLocY(0),
   m_PixClusLocXcentroid(0),
@@ -177,8 +178,7 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co
   m_NN_position_idX(0),
   m_NN_position_idY(0),
   m_NN_theta(0),
-  m_NN_phi(0),
-  m_IBLParameterSvc("IBLParameterSvc",name)
+  m_NN_phi(0)
 {
   declareProperty("PixelClusterContainer", mjo_riocontainername);
   declareProperty("SiHitCollection",    mjo_hitcontainername);