diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx
index cf21c217211f20680e7682a9a2e5fddd94d94a7e..e517001ec5b8b773e029bbefbb950028dd48bfdb 100644
--- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx
+++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx
@@ -50,16 +50,16 @@ m_accumulateHits(0),
 m_TRTHelper(0),
 m_mapSvc("TRT_HWMappingSvc",name),
 m_DCSSvc("TRT_DCS_ConditionsSvc",name),
-m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name), // use this service to retrieve barrel and end-cap straw number later on, as well as DTMROC,.. 
+m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name), // use this service to retrieve barrel and end-cap straw number later on, as well as DTMROC,..
 m_TRTStrawStatusSummaryTool("TRT_StrawStatusSummaryTool", this),
 m_trt_hole_finder("TRTTrackHoleSearchTool"),
 m_locR_cut(1.4),
 m_fileName("TRT_StrawStatusOutput"),
 m_skipBusyEvents(0), // for cosmics - reject events that are either showers or noise bursts
-m_printDetailedInformation(0) // print the information on mapping as well as which straws are declared dead etc. 
+m_printDetailedInformation(0) // print the information on mapping as well as which straws are declared dead etc.
 {
     declareProperty("outputFileName", m_fileName);
-    declareProperty("skipBusyEvents", m_skipBusyEvents);        
+    declareProperty("skipBusyEvents", m_skipBusyEvents);
     declareProperty("trt_hole_finder",          m_trt_hole_finder);
     declareProperty("HWMapSvc", m_mapSvc);
     declareProperty("InDetTRT_DCS_ConditionsSvc",m_DCSSvc);
@@ -82,7 +82,7 @@ StatusCode InDet::TRT_StrawStatus::initialize()
   m_accumulateHits = new ACCHITS_t;
   assert( (*m_accumulateHits)[0][0].size() == nAllStraws );
   clear();
-  
+
   // Code entered here will be executed once at program start.
   // Initialize ReadHandleKey
   ATH_CHECK(m_eventInfoKey.initialize());
@@ -112,21 +112,21 @@ StatusCode InDet::TRT_StrawStatus::finalize(){
 //================ Execution ====================================================
 
 StatusCode InDet::TRT_StrawStatus::execute(){
-  
+
     SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey);
     StatusCode sc = StatusCode::SUCCESS;
     if (not eventInfo.isValid()) {
       ATH_MSG_ERROR( "Unable to retrieve Event Info " );
       return StatusCode::FAILURE;
-    } 
-    int runNumber = (int) eventInfo->runNumber();  
+    }
+    int runNumber = (int) eventInfo->runNumber();
     if (runNumber != m_runNumber) {
       if (m_nEvents) { reportResults(); clear(); }
       m_runNumber = runNumber;
-    } 
+    }
     int lumiBlock0 =eventInfo->lumiBlock();
     SG::ReadHandle<TRT_RDO_Container> rdoContainer(m_rdoContainerKey);
-  
+
     if (not rdoContainer.isValid()) {
       ATH_MSG_ERROR( "no TRT_RDO container available " );
       return StatusCode::FAILURE;
@@ -135,12 +135,12 @@ StatusCode InDet::TRT_StrawStatus::execute(){
     if (not trkCollection.isValid()) {
       ATH_MSG_ERROR( "Could not find Tracks Collection: " << m_tracksName );
       return StatusCode::FAILURE;
-    }   
-    
-    //================ Event selection  
-    
+    }
+
+    //================ Event selection
+
     SG::ReadHandle<VxContainer> vxContainer(m_vxContainerKey);
-    if (not vxContainer.isValid()) { 
+    if (not vxContainer.isValid()) {
       ATH_MSG_ERROR( "vertex container missing!" );
       sc = StatusCode::FAILURE;
     } else {
@@ -148,9 +148,9 @@ StatusCode InDet::TRT_StrawStatus::execute(){
         for (VxContainer::const_iterator it = vxContainer->begin() ; it != vxContainer->end() ; ++it ) {
             if ( (*it)->vxTrackAtVertex()->size() >= 3 ) countVertices++;
         }
-        if (countVertices < 1)  return StatusCode::FAILURE; 
+        if (countVertices < 1)  return StatusCode::FAILURE;
     }
-    
+
     if (m_skipBusyEvents) { // cosmic running
         int countRDOhitsInEvent(0);
         for (TRT_RDO_Container::const_iterator rdoIt = rdoContainer->begin(); rdoIt != rdoContainer->end(); ++rdoIt) {
@@ -164,17 +164,17 @@ StatusCode InDet::TRT_StrawStatus::execute(){
             ATH_MSG_INFO( "N RDO hits in event greater than 100000: " << countRDOhitsInEvent << ", exiting" );
             return sc;
         }
-        
+
         if (trkCollection->size() > 10) {
             ATH_MSG_INFO( "N tracks greater than 10: " << trkCollection->size() << ", exiting" );
             return sc;
         }
     }
-    
-    //================ End event selection         
-    
+
+    //================ End event selection
+
     //================ Loop over all tracks, accumulate hits on track, also find holes on track
-    
+
     std::vector<Identifier> holeIdentifiers;
     std::vector<Identifier> holeIdentifiersWithHits; // holes on straws that have hits, it is just that the hit was not associalted to a track
     for ( DataVector<Trk::Track>::const_iterator trackIt = trkCollection->begin(); trackIt != trkCollection->end(); trackIt++ ) {
@@ -183,120 +183,122 @@ StatusCode InDet::TRT_StrawStatus::execute(){
         const Trk::Perigee* perigee = (*trackIt)->perigeeParameters();
         if ( not perigee  ) { ATH_MSG_ERROR( "Trk::Perigee missing" ); continue; }
         if ( std::fabs(perigee->pT())/CLHEP::GeV < 1. ) continue; // 1 GeV pT cut
-        
+
         const DataVector<const Trk::TrackStateOnSurface>* trackStates = (**trackIt).trackStateOnSurfaces();
         if ( not trackStates  ) { ATH_MSG_ERROR( "Trk::TrackStateOnSurface empty" ); continue; }
-        
-        int n_pixel_hits(0), n_sct_hits(0), n_trt_hits(0);  // count hits, require minimal number of all hits 
+
+        int n_pixel_hits(0), n_sct_hits(0), n_trt_hits(0);  // count hits, require minimal number of all hits
         for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = trackStates->begin(); trackStatesIt != trackStates->end(); trackStatesIt++ ) {
             if ( *trackStatesIt == 0 ) { ATH_MSG_ERROR( "*trackStatesIt == 0" ); continue; }
 
             if ( !((*trackStatesIt)->type(Trk::TrackStateOnSurface::Measurement)) ) continue; // this skips outliers
-            
+
             if ( dynamic_cast<const InDet::TRT_DriftCircleOnTrack*> ( (*trackStatesIt)->measurementOnTrack() )  ) n_trt_hits++;
             else if ( dynamic_cast<const InDet::SCT_ClusterOnTrack*>     ( (*trackStatesIt)->measurementOnTrack() )  ) n_sct_hits++;
             else if( dynamic_cast<const InDet::PixelClusterOnTrack*>    ( (*trackStatesIt)->measurementOnTrack() )  ) n_pixel_hits++;
-        }           
-        if (n_pixel_hits<2 || n_sct_hits < 6 || n_trt_hits<15) continue; // end count hits      
-        
+        }
+        if (n_pixel_hits<2 || n_sct_hits < 6 || n_trt_hits<15) continue; // end count hits
+
         //=== end select track
-        
+
         //=== loop over all hits on track, accumulate them
-        
+
         for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = trackStates->begin(); trackStatesIt != trackStates->end(); trackStatesIt++ ) {
-            
+
             if ( *trackStatesIt == 0 ) { ATH_MSG_ERROR( "*trackStatesIt == 0" ); continue; }
 
             if ( !((*trackStatesIt)->type(Trk::TrackStateOnSurface::Measurement)) ) continue; // this skips outliers
 
             const InDet::TRT_DriftCircleOnTrack *driftCircleOnTrack = dynamic_cast<const InDet::TRT_DriftCircleOnTrack *>( (*trackStatesIt)->measurementOnTrack() );
             if ( not driftCircleOnTrack ) continue; // not TRT measurement - this way, keep both hits and outliers
-            
+
 			const Trk::TrackStateOnSurface& hit = **trackStatesIt;
-			
-			const Trk::TrackParameters* unbiased_track_parameters = m_updator->removeFromState( *(hit.trackParameters()), hit.measurementOnTrack()->localParameters(), hit.measurementOnTrack()->localCovariance());
-			
+
+			const Trk::TrackParameters* unbiased_track_parameters = m_updator->removeFromState( *(hit.trackParameters()),
+                                                                                          hit.measurementOnTrack()->localParameters(),
+                                                                                          hit.measurementOnTrack()->localCovariance()).release();
+
 			double unbiased_locR = unbiased_track_parameters->parameters()[Trk::locR];
 			if ( fabs(unbiased_locR) > m_locR_cut ) continue; // same cut as the default hole search cut
-    
+
             const InDet::TRT_DriftCircle *driftCircle = driftCircleOnTrack->prepRawData();
             if ( driftCircle == 0 ) { ATH_MSG_ERROR( "driftCircle == 0" ); continue; }
-            
+
             Identifier id = driftCircle->identify();
             int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index
             (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][1]++; // accumulate hits on track
             if (driftCircle->highLevel()) (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][3]++; // accumulate hits on track
-            
+
         } // end trackStatesIt loop
-        
+
         // add holeIdentifiers - fill vector
-        
+
         const DataVector<const Trk::TrackStateOnSurface>* holes = m_trt_hole_finder->getHolesOnTrack( *track );
         if ( holes==0 ) continue; // no holes found
         for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = holes->begin(); trackStatesIt != holes->end(); trackStatesIt++ ) {
-            
+
             if ( !(*trackStatesIt)->type(   Trk::TrackStateOnSurface::Hole  )  ) { ATH_MSG_ERROR( "m_trt_hole_finder returned something that is not a hole" ); continue; }
-            
+
             const Trk::TrackParameters* track_parameters = (*trackStatesIt)->trackParameters();
             if (!track_parameters) { ATH_MSG_WARNING( "m_trt_hole_finder track_parameters missing" ); continue; }
-            
+
             Identifier id = track_parameters->associatedSurface().associatedDetectorElementIdentifier();
             if ( !(m_TRTHelper->is_trt(id)) ) { ATH_MSG_ERROR( "m_trt_hole_finder returned something that is not a TRT hole" ); continue; }
 
-            // add se same 1.4 mm locR selection, in case it is not on by default 
+            // add se same 1.4 mm locR selection, in case it is not on by default
             if ( std::fabs( track_parameters->parameters()[Trk::locR] ) > m_locR_cut ) continue;
-    
+
             holeIdentifiers.push_back( id );
         } // end add holeIdentifiers
-        
-    } // end trackIt loop   
-    
+
+    } // end trackIt loop
+
     //================ End loop over all tracks
-    
+
     //================ Loop over all hits - it includes hits from dead straws that are masked off in drift circle creation
-    
+
     for (TRT_RDO_Container::const_iterator rdoIt = rdoContainer->begin(); rdoIt != rdoContainer->end(); ++rdoIt) {
         const InDetRawDataCollection<TRT_RDORawData>* TRTCollection(*rdoIt);
         if (TRTCollection==0) continue;
         for (DataVector<TRT_RDORawData>::const_iterator trtIt = TRTCollection->begin(); trtIt != TRTCollection->end(); trtIt++) {
             Identifier id = (*trtIt)->identify();
             int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index
-            (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][0]++; // accumulate all hits 
+            (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][0]++; // accumulate all hits
             if ((*trtIt)->highLevel()) (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][2]++; // accumulate TR hits
-            
+
             if (std::find(holeIdentifiers.begin(), holeIdentifiers.end(), id) != holeIdentifiers.end())  // a hole was found on the same straw, but hits is there
-                holeIdentifiersWithHits.push_back( id );            
-        }  
+                holeIdentifiersWithHits.push_back( id );
+        }
     }
-    
-    //================ End loop over all hits 
+
+    //================ End loop over all hits
 
     //================ End loop over all holes, each time also save whether the straw with a hole had a hit
-    
+
     for (unsigned int i=0; i<holeIdentifiers.size(); i++) {
-        
+
         Identifier id = holeIdentifiers[i];
 
         int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index
-        
+
         (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][4]++;
-        
+
         if (std::find(holeIdentifiersWithHits.begin(), holeIdentifiersWithHits.end(), id) != holeIdentifiersWithHits.end())
           (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][5]++;
     }
-    
-    //================ End loop over all hits 
+
+    //================ End loop over all hits
 
     //===== searching for HV lines with voltage < 1490 V
     if (lumiBlock0 != last_lumiBlock0){
         float theValue;
         int chanNum;
-        char fileName_mapping[300]; 
+        char fileName_mapping[300];
         snprintf(fileName_mapping, 299,"%s.%07d_Voltage_trips.txt", m_fileName.c_str(), m_runNumber);
         FILE *fmapping = fopen(fileName_mapping, "a");
-        //StatusCode 
+        //StatusCode
         sc = StatusCode::SUCCESS;//for compatibility with Rel 17
-        
+
         //===== Loop over all HV lines
         for (chanNum=1;chanNum<1281;chanNum++){
             theValue = 9999.;
@@ -329,7 +331,7 @@ void InDet::TRT_StrawStatus::clear() {
 
 void InDet::TRT_StrawStatus::reportResults() {
     ATH_MSG_INFO( "InDet::TRT_StrawStatus::reportResults() for " << m_nEvents << " events." );
-    char fileName[300]; 
+    char fileName[300];
     snprintf(fileName, 299,"%s.%07d_newFormat.txt", m_fileName.c_str(), m_runNumber);
     FILE *f = fopen(fileName, "w");
     fprintf(f, "%d %d %d %d %d %d %d %d %d \n", 0, 0, 0, 0, 0, 0, 0, 0, m_nEvents);
@@ -338,15 +340,15 @@ void InDet::TRT_StrawStatus::reportResults() {
         if (k>=1642) side *= 2;
         fprintf(f, "%d %zu %zu", side, j, k);
         for (int m=0; m<6; m++) fprintf(f, " %d", (*m_accumulateHits)[i][j][k][m]);
-        fprintf(f, "\n");   
+        fprintf(f, "\n");
     }
     fclose(f);
     return;
-}  
+}
 
 void InDet::TRT_StrawStatus::printDetailedInformation() {
     ATH_MSG_INFO( "InDet::TRT_StrawStatus::printDetailedInformation() " );
-    char fileName[300]; 
+    char fileName[300];
     snprintf(fileName, 299,"%s.%07d_printDetailedInformation.txt", m_fileName.c_str(), m_runNumber);
     FILE *f = fopen(fileName, "w");
     for (std::vector<Identifier>::const_iterator it = m_TRTHelper->straw_layer_begin(); it != m_TRTHelper->straw_layer_end(); it++  ) {
@@ -354,37 +356,37 @@ void InDet::TRT_StrawStatus::printDetailedInformation() {
             Identifier id = m_TRTHelper->straw_id( *it, i);
             int index[6];
             myStrawIndex(id, index);
-            int chip, HVpad;    
+            int chip, HVpad;
             m_TRTStrawNeighbourSvc->getChip(id, chip);
             m_TRTStrawNeighbourSvc->getPad(id, HVpad);
             if (!m_printStatusCount) {
                 ATH_MSG_INFO( "if the code crashes on the next line, there is a problem with m_TRTStrawStatusSummarySvc not being loaded " );
                 ATH_MSG_INFO( "in that case, running with reco turned on normally solves the problem, know of no better solution at the moment" );
-                ATH_MSG_INFO( "if you do not need the detailed print information, you can also just set printDetailedInformation to 0 to avoid this crash" ); 
+                ATH_MSG_INFO( "if you do not need the detailed print information, you can also just set printDetailedInformation to 0 to avoid this crash" );
                 m_printStatusCount++;
             }
-            int status = m_TRTStrawStatusSummaryTool->get_status( id );  
+            int status = m_TRTStrawStatusSummaryTool->get_status( id );
             int statusTemporary = m_TRTStrawStatusSummaryTool->getStatus( id );
-            int statusPermanent = m_TRTStrawStatusSummaryTool->getStatusPermanent( id ); 
+            int statusPermanent = m_TRTStrawStatusSummaryTool->getStatusPermanent( id );
             for (int j=0; j<6; j++) fprintf(f, "%d ", index[j]);
             fprintf(f, "%d %d %d %d %d\n", chip, HVpad, status, statusTemporary, statusPermanent);
         }
-    }           
+    }
     fclose(f);
-    return; 
+    return;
 }
 
 void InDet::TRT_StrawStatus::myStrawIndex(Identifier id, int *index) {
     int side = m_TRTHelper->barrel_ec(id);
     int layerNumber = m_TRTHelper->layer_or_wheel(id);
     int strawLayerNumber = m_TRTHelper->straw_layer(id);
-    int strawNumber = m_TRTHelper->straw(id);        
+    int strawNumber = m_TRTHelper->straw(id);
     int straw(0);
-    
+
     const int numberOfStraws[74] = { 0, 15, 31, 47, 63, 79, 96, 113, 130, 147, 164, 182, 200, 218, 236, 254, 273, 292, 311, 329, // layer 0, 329 straws, strawlayers 0-18
         348, 368, 388, 408, 428, 448, 469, 490, 511, 532, 553, 575, 597, 619, 641, 663, 686, 709, 732, 755, 778, 802, 826, 849, // layer 1, 520 straws, strawLayers 0-23
         872, 896, 920, 944, 968, 993, 1018, 1043, 1068, 1093, 1119, 1145, 1171, 1197, 1223, 1250, 1277, 1304, 1331, 1358, 1386, 1414, 1442, 1470, 1498, 1527, 1556, 1585, 1614, 1642 }; // layer 2
-    
+
     if (abs(side)==1) { // barrel unique straw number
         if (layerNumber==1) strawLayerNumber+= 19;
         else if (layerNumber==2) strawLayerNumber+= 43;
@@ -394,13 +396,13 @@ void InDet::TRT_StrawStatus::myStrawIndex(Identifier id, int *index) {
         if (board<6) { board *= 2; if (strawLayerNumber>7) board++; }
         else { board += 6; }
         straw = board * 192 + strawNumber * 8 + strawLayerNumber % 8 ;
-        straw += 1642;          
+        straw += 1642;
     }
     index[0] = side;
     index[1] = layerNumber;
     index[2] = m_TRTHelper->phi_module(id);
     index[3] = strawLayerNumber;
     index[4] = strawNumber;
-    index[5] = straw;       
+    index[5] = straw;
     return;
 }
diff --git a/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx b/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx
index ebb9ea397e5adec83640e984a8e1c20481d3d357..1393b373b7f4cfa52bc58404e1bd5e80ac2ebba1 100755
--- a/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx
+++ b/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx
@@ -352,7 +352,7 @@ bool FillAlignTRTHits::fill(const Trk::Track* aTrack, TRT::TrackInfo* output,
 							if(HitOnTrackToRemove){
 								unbiasedTrkParameters = m_updator->removeFromState(*(HitOnTrackToRemove->trackParameters()),
 								                                                   HitOnTrackToRemove->measurementOnTrack()->localParameters(),
-								                                                   HitOnTrackToRemove->measurementOnTrack()->localCovariance());
+								                                                   HitOnTrackToRemove->measurementOnTrack()->localCovariance()).release();
 								ATH_MSG_DEBUG ("TrackParameters 1: " << *(HitOnTrackToRemove->trackParameters()));
 							}
 							else if (msgLvl(MSG::DEBUG)) {
diff --git a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonNtuple.cxx b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonNtuple.cxx
index 57922b976c974e61d9e8d0b071501a488910b30e..45439f14ae2f8f354793e7966bb733e40a3ba2ee 100644
--- a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonNtuple.cxx
+++ b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonNtuple.cxx
@@ -77,23 +77,23 @@ IDAlignMonNtuple::~IDAlignMonNtuple() { }
 
 StatusCode IDAlignMonNtuple::initialize()
 {
-  
+
   //initialize tools and services
   if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Calling initialize() to setup tools/services" << endmsg;
   StatusCode sc = setupTools();
   if (sc.isFailure()) {
     msg(MSG::FATAL) << "Failed to initialize tools/services!" << endmsg;
     return StatusCode::FAILURE;
-  } 
+  }
   else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Successfully initialized tools/services" << endmsg;
 
   if(m_unbiasedSCT) msg(MSG::INFO) << "Using Truly unbiased SCT residuals" << endmsg;
-  if(m_usePRD) msg(MSG::INFO) << "Using PrepRawData for hits information" << endmsg;   
+  if(m_usePRD) msg(MSG::INFO) << "Using PrepRawData for hits information" << endmsg;
 
   ATH_CHECK(m_tracksName.initialize());
   ATH_CHECK(m_tracksTruthName.initialize());
   ATH_CHECK(m_VxPrimContainerName.initialize());
-     
+
   return StatusCode::SUCCESS;
 }
 
@@ -105,32 +105,32 @@ StatusCode IDAlignMonNtuple::bookHistograms()
   //if ( newLowStatFlag() ) {    }
   //if ( newLumiBlockFlag() ) {  }
   if ( newRunFlag() ) {  }
-  
+
   std::string directoryStructure = "/NTUPLES/ALIGNMONITOR";
   //std::string fullNtuplePath = "/NTUPLES/ALIGNMONITOR/Alignment/tree";
   std::string fullNtuplePath = "/NTUPLES/ALIGNMONITOR/" + m_tracksName.key() + "/tree";
   //NTupleFilePtr file( m_ntupleSvc, directoryStructure );
   NTuplePtr nt(m_ntupleSvc, fullNtuplePath );
-  
+
   //booking m_ntuple
   if (!nt)    {    // Check if already booked
-    
+
     nt = m_ntupleSvc->book(fullNtuplePath, CLID_ColumnWiseTuple,"tree" );
     if(nt) {
-      
+
       m_ntuple=nt;
       msg(MSG::INFO) << "Alignment monitoring m_ntuple booked." << endmsg;
-      
+
       //information per event
-      sc = m_ntuple->addItem("event_ntracks",m_nt_ntrks,0,s_n_maxTracks);		
+      sc = m_ntuple->addItem("event_ntracks",m_nt_ntrks,0,s_n_maxTracks);
       sc = m_ntuple->addItem("event_nhits",m_nt_nhits,0,s_n_maxEventHits);
-      sc = m_ntuple->addItem("event_nvtx",m_nt_nvtx,0,1000);	
-      sc = m_ntuple->addItem("event_goodvtxfound",m_nt_goodvtx,0,1000);	
-      sc = m_ntuple->addItem("event_vtxntrks",m_nt_vtxntrks,0,s_n_maxTracks);	
-      sc = m_ntuple->addItem("event_vtxX",m_nt_vtxX,-1000,1000);	
-      sc = m_ntuple->addItem("event_vtxY",m_nt_vtxY,-1000,1000);	
-      sc = m_ntuple->addItem("event_vtxZ",m_nt_vtxZ,-1000,1000);	
-	
+      sc = m_ntuple->addItem("event_nvtx",m_nt_nvtx,0,1000);
+      sc = m_ntuple->addItem("event_goodvtxfound",m_nt_goodvtx,0,1000);
+      sc = m_ntuple->addItem("event_vtxntrks",m_nt_vtxntrks,0,s_n_maxTracks);
+      sc = m_ntuple->addItem("event_vtxX",m_nt_vtxX,-1000,1000);
+      sc = m_ntuple->addItem("event_vtxY",m_nt_vtxY,-1000,1000);
+      sc = m_ntuple->addItem("event_vtxZ",m_nt_vtxZ,-1000,1000);
+
       //information per track
       sc = m_ntuple->addIndexedItem("track_nhits",m_nt_ntrks,m_nt_trknhits);
       sc = m_ntuple->addIndexedItem("track_qoverpt",m_nt_ntrks,m_nt_trkqoverpt);
@@ -151,7 +151,7 @@ StatusCode IDAlignMonNtuple::bookHistograms()
       sc = m_ntuple->addIndexedItem("track_truthphi",m_nt_ntrks,m_nt_trktruthphi);
       sc = m_ntuple->addIndexedItem("track_trutheta",m_nt_ntrks,m_nt_trktrutheta);
       sc = m_ntuple->addIndexedItem("track_truthpdg",m_nt_ntrks,m_nt_trktruthpdg);
-      
+
       sc = m_ntuple->addIndexedItem("track_truthphi0",m_nt_ntrks,m_nt_trktruthphi0);
       sc = m_ntuple->addIndexedItem("track_truthd0",m_nt_ntrks,m_nt_trktruthd0);
       sc = m_ntuple->addIndexedItem("track_truthz0",m_nt_ntrks,m_nt_trktruthz0);
@@ -166,26 +166,26 @@ StatusCode IDAlignMonNtuple::bookHistograms()
       //int max_hits = 5000;//do not make this smaller!
 
       //information per hit per track
-      sc = m_ntuple->addItem("hit_dettype",m_nt_ntrks,m_nt_dettype,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_isbarrel",m_nt_ntrks,m_nt_isbarrel,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_layer",m_nt_ntrks,m_nt_layer,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_modphi",m_nt_ntrks,m_nt_hitmodphi,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_modeta",m_nt_ntrks,m_nt_hitmodeta,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_hitx",m_nt_ntrks,m_nt_hitx,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_hity",m_nt_ntrks,m_nt_hity,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_residualx",m_nt_ntrks,m_nt_residualx,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_residualy",m_nt_ntrks,m_nt_residualy,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_biasedresidualx",m_nt_ntrks,m_nt_biasedresidualx,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_biasedresidualy",m_nt_ntrks,m_nt_biasedresidualy,s_n_maxHits);	
-      sc = m_ntuple->addItem("hit_hittype",m_nt_ntrks,m_nt_hittype,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_errorx",m_nt_ntrks,m_nt_errorx,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_errory",m_nt_ntrks,m_nt_errory,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_hitxwidth",m_nt_ntrks,m_nt_hitxwidth,s_n_maxHits);		
-      sc = m_ntuple->addItem("hit_hitywidth",m_nt_ntrks,m_nt_hitywidth,s_n_maxHits);	
+      sc = m_ntuple->addItem("hit_dettype",m_nt_ntrks,m_nt_dettype,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_isbarrel",m_nt_ntrks,m_nt_isbarrel,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_layer",m_nt_ntrks,m_nt_layer,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_modphi",m_nt_ntrks,m_nt_hitmodphi,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_modeta",m_nt_ntrks,m_nt_hitmodeta,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_hitx",m_nt_ntrks,m_nt_hitx,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_hity",m_nt_ntrks,m_nt_hity,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_residualx",m_nt_ntrks,m_nt_residualx,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_residualy",m_nt_ntrks,m_nt_residualy,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_biasedresidualx",m_nt_ntrks,m_nt_biasedresidualx,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_biasedresidualy",m_nt_ntrks,m_nt_biasedresidualy,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_hittype",m_nt_ntrks,m_nt_hittype,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_errorx",m_nt_ntrks,m_nt_errorx,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_errory",m_nt_ntrks,m_nt_errory,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_hitxwidth",m_nt_ntrks,m_nt_hitxwidth,s_n_maxHits);
+      sc = m_ntuple->addItem("hit_hitywidth",m_nt_ntrks,m_nt_hitywidth,s_n_maxHits);
       sc = m_ntuple->addItem("hit_hitolegwidth",m_nt_ntrks,m_nt_hitolegwidth,s_n_maxHits);
       sc = m_ntuple->addItem("hit_incidangle",m_nt_ntrks,m_nt_hitincidangle,s_n_maxHits);
 
-    } else { 
+    } else {
       msg(MSG::ERROR) << "Failed to book Alignment monitoring m_ntuple." << endmsg;
     }
   }
@@ -197,7 +197,7 @@ StatusCode IDAlignMonNtuple::bookHistograms()
 
 StatusCode IDAlignMonNtuple::fillHistograms()
 {
-  
+
   //-------------------------------------------------------------
   //looking at vertex reconstruction
 
@@ -214,9 +214,9 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     return StatusCode::SUCCESS;
   } else {
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Collection with name  "<<m_VxPrimContainerName.key()<< " with size " << vertices->size() <<" found  in StoreGate" << endmsg;
-  
+
     VxContainer::const_iterator vxItr  = vertices->begin();
-    VxContainer::const_iterator vxItrE = vertices->end();    
+    VxContainer::const_iterator vxItrE = vertices->end();
     nVtx = vertices->size();
     for (; vxItr != vxItrE; ++vxItr) {
       int numTracksPerVertex = (*vxItr)->vxTrackAtVertex()->size();
@@ -228,7 +228,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
       }
     }
   }
-  
+
 
   if (xv==-999 || yv==-999 || zv==-999) {
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No vertex found => setting it to 0"<<endmsg;
@@ -271,7 +271,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Collection with name "<< m_tracksTruthName.key() <<" found in StoreGate" << endmsg;
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieved "<< truthMap->size() <<" truth tracks from StoreGate" << endmsg;
   }
-    
+
 
   int nTracks = 0;
   int nHitsEvent = 0;
@@ -282,10 +282,10 @@ StatusCode IDAlignMonNtuple::fillHistograms()
   //Rec::TrackParticleContainer::const_iterator trackItrE = tracks->end();
   for (; trackItr != trackItrE && nTracks < s_n_maxTracks; ++trackItr) { //looping over tracks
 
-    
+
     //need to get the Trk::Track object from which the TrackParticle object was created
     //this has the hit information
-    
+
     //const Trk::Track* track = (*trackItr)->originalTrack();
     const Trk::Track* track = *trackItr;
     if(track == NULL){
@@ -297,7 +297,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     //variables will be overwritten later if can be defined
     setTrackErrorValues(nTracks);
 
-    //trackStateOnSurfaces is a vector of Trk::TrackStateOnSurface objects which contain information 
+    //trackStateOnSurfaces is a vector of Trk::TrackStateOnSurface objects which contain information
     //on track at each (inner)detector surface it crosses eg hit used to fit track
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Track = " << nTracks << endmsg;
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found " << track->trackStateOnSurfaces()->size() << " TrkSurfaces " << endmsg;
@@ -310,14 +310,14 @@ StatusCode IDAlignMonNtuple::fillHistograms()
       float residualX = s_n_ERRORVALUE; float residualY = s_n_ERRORVALUE;
       float biasedResidualX = s_n_ERRORVALUE; float biasedResidualY = s_n_ERRORVALUE;
       float errorX = s_n_ERRORVALUE; float errorY = s_n_ERRORVALUE;
-      float hitX = s_n_ERRORVALUE; float hitY = s_n_ERRORVALUE; 
+      float hitX = s_n_ERRORVALUE; float hitY = s_n_ERRORVALUE;
       int detType = s_n_ERRORVALUE; int barrelEC = s_n_ERRORVALUE;
       int layerDisk = s_n_ERRORVALUE; int modEta = s_n_ERRORVALUE;
       int modPhi = s_n_ERRORVALUE; int hitType = s_n_ERRORVALUE;
       int phiWidth = s_n_ERRORVALUE; int zWidth = s_n_ERRORVALUE;
       int olegWidth = s_n_ERRORVALUE; float trkIncidAngle = s_n_ERRORVALUE;
 
-      if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "TSOS (hit) = " << nHits << endmsg;       
+      if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "TSOS (hit) = " << nHits << endmsg;
 
       if (tsos == nullptr) continue;
 
@@ -359,22 +359,22 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 
       const Trk::MeasurementBase* mesh =tsos->measurementOnTrack();
       if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Defined  hit MeasurementBase " << endmsg;
-         
+
       //Trk::RIO_OnTrack object contains information on the hit used to fit the track at this surface
       const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>(mesh);
 
-      if (hit== NULL) { 
+      if (hit== NULL) {
 	//for some reason the first tsos has no associated hit - maybe because this contains the defining parameters?
-	if (nHits > 0) if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No hit associated with TrkSurface - probably a hole"<< nHits << endmsg; 
+	if (nHits > 0) if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No hit associated with TrkSurface - probably a hole"<< nHits << endmsg;
 	continue;
       }
-      
+
       //if desired we can use PrepRawData hits information i.e. before insitu calibration of hits
       const InDet::SiCluster* hitPRD;
       if(m_usePRD){
 	hitPRD = dynamic_cast <const InDet::SiCluster*>(hit->prepRawData());
       } else {hitPRD = NULL;}
- 
+
       const Identifier & hitId = hit->identify();
       if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Defined  hit Identifier " << endmsg;
       if (m_idHelper->is_pixel(hitId)) {
@@ -389,7 +389,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	detType = 2;
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "This is a TRT Hit" << endmsg;
       }
-      
+
       //finding local error on hit
       if(m_usePRD && hitPRD != NULL){
 	errorX = Amg::error(hitPRD->localCovariance(),Trk::locX);
@@ -399,7 +399,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	errorX = Amg::error(hit->localCovariance(),Trk::locX);
 	errorY = Amg::error(hit->localCovariance(),Trk::locY);
       }
-      
+
       if (detType==0) {//getting pixel hit information
 
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is a PIXEL hit " << hitId << endmsg;
@@ -419,9 +419,9 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Pixel hit z cluster width = " << zWidth << endmsg;
 	}
       }
-      
-      
-      if (detType==1) {//getting SCT hit information 
+
+
+      if (detType==1) {//getting SCT hit information
 
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is an SCT hit " << hitId << endmsg;
 	const Identifier& id = m_sctID->wafer_id(hitId);
@@ -438,9 +438,9 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "SCT hit phi cluster width = " << phiWidth << endmsg;
 	}
       }
-      
+
       if (detType==0 || detType==1) {//have identified pixel or SCT hit
-	
+
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Hit is pixel or SCT, finding residuals... " << endmsg;
 
 	const Trk::TrackParameters* trackParameter = tsos->trackParameters();
@@ -453,11 +453,11 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	//finding residuals
 	if(trackParameter){
 
-	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found Trk::TrackParameters" << endmsg;	 
+	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found Trk::TrackParameters" << endmsg;
 
 	  //finding track incidence angle (taken from InDetAlignTools/InDetAlignHitQualSelectTool)
 	  const InDetDD::SiDetectorElement *detEle = dynamic_cast<const InDetDD::SiDetectorElement*>( hit->detectorElement() ) ;
-	  
+
 	  if ( detEle != NULL ){
 	    Amg::Vector3D trkDir       = trackParameter->momentum() ;
 	    Amg::Vector3D detElePhi    = detEle->phiAxis() ; //!< local x axis in global frame
@@ -477,7 +477,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 
 	  double unbiasedResXY[4] = {9999.0,9999.0,9999.0,9999.0};
 	  double biasedResXY[4] = {9999.0,9999.0,9999.0,9999.0};
-	  
+
 	  //finding unbiased single residuals
 	  StatusCode sc;
 	  sc = getSiResiduals(track,tsos,true,unbiasedResXY);
@@ -492,7 +492,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 // 	  float pullX = (float)unbiasedResXY[2];
 // 	  float pullY = (float)unbiasedResXY[3];
 
-	  
+
 	  //finding biased single residuals (for interest)
 	  sc = getSiResiduals(track,tsos,false,biasedResXY);
 	  if (sc.isFailure()) {
@@ -503,9 +503,9 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	  else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "biased residuals found ok" << endmsg;
 	  biasedResidualX = biasedResXY[0];
 	  biasedResidualY = biasedResXY[1];
-	  	  
+
 	}
-	else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No TrackParameters associated with TrkSurface "<< nHits << ", hit type = " << hitType << endmsg; 
+	else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No TrackParameters associated with TrkSurface "<< nHits << ", hit type = " << hitType << endmsg;
       }
 
       //filling m_ntuple
@@ -528,23 +528,23 @@ StatusCode IDAlignMonNtuple::fillHistograms()
       m_nt_hitolegwidth[nTracks][nHits] = olegWidth;
       m_nt_hitincidangle[nTracks][nHits] = trkIncidAngle;
 
-      nHits++; 
+      nHits++;
       nHitsEvent++;
-      
+
     }//end of loop on track surfaces
-    
+
     //bounds checking
     if (nHits >= s_n_maxHits) {
       msg(MSG::ERROR) << "WATCH OUT: There are more HITS in this events than fit in the ntuples hits matrix!" << endmsg;
       msg(MSG::ERROR) << "Set max hits per track = " <<  s_n_maxHits << ", current track has " << nHits << " or more hits!" << endmsg;
       return StatusCode::FAILURE;
     }
-    
-    m_nt_trknhits[nTracks] = nHits; 
-    
+
+    m_nt_trknhits[nTracks] = nHits;
+
     //filling m_ntuple with some track parameters
     const Trk::Perigee* startPerigee = track->perigeeParameters();
-    float theta = startPerigee->parameters()[Trk::theta];  
+    float theta = startPerigee->parameters()[Trk::theta];
     float d0 = startPerigee->parameters()[Trk::d0];
     float phi0 = startPerigee->parameters()[Trk::phi0];
     m_nt_trktheta[nTracks] = theta;
@@ -554,7 +554,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     m_nt_trkd0[nTracks] = d0;
     m_nt_trkz0[nTracks] = startPerigee->parameters()[Trk::z0];
     m_nt_trkcharge[nTracks] = startPerigee->charge();
-    
+
     //finding d0 wrt the primary vertex if one is well-defined
     if(!(xv==0.0 && yv==0.0 && zv==0.0)){
       //if we found a decent vertex
@@ -568,21 +568,21 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     int DoF = (fit) ? fit->numberDoF() : -1;
     m_nt_trkchi2[nTracks] = chiSquared;
     m_nt_trkdof[nTracks] = DoF;
-            
+
 
     //tracktruth stuff (put in separate method)
     if (truthMap.get()) {
-	  
+
       //the key for the truth std::map is an ElementLink<TrackCollection> object
       //comprises a pointer to the track and reconstructed track collection
       ElementLink<TrackCollection> trackLink;
       trackLink.setElement(const_cast<Trk::Track*>(track));
       trackLink.setStorableObject(*tracks);
       const ElementLink<TrackCollection> trackLink2=trackLink;
-      
+
       //trying to find the std::map entry for this reconstructed track
       TrackTruthCollection::const_iterator found = truthMap->find(trackLink2);
-      
+
       if (found != truthMap->end()) {
 
       	TrackTruth trkTruth = found->second;//getting the TrackTruth object - the map element
@@ -591,11 +591,11 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 
 	if ( HMPL.isValid()) {
 #ifdef HEPMC3
-     HepMC::ConstGenParticlePtr genParticle = HMPL.scptr(); 
+     HepMC::ConstGenParticlePtr genParticle = HMPL.scptr();
 #else
-	  const HepMC::GenParticle *genParticle = HMPL.cptr(); 
+	  const HepMC::GenParticle *genParticle = HMPL.cptr();
 #endif
-	  
+
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Particle with PDG "<< genParticle->pdg_id() << " Status "<< genParticle->status()<<" mass "<< genParticle->momentum().m() <<" pt "<<genParticle->momentum().perp()<<" eta "<<genParticle->momentum().eta()<<" phi "<<genParticle->momentum().phi()<<endmsg;
 
 	  m_nt_trkistruth[nTracks] = 1;
@@ -612,13 +612,13 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	  else if(!genParticle->production_vertex()) {if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "No GenVertex (generator level) production vertex found!" << endmsg;}
 	  else{
 	    //currently cannot configure the TruthToTrack tool properly
-	    
+
 	    const Trk::TrackParameters* generatedTrackPerigee = m_truthToTrack->makePerigeeParameters(genParticle);
 
 	    if (!generatedTrackPerigee)   if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) <<  "Unable to extrapolate genParticle to perigee!" << endmsg;
-	    
+
 	    if ( generatedTrackPerigee) {
-	    
+
 	      float phi0 = generatedTrackPerigee->parameters()[Trk::phi0];
 	      float d0 = generatedTrackPerigee->parameters()[Trk::d0];
 	      float z0 = generatedTrackPerigee->parameters()[Trk::z0];
@@ -627,7 +627,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	      float charge = generatedTrackPerigee->charge();
 	      float qoverpt = generatedTrackPerigee->parameters()[Trk::qOverP]/(sin(theta));
 	      float pt = (1/qoverpt)*(charge);
-	    
+
 	      if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Extrapolated genParticle perigee parameters: q/Pt = " << qoverpt << " d0 = " << d0 << " z0 = " << z0 << " phi0 = " << phi0 << " pt = " << pt << endmsg;
 
 	      m_nt_trktruthphi0[nTracks] = phi0;
@@ -640,8 +640,8 @@ StatusCode IDAlignMonNtuple::fillHistograms()
 	      m_nt_trktruthvtxX[nTracks] = genParticle->production_vertex()->position().x();
 	      m_nt_trktruthvtxY[nTracks] = genParticle->production_vertex()->position().y();
 	      m_nt_trktruthvtxZ[nTracks] = genParticle->production_vertex()->position().z();
-	      
-	      delete  generatedTrackPerigee; 
+
+	      delete  generatedTrackPerigee;
 	    }
 	  }
 	}
@@ -649,7 +649,7 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     }
 
     nTracks++;
-    
+
 
   } // end of loop on tracks
 
@@ -660,9 +660,9 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     return StatusCode::FAILURE;
   }
   else m_nt_ntrks = nTracks;
-  
+
   if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Number of tracks : "<< nTracks << endmsg;
-  
+
   //bounds checking
   if (nHitsEvent >= s_n_maxEventHits) {
     msg(MSG::ERROR) << "WATCH OUT: There are more EVENTHITS in this event than fit in the ntuples eventhits!" << endmsg;
@@ -670,8 +670,8 @@ StatusCode IDAlignMonNtuple::fillHistograms()
     return StatusCode::FAILURE;
   }
   else m_nt_nhits = nHitsEvent;
-  
-  //write the m_ntuple record 
+
+  //write the m_ntuple record
   if (!(m_ntupleSvc->writeRecord(m_ntuple)).isSuccess()) {
     msg(MSG::ERROR) << "problems writing m_ntuple record" << endmsg;
   }
@@ -688,7 +688,7 @@ StatusCode IDAlignMonNtuple::procHistograms()
   //if( endOfLowStatFlag() ) {  }
   //if( endOfLumiBlockFlag() ) {  }
   //if( endOfRunFlag() ) {}
-  
+
   return StatusCode::SUCCESS;
 }
 
@@ -703,15 +703,15 @@ StatusCode  IDAlignMonNtuple::getSiResiduals(const Trk::Track* track, const Trk:
   double residualY = -9999.0;
   double pullX = -9999.0;
   double pullY = -9999.0;
-  
+
   //extract the hit object from the tsos
   const Trk::MeasurementBase* mesh =tsos->measurementOnTrack();
   const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>(mesh);
-  
+
   //get the unbiased track parameters (can fail if no MeasuredTrackParameters exists)
   const Trk::TrackParameters* trackParameterUnbiased = NULL;
   if(unBias) trackParameterUnbiased = getUnbiasedTrackParameters(track,tsos);
-   
+
   //updator can fail in defining unbiased parameters, in which case we use biased
   const Trk::TrackParameters* trackParameterForResiduals = NULL;
   if(trackParameterUnbiased) trackParameterForResiduals = trackParameterUnbiased;
@@ -721,9 +721,9 @@ StatusCode  IDAlignMonNtuple::getSiResiduals(const Trk::Track* track, const Trk:
   }
 
   if (!m_residualPullCalculator.empty() && !m_residualPullCalculator.retrieve().isFailure()) {
-    
+
     if (hit && trackParameterForResiduals) {
-      
+
       if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) <<" got hit and track parameters " << endmsg;
 
       //const Trk::ResidualPull* residualPull = m_residualPullCalculator->residualPull(hit, trackParameterForResiduals, unBias);
@@ -747,14 +747,14 @@ StatusCode  IDAlignMonNtuple::getSiResiduals(const Trk::Track* track, const Trk:
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " residualPull dim >= 2" << endmsg;
 	  residualY = residualPull->residual()[Trk::loc2];
 
-	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " residual Y = " << residualY << endmsg; 
+	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " residual Y = " << residualY << endmsg;
 	  if(residualPull->isPullValid()) pullY = residualPull->pull()[Trk::loc2];
 	  else {
 	    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ResidualPullCalculator finds invalid Y Pull!!!" << endmsg;
 	    sc = StatusCode::FAILURE;
 	  }
 	}
-	
+
 	delete residualPull;
 
       }
@@ -769,7 +769,7 @@ StatusCode  IDAlignMonNtuple::getSiResiduals(const Trk::Track* track, const Trk:
   // for each of the SCT sides; residualPull->dimension()==1 always.
 
   //std::pair <double, double> result(residualX, residualY);
-  results[0] = residualX; 
+  results[0] = residualX;
   results[1] = residualY;
   results[2] = pullX;
   results[3] = pullY;
@@ -778,19 +778,19 @@ StatusCode  IDAlignMonNtuple::getSiResiduals(const Trk::Track* track, const Trk:
     if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ResidualPullCalculator finds Pull=NAN!!!" << endmsg;
     sc = StatusCode::FAILURE;
   }
-  
+
   //delete these TrackParameters which are newly created in the getUnbiasedTrackParameters(track,tsos) method
   delete trackParameterUnbiased;
 
   return sc;
-  
+
 }
 
 
 //__________________________________________________________________________
 const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const Trk::Track* trkPnt, const Trk::TrackStateOnSurface* tsos)
 {
- 
+
   const Trk::TrackParameters* TrackParams;
   const Trk::TrackParameters* UnbiasedTrackParams(0);
   const Trk::TrackParameters* PropagatedTrackParams(0);
@@ -800,15 +800,15 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
   bool trueUnbiased = true;
 
   Identifier surfaceID;
-  
+
 
   if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "original track parameters: " << *(tsos->trackParameters()) <<endmsg;
 
-  
+
   if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Trying to unbias track parameters." << endmsg;
 
   const Trk::RIO_OnTrack* hitOnTrack = dynamic_cast <const Trk::RIO_OnTrack*>(tsos->measurementOnTrack());
-  
+
   if (hitOnTrack == NULL)
     return NULL;
 
@@ -824,9 +824,9 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
     IdentifierHash otherSideHash;
     m_sctID->get_other_side(waferHash, otherSideHash);
     const Identifier OtherModuleSideID = m_sctID->wafer_id(otherSideHash);
-      
+
     for (const Trk::TrackStateOnSurface* TempTsos : *trkPnt->trackStateOnSurfaces()) {
-        
+
       const Trk::RIO_OnTrack* hitOnTrack = dynamic_cast <const Trk::RIO_OnTrack*>(TempTsos->measurementOnTrack());
       if (hitOnTrack != 0) {
 	const Identifier& trkID = hitOnTrack->identify();
@@ -839,28 +839,29 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
 
     if (OtherModuleSideHit) {
 
-      
+
       const Trk::TrackParameters* OMSHmeasuredTrackParameter = OtherModuleSideHit->trackParameters();
-      
+
       // check that the hit on the other module side has measuredtrackparameters, otherwise it cannot be removed from the track
       const AmgSymMatrix(5)* covariance = OMSHmeasuredTrackParameter->covariance();
       if (covariance) {
-      
+
 
 	if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "OtherSideTrackParameters: " << *(OtherModuleSideHit->trackParameters()) << endmsg;
-	OtherSideUnbiasedTrackParams = m_iUpdator->removeFromState(*(OtherModuleSideHit->trackParameters()),
-								   OtherModuleSideHit->measurementOnTrack()->localParameters(),
-								   OtherModuleSideHit->measurementOnTrack()->localCovariance());
+        OtherSideUnbiasedTrackParams = m_iUpdator->removeFromState(
+          *(OtherModuleSideHit->trackParameters()),
+          OtherModuleSideHit->measurementOnTrack()->localParameters(),
+          OtherModuleSideHit->measurementOnTrack()->localCovariance()).release();
 
-	if (OtherSideUnbiasedTrackParams) {
+        if (OtherSideUnbiasedTrackParams) {
 	  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Unbiased OtherSideTrackParameters: " << *OtherSideUnbiasedTrackParams << endmsg;
 
 
 	  const Trk::Surface& TempSurface = OtherModuleSideHit->measurementOnTrack()->associatedSurface();
 
 	  const Trk::MagneticFieldProperties* TempField = 0;
-	  
-          
+
+
 	  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "After OtherSide surface call. Surface exists" << endmsg;
 	  if (TempSurface.associatedLayer())
 	    {
@@ -868,29 +869,29 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
 	      if(TempSurface.associatedLayer()->enclosingTrackingVolume())
 		{
 		  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "TempSurface->associatedLayer()->enclosingTrackingVolume exists" << endmsg;
-		  
+
 		  TempField = dynamic_cast <const Trk::MagneticFieldProperties*>(TempSurface.associatedLayer()->enclosingTrackingVolume());
 		  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "After MagneticFieldProperties cast" << endmsg;
-		  
+
 		} else {
 		if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "TempSurface->associatedLayer()->enclosingTrackingVolume does not exist" << endmsg;
 	      }
 	    } else {
 	    if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "TempSurface->associatedLayer() does not exist" << endmsg;
 	  }
-	  
-	  
-	  
-	  
-	  
-	  
+
+
+
+
+
+
 	  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Before other side unbiased propagation" << endmsg;
 	  if (TempSurface.associatedLayer() && TempField) PropagatedTrackParams = m_propagator->propagate(*OtherSideUnbiasedTrackParams,
 													  tsos->measurementOnTrack()->associatedSurface(),
 													  Trk::anyDirection, false,
 													  *TempField,
 													  Trk::nonInteracting).release();
-	  
+
 	  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "After other side unbiased propagation" << endmsg;
 	  delete OtherSideUnbiasedTrackParams;
 	  if (PropagatedTrackParams) {
@@ -914,8 +915,12 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
     PropagatedTrackParams = tsos->trackParameters()->clone();
   }
 
-    
-  UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams, tsos->measurementOnTrack()->localParameters(), tsos->measurementOnTrack()->localCovariance());
+  UnbiasedTrackParams =
+    m_iUpdator
+      ->removeFromState(*PropagatedTrackParams,
+                        tsos->measurementOnTrack()->localParameters(),
+                        tsos->measurementOnTrack()->localCovariance())
+      .release();
 
   delete PropagatedTrackParams;
 
@@ -929,14 +934,14 @@ const Trk::TrackParameters* IDAlignMonNtuple::getUnbiasedTrackParameters(const T
     if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "RemoveFromState did not work, using original TrackParameters" << endmsg;
     TrackParams = tsos->trackParameters()->clone();
   }
-  
 
-  delete UnbiasedTrackParams;  
+
+  delete UnbiasedTrackParams;
   return TrackParams;
-  
+
 }
- 
- 
+
+
 //---------------------------------------------------------------------------------------
 
 StatusCode IDAlignMonNtuple::setupTools()
@@ -951,7 +956,7 @@ StatusCode IDAlignMonNtuple::setupTools()
   if ( sc.isFailure() ){
     msg(MSG::FATAL) << "Cannot retrieve the NTuple service... Exiting" << endmsg;
     return StatusCode::FAILURE;
-  }  
+  }
 
   if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Defined detector service" << endmsg;
 
@@ -977,7 +982,7 @@ StatusCode IDAlignMonNtuple::setupTools()
   }else{
     if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found AtlasDetectorID" << endmsg;
   }
-  
+
 
   if (m_iUpdator.retrieve().isFailure() ) {
     msg(MSG::FATAL) << "Failed to retrieve tool " << m_iUpdator << endmsg;
@@ -1002,20 +1007,20 @@ StatusCode IDAlignMonNtuple::setupTools()
    }
 
   if (m_residualPullCalculator.empty()) {
-    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << 
+    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) <<
       "No residual/pull calculator for general hit residuals configured."
 	<< endmsg;
-    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << 
+    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) <<
       "It is recommended to give R/P calculators to the det-specific tool"
 	<< " handle lists then." << endmsg;
     m_doPulls = false;
   } else if (m_residualPullCalculator.retrieve().isFailure()) {
-    if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Could not retrieve "<< m_residualPullCalculator 
+    if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Could not retrieve "<< m_residualPullCalculator
 	<<" (to calculate residuals and pulls) "<< endmsg;
     m_doPulls = false;
-    
+
    } else {
-    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) 
+    if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)
 	<< "Generic hit residuals&pulls will be calculated in one or both "
 	<< "available local coordinates" << endmsg;
     m_doPulls = true;
@@ -1030,11 +1035,11 @@ StatusCode IDAlignMonNtuple::setupTools()
 void IDAlignMonNtuple::setTrackErrorValues(int nTracks)
 {
 
-  //for each track ensures that the variable is set to 
+  //for each track ensures that the variable is set to
   //a defined errorvalue in case it can't be defined
 
   m_nt_trknhits[nTracks] = s_n_ERRORVALUE;
-  
+
   m_nt_trktheta[nTracks] = s_n_ERRORVALUE;
   m_nt_trkqoverpt[nTracks] = s_n_ERRORVALUE;
   m_nt_trketa[nTracks] = s_n_ERRORVALUE;
@@ -1052,7 +1057,7 @@ void IDAlignMonNtuple::setTrackErrorValues(int nTracks)
   m_nt_trktruthpt[nTracks] = s_n_ERRORVALUE;
   m_nt_trktrutheta[nTracks] = s_n_ERRORVALUE;
   m_nt_trktruthphi[nTracks] = s_n_ERRORVALUE;
-  
+
   m_nt_trktruthphi0[nTracks] = s_n_ERRORVALUE;
   m_nt_trktruthd0[nTracks] = s_n_ERRORVALUE;
   m_nt_trktruthz0[nTracks] = s_n_ERRORVALUE;
diff --git a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx
index cf522fff3522451d2d1167e2561b3467bfea3320..0356f2fd294f33480d347acb0e6dac42cd4121b3 100755
--- a/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx
+++ b/InnerDetector/InDetMonitoring/InDetAlignmentMonitoring/src/IDAlignMonResiduals.cxx
@@ -188,7 +188,7 @@ struct IDAlignMonResiduals::TRTEndcapHistograms{
 	TH2F* aveResVsRadiusWheelNeg[2]{};
 	TH2F* rmsResVsRadiusWheelNeg[2]{};
 
-        // Residual vs pt and vs wheel in the endcap 
+        // Residual vs pt and vs wheel in the endcap
 	TH3F* resVsqPtWheel[2]{};
 };
 
@@ -207,7 +207,7 @@ IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::s
 	m_hitQualityTool       = ToolHandle<IInDetAlignHitQualSelTool>("");
 	m_trt_b_hist  = new TRTBarrelHistograms();
 	m_trt_ec_hist = new TRTEndcapHistograms();
-	
+
 	m_triggerChainName     = "NoTriggerSelection";
 	m_z_fix                = 366.5; // IBL Stave fixing screw position [mm]
 	m_NLumiBlocksMon       =   1;
@@ -232,7 +232,7 @@ IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::s
 	m_IncidentPhiRange     =   0.8;
 	m_RangeOfPullHistos    =   6.;
 	m_PtRange              =  40.;
-	m_xHitErrorRange       =   0.08; 
+	m_xHitErrorRange       =   0.08;
 	m_yHitErrorRange       =   0.12;
 	m_mu                   =   0.;
 	m_nBinsMuRange         = 101.;
@@ -246,8 +246,8 @@ IDAlignMonResiduals::IDAlignMonResiduals( const std::string & type, const std::s
 	m_FinerBinningFactor   =   1;
 	m_LBGranularity        =   1;
 	m_LBRangeMin           =  -0.5;
-	m_LBRangeMax           =  2599.5; 
-	m_nBinsLB              =  52; 
+	m_LBRangeMax           =  2599.5;
+	m_nBinsLB              =  52;
 	m_gap_pix              =   4;
 	m_gap_sct              =   4;
 	m_nIBLHitsPerLB        =   0;
@@ -861,16 +861,16 @@ StatusCode IDAlignMonResiduals::bookHistograms()
 
     //All modules
     m_pix_b0_resXvsetaLumiBlock = new TProfile2D("pix_b0_resXvsetaLumiBlock","2D profile of X unbiased residuals vs IBL eta module per Lumi Block; LumiBlock;Module Eta",
-						 m_nBinsLB, m_LBRangeMin, m_LBRangeMax, 
-						 20, -10.5, 9.5, 
+						 m_nBinsLB, m_LBRangeMin, m_LBRangeMax,
+						 20, -10.5, 9.5,
 						 m_minPIXResXFillRange, m_maxPIXResXFillRange);
     RegisterHisto(al_mon,m_pix_b0_resXvsetaLumiBlock);
 
     //Only planars
 
     m_pix_b0_resXvsetaLumiBlock_planars = new TProfile2D("pix_b0_resXvsetaLumiBlock_planars","2D profile of X unbiased residuals vs IBL eta module per Lumi Block;LumiBlock; Module Eta",
-							 m_nBinsLB,m_LBRangeMin,m_LBRangeMax, 
-							 12, -6.5, 5.5, 
+							 m_nBinsLB,m_LBRangeMin,m_LBRangeMax,
+							 12, -6.5, 5.5,
 							 m_minPIXResXFillRange, m_maxPIXResXFillRange);
     RegisterHisto(al_mon,m_pix_b0_resXvsetaLumiBlock_planars);
 
@@ -1095,8 +1095,8 @@ StatusCode IDAlignMonResiduals::fillHistograms()
   else {
     m_mu = -999;
   }
-  ATH_MSG_DEBUG ("IDAlignMonResiduals::fillHistograms ** run number: " << eventInfo->runNumber() 
-		   << "  event number: " << eventInfo->eventNumber() 
+  ATH_MSG_DEBUG ("IDAlignMonResiduals::fillHistograms ** run number: " << eventInfo->runNumber()
+		   << "  event number: " << eventInfo->eventNumber()
 		   << "   lumiblock: " << m_lumiblock << "  mu: " << m_mu);
 
   if (m_extendedPlots){
@@ -1130,7 +1130,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 		   << "  LB: " << m_lumiblock
 		   << "  --> Track collection " << m_tracksName.key()
 		   << "  has size =" << tracks->size());
-  
+
   int nTracks = 0;
   int nHitsEvent = 0;
 
@@ -1145,7 +1145,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
     }
 
     //check that all TSOS of track have track parameters defined (required to compute residuals/pulls)
-    if (trackRequiresRefit(track)) {	
+    if (trackRequiresRefit(track)) {
       ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms ** Not all TSOS contain track parameters - will be missing residuals/pulls ");
     }
     else {
@@ -1165,7 +1165,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
     float trkqoverp2 = -999;
     float trketa_w   = -999;
     bool countedTrack = false;
-    
+
     if(m_extendedPlots) {
       trkqoverp2 =  track->perigeeParameters()->parameters()[Trk::qOverP]*fabs(track->perigeeParameters()->parameters()[Trk::qOverP])*1000000.;
     }
@@ -1179,9 +1179,9 @@ StatusCode IDAlignMonResiduals::fillHistograms()
       hweight       = m_etapTWeight->GetBinContent( binNumber );
     }
     //looping over the hits of this track
-    ATH_MSG_DEBUG ("** track " << nTracks << "/" << tracks->size() 
-		     << "  pt: " <<  trkpt 
-		     << "  eta: " << trketa_w 
+    ATH_MSG_DEBUG ("** track " << nTracks << "/" << tracks->size()
+		     << "  pt: " <<  trkpt
+		     << "  eta: " << trketa_w
 		     << "  weight: " << hweight
 		     << " ** start looping on hits/TSOS ** ");
     for (const Trk::TrackStateOnSurface* tsos : *track->trackStateOnSurfaces()) {
@@ -1190,7 +1190,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
       if (tsos == nullptr) {
 	ATH_MSG_DEBUG ("     TSOS (hit) = " << nTSOS << " is NULL ");
 	continue;
-      }	
+      }
 
       //skipping outliers
       ATH_MSG_DEBUG (" --> testing hit " << nTSOS << "/" << track->trackStateOnSurfaces()->size() << " to be measurement type");
@@ -1208,7 +1208,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
       }
 
       //Trk::RIO_OnTrack object contains information on the hit used to fit the track at this surface
-      ATH_MSG_DEBUG (" --> Going to retrive the Trk::RIO_OnTrack for hit " << nTSOS); 
+      ATH_MSG_DEBUG (" --> Going to retrive the Trk::RIO_OnTrack for hit " << nTSOS);
       const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>(mesh);
       if (hit == nullptr) {
 	//for some reason the first tsos has no associated hit - maybe because this contains the defining parameters?
@@ -1216,7 +1216,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	continue;
       }
 
-      ATH_MSG_DEBUG (" --> Going to retrive the track parameters of this TSOS: " << nTSOS); 
+      ATH_MSG_DEBUG (" --> Going to retrive the track parameters of this TSOS: " << nTSOS);
       const Trk::TrackParameters* trackParameter = tsos->trackParameters();
       if(trackParameter== nullptr) {
 	//if no TrackParameters for TSOS we cannot define residuals
@@ -1298,41 +1298,41 @@ StatusCode IDAlignMonResiduals::fillHistograms()
       else  detType = 0;
 
       // TRT hits: detType = 2
-      if(detType==2){ 
+      if(detType==2){
 	ATH_MSG_DEBUG ("** IDAlignMonResiduals::fillHistograms() ** Hit is from the TRT, finding residuals... ");
 	bool isTubeHit = (mesh->localCovariance()(Trk::locX,Trk::locX) > 1.0) ? 1 : 0;
 	const Trk::TrackParameters* trackParameter = tsos->trackParameters();
 	float hitR = hit->localParameters()[Trk::driftRadius];
 	float trketa = tsos->trackParameters()->eta();
 	float pullR = -9.9;
-	
+
 	const Identifier& id = m_trtID->layer_id(hitId);
 	int barrel_ec      = m_trtID->barrel_ec(id);
 	int layer_or_wheel = m_trtID->layer_or_wheel(id);
 	int phi_module     = m_trtID->phi_module(id);
 	int straw_layer    = m_trtID->straw_layer(id);
-	
+
 	//finding residuals
 	if(!trackParameter){
 	  if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "No TrackParameters associated with TRT TrkSurface "<<nTSOS<< endmsg;
 	  continue;
 	}
 	ATH_MSG_DEBUG ("Found Trk::TrackParameters for hit " << nTSOS << " --> TRT hit (detType= "<< detType <<")");
-	
+
 	//getting unbiased track parameters by removing the hit from the track and refitting
 	const Trk::TrackParameters* trackParameterUnbiased = getUnbiasedTrackParameters(track,tsos);
-	
+
 	if(!trackParameterUnbiased){//updator can fail
 	  if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Cannot define unbiased parameters for hit, skipping it." << endmsg;
 	  continue;
 	}
 	ATH_MSG_DEBUG (" --> TRT UnBiased TrackParameters of hit " << nTSOS << " FOUND");
-	
+
 	float perdictR = trackParameterUnbiased->parameters()[Trk::locR];
-	
+
 	//Theoretically there should be no difference in the pull, but in practice, there can be differences
 	bool isPullUnbiased = true;
-	
+
 	const Trk::MeasurementBase* mesh =tsos->measurementOnTrack(); //This has been defined in line 869. Should be safe to keep it without redefinition
 	//Not clear to me here. isPullUnbiased is set to true. Why inside the Function I am checking if it is true or not? Useless I would say.
 	const Trk::ResidualPull* residualPull = m_residualPullCalculator->residualPull(mesh,
@@ -1340,23 +1340,23 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 										       (isPullUnbiased) ?
 										       Trk::ResidualPull::Unbiased :
 										       Trk::ResidualPull::Biased);
-	
+
 	if (residualPull) {
 	  pullR = residualPull->pull()[Trk::locR];
 	}
 	else {
 	  ATH_MSG_DEBUG (" no covariance of the track parameters given, can not calculate pull!");
 	}
-	
+
 	delete trackParameterUnbiased;
 	delete residualPull;
-	
+
 	float residualR = hitR - perdictR;
-	
+
 	const InDet::TRT_DriftCircleOnTrack *trtCircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(tsos->measurementOnTrack());
-	
+
 	const InDet::TRT_DriftCircle *RawDriftCircle(NULL);
-	
+
 	if (trtCircle!=NULL) {
 	  ATH_MSG_DEBUG(" --> Getting TRT RawDriftCircle");
 	  RawDriftCircle = dynamic_cast<const InDet::TRT_DriftCircle*>(trtCircle->prepRawData());
@@ -1364,7 +1364,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	else {
 	  ATH_MSG_DEBUG("trtCircle is a NULL pointer");
 	}
-	
+
 	if ( trtCircle != nullptr){
 	  bool isValid;
 	  float leadingEdge = -999;
@@ -1374,11 +1374,11 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  else {
 	    ATH_MSG_DEBUG("RawDriftCircles are NULL pointer");
 	  }
-	  
+
 	  Identifier DCoTId = trtCircle->identify();
 	  float t0 = m_trtcaldbTool->getT0(DCoTId, TRTCond::ExpandedIdentifier::STRAW);
 	  ATH_MSG_DEBUG("** fillHistograms() ** Filling TRT HISTOS for hit/tsos " << nTSOS);
-	  
+
 	  // Global positions
 	  float trkz0 = track->perigeeParameters()->parameters()[Trk::z0];
 	  float theta = track->perigeeParameters()->parameters()[Trk::theta];
@@ -1388,7 +1388,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  Amg::Vector3D  center(-9999.,-9999.,-9999);
 	  if (RawDriftCircle!=NULL)
 	    center = RawDriftCircle->detectorElement()->surface( id ).center() ;
-	  
+
 	  if( fabs(barrel_ec) == 1 && RawDriftCircle!=NULL){
 	    hitZ = sqrt(center.x()*center.x()+center.y()*center.y())*tan(M_PI/2. - theta) + trkz0;
 	  }
@@ -1400,9 +1400,9 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    hitGlobalR = (center_z - trkz0) / tan(M_PI/2. - theta);
 	    ATH_MSG_DEBUG("** fillHistograms() ** TRT endcap hit in layer_or_wheel: " <<  layer_or_wheel << "  hitGlobalR: " << hitGlobalR);
 	  }
-	  
-	  ATH_MSG_DEBUG(" fillHistograms() ** filling TRT histos:" 
-			<< "  Barrel/EndCap: " << barrel_ec 
+
+	  ATH_MSG_DEBUG(" fillHistograms() ** filling TRT histos:"
+			<< "  Barrel/EndCap: " << barrel_ec
 			<< "  layer/wheel: " << layer_or_wheel
 			<< "  phi: " << phi_module
 			<< "  Residual: " << residualR);
@@ -1425,7 +1425,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 			    ,trkpt, hweight);
 	}
       }//if detType ==2 // TRT
-      
+
       //if (detType==0 || detType==1)
       else {//have identified pixel or SCT hit
 	ATH_MSG_DEBUG ("** fillHistograms() ** Hit is pixel or SCT, type: " << detType);
@@ -1493,15 +1493,15 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	}
 
 	//const Trk::TrackParameters* trackParameter = tsos->trackParameters();  // Already defined before in line 880. Should be safe here to take the one up since there are the continues.
-	
+
 	//finding residuals
 	if(trackParameter){//should always have TrackParameters since we now skip tracks with no MeasuredTrackParameters
-	  
+
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Found Trk::TrackParameters " << trackParameter << endmsg;
-	  
+
 	  double unbiasedResXY[4] = {9999.0,9999.0,9999.0,9999.0};
 	  double biasedResXY[4] = {9999.0,9999.0,9999.0,9999.0};
-	  
+
 	  //finding unbiased single residuals
 	  StatusCode sc;
 	  sc = getSiResiduals(track,tsos,true,unbiasedResXY);
@@ -1515,7 +1515,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  residualY = (float)unbiasedResXY[1];
 	  pullX     = (float)unbiasedResXY[2];
 	  pullY     = (float)unbiasedResXY[3];
-	  
+
 	  //finding biased single residuals (for interest)
 	  sc = getSiResiduals(track,tsos,false,biasedResXY);
 	  if (sc.isFailure()) {
@@ -1535,17 +1535,17 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    hitErrorX = (float)sqrt(fabs(mesh->localCovariance()(Trk::loc1,Trk::loc1)));
 	    hitErrorY = (float)sqrt(fabs(mesh->localCovariance()(Trk::loc2,Trk::loc2)));
 	    //globR = (float)sqrt(mesh->globalPosition().x()*mesh->globalPosition().x()+mesh->globalPosition().y()*mesh->globalPosition().y());
-	    
+
 	    if (detType==1 && barrelEC!=0){  // Hit error calculation for the SCT Endcaps
 	      const InDetDD::SiDetectorElement *siDet = dynamic_cast<const InDetDD::SiDetectorElement*>(hit->detectorElement());
-	      
+
 	      // MeasurementBase --> virtual const Amg::Vector3D& globalPosition() const = 0;
 	      /// Angle of strip in local frame with respect to the etaAxis.
 	      /// Zero for all elements except trapezoidal detectors (ie SCT forward modules).
 	      ////SiDetectorElement -->double sinStereoLocal(const Amg::Vector2D &localPos) const;
 	      /// See previous method
 	      ////SiDetectorElement -->double sinStereoLocal(const HepGeom::Point3D<double> &globalPos) const;
-	      
+
 	      if (siDet != NULL)
 		{
 		  double sinAlpha = siDet->sinStereoLocal(siDet->localPosition(mesh->globalPosition()));
@@ -1556,24 +1556,24 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 		  RotMat(0,1) = sinAlpha;
 		  RotMat(1,0) = -sinAlpha;
 		  RotMat(1,1) = cosAlpha;
-		  
+
 		  AmgSymMatrix(2) transformedROTCov = mesh->localCovariance().similarity(RotMat);
 		  hitErrorX = sqrt(transformedROTCov(0,0));
 		}
 	    }
 	  }
-	  
-	  
+
+
 	  //looking for an overlapping module in the X,Y direction
 	  //double counting is avoided by requiring that the overlap is at greater radius
 	  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "looking for overlaps hits..." << endmsg;
 	  std::pair<const Trk::TrackStateOnSurface*,const Trk::TrackStateOnSurface*> overlap = findOverlapHit(track,hit);
 	  const Trk::TrackStateOnSurface* xOverlap = overlap.first;//will be NULL if no overlap found
 	  const Trk::TrackStateOnSurface* yOverlap = overlap.second;//will be NULL if no overlap found
-	  
+
 	  //find residuals for overlapping modules (if any) and calculate overlap residual
 	  if(xOverlap){//identified outer module overlapping in localX direction
-	    
+
 	    foundXOverlap = true;
 	    //float overlapXResX = 9999.0;
 	    //float overlapXResY = 9999.0;
@@ -1588,18 +1588,18 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    /*
 	      overlapXResX = (float)unbiasedOverlapRes[0];
 	      overlapXResY = (float)unbiasedOverlapRes[1];
-	      
+
 	      //finally computing the overlap residuals
 	      overlapXResidualX = overlapXResX - residualX;
 	      overlapXResidualY = overlapXResY - residualY;
 	    */
 	    overlapXResidualX = (float)unbiasedOverlapRes[0] - residualX;
 	    overlapXResidualY = (float)unbiasedOverlapRes[1] - residualY;
-	    
+
 	  }
-	  
+
 	  if(yOverlap){//identified outer module overlapping in localY direction
-	    
+
 	    foundYOverlap = true;
 	    //float overlapYResX = 9999.0;
 	    //float overlapYResY = 9999.0;
@@ -1611,29 +1611,29 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	      //return StatusCode::SUCCESS;
 	      continue;
 	    } else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "unbiasedOverlapRes found ok" << endmsg;
-	    
+
 	    overlapYResidualX = (float)unbiasedOverlapRes[0] - residualX;
 	    overlapYResidualY = (float)unbiasedOverlapRes[1] - residualY;
 	  }
 	}
 	else if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No TrackParameters associated with Si TrkSurface "<< nTSOS << " - Hit is probably an outlier" << endmsg;
       }
-      
+
       //--------------------------------------------
       //
       // Filling Residual Histograms for different subsystems
       //
       //--------------------------------------------
-      
-      
+
+
       if (detType==0) {//filling pixel histograms
 	m_si_residualx -> Fill(residualX, hweight);
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is a PIXEL hit " << hitId  << " - filling histograms" << endmsg;
-	
+
 	if(barrelEC==0){//filling pixel barrel histograms
-	  
+
 	  if (layerDisk==0) m_nIBLHitsPerLB++;
-	  
+
 	  m_si_b_residualx -> Fill(residualX, hweight);
 	  int layerModEtaShift[4] = {10,30,48,65};       //HARDCODED!
 	  int layerModPhiShift[4] = {0,18,44,86};
@@ -1649,17 +1649,17 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  m_pix_b_residualsy[layerDisk]-> Fill(residualY, hweight);
 	  m_pix_b_pullsx[layerDisk]    -> Fill(pullX    , hweight);
 	  m_pix_b_pullsy[layerDisk]    -> Fill(pullY    , hweight);
-	  
-	  
+
+
 	  m_pix_b_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualX, hweight);
 	  m_pix_b_yresvsmodetaphi_3ds[layerDisk] -> Fill(modEta, modPhi, residualY, hweight);
-	  
+
 	  if (layerDisk == 0) {
 	    m_pix_b0_resXvsetaLumiBlock->Fill(float(m_lumiblock), modEta, residualX, hweight);
-	    
+
 	    if (modEta<=6 && modEta>=-6)
 	      m_pix_b0_resXvsetaLumiBlock_planars->Fill(float(m_lumiblock),modEta,residualX,hweight);
-	    
+
 	    if (m_doIBLLBPlots) {
 	      m_pix_b0_resXvsetaLumiBlock_3d->Fill(float(m_lumiblock), modEta, residualX, hweight);
 	      if (modEta<=6 && modEta>=-6) m_pix_b0_resXvsetaLumiBlock_planars->Fill(float(m_lumiblock),modEta,residualX,hweight);
@@ -1679,7 +1679,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	      if (modPhi==13) m_pix_b0_resXvsetaLumiBlock_stave13->Fill(float(m_lumiblock),modEta,residualX,hweight);
 	    }
 	  }
-	  
+
 	  if (foundXOverlap) {
 	    m_pix_bec_Oxresx_mean -> Fill(layerDisk+1.1,overlapXResidualX, hweight);
 	    m_pix_bec_Oxresy_mean -> Fill(layerDisk+1.1,overlapXResidualY, hweight);
@@ -1701,7 +1701,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    }
 	  }//fYO
 	}
-	
+
 	else if(barrelEC==2){//three Pixel endcap disks from 0-2
 	  int ModPhiShift[3] = {0,55,110};
 	  m_si_eca_pullX-> Fill(layerDisk,pullX    , hweight);
@@ -1712,20 +1712,20 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  m_pix_eca_residualy     -> Fill(residualY, hweight);
 	  m_pix_eca_pullx         -> Fill(pullX    , hweight);
 	  m_pix_eca_pully         -> Fill(pullY    , hweight);
-	  
+
 	  float disk = layerDisk + 0.1;
 	  if(foundXOverlap) {
 	    m_pix_bec_Oxresx_mean -> Fill(disk+5.0,overlapXResidualX, hweight);
 	    m_pix_bec_Oxresy_mean -> Fill(disk+5.0,overlapXResidualY, hweight);
 	    m_pix_eca_Oxresxvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],overlapXResidualX, hweight);
 	  }
-	  
+
 	  if(foundYOverlap) {
 	    m_pix_bec_Oyresx_mean -> Fill(disk+5.0,overlapYResidualX, hweight);
 	    m_pix_bec_Oyresy_mean -> Fill(disk+5.0,overlapYResidualY, hweight);
 	    m_pix_eca_Oyresyvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],overlapYResidualY, hweight);
 	  }
-	  
+
 	  m_pix_eca_xresvsmodphi_2d -> Fill(modPhi+ModPhiShift[layerDisk],residualX, hweight);
 	  m_pix_eca_yresvsmodphi_2d -> Fill(modPhi+ModPhiShift[layerDisk],residualY, hweight);
 	  m_pix_eca_unbiased_xresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualX, hweight);
@@ -1737,7 +1737,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  m_si_ecc_pullY-> Fill(layerDisk,pullY    , hweight);
 	  m_si_ecc_resX -> Fill(layerDisk,residualX, hweight);
 	  m_si_ecc_resY -> Fill(layerDisk,residualY, hweight);
-	  
+
 	  float disk = (float)layerDisk;
 	  disk =  -1.0*(disk + 0.1);
 	  m_pix_ecc_residualx     -> Fill(residualX, hweight);
@@ -1760,36 +1760,36 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  //m_pix_ecc_unbiased_yresvsmodphi -> Fill(modPhi+ModPhiShift[layerDisk],residualY,hweight);
 	  m_pix_ecc_unbiased_xresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualX, hweight);
 	  m_pix_ecc_unbiased_yresvsmodphi_disks[layerDisk] -> Fill(modPhi,residualY, hweight);
-	  
+
 	}
-	
+
       }
       else if (detType==1) {//filling SCT histograms
 	m_si_residualx -> Fill(residualX, hweight);
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " This is an SCT hit " << hitId << " - filling histograms" << endmsg;
-	
+
 	if(barrelEC==0){//filling SCT barrel histograms
 	  m_si_b_residualx -> Fill(residualX, hweight);
 	  int ModPhiShift[4] = {0,37,82,135};
 	  int ModEtaShift[4] = {6,24,42,60};
 	  m_si_barrel_pullX->Fill(m_NPixLayers + 2*(layerDisk) + sctSide, pullX, hweight);
 	  //m_si_barrel_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet
-	  
+
 	  m_si_barrel_resX->Fill(m_NPixLayers + 2*(layerDisk) + sctSide, residualX, hweight);
 	  //m_si_barrel_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet
-	  
+
 	  m_sct_b_residualx      -> Fill(residualX      , hweight);
 	  m_sct_b_biasedresidualx-> Fill(biasedResidualX, hweight);
-	  
+
 	  if(foundXOverlap) m_sct_bec_Oxresx_mean -> Fill(layerDisk+1.1,overlapXResidualX, hweight);
 	  if(foundYOverlap) m_sct_bec_Oyresx_mean -> Fill(layerDisk+1.1,overlapYResidualX, hweight);
-	  
+
 	  m_sct_b_residualsx[layerDisk]-> Fill(residualX, hweight);
 	  m_sct_b_pullsx[layerDisk]    -> Fill(pullX    , hweight);
-	  
+
 	  m_sct_b_xresvsmodetaphi_3ds[layerDisk] -> Fill(modEta,modPhi,residualX, hweight);
 
-	  
+
 	  if(foundXOverlap) {
 	    m_sct_b_xoverlapresidualsx[layerDisk]-> Fill(overlapXResidualX         , hweight);
 	    m_sct_b_Oxresxvsmodeta    -> Fill(modEta+ModEtaShift[layerDisk],overlapXResidualX, hweight);
@@ -1806,7 +1806,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  }
 	  // if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Unexpected SCT layer number "<< layerDisk << endmsg;
 	}
-	
+
 	else if(barrelEC==2){//nine SCT endcap disks from 0-8
 	  //ASSUMPTION: the outer rings of the SCT endcap disks have the same number of modules. WARNING! hardcoded!
 	  int Nmods = 52;
@@ -1815,21 +1815,21 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  //m_si_eca_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet
 	  m_si_eca_resX->Fill(3 + 2*(layerDisk) + sctSide, residualX, hweight);
 	  //m_si_eca_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet
-	  
+
 	  float disk = layerDisk + 0.1;
 	  m_sct_eca_residualx     -> Fill(residualX, hweight);
 	  m_sct_eca_pullx         -> Fill(pullX    , hweight);
-	  
+
 	  m_sct_eca_xresvsmodphi_2d -> Fill(modPhi+(layerDisk - 1)* (m_gap_sct + Nmods),residualX, hweight);
-	  
+
 	  if(foundXOverlap) {
 	    m_sct_bec_Oxresx_mean->Fill(disk+6.0,overlapXResidualX);
 	    m_sct_eca_Oxresxvsmodphi -> Fill(modPhi+ (layerDisk - 1)* (m_gap_sct + Nmods),overlapXResidualX,hweight);
 	    //                               modPhi+ ModPhiShift[layerDisk],overlapXResidualX    , hweight);
 	  }
-	  
+
 	}
-	
+
 
 	else if(barrelEC==-2){
 	  int Nmods = 52;
@@ -1837,12 +1837,12 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  //m_si_ecc_pullY->Fill(3 + 2*(layerDisk) + sctSide, pullY);//no SCT Y residuals yet
 	  m_si_ecc_resX->Fill(3 + 2*(layerDisk) + sctSide, residualX, hweight);
 	  //m_si_ecc_resY->Fill(3 + 2*(layerDisk) + sctSide, residualY);//no SCT Y residuals yet
-	  
+
 	  float disk = (float)layerDisk;
 	  disk =  -1.0*(disk + 0.1);
 	  m_sct_ecc_residualx     ->Fill(residualX, hweight);
 	  m_sct_ecc_pullx         ->Fill(pullX    , hweight);
-	  
+
 	  m_sct_ecc_xresvsmodphi_2d -> Fill(modPhi+(layerDisk - 1)* (m_gap_sct + Nmods)    ,residualX, hweight);
 	  if(foundXOverlap) {
 	    m_sct_bec_Oxresx_mean->Fill(disk,overlapXResidualX);
@@ -1881,12 +1881,12 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	      m_hiterror_x_ibl_b_WideRange      ->Fill(hitErrorX,hweight);
 	      m_hiterror_y_ibl_b_WideRange      ->Fill(hitErrorX,hweight);
 	    }
-	    
+
 	    if(mlocalY >  m_PixelBarrelYSize / 2.05 )	mlocalY =  m_PixelBarrelYSize/2.05;
 	    if(mlocalY < -m_PixelBarrelYSize / 2.05 )	mlocalY = -m_PixelBarrelYSize/2.05;
 	    if(mlocalX >  m_PixelBarrelXSize / 2.05 )	mlocalX =  m_PixelBarrelXSize/2.05;
 	    if(mlocalX < -m_PixelBarrelXSize / 2.05 )	mlocalX = -m_PixelBarrelXSize/2.05;
-	    
+
 	    m_pix_b_residualsx_incitheta[layerDisk] ->Fill(incidenceTheta,residualX,hweight);
 	    m_pix_b_residualsy_incitheta[layerDisk] ->Fill(incidenceTheta,residualY,hweight);
 	    m_pix_b_residualsx_inciphi[layerDisk] ->Fill(incidencePhi,residualX,hweight);
@@ -1907,7 +1907,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	      m_pix_b_xoverlapresidualsx[layerDisk]-> Fill(overlapXResidualX          , hweight);
 	      m_pix_b_xoverlapresidualsy[layerDisk]-> Fill(overlapXResidualY          , hweight);
 	    }
-	    
+
 	    if(foundYOverlap) {
 	      m_pix_b_yoverlapresidualsx[layerDisk]-> Fill(overlapYResidualX          , hweight);
 	      m_pix_b_yoverlapresidualsy[layerDisk]-> Fill(overlapYResidualY          , hweight);
@@ -1915,7 +1915,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    // int modoffset = 6.5;       // default for old pixel layers
 	    m_PixelBarrelXSize = 16.44;  // mm
 	    m_PixelBarrelYSize = 60.2;   // mm
-	    
+
 	    if (layerDisk == 0) { // in case of IBL
 	      m_PixelBarrelXSize = 18.75; // Extracted from: arXiv:1209.1906v1, Figure 2
 	      m_PixelBarrelYSize = 41.32;
@@ -1925,10 +1925,10 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 		m_PixelBarrelYSize = 19.20 ;
 	      }
 	    }
-	    
+
 	    float xValueForHist = modEta +  mlocalY / m_PixelBarrelYSize;
 	    float yValueForHist = modPhi +  mlocalX / m_PixelBarrelXSize;
-	    
+
 	    ATH_MSG_VERBOSE (" -- filling detailed pixel maps -- layer = " << layerDisk
 			     << "  eta: " << modEta
 			     << "  phi " << modPhi
@@ -1943,7 +1943,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    //m_pix_b_biased_yresvsmodetaphi_3ds[layerDisk] -> Fill(ModCenterPosX+mlocalY, ModCenterPosY+mlocalX, residualY, hweight);
 	    m_pix_b_detailed_xresvsmodetaphi_3ds[layerDisk] -> Fill( xValueForHist, yValueForHist, residualX, hweight);
 	    m_pix_b_detailed_yresvsmodetaphi_3ds[layerDisk] -> Fill( xValueForHist, yValueForHist, residualY, hweight);
-	    
+
 	    // pixel B-layer halfshell phi identifier association
 	    // Layer 0                  Layer 1                     Layer 2
 	    // top: 1-10                0-19                        0-22 49-51
@@ -2013,10 +2013,10 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    m_pix_eca_pullx_pt    -> Fill(trkpt, pullX    , hweight);
 	    m_pix_eca_pully_pt    -> Fill(trkpt, pullY    , hweight);
 
-	    m_hiterror_x_pix_ec   -> Fill(hitErrorX       , hweight); 	    
+	    m_hiterror_x_pix_ec   -> Fill(hitErrorX       , hweight);
 	    m_hiterror_y_pix_ec   -> Fill(hitErrorY       , hweight);
-	    m_hiterror_x_pix_eca  -> Fill(hitErrorX       , hweight); 	    
-	    m_hiterror_y_pix_eca  -> Fill(hitErrorY       , hweight);       
+	    m_hiterror_x_pix_eca  -> Fill(hitErrorX       , hweight);
+	    m_hiterror_y_pix_eca  -> Fill(hitErrorY       , hweight);
 	    m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX       , hweight);
 	    m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY       , hweight);
 
@@ -2076,10 +2076,10 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	    m_pix_ecc_pullx_pt    -> Fill(trkpt, pullX    , hweight);
 	    m_pix_ecc_pully_pt    -> Fill(trkpt, pullY    , hweight);
 
-	    m_hiterror_x_pix_ec   -> Fill(hitErrorX       , hweight);  
-	    m_hiterror_y_pix_ec   -> Fill(hitErrorY       , hweight);  
-	    m_hiterror_x_pix_ecc  -> Fill(hitErrorX       , hweight);  
-	    m_hiterror_y_pix_ecc  -> Fill(hitErrorY       , hweight);  
+	    m_hiterror_x_pix_ec   -> Fill(hitErrorX       , hweight);
+	    m_hiterror_y_pix_ec   -> Fill(hitErrorY       , hweight);
+	    m_hiterror_x_pix_ecc  -> Fill(hitErrorX       , hweight);
+	    m_hiterror_y_pix_ecc  -> Fill(hitErrorY       , hweight);
 	    m_hiterror_x_pix_ec_WideRange-> Fill(hitErrorX       , hweight);
 	    m_hiterror_y_pix_ec_WideRange-> Fill(hitErrorY       , hweight);
 
@@ -2356,7 +2356,7 @@ StatusCode IDAlignMonResiduals::fillHistograms()
 	  ATH_MSG_DEBUG("Fit IBL Shape for LumiBlock : "<< m_lumiblock<<" disabled because of too few entries in planars! "<<projection_lumiblock_planars->GetEntries() <<
 			"  This block has: " << m_nIBLHitsPerLB << " total entries");
 	}
-	
+
 	delete projection_lumiblock;
 	delete projection_lumiblock_planars;
       }
@@ -2890,7 +2890,7 @@ const Trk::TrackParameters* IDAlignMonResiduals::getUnbiasedTrackParameters(cons
 	if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "OtherSideTrackParameters: " << *(OtherModuleSideHit->trackParameters()) << endmsg;
 	OtherSideUnbiasedTrackParams = m_iUpdator->removeFromState(*(OtherModuleSideHit->trackParameters()),
 								   OtherModuleSideHit->measurementOnTrack()->localParameters(),
-								   OtherModuleSideHit->measurementOnTrack()->localCovariance());
+								   OtherModuleSideHit->measurementOnTrack()->localCovariance()).release();
 
 	if (OtherSideUnbiasedTrackParams) {
 	  if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << "Unbiased OtherSideTrackParameters: " << *OtherSideUnbiasedTrackParams << endmsg;
@@ -2955,8 +2955,12 @@ const Trk::TrackParameters* IDAlignMonResiduals::getUnbiasedTrackParameters(cons
     PropagatedTrackParams = tsos->trackParameters()->clone();
   }
 
-
-  UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams, tsos->measurementOnTrack()->localParameters(), tsos->measurementOnTrack()->localCovariance());
+  UnbiasedTrackParams =
+    m_iUpdator
+      ->removeFromState(*PropagatedTrackParams,
+                        tsos->measurementOnTrack()->localParameters(),
+                        tsos->measurementOnTrack()->localCovariance())
+      .release();
 
   delete PropagatedTrackParams;
 
@@ -3132,7 +3136,7 @@ bool IDAlignMonResiduals::trackRequiresRefit(const Trk::Track* track)
   ATH_MSG_DEBUG ("** IDAlignMonResiduals::trackRequiresRefit ** does track requires a refit to access the residuals? " << refitTrack
 		 << " (hits on track: " << nHits
 		 << "  hits without params: " <<  nHitsNoParams << " ) ");
-  
+
   return refitTrack;
 }
 
@@ -4097,7 +4101,7 @@ void IDAlignMonResiduals::MakePIXEndCapsHistograms(MonGroup& al_mon){
 
       //unbiased vs pt
       m_pix_eca_residualx_pt = new TH2F("pix_eca_residualx_pt","X Residual Vs P_{T}: Pixel EndCap A;Track p_{T} [GeV];Local x res [mm]",m_nBinsPtRange, -m_PtRange, m_PtRange,
-					100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange); 
+					100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange);
       RegisterHisto(al_mon,m_pix_eca_residualx_pt);
       m_pix_eca_residualy_pt = new TH2F("pix_eca_residualy_pt","Y Residual Vs p_{T}: Pixel EndCap A;Track p_{T} [GeV];Local y res [mm]",m_nBinsPtRange, -m_PtRange, m_PtRange,
 					100*m_FinerBinningFactor, m_minPIXResYFillRange, m_maxPIXResYFillRange);
@@ -4109,7 +4113,7 @@ void IDAlignMonResiduals::MakePIXEndCapsHistograms(MonGroup& al_mon){
       m_pix_ecc_residualy_pt = new TH2F("pix_ecc_residualy_pt","Y Residual Vs p_{T} Pixel EndCap C;Track p_{T} [GeV];Local y residual [mm]", m_nBinsPtRange, -m_PtRange, m_PtRange,
 					100*m_FinerBinningFactor, m_minPIXResXFillRange, m_maxPIXResXFillRange);
       RegisterHisto(al_mon,m_pix_ecc_residualy_pt);
-      
+
       //biased pt
       m_pix_eca_biased_residualx_pt = new TH2F("pix_eca_biased_residualx_pt","Biased X Residual Vs Pt Pixel EndCap A;Track pT (GeV); Res (mm)",m_nBinsPtRange,-m_PtRange,m_PtRange,100*m_FinerBinningFactor,m_minPIXResXFillRange,m_maxPIXResXFillRange);
       RegisterHisto(al_mon,m_pix_eca_biased_residualx_pt);
@@ -4711,9 +4715,9 @@ void IDAlignMonResiduals::MakeTRTBarrelHistograms(MonGroup& al_mon){
   for(unsigned int side = 0; side<3; ++side){
     /** Residual in the TRT Barrel */
     m_trt_b_hist->residualR[side] = MakeHist("trt_b_residualR"+sideName[side],"UnBiased Residual for the TRT Barrel "+sideName[side],
-					     100*m_FinerBinningFactor, m_minTRTResWindow, m_maxTRTResWindow, "Residual [mm]","Entries"); 
+					     100*m_FinerBinningFactor, m_minTRTResWindow, m_maxTRTResWindow, "Residual [mm]","Entries");
     RegisterHisto(al_mon,m_trt_b_hist->residualR[side]);
-    
+
     m_trt_b_hist->residualR_notube[side] = MakeHist("trt_b_residualR"+sideName[side]+"_notube","UnBiased Residual (notube) for the TRT Barrel "+sideName[side],
 						    100*m_FinerBinningFactor, m_minTRTResWindow, m_maxTRTResWindow, "Residual [mm]","Entries");
     RegisterHisto(al_mon,m_trt_b_hist->residualR_notube[side]);
@@ -4730,7 +4734,7 @@ void IDAlignMonResiduals::MakeTRTBarrelHistograms(MonGroup& al_mon){
 
     /** Measured drift radius */
     m_trt_b_hist->MeasuredR[side] = MakeHist("trt_b_MeasuredR"+sideName[side],"Measured at drift radius for TRT Barrel "+sideName[side],
-					     100, -strawRadius, strawRadius, "Measured Drift Radius (mm)", "Entries"); 
+					     100, -strawRadius, strawRadius, "Measured Drift Radius (mm)", "Entries");
     RegisterHisto(al_mon,m_trt_b_hist->MeasuredR[side]);
 
     /** Drift radius from track fit */
@@ -4756,7 +4760,7 @@ void IDAlignMonResiduals::MakeTRTBarrelHistograms(MonGroup& al_mon){
 						     100, -m_RangeOfPullHistos, m_RangeOfPullHistos, "#mu","Pull");
       RegisterHisto(al_mon,m_trt_b_hist->pullR_notube_mu[side]);
 
-      /** Residuals and pulls vs pT*/ 
+      /** Residuals and pulls vs pT*/
       m_trt_b_hist->residualR_pt[side] = MakeHist("trt_b_residualR_pt_"+sideName[side],
 						  "Unbiased residual vs pT for the TRT Barrel "+sideName[side],
 						  m_nBinsPtRange, -m_PtRange, m_PtRange,
@@ -4786,7 +4790,7 @@ void IDAlignMonResiduals::MakeTRTBarrelHistograms(MonGroup& al_mon){
       m_trt_b_hist->residualR_mu[side] = MakeHist("trt_b_residualR_mu_"+sideName[side],"Unbiased Residual vs mu for TRT Barrel "+sideName[side],
 						  m_nBinsMuRange, m_muRangeMin, m_muRangeMax,
 						  100, m_minTRTResWindow, m_maxTRTResWindow,
-						  "#mu","Residual [mm]"); 
+						  "#mu","Residual [mm]");
       RegisterHisto(al_mon,m_trt_b_hist->residualR_mu[side]);
     }
 
@@ -4879,7 +4883,7 @@ void IDAlignMonResiduals::MakeTRTBarrelHistograms(MonGroup& al_mon){
 	  m_trt_b_hist->aveResVsStrawLayerStackLevel[side][phiSec] = MakeProfile("trt_b_aveResVsStrawLayerStackLevel_"+intToString(phiSec)+"_"+sideName[side],"Average Residual vs Straw Layer for TRT Barrel Modules in phi sector "+intToString(phiSec)+" "+sideName[side],
 										 73, -0.5, 72.5,
 										 m_minTRTResWindow, m_maxTRTResWindow,
-										 "Straw layer","Average Residual [mm]",false); 
+										 "Straw layer","Average Residual [mm]",false);
 	  RegisterHisto(al_mon,m_trt_b_hist->aveResVsStrawLayerStackLevel[side][phiSec]);
 
 	  /** Residual RMS Vs Strawlayer for the 3 Barrel Layers (A and C, A Only, C Only)*/
@@ -4942,7 +4946,7 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){
 						     "UnBiased Residual vs pT for the TRT Barrel "+endcapName[endcap],
 						     m_nBinsPtRange, -m_PtRange, m_PtRange,
 						     100, m_minTRTResWindow, m_maxTRTResWindow,
-						     "Track p_{T} [GeV]","Residual [mm]"); 
+						     "Track p_{T} [GeV]","Residual [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->residualR_pt[endcap]);
 
       m_trt_ec_hist->pullR_pt[endcap] = MakeHist("trt_ec_pullR_pt_"+endcapName[endcap],"UnBiased Pull vs pT for the TRT Barrel "+endcapName[endcap],
@@ -4959,7 +4963,7 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){
       RegisterHisto(al_mon,m_trt_ec_hist->pullR_notube_pt[endcap]);
 
       /** Residuals vs pt per wheel */
-      for (int iWheel=0; iWheel < 40; iWheel++) { 
+      for (int iWheel=0; iWheel < 40; iWheel++) {
 	m_trt_ec_hist->residualR_ptwheel[endcap][iWheel] = MakeProfile("trt_ec_resVspt_wheel_"+intToString(iWheel)+"_"+endcapName[endcap],
 								       "Residual vs p_{T} for TRT "+endcapName[endcap]+" "+intToString(iWheel),
 								       m_nBinsPtRange, -m_PtRange, m_PtRange,
@@ -4968,15 +4972,15 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){
 	SetMinWindow(m_trt_ec_hist->residualR_ptwheel[endcap][iWheel], -0.025, 0.025);
 	RegisterHisto(al_mon,m_trt_ec_hist->residualR_ptwheel[endcap][iWheel]);
       }
-      
+
       /** Residuals and pulls vs mu*/
       m_trt_ec_hist->residualR_mu[endcap] = MakeHist("trt_ec_residualR_mu_"+endcapName[endcap],
 						     "UnBiased Residual vs mu for TRT "+endcapName[endcap],
 						     m_nBinsMuRange, m_muRangeMin, m_muRangeMax,
 						     50, m_minTRTResWindow, m_maxTRTResWindow,
-						     "#mu ","Residual [mm]"); 
+						     "#mu ","Residual [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->residualR_mu[endcap]);
-      
+
       m_trt_ec_hist->pullR_mu[endcap] = MakeHist("trt_ec_pullR_mu_"+endcapName[endcap],"Unbiased residual pull vs mu for TRT "+endcapName[endcap],
 						 m_nBinsMuRange, m_muRangeMin, m_muRangeMax,
 						 50, -m_RangeOfPullHistos,m_RangeOfPullHistos,
@@ -5023,42 +5027,42 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){
       /** Endcap Residual plots vs Radius & Wheel */
       m_trt_ec_hist->resVsRadiusWheelPos[endcap] = new TH3F(("trt_ec_resVsRadiusWheelPos_"+endcapName[endcap]).c_str(),
 							    ("Residual Distribution vs Wheel & Radius on Wheel for TRT "+endcapName[endcap]+";Wheel;Radius [mm]; Res [mm]").c_str(),
-							    40, -0.5, 39.5, 
+							    40, -0.5, 39.5,
 							    10, 644., 1004. /*these are the radius limits in mm according to TRT SW*/,
 							    50, m_minTRTResWindow, m_maxTRTResWindow);
       RegisterHisto(al_mon,m_trt_ec_hist->resVsRadiusWheelPos[endcap]);
       m_trt_ec_hist->aveResVsRadiusWheelPos[endcap] = MakeHist("trt_ec_aveResVsRadiusWheelPos_"+endcapName[endcap],
 							       "Average Residual vs Wheel & Radius on Wheel for TRT "+endcapName[endcap],
-							       40, -0.5, 39.5, 
+							       40, -0.5, 39.5,
 							       10, 644., 1004.,
 							       "Wheel Number","Radius on Wheel [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->aveResVsRadiusWheelPos[endcap]);
       m_trt_ec_hist->rmsResVsRadiusWheelPos[endcap] = MakeHist("trt_ec_rmsResVsRadiusWheelPos_"+endcapName[endcap],
 							       "Residual RMS vs Wheel & Radius on Wheel for TRT "+endcapName[endcap],
-							       40, -0.5, 39.5, 
+							       40, -0.5, 39.5,
 							       10, 644., 1004.,
 							       "Wheel Number","Radius on Wheel [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->rmsResVsRadiusWheelPos[endcap]);
       m_trt_ec_hist->resVsRadiusWheelNeg[endcap] = new TH3F(("trt_ec_resVsRadiusWheelNeg_"+endcapName[endcap]).c_str(),
 							    ("Residual Distribution vs Wheel & Radius on Wheel for TRT "+endcapName[endcap]+";Wheel;Radius [mm]; Res [mm]").c_str(),
-							    40, -0.5, 39.5, 
+							    40, -0.5, 39.5,
 							    10, 644., 1004./*these are the radius limits in mm according to TRT SW*/,
 							    50, m_minTRTResWindow, m_maxTRTResWindow);
       RegisterHisto(al_mon,m_trt_ec_hist->resVsRadiusWheelNeg[endcap]);
       m_trt_ec_hist->aveResVsRadiusWheelNeg[endcap] = MakeHist("trt_ec_aveResVsRadiusWheelNeg_"+endcapName[endcap],
 							       "Average Residual vs Wheel & Radius on Wheel for TRT "+endcapName[endcap],
-							       40, -0.5, 39.5, 
+							       40, -0.5, 39.5,
 							       10, 644., 1004.,
 							       "Wheel Number","Radius on Wheel [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->aveResVsRadiusWheelNeg[endcap]);
       m_trt_ec_hist->rmsResVsRadiusWheelNeg[endcap] = MakeHist("trt_ec_rmsResVsRadiusWheelNeg_"+endcapName[endcap],
 							       "Residual RMS vs Wheel & Radius on Wheel for TRT "+endcapName[endcap],
-							       40, -0.5, 39.5, 
+							       40, -0.5, 39.5,
 							       10, 644., 1004.,
 							       "Wheel Number","Radius on Wheel [mm]");
       RegisterHisto(al_mon,m_trt_ec_hist->rmsResVsRadiusWheelNeg[endcap]);
 
-      /** Endcap residual histograms vs q x pT & Wheel */ 
+      /** Endcap residual histograms vs q x pT & Wheel */
       m_trt_ec_hist->resVsqPtWheel[endcap] = new TH3F(("trt_ec_resVsqPtWheel_"+endcapName[endcap]).c_str(),
 						      ("Residual Distribution vs Wheel & p_{T} for TRT "+endcapName[endcap]+";Wheel;q#timesp_{T} [GeV]; Res [mm]").c_str(),
 						      40, -0.5, 39.5,
@@ -5132,7 +5136,7 @@ void IDAlignMonResiduals::MakeTRTEndcapHistograms(MonGroup& al_mon){
 
     m_trt_ec_hist->rmsResVsPhiSec[endcap] = MakeProfile("trt_ec_rmsResVsPhiSec_"+endcapName[endcap],
 							"Residual RMS vs sector for TRT "+endcapName[endcap],
-							m_TRTEC_nSectorBins, -0.5 , 31.5, 
+							m_TRTEC_nSectorBins, -0.5 , 31.5,
 							0, 1.0,
 							"Endcap PhiSec","Residual RMS");
     RegisterHisto(al_mon,m_trt_ec_hist->rmsResVsPhiSec[endcap]);
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx
index 5a72a9770ae543e2131cc24593e8055d2035837e..ab007cb8bf0bdc1167659f2cae30880c4f3e9f5c 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx
@@ -10,8 +10,8 @@
  * Heidi Sandaker <Heidi.Sandaker@cern.ch> @n
  * Arshak Tonoyan <Arshak.Tonyoan@cern.ch> @n
  * Thomas Burgess <Thomas.Burgess@cern.ch> @n
- * Alex Kastanas <Alex.Kastanas@cern.ch>   @n 
- * Gaetano Barone <Gaetano.Barone@cern.ch> @n 
+ * Alex Kastanas <Alex.Kastanas@cern.ch>   @n
+ * Gaetano Barone <Gaetano.Barone@cern.ch> @n
  *
  * $Id: InDetGlobalTrackMonTool.cxx,v 1.33 2009-05-14 22:44:19 kastanas Exp $
  *
@@ -109,7 +109,7 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type,
       m_pixelID(nullptr),
       m_holes_eta_phi(nullptr),
       m_holes_eta_pt(nullptr),
-      m_holes_phi_pt(nullptr), 
+      m_holes_phi_pt(nullptr),
       m_holes_eta_phi_n(nullptr),
       m_holes_hits(nullptr),
       m_holesvshits(nullptr),
@@ -140,11 +140,11 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type,
     declareProperty("DoHoleSearch",m_DoHoles_Search,"Write hole data?");
     declareProperty("DoTide",m_doTide,"Make TIDE plots?");
     declareProperty("DoTideResiduals",m_doTideResiduals,"Make TIDE residual plots?");
-    declareProperty("HoleSearchTool", m_holes_search_tool,"Tool to search for holes on track");	
+    declareProperty("HoleSearchTool", m_holes_search_tool,"Tool to search for holes on track");
     declareProperty("UpdatorTool"                  , m_iUpdator);
-    declareProperty("DoHitMaps", m_doHitMaps,"Produce hit maps?");	
-    declareProperty("DoForwardTracks", m_doForwardTracks,"Run over forward tracks?");	
-    declareProperty("DoIBL", m_doIBL,"IBL present?");	
+    declareProperty("DoHitMaps", m_doHitMaps,"Produce hit maps?");
+    declareProperty("DoForwardTracks", m_doForwardTracks,"Run over forward tracks?");
+    declareProperty("DoIBL", m_doIBL,"IBL present?");
     declareProperty("trackMax",m_trackMax,"Maximum number of tracks in track histograms");
     declareProperty("trackBin",m_trackBin,"Number of bins for the track histograms");
     declareProperty("ResidualPullCalculatorTool", m_residualPullCalculator);
@@ -155,20 +155,20 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type,
 
 StatusCode InDetGlobalTrackMonTool::initialize() {
   StatusCode sc;
-  
+
   // If any of the ID helpers are not found then we don't make the hit maps
   m_trtID = 0;
   if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) {
       ATH_MSG_DEBUG("Could not get TRT ID helper");
       m_doHitMaps = false;
   }
- 
+
   m_sctID = 0;
   if (detStore()->retrieve(m_sctID, "SCT_ID").isFailure()) {
       ATH_MSG_DEBUG("Could not get SCT ID helper");
       m_doHitMaps = false;
   }
-  
+
   m_pixelID = 0;
   if (detStore()->retrieve(m_pixelID, "PixelID").isFailure()) {
       ATH_MSG_DEBUG("Could not get Pixel ID helper");
@@ -189,15 +189,15 @@ StatusCode InDetGlobalTrackMonTool::initialize() {
   } else {
       if(msgLvl(MSG::INFO)) msg(MSG::INFO)  << "Retrieved tool " << m_residualPullCalculator << endmsg;
   }
-  
+
   ATH_CHECK( m_iUpdator.retrieve() );
 
-  
+
   ATH_CHECK ( m_trackToVertexIPEstimator.retrieve());
 
-  
+
   m_doIBL = m_IBLParameterSvc->containsIBL();
-  
+
   ATH_CHECK( m_baseline_selTool.retrieve() );
   ATH_CHECK( m_tight_selTool.retrieve() );
   if (m_holes_search_tool.empty() && m_DoHoles_Search) {
@@ -219,7 +219,7 @@ StatusCode InDetGlobalTrackMonTool::initialize() {
 StatusCode InDetGlobalTrackMonTool::bookHistograms()
 {
     Interval_t detailsInterval = ( AthenaMonManager::environment() != AthenaMonManager::online ) ? lowStat : run;
-    
+
     registerManHist( m_Trk_Base, "InDetGlobal/Track", detailsInterval,
 		     "nCOMBtrks", "Track multiplicity (baseline tracks)",
 		     m_trackBin, 0.5, m_trackMax+0.5,
@@ -243,24 +243,24 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
                      m_nBinsEta, -m_c_etaRange, m_c_etaRange,
                      m_nBinsPhi, -M_PI, M_PI,
                      "eta", "#phi_{0}" ).ignore();
-    
+
     registerManHist( m_Trk_eta_phi_noTRText_ratio, "InDetGlobal/Track", detailsInterval,
 		     "Trk_noTRText_eta_phi_ratio","Distribution of eta vs phi for combined tracks with no TRT extension",
-		     20, -m_c_etaRangeTRT, m_c_etaRangeTRT, 
+		     20, -m_c_etaRangeTRT, m_c_etaRangeTRT,
 		     m_nBinsPhi, -M_PI, M_PI,
 		     "eta", "#phi_{0}" ).ignore();
-    
+
     registerManHist( m_Trk_eta_phi_noBLhit_ratio, "InDetGlobal/Track", detailsInterval,
 		     "Trk_noBLhit_eta_phi_ratio","Eta-phi of tracks with no b-layer hit but a hit is expected, ratio to total tracks",
-		     m_nBinsEta, -m_c_etaRange, m_c_etaRange, 
+		     m_nBinsEta, -m_c_etaRange, m_c_etaRange,
 		     m_nBinsPhi, -M_PI, M_PI,
 		     "#eta", "#phi_{0}").ignore();
-    
+
     if ( m_doIBL )
     {
 	registerManHist( m_Trk_eta_phi_noIBLhit_ratio, "InDetGlobal/Track", detailsInterval,
 			 "Trk_noIBLhit_eta_phi_ratio","Eta-phi of tracks with no IBL hit but a hit is expected, ratio to total tracks",
-			 m_nBinsEta, -m_c_etaRange, m_c_etaRange, 
+			 m_nBinsEta, -m_c_etaRange, m_c_etaRange,
 			 m_nBinsPhi, -M_PI, M_PI,
 			 "#eta", "#phi_{0}").ignore();
     }
@@ -273,20 +273,20 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 			 400,-1100,1100,
 			 400,-1100,1100,
 			 "x [mm]", "y [mm]" ).ignore();
-	
+
 	registerManHist( m_ID_hitmap_x_y_eca, "InDetGlobal/Hits", run,
 			 "ID_hitmap_x_y_eca","Map of ID hits (ECA) in x vs y (mm)",
 			 400,-1100,1100,
 			 400,-1100,1100,
 			 "x [mm]", "y [mm]" ).ignore();
-	
+
 	registerManHist( m_ID_hitmap_x_y_ecc, "InDetGlobal/Hits", run,
 			 "ID_hitmap_x_y_ecc","Map of ID hits (ECC) in x vs y (mm)",
 			 400,-1100,1100,
 			 400,-1100,1100,
 			 "x [mm]", "y [mm]" ).ignore();
     }
-    
+
     for (unsigned int i = ( (m_doIBL) ? 0 : 1) ; i < m_trk_hits_eta_phi.size(); i++ )
     {
 	registerManHist( m_trk_hits_eta_phi[i],  "InDetGlobal/Hits", detailsInterval,
@@ -294,13 +294,13 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 			 m_nBinsEta, -m_c_etaRange, m_c_etaRange,
 			 m_nBinsPhi,-M_PI,M_PI,
 			 "#eta", "#phi" ).ignore();
-    
+
 	registerManHist( m_trk_hits_LB[i], "InDetGlobal/Track", detailsInterval,
 			 "trk_n"+m_c_detector_labels[i]+"hits_LB","Average number of " + m_c_detector_labels[i] + " hits by LB",
 			 m_c_range_LB,0,m_c_range_LB,
 			 "LB #", "Average number of hits in LB").ignore();
     }
-    
+
     for (unsigned int i = 1; i < m_trk_disabled_eta_phi.size(); i++ )
     {
 	registerManHist( m_trk_disabled_eta_phi[i],  "InDetGlobal/Hits", detailsInterval,
@@ -309,7 +309,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 			 m_nBinsPhi,-M_PI,M_PI,
 			 "#eta", "#phi" ).ignore();
     }
-    
+
     registerManHist( m_trk_shared_pix_eta_phi,  "InDetGlobal/Hits", detailsInterval,
 		     "Trk_nPixShared_eta_phi","Number of Pixel shared hits per track, eta-phi profile",
 		     m_nBinsEta, -m_c_etaRange, m_c_etaRange,
@@ -321,7 +321,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 		     m_nBinsEta, -m_c_etaRange, m_c_etaRange,
 		     m_nBinsPhi,-M_PI,M_PI,
 		     "#eta", "#phi" ).ignore();
-    
+
     registerManHist( m_trk_jetassoc_d0_reso_dr, "InDetGlobal/Hits", detailsInterval,
 		     "Trk_jetassoc_d0_dr", "IP resolution  per ghost associated track vs #DeltaR of track and jet",
 		     20, 0, 0.4, "#Delta R", "Fraction" ).ignore();
@@ -410,26 +410,26 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 
     // Forward Pixel tracks
     if ( m_doForwardTracks )
-    {	
+    {
 	registerManHist( m_Trk_FORW_FA_eta_phi, "InDetGlobal/Track", detailsInterval,
 			 "Trk_FORW_FA_eta_phi", "Eta-phi for pixel tracklets in the forward region (positive eta)",
-			 5, m_c_etaTrackletsMin, m_c_etaTrackletsMax, 
-			 m_nBinsPhi, -M_PI, M_PI, 
+			 5, m_c_etaTrackletsMin, m_c_etaTrackletsMax,
+			 m_nBinsPhi, -M_PI, M_PI,
 			 "#eta", "#phi_{0}" ).ignore();
-	
+
 	registerManHist( m_Trk_FORW_FC_eta_phi, "InDetGlobal/Track", detailsInterval,
 			 "Trk_FORW_FC_eta_phi", "Eta-phi for pixel tracklets in the forward region (negative eta)",
-			 5, -m_c_etaTrackletsMax, -m_c_etaTrackletsMin, 
-			 m_nBinsPhi, -M_PI, M_PI, 
+			 5, -m_c_etaTrackletsMax, -m_c_etaTrackletsMin,
+			 m_nBinsPhi, -M_PI, M_PI,
 			 "#eta", "#phi_{0}" ).ignore();
-	
+
 	registerManHist( m_Trk_FORW_chi2, "InDetGlobal/Track", detailsInterval,
 			 "Trk_FORW_chi2", "#chi^{2}/DoF of reconstructed forward tracklets",
 			 80, -0., 20.,
 			 "#chi^{2}/DoF").ignore();
-	
+
 	registerManHist( m_Trk_FORW_qoverp, "InDetGlobal/Track", detailsInterval,
-			 "Trk_FORW_qoverp", "Distribution of qoverp (forward Pixel tracklets)", 
+			 "Trk_FORW_qoverp", "Distribution of qoverp (forward Pixel tracklets)",
 			 400, -2.5, 2.5,
 			 "Inverse momentum [GeV^{-1}]" ).ignore();
 
@@ -437,7 +437,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 			 "Trk_FORW_nPIXhits_FA","Number of Pixel hits per track (Forward tracks FA)",
 			 5, 0.5, 5.5,
 			 "# of hits per track" ).ignore();
-	
+
 	registerManHist( m_Trk_FORW_FC_nPIXhits, "InDetGlobal/Hits", detailsInterval,
 			 "Trk_FORW_nPIXhits_FC","Number of Pixel hits per track (Forward tracks FC)",
 			 5, 0.5, 5.5,
@@ -454,7 +454,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 		     "Trk_nTight_LB","Average number of tight tracks per event in LB",
 		     m_c_range_LB,0,m_c_range_LB,
 		     "LB #", "Average number of tight tracks per event in LB").ignore();
-    
+
     if ( m_doIBL )
     {
 	registerManHist( m_Trk_noIBLhits_LB, "InDetGlobal/Track", detailsInterval,
@@ -466,7 +466,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 			 m_c_range_LB,0,m_c_range_LB,
 			 "LB #", "Fraction of tracks with missing IBL hit per event in LB").ignore();
     }
-    
+
     registerManHist( m_Trk_noBLhits_LB, "InDetGlobal/Track", detailsInterval,
 		     "Trk_noBLhits_LB","Average number of tracks with missing b-layer hit per event in LB",
 		     m_c_range_LB,0,m_c_range_LB,
@@ -492,66 +492,66 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 	registerManHist( m_sct_holes, "InDetGlobal/Hits", detailsInterval,
 			 "sct_holes", "Distribution of SCT Holes ",
 			 104,-3.5,100.5,
-			 "Number of SCT holes").ignore();	
-	
+			 "Number of SCT holes").ignore();
+
 	registerManHist( m_trt_holes, "InDetGlobal/Hits", detailsInterval,
 			 "trt_holes", "Distribution of TRT Holes ",
 			 104,-3.5,100.5,
 			 "Number of TRT holes").ignore();
-	
+
 	registerManHist( m_pixel_holes, "InDetGlobal/Hits", detailsInterval,
 			 "pixel_holes", "Distribution of Pixel Holes ",
 			 104,-3.5,100.5,
 			 "Number of Pixel holes").ignore();
-	
+
 	registerManHist( m_comb_holes, "InDetGlobal/Hits", detailsInterval,
 			 "comb_holes", "Distribution of Combined Holes ",
 			 104,-3.5,100.5,
 			 "Total number of holes").ignore();
-	
+
 	registerManHist( m_silicon_vs_trt, "InDetGlobal/Hits", detailsInterval,
 			 "silicon_vs_trt", "Silicon vs TRT holes ",
 			 104,-3.5,100.5,
 			 104,-3.5,100.5,
 			 "Silicon Combined holes", "TRT holes").ignore();
-	
+
 	registerManHist( m_sct_vs_pixels, "InDetGlobal/Hits", detailsInterval,
 			 "sct_vs_pixels", "SCT vs Pixels holes ",
 			 104,-3.5,100.5,
 			 104,-3.5,100.5,
 			 "SCT", "Pixels").ignore();
-	
+
 	registerManHist( m_holes_quality, "InDetGlobal/Hits", detailsInterval,
 			 "holes_quality", "Number of holes/track vs #chi^{2}/ndf",
 			 160,-0.5,15.5,
 			 104,-3.5,100.5,
-			 "#chi^{2}/ndf", "Combined Holes").ignore();	
-	
+			 "#chi^{2}/ndf", "Combined Holes").ignore();
+
 	registerManHist( m_holes_eta_phi, "InDetGlobal/Hits", detailsInterval,
 			 "holes_eta_phi", "Holes Map #eta #phi",
 			 m_nBinsEta,-m_c_etaRange,m_c_etaRange,
 			 m_nBinsPhi,-M_PI,M_PI,
 			 "#eta", "#phi").ignore();
-	
-	
+
+
 	registerManHist( m_holes_eta_pt,  "InDetGlobal/Hits", detailsInterval,
 			 "holes_eta_pt", "Holes #eta vs p_{t}",
 			 m_nBinsEta,-m_c_etaRange,m_c_etaRange,
 			 30,-0.,30.,
 			 "#eta", "#p_{t}").ignore();
-	
+
 	registerManHist( m_holes_phi_pt,  "InDetGlobal/Hits", detailsInterval,
 			 "holes_phi_pt", "Holes #phi vs p_{t}",
 			 m_nBinsPhi,-M_PI,M_PI,
 			 30,-0.,30.,
 			 "#phi", "#p_{t}").ignore();
-	
+
 	registerManHist( m_holes_eta_phi_n,  "InDetGlobal/Hits", detailsInterval,
 			 "holes_eta_phi_n", "Holes Map (Norm) #eta #phi",
 			 m_nBinsEta,-m_c_etaRange,m_c_etaRange,
 			 m_nBinsPhi,-M_PI,M_PI,
 			 "#eta", "#phi").ignore();
-	
+
 	registerManHist( m_holes_quality_profile,  "InDetGlobal/Hits", detailsInterval,
 			 "holes_quality_profile", "#chi^{2}/ndf vs Number of holes/track profile",
 			 104,-3.5,100.5,
@@ -559,8 +559,8 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 	m_holes_quality_profile->SetErrorOption("S");
 	m_holes_quality_profile->SetMaximum( 1000 );
 	m_holes_quality_profile->SetMinimum( 0 );
-    
-	
+
+
 	registerManHist( m_holes_hits,  "InDetGlobal/Hits", detailsInterval,
 			 "holes_hits", "Number of holes vs number of hits per track Combined",
 			 101,-0.5,100.5,
@@ -568,43 +568,43 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms()
 	m_holes_hits->SetErrorOption("S");
 	m_holes_hits->SetMaximum( 1000 );
 	m_holes_hits->SetMinimum( -10 );
-	
+
 	registerManHist( m_holesvshits,  "InDetGlobal/Hits", detailsInterval,
 			 "holesvshits","Number of Holes/track vs Number of Hits/track if holes >0 ",
 			 101,-0.5,100.5,
 			 101,-0.5,100.5,
 			 "nb. of hits/track", "nb holes/track").ignore();
-	
+
 	registerManHist( m_holesvshits_ECA,  "InDetGlobal/Hits", detailsInterval,
 			 "holesvshits_ECA", "Number of Holes/track vs Number of Hits/track if holes >0 EndCap A",
 			 101,-0.5,100.5,
-			 101,-0.5,100.5, 
-			 "nb. of hits/track", "nb holes/track").ignore();	
-	
+			 101,-0.5,100.5,
+			 "nb. of hits/track", "nb holes/track").ignore();
+
 	registerManHist( m_holesvshits_ECC,  "InDetGlobal/Hits", detailsInterval,
 			 "holesvshits_ECC", "Number of Holes/track vs Number of Hits/track if holes >0 EndCap C",
 			 101,-0.5,100.5,
 			 101,-0.5,100.5,
 			 "nb. of hits/track", "nb holes/track").ignore();
-	
+
 	registerManHist( m_holesvshits_BA,  "InDetGlobal/Hits", detailsInterval,
 			 "holesvshits_BA", "Number of Holes/track vs Number of Hits/track if holes >0 BARREL",
 			 101,-0.5,100.5,
 			 101,-0.5,100.5,
 			 "nb. of hits/track", "nb holes/track").ignore();
-	
+
 	registerManHist( m_HolesMAP_XY,  "InDetGlobal/Hits", detailsInterval,
 			 "HolesMAP_XY", "Map of ID holes x vs y (mm)",
 			 400,-1100,1100,
 			 400,-1100,1100,
 			 "X [mm]", "Y [mm]").ignore();
-	
+
 	registerManHist( m_HolesMAP_ZR,  "InDetGlobal/Hits", detailsInterval,
 			 "HolesMAP_ZR", "Map of ID holes  z vs r (mm)",
 			 3000,-3100,3100,
 			 1100,0,1100,
-			 "Z [mm]", "R [mm]").ignore(); 
-	
+			 "Z [mm]", "R [mm]").ignore();
+
 	registerManHist( m_HolesMAP_ZX,  "InDetGlobal/Hits", detailsInterval,
 			 "HolesMAP_ZX", "Map of ID holes  z vs x (mm)",
 			 1000,-3100,3100,
@@ -622,8 +622,8 @@ StatusCode InDetGlobalTrackMonTool::bookHistogramsRecurrent()
 }
 
 /*---------------------------------------------------------*/
-StatusCode InDetGlobalTrackMonTool::fillHistograms() 
-{   
+StatusCode InDetGlobalTrackMonTool::fillHistograms()
+{
     SG::ReadHandle<TrackCollection> combined_tracks(m_CombinedTracksName);
     if ( !combined_tracks.isValid() )
     {
@@ -636,7 +636,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
     int nNoIBL = 0;
     int nNoBL = 0;
     int nNoTRText = 0;
-    
+
     TrackCollection::const_iterator itrack = combined_tracks->begin();
     TrackCollection::const_iterator itrack_end = combined_tracks->end();
     for ( ; itrack!= itrack_end; ++itrack)
@@ -647,30 +647,30 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
 	    ATH_MSG_DEBUG( "NULL track pointer in collection" );
 	    continue;
 	}
-	
+
 	// Skip tracks that are not inside out
         if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined )
-             && ! ( track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) ||  
+             && ! ( track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) ||
 		    track->info().patternRecoInfo( Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon ) ) )
 	    continue;
-	
+
 	if ( ! m_baseline_selTool->accept(*track) )
 	    continue;
-	
+
 	// Create a new summary or get copy of the cached one
 	std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->summary( * track ) );
-	
+
 	if ( !summary )
 	{
 	    ATH_MSG_DEBUG( "NULL pointer to track summary" );
 	    continue;
 	}
-	
+
 	nBase++;
-	
+
 	FillHits( track, summary );
 	FillEtaPhi( track , summary );
-	
+
 	if ( m_doIBL )
 	{
 	    if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) )
@@ -683,7 +683,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
 		m_Trk_noIBLhits_frac_LB->Fill( m_manager->lumiBlockNumber(), 0 );
 	    }
 	}
-	
+
 	if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) )
 	{
 	    nNoBL++;
@@ -702,36 +702,36 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
 	{
 	    m_Trk_noTRText_frac_LB->Fill(m_manager->lumiBlockNumber(), 0);
 	}
-	
+
 	if ( m_tight_selTool->accept(*track) )
 	{
 	    nTight++;
-	} 
-	
-	if ( m_doHitMaps ) 
+	}
+
+	if ( m_doHitMaps )
 	{
 	    FillHitMaps( track );
 	}
-	
-	if ( m_doHolePlots )  
+
+	if ( m_doHolePlots )
 	{
 		FillHoles( track, summary );
 	}
-	
+
 	m_Trk_Base->Fill( nBase );
 
 	m_Trk_nBase_LB->Fill( m_manager->lumiBlockNumber(), nBase );
 	m_Trk_nTight_LB->Fill( m_manager->lumiBlockNumber(), nTight );
 	if ( m_doIBL )
 	    m_Trk_noIBLhits_LB->Fill( m_manager->lumiBlockNumber(), nNoIBL );
-	    
+
 	m_Trk_noBLhits_LB->Fill( m_manager->lumiBlockNumber(), nNoBL );
 	m_Trk_noTRText_LB->Fill( m_manager->lumiBlockNumber(), nNoTRText );
     }
-    
+
     if ( m_doTide )
 	FillTIDE();
-	
+
     if ( m_doForwardTracks )
     {
 	SG::ReadHandle<TrackCollection> forward_tracks(m_ForwardTracksName);
@@ -742,7 +742,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
 		ATH_MSG_DEBUG( "No combined tracks in StoreGate " + m_ForwardTracksName.key() );
 		return StatusCode::SUCCESS;
 	    }
-	    
+
 	    TrackCollection::const_iterator iftrack = forward_tracks->begin();
 	    TrackCollection::const_iterator iftrack_end = forward_tracks->end();
 	    for ( ; iftrack!= iftrack_end; ++iftrack)
@@ -753,20 +753,20 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms()
 		    ATH_MSG_DEBUG( "NULL track pointer in collection" );
 		    continue;
 		}
-		
+
 		// Create a new summary or get copy of the cached one
 		std::unique_ptr<const Trk::TrackSummary> summary( m_trkSummaryTool->summary( * track ) );
-		
+
 		if ( !summary )
 		{
 		    ATH_MSG_DEBUG( "NULL pointer to track summary" );
 		    continue;
 		}
-		
+
 		FillForwardTracks( track , summary );
 	    }
 	}
-    }	
+    }
 
     return StatusCode::SUCCESS;
 }
@@ -784,7 +784,7 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq
   int sctHits = (summary->get(Trk::numberOfSCTHits) >= 0 ? summary->get(Trk::numberOfSCTHits) : 0)
     + (summary->get(Trk::numberOfSCTDeadSensors) >= 0 ? summary->get(Trk::numberOfSCTDeadSensors) : 0 );
     int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws);
-    
+
     const Trk::Perigee *perigee = track->perigeeParameters();
     if ( !perigee )
 	return;
@@ -794,9 +794,9 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq
 	m_trk_hits_eta_phi[0]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], summary->get( Trk::numberOfInnermostPixelLayerHits ) );
 	m_trk_hits_LB[0]->Fill( m_manager->lumiBlockNumber(), summary->get( Trk::numberOfInnermostPixelLayerHits ) );
     }
-    
+
     m_trk_hits_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], pixHits );
-    m_trk_disabled_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], 
+    m_trk_disabled_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				     ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors) : 0 );
     m_trk_hits_LB[1]->Fill( m_manager->lumiBlockNumber(), pixHits );
     m_trk_shared_pix_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
@@ -805,28 +805,28 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq
 				   ( summary->get(Trk::numberOfPixelHoles) >= 0 ) ? summary->get(Trk::numberOfPixelHoles) : 0 );
     m_trk_split_pix_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				   ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 );
-    
+
     m_trk_hits_eta_phi[2]->Fill(  perigee->eta(), perigee->parameters()[Trk::phi0],sctHits );
-    m_trk_disabled_eta_phi[2]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], 
+    m_trk_disabled_eta_phi[2]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				     ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ) ;
     m_trk_hits_LB[2]->Fill( m_manager->lumiBlockNumber(), sctHits );
     m_trk_shared_sct_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				    ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 );
-    
+
     m_trk_holes_sct_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				   ( summary->get(Trk::numberOfSCTHoles) >= 0 ) ? summary->get(Trk::numberOfSCTHoles) : 0 );
-    
+
     m_trk_hits_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],trtHits );
-    m_trk_disabled_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], 
+    m_trk_disabled_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],
 				     ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 );
     m_trk_hits_LB[3]->Fill( m_manager->lumiBlockNumber(), trtHits );
-} 
+}
 
 
 void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary )
 {
     if ( ! track || ! summary ) return;
-	
+
     const Trk::Perigee *perigee = track->perigeeParameters();
     float eta = perigee->eta();
     float phi = perigee->parameters()[Trk::phi0];
@@ -845,7 +845,7 @@ void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::un
 	    {
 		m_Trk_eta_phi_noIBLhit_ratio->Fill( eta, phi, 0 );
 	    }
-	    
+
 	    /// Next-to-innermost
 	    if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) )
 	    {
@@ -867,14 +867,14 @@ void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::un
 		m_Trk_eta_phi_noBLhit_ratio->Fill( eta, phi, 0 );
 	    }
 	}
-	
+
 	// No TRT extension
 	if ( summary->get(Trk::numberOfTRTHits) == 0 )
 	    m_Trk_eta_phi_noTRText_ratio->Fill( eta, phi, 1 );
 	else
 	    m_Trk_eta_phi_noTRText_ratio->Fill( eta, phi, 0 );
     }
- 
+
     m_Trk_eta_phi_Tight->Fill( eta, phi);
 
     /// TRACKSEL: Tight
@@ -897,12 +897,12 @@ void InDetGlobalTrackMonTool::FillForwardTracks( const Trk::Track *track, const
     {
 	float eta = perigee->eta();
 	float phi = perigee->parameters()[Trk::phi0];
-	
+
 	if ( eta > 0. )
 	{
 	    m_Trk_FORW_FA_eta_phi->Fill( eta, phi );
 	    m_Trk_FORW_FA_nPIXhits->Fill ( summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors) );
-	}    
+	}
 	else
 	{
 	    m_Trk_FORW_FC_eta_phi->Fill( eta, phi );
@@ -911,11 +911,11 @@ void InDetGlobalTrackMonTool::FillForwardTracks( const Trk::Track *track, const
 
 	m_Trk_FORW_qoverp->Fill( perigee->parameters()[Trk::qOverP] *1000.0 );
     }
-    
+
     if ( track->fitQuality() && track->fitQuality()->numberDoF() > 0 )
 	m_Trk_FORW_chi2->Fill(track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF());
-    
-    return;    
+
+    return;
 }
 
 void InDetGlobalTrackMonTool::FillTIDE()
@@ -927,18 +927,18 @@ void InDetGlobalTrackMonTool::FillTIDE()
 	{
 	    if ( (*jetItr)->pt() < 20000. )
 		continue;
-	    
+
 	    std::vector<const xAOD::IParticle*> trackVector;
 	    if ( !(*jetItr)->getAssociatedObjects<xAOD::IParticle>(xAOD::JetAttribute::GhostTrack, trackVector) )
 		continue;
-	    
+
 	    for ( std::vector<const xAOD::IParticle*>::const_iterator trkItr = trackVector.begin(); trkItr != trackVector.end() ; trkItr++ )
 	    {
 		const xAOD::TrackParticle* trackPart = dynamic_cast<const xAOD::TrackParticle*>(*trkItr);
 
 		if ( !trackPart )
 		    continue;
-		
+
 		uint8_t split;
 		uint8_t shared;
 		uint8_t pix;
@@ -964,8 +964,8 @@ void InDetGlobalTrackMonTool::FillTIDE()
 		    }
 		    if ( foundVertex )
 		    {
-			std::unique_ptr<const Trk::ImpactParametersAndSigma>myIPandSigma( 
-						   m_trackToVertexIPEstimator->estimate(trackPart, 
+			std::unique_ptr<const Trk::ImpactParametersAndSigma>myIPandSigma(
+						   m_trackToVertexIPEstimator->estimate(trackPart,
 											foundVertex ));
 			if ( myIPandSigma )
 			{
@@ -980,47 +980,49 @@ void InDetGlobalTrackMonTool::FillTIDE()
 			m_trk_jetassoc_split_pix_dr->Fill( trackPart->p4().DeltaR( (*jetItr)->p4() ), frac );
 			m_trk_jetassoc_split_pix_lb->Fill( m_manager->lumiBlockNumber(), frac );
 		    }
-		    
+
 		    if ( trackPart->summaryValue( shared, xAOD::numberOfPixelSharedHits) )
 		    {
 			float frac = (float)shared / pix;
 			m_trk_jetassoc_shared_pix_dr->Fill( trackPart->p4().DeltaR( (*jetItr)->p4() ), frac );
 			m_trk_jetassoc_shared_pix_lb->Fill( m_manager->lumiBlockNumber(), frac );
 		    }
-		    
+
 		    if ( m_doTideResiduals )
 		    {
 			auto track = trackPart->track();
 			if ( ! track )
 			    continue;
-			
+
 			const DataVector<const Trk::TrackStateOnSurface>* trackStates = track->trackStateOnSurfaces();
 			if ( trackStates == 0 ) return;
-			
+
 			DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin();
 			DataVector<const Trk::TrackStateOnSurface>::const_iterator it_end = trackStates->end();
 			for (;it!=it_end; ++it) {
 			    const Trk::TrackStateOnSurface* tsos=(*it);
-			    
+
 			    if (tsos == 0) continue;
-			    
+
 			    //SILICON (SCT + Pixel)
 			    const InDet::SiClusterOnTrack *clus = dynamic_cast<const InDet::SiClusterOnTrack*>( tsos->measurementOnTrack() );
 			    if ( !clus ) continue;
-			    
+
 			    const InDet::SiCluster *RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
 			    if (!RawDataClus) continue;
-			    
+
 			    if ( RawDataClus->detectorElement()->isPixel() ) {
 				const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>( tsos->measurementOnTrack() );
-				
+
 				if (hit && tsos->trackParameters()) {
 				    const Trk::TrackParameters* PropagatedTrackParams = tsos->trackParameters()->clone();
-				    const Trk::TrackParameters* UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams, tsos->measurementOnTrack()->localParameters(), tsos->measurementOnTrack()->localCovariance());
+				    const Trk::TrackParameters* UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams,
+                                                                                          tsos->measurementOnTrack()->localParameters(),
+                                                                                          tsos->measurementOnTrack()->localCovariance()).release();
 				    delete PropagatedTrackParams;
 				    if ( !UnbiasedTrackParams )
 					if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "RemoveFromState did not work, using original TrackParameters" << endmsg;
-				    
+
 				    const Trk::ResidualPull * residualPull = m_residualPullCalculator->residualPull(tsos->measurementOnTrack(), ( UnbiasedTrackParams ) ? UnbiasedTrackParams:tsos->trackParameters(), Trk::ResidualPull::Unbiased);
 				    if (residualPull) {
 					{
@@ -1071,7 +1073,7 @@ void InDetGlobalTrackMonTool::FillTIDE()
 	ATH_MSG_WARNING( "Unable to get jets, turning TIDE plots off!" );
 	m_doTide = false;
     }
-    
+
     return;
 }
 
@@ -1079,14 +1081,14 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track )
 {
     const DataVector<const Trk::TrackStateOnSurface>* trackStates = track->trackStateOnSurfaces();
     if ( trackStates == 0 ) return;
-    
+
     DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin();
     DataVector<const Trk::TrackStateOnSurface>::const_iterator it_end = trackStates->end();
     for (;it!=it_end; ++it) {
 	const Trk::TrackStateOnSurface* trackState=(*it);
-	
+
 	if (trackState == 0) continue;
-	
+
 	//TRT
 	const InDet::TRT_DriftCircleOnTrack *trtcircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(trackState->measurementOnTrack());
 	if ( trtcircle )
@@ -1106,11 +1108,11 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track )
 		break;
 	    }
 	}
-	
+
 	//SILICON (SCT + Pixel)
 	const InDet::SiClusterOnTrack *clus = dynamic_cast<const InDet::SiClusterOnTrack*>( trackState->measurementOnTrack() );
 	if ( !clus ) continue;
-	
+
 	const InDet::SiCluster *RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
 	if (!RawDataClus) continue;
 
@@ -1126,7 +1128,7 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track )
 		m_ID_hitmap_x_y_eca->Fill( clus->globalPosition()[0], clus->globalPosition()[1] );
 		break;
 	    }
-	    
+
 	}else{
 	    switch ( m_pixelID->barrel_ec( RawDataClus->identify() ) ) {
 	    case -2:
@@ -1150,13 +1152,13 @@ void InDetGlobalTrackMonTool::FillHoles( const Trk::Track * track, const std::un
     int pixelh = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0;
     int scth   = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0;
     int trth   = summary->get(Trk::numberOfTRTHoles) >= 0 ? summary->get(Trk::numberOfTRTHoles) : 0;
-    
-    // Gaetano Added : 
+
+    // Gaetano Added :
     m_pixel_holes->Fill(summary->get(Trk::numberOfPixelHoles));
     m_sct_holes->Fill(summary->get(Trk::numberOfSCTHoles));
     m_trt_holes->Fill(summary->get(Trk::numberOfTRTHoles));
-    
-    // Filling Combined Holes and Excluding # holes = -1 case Tracks on surface does not exist		
+
+    // Filling Combined Holes and Excluding # holes = -1 case Tracks on surface does not exist
     if (summary->get(Trk::numberOfPixelHoles)>=0)
 	m_comb_holes->Fill(pixelh);
 
@@ -1167,58 +1169,58 @@ void InDetGlobalTrackMonTool::FillHoles( const Trk::Track * track, const std::un
 	m_comb_holes->Fill(trth);
 
     m_silicon_vs_trt->Fill(pixelh+scth,trth);
-    m_sct_vs_pixels->Fill(scth,pixelh);	
-	    
+    m_sct_vs_pixels->Fill(scth,pixelh);
+
     if ( track->fitQuality() && track->fitQuality()->numberDoF() > 0 ){
 	m_holes_quality->Fill(track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF(),pixelh+scth+trth);
 	m_holes_quality_profile->Fill(scth+trth+pixelh,track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF());
     }
-    
-    // Filling Number of holes vs number of hits for tracks with at least a hole. 			
+
+    // Filling Number of holes vs number of hits for tracks with at least a hole.
     if (scth >0 || trth >0 || pixelh >0) {
 	m_holes_hits->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+trth+pixelh);
 	m_holesvshits->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+trth+pixelh);
     }
     // Here The Perigee Parameters of Holes
-    const Trk::Perigee *perigee = dynamic_cast<const Trk::Perigee *>(track->perigeeParameters());	
-    
+    const Trk::Perigee *perigee = dynamic_cast<const Trk::Perigee *>(track->perigeeParameters());
+
     m_holes_eta_phi_n->Fill( perigee->eta(),perigee->parameters()[Trk::phi],scth+pixelh/(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors)));
-    
+
     m_holes_eta_phi->Fill( perigee->eta(),perigee->parameters()[Trk::phi]);
     m_holes_eta_pt->Fill(perigee->eta(),perigee->pT()/1000.0,scth+pixelh);
     m_holes_phi_pt->Fill(perigee->parameters()[Trk::phi],perigee->pT()/1000.0,scth+pixelh);
-    
-    // Filling holes vs hits in eta bins	
+
+    // Filling holes vs hits in eta bins
     if (scth >0 || trth >0 || pixelh >0){
 	// Filling ECA
 	if  (perigee->eta()>=-2.5 && perigee->eta()<=-1.5) {
 	    m_holesvshits_ECA->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth);
 	}
-	
+
 	if  (perigee->eta()>=-1.5 && perigee->eta()<=1.5) {
 	    m_holesvshits_BA->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth);
 	}
-	
-	
+
+
 	if  (perigee->eta()>=1.5 && perigee->eta()<=2.5) {
 	    m_holesvshits_ECC->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth);
 	}
     }
-    
+
     if (m_DoHoles_Search)
 	FillHoleMaps(track);
-    
+
     return;
 }
 
 void InDetGlobalTrackMonTool::FillHoleMaps( const Trk::Track *track )
 {
     std::unique_ptr<const DataVector<const Trk::TrackStateOnSurface> > holesOnTrack( m_holes_search_tool->getHolesOnTrack(*track,track->info().particleHypothesis()) );
-    
+
     // loop over holes
     if (!holesOnTrack) {
 	msg(MSG::WARNING) << "Got no holes on track" << endmsg;
-    } else {	
+    } else {
 	for (DataVector<const Trk::TrackStateOnSurface>::const_iterator it=holesOnTrack->begin();
 	     it!=holesOnTrack->end();
 	     it++) {
@@ -1226,16 +1228,16 @@ void InDetGlobalTrackMonTool::FillHoleMaps( const Trk::Track *track )
 		msg(MSG::WARNING) << "TrackStateOnSurface from hole search tool == Null" << endmsg;
 		continue;
 	    }
-	    // Here The X Y Z of Holes	
+	    // Here The X Y Z of Holes
 	    const Trk::TrackParameters *clus =(*it)->trackParameters() ;
-	    if (clus){						
+	    if (clus){
 		m_HolesMAP_XY->Fill(clus->position()[0],clus->position()[1]);
 		m_HolesMAP_ZX->Fill( clus->position()[2], clus->position()[0]);
-		m_HolesMAP_ZR->Fill(clus->position()[2], sqrt( pow( clus->position()[0], 2) + pow( clus->position()[1], 2) ));	
-		
-	    }	
-	}	
+		m_HolesMAP_ZR->Fill(clus->position()[2], sqrt( pow( clus->position()[0], 2) + pow( clus->position()[1], 2) ));
+
+	    }
+	}
     }
-    
+
     return;
 }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonAlg.cxx
index 9997ee98a6b0e0cda8174e23cbea0cf603ba57ae..4e8414a3ee35d2e7e2a09115b506b11b3e9a42bb 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonAlg.cxx
@@ -47,7 +47,7 @@ namespace {
 }
 
 SCTTracksMonAlg::SCTTracksMonAlg(const std::string& name, ISvcLocator* pSvcLocator) :AthMonitorAlgorithm(name, pSvcLocator) {
- 
+
 }
 
 StatusCode SCTTracksMonAlg::initialize(){
@@ -66,8 +66,8 @@ StatusCode SCTTracksMonAlg::initialize(){
 }
 
 StatusCode SCTTracksMonAlg::fillHistograms(const EventContext& ctx) const{
-	
-ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()"); 
+
+ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
 
   const bool doThisSubsystem[N_REGIONS] = {
     m_doNegativeEndcap, true, m_doPositiveEndcap
@@ -77,14 +77,14 @@ ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
   if (m_doTrigger and (not checkTriggers(firedTriggers).isSuccess())) {
     ATH_MSG_WARNING("Triggers not found!");
   }
-  SG::ReadHandle<TrackCollection> tracks{m_tracksName,ctx}; 
+  SG::ReadHandle<TrackCollection> tracks{m_tracksName,ctx};
   if (not tracks.isValid()) {
     ATH_MSG_WARNING("No collection named " << m_tracksName.key() << " in StoreGate");
     return StatusCode::SUCCESS;
   }
 
 
-  ATH_MSG_DEBUG("Begin loop over " << tracks->size() << " tracks"); 
+  ATH_MSG_DEBUG("Begin loop over " << tracks->size() << " tracks");
   int goodTrks_N{0};
   int local_tot_trkhits{0};
   for (const Trk::Track* track: *tracks) {
@@ -103,10 +103,10 @@ ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
     if (trkSum) {
       scthits_on_trk = trkSum->get(Trk::numberOfSCTHits);
     } else {
-      ATH_MSG_WARNING("TrackSummary not found not using track!"); 
+      ATH_MSG_WARNING("TrackSummary not found not using track!");
     }
     if (scthits_on_trk < m_trackHitCut) {
-      ATH_MSG_DEBUG("track fails minimum SCT hit requirement"); 
+      ATH_MSG_DEBUG("track fails minimum SCT hit requirement");
       break;
     }
     goodTrks_N++;
@@ -119,12 +119,12 @@ ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
     }
     double trackPerigeeTheta{track->perigeeParameters()->parameters()[Trk::theta]};
     double trackPerigeeEta{-log(tan(0.5 * trackPerigeeTheta))};
-    auto tracksPerRegionAcc{Monitored::Scalar<float>("tracksPerRegion", etaRegion(trackPerigeeEta))}; 
+    auto tracksPerRegionAcc{Monitored::Scalar<float>("tracksPerRegion", etaRegion(trackPerigeeEta))};
 
     fill("SCTTracksMonitor", tracksPerRegionAcc);
 
     auto trk_etaAcc{Monitored::Scalar<float>("trk_eta", trackPerigeeEta)};
-    fill("SCTTracksMonitor", trk_etaAcc); 
+    fill("SCTTracksMonitor", trk_etaAcc);
 
     if (track->perigeeParameters()->parameters()[Trk::qOverP] != 0.) {
         auto trk_ptAcc{Monitored::Scalar<float>("trk_pt", std::abs(1. / (track->perigeeParameters()->parameters()[Trk::qOverP] * 1000.)))};
@@ -137,7 +137,7 @@ ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
     auto trk_phiAcc{Monitored::Scalar<float>("trk_phi", track->perigeeParameters()->parameters()[Trk::phi])};
     fill("SCTTracksMonitor", trk_phiAcc);
 
-    if (m_doTrigger) { 
+    if (m_doTrigger) {
       for (int trig{0}; trig < N_TRIGGER_TYPES; ++trig) {
         if (hasTriggerFired(trig, firedTriggers)) {
             auto trackTriggerAcc{Monitored::Scalar<int>("trackTriggers", trig)};
@@ -177,7 +177,11 @@ ATH_MSG_DEBUG("SCTTracksMonAlg::fillHistograms()");
 #endif
               if (m_doUnbiasedCalc) {
                 if (trkParam) {
-                  trkParameters.reset(m_updator->removeFromState(*trkParam, rio->localParameters(), rio->localCovariance())); //need to take ownership of the returned pointer
+                  trkParameters =m_updator->removeFromState(*trkParam,
+                                                      rio->localParameters(),
+                                                      rio->localCovariance());
+                  // need to take ownership of the returned
+                                // pointer
                   if (trkParameters) {
                     trkParam = trkParameters.get();
                   }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
index 2f70b02c9b3cc745d695463635746bf5844516c3..1f3e3de634ed58788e479103860e8a25b62d09b8 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTTracksMonTool.cxx
@@ -1,7 +1,5 @@
-// -*- C++ -*-
-
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**    @file SCTTracksMonTool.cxx
@@ -119,7 +117,7 @@ SCTTracksMonTool::bookHistograms() {
   }
   // Booking  Track related Histograms
   ATH_CHECK(bookGeneralHistos());
-  
+
 
   return StatusCode::SUCCESS;
 }
@@ -196,7 +194,7 @@ SCTTracksMonTool::fillHistograms() {
       for (int trig{0}; trig < N_TRIGGER_TYPES; ++trig) {
         if (hasTriggerFired(trig, firedTriggers)) {
           m_trackTrigger->Fill(trig);
-        } 
+        }
       }
     }
     bool hasHits[N_REGIONS] = {
@@ -231,7 +229,9 @@ SCTTracksMonTool::fillHistograms() {
 #endif
               if (m_doUnbiasedCalc) {
                 if (trkParam) {
-                  trkParameters.reset(m_updator->removeFromState(*trkParam, rio->localParameters(), rio->localCovariance())); //need to take ownership of the returned pointer
+                  trkParameters = m_updator->removeFromState(
+                    *trkParam, rio->localParameters(), rio->localCovariance());
+                  // need to take ownership of the returned pointer
                   if (trkParameters) {
                     trkParam = trkParameters.get();
                   }
@@ -340,7 +340,7 @@ SCTTracksMonTool::procHistograms() {
 
 StatusCode
 SCTTracksMonTool::checkHists(bool /*fromFinalize*/) {
-  
+
   return StatusCode::SUCCESS;
 }
 
@@ -381,7 +381,7 @@ SCTTracksMonTool::bookGeneralHistos() {
                                        ("Overall Residual Distribution for the "+regionNames[iReg]).c_str(),
                                        100, -0.5, 0.5);
       m_totalResidual[iReg]->GetXaxis()->SetTitle("Residual [mm]");
-      ATH_CHECK(Tracks.regHist(m_totalResidual[iReg])); 
+      ATH_CHECK(Tracks.regHist(m_totalResidual[iReg]));
 
       m_totalPull[iReg] = new TH1F(("total"+regionNames[iReg]+"Pull").c_str(),
                                    ("Overall Pull Distribution for the "+regionNames[iReg]).c_str(),
diff --git a/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/src/SiCombinatorialTrackFinder_xk.cxx b/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/src/SiCombinatorialTrackFinder_xk.cxx
index ac146b88f79b5b0db7dd48419864bb39b382bf46..83014b3ba93c49fc0135f0920ae90a1ee1c130f0 100644
--- a/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/src/SiCombinatorialTrackFinder_xk.cxx
+++ b/InnerDetector/InDetRecTools/SiCombinatorialTrackFinderTool_xk/src/SiCombinatorialTrackFinder_xk.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -20,7 +20,6 @@
 #include "TrkGeometry/MagneticFieldProperties.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
 #include "TrkToolInterfaces/IPatternParametersUpdator.h"
-#include "TrkToolInterfaces/IUpdator.h"
 #include "TrkTrack/TrackInfo.h"
 
 #include <iomanip>
@@ -43,7 +42,7 @@ InDet::SiCombinatorialTrackFinder_xk::SiCombinatorialTrackFinder_xk
 ///////////////////////////////////////////////////////////////////
 
 StatusCode InDet::SiCombinatorialTrackFinder_xk::initialize()
-{  
+{
   // Get RungeKutta propagator tool
   //
   if ( m_proptool.retrieve().isFailure() ) {
@@ -71,7 +70,7 @@ StatusCode InDet::SiCombinatorialTrackFinder_xk::initialize()
     ATH_MSG_INFO("Retrieved tool " << m_riocreator);
   }
 
-  if (m_usePIX) {  
+  if (m_usePIX) {
     if ( m_pixelCondSummaryTool.retrieve().isFailure() ) {
       ATH_MSG_FATAL("Failed to retrieve tool " << m_pixelCondSummaryTool);
       return StatusCode::FAILURE;
@@ -93,8 +92,8 @@ StatusCode InDet::SiCombinatorialTrackFinder_xk::initialize()
     }
   } else {
     m_sctCondSummaryTool.disable();
-  }  
-  
+  }
+
   // Get InDetBoundaryCheckTool
   if ( m_boundaryCheckTool.retrieve().isFailure() ) {
       ATH_MSG_FATAL("Failed to retrieve tool " << m_boundaryCheckTool);
@@ -103,9 +102,9 @@ StatusCode InDet::SiCombinatorialTrackFinder_xk::initialize()
   else {
     ATH_MSG_INFO("Retrieved tool " << m_boundaryCheckTool);
   }
-  
 
-  
+
+
   // Setup callback for magnetic field
   //
   magneticFieldInit();
@@ -124,7 +123,7 @@ StatusCode InDet::SiCombinatorialTrackFinder_xk::initialize()
   // initialize conditions object key for field cache
   //
   ATH_CHECK( m_fieldCondObjInputKey.initialize() );
-  
+
   return StatusCode::SUCCESS;
 }
 
@@ -165,8 +164,8 @@ MsgStream& InDet::SiCombinatorialTrackFinder_xk::dumpconditions(MsgStream& out)
 			     "ToroidalField" , "Grid3DField"  , "RealisticField" ,
 			     "UndefinedField", "AthenaField"  , "?????"         };
 
-  int mode = m_fieldprop.magneticFieldMode(); 
-  if (mode<0 || mode>8 ) mode = 8; 
+  int mode = m_fieldprop.magneticFieldMode();
+  if (mode<0 || mode>8 ) mode = 8;
 
   n     = 62-fieldmode[mode].size();
   std::string s3;
@@ -248,7 +247,7 @@ MsgStream& InDet::SiCombinatorialTrackFinder_xk::dumpevent(SiCombinatorialTrackF
      <<"                              |"<<std::endl;
   out<<"| Number wrong DE  roads  | "<<std::setw(12)<<data.roadbug()
      <<"                              |"<<std::endl;
-  out<<"| Number output   tracks  | "<<std::setw(12)<<data.findtracks()  
+  out<<"| Number output   tracks  | "<<std::setw(12)<<data.findtracks()
      <<"                              |"<<std::endl;
   out<<"|---------------------------------------------------------------------|"
      <<std::endl;
@@ -256,7 +255,7 @@ MsgStream& InDet::SiCombinatorialTrackFinder_xk::dumpevent(SiCombinatorialTrackF
 }
 
 ///////////////////////////////////////////////////////////////////
-// Initiate track finding tool 
+// Initiate track finding tool
 ///////////////////////////////////////////////////////////////////
 
 void InDet::SiCombinatorialTrackFinder_xk::newEvent(const EventContext& ctx, SiCombinatorialTrackFinderData_xk& data) const
@@ -270,14 +269,14 @@ void InDet::SiCombinatorialTrackFinder_xk::newEvent(const EventContext& ctx, SiC
   data.inittracks() = 0;
   data.findtracks() = 0;
   data.roadbug()    = 0;
- 
+
   // Set track info
   //
   data.trackinfo().setPatternRecognitionInfo(Trk::TrackInfo::SiSPSeededFinder);
   data.cosmicTrack() = 0;
 
   // Add conditions object to SiCombinatorialTrackFinderData to be able to access the field cache for each new event
-  // Get conditions object for field cache 
+  // Get conditions object for field cache
   SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
   const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
   if (fieldCondObj == nullptr) {
@@ -294,7 +293,7 @@ void InDet::SiCombinatorialTrackFinder_xk::newEvent(const EventContext& ctx, SiC
 void InDet::SiCombinatorialTrackFinder_xk::newEvent
 (const EventContext& ctx, SiCombinatorialTrackFinderData_xk& data, Trk::TrackInfo info, const TrackQualityCuts& Cuts) const
 {
-  
+
   if (not data.isInitialized()) {
     //Check if to use PRDAssociation before initializing all the tools
     int useasso;
@@ -306,7 +305,7 @@ void InDet::SiCombinatorialTrackFinder_xk::newEvent
 
   newEvent(ctx, data);
   data.trackinfo() = info;
-  
+
   /// Get track quality cuts information from argument and write it into
   /// the event data
   getTrackQualityCuts(data, Cuts);
@@ -330,7 +329,7 @@ void InDet::SiCombinatorialTrackFinder_xk::endEvent(SiCombinatorialTrackFinderDa
 {
   if (not data.isInitialized()) initializeCombinatorialData(Gaudi::Hive::currentContext(), data);
 
-  // Print event information 
+  // Print event information
   //
   if (m_outputlevel<=0) {
     data.nprint() = 1;
@@ -356,7 +355,7 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracks
 
   data.statistic().fill(false);
 
-  /// turn off brem fit & electron flags 
+  /// turn off brem fit & electron flags
   data.tools().setBremNoise(false, false);
   /// remove existing tracks
   data.tracks().erase(data.tracks().begin(), data.tracks().end());
@@ -372,7 +371,7 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracks
 
   ///try to find the tracks
   EStat_t FT = findTrack(data, Tp, Sp, Gp, DE, PT, ctx);
- 
+
   /// if we didn't find anything, bail out
   if(FT!=Success) {
     data.statistic()[FT] = true;
@@ -385,14 +384,14 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracks
 
   Trk::Track* t = convertToTrack(data);
   ++data.findtracks();
-  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
   data.tracks().push_back(t);
 
   if (!data.tools().multiTrack() || data.simpleTrack() || Sp.size()<=2 || data.cosmicTrack() || data.trajectory().pTfirst() < data.tools().pTmin()) return data.tracks();
 
   while ((t=convertToNextTrack(data))) {
     ++data.findtracks();
-    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
     data.tracks().push_back(t);
   }
   return data.tracks();
@@ -428,7 +427,7 @@ const std::list<Trk::Track*>& InDet::SiCombinatorialTrackFinder_xk::getTracks
     data.statistic()[FT] = true;
     return data.tracks();
   }
-  if (!data.trajectory().isNewTrack(PT)) 
+  if (!data.trajectory().isNewTrack(PT))
   {
      data.statistic()[NotNewTrk] = true;
      return data.tracks();
@@ -439,7 +438,7 @@ const std::list<Trk::Track*>& InDet::SiCombinatorialTrackFinder_xk::getTracks
   //
   Trk::Track* t = convertToTrack(data);
   if (t==nullptr) return data.tracks();
-  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
 
   ++data.findtracks();
   data.tracks().push_back(t);
@@ -447,15 +446,15 @@ const std::list<Trk::Track*>& InDet::SiCombinatorialTrackFinder_xk::getTracks
   if (!data.tools().multiTrack() || data.simpleTrack() || Sp.size()<=2 || data.cosmicTrack() || data.trajectory().pTfirst() < data.tools().pTmin()) return data.tracks();
 
   while ((t=convertToNextTrack(data))) {
-    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
     ++data.findtracks();
     data.tracks().push_back(t);
-  } 
+  }
   return data.tracks();
 }
 
 ///////////////////////////////////////////////////////////////////
-// Main method for track finding using space points and 
+// Main method for track finding using space points and
 // using electron noise model
 ///////////////////////////////////////////////////////////////////
 
@@ -489,7 +488,7 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracksWi
   }
 
   EStat_t FT = findTrack(data,Tp,Sp,Gp,DE,PT,ctx);
-  
+
   bool Q = (FT==Success);
   if (Q){
     Q = data.trajectory().isNewTrack(PT);
@@ -510,16 +509,16 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracksWi
     data.tools().setMultiTracks(mult,Xi2m);
 
     if (!t) return data.tracks();
-    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+    if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
     ++data.findtracks();
     data.tracks().push_back(t);
     na = data.trajectory().nclusters();
     if (na >=12 && !data.trajectory().nclustersNoAdd()) return data.tracks();
-   
+
     if (data.trajectory().pTfirst() < data.pTminBrem()) return data.tracks();
   }
   if ((*Sp.begin())->clusterList().second) return data.tracks();
- 
+
   // Repeat track finding using electron noise model
   //
   data.statistic()[BremAttempt] = true;
@@ -533,10 +532,10 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracksWi
   }
 
   if (!data.trajectory().isNewTrack(PT)) { data.statistic()[NotNewTrk] = true; return data.tracks(); }
-  
+
   int nb = data.trajectory().nclusters();
   if (nb <= na) return data.tracks();
-  
+
   data.trajectory().sortStep();
 
   // Trk::Track production
@@ -552,7 +551,7 @@ const std::list<Trk::Track*>&  InDet::SiCombinatorialTrackFinder_xk::getTracksWi
   data.tools().setMultiTracks(mult, Xi2m);
 
   if (t==nullptr) return data.tracks();
-  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult()); 
+  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
 
   ++data.findtracks();
   data.tracks().push_back(t);
@@ -571,7 +570,7 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
  std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT,
  const EventContext& ctx) const
 {
-  /// init event data 
+  /// init event data
   if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
 
   /// populate a list of boundary links for the detector elements on our search road
@@ -594,10 +593,10 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
 
   /// Cluster list preparationn
   std::list<const InDet::SiCluster*> Cl;
-  bool isTwoPointSeed = false; 
+  bool isTwoPointSeed = false;
 
-  /// in inside-out track finding, Sp.size() is typically 3 
-  /// for TRT-seeded backtracking, it is 2  
+  /// in inside-out track finding, Sp.size() is typically 3
+  /// for TRT-seeded backtracking, it is 2
   /// both applications go into this branch
   if (Sp.size() > 1) {
 
@@ -606,29 +605,29 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
       return TwoCluster;
     }
     if (Sp.size()==2) isTwoPointSeed = true;
-  } 
-  /// use case if we have a set of global positions rather than space points to start from 
+  }
+  /// use case if we have a set of global positions rather than space points to start from
   else if (Gp.size() > 2) {
     if (!data.trajectory().globalPositionsToClusters(p_pixcontainer, p_sctcontainer, Gp, DEL, PT, Cl)) return TwoCluster;
   } else {
-    /// use case if we have neither space-points nor global posittions, but track parameters to start from 
+    /// use case if we have neither space-points nor global posittions, but track parameters to start from
     if (!data.trajectory().trackParametersToClusters(p_pixcontainer, p_sctcontainer, Tp, DEL, PT, Cl)) return TwoCluster;
   }
   ++data.goodseeds();
 
   /// Build initial trajectory
   bool Qr;
-  /// This will initialize the trajectory using the clusters we have and the parameter estimate 
+  /// This will initialize the trajectory using the clusters we have and the parameter estimate
   bool Q = data.trajectory().initialize(m_usePIX, m_useSCT, p_pixcontainer, p_sctcontainer, Tp, Cl, DEL, Qr,ctx);
 
   /// if the initialisation fails (indicating this is probably a bad attempt) and we are running with
-  /// global positions instead of seeding  
+  /// global positions instead of seeding
   if (!Q && Sp.size() < 2 && Gp.size() > 3) {
-    /// reset our cluster list 
+    /// reset our cluster list
     Cl.clear();
     /// try again using the clusters from the track parameters only
     if (!data.trajectory().trackParametersToClusters(p_pixcontainer, p_sctcontainer, Tp, DEL, PT, Cl)) return TwoCluster;
-    
+
     if (!data.trajectory().initialize(m_usePIX, m_useSCT, p_pixcontainer, p_sctcontainer, Tp, Cl, DEL, Qr,ctx)) return TwoCluster;
     /// if it worked now, set the quality flag to true
 
@@ -637,9 +636,9 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
 
   /// this can never happen?!
   if (!Qr){
-    ++data.roadbug(); 
+    ++data.roadbug();
     return WrongRoad;
-  } 
+  }
   /// this can never happen either?!
   if (!Q) return WrongInit;
 
@@ -660,18 +659,18 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
     if (data.trajectory().difference() > 0) {
       if (!data.trajectory().forwardFilter()          ) return CantFindTrk;
       if (!data.trajectory().backwardSmoother (false) ) return CantFindTrk;
-    } 
+    }
     int na = data.trajectory().nclustersNoAdd();
     /// check if we found enough clusters
     if (data.trajectory().nclusters()+na < data.nclusmin() || data.trajectory().ndf() < data.nwclusmin()) return CantFindTrk;
-  } 
+  }
   /// case of a strip seed or mixed PPS
   else {      // Strategy for mixed seeds
     if (!data.trajectory().backwardSmoother(isTwoPointSeed)       ) return CantFindTrk;
     if (!data.trajectory().backwardExtension(itmax)    ) return CantFindTrk;
     if (!data.trajectory().forwardExtension(true,itmax)) return CantFindTrk;
 
-    /// first application of hit cut 
+    /// first application of hit cut
     int na = data.trajectory().nclustersNoAdd();
     if (data.trajectory().nclusters()+na < data.nclusmin() || data.trajectory().ndf() < data.nwclusmin()) return CantFindTrk;
     /// backward smooting
@@ -686,17 +685,17 @@ InDet::SiCombinatorialTrackFinder_xk::EStat_t InDet::SiCombinatorialTrackFinder_
       if (!data.trajectory().forwardFilter()         ) return CantFindTrk;
       if (!data.trajectory().backwardSmoother (false)) return CantFindTrk;
     }
-  } 
-  /// quality cut 
+  }
+  /// quality cut
   if (data.trajectory().qualityOptimization()     <           (m_qualityCut*data.nclusmin())    ) return CantFindTrk;
 
   if (data.trajectory().pTfirst  () < data.pTmin()     && data.trajectory().nclusters() < data.nclusmin() ) return CantFindTrk;
 
   if (data.trajectory().nclusters() < data.nclusminb() || data.trajectory().ndf      () < data.nwclusmin()) return CantFindTrk;
-  
-  /// refine the hole cut 
+
+  /// refine the hole cut
   if (m_writeHolesFromPattern){
-    data.trajectory().updateHoleSearchResult(); 
+    data.trajectory().updateHoleSearchResult();
     if (!data.trajectory().getHoleSearchResult().passPatternHoleCut) return CantFindTrk;
   }
 
@@ -742,7 +741,7 @@ Trk::Track* InDet::SiCombinatorialTrackFinder_xk::convertToNextTrack(SiCombinato
 
 void InDet::SiCombinatorialTrackFinder_xk::magneticFieldInit()
 {
-  // Build MagneticFieldProperties 
+  // Build MagneticFieldProperties
   //
   if      (m_fieldmode == "NoField"    ) m_fieldprop = Trk::MagneticFieldProperties(Trk::NoField  );
   else if (m_fieldmode == "MapSolenoid") m_fieldprop = Trk::MagneticFieldProperties(Trk::FastField);
@@ -761,11 +760,11 @@ bool InDet::SiCombinatorialTrackFinder_xk::spacePointsToClusters
     /// get the first cluster on an SP
     const Trk::PrepRawData* p = s->clusterList().first;
     if (p) {
-      /// add to list 
+      /// add to list
       const InDet::SiCluster* c = static_cast<const InDet::SiCluster*>(p);
       if (c) Sc.push_back(c);
     }
-    /// for strips, also make sure to pick up the second one! 
+    /// for strips, also make sure to pick up the second one!
     p = s->clusterList().second;
     if (p) {
       const InDet::SiCluster* c = static_cast<const InDet::SiCluster*>(p);
@@ -775,7 +774,7 @@ bool InDet::SiCombinatorialTrackFinder_xk::spacePointsToClusters
 
   ///  Detector elments test
   std::list<const InDet::SiCluster*>::iterator cluster = Sc.begin(), nextCluster, endClusters = Sc.end();
-  
+
   /// here we reject cases where two subsequent clusters are on the same detector element
   for (; cluster!=endClusters; ++cluster) {
 
@@ -790,7 +789,7 @@ bool InDet::SiCombinatorialTrackFinder_xk::spacePointsToClusters
   }
   return true;
 }
- 
+
 ///////////////////////////////////////////////////////////////////
 // Convert detector elements to detector element links
 ///////////////////////////////////////////////////////////////////
@@ -890,7 +889,7 @@ void  InDet::SiCombinatorialTrackFinder_xk::getTrackQualityCuts
 void InDet::SiCombinatorialTrackFinder_xk::initializeCombinatorialData(const EventContext& ctx, SiCombinatorialTrackFinderData_xk& data) const {
 
   /// Add conditions object to SiCombinatorialTrackFinderData to be able to access the field cache for each new event
-  /// Get conditions object for field cache 
+  /// Get conditions object for field cache
   SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
   const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
   if (fieldCondObj == nullptr) {
@@ -907,7 +906,7 @@ void InDet::SiCombinatorialTrackFinder_xk::initializeCombinatorialData(const Eve
                 (m_useSCT ? &*m_sctCondSummaryTool : nullptr),
                 &m_fieldprop,
                 &*m_boundaryCheckTool);
-  
+
 }
 
 void InDet::SiCombinatorialTrackFinder_xk::fillStatistic(SiCombinatorialTrackFinderData_xk& data, std::array<bool,6>& information) const
diff --git a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx
index f43903d7d75f157fd54da24e9af12619ba1d1715..254d93b6be769defa3a7fe7c6482ac5d5398b6df 100755
--- a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx
+++ b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx
@@ -654,8 +654,8 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack
     auto per   = m_proptool->propagate(*upTP,persurf,Trk::oppositeMomentum,false,m_fieldprop,Trk::nonInteracting); //Propagate
     if(!per){
       if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"No extrapolated track parameters!"<<endmsg;
-      delete niTP; 
-      delete upTP; 
+      delete niTP;
+      delete upTP;
       continue;
     }
 
@@ -670,8 +670,8 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack
     //delete per;
     if( int(DE.size()) < m_nclusmin){ //Not enough detector elements to satisfy the minimum number of clusters requirement. Stop
       if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Too few detector elements, not expected" << endmsg;
-      delete niTP; 
-      delete upTP; 
+      delete niTP;
+      delete upTP;
       continue;
     }
 
@@ -701,13 +701,13 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack
 	if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Initial Track Parameters at 1st SP created and scaled from TRT segment, " << endmsg;
 	if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << (*mesTP) << endmsg;
       }else{
-        delete niTP; 
-        delete upTP; 
+        delete niTP;
+        delete upTP;
         continue;
       }
     }else{
-      delete niTP; 
-      delete upTP; 
+      delete niTP;
+      delete upTP;
       continue;
     }
 
@@ -772,10 +772,10 @@ InDet::TRT_SeededTrackFinder_ATL::getTP(MagField::AtlasFieldCache& fieldCache, c
   }else{
 
     //Based on the hit information update the track parameters and the error matrix
-    const Trk::TrackParameters* uTP         = 0;
-    Trk::FitQualityOnSurface*   sct_fitChi2 = 0;
+    const Trk::TrackParameters* uTP         = nullptr;
+    Trk::FitQualityOnSurface*   sct_fitChi2 = nullptr;
 
-    uTP = m_updatorTool->addToState(*eTP,SP->localParameters(),SP->localCovariance(),sct_fitChi2);
+    uTP = m_updatorTool->addToState(*eTP,SP->localParameters(),SP->localCovariance(),sct_fitChi2).release();
 
     if(!uTP) { //The updator failed
       if (sct_fitChi2) {
@@ -817,8 +817,8 @@ InDet::TRT_SeededTrackFinder_ATL::getTP(MagField::AtlasFieldCache& fieldCache, c
       }
 
       // Clean up
-      //delete eTP; 
-      delete uTP; 
+      //delete eTP;
+      delete uTP;
       delete sct_fitChi2;
     }
   }
diff --git a/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/src/TRTStrawEfficiency.cxx b/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/src/TRTStrawEfficiency.cxx
index bca8dda647f831dffae920e89a72520353ce134a..d69a5ec32a93c61ec292f9d2cda6b7292f5c2103 100644
--- a/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/src/TRTStrawEfficiency.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackHoleSearch/src/TRTStrawEfficiency.cxx
@@ -498,16 +498,16 @@ int TRTStrawEfficiency::fill_hit_data(const Trk::TrackStateOnSurface& hit) {
 	m_hit_HL.push_back( (det == 3)&&(trtcircle != 0) ? trtcircle->highLevel() : -1 );
 
 	// unbiased trk parameters
-	const Trk::TrackParameters* unbiased_track_parameters = nullptr;
-	unbiased_track_parameters = m_updator->removeFromState(*(hit.trackParameters()),
-	                                                       hit.measurementOnTrack()->localParameters(),
-	                                                       hit.measurementOnTrack()->localCovariance());
+  std::unique_ptr<Trk::TrackParameters> unbiased_track_parameters =
+    m_updator->removeFromState(
+      *(hit.trackParameters()),
+      hit.measurementOnTrack()->localParameters(),
+      hit.measurementOnTrack()->localCovariance());
 
-	m_hit_ub_locR.push_back( det == 3 && unbiased_track_parameters ? unbiased_track_parameters->parameters()[Trk::locR] : -1 );
+  m_hit_ub_locR.push_back( det == 3 && unbiased_track_parameters ? unbiased_track_parameters->parameters()[Trk::locR] : -1 );
 	m_hit_ub_x.push_back( unbiased_track_parameters ? unbiased_track_parameters->position().x() : -1 );
 	m_hit_ub_y.push_back( unbiased_track_parameters ? unbiased_track_parameters->position().y() : -1 );
 	m_hit_ub_z.push_back( unbiased_track_parameters ? unbiased_track_parameters->position().z() : -1 );
-	delete unbiased_track_parameters;
 
 	// ------- added by dan -------
 	int is_tube_hit = -1;
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigTrackResidualMonitor/src/TrigTrackResidualMonitor.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigTrackResidualMonitor/src/TrigTrackResidualMonitor.cxx
index f549adb20b4506cde9503b1915145f5c43f58388..75a6b3d3c35ca9c34f7875fe22e6586a319aaa15 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigTrackResidualMonitor/src/TrigTrackResidualMonitor.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigTrackResidualMonitor/src/TrigTrackResidualMonitor.cxx
@@ -44,57 +44,57 @@ ATLAS_NO_CHECK_FILE_THREAD_SAFETY;  // legacy trigger code
 namespace InDet
 {
 
-  TrigTrackResidualMonitor::TrigTrackResidualMonitor(const std::string &name, 
+  TrigTrackResidualMonitor::TrigTrackResidualMonitor(const std::string &name,
 					   ISvcLocator *pSvcLocator)
     : HLT::FexAlgo (name, pSvcLocator),
-    
+
       m_allTracksFromStoreGate(0),
       m_monitoring(0),
-      m_path("/EXPERT"),  
+      m_path("/EXPERT"),
+
 
-    
       m_trackSelectorTool("InDet::InDetDetailedTrackSelectorTool"),
       m_trkSummaryTool("Trk::TrackSummaryTool/InDetTrackSummaryTool"),
       m_updator("Trk::Updator"),
-      
+
       m_propagator("Trk::Propagator"),
       //m_ParticleHypothesis(Trk::nonInteracting),
       m_ParticleHypothesis(Trk::pion),
-    
+
       m_residualPullCalculator("Trk::ResidualPullCalculator/ResidualPullCalculator")
-       
+
   {
-   
+
     declareProperty("doMonitoring",                   m_monitoring);
     declareProperty("histoPath",                      m_path);
     declareProperty("ResidualPullCalculator",         m_residualPullCalculator, "Tool to calculate residuals and pulls");
     declareProperty("TrackSelectorTool",              m_trackSelectorTool,"Tool to select the tracks");
     declareProperty("SummaryTool",                    m_trkSummaryTool);
-    
-   
+
+
     /////biased plots for residuals and pull measurements
-    
-    
+
+
     ///////////// Barrel Region //////////
-    
+
     declareMonitoredStdContainer("ResidualPixellocXBiasedBarrel" , m_resPixellocXBiasedBarrel );
     declareMonitoredStdContainer("ResidualPixellocYBiasedBarrel" , m_resPixellocYBiasedBarrel );
     declareMonitoredStdContainer("PullPixellocXBiasedBarrel" ,     m_pullPixellocXBiasedBarrel );
     declareMonitoredStdContainer("PullPixellocYBiasedBarrel" ,     m_pullPixellocYBiasedBarrel );
     declareMonitoredStdContainer("ResidualSCTBiasedBarrel" ,       m_resSCTBiasedBarrel );
     declareMonitoredStdContainer("PullSCTBiasedBarrel" ,           m_pullSCTBiasedBarrel );
-    
-    
+
+
     /////////// EndCap A //////////
-    
+
     declareMonitoredStdContainer("ResidualPixellocXBiasedEndCapA" , m_resPixellocXBiasedEndCapA );
     declareMonitoredStdContainer("ResidualPixellocYBiasedEndCapA" , m_resPixellocYBiasedEndCapA );
     declareMonitoredStdContainer("PullPixellocXBiasedEndCapA" ,     m_pullPixellocXBiasedEndCapA );
     declareMonitoredStdContainer("PullPixellocYBiasedEndCapA" ,     m_pullPixellocYBiasedEndCapA );
     declareMonitoredStdContainer("ResidualSCTBiasedEndCapA" ,       m_resSCTBiasedEndCapA );
     declareMonitoredStdContainer("PullSCTBiasedEndCapA" ,           m_pullSCTBiasedEndCapA );
-    
-    
+
+
     ///////////// EndCap C //////////
 
     declareMonitoredStdContainer("ResidualPixellocXBiasedEndCapC" , m_resPixellocXBiasedEndCapC );
@@ -103,65 +103,65 @@ namespace InDet
     declareMonitoredStdContainer("PullPixellocYBiasedEndCapC" ,     m_pullPixellocYBiasedEndCapC );
     declareMonitoredStdContainer("ResidualSCTBiasedEndCapC" ,       m_resSCTBiasedEndCapC );
     declareMonitoredStdContainer("PullSCTBiasedEndCapC" ,           m_pullSCTBiasedEndCapC );
-    
-    
 
-    
-   
+
+
+
+
     /////Unbiased plots for residuals and pull measurements
-    
-    
+
+
     /////////////Barrel Region//////////
-    
+
    declareMonitoredStdContainer("ResidualPixellocXUnbiasedBarrel" , m_resPixellocXUnbiasedBarrel );
    declareMonitoredStdContainer("ResidualPixellocYUnbiasedBarrel" , m_resPixellocYUnbiasedBarrel );
    declareMonitoredStdContainer("PullPixellocXUnbiasedBarrel" ,     m_pullPixellocXUnbiasedBarrel );
    declareMonitoredStdContainer("PullPixellocYUnbiasedBarrel" ,     m_pullPixellocYUnbiasedBarrel );
    declareMonitoredStdContainer("ResidualSCTUnbiasedBarrel" ,       m_resSCTUnbiasedBarrel );
    declareMonitoredStdContainer("PullSCTUnbiasedBarrel" ,           m_pullSCTUnbiasedBarrel );
-   
+
 
    ///////////// EndCap A  //////////
-   
-   
+
+
    declareMonitoredStdContainer("ResidualPixellocXUnbiasedEndCapA" , m_resPixellocXUnbiasedEndCapA );
    declareMonitoredStdContainer("ResidualPixellocYUnbiasedEndCapA" , m_resPixellocYUnbiasedEndCapA );
    declareMonitoredStdContainer("PullPixellocXUnbiasedEndCapA" ,     m_pullPixellocXUnbiasedEndCapA );
    declareMonitoredStdContainer("PullPixellocYUnbiasedEndCapA" ,     m_pullPixellocYUnbiasedEndCapA );
    declareMonitoredStdContainer("ResidualSCTUnbiasedEndCapA" ,       m_resSCTUnbiasedEndCapA );
    declareMonitoredStdContainer("PullSCTUnbiasedEndCapA" ,           m_pullSCTUnbiasedEndCapA );
-   
+
    //////////// EndCap C //////////
 
-   
+
    declareMonitoredStdContainer("ResidualPixellocXUnbiasedEndCapC" , m_resPixellocXUnbiasedEndCapC );
    declareMonitoredStdContainer("ResidualPixellocYUnbiasedEndCapC" , m_resPixellocYUnbiasedEndCapC );
    declareMonitoredStdContainer("PullPixellocXUnbiasedEndCapC" ,     m_pullPixellocXUnbiasedEndCapC );
    declareMonitoredStdContainer("PullPixellocYUnbiasedEndCapC" ,     m_pullPixellocYUnbiasedEndCapC );
    declareMonitoredStdContainer("ResidualSCTUnbiasedEndCapC" ,       m_resSCTUnbiasedEndCapC );
    declareMonitoredStdContainer("PullSCTUnbiasedEndCapC" ,           m_pullSCTUnbiasedEndCapC );
-   
-   
 
 
-   
+
+
+
    ///Propagator and Updator
-   
+
    declareProperty("UpdatorTool" ,      m_updator);
    declareProperty("propagator" ,       m_propagator);
-   
-   
+
+
    //// Track parameters
-   
+
    declareMonitoredStdContainer("TrackPt" ,  m_TrackPt);
    declareMonitoredStdContainer("npix" ,     m_npix);
    declareMonitoredStdContainer("nsct" ,     m_nsct);
    declareMonitoredStdContainer("npixh" ,    m_npixh);
    declareMonitoredStdContainer("nscth" ,    m_nscth);
-   
+
 
 }
-  
+
   TrigTrackResidualMonitor::~TrigTrackResidualMonitor()
   {}
 
@@ -169,9 +169,9 @@ namespace InDet
   // Initialisation
   ///////////////////////////////////////////////////////////////////
   HLT::ErrorCode TrigTrackResidualMonitor::hltInitialize() {
-    
+
     msg() << MSG::DEBUG << "initialize() success" << endmsg;
-    
+
     //Track Selector Tool
     if ( m_trackSelectorTool.retrieve().isFailure() ) {
       msg() << MSG::FATAL << "Failed to retrieve track selector tool " << m_trackSelectorTool << endmsg;
@@ -180,7 +180,7 @@ namespace InDet
     else{
       msg() << MSG::INFO << "Retrieved track selector tool " << m_trackSelectorTool << endmsg;
     }
-    
+
     //Track Summary Tool
     if ( m_trkSummaryTool.retrieve().isFailure() ) {
       msg() << MSG::FATAL << "Failed to retrieve track summary tool " <<  m_trkSummaryTool << endmsg;
@@ -189,9 +189,9 @@ namespace InDet
     else{
       msg() << MSG::INFO << "Retrieved track summary tool " << m_trkSummaryTool << endmsg;
     }
-    
-    
-    //Residual Pool Calculator Tool 
+
+
+    //Residual Pool Calculator Tool
     if ( m_residualPullCalculator.retrieve().isFailure() ) {
       msg() << MSG::FATAL << "Failed to retrieve ResidualPull Calculator " << m_residualPullCalculator << endmsg;
       return HLT::BAD_ALGO_CONFIG;
@@ -199,8 +199,8 @@ namespace InDet
     else{
       msg() << MSG::INFO << "Retrieved ResidualPull Calculator " << m_residualPullCalculator << endmsg;
     }
-    
-    //idHelper ATLAS ID 
+
+    //idHelper ATLAS ID
     if (detStore()->retrieve(m_idHelper, "AtlasID").isFailure()) {
       msg() << MSG::FATAL << "Could not get Atlas ID helper" << endmsg;
       return HLT::BAD_ALGO_CONFIG;
@@ -208,9 +208,9 @@ namespace InDet
     else{
       msg() << MSG::DEBUG << "Atlas id Helper found !" << endmsg;
     }
-    
-    
-    //Pixel ID 
+
+
+    //Pixel ID
     const PixelID * IdHelperPixel(0);
     if (detStore()->retrieve(IdHelperPixel, "PixelID").isFailure()) {
       msg() << MSG::FATAL << "Could not get Pixel ID helper" << endmsg;
@@ -219,11 +219,11 @@ namespace InDet
     else{
       msg() << MSG::DEBUG << "Pixel Id Helper found !" << endmsg;
     }
-    
+
     m_idHelperPixel = IdHelperPixel;
-    
 
-    //SCT ID 
+
+    //SCT ID
     const SCT_ID * IdHelperSCT(0);
     if (detStore()->retrieve(IdHelperSCT, "SCT_ID").isFailure()) {
       msg() << MSG::FATAL << "Could not get SCT ID helper" << endmsg;
@@ -232,9 +232,9 @@ namespace InDet
     else{
       msg() << MSG::DEBUG << "SCT Id Helper found !" << endmsg;
     }
-    
+
     m_idHelperSCT = IdHelperSCT;
-    
+
 
     //Get Updator
     if (m_updator.retrieve().isFailure()) {
@@ -244,9 +244,9 @@ namespace InDet
     else{
       msg() << MSG::INFO << "Retrieved tool " <<  m_updator.typeAndName() << endmsg;
     }
-    
-    
-    
+
+
+
     // Get Propagator
     if (m_propagator.retrieve().isFailure()) {
       msg() << MSG::FATAL << "Can not retrieve Updator of type  " << m_propagator.typeAndName() << endmsg;
@@ -255,46 +255,46 @@ namespace InDet
     else{
       msg() << MSG::INFO << "Retrieved tool " <<  m_propagator.typeAndName() << endmsg;
     }
-    
+
     return HLT::OK;
-    
+
   }
-  
-  
-  
-  
+
+
+
+
 
 
   ///////////////////////////////////////////////////////////////////
   // Execute HLT Algorithm
   ///////////////////////////////////////////////////////////////////
   HLT::ErrorCode TrigTrackResidualMonitor::hltExecute(const HLT::TriggerElement*, HLT::TriggerElement* outputTE) {
- 
+
     int outputLevel = msgLvl();
-    
+
     if(outputLevel <= MSG::DEBUG)
       msg() << MSG::DEBUG << "execHLTAlgorithm()" << endmsg;
-    
+
     //////  histogram variables /////////
-    
+
     /////////////////////// Biased ////////////////////////////////
-    
-    
-    //Barrel Region 
-    m_resPixellocXBiasedBarrel.clear(); 
-    m_resPixellocYBiasedBarrel.clear(); 
+
+
+    //Barrel Region
+    m_resPixellocXBiasedBarrel.clear();
+    m_resPixellocYBiasedBarrel.clear();
     m_pullPixellocXBiasedBarrel.clear();
     m_pullPixellocYBiasedBarrel.clear();
-    m_resSCTBiasedBarrel.clear(); 
+    m_resSCTBiasedBarrel.clear();
     m_pullSCTBiasedBarrel.clear();
 
 
     //EndCap A
-    m_resPixellocXBiasedEndCapA.clear(); 
-    m_resPixellocYBiasedEndCapA.clear(); 
+    m_resPixellocXBiasedEndCapA.clear();
+    m_resPixellocYBiasedEndCapA.clear();
     m_pullPixellocXBiasedEndCapA.clear();
     m_pullPixellocYBiasedEndCapA.clear();
-    m_resSCTBiasedEndCapA.clear(); 
+    m_resSCTBiasedEndCapA.clear();
     m_pullSCTBiasedEndCapA.clear();
 
 
@@ -303,7 +303,7 @@ namespace InDet
     m_resPixellocYBiasedEndCapC.clear();
     m_pullPixellocXBiasedEndCapC.clear();
     m_pullPixellocYBiasedEndCapC.clear();
-    m_resSCTBiasedEndCapC.clear(); 
+    m_resSCTBiasedEndCapC.clear();
     m_pullSCTBiasedEndCapC.clear();
 
 
@@ -313,81 +313,81 @@ namespace InDet
     //Barrel Region
     m_resPixellocXUnbiasedBarrel.clear();
     m_resPixellocYUnbiasedBarrel.clear();
-    m_pullPixellocXUnbiasedBarrel.clear(); 
-    m_pullPixellocYUnbiasedBarrel.clear(); 
-    m_resSCTUnbiasedBarrel.clear(); 
+    m_pullPixellocXUnbiasedBarrel.clear();
+    m_pullPixellocYUnbiasedBarrel.clear();
+    m_resSCTUnbiasedBarrel.clear();
     m_pullSCTUnbiasedBarrel.clear();
 
 
     //EndCap A
-    m_resPixellocXUnbiasedEndCapA.clear(); 
-    m_resPixellocYUnbiasedEndCapA.clear(); 
+    m_resPixellocXUnbiasedEndCapA.clear();
+    m_resPixellocYUnbiasedEndCapA.clear();
     m_pullPixellocXUnbiasedEndCapA.clear();
     m_pullPixellocYUnbiasedEndCapA.clear();
-    m_resSCTUnbiasedEndCapA.clear(); 
+    m_resSCTUnbiasedEndCapA.clear();
     m_pullSCTUnbiasedEndCapA.clear();
 
 
     //EndCap C
-    m_resPixellocXUnbiasedEndCapC.clear(); 
-    m_resPixellocYUnbiasedEndCapC.clear(); 
+    m_resPixellocXUnbiasedEndCapC.clear();
+    m_resPixellocYUnbiasedEndCapC.clear();
     m_pullPixellocXUnbiasedEndCapC.clear();
     m_pullPixellocYUnbiasedEndCapC.clear();
-    m_resSCTUnbiasedEndCapC.clear(); 
+    m_resSCTUnbiasedEndCapC.clear();
     m_pullSCTUnbiasedEndCapC.clear();
 
 
-    m_TrackPt.clear(); 
-    m_npix.clear(); 
-    m_nsct.clear(); 
+    m_TrackPt.clear();
+    m_npix.clear();
+    m_nsct.clear();
     m_npixh.clear();
     m_nscth.clear();
 
     //----------------------------------------------------------------------
     //  Navigate throw the trigger element to retrieve the last TrackCollection
     //----------------------------------------------------------------------
-    
+
     //initialize monitored objects
     m_allTracksFromStoreGate = 0;
     if ( HLT::OK != getFeature(outputTE, m_allTracksFromStoreGate) ) {
       msg() << MSG::ERROR << " Input track collection could not be found " << endmsg;
-      
+
       return HLT::NAV_ERROR;
     }
     if(!m_allTracksFromStoreGate){
       if(outputLevel <= MSG::DEBUG)
 	msg() << MSG::DEBUG << " Input track collection was not attached. Algorithm not executed!" << endmsg;
-      
-      return HLT::OK; 
+
+      return HLT::OK;
     } else {
       if(outputLevel <= MSG::VERBOSE)
 	msg() << MSG::VERBOSE << " Input track collection has size " << m_allTracksFromStoreGate->size() << endmsg;
       if ( m_allTracksFromStoreGate->size() == 0 ) {
 	if(outputLevel <= MSG::DEBUG)
 	  msg() << MSG::DEBUG << " Input track collection has 0 size. Algorithm not executed!" << endmsg;
-	return HLT::OK; 
+	return HLT::OK;
       }
     }
 
     for (TrackCollection::const_iterator itResTrk = m_allTracksFromStoreGate->begin();
-	 
+
 	 itResTrk != m_allTracksFromStoreGate->end()   ; ++itResTrk) {
-      
+
       DataVector<const Trk::TrackStateOnSurface>::const_iterator it= (*itResTrk)->trackStateOnSurfaces()->begin();
       DataVector<const Trk::TrackStateOnSurface>::const_iterator itEnd= (*itResTrk)->trackStateOnSurfaces()->end();
-      
+
       const Trk::Track* track = *itResTrk;
       const Trk::TrackStateOnSurface* tsos;
-      
+
       const Trk::TrackSummary *trkSum = track->trackSummary();
-      
+
       if(!trkSum){
 	Trk::Track* nonConstTrack = const_cast<Trk::Track*>(track);
 	m_trkSummaryTool->updateTrack(*nonConstTrack);
 	trkSum = nonConstTrack->trackSummary();
       }
-      
-      
+
+
       int npix, nsct, npixh, nscth, npixds,nsctds;
       npix = nsct = npixh = nscth = npixds = nsctds = -1;
       if(trkSum){
@@ -397,14 +397,14 @@ namespace InDet
 	npixh = trkSum->get(Trk::numberOfPixelHoles);
 	nsctds = trkSum->get(Trk::numberOfSCTDeadSensors);
 	npixds = trkSum->get(Trk::numberOfPixelDeadSensors);
-	
+
 	m_npix.push_back(npix);
 	m_nsct.push_back(nsct);
 	m_npixh.push_back(npixh);
 	m_nscth.push_back(nscth);
       }
-      
-      
+
+
       if (trkSum && npix >= 3 && nsct >= 6){
         const Trk::Perigee *trkPerig = track->perigeeParameters();
         double TrackPt = -1;
@@ -417,15 +417,15 @@ namespace InDet
               if ((*it)->type(Trk::TrackStateOnSurface::Measurement) ){
                 const Trk::MeasurementBase* mesb=dynamic_cast <const Trk::MeasurementBase*>((*it)->measurementOnTrack());
                 const Trk::TrackParameters* trackPars = (*it)->trackParameters();
-        
+
                 const Trk::ResidualPull* resPullPixelBiased;// = 0;
                 const Trk::ResidualPull* resPullSCTBiased; //= 0;
-        
+
                 const Trk::ResidualPull* resPullPixelUnbiased;// = 0;
                 const Trk::ResidualPull* resPullSCTUnbiased; //= 0;
-        
+
                 int detType = 99;
-        
+
                 const Trk::MeasurementBase* mesh = (*it)->measurementOnTrack();
                 const Trk::RIO_OnTrack* hitbec = dynamic_cast <const Trk::RIO_OnTrack*>(mesh);
                 if (not hitbec){
@@ -433,15 +433,15 @@ namespace InDet
                   continue;
                 }
                 const Identifier & hitIdbec = hitbec->identify();
-        
-        
+
+
                 if (m_idHelper->is_pixel(hitIdbec)){
             detType = 0;
                 }
                 if (m_idHelper->is_sct(hitIdbec)) {
             detType = 1;
                 }
-        
+
                 if((mesb) != 0 && (trackPars) !=0){
             const Trk::TrackParameters* TrackParams(0);
             const Trk::TrackParameters* UnbiasedTrackParams(0);
@@ -449,18 +449,18 @@ namespace InDet
             const Trk::TrackParameters* OtherSideUnbiasedTrackParams(0);
             const Trk::TrackParameters* PropagatedPixelUnbiasedTrackParams(0);
             const Trk::TrackParameters* PixelUnbiasedTrackParams(0);
-    
+
             const Trk::Surface* Surf = &(mesb->associatedSurface());
             const Identifier id =  Surf->associatedDetectorElementIdentifier();
-    
+
             if ( id.is_valid()) {
               int barrelECSCTUB = 99;
-              int barrelECSCTB = 99;		  
+              int barrelECSCTB = 99;
               int barrelECPUB = 99;
               int barrelECPB = 99;
               if (detType == 1 ) {
-                //	if (m_idHelperSCT->is_sct(id)) {  //there's no TrueUnbiased for non-SCT (pixel) hits)  
-        
+                //	if (m_idHelperSCT->is_sct(id)) {  //there's no TrueUnbiased for non-SCT (pixel) hits)
+
                 // check if other module side was also hit and try to remove other hit as well
                 const Identifier& idbECSCTUB = m_idHelperSCT->wafer_id(hitIdbec);
                 barrelECSCTUB = m_idHelperSCT->barrel_ec(idbECSCTUB);
@@ -470,7 +470,7 @@ namespace InDet
                 m_idHelperSCT->get_other_side(waferHash, otherSideHash);
                 const Identifier OtherModuleSideID = m_idHelperSCT->wafer_id(otherSideHash);
                 //const Trk::RIO_OnTrack* hit(0);
-        
+
                 for (const Trk::TrackStateOnSurface* TempTsos : *(*itResTrk)->trackStateOnSurfaces()) {
                   const Trk::RIO_OnTrack* hitOnTrack = dynamic_cast <const Trk::RIO_OnTrack*>(TempTsos->measurementOnTrack());
                   //hit = hitOnTrack;
@@ -481,13 +481,13 @@ namespace InDet
               }
                   }
                 }
-        
+
                 if (OtherModuleSideHit) {
                   if (OtherModuleSideHit->trackParameters()) {
               OtherSideUnbiasedTrackParams = m_updator->removeFromState(*(OtherModuleSideHit->trackParameters()),
                               OtherModuleSideHit->measurementOnTrack()->localParameters(),
-                              OtherModuleSideHit->measurementOnTrack()->localCovariance());
-      
+                              OtherModuleSideHit->measurementOnTrack()->localCovariance()).release();
+
               if (OtherSideUnbiasedTrackParams) {
                 const Trk::Surface* TempSurface = &(OtherModuleSideHit->measurementOnTrack()->associatedSurface());
                 const Trk::MagneticFieldProperties* TempField = 0;
@@ -497,25 +497,25 @@ namespace InDet
                 TempField = dynamic_cast <const Trk::MagneticFieldProperties*>(TempSurface->associatedLayer()->enclosingTrackingVolume());
                     }
                   }
-                } 
-        
+                }
+
                 PropagatedTrackParams = m_propagator->propagate(*OtherSideUnbiasedTrackParams,
                             tsos->measurementOnTrack()->associatedSurface(),
                             Trk::anyDirection, false,
                             *TempField,
                             m_ParticleHypothesis).release();
-        
+
                 delete OtherSideUnbiasedTrackParams;
-        
-                UnbiasedTrackParams = m_updator->removeFromState(*PropagatedTrackParams, 
-                             tsos->measurementOnTrack()->localParameters(), 
-                             tsos->measurementOnTrack()->localCovariance());
-        
+
+                UnbiasedTrackParams = m_updator->removeFromState(*PropagatedTrackParams,
+                             tsos->measurementOnTrack()->localParameters(),
+                             tsos->measurementOnTrack()->localCovariance()).release();
+
                 delete PropagatedTrackParams;
                 if (UnbiasedTrackParams) {
-                  TrackParams = UnbiasedTrackParams->clone(); 
+                  TrackParams = UnbiasedTrackParams->clone();
                 }
-        
+
                 resPullSCTUnbiased =   m_residualPullCalculator->residualPull(mesb,TrackParams,Trk::ResidualPull::Unbiased);
                 if(barrelECSCTUB == 0) {  // Barrel region
                   m_resSCTUnbiasedBarrel.push_back(resPullSCTUnbiased->residual()[Trk::loc1]);
@@ -529,45 +529,45 @@ namespace InDet
                   m_resSCTUnbiasedEndCapC.push_back(resPullSCTUnbiased->residual()[Trk::loc1]);
                   m_pullSCTUnbiasedEndCapC.push_back(resPullSCTUnbiased->pull()[Trk::loc1]);
                 }
-                delete UnbiasedTrackParams;  	      
-              } 
-                  } 
-                } 
+                delete UnbiasedTrackParams;
+              }
+                  }
+                }
               } // end of m_True Unbiased Loop
-      
-      
+
+
               else if ( detType == 0 ) {
-                // else  if (m_idHelperPixel->is_pixel(id) ) {  
+                // else  if (m_idHelperPixel->is_pixel(id) ) {
                 const Identifier& idbECPUB = m_idHelperPixel->wafer_id(hitIdbec);
                 barrelECPUB = m_idHelperPixel->barrel_ec(idbECPUB);
                 const Trk::TrackStateOnSurface* PixelSideHit(0);
                 PixelSideHit = *it;
-        
-                PropagatedPixelUnbiasedTrackParams = m_updator->removeFromState(*tsos->trackParameters(), 
-                                tsos->measurementOnTrack()->localParameters(), 
-                                tsos->measurementOnTrack()->localCovariance());
+
+                PropagatedPixelUnbiasedTrackParams = m_updator->removeFromState(*tsos->trackParameters(),
+                                tsos->measurementOnTrack()->localParameters(),
+                                tsos->measurementOnTrack()->localCovariance()).release();
                 const Trk::Surface* TempSurfacePixel = &(PixelSideHit->measurementOnTrack()->associatedSurface());
                 const Trk::MagneticFieldProperties* TempFieldPixel = 0;
-        
+
                 if (TempSurfacePixel){
                   if (TempSurfacePixel->associatedLayer()){
               if (TempSurfacePixel->associatedLayer()->enclosingTrackingVolume()){
                 TempFieldPixel = dynamic_cast <const Trk::MagneticFieldProperties*>(TempSurfacePixel->associatedLayer()->enclosingTrackingVolume());
               }
                   }
-                } 
-        
+                }
+
                 PixelUnbiasedTrackParams = m_propagator->propagate(*PropagatedPixelUnbiasedTrackParams,
                                tsos->measurementOnTrack()->associatedSurface(),
                                Trk::anyDirection, false,
                                *TempFieldPixel,
                                m_ParticleHypothesis).release();
-                delete PropagatedPixelUnbiasedTrackParams;		
-        
+                delete PropagatedPixelUnbiasedTrackParams;
+
                 if (PixelUnbiasedTrackParams) {
-                  TrackParams = PixelUnbiasedTrackParams->clone(); 
+                  TrackParams = PixelUnbiasedTrackParams->clone();
                 }
-        
+
                 resPullPixelUnbiased = m_residualPullCalculator->residualPull(mesb,TrackParams,Trk::ResidualPull::Unbiased);
                 if (barrelECPUB == 0){
                   m_resPixellocXUnbiasedBarrel.push_back(resPullPixelUnbiased->residual()[Trk::locX]);
@@ -588,15 +588,15 @@ namespace InDet
                   m_pullPixellocYUnbiasedEndCapC.push_back(resPullPixelUnbiased->pull()[Trk::locY]);
                 }
               }
-      
-      
+
+
               if ( detType == 0 ){
                 // if (m_idHelperPixel->is_pixel(id) ) {
                 const Identifier& idbECPB = m_idHelperPixel->wafer_id(hitIdbec);
                 barrelECPB = m_idHelperPixel->barrel_ec(idbECPB);
-        
+
                 resPullPixelBiased = m_residualPullCalculator->residualPull(mesb,trackPars,Trk::ResidualPull::Biased);
-        
+
                 if(barrelECPB == 0){
                   m_resPixellocXBiasedBarrel.push_back(resPullPixelBiased->residual()[Trk::locX]);
                   m_resPixellocYBiasedBarrel.push_back(resPullPixelBiased->residual()[Trk::locY]);
@@ -615,15 +615,15 @@ namespace InDet
                   m_pullPixellocXBiasedEndCapC.push_back(resPullPixelBiased->pull()[Trk::locX]);
                   m_pullPixellocYBiasedEndCapC.push_back(resPullPixelBiased->pull()[Trk::locY]);
                 }
-        
-        
+
+
               } else if ( detType == 1 ) {
                 // } else if (m_idHelperSCT->is_sct(id)) {
                 const Identifier& idbECSCTB = m_idHelperSCT->wafer_id(hitIdbec);
                 barrelECSCTB = m_idHelperSCT->barrel_ec(idbECSCTB);
-        
+
                 resPullSCTBiased =   m_residualPullCalculator->residualPull(mesb,trackPars,Trk::ResidualPull::Biased);
-        
+
                 if(barrelECSCTB == 0){
                   m_resSCTBiasedBarrel.push_back(resPullSCTBiased->residual()[Trk::locX]);
                   m_pullSCTBiasedBarrel.push_back(resPullSCTBiased->pull()[Trk::locX]);
@@ -641,23 +641,23 @@ namespace InDet
                 } // if loop, track parameters ! = 0 or trackPars !=0
               } // If loop   Trk::measurement
             } // end of for loop over trackStateOnSurfaces
-    
-          } 
+
+          }
         }// end of the 'if trkPerig'
       }//end of 'if trkSum and npix>=3 and nsct>=6
     } //  end of loop over all tracks
-    
-    
+
+
     return HLT::OK;
   }
-  
-  
+
+
 
 
   ///////////////////////////////////////////////////////////////////
   // Finalize
   ///////////////////////////////////////////////////////////////////
-  
+
   HLT::ErrorCode TrigTrackResidualMonitor::hltFinalize() {
 
     msg() << MSG::DEBUG << "finalize() success" << endmsg;
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPhysHitDecoratorAlg.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPhysHitDecoratorAlg.cxx
index cf1b191d787b2237e202f617134d7fe82a896293..3b50e0c0afcc05c3e57987f7bd216ab3d80d8103 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPhysHitDecoratorAlg.cxx
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPhysHitDecoratorAlg.cxx
@@ -75,7 +75,7 @@ InDetPhysHitDecoratorAlg::initialize() {
 
   ATH_CHECK( m_trkParticleName.initialize() );
   IDPVM::createDecoratorKeys(*this,m_trkParticleName,m_prefix,float_decor_names,m_floatDecor);
-  
+
   IDPVM::createDecoratorKeys(*this,m_trkParticleName,m_prefix, int_decor_names, m_intDecor);
   assert( m_intDecor.size() == kNIntDecorators);
   assert( m_floatDecor.size() == kNFloatDecorators);
@@ -428,7 +428,7 @@ InDetPhysHitDecoratorAlg::getUnbiasedTrackParameters(const Trk::TrackParameters*
       // Get unbiased state
       unbiasedTrkParameters = m_updatorHandle->removeFromState(*trkParameters,
                                                                measurement->localParameters(),
-                                                               measurement->localCovariance());
+                                                               measurement->localCovariance()).release();
       if (!unbiasedTrkParameters) {
         ATH_MSG_INFO(  "Could not get unbiased track parameters, use normal parameters" );
         isUnbiased = false;
diff --git a/InnerDetector/InDetValidation/InDetRecStatistics/src/InDetRecStatisticsAlg.cxx b/InnerDetector/InDetValidation/InDetRecStatistics/src/InDetRecStatisticsAlg.cxx
index a66fb96e617ebc131f3d8f0c67a3376b3ec6ede3..7d7f07bf716a654831fe3ae90944afd565265efd 100755
--- a/InnerDetector/InDetValidation/InDetRecStatistics/src/InDetRecStatisticsAlg.cxx
+++ b/InnerDetector/InDetValidation/InDetRecStatistics/src/InDetRecStatisticsAlg.cxx
@@ -7,16 +7,16 @@
 //
 //  to do-list:
 //     o write out percentage of tracks with bad tracksummary
-//     o add energy of mctracks for Michael 
+//     o add energy of mctracks for Michael
 //     o don't save intermediate newTracking track's to ntuple
 //     o statistics prints hit association purity, (holes, shared hits in sct/pixels/b-layer, outliers, etc...)
-//     o navigation between hits and tracks       
-//     X check Propagator defaults (check with Andrei regarding Tool)    
+//     o navigation between hits and tracks
+//     X check Propagator defaults (check with Andrei regarding Tool)
 //     o count tracks with without associated hits, without truth, truth without beginvertex
 //     o improved navigation between truth and reconstructed tracks
 //     o follow atlas naming conventions for all variable and method names
 
-#include "GaudiKernel/SmartDataPtr.h" 
+#include "GaudiKernel/SmartDataPtr.h"
 #include "GaudiKernel/IPartPropSvc.h"
 #include "HepPDT/ParticleData.hh"
 #include "CLHEP/Units/SystemOfUnits.h"
@@ -98,7 +98,7 @@ InDet::InDetRecStatisticsAlg::InDetRecStatisticsAlg(const std::string& name, ISv
   m_maxZStartPrimary           ( 200.0*CLHEP::mm),
   m_maxZStartSecondary         (2000.0*CLHEP::mm),
   m_minREndPrimary             ( 400.0*CLHEP::mm),
-  m_minREndSecondary           (1000.0*CLHEP::mm), 
+  m_minREndSecondary           (1000.0*CLHEP::mm),
   m_minZEndPrimary             (2300.0*CLHEP::mm),
   //m_maxZIndet                (),
   m_minZEndSecondary           (3200.0*CLHEP::mm),
@@ -145,7 +145,7 @@ InDet::InDetRecStatisticsAlg::InDetRecStatisticsAlg(const std::string& name, ISv
   declareProperty("minREndPrimary",		m_minREndPrimary);
   declareProperty("minREndSecondary",		m_minREndSecondary);
   declareProperty("minZEndPrimary",		m_minZEndPrimary);
-  declareProperty("minZEndSecondary",	        m_minZEndSecondary);   
+  declareProperty("minZEndSecondary",	        m_minZEndSecondary);
   m_idHelper  = NULL;
   m_pixelID   = NULL;
   m_sctID     = NULL;
@@ -166,7 +166,7 @@ StatusCode InDet::InDetRecStatisticsAlg::initialize(){
   if (sc1.isFailure()) {
     ATH_MSG_FATAL("Error retrieving services !");
     return StatusCode::FAILURE;
-  }   
+  }
 
   if (m_RecTrackCollection_keys.size()<=0) {
     ATH_MSG_ERROR("No reco track collection specified! Aborting.");
@@ -175,10 +175,10 @@ StatusCode InDet::InDetRecStatisticsAlg::initialize(){
 
   if (m_doTruth && m_RecTrackCollection_keys.size() != m_TrackTruthCollection_keys.size()) {
     ATH_MSG_ERROR("You have specified "
-		  << m_RecTrackCollection_keys.size() 
-		  << " TrackCollection keys, and " <<  m_TrackTruthCollection_keys.size() 
+		  << m_RecTrackCollection_keys.size()
+		  << " TrackCollection keys, and " <<  m_TrackTruthCollection_keys.size()
 		  << " TrackTruthCollection keys."
-		  << " You have to specify one TrackTruthCollection for each" 
+		  << " You have to specify one TrackTruthCollection for each"
 		  << " TrackCollection! Exiting."
 		  );
     return StatusCode::FAILURE;
@@ -198,8 +198,8 @@ StatusCode InDet::InDetRecStatisticsAlg::initialize(){
       "No Updator for unbiased track states given, use normal states!");
     m_updator = 0;
   }
-  
-  
+
+
   //get residual and pull calculator
   if (m_residualPullCalculator.empty()) {
     ATH_MSG_INFO(
@@ -209,9 +209,9 @@ StatusCode InDet::InDetRecStatisticsAlg::initialize(){
       "It is recommended to give R/P calculators to the det-specific tool"
 	<< " handle lists then.");
   } else if (m_residualPullCalculator.retrieve().isFailure()) {
-    ATH_MSG_FATAL("Could not retrieve "<< m_residualPullCalculator 
+    ATH_MSG_FATAL("Could not retrieve "<< m_residualPullCalculator
 	<<" (to calculate residuals and pulls) ");
-    
+
   } else {
     ATH_MSG_INFO("Generic hit residuals&pulls will be calculated in one or both "
 		 << "available local coordinates");
@@ -233,27 +233,27 @@ StatusCode InDet::InDetRecStatisticsAlg::initialize(){
   ct.minREndPrimary	 = m_minREndPrimary;
   ct.minREndSecondary	 = m_minREndSecondary;
   ct.minZEndPrimary	 = m_minZEndPrimary;
-  ct.minZEndSecondary  	 = m_minZEndSecondary;  
+  ct.minZEndSecondary  	 = m_minZEndSecondary;
   ct.minPt               = m_minPt;
   ct.minEtaDBM = m_minEtaDBM;
   ct.maxEtaDBM = m_maxEtaDBM;
 
   unsigned int nCollections = 0;
-  for (SG::ReadHandleKeyArray<TrackCollection>::const_iterator 
-       it = m_RecTrackCollection_keys.begin(); 
+  for (SG::ReadHandleKeyArray<TrackCollection>::const_iterator
+       it = m_RecTrackCollection_keys.begin();
        it < m_RecTrackCollection_keys.end(); ++ it) {
-    InDet::TrackStatHelper * collection = 
-      new TrackStatHelper(it->key(),(m_doTruth ? m_TrackTruthCollection_keys[nCollections].key() : ""), m_doTruth);  
+    InDet::TrackStatHelper * collection =
+      new TrackStatHelper(it->key(),(m_doTruth ? m_TrackTruthCollection_keys[nCollections].key() : ""), m_doTruth);
     nCollections ++;
-    collection->SetCuts(ct);        
-    m_SignalCounters.push_back(collection); 
+    collection->SetCuts(ct);
+    m_SignalCounters.push_back(collection);
   }
-  
+
   StatusCode sc3 = resetStatistics();     // reset all statistic counters
   if (sc3.isFailure()) {
     ATH_MSG_FATAL("Error in resetStatistics !");
     return StatusCode::FAILURE;
-  }     
+  }
 
   ATH_CHECK( m_RecTrackCollection_keys.initialize() );
   ATH_CHECK( m_McTrackCollection_key.initialize(m_doTruth && !m_McTrackCollection_key.key().empty()) );
@@ -293,12 +293,12 @@ StatusCode InDet::InDetRecStatisticsAlg::execute(const EventContext &ctx)  const
     // devide generated tracks into primary, truncated, secondary
 
     std::vector <std::pair<HepMC::ConstGenParticlePtr,int> > GenSignal;
-    //     GenSignalPrimary, GenSignalTruncated, GenSignalSecondary;   
+    //     GenSignalPrimary, GenSignalTruncated, GenSignalSecondary;
     unsigned int inTimeStart = 0;
     unsigned int inTimeEnd   = 0;
     if (m_doTruth) selectGenSignal ((SimTracks.isValid() ? &(*SimTracks) : nullptr), GenSignal, inTimeStart, inTimeEnd, counter);
 
-    // step through the various reconstructed TrackCollections and 
+    // step through the various reconstructed TrackCollections and
     // corresponding TrackTruthCollections and produce statistics for each
 
     if (m_SignalCounters.size()<=0) {
@@ -315,13 +315,13 @@ StatusCode InDet::InDetRecStatisticsAlg::execute(const EventContext &ctx)  const
       }
     }
     if (m_SignalCounters.size() != rec_track_collections.size()) {
-        ATH_MSG_ERROR("Number expected reco track collections does not match the actual number of such collections (" 
+        ATH_MSG_ERROR("Number expected reco track collections does not match the actual number of such collections ("
                       << m_SignalCounters.size() << "!=" << rec_track_collections.size() << ")" );
     }
 
     std::vector< SG::ReadHandle<TrackCollection> >::iterator rec_track_collections_iter = rec_track_collections.begin();
     std::vector< SG::ReadHandle<TrackTruthCollection> >::iterator truth_track_collections_iter = truth_track_collections.begin();
-    for (std::vector <class TrackStatHelper *>::const_iterator statHelper 
+    for (std::vector <class TrackStatHelper *>::const_iterator statHelper
 	 =  m_SignalCounters.begin();
 	 statHelper !=  m_SignalCounters.end();
          ++statHelper, ++rec_track_collections_iter) {
@@ -348,7 +348,7 @@ StatusCode InDet::InDetRecStatisticsAlg::execute(const EventContext &ctx)  const
       if (m_doSharedHits) {
         prd_to_track_map = m_assoTool->createPRDtoTrackMap();
 	// clear prdAssociationTool (this may be altered)
-	// loop over tracks and add PRD 
+	// loop over tracks and add PRD
 	TrackCollection::const_iterator trackIt    = RecCollection->begin();
 	TrackCollection::const_iterator trackItEnd = RecCollection->end();
 	for ( ; trackIt != trackItEnd ; ++trackIt) {
@@ -357,23 +357,23 @@ StatusCode InDet::InDetRecStatisticsAlg::execute(const EventContext &ctx)  const
 	  }
 	}
       }
-      
-      std::vector <const Trk::Track *>          RecTracks, RecSignal;    
+
+      std::vector <const Trk::Track *>          RecTracks, RecSignal;
       selectRecSignal                     (RecCollection, RecTracks,RecSignal,counter);
 
-      ATH_MSG_DEBUG( 
-		    "  RecTracks.size()="          << RecTracks.size()        
+      ATH_MSG_DEBUG(
+		    "  RecTracks.size()="          << RecTracks.size()
 		    << ", GenSignal.size()="          << GenSignal.size());
 
       ATH_MSG_DEBUG("Accumulating Statistics...");
-      (*statHelper)->addEvent    (RecCollection, 
-				  RecTracks, 
+      (*statHelper)->addEvent    (RecCollection,
+				  RecTracks,
                                   prd_to_track_map.get(),
-				  GenSignal, 
-				  TruthMap, 
-				  m_idHelper, 
-				  m_pixelID, 
-				  m_sctID, 
+				  GenSignal,
+				  TruthMap,
+				  m_idHelper,
+				  m_pixelID,
+				  m_sctID,
 				  m_trkSummaryTool.operator->(),
 				  m_UseTrackSummary,
 				  &inTimeStart,
@@ -381,10 +381,10 @@ StatusCode InDet::InDetRecStatisticsAlg::execute(const EventContext &ctx)  const
 
       counter.m_counter[kN_rec_tracks_processed] += RecCollection->size();
 
-      for (  TrackCollection::const_iterator it = RecCollection->begin() ; 
+      for (  TrackCollection::const_iterator it = RecCollection->begin() ;
 	     it < RecCollection->end(); ++ it){
 	std::vector<const Trk::RIO_OnTrack*> rioOnTracks;
-	Trk::RoT_Extractor::extract( rioOnTracks, 
+	Trk::RoT_Extractor::extract( rioOnTracks,
 				     (*it)->measurementsOnTrack()->stdcont() );
 	counter.m_counter[kN_spacepoints_processed] += rioOnTracks.size();
       }
@@ -406,16 +406,16 @@ StatusCode InDet :: InDetRecStatisticsAlg :: finalize() {
 
   printStatistics();
 
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
-       m_SignalCounters.begin(); collection !=  m_SignalCounters.end(); 
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
+       m_SignalCounters.begin(); collection !=  m_SignalCounters.end();
        collection++) {
     ATH_MSG_DEBUG(s_linestr2);
     delete (*collection);
-  } 
+  }
   m_SignalCounters.clear();
   return StatusCode::SUCCESS;
 }
- 
+
 
 StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
 {
@@ -427,11 +427,11 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
         ATH_MSG_FATAL(" Could not initialize Particle Properties Service" );
         return StatusCode::FAILURE;
     }
-      
+
     m_particleDataTable = partPropSvc->PDT();
 
     //Set up ATLAS ID helper to be able to identify the RIO's det-subsystem.
-  
+
     // Get the dictionary manager from the detector store
     const IdDictManager*  idDictMgr = 0;
     sc = detStore()->retrieve(idDictMgr, "IdDict");
@@ -439,16 +439,16 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
       ATH_MSG_FATAL("Could not get IdDictManager !");
       return StatusCode::FAILURE;
     }
-    
+
     // Initialize the helper with the dictionary information.
     sc = detStore()->retrieve(m_idHelper, "AtlasID");
     if (sc.isFailure()) {
       ATH_MSG_FATAL("Could not get AtlasDetectorID helper.");
       return StatusCode::FAILURE;
     }
-   
+
    //get Pixel, SCT, TRT managers and helpers
- 
+
    if (detStore()->retrieve(m_pixelID, "PixelID").isFailure()) {
      msg(MSG::FATAL) << "Could not get Pixel ID helper" << endmsg;
      return StatusCode::FAILURE;
@@ -458,12 +458,12 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
      return StatusCode::FAILURE;
    }
 
-   //retrieve the TRT helper only if not-SLHC layout used 
+   //retrieve the TRT helper only if not-SLHC layout used
    sc = detStore()->retrieve(m_idDictMgr, "IdDict");
    if (sc.isFailure()) {
      ATH_MSG_FATAL("Could not get IdDictManager !");
      return StatusCode::FAILURE;
-   } 
+   }
    const IdDictDictionary* dict = m_idDictMgr->manager()->find_dictionary("InnerDetector");
    if(!dict) {
      ATH_MSG_FATAL(" Cannot access InnerDetector dictionary ");
@@ -480,10 +480,10 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
      }
    }
    //
-  
+
    if (m_UseTrackSummary) {
      if (m_trkSummaryTool.retrieve().isFailure() ) {
-       ATH_MSG_FATAL("Failed to retrieve tool " 
+       ATH_MSG_FATAL("Failed to retrieve tool "
 	   << m_trkSummaryTool);
        return StatusCode::FAILURE;
      } else {
@@ -515,12 +515,12 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
    } else {
      m_truthToTrack.disable();
    }
-   
+
    //adding track selector tool
    if(m_useTrackSelection){
      if ( m_trackSelectorTool.retrieve().isFailure() ) {
        ATH_MSG_FATAL("Failed to retrieve tool " << m_trackSelectorTool);
-       return StatusCode::FAILURE;   
+       return StatusCode::FAILURE;
      } else {
        ATH_MSG_INFO("Retrieved tool " << m_trackSelectorTool);
      }
@@ -533,26 +533,26 @@ StatusCode InDet :: InDetRecStatisticsAlg :: getServices ()
 StatusCode InDet :: InDetRecStatisticsAlg :: resetStatistics() {
     m_counter.reset();
     m_events_processed           = 0;
-  
-    for (std::vector<InDet::TrackStatHelper *>::const_iterator counter = 
-	   m_SignalCounters.begin(); 
+
+    for (std::vector<InDet::TrackStatHelper *>::const_iterator counter =
+	   m_SignalCounters.begin();
 	 counter != m_SignalCounters.end(); ++ counter) {
       (*counter)->reset();
     }
     return StatusCode :: SUCCESS;
 }
 
-void InDet::InDetRecStatisticsAlg::selectRecSignal(const TrackCollection* RecCollection, 
+void InDet::InDetRecStatisticsAlg::selectRecSignal(const TrackCollection* RecCollection,
 						   std::vector <const Trk::Track *> & RecTracks ,
 						   std::vector <const Trk::Track *> & RecSignal,
                                                    InDet::InDetRecStatisticsAlg::CounterLocal &counter) const {
-  
+
   for (  TrackCollection::const_iterator it = RecCollection->begin() ;
 	 it != RecCollection->end(); ++ it){
     RecTracks.push_back(*it);
-    const DataVector<const Trk::TrackParameters>* trackpara = 
+    const DataVector<const Trk::TrackParameters>* trackpara =
       (*it)->trackParameters();
-    
+
     if(trackpara->size() > 0){
       const Trk::TrackParameters* para = trackpara->front();
       if (para){
@@ -570,14 +570,14 @@ void InDet::InDetRecStatisticsAlg::selectRecSignal(const TrackCollection* RecCol
 
 // select charged, stable particles in allowed pt and eta range
 void InDet :: InDetRecStatisticsAlg ::
-selectGenSignal  (const McEventCollection* SimTracks, 
+selectGenSignal  (const McEventCollection* SimTracks,
 		  std::vector <std::pair<HepMC::ConstGenParticlePtr,int> > & GenSignal,
 		  unsigned int /*inTimeStart*/, unsigned int /*inTimeEnd*/,
                   InDet::InDetRecStatisticsAlg::CounterLocal &counter) const //'unused' compiler warning
 {
   if (! SimTracks) return;
 
-  unsigned int nb_mc_event = SimTracks->size();  
+  unsigned int nb_mc_event = SimTracks->size();
   std::unique_ptr<PileUpType>  put = std::make_unique<PileUpType>(SimTracks);
 
   McEventCollection::const_iterator inTimeMBend;
@@ -604,15 +604,15 @@ selectGenSignal  (const McEventCollection* SimTracks,
 	  const HepPDT::ParticleData* pd = m_particleDataTable->particle(std::abs(pdgCode));
 	  if (!pd) {
 	    ATH_MSG_DEBUG("Could not get particle data for particle with "
-			 <<"pdgCode="<<pdgCode<< ", status=" << particle->status() 
+			 <<"pdgCode="<<pdgCode<< ", status=" << particle->status()
 			 << ", barcode=" << HepMC::barcode(particle));
 	    ATH_MSG_DEBUG("GenParticle= " << particle);
 	    continue;
 	  }
 	  float charge = pd->charge();
 	  if (std::abs(charge)<0.5) continue;
-	  if (std::abs(particle->momentum().perp()) >  m_minPt  &&  
-	      std::abs(particle->momentum().pseudoRapidity()) < m_maxEta ) { 
+	  if (std::abs(particle->momentum().perp()) >  m_minPt  &&
+	      std::abs(particle->momentum().pseudoRapidity()) < m_maxEta ) {
 	    std::pair<HepMC::ConstGenParticlePtr,int> thisPair(particle,ievt);
 	    GenSignal.push_back(thisPair);
 	  }
@@ -646,28 +646,28 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
   std::stringstream outstr;
   int def_precision(outstr.precision());
   outstr << "\n"
-         << MSG::INFO 
-	 << std::setiosflags(std::ios::fixed | std::ios::showpoint)  
+         << MSG::INFO
+	 << std::setiosflags(std::ios::fixed | std::ios::showpoint)
 	 << std::setw(7) << std::setprecision(2)
 	 << s_linestr << "\n"
-         << "Summary" << "\n" 
+         << "Summary" << "\n"
          << "\tProcessed              : " << m_events_processed
 	 << " events, "  << m_counter.m_counter[kN_rec_tracks_processed]
 	 << " reconstructed tracks with " << m_counter.m_counter[kN_spacepoints_processed]
 	 << " hits, and "  << m_counter.m_counter[kN_gen_tracks_processed]
 	 << " truth particles" << "\n"
          << "\tProblem objects        : " <<  m_counter.m_counter[kN_rec_tracks_without_perigee]
-	 << " tracks without perigee, " 
+	 << " tracks without perigee, "
 	 << m_counter.m_counter[kN_unknown_hits] << " unknown hits" << "\n"
          << "\t" << "Reco  TrackCollections : ";
   bool first = true;
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	 m_SignalCounters.begin();
        collection !=  m_SignalCounters.end(); collection++)
     {
-      if (first) { 
+      if (first) {
       	first = false;
-      } 
+      }
       else {
 	outstr << ", ";
       }
@@ -685,9 +685,9 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
       for (std::vector <class TrackStatHelper *>::const_iterator collection =  m_SignalCounters.begin();
 	   collection !=  m_SignalCounters.end(); collection++)
 	{
-	  if (first) { 
+	  if (first) {
 	    first = false;
-	  } 
+	  }
 	  else {
 	    outstr << ", ";
 	  }
@@ -696,42 +696,42 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
       ATH_MSG_INFO(outstr.str());
       outstr.str("");
     }
-   outstr.str(""); 
-   outstr << "\n" 
+   outstr.str("");
+   outstr << "\n"
 	  << s_linestr2 << "\n"
-	  << "Cuts and Settings for Statistics Table" << "\n" 
-	  << "\t" << "TrackSummary Statistics" << "\t" 
-	  << (m_UseTrackSummary     ? "YES" : "NO") << "\n" 
-	  << "\t" << "Signal                \t" << "pT > " 
+	  << "Cuts and Settings for Statistics Table" << "\n"
+	  << "\t" << "TrackSummary Statistics" << "\t"
+	  << (m_UseTrackSummary     ? "YES" : "NO") << "\n"
+	  << "\t" << "Signal                \t" << "pT > "
 	  << m_minPt/1000 << " GeV/c, |eta| < " << m_maxEta << "\t\t"
-	  << "\t" << "Primary track start   \t" << "R < " 
-	  << m_maxRStartPrimary << "mm and |z| < " 
+	  << "\t" << "Primary track start   \t" << "R < "
+	  << m_maxRStartPrimary << "mm and |z| < "
 	  << m_maxZStartPrimary << "mm" << "\n"
-	  << "\t" << "Barrel                \t" << 0.0                
+	  << "\t" << "Barrel                \t" << 0.0
 	  << "< |eta| < " << m_maxEtaBarrel     << "\t\t\t"
-	  << "\t" << "Primary track end     \t" << "R > " 
-	  << m_minREndPrimary   << "mm or |z| > " << m_minZEndPrimary   
+	  << "\t" << "Primary track end     \t" << "R > "
+	  << m_minREndPrimary   << "mm or |z| > " << m_minZEndPrimary
 	  << "mm" << "\n"
-	  << "\t" << "Transition Region     \t" << m_maxEtaBarrel     
+	  << "\t" << "Transition Region     \t" << m_maxEtaBarrel
 	  << "< |eta| < " << m_maxEtaTransition << "\t\t\t"
-	  << "\t" << "Secondary (non-Primary) start \t" 
-	  << " R < "    << m_maxRStartSecondary << "mm and" 
+	  << "\t" << "Secondary (non-Primary) start \t"
+	  << " R < "    << m_maxRStartSecondary << "mm and"
 	  << " |z| < "  << m_maxZStartSecondary << " mm" << "\n"
-	  << "\t" << "Endcap                \t" << m_maxEtaTransition 
+	  << "\t" << "Endcap                \t" << m_maxEtaTransition
 	  << "< |eta| < " << m_maxEtaEndcap     << "\t\t\t"
 	  << "\t" << "Secondary (non-primary) end   \t"
 	  << " R > "    << m_minREndSecondary   << "mm or"
 	  << " |z| > "  << m_minREndSecondary   << "mm" << "\n"
           << "\t" << "Forward                \t"
           << "|eta| > " << m_minEtaDBM     << "\n"
-	  << "\t" << "Low prob tracks #1    \t" << "< "               
-	  << m_fakeTrackCut  << " of hits from single Truth Track " 
-	  << "\n"  
-	  << "\t" << "Low prob tracks #2    \t" << "< "               
-	  << m_fakeTrackCut2 << " of hits from single Truth Track " 
-	  << "\n"  
+	  << "\t" << "Low prob tracks #1    \t" << "< "
+	  << m_fakeTrackCut  << " of hits from single Truth Track "
+	  << "\n"
+	  << "\t" << "Low prob tracks #2    \t" << "< "
+	  << m_fakeTrackCut2 << " of hits from single Truth Track "
+	  << "\n"
 	  << "\t" << "No link tracks        \t  Track has no link associated to an HepMC Particle" << "\n"
-	  << "\t" << "Good reco tracks      \t" << "> "               
+	  << "\t" << "Good reco tracks      \t" << "> "
 	  << m_matchTrackCut << " of hits from single Truth Track + a link !";
   ATH_MSG_INFO(outstr.str());
   outstr.str("");
@@ -739,7 +739,7 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
   MsgStream &out = msg(MSG::INFO);
   {
   RestoreStream<MsgStream> restore(out);
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	 m_SignalCounters.begin();
        collection !=  m_SignalCounters.end(); collection++) {
      if ((*collection)->key()=="CombinedInDetTracks"){
@@ -782,19 +782,19 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
   }
 
   if(m_printSecondary){
-    outstr.str("");    
+    outstr.str("");
     outstr << "\n" << std::setprecision(def_precision)
            <<s_linestr<<"\n"
            <<"Statistics for Secondaries (non-Primaries)"<<"\n"
-           << "\t" << "Secondary track start \t" 
-	   << " R < "   << m_maxRStartSecondary << "mm and" 
+           << "\t" << "Secondary track start \t"
+	   << " R < "   << m_maxRStartSecondary << "mm and"
 	   << " |z| < " << m_maxZStartSecondary << " mm" << "\n"
            << "\t" << "Secondary track end   \t"
 	   << " R > "    << m_minREndSecondary << "mm or"
            << " |z| > "  << m_minZEndSecondary << "mm";
-    ATH_MSG_INFO(outstr.str()); 
+    ATH_MSG_INFO(outstr.str());
     outstr.str("");
-    for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+    for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	   m_SignalCounters.begin();
 	 collection !=  m_SignalCounters.end(); collection++) {
      if ((*collection)->key()=="CombinedInDetTracks"){
@@ -815,7 +815,7 @@ void InDet :: InDetRecStatisticsAlg :: printStatistics() {
 void InDet :: InDetRecStatisticsAlg ::printTrackSummary (MsgStream &out, enum eta_region eta_reg)
 {
   bool printed = false;
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	 m_SignalCounters.begin();
        collection !=  m_SignalCounters.end(); collection++) {
      if ((*collection)->key()=="CombinedInDetTracks"){
@@ -827,7 +827,7 @@ void InDet :: InDetRecStatisticsAlg ::printTrackSummary (MsgStream &out, enum et
          << "----------------------------------------------------------------------------------------------------------------------------------------------" << "\n";
   }
   printed = false;
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	 m_SignalCounters.begin();
        collection !=  m_SignalCounters.end(); collection++) {
      if ((*collection)->key()=="CombinedInDetTracks"){
@@ -838,7 +838,7 @@ void InDet :: InDetRecStatisticsAlg ::printTrackSummary (MsgStream &out, enum et
      out << "\n"
          << "----------------------------------------------------------------------------------------------------------------------------------------------" << "\n";
   }
-  for (std::vector <class TrackStatHelper *>::const_iterator collection =  
+  for (std::vector <class TrackStatHelper *>::const_iterator collection =
 	 m_SignalCounters.begin();
        collection !=  m_SignalCounters.end(); collection++) {
      if ((*collection)->key()=="CombinedInDetTracks"){
@@ -848,10 +848,10 @@ void InDet :: InDetRecStatisticsAlg ::printTrackSummary (MsgStream &out, enum et
 }
 
 // =================================================================================================================
-// calculatePull 
+// calculatePull
 // =================================================================================================================
-float InDet :: InDetRecStatisticsAlg :: calculatePull(const float residual, 
-						      const float trkErr, 
+float InDet :: InDetRecStatisticsAlg :: calculatePull(const float residual,
+						      const float trkErr,
 						      const float hitErr){
   double ErrorSum;
   ErrorSum = sqrt(pow(trkErr, 2) + pow(hitErr, 2));
@@ -860,16 +860,16 @@ float InDet :: InDetRecStatisticsAlg :: calculatePull(const float residual,
 }
 
 const Trk::TrackParameters *  InDet::InDetRecStatisticsAlg::getUnbiasedTrackParameters(const Trk::TrackParameters* trkParameters, const Trk::MeasurementBase* measurement ){
-    
+
 
   const Trk::TrackParameters *unbiasedTrkParameters = 0;
-  
+
  // -----------------------------------------
   // use unbiased track states or normal ones?
   // unbiased track parameters are tried to retrieve if the updator tool
   //    is available and if unbiased track states could be produced before
   //    for the current track (ie. if one trial to get unbiased track states
-  //    fail						      
+  //    fail
 
   if (m_updator && (m_isUnbiased==1) ) {
     if ( trkParameters->covariance() ) {
@@ -878,8 +878,8 @@ const Trk::TrackParameters *  InDet::InDetRecStatisticsAlg::getUnbiasedTrackPara
       unbiasedTrkParameters =
 	m_updator->removeFromState( *trkParameters,
 				    measurement->localParameters(),
-				    measurement->localCovariance());
-      
+				    measurement->localCovariance()).release();
+
       if (!unbiasedTrkParameters) {
 	ATH_MSG_WARNING("Could not get unbiased track parameters, "
 	    <<"use normal parameters");
@@ -896,7 +896,7 @@ const Trk::TrackParameters *  InDet::InDetRecStatisticsAlg::getUnbiasedTrackPara
       m_isUnbiased = 0;
     }
   } // end if no measured track parameter
-  return unbiasedTrkParameters;  
+  return unbiasedTrkParameters;
 }
 
 
@@ -904,7 +904,7 @@ Identifier  InDet::InDetRecStatisticsAlg::getIdentifier(const Trk::MeasurementBa
   Identifier id;
   const Trk::CompetingRIOsOnTrack *comprot = 0;
   // identify by ROT:
-  const Trk::RIO_OnTrack *rot = 
+  const Trk::RIO_OnTrack *rot =
     dynamic_cast<const Trk::RIO_OnTrack*>(measurement);
   if (rot) {
     id = rot->identify();
@@ -921,5 +921,5 @@ Identifier  InDet::InDetRecStatisticsAlg::getIdentifier(const Trk::MeasurementBa
     }
   }
   delete comprot;
-  return id; 
+  return id;
 }
diff --git a/Reconstruction/RecoTools/TrackToCalo/src/ParticleCaloExtensionTool.h b/Reconstruction/RecoTools/TrackToCalo/src/ParticleCaloExtensionTool.h
index a0587bddbcac19432e5cb45e00bebc5435925070..2ae9e7882e55ff2ff4bad172d41da526525023cb 100644
--- a/Reconstruction/RecoTools/TrackToCalo/src/ParticleCaloExtensionTool.h
+++ b/Reconstruction/RecoTools/TrackToCalo/src/ParticleCaloExtensionTool.h
@@ -21,9 +21,9 @@
 /* interfce for the extrapolator tool*/
 
 #include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkEventPrimitives/ParticleHypothesis.h" 
+#include "TrkEventPrimitives/ParticleHypothesis.h"
 #include "TrkDetDescrUtils/GeometrySignature.h"
-/* 
+/*
  * xAOD includes
  */
 #include "xAODTracking/TrackParticle.h"
@@ -44,35 +44,35 @@ public:
    * used throughout the sw */
   using IParticleCaloExtensionTool::caloExtension;
   using IParticleCaloExtensionTool::caloExtensionCollection;
-    
-    
+
+
   ParticleCaloExtensionTool(const std::string&,const std::string&,const IInterface*);
   virtual ~ParticleCaloExtensionTool();
 
   virtual StatusCode initialize() override final;
   virtual StatusCode finalize() override final;
 
-  /* 
+  /*
    * Implement the IParticleCaloExtension methods
    */
   virtual std::unique_ptr<Trk::CaloExtension> caloExtension(const EventContext& ctx,
                                                             const xAOD::IParticle& particle) const override final;
 
   virtual const Trk::CaloExtension*  caloExtension( const EventContext& ctx,
-                                                    const xAOD::IParticle& particle, 
+                                                    const xAOD::IParticle& particle,
                                                     IParticleCaloExtensionTool::Cache& cache ) const override final;
 
   virtual  const Trk::CaloExtension* caloExtension( const xAOD::IParticle& particle,
                                                     const CaloExtensionCollection& cache ) const override final;
 
   virtual StatusCode  caloExtensionCollection( const EventContext& ctx,
-                                               const xAOD::IParticleContainer& particles, 
+                                               const xAOD::IParticleContainer& particles,
                                                const std::vector<bool>& mask,
                                                CaloExtensionCollection& caloextensions) const override final;
 
   virtual std::unique_ptr<Trk::CaloExtension> caloExtension( const EventContext& ctx,
-                                                             const TrackParameters& startPars, 
-                                                             PropDirection propDir, 
+                                                             const TrackParameters& startPars,
+                                                             PropDirection propDir,
                                                              ParticleHypothesis particleType ) const  override final;
 
 
@@ -86,14 +86,26 @@ private:
                                                       const xAOD::TrackParticle& particle ) const;
 
   ToolHandle<Trk::IExtrapolator> m_extrapolator {this, "Extrapolator", ""};
-  Gaudi::Property<std::string>  m_particleTypeName{this,"ParticleType","muon",
-    "The particle type : muon, pion, electron,nonInteracting"};
-  Gaudi::Property<bool>  m_startFromPerigee{this,"StartFromPerigee",false, "Start from Perigee"};
+  Gaudi::Property<std::string> m_particleTypeName{
+    this,
+    "ParticleType",
+    "muon",
+    "The particle type : muon, pion, electron,nonInteracting"
+  };
+  Gaudi::Property<bool> m_startFromPerigee{ this,
+                                            "StartFromPerigee",
+                                            false,
+                                            "Start from Perigee" };
   const AtlasDetectorID* m_detID;
-  ParticleHypothesis  m_particleType ;
-
-  Gaudi::Property<unsigned int>  m_extrapolDetectorID{this,"ExtrapolationDetectorID", Trk::Calo, "The detector this tool should extrapolate through. Expects a Trk::GeometrySignature enum value."};
-  
+  ParticleHypothesis m_particleType;
+
+  Gaudi::Property<unsigned int> m_extrapolDetectorID{
+    this,
+    "ExtrapolationDetectorID",
+    Trk::Calo,
+    "The detector this tool should extrapolate through. Expects a "
+    "Trk::GeometrySignature enum value."
+  };
 };
 }
 
diff --git a/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx b/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx
index 958806144fd4519ddabcf9ed24047ce03bf346f6..d9f86fbdc5d87ce692fd7c0470da5bf41927a8ce 100644
--- a/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx
+++ b/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx
@@ -25,8 +25,8 @@ namespace Trk {
   //______________________________________________________________
   AlignResidualCalculator::AlignResidualCalculator(const std::string& type, const std::string& name,
            const IInterface* parent)
-    
-    : AthAlgTool(type,name,parent)    
+
+    : AthAlgTool(type,name,parent)
     , m_pullCalculator("Trk::ResidualPullCalculator/ResidualPullCalculator")
     , m_updator("Trk::KalmanUpdator/TrkKalmanUpdator")
     , m_qOverP{}
@@ -35,7 +35,7 @@ namespace Trk {
     , m_chi2ForMeasType(0)
   {
     declareInterface<IAlignResidualCalculator>(this);
-    
+
     declareProperty("ResidualPullCalculator",   m_pullCalculator);
     declareProperty("ResidualType",             m_resType = HitOnly);
     declareProperty("IncludeScatterers",        m_includeScatterers = false );
@@ -51,10 +51,10 @@ namespace Trk {
 
   //________________________________________________________________________
   StatusCode AlignResidualCalculator::initialize()
-  {  
+  {
     // get residual pull calculator
     if (m_pullCalculator.retrieve().isFailure()) {
-      msg(MSG::FATAL) << "Could not get " << m_pullCalculator << endmsg; 
+      msg(MSG::FATAL) << "Could not get " << m_pullCalculator << endmsg;
       return StatusCode::FAILURE;
     }
     ATH_MSG_INFO("Retrieved " << m_pullCalculator);
@@ -62,7 +62,7 @@ namespace Trk {
     // get updator
     if(m_resType==Unbiased) {
       if (m_updator.retrieve().isFailure()) {
-        msg(MSG::FATAL) << "Could not get " << m_updator << endmsg; 
+        msg(MSG::FATAL) << "Could not get " << m_updator << endmsg;
         return StatusCode::FAILURE;
       }
       ATH_MSG_INFO("Retrieved " << m_pullCalculator);
@@ -78,14 +78,14 @@ namespace Trk {
   {
     return StatusCode::SUCCESS;
   }
-  
+
   //________________________________________________________________________
   double AlignResidualCalculator::setResiduals(AlignTSOSCollection* atsosColl,const Track* track)
   {
     bool useNewTrack = (track!=0);
     return setResiduals(atsosColl->begin(), atsosColl->end(), track, useNewTrack);
   }
-  
+
   //________________________________________________________________________
   double AlignResidualCalculator::setResiduals(AlignTrack* alignTrack,const Track* track)
   {
@@ -93,11 +93,11 @@ namespace Trk {
     const Track* newTrack = (useNewTrack) ? track : alignTrack;
     return setResiduals(alignTrack->firstAtsos(), alignTrack->lastAtsos(), newTrack, useNewTrack);
   }
-  
+
   //________________________________________________________________________
   double AlignResidualCalculator::setResiduals(AlignTSOSCollection::iterator firstAtsos,
                                                AlignTSOSCollection::iterator lastAtsos,
-                                               const Track* track, bool newTrack) 
+                                               const Track* track, bool newTrack)
   {
     m_nDoF=0;
     m_matchedTSOS.clear();
@@ -108,7 +108,7 @@ namespace Trk {
       m_chi2ForMeasType[i]=0.;
 
     //ATH_MSG_DEBUG("in setResiduals with newTrack="<<newTrack);
-    
+
     if (!track&&newTrack) { ATH_MSG_ERROR("no track!"); return 0.; }
 
     int    ntsos(0);
@@ -125,11 +125,11 @@ namespace Trk {
       const MaterialEffectsBase*         meb        = tsos->materialEffectsOnTrack();
       const Trk::MaterialEffectsOnTrack* meot       = dynamic_cast<const MaterialEffectsOnTrack*>(meb);
       //const ScatteringAngles*            scatterer = (meot) ? meot->scatteringAngles() : 0;
-      
+
       // if scatterer, add scattering parameters
       //int nScattererDim=0;
-      if (m_includeScatterers && meb && meot) { 
-        //nScattererDim = (scatterer) ? 2 : 1;      
+      if (m_includeScatterers && meb && meot) {
+        //nScattererDim = (scatterer) ? 2 : 1;
         accumulateScattering(tsos);
       }
       //ATH_MSG_DEBUG("scattererDim="<<nScattererDim);
@@ -142,23 +142,23 @@ namespace Trk {
       m_chi2ForMeasType[imeasType] += dchi2;
       ATH_MSG_DEBUG("adding "<<dchi2<<", m_chi2ForMeasType["<<imeasType<<"]="<<m_chi2ForMeasType[imeasType]);
     }
-    
-    return chi2;///(double)m_nDoF;  
+
+    return chi2;///(double)m_nDoF;
   }
-  
+
   //_______________________________________________________________________
   double
   AlignResidualCalculator::setResidualsOnATSOS(AlignTSOS * atsos, const TrackStateOnSurface * tsos)
   {
     // this method does the following:
-    // 1. gets residuals (measurement and scattering dimensions), 
-    // 2. adds to AlignTSOS, and 
-    // 3. returns contribution to chi2 from this ATSOS 
- 
+    // 1. gets residuals (measurement and scattering dimensions),
+    // 2. adds to AlignTSOS, and
+    // 3. returns contribution to chi2 from this ATSOS
+
     ATH_MSG_DEBUG("in setResidualsOnATSOS");
 
     atsos->clearResiduals();
- 
+
     double dchi2(0.);
 
     // scattering residual(s) and/or energy loss first
@@ -168,13 +168,13 @@ namespace Trk {
       // when using unbiased residuals including scatterers doesn't make sense
       if(m_resType == Unbiased)
         ATH_MSG_WARNING("When using unbiased residuals including scatterers doesn't make sense!");
-      
+
       const MaterialEffectsBase*         meb        = tsos->materialEffectsOnTrack();
       const Trk::MaterialEffectsOnTrack* meot       = dynamic_cast<const MaterialEffectsOnTrack*>(meb);
       const ScatteringAngles*            scatterer  = (meot) ? meot->scatteringAngles() : 0;
-      
+
       int nscatparam=0;
-      if (meb && meot) 
+      if (meb && meot)
         nscatparam = (scatterer) ? 2 : 1;
 
       for (int iparam=0;iparam<nscatparam;iparam++) {
@@ -200,13 +200,13 @@ namespace Trk {
               errSq  *= errSq;
             }
           }
-          else{ 
-            ATH_MSG_WARNING("scatterer has no TrackParameters!"); 
+          else{
+            ATH_MSG_WARNING("scatterer has no TrackParameters!");
           }
 
           Residual res(HitOnly,Scatterer,ParamDefs(iparam),residual,errSq);
-          atsos->addResidual(res); 
-    
+          atsos->addResidual(res);
+
           dchi2 += res.residualNorm()*res.residualNorm();
           m_nDoF++;
         }
@@ -227,7 +227,7 @@ namespace Trk {
           errSq*=errSq;
 
           Residual res(HitOnly,EnergyDeposit,ParamDefs(0),residual,errSq);
-          atsos->addResidual(res);  
+          atsos->addResidual(res);
           dchi2 += res.residualNorm()*res.residualNorm();
           m_nDoF++;
         }
@@ -236,7 +236,7 @@ namespace Trk {
 
     // residuals from measurement
     if (atsos->rio() || atsos->crio()) {
-      
+
       int nparams = (atsos->measType()==TrackState::Pixel) ? 2 : 1;
       for (int iparam=0;iparam<nparams;iparam++) {
 
@@ -255,10 +255,10 @@ namespace Trk {
 
             if (m_resType == Unbiased) {
               // Get unbiased state
-              const Trk::TrackParameters * unbiasedTrackPars = 
+              const Trk::TrackParameters * unbiasedTrackPars =
                   m_updator->removeFromState(*trackPars,
                                              mesb->localParameters(),
-                                             mesb->localCovariance());
+                                             mesb->localCovariance()).release();
               if (unbiasedTrackPars) {
                 trackPars = unbiasedTrackPars;
                 // AlignTSOS desctructor takes care of deleting unbiasedTrackPars
@@ -303,11 +303,11 @@ namespace Trk {
         m_nDoF++;
       }
     }
-    return dchi2; 
+    return dchi2;
   }
 
   //________________________________________________________________________
-  void AlignResidualCalculator::accumulateScattering(const TrackStateOnSurface* tsos) 
+  void AlignResidualCalculator::accumulateScattering(const TrackStateOnSurface* tsos)
   {
 
     const MaterialEffectsOnTrack* meot       = dynamic_cast<const MaterialEffectsOnTrack*>(tsos->materialEffectsOnTrack());
@@ -322,12 +322,12 @@ namespace Trk {
     if (!dynamic_cast<const CaloEnergy*>(energyLoss)) {
       m_previousQOverP     = m_qOverP;
     }
-    
+
     return;
   }
-  
+
   //________________________________________________________________________
-  const TrackStateOnSurface* 
+  const TrackStateOnSurface*
   AlignResidualCalculator::getMatchingTSOS(const AlignTSOS* atsos, const Track* track) const
   {
     const TrackStateOnSurface* tsos(0);
@@ -341,7 +341,7 @@ namespace Trk {
         const MeasurementBase* mesb = itTsos->measurementOnTrack();
         const RIO_OnTrack* rio = dynamic_cast<const RIO_OnTrack*>(mesb);
         const CompetingRIOsOnTrack* crio = dynamic_cast<const CompetingRIOsOnTrack*>(mesb);
-        
+
         if (!rio && crio) {
           rio = &(crio->rioOnTrack(0));
         }
@@ -350,7 +350,7 @@ namespace Trk {
           ATH_MSG_DEBUG("matched TSOS with identifier: "<<rio->identify());
           tsos=itTsos;
           break;
-        } 
+        }
       }
       ATH_MSG_DEBUG("done with measurement");
     }
@@ -358,7 +358,7 @@ namespace Trk {
 
       const Amg::Vector3D origPosition=atsos->trackParameters()->position();
       double distance2(1.e27);
-      
+
       // loop over track and get closest TSOS
       for (const TrackStateOnSurface* itTsos : *track->trackStateOnSurfaces()) {
         if (itTsos->type(TrackStateOnSurface::Outlier))
@@ -372,13 +372,13 @@ namespace Trk {
           distance2=newdist2;
           tsos=itTsos;
         }
-      }      
+      }
       ATH_MSG_DEBUG("done with scatterer");
-    } 
-    if (!tsos) return 0;   
-    const Amg::Vector3D addPosition=tsos->trackParameters()->position();    
+    }
+    if (!tsos) return 0;
+    const Amg::Vector3D addPosition=tsos->trackParameters()->position();
     if (std::find(m_matchedTSOS.begin(),m_matchedTSOS.end(),tsos)==m_matchedTSOS.end()) {
-      m_matchedTSOS.push_back(tsos);       
+      m_matchedTSOS.push_back(tsos);
       ATH_MSG_DEBUG("added tsos with pos: "<<addPosition);
     }
     else {
@@ -387,5 +387,5 @@ namespace Trk {
     }
     return tsos;
   }
-    
+
 } // end namespace
diff --git a/Tracking/TrkFitter/TrkDynamicNoiseAdjustor/src/InDetDynamicNoiseAdjustment.cxx b/Tracking/TrkFitter/TrkDynamicNoiseAdjustor/src/InDetDynamicNoiseAdjustment.cxx
index 42c8248f788623422e3ce8ebb77c56400ce02dd5..a922788e05763b03e3fadd2f5e92d286750b3070 100755
--- a/Tracking/TrkFitter/TrkDynamicNoiseAdjustor/src/InDetDynamicNoiseAdjustment.cxx
+++ b/Tracking/TrkFitter/TrkDynamicNoiseAdjustor/src/InDetDynamicNoiseAdjustment.cxx
@@ -299,7 +299,7 @@ Trk::InDetDynamicNoiseAdjustment::DNA_Adjust(
 
       // Change updatedPar for step one
       const Trk::TrackParameters* clonePars1 =
-        CREATE_PARAMETERS(*updatedPar, updatedParameters1, updatedCovariance1);
+        CREATE_PARAMETERS(*updatedPar, updatedParameters1, updatedCovariance1).release();
       delete updatedPar;
       updatedPar = clonePars1;
       // --- Extrapolate changed updatedPar and calculate chi2 for step one
@@ -337,7 +337,7 @@ Trk::InDetDynamicNoiseAdjustment::DNA_Adjust(
 
       // --- Change updatedPar for step two
       const Trk::TrackParameters* clonePars2 =
-        CREATE_PARAMETERS(*updatedPar, updatedParameters2, updatedCovariance2);
+        CREATE_PARAMETERS(*updatedPar, updatedParameters2, updatedCovariance2).release();
       delete updatedPar;
       updatedPar = clonePars2;
 
diff --git a/Tracking/TrkFitter/TrkFitterUtils/src/TrackFitInputPreparator.cxx b/Tracking/TrkFitter/TrkFitterUtils/src/TrackFitInputPreparator.cxx
index f738b1e56b0c61bb939619c965db4cc6d5cd9a07..977de441fc33f07ae58efda451b4f0c1963dad1f 100755
--- a/Tracking/TrkFitter/TrkFitterUtils/src/TrackFitInputPreparator.cxx
+++ b/Tracking/TrkFitter/TrkFitterUtils/src/TrackFitInputPreparator.cxx
@@ -25,7 +25,7 @@ Trk::TrackFitInputPreparator::TrackFitInputPreparator() :
   m_sortingRefPoint(0., 0., 0.),
   m_extrapolator(nullptr)
 {
-  m_TP_ComparisonFunction 
+  m_TP_ComparisonFunction
     = new Trk::TrkParametersComparisonFunction(m_sortingRefPoint);
 }
 
@@ -33,7 +33,7 @@ Trk::TrackFitInputPreparator::TrackFitInputPreparator(const Amg::Vector3D& gp, c
   m_sortingRefPoint(gp),
   m_extrapolator(extrapolator)
 {
-  m_TP_ComparisonFunction 
+  m_TP_ComparisonFunction
     = new Trk::TrkParametersComparisonFunction(m_sortingRefPoint);
 }
 
@@ -100,7 +100,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
       MB_IndexVector::iterator itIdx = sortedHitSet.begin();
       for (; itIdx!=sortedHitSet.end(); ++itIdx) {
         bool outlier = (*inputTrk.trackStateOnSurfaces())[(*itIdx).second]->type(TrackStateOnSurface::Outlier);
-        const Trk::MeasurementBase* extractMB = 
+        const Trk::MeasurementBase* extractMB =
           ((*inputTrk.trackStateOnSurfaces())[(*itIdx).second]->measurementOnTrack());
         if (extractMB) {
             insertStateIntoTrajectory(  trajectory,
@@ -137,7 +137,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
 //                                                         (reintegrateOutliers?false:outlier),
 //                                                         false,istate++));
 //         trajectory.back().identifier(Trk::IdentifierExtractor::extract((*it)->measurementOnTrack()));
-      } 
+      }
     }
   }
 
@@ -212,7 +212,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
       for ( ; itIdx!=sortedHitSet.end(); ++itIdx) {
         if ((*itIdx).second < nInputStates ) {
           bool outlier = (*inputTrk.trackStateOnSurfaces())[(*itIdx).second]->type(TrackStateOnSurface::Outlier);
-          const Trk::MeasurementBase* extractMB = 
+          const Trk::MeasurementBase* extractMB =
             ((*inputTrk.trackStateOnSurfaces())[(*itIdx).second]->measurementOnTrack());
             if (extractMB) {
                 insertStateIntoTrajectory(  trajectory,
@@ -242,7 +242,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
     }
   }
 
-  
+
   /* if inputs are already sorted or assumed so by convention, trajectory will not
      yet have been filled. In that case, just copy linearly. */
 
@@ -276,7 +276,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
 StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
 (Trk::Trajectory& trajectory, const Trk::TrackParameters*& referenceParameters,
  const Trk::Track& inputTrk1, const Trk::Track& inputTrk2,
- const SortInputFlag doSorting, const bool reintegrateOutliers, 
+ const SortInputFlag doSorting, const bool reintegrateOutliers,
  const ParticleHypothesis&  partHypo) const
 {
   if (!trajectory.empty() ) {
@@ -347,7 +347,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
       for ( ; itIdx!=sortedHitSet.end(); ++itIdx) {
         if ((*itIdx).second < nInputStates ) { // extract from track #1
           bool outlier = (*inputTrk1.trackStateOnSurfaces())[(*itIdx).second]->type(TrackStateOnSurface::Outlier);
-          const Trk::MeasurementBase* extractMB = 
+          const Trk::MeasurementBase* extractMB =
             ((*inputTrk1.trackStateOnSurfaces())[(*itIdx).second]->measurementOnTrack());
           if (extractMB) {
             insertStateIntoTrajectory(  trajectory,
@@ -364,7 +364,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
                          << "problem with track #1" << std::endl;
         } else { // extract from track #2
           bool outlier = (*inputTrk2.trackStateOnSurfaces())[(*itIdx).second]->type(TrackStateOnSurface::Outlier);
-          const Trk::MeasurementBase* extractMB = 
+          const Trk::MeasurementBase* extractMB =
             ((*inputTrk2.trackStateOnSurfaces())[(*itIdx).second]->measurementOnTrack());
           if (extractMB) {
             insertStateIntoTrajectory(  trajectory,
@@ -384,7 +384,7 @@ StatusCode Trk::TrackFitInputPreparator::copyToTrajectory
     }
   }
 
-  
+
   /* if inputs are already sorted or assumed so by convention, trajectory will not
      yet have been filled. In that case, just copy linearly. */
 
@@ -436,7 +436,7 @@ Trk::Track* Trk::TrackFitInputPreparator::copyToTrack
   DataVector<const TrackStateOnSurface> *newListOfStates
     = new DataVector<const TrackStateOnSurface>;
   TS_iterator itStates = inputTrk.trackStateOnSurfaces()->begin();
-  for (;itStates!=inputTrk.trackStateOnSurfaces()->end();++itStates) 
+  for (;itStates!=inputTrk.trackStateOnSurfaces()->end();++itStates)
     if ( (*itStates)->type(Trk::TrackStateOnSurface::Measurement) ||
          (*itStates)->type(Trk::TrackStateOnSurface::Outlier)     ) {
       std::bitset<TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern(0);
@@ -445,7 +445,7 @@ Trk::Track* Trk::TrackFitInputPreparator::copyToTrack
         else typePattern.set(TrackStateOnSurface::Measurement);
       newListOfStates->push_back(new TrackStateOnSurface
                            ((*itStates)->measurementOnTrack()->clone(),
-                           ( (*itStates)->trackParameters()           ? 
+                           ( (*itStates)->trackParameters()           ?
                              (*itStates)->trackParameters()->clone()  :
                              nullptr ),
                            nullptr,
@@ -462,7 +462,7 @@ Trk::Track* Trk::TrackFitInputPreparator::copyToTrack
   }
 
   if (doSorting) {
-    Trk::TrackStateOnSurfaceComparisonFunction* CompFunc = 
+    Trk::TrackStateOnSurfaceComparisonFunction* CompFunc =
       new Trk::TrackStateOnSurfaceComparisonFunction
       ( (*inputTrk.trackParameters()->begin())->momentum() ) ;
     if(!__gnu_cxx::is_sorted(newListOfStates->begin(),newListOfStates->end(), *CompFunc))
@@ -484,12 +484,12 @@ Trk::MeasurementSet Trk::TrackFitInputPreparator::stripMeasurements
   MeasurementSet newMbSet;
   // collect MBs from Track (speed: assume use for extending track at end)
   DataVector<const MeasurementBase>::const_iterator it
-    = inputTrk.measurementsOnTrack()->begin(); 
-  for ( ; it!=inputTrk.measurementsOnTrack()->end(); ++it) 
+    = inputTrk.measurementsOnTrack()->begin();
+  for ( ; it!=inputTrk.measurementsOnTrack()->end(); ++it)
     if ((*it)) newMbSet.push_back ( *it );
   // add MBs from input list
   MeasurementSet::const_iterator itSet    = inputMbs.begin();
-  for ( ; itSet!=inputMbs.end(); ++itSet) 
+  for ( ; itSet!=inputMbs.end(); ++itSet)
     if ((*itSet)) newMbSet.push_back ( *itSet );
   return newMbSet;
 
@@ -547,7 +547,7 @@ void Trk::TrackFitInputPreparator::insertStateIntoTrajectory(Trajectory& traject
                             bool  isOutlier,
                             bool  ownsMeasurement,
                             const TrackParameters* initialParameters,
-                            const ParticleHypothesis&  partHypo ) const {    
+                            const ParticleHypothesis&  partHypo ) const {
     const TrackParameters* trkPar = nullptr;
     Trk::ProtoMaterialEffects* matEffOnMeasurementSurface = nullptr;
     //std::cout << "InputPrep: partHypo:" << partHypo << std::endl;
@@ -556,7 +556,9 @@ void Trk::TrackFitInputPreparator::insertStateIntoTrajectory(Trajectory& traject
         if (!trajectory.empty()) {
             /// get previous state:
             const TrackParameters* prevPar = trajectory.back().referenceParameters();
-            if (prevPar->covariance()) prevPar = CREATE_PARAMETERS(*prevPar,prevPar->parameters(),nullptr);
+            if (prevPar->covariance()) {
+              prevPar = CREATE_PARAMETERS(*prevPar,prevPar->parameters(),nullptr).release();
+            }
             const std::vector< const Trk::TrackStateOnSurface * >* collectedTSOS = m_extrapolator->extrapolateM(
                         *prevPar,
                         measurement->associatedSurface(),
@@ -567,7 +569,7 @@ void Trk::TrackFitInputPreparator::insertStateIntoTrajectory(Trajectory& traject
                         //Trk::pion   // FIXME: decide on particle hypothesis to use!
                         //track->info().particleHypothesis()
             );
-            if (trajectory.back().referenceParameters()->covariance()) delete prevPar; // balance CREATE_PARS from a few lines earlier 
+            if (trajectory.back().referenceParameters()->covariance()) delete prevPar; // balance CREATE_PARS from a few lines earlier
             if (collectedTSOS) {
                 // copy into ProtoTrackStateOnSurface for memory management, ignoring the last:
                 for (unsigned int i = 0 ; i < collectedTSOS->size() -1; i++) {
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
index 75da53b5eca7e3e960b994fc2cd39c7774e412be..d4679bc2c6b27cb1709043799dca6ec6c8c28837 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx
@@ -644,7 +644,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip
         (*cov)(i,i) = cov0[i];
       }
     }
-    updatedPar = CREATE_PARAMETERS(*predPar,par,cov);
+    updatedPar = CREATE_PARAMETERS(*predPar,par,cov).release();
     fitQuality = new Trk::FitQuality(0.0, fittableMeasurement->localParameters().dimension());
   } else {
 
@@ -653,7 +653,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip
     // make the update
     updatedPar = m_updator->addToState(*predPar, fittableMeasurement->localParameters(),
                                        fittableMeasurement->localCovariance(),
-                                       fitQuality);
+                                       fitQuality).release();
     ////////////////////////////////////////////////////////////////////
     // check that updated parameters are ok and write back to trajectory
     if (!updatedPar) {
@@ -692,7 +692,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip
       // make the update
       updatedPar = m_updator->addToState(*predPar, fittableMeasurement->localParameters(),
                                          fittableMeasurement->localCovariance(),
-                                         fitQuality);
+                                         fitQuality).release();
       if ( (!updatedPar || !fitQuality ||
            (runOutlier && fitQuality->chiSquared() > m_StateChiSquaredPerNumberDoFPreCut
             * fitQuality->numberDoF())) ) {
@@ -806,7 +806,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::enterSeedIntoTrajectory
   for (int i=0; i<5; ++i) (*cov)(i,i) = cov0[i];
   const AmgVector(5)& par = inputParAtStartSurface->parameters();
   // TODO: check does one need covariance here?
-  const Trk::TrackParameters* seedPar = CREATE_PARAMETERS((*inputParAtStartSurface),par, cov);
+  const Trk::TrackParameters* seedPar = CREATE_PARAMETERS((*inputParAtStartSurface),par, cov).release();
   if (inputParAtStartSurface != &inputPar) delete inputParAtStartSurface;
   ffs->checkinForwardPar(seedPar);
   ATH_MSG_VERBOSE ("-Fe prepared trajectory with seed parameters on state "<<ffs->positionOnTrajectory());
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx
index 518c583434ff587d6099e3d5c06890f6cedc9669..2f87613e65c79c26a3719ef0d54b0b2459c2fe23 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx
@@ -64,7 +64,7 @@ Trk::ForwardRefTrackKalmanFitter::ForwardRefTrackKalmanFitter(const std::string&
 {
   // AlgTool stuff
   declareInterface<IForwardKalmanFitter>( this );
-  
+
   // declare all properties needed to configure fitter, defaults
   declareProperty("StateChi2PerNDFPreCut", m_StateChiSquaredPerNumberDoFPreCut=50.f,
                   "coarse pre-cut on the predicted state's chi2/ndf against outliers destabilising the filter - only in effect if called with runOutlier true");
@@ -91,7 +91,7 @@ StatusCode Trk::ForwardRefTrackKalmanFitter::finalize()
   ATH_MSG_INFO ("finalize() successful in " << name());
   return StatusCode::SUCCESS;
 }
-		
+
 ////////////////////////////////////////////////////////////////////////////////
 //                                                                            //
 // configure the Forward Filter
@@ -114,7 +114,7 @@ StatusCode Trk::ForwardRefTrackKalmanFitter::configureWithTools(const Trk::IExtr
   m_ROTcreator   = rot_crea;
   m_dynamicNoiseAdjustor = dna;
   m_recalibrator = mr;
-  
+
   // protection, if not confiured
   if (!m_updator) {
     ATH_MSG_ERROR ("Updator missing, need to configure with it !");
@@ -126,9 +126,9 @@ StatusCode Trk::ForwardRefTrackKalmanFitter::configureWithTools(const Trk::IExtr
   }
   msg(MSG::INFO) << "Configuring " << name() << " with tools from KalmanFitter:" << endmsg;
   msg(MSG::INFO) << "Updator and Extrapolator    - present" << endmsg;
-  msg(MSG::INFO) << "Dyn.NoiseAdjustment Pix/SCT - " 
+  msg(MSG::INFO) << "Dyn.NoiseAdjustment Pix/SCT - "
         << (m_dynamicNoiseAdjustor? "present" : "none") << endmsg;
-  msg(MSG::INFO) << "General RIO_OnTrackCreator  - " 
+  msg(MSG::INFO) << "General RIO_OnTrackCreator  - "
         << (m_ROTcreator? "present" : "none") << endmsg;
   msg(MSG::INFO) << "RIO_OnTrack Recalibrator    - " << (m_recalibrator?"present":"none")<<endmsg;
   return StatusCode::SUCCESS;
@@ -141,7 +141,7 @@ StatusCode Trk::ForwardRefTrackKalmanFitter::configureWithTools(const Trk::IExtr
 //                                                                            //
 ////////////////////////////////////////////////////////////////////////////////
 
-Trk::FitterStatusCode 
+Trk::FitterStatusCode
 Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory&,
                                       const Trk::PrepRawDataSet& ,
                                       const Trk::TrackParameters& ,
@@ -187,8 +187,8 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
 //       testIt = m_utility->nextFittableState(trajectory,it);
 //     }
   }
-  ATH_MSG_VERBOSE ("-F- start FwFilter with parameters from "<< 
-                   (filterStartState>2 ? "before this new Outlier state":"the seed") 
+  ATH_MSG_VERBOSE ("-F- start FwFilter with parameters from "<<
+                   (filterStartState>2 ? "before this new Outlier state":"the seed")
                    << " at pos. " << it->positionOnTrajectory() << " filter start state " << filterStartState);
 
   if (!it->parametersDifference() || !it->referenceParameters()) {
@@ -233,11 +233,11 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
       predDiffCov = C; // to solve constness problem
       // back into trajectory
       it->checkinParametersDifference(predDiffPar);
-      it->checkinParametersCovariance(predDiffCov); 
+      it->checkinParametersCovariance(predDiffCov);
       updatedDifference.reset();
       // delete updatedDiffCov; updatedDiffCov=0;
     }
-    if (msgLvl(MSG::DEBUG)) 
+    if (msgLvl(MSG::DEBUG))
       printGlobalParams( it->positionOnTrajectory(), " extrp",
                          *it->referenceParameters(),*predDiffPar );
 
@@ -261,7 +261,6 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
             m_recalibrator->calibrationStatus(*it->measurement(),TrackState::TRT) );
         fittableMeasurement = it->measurement();
 	ATH_MSG_VERBOSE ("TRT ROT calibration changed, from "<<oldType<<" to "<<it->calibrationType());
-        delete param;
       }
 
       Trk::FitQualityOnSurface* fitQS=nullptr;
@@ -289,7 +288,7 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
       // analyse the fit quality, possibly flag as outlier
       if ( runOutlier && fitQS->chiSquared() >  m_StateChiSquaredPerNumberDoFPreCut
            * fitQS->numberDoF() ) {
-          
+
         // allow making of wire-hits for TRT fits with L/R-solving on the fly
         if ( m_recalibrator && it->measurementType() == TrackState::TRT) {
           const AmgVector(5) x = it->referenceParameters()->parameters()+(*predDiffPar);
@@ -304,9 +303,9 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
             fittableMeasurement = it->measurement();
 	    ATH_MSG_VERBOSE ("TRT ROT calibration changed, from "<<oldType<<" to broad hit "<<
                            it->calibrationType()<< " instead of outlier");
-            delete fitQS; 
+            delete fitQS;
             fitQS=nullptr;
-            updatedDifference.reset( 
+            updatedDifference.reset(
               m_updator->updateParameterDifference(*predDiffPar, *predDiffCov,
                                                    *(it->measurementDifference()),
                                                    fittableMeasurement->localCovariance(),
@@ -320,8 +319,7 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
               it->isOutlier(Trk::TrackState::StateOutlier);
             }
           }
-          //delete param;
-        } else {     
+        } else {
           ATH_MSG_DEBUG ( "failed Chi2 test, remove measurement from track fit." );
           it->isOutlier ( Trk::TrackState::StateOutlier );
         }
@@ -329,7 +327,7 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
                  && (*predDiffCov)(Trk::phi,Trk::phi)   < 0.01*0.01
                  && (*predDiffCov)(Trk::theta,Trk::theta) < 0.01*0.01
 	         && ! ( Trk::SensorBoundsCheck::areParamsInside
-                          ( *fittableMeasurement, 
+                          ( *fittableMeasurement,
                             (it->referenceParameters()->parameters()+updatedDifference->first),
                             updatedDifference->second, 5.0, 4.0 ) ) ) {
         ATH_MSG_DEBUG ( "failed track-within-sensor test, remove measurement from fit." );
@@ -357,7 +355,7 @@ Trk::ForwardRefTrackKalmanFitter::fit(Trk::Trajectory& trajectory,
         delete fitQS;
       }
     }
-    // bremStateIfBremFound = NULL; 
+    // bremStateIfBremFound = NULL;
 
     // extract jacobian which is the one to transport from this to next state
     jacobian = it->jacobian();
@@ -390,7 +388,7 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
 
 
   Trk::Trajectory::iterator ffs = m_utility->firstFittableState(trajectory);
-  
+
   if (createReferenceTrajectory && ffs->jacobian()) {
     ATH_MSG_WARNING ("internal mistake: reference parameters should be recreated only on"<<
                      " EMPTY trajectory.");
@@ -408,7 +406,7 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
   }
   const Trk::Surface& startSurface = ffs->measurement()->associatedSurface();
   const Trk::TrackParameters* inputParAtStartSurface = nullptr;
- 
+
   // chk if TPar are already in correct local frame: first pointer check (quick) then geometric
   if ( &startSurface ==  &inputPar.associatedSurface() ||
        startSurface == inputPar.associatedSurface() ) {
@@ -455,9 +453,9 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
 
     // lazy initialization because the tracking geometry is built after conditions are there
     Trk::MagneticFieldProperties useFullField(Trk::FullField);
-    if (m_idEnclosingVolume == nullptr ) m_idEnclosingVolume = 
+    if (m_idEnclosingVolume == nullptr ) m_idEnclosingVolume =
       m_extrapolator->trackingGeometry()->trackingVolume("InDet::Containers::InnerDetector");
-    if (m_msCompleteVolume == nullptr )  m_msCompleteVolume = 
+    if (m_msCompleteVolume == nullptr )  m_msCompleteVolume =
       m_extrapolator->trackingGeometry()->trackingVolume("All::Container::CompleteDetector");
     if (m_idEnclosingVolume==nullptr && m_msCompleteVolume == nullptr) {
       ATH_MSG_WARNING ("Could not get any detector enclosing volume from tracking geometry.");
@@ -466,32 +464,32 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
     const IPropagator* propagator = nullptr;
     bool  isInsideID = true;
     if (m_idEnclosingVolume && m_idEnclosingVolume->inside(inputParAtStartSurface->position())) {
-      ATH_MSG_VERBOSE ("subPropagator detection: found id volume of signature ID " << 
+      ATH_MSG_VERBOSE ("subPropagator detection: found id volume of signature ID " <<
       (unsigned int)m_idEnclosingVolume->geometrySignature());
       propagator = m_extrapolator->subPropagator(*m_idEnclosingVolume);
     } else if (m_msCompleteVolume) {
       propagator = m_extrapolator->subPropagator(*m_msCompleteVolume);
       isInsideID = false;
-      ATH_MSG_VERBOSE ("subPropagator detector: found MS enclosing volume with signature ID " << 
+      ATH_MSG_VERBOSE ("subPropagator detector: found MS enclosing volume with signature ID " <<
                        (unsigned int)m_msCompleteVolume->geometrySignature());
     } else {
       ATH_MSG_WARNING ("No way to get the correct propagator!");
       return FitterStatusCode::BadInput;
     }
 
-    auto lastPropagatedPar = 
+    auto lastPropagatedPar =
       CREATE_PARAMETERS((*inputParAtStartSurface),
                         inputParAtStartSurface->parameters(), nullptr); // remove covariance
     for (auto it=m_utility->firstFittableState ( trajectory ); it!=trajectory.end(); ++it) {
       if (!it->referenceParameters()) {
         //gives up ownership by default, ProtoTrackStateOnSurface takes care of deletion
-        it->checkinReferenceParameters (lastPropagatedPar);
+        it->checkinReferenceParameters (lastPropagatedPar.release());
       } else {
         //delete lastPropagatedPar; lastPropagatedPar=nullptr;
         // FIXME study this further, whether cov really not needed and how close in param
         // space the old and new references are.
         ATH_MSG_VERBOSE("At state T"<<it->positionOnTrajectory()<<" have already reference.");
-        if (it->referenceParameters()->covariance()) 
+        if (it->referenceParameters()->covariance())
           ATH_MSG_DEBUG("Warning - reference parameters have a covariance, which is unnecessary.");
       }
       if ((it+1) == trajectory.end()) break; // no jacobian beyond last trajectory state
@@ -501,7 +499,7 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
 	isInsideID = false;
         propagator = m_extrapolator->subPropagator(*m_msCompleteVolume);
         ATH_MSG_DEBUG ("changed from ID to MS propagator.");
-      } else if (!isInsideID && m_idEnclosingVolume 
+      } else if (!isInsideID && m_idEnclosingVolume
                  && m_idEnclosingVolume->inside(nextSurface.center())) {
         isInsideID = true;
         propagator = m_extrapolator->subPropagator(*m_idEnclosingVolume);
@@ -515,14 +513,13 @@ Trk::FitterStatusCode Trk::ForwardRefTrackKalmanFitter::enterSeedIntoTrajectory
       }
       lastPropagatedPar = propagator->propagate(*it->referenceParameters(),
                                                 nextSurface,
-                                                Trk::anyDirection, 
+                                                Trk::anyDirection,
                                                 /*bcheck=*/ false,
                                                 useFullField,jac, pathLimit,
-                                                controlledMatEffects.particleType() ).release();
+                                                controlledMatEffects.particleType() );
       if (!jac || !lastPropagatedPar) {
         ATH_MSG_WARNING ("lost reference track while propagating.");
         delete jac;
-        //delete lastPropagatedPar;
         return FitterStatusCode::BadInput;
       }
       it->checkinTransportJacobian(jac,true);
@@ -544,7 +541,7 @@ void Trk::ForwardRefTrackKalmanFitter::printGlobalParams(int istate, const std::
   const AmgVector(5) x = ref.parameters()+diff;
   auto param = CREATE_PARAMETERS(ref,x,nullptr);
   char tt[80]; snprintf(tt,79,"T%.2d",istate);
-  msg(MSG::VERBOSE) << tt << ptype << " GP:" 
+  msg(MSG::VERBOSE) << tt << ptype << " GP:"
         << std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right )
         << std::setw(9) << std::setprecision(2) << param->position()[0]
         << std::setw(9) << std::setprecision(2) << param->position()[1]
@@ -554,5 +551,4 @@ void Trk::ForwardRefTrackKalmanFitter::printGlobalParams(int istate, const std::
         << std::setw(8) << std::setprecision(0) << param->momentum()[1]
         << std::setw(8) << std::setprecision(0) << param->momentum()[2]
         << std::setprecision(6) << endmsg;
-  delete param;
 }
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
index c1293717fd595848baf7787242576c98530c5c1c..b25a0d97493f615071bd4a5cbbc1c611e7c38d79 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
@@ -82,9 +82,9 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n,
   m_chiSquaredAfb{}, m_chiSquaredAfbNontriviality{}
 {
   declareInterface<ITrackFitter>( this );
-  
+
   m_trajectory.reserve(100);
-  
+
   // --- tools used by KalmanFitter, passed as ToolHandles
   declareProperty("ExtrapolatorHandle",m_extrapolator,
                   "Extrapolation tool for transporting track pars and handling material effects");
@@ -143,7 +143,7 @@ StatusCode Trk::KalmanFitter::initialize()
 {
   //AthAlgTool::initialize().ignore();
   m_log.setLevel(msgLevel());            // individual outputlevel not known before initialise
-  
+
   // get all the track fitter sub-tools (REQUIRED tools, obviously)
   ATH_CHECK(m_forwardFitter.retrieve());
   ATH_CHECK(m_smoother.retrieve());
@@ -168,7 +168,7 @@ StatusCode Trk::KalmanFitter::initialize()
     ATH_MSG_FATAL ("can not retrieve extrapolator of type " << m_extrapolator.typeAndName());
     return StatusCode::FAILURE;
   } ATH_MSG_INFO ("retrieved tool " << m_extrapolator.typeAndName());
-  
+
   // --- get ROT creator (OPTIONAL tool)
   if (!m_ROTcreator.empty()) {
     if (m_ROTcreator.retrieve().isFailure()) {
@@ -263,13 +263,13 @@ StatusCode Trk::KalmanFitter::initialize()
                                                   (&(*m_extrapolator)) : nullptr);
 
   // configure internal DAF
-  if (!m_internalDAF.empty() && 
+  if (!m_internalDAF.empty() &&
       m_internalDAF->configureWithTools((!m_extrapolator.empty()?(&(*m_extrapolator)):nullptr),
                                         (!m_updator.empty()?(&(*m_updator)):nullptr),
                                         (!m_recalibrator.empty()?(&(*m_recalibrator)):nullptr),
                                         m_utility                                       ).isFailure()) {
     ATH_MSG_WARNING ("failure while configuring internal DAF!");
-    ATH_MSG_INFO ("debugging info: ex = " << m_extrapolator << " up = " << m_updator << 
+    ATH_MSG_INFO ("debugging info: ex = " << m_extrapolator << " up = " << m_updator <<
 		  " rc " << m_recalibrator<<" ut = " << m_utility);
     return StatusCode::FAILURE;
   }
@@ -338,7 +338,7 @@ StatusCode Trk::KalmanFitter::initialize()
   }
   ATH_MSG_INFO ("Initial covariance, set with the KF: " << m_cov0);
 
-  
+
   std::vector<int> statVec(nStatIndex, 0);
   m_fitStatistics.resize(nFitStatsCodes, statVec);
   m_chiSquaredAfb.fill(0.);
@@ -353,7 +353,7 @@ StatusCode Trk::KalmanFitter::finalize()
   delete m_tparScaleSetter;
   delete m_utility;
   delete m_inputPreparator;
-  
+
   if (msgLvl(MSG::INFO)) {
     std::stringstream ss;
     int iw=9;
@@ -395,7 +395,7 @@ StatusCode Trk::KalmanFitter::finalize()
     ss << "-------------------------------------------------------------------------------\n";
     ATH_MSG_INFO (name() << "'s fit statistics:\n"<<ss.str());
   }
-  
+
   ATH_MSG_INFO ("finalize() successful in " << name());
   return StatusCode::SUCCESS;
 }
@@ -430,11 +430,11 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     DataVector<const TrackParameters>::const_iterator it
       = inputTrack.trackParameters()->begin();
     for(int i=0 ; it!=inputTrack.trackParameters()->end(); ++it, ++i) {
-      ATH_MSG_VERBOSE( "TrackPar" << (i<10 ? "  " : " ") << i 
+      ATH_MSG_VERBOSE( "TrackPar" << (i<10 ? "  " : " ") << i
             << " position mag : " << (*it)->position().mag()
             << ", to ref is " << ((*it)->position()-m_sortingRefPoint).mag());
     }
-    ATH_MSG_VERBOSE( "Now getting track parameters near origin " 
+    ATH_MSG_VERBOSE( "Now getting track parameters near origin "
                      << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)"));
   }
   // fill internal trajectory through external preparator class
@@ -461,7 +461,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     this_eta = minPar->eta();
     monitorTrackFits( Trk::KalmanFitter::Call, this_eta );
   }
-  
+
   // --- perform first forward filter on measurement set extracted from track
   ATH_MSG_VERBOSE ("\n***** call forward kalman filter, iteration # 1 *****\n");
   if (m_forwardFitter->enterSeedIntoTrajectory(m_trajectory,*minPar,m_cov0,kalMec,true)
@@ -481,7 +481,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     m_trajectory.clear();
     if (!fittedTrack) delete fitQual;
     return std::unique_ptr<Trk::Track>(fittedTrack);
-  } 
+  }
     delete fitQual;
     m_trajectory.clear();
     // iterations failed:
@@ -495,7 +495,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     }
     ATH_MSG_DEBUG( "fit(track) during iterations failed." );
     return nullptr;
-  
+
 }
 
 
@@ -571,11 +571,11 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     m_trajectory.clear();
     if (!fittedTrack) delete fitQual;
     return std::unique_ptr<Trk::Track>(fittedTrack);
-  } 
+  }
     delete fitQual;
     m_trajectory.clear();
     return nullptr;
-  
+
 }
 
 // fit a set of MeasurementBase objects
@@ -617,13 +617,13 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
       MeasurementSet::const_iterator it1    = sortedHitSet.begin();
       MeasurementSet::const_iterator it1End = sortedHitSet.end();
       for( ; it1!=it1End; ++it1) {
-	      ATH_MSG_VERBOSE( "-K- globalPos() magnitude is " 
+	      ATH_MSG_VERBOSE( "-K- globalPos() magnitude is "
 	      << (*it1)->globalPosition().mag() << ", transverse r "
 	      << (*it1)->globalPosition().perp() );
       }
     }
     delete MeasB_CompFunc;
-    
+
     // fill measurements into fitter-internal trajectory: no outlier, external meas't
     MeasurementSet::const_iterator it    = sortedHitSet.begin();
     MeasurementSet::const_iterator itEnd = sortedHitSet.end();
@@ -645,7 +645,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     this_eta = estimatedStartParameters.eta();
     monitorTrackFits( Trk::KalmanFitter::Call, this_eta );
   }
-  
+
     ATH_MSG_VERBOSE( "These TrackPars are chosen as seed: "<<estimatedStartParameters);
 
   /* --- perform first forward filter on measurement set. Assume that clients who
@@ -671,7 +671,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     m_trajectory.clear();
     if (!fittedTrack) delete fitQual;
     return std::unique_ptr<Trk::Track>(fittedTrack);
-  } 
+  }
     if (fitQual) delete fitQual;
     m_trajectory.clear();
     // iterations failed:
@@ -685,7 +685,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     }
     ATH_MSG_DEBUG( "fit(vec<MB>) during iteration failed." );
     return nullptr;
-  
+
 }
 
 // extend a track fit to include an additional set of PrepRawData objects
@@ -700,7 +700,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
   m_fitStatus = Trk::FitterStatusCode::BadInput;
   ATH_MSG_VERBOSE ("--> enter KalmanFitter::fit(Track,PrdSet,,)");
   ATH_MSG_VERBOSE ("    with Track from author = " << inputTrack.info().dumpInfo());
-  
+
   // protection, if empty PrepRawDataSet
   if (addPrdColl.empty()) {
     ATH_MSG_WARNING ("client tries to add an empty PrepRawDataSet to the track fit.");
@@ -709,7 +709,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
 
   /*  determine the Track Parameter which is the start of the trajectory,
       i.e. closest to the reference point */
-  ATH_MSG_VERBOSE ("get track parameters near origin " 
+  ATH_MSG_VERBOSE ("get track parameters near origin "
                    << (m_option_enforceSorting? "via STL sort" : "from 1st state"));
   const TrackParameters* estimatedStartParameters = m_option_enforceSorting
     ?  *(std::min_element(inputTrack.trackParameters()->begin(),
@@ -719,12 +719,12 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
 
 
   // use external preparator class to prepare PRD set for fitter interface
-  PrepRawDataSet orderedPRDColl = 
+  PrepRawDataSet orderedPRDColl =
     m_inputPreparator->stripPrepRawData(inputTrack,addPrdColl,m_option_enforceSorting,
                                         true /* do not lose outliers! */);
   std::unique_ptr<Trk::Track> fittedTrack =
     fit(ctx, orderedPRDColl, *estimatedStartParameters, runOutlier, matEffects);
-  const TrackInfo& existingInfo = inputTrack.info(); 
+  const TrackInfo& existingInfo = inputTrack.info();
   if (fittedTrack) fittedTrack->info().addPatternRecoAndProperties(existingInfo);
   return fittedTrack;
 }
@@ -743,7 +743,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
   m_fitStatus = Trk::FitterStatusCode::BadInput;
   ATH_MSG_VERBOSE ("--> enter KalmanFitter::fit(Track,Meas'BaseSet,,)");
   ATH_MSG_VERBOSE ("    with Track from author = " << inputTrack.info().dumpInfo());
-  
+
   // protection, if empty MeasurementSet
   if (addMeasColl.empty()) {
     ATH_MSG_WARNING( "client tries to add an empty MeasurementSet to the track fit." );
@@ -804,7 +804,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     m_trajectory.clear();
     if (!fittedTrack) delete fitQual;
     return std::unique_ptr<Trk::Track>(fittedTrack);
-  } 
+  }
     delete fitQual;
     fitQual = nullptr;
     m_trajectory.clear();
@@ -821,7 +821,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     }
     ATH_MSG_DEBUG ("fit(track,vec<MB>) during iteration failed.");
     return nullptr;
-  
+
 }
 
 // combined fit of two tracks
@@ -835,7 +835,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
 {
   m_fitStatus = Trk::FitterStatusCode::BadInput;
   ATH_MSG_VERBOSE ("--> enter KalmanFitter::fit(Track,Track,)");
-  ATH_MSG_VERBOSE ("    with Tracks from #1 = " << intrk1.info().dumpInfo() 
+  ATH_MSG_VERBOSE ("    with Tracks from #1 = " << intrk1.info().dumpInfo()
                    << " and #2 = " << intrk2.info().dumpInfo());
 
   // protection against not having measurements on the input tracks
@@ -848,7 +848,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
 
   /*  determine the Track Parameter which is the start of the trajectory,
       i.e. closest to the reference point */
-  ATH_MSG_VERBOSE( "get track parameters near origin " 
+  ATH_MSG_VERBOSE( "get track parameters near origin "
                               << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)"));
   if (!intrk1.trackParameters() || intrk1.trackParameters()->empty()) {
     ATH_MSG_WARNING( "input #1 fails to provide track parameters for seeding the "
@@ -858,7 +858,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
 
   // fill internal trajectory through external preparator class
   const TrackParameters* minPar = nullptr;
-  if (m_inputPreparator->copyToTrajectory(m_trajectory, minPar, 
+  if (m_inputPreparator->copyToTrajectory(m_trajectory, minPar,
                                           intrk1,intrk2,m_option_enforceSorting,
                                           m_option_reintegrateOutliers, matEffects)
       == StatusCode::FAILURE) {
@@ -882,7 +882,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
     this_eta = minPar->eta();
     monitorTrackFits( Trk::KalmanFitter::Call, this_eta );
   }
-  
+
   // --- perform first forward filter on measurement set extracted from track
   if (m_forwardFitter->enterSeedIntoTrajectory(m_trajectory,*minPar,m_cov0,kalMec,true)
       != Trk::FitterStatusCode::Success) return nullptr;
@@ -901,10 +901,10 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
       makeTrack(ctx, fitQual, *minPar, &kalMec, this_eta, &(intrk1.info()));
     m_trajectory.clear();
     if (!fittedTrack) delete fitQual;
-    const TrackInfo& existingInfo2 = intrk2.info(); 
+    const TrackInfo& existingInfo2 = intrk2.info();
     if (fittedTrack) fittedTrack->info().addPatternReco(existingInfo2);
     return std::unique_ptr<Trk::Track>(fittedTrack);
-  } 
+  }
     delete fitQual;
     m_trajectory.clear();
     // iterations failed:
@@ -917,7 +917,7 @@ Trk::KalmanFitter::fit(const EventContext& ctx,
         m_callValidationTool = false;
     }
     return nullptr;
-  
+
 }
 
 // Main internal iteration logic for all interfaces:
@@ -965,7 +965,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
     // run backward smoother
     if (m_forwardFitter->needsReferenceTrajectory())
       m_fitStatus = m_smoother->fitWithReference(m_trajectory, newFitQuality, kalMec);
-    else 
+    else
       m_fitStatus = m_smoother->fit(m_trajectory, newFitQuality, kalMec);
     // call validation tool if provided
     if (m_callValidationTool)
@@ -986,7 +986,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
     if (m_option_doValidationAction) m_extrapolator->validationAction();
 
     if (nOutlierIterations==1 && !m_utility->trajectoryHasMefot(m_trajectory)
-        && !m_brempointAnalyser.empty() 
+        && !m_brempointAnalyser.empty()
         && !kalMec.aggressiveDNA()
         && kalMec.breakpointType()==Trk::BreakpointNotSpecified ) {
       kalMec.updateBreakpoint(Trk::NoBreakpoint);
@@ -1040,11 +1040,11 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
       if (newFitQuality == nullptr || newFitQuality->numberDoF() <= 0) {
         fitter_is_ready = false;
       } else {
-        fitter_is_ready = 
+        fitter_is_ready =
           !m_outlierLogic->flagNewOutliers( m_trajectory,*newFitQuality,
                                             iFilterBeginState,nOutlierIterations );
         if (!m_outlierRecovery.empty()) {
-          bool nothingToRecover = 
+          bool nothingToRecover =
             !m_outlierRecovery->flagNewOutliers( m_trajectory,*newFitQuality,
                                                  iFilterBeginState,nOutlierIterations );
           ATH_MSG_DEBUG("have outlier-recovery tool, this "<<
@@ -1058,8 +1058,8 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
 
       if (msgLvl(MSG::DEBUG)) m_utility->dumpTrajectory(m_trajectory, name());
       bool fit_has_failed =
-        ( newFitQuality==nullptr 
-	  || newFitQuality->numberDoF() <=0 
+        ( newFitQuality==nullptr
+	  || newFitQuality->numberDoF() <=0
           || ( (m_utility->numberOfOutliers(m_trajectory)-nPreviousOutliers)> 0.4*m_trajectory.size())
           || nOutlierIterations >= m_option_max_N_iterations
           || m_utility->rankedNumberOfMeasurements(m_trajectory) < 5);
@@ -1088,7 +1088,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
         if ( (nMeasPrecise+nMeasTube+nOutlPrecise+nOutlTube) > 12
 	     && ( ( (nOutlPrecise+nOutlTube) > 7 && nOutlierIterations >= m_option_max_N_iterations-1)
 		  || (m_utility->numberOfNewOutliers(m_trajectory,posFirstTrt)>3
-		      && nOutlierIterations >= m_option_max_N_iterations-1) 
+		      && nOutlierIterations >= m_option_max_N_iterations-1)
 		  || (nOutlierIterations >= m_option_max_N_iterations
 		      && m_trajectory.size()>20) )) {
           m_fitStatus = Trk::FitterStatusCode::NoConvergence;
@@ -1118,7 +1118,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const EventContext& ctx,
         return false;
       }
     } // end dna-separation skips outliers
-    
+
   } // end loop over outliers
   return true;
 }
@@ -1135,7 +1135,7 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*&  star
   if ( runOutlier && !m_internalDAF.empty() ) {
 
     // --- There is an alternative: perform enhanced local pattern recognition (DAF)
-    
+
     bool instable_filter = (m_fitStatus == Trk::FitterStatusCode::UpdateFailure)
       ||                   (m_fitStatus == Trk::FitterStatusCode::FitQualityFailure)
       ||                   (m_fitStatus == Trk::FitterStatusCode::ExtrapolationFailure)
@@ -1151,18 +1151,18 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*&  star
       double chi2_AFB = 0.0;
       if (newFitQuality != nullptr) {
         Trk::FitQuality ffq = m_utility->forwardFilterQuality(m_trajectory);
-        chi2_AFB = (ffq.chiSquared() - newFitQuality->chiSquared()) / 
+        chi2_AFB = (ffq.chiSquared() - newFitQuality->chiSquared()) /
           (ffq.chiSquared() + newFitQuality->chiSquared());
       }
       unsigned int count_trt = m_utility->numberOfSpecificStates(m_trajectory,Trk::TrackState::TRT,Trk::TrackState::AnyState);
       found_problematic_seed = m_trajectory.size() < 25 && // don't continue iterating on long tracks
-        count_trt<0.9*m_trajectory.size() && 
+        count_trt<0.9*m_trajectory.size() &&
         (m_utility->numberOfNewOutliers(m_trajectory,6) > 1 ||
          (chi2_AFB > 0.1 && m_trajectory.size()<18) /*FKF returned w/ more problems*/ );
     }
 
     if (instable_filter || found_problematic_seed) {
-      
+
       // --- prepare trajectory for running DAF as outlier and driftcircle-R-L logic
       m_utility->defineMeasurementsExceptThis(m_trajectory,0);
       m_utility->clearFitResultsAfterOutlier(m_trajectory,newFitQuality,0);
@@ -1170,12 +1170,12 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*&  star
 
       FitterStatusCode dafStatus = Trk::FitterStatusCode::OutlierLogicFailure;
       if (m_forwardFitter->enterSeedIntoTrajectory(m_trajectory,*startPar,m_cov0,kalMec,false)
-          == Trk::FitterStatusCode::Success) 
+          == Trk::FitterStatusCode::Success)
         dafStatus = m_internalDAF->filterTrajectory(m_trajectory, kalMec.particleType());
         // remark: there is also an interface for running the DAF on a *part of* the
         // trajectory, intended for TRT, ID, MS subparts of combined tracks
 
-      if (dafStatus == Trk::FitterStatusCode::Success) { 
+      if (dafStatus == Trk::FitterStatusCode::Success) {
 
         ATH_MSG_VERBOSE("internal DAF succeeded, now going back to std fit by running one backward smoother.");
         kalMec.updateBreakpoint(Trk::BreakpointNotSpecified);
@@ -1190,8 +1190,8 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*&  star
             else                  ATH_MSG_INFO( "Problem - no FitQ % ");
           }
         }
-      } 
-          
+      }
+
       bool successfulRecovery  = newFitQuality!= nullptr
         && dafStatus==Trk::FitterStatusCode::Success
         && m_utility->rankedNumberOfMeasurements(m_trajectory) >= 5
@@ -1201,10 +1201,10 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*&  star
         if (msgLvl(MSG::INFO)) monitorTrackFits( InternalDafUsed, this_eta );
         m_fitStatus = Trk::FitterStatusCode::Success;
         return true;
-      } 
+      }
         ATH_MSG_DEBUG ("intDAF called, but to no good!");
         if (msgLvl(MSG::INFO)) monitorTrackFits( DafNoImprovement, this_eta );
-      
+
     }
   }
 
@@ -1240,7 +1240,7 @@ bool Trk::KalmanFitter::prepareNextIteration(const unsigned int& upcomingIterati
   double Chi2FilterAfb = 0.0;
   if (FQ  != nullptr) {
     for (Trk::Trajectory::const_iterator it=m_trajectory.begin(); it!=m_trajectory.end(); it++)
-      if ( !it->isOutlier() || 
+      if ( !it->isOutlier() ||
            (it->trackStateType() != Trk::TrackState::ExternalOutlier
             && it->iterationShowingThisOutlier() == int(upcomingIteration-1)) )
         Chi2FilterAfb += it->forwardStateChiSquared();
@@ -1264,11 +1264,11 @@ bool Trk::KalmanFitter::prepareNextIteration(const unsigned int& upcomingIterati
         (*covN)(i,i) = (*cov)(i,i) < m_cov0[i] ? (*cov)(i,i)*scale : m_cov0[i];
       }
       newSeedPars = CREATE_PARAMETERS(*resultFromPreviousIter,
-                                      resultFromPreviousIter->parameters(),covN); 
+                                      resultFromPreviousIter->parameters(),covN).release();
     }
   }
 
-  // if that worked: clean up, set filter back to first state and plug in new seed parameters 
+  // if that worked: clean up, set filter back to first state and plug in new seed parameters
   if (newSeedPars) {
     iFilterBeginState = 1;
     m_utility->clearFitResultsAfterOutlier(m_trajectory,FQ,iFilterBeginState);
@@ -1321,7 +1321,7 @@ Trk::KalmanFitter::makeTrack(
     if (msgLvl(MSG::DEBUG)) monitorTrackFits( MinimalTrackFailure, this_eta );
     m_fitStatus = Trk::FitterStatusCode::FewFittableMeasurements;
     return nullptr;
-  } 
+  }
     SmoothedTrajectory* finalTrajectory = new SmoothedTrajectory();
 
     // add new TSoS with parameters on reference surface (e.g. physics Perigee)
@@ -1393,7 +1393,7 @@ Trk::KalmanFitter::makeTrack(
     }
     m_fitStatus = Trk::FitterStatusCode::Success;
     return fittedTrack;
-  
+
 }
 
 const Trk::TrackStateOnSurface*
@@ -1404,7 +1404,7 @@ Trk::KalmanFitter::internallyMakePerigee(
 {
   Trajectory::const_iterator it = m_trajectory.begin();
   const Trk::TrackParameters* nearestParam   = nullptr;
-  
+
   // --- simple case to get "first" track parameters: ID track
   if (!it->isOutlier() && (it->smoothedTrackParameters()) &&
       m_sortingRefPoint.mag() < 1.0E-100 &&
@@ -1451,7 +1451,7 @@ Trk::KalmanFitter::makeReferenceState(
 {
   Trajectory::const_iterator it = m_trajectory.begin();
   const Trk::TrackParameters* nearestParam   = nullptr;
-  
+
   // --- simple case: ref surface was entered at first measurement
   if (!it->isOutlier() && (&(it->measurement()->associatedSurface()) == &refSurface) )
     return nullptr;
@@ -1541,25 +1541,25 @@ bool Trk::KalmanFitter::check_operability(int iSet, const RunOutlierRemoval& run
     if (matEff!=Trk::nonInteracting)
       ATH_MSG_DEBUG( "-> material effects active and switched to "<< matEff );
   }
-  
+
   // check RIO_OnTrack creator necessity
   if (m_ROTcreator.empty() && iSet==1) {
     ATH_MSG_ERROR( "RIO_OnTrackCreator tool not configured, but your fit on PrepRawData will need it!" );
     return false;
   }
-  
+
   // prevent the fitter from running into empty HitSet
   if (empty) {
     ATH_MSG_WARNING("attempt to fit empty vector of "<< mySet << " objects" ) ;
     return false;
   }
-  
+
   // internal consistency check
   if (!m_trajectory.empty()) {
     ATH_MSG_ERROR("coding problem? fitter starts with uncleared internal vectors!" ) ;
     return false;
   }
-  
+
   return true;
 }
 
@@ -1608,6 +1608,6 @@ Trk::KalmanFitter::callValidation(const EventContext& ctx,
     // write validation data for iteration with index
     StatusCode sc = m_FitterValidationTool->writeProtoTrajectoryData(m_trajectory, iterationIndex, per, fitStatCode.getCode());
     // FIXME. just ignore as this is only for validation.
-    sc.ignore(); 
+    sc.ignore();
     delete perPar;
 }
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanOutlierRecovery_InDet.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanOutlierRecovery_InDet.cxx
index 92380f32992b8d274c2a66e8e336d96552095d10..95827e3c33a2f9dc8d4f088be36a7ab1e53c7609 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanOutlierRecovery_InDet.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanOutlierRecovery_InDet.cxx
@@ -48,7 +48,7 @@ Trk::KalmanOutlierRecovery_InDet::KalmanOutlierRecovery_InDet(const std::string&
 {
   // AlgTool stuff
   declareInterface<IKalmanOutlierLogic>( this );
-  
+
   // declare all properties needed to configure fitter, defaults
   declareProperty("TrackChi2PerNDFCut",  m_Trajectory_Chi2PerNdfCut=17.f,
                   "Chi2/ndf cut to reject a fit and start search for outliers");
@@ -68,7 +68,7 @@ StatusCode Trk::KalmanOutlierRecovery_InDet::initialize()
 
   m_Trajectory_Chi2ProbCut = 1.0-Genfun::CumulativeChiSquare(1)(m_Trajectory_Chi2PerNdfCut);
   ATH_MSG_INFO ("Trajectory quality cut set to chi2/ndf of " << m_Trajectory_Chi2PerNdfCut <<
-                " giving chi2-prob " << m_Trajectory_Chi2ProbCut ); // FIXME 
+                " giving chi2-prob " << m_Trajectory_Chi2ProbCut ); // FIXME
   ATH_MSG_INFO ("outlier state cut set to chi2/ndf of      " << m_State_Chi2PerNdfCut );
   ATH_MSG_INFO ("initialize() successful in " << name() );
   return sc;
@@ -89,7 +89,7 @@ StatusCode Trk::KalmanOutlierRecovery_InDet::configureWithTools(Trk::IExtrapolat
   m_extrapolator = extrap;
   m_updator      = updator;
   m_recalibrator = recal;
-  
+
   // protection, if not confiured
   if (!m_updator) {
     ATH_MSG_ERROR ("Updator missing, need to configure it !" );
@@ -143,18 +143,18 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
     if (it->measurementType()==Pixel) {if (it->isNewOutlier()) ++c_outPix; ++c_allPix;}
     if (it->measurementType()==SCT)   {if (it->isNewOutlier()) ++c_outSct; ++c_allSct;}
     if (it->measurementType()==TRT)   {if (it->isNewOutlier()) ++c_outTrt; ++c_allTrt;}
-    if ( (it->measurementType()==Pixel || it->measurementType()==SCT 
-          || it->measurementType()==TRT) && it->isNewOutlier() 
+    if ( (it->measurementType()==Pixel || it->measurementType()==SCT
+          || it->measurementType()==TRT) && it->isNewOutlier()
          && it->iterationShowingThisOutlier() == fitIteration) ++numberOfRejections;
   }
 
   // recovery of bad cases in the Silicon
-  if (numberOfRejections > 0 || 
+  if (numberOfRejections > 0 ||
       (m_utility->numberOfNewOutliers(T) > std::min(.4*T.size(),7.) )) {
     using namespace Trk::TrackState;
     Trk::Trajectory::iterator state1 = T.begin();
     while (!state1->forwardTrackParameters() && state1!=T.end()) ++state1;
-    if (state1 == T.end()) { 
+    if (state1 == T.end()) {
       ATH_MSG_WARNING ("outlier recovery internally inconsistent.");
       return false;
     }
@@ -164,7 +164,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
                    ") -- " << c_outSct<<"("<< c_allSct<<") -- " << c_outTrt<<"("<<c_allTrt<<")");
 
     // === part 1: pixel === recover occas. pixel outliers as broad clusters if SCT is reliable
-    if (fitIteration <= 2 && m_recalibrator!=nullptr 
+    if (fitIteration <= 2 && m_recalibrator!=nullptr
         && c_allPix > 0 && 2*c_outPix <= c_allPix
         && 2*c_outSct < c_allSct  ) {
 
@@ -183,7 +183,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
 
           if ( (it->measurement()->localCovariance()(Trk::locX,Trk::locX) < 0.02*0.02)
                || (it->measurement()->localCovariance()(Trk::locY,Trk::locY) < 0.2*0.2) ) {
-            const Trk::MeasurementBase* broadPixel = 
+            const Trk::MeasurementBase* broadPixel =
               m_recalibrator->makeBroadMeasurement(*it->measurement(),
                                                    *smoothedParAtOutlier, Pixel);
             if (broadPixel!=nullptr) {
@@ -198,7 +198,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
                                sqrt(broadPixel->localCovariance()(Trk::locY,Trk::locY)) );
                 it->replaceMeasurement(broadPixel,Trk::TrackState::BroadCluster);
                 it->isOutlier(false);
-                if (it->positionOnTrajectory() < firstNew) firstNew = it->positionOnTrajectory(); 
+                if (it->positionOnTrajectory() < firstNew) firstNew = it->positionOnTrajectory();
                 failureRecoveryNeedsRefit=true;
               } else {
                 delete broadPixel;
@@ -228,7 +228,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
           it->isOutlier(GeneralOutlier,fitIteration);
         firstNew = 1;
         return true;
-      } 
+      }
 
       const int badRankedNumberOfMeas = m_utility->rankedNumberOfMeasurements(T);
       Trk::Trajectory::iterator lastSctState = T.end();
@@ -263,20 +263,20 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
         *sctExitTemp->parameters()[Trk::qOverP];
 
       const Trk::TrackParameters* sctExit = sctExitTemp->associatedSurface().createTrackParameters(par[Trk::loc1],par[Trk::loc2],
-													 par[Trk::phi],par[Trk::theta],par[Trk::qOverP],cov); 
+													 par[Trk::phi],par[Trk::theta],par[Trk::qOverP],cov);
       delete sctExitTemp;
       ATH_MSG_DEBUG ("-O- At iteration " << fitIteration << " SCT exit: meas't (" <<
                      lastSctState->measurement()->localParameters()[Trk::locX] << ",  " <<
                      lastSctState->measurement()->localParameters()[Trk::locY] << ") vs. prediction ("<<
                      sctExit->parameters()[Trk::locX]<< ", "<<sctExit->parameters()[Trk::locY]<< ") ");
-      
+
       // switch to reverse gear and run a small filter through the SCT
       Trk::Trajectory::reverse_iterator lastSctState_r
         = Trk::Trajectory::reverse_iterator(++lastSctState);
       const Trk::TrackParameters* sctFitResult =
         m_updator->addToState(*sctExit, lastSctState_r->measurement()->localParameters(),
-                              lastSctState_r->measurement()->localCovariance());
-      delete sctExit; 
+                              lastSctState_r->measurement()->localCovariance()).release();
+      delete sctExit;
       Trk::Trajectory::reverse_iterator rit = lastSctState_r + 1;
       Trk::Trajectory::reverse_iterator firstSctState_r = T.rend();
       for( ; rit!=T.rend(); ++rit) {
@@ -299,7 +299,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
           }
           sctFitResult = m_updator->addToState(*predPar,
                                                rit->measurement()->localParameters(),
-                                               rit->measurement()->localCovariance());
+                                               rit->measurement()->localCovariance()).release();
           ATH_MSG_VERBOSE ("At "<<rit->positionOnTrajectory() << " errs in locX: "<<
                            rit->measurement()->localCovariance()(Trk::locX) );
           firstSctState_r = rit;
@@ -338,7 +338,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
                || (rit->isOutlier() && rit->trackStateType() != PredictedOutlier) )
              && (rit->measurement()->localCovariance()(Trk::locX) < 0.02)
              && (rit->measurement()->localCovariance()(Trk::locY) < 0.2) ) {
-          const Trk::MeasurementBase* broadPixel = 
+          const Trk::MeasurementBase* broadPixel =
             m_recalibrator->makeBroadMeasurement(*rit->measurement(), *filteredPar, Pixel);
           if (broadPixel!=nullptr) {
             if (( broadPixel->localCovariance()(Trk::locX)
@@ -369,7 +369,7 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
                        (testQuality? testQuality->chiSquared() : -1.0) );
 
         // next step: decide if outlier is too big for the current mini-filter
-        if (!testQuality || testQuality->chiSquared() > 
+        if (!testQuality || testQuality->chiSquared() >
 		    4*m_State_Chi2PerNdfCut * testQuality->numberDoF() ) {
           updatedPar = filteredPar;
           filteredPar=nullptr;
@@ -378,18 +378,18 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
         } else {
           updatedPar = m_updator->addToState(*filteredPar,
                                              rit->measurement()->localParameters(),
-                                             rit->measurement()->localCovariance());
+                                             rit->measurement()->localCovariance()).release();
           if (updatedPar==nullptr) updatedPar=filteredPar; else delete filteredPar;
           ATH_MSG_DEBUG ("At "<<rit->positionOnTrajectory()<<": using this state to proceed.");
         }
         if (!testQuality ||
-	    (testQuality->chiSquared() > 
+	    (testQuality->chiSquared() >
 		    0.5*m_State_Chi2PerNdfCut * testQuality->numberDoF() ) ) {
           rit->isOutlier(Trk::TrackState::TrackOutlier,fitIteration);
           ++numberOfChangedStates;
           ATH_MSG_DEBUG ("At "<<rit->positionOnTrajectory() <<": remove state with tightened "<<
                          "outlier cut, chi2="<<testQuality->chiSquared());
-        } else if (!rit->isOutlier() && 
+        } else if (!rit->isOutlier() &&
                    rit->measurement()->localCovariance()(Trk::locX) > 0.1) {
           rit->isOutlier(Trk::TrackState::TrackOutlier,fitIteration);
           ++numberOfChangedStates;
@@ -420,8 +420,8 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
               it->isOutlier(false);
         }
       }
-    
-    }      
+
+    }
 
   } // stop recovery for bad cases
 
@@ -437,24 +437,24 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
           if (it->isDriftCircle() && rot!=nullptr && rot->prepRawData()!=nullptr)
             msg(MSG::VERBOSE) << "Testing L/R of " << (it->isOutlier() ? "Outl." : "Hit  " )
                               << it->positionOnTrajectory() << " : Par = "
-                              << (it->smoothedTrackParameters() ? 
+                              << (it->smoothedTrackParameters() ?
                                   it->smoothedTrackParameters()->parameters()[Trk::locR] : -999.0)
-                              <<  " Mbs = " 
+                              <<  " Mbs = "
                               << it->measurement()->localParameters()[Trk::locR] << ", Prd = "
                               <<(rot->prepRawData() ? rot->prepRawData()->localPosition()[Trk::locR] : -999.)
                               << endmsg;
         }
-        
+
         const Trk::TrackParameters* refTrkPar = it->smoothedTrackParameters();
         // step 1 - try re-integrating drift radius outliers as tube hit inlayers
         if (it->measurementType() == Trk::TrackState::TRT && refTrkPar!=nullptr
             && (it->trackStateType() == Trk::TrackState::StateOutlier ||
                 it->trackStateType() == Trk::TrackState::TrackOutlier)
-            && it->iterationShowingThisOutlier() == fitIteration 
-            && (Trk::TrackState::TubeHit != 
+            && it->iterationShowingThisOutlier() == fitIteration
+            && (Trk::TrackState::TubeHit !=
                 m_recalibrator->calibrationStatus(*it->measurement(),Trk::TrackState::TRT))
             ) {
-          const Trk::RIO_OnTrack* recalibratedROT = 
+          const Trk::RIO_OnTrack* recalibratedROT =
             m_recalibrator->makeBroadMeasurement(*it->measurement(),*refTrkPar,
                                                  Trk::TrackState::TRT);
           if (recalibratedROT!=nullptr) {
@@ -470,14 +470,14 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
         // step 2 - try re-integrating tube hits as drift radius hits
         if (it->measurementType() == Trk::TrackState::TRT && refTrkPar!=nullptr
             && !it->isOutlier()
-            && (Trk::TrackState::TubeHit == 
+            && (Trk::TrackState::TubeHit ==
                 m_recalibrator->calibrationStatus(*it->measurement(),Trk::TrackState::TRT))
             ) {
 	  const Trk::RIO_OnTrack* trt=dynamic_cast<const Trk::RIO_OnTrack*>(it->measurement());
 	  const TrackParameters* mTP = it->smoothedTrackParameters();
 	  if (trt && trt->prepRawData() && mTP->covariance()
 	      && ( fabs(trt->prepRawData()->localPosition()[Trk::locR]
-                        - fabs(it->smoothedTrackParameters()->parameters()[Trk::locR])) 
+                        - fabs(it->smoothedTrackParameters()->parameters()[Trk::locR]))
 		   < 2.5*sqrt(trt->prepRawData()->localCovariance()(Trk::locR,Trk::locR)
 			      + (*mTP->covariance())(Trk::locR,Trk::locR)))
 	      ) {
@@ -530,8 +530,8 @@ bool Trk::KalmanOutlierRecovery_InDet::flagNewOutliers(Trk::Trajectory& T,
 	    if (!tubeHitMade && mTP
 		&& (m_recalibrator->calibrationStatus(*it->measurement(),Trk::TrackState::TRT)
 		    == Trk::TrackState::TubeHit)
-		&& ( fabs(trt->prepRawData()->localPosition()[Trk::locR] 
-                        - fabs(it->smoothedTrackParameters()->parameters()[Trk::locR])) 
+		&& ( fabs(trt->prepRawData()->localPosition()[Trk::locR]
+                        - fabs(it->smoothedTrackParameters()->parameters()[Trk::locR]))
 		     < 2.0*sqrt(trt->prepRawData()->localCovariance()(Trk::locR,Trk::locR)
 				+ (*mTP->covariance())(Trk::locR,Trk::locR)))
 		) {
@@ -578,7 +578,7 @@ bool Trk::KalmanOutlierRecovery_InDet::reject(const Trk::FitQuality& fitQuality)
       ATH_MSG_DEBUG ("-O- number d.o.f not positive - reject trajectory.");
     if ( !(fitQuality.chiSquared() > 0.0))
       ATH_MSG_DEBUG ("-O- chi2 is not positive - numerical problems?" );
-    return true;	    
+    return true;
   }
   // ok - it's accepted
   return false;
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanPiecewiseAnnealingFilter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanPiecewiseAnnealingFilter.cxx
index ee329b5d86840f2f7621b2669275f44bb656cccb..e79ad9d1ca837cd3a3b67e778ea4f086e5fa15f1 100644
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanPiecewiseAnnealingFilter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanPiecewiseAnnealingFilter.cxx
@@ -71,7 +71,7 @@ Trk::KalmanPiecewiseAnnealingFilter::~KalmanPiecewiseAnnealingFilter()
 
 StatusCode Trk::KalmanPiecewiseAnnealingFilter::initialize()
 {
-  
+
   StatusCode sc = AlgTool::initialize();
 
   if (sc.isFailure()) return sc;
@@ -152,7 +152,7 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_driftCircles
 
   // stop if strategy won't work - like when it was already tried.
   Trk::Trajectory::const_iterator it = m_trajPiece.begin();
-  if (it->isOutlier() || alreadyTried 
+  if (it->isOutlier() || alreadyTried
       || m_option_annealingScheme.at(annealer) <= 2.0 ) return false;
 
   // strategy only shown to improve on drift-circle initiating fits
@@ -183,9 +183,9 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_driftCircles
           fabs(m_trajPiece.front().measurement()->localParameters()[Trk::locR]) <= 0.01)) {
     m_trajPiece.front().isOutlier(Trk::TrackState::FilterOutlier, 1);
   } else {
-    const Trk::RIO_OnTrack* recalibratedROT = 
+    const Trk::RIO_OnTrack* recalibratedROT =
       m_recalibrator->makeBroadMeasurement((crot->rioOnTrack(crot->indexOfMaxAssignProb())),*tp);
-    if (recalibratedROT) 
+    if (recalibratedROT)
       m_trajPiece.front().replaceMeasurement(recalibratedROT, Trk::TrackState::TubeHit);
     else
       m_trajPiece.front().isOutlier(Trk::TrackState::FilterOutlier, 1);
@@ -219,7 +219,7 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_all
   bool foundImprovement = false;
 
   for(Trajectory::iterator it = m_trajPiece.begin(); it != m_trajPiece.end(); ++it) {
-    const Trk::CompetingRIOsOnTrack* compROT = 
+    const Trk::CompetingRIOsOnTrack* compROT =
       dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
     if (compROT == nullptr || it->isOutlier()) continue;
 
@@ -233,13 +233,13 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_all
     bool   highPrecisionSCT = (it->measurementType() == Trk::TrackState::SCT)
       && (msErrX < 0.018);
     double chi2ts = (it->fitQuality()? it->fitQuality()->chiSquared() : -999.0);
-    const Trk::TrackParameters* refPars = it->smoothedTrackParameters() ? 
+    const Trk::TrackParameters* refPars = it->smoothedTrackParameters() ?
       it->smoothedTrackParameters() : it->forwardTrackParameters();
 
     if ( (assPrb < 0.90 || chi2ts > 1.0)
          && (highPrecisionPixel || highPrecisionSCT)
          && refPars ) {
-      const Trk::RIO_OnTrack* broadCluster = 
+      const Trk::RIO_OnTrack* broadCluster =
         m_recalibrator->makeBroadMeasurement(*compROT, *refPars,
                                              it->measurementType());
       if (broadCluster!=nullptr) {
@@ -291,7 +291,7 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_all
   bool foundImprovement = false;
 
   for(Trajectory::iterator it = m_trajPiece.begin(); it != m_trajPiece.end(); ++it) {
-    const Trk::CompetingRIOsOnTrack* compROT = 
+    const Trk::CompetingRIOsOnTrack* compROT =
       dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
     if (compROT == nullptr || it->isOutlier()) continue;
 
@@ -303,12 +303,12 @@ bool Trk::KalmanPiecewiseAnnealingFilter::annealingProblem_all
       && (msErrX < 0.010 || msErrY < 0.080);
     bool   highPrecisionSCT = (it->measurementType() == Trk::TrackState::SCT)
       && (msErrX < 0.018);
-    const Trk::TrackParameters* refPars = it->smoothedTrackParameters() ? 
+    const Trk::TrackParameters* refPars = it->smoothedTrackParameters() ?
       it->smoothedTrackParameters() : it->forwardTrackParameters();
 
     if ( (highPrecisionPixel || highPrecisionSCT)
 	 && refPars ) {
-      const Trk::RIO_OnTrack* broadCluster = 
+      const Trk::RIO_OnTrack* broadCluster =
 	m_recalibrator->makeBroadMeasurement(*compROT, *refPars,
 					     it->measurementType());
       if (broadCluster!=nullptr) {
@@ -347,7 +347,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectory
 //================ main method: the piece-wise filter ==========================
 
 Trk::FitterStatusCode
-Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece 
+Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 (Trajectory& trajectory,
  Trajectory::iterator& start,
  const TrackParameters*&     start_updatedPar,
@@ -390,7 +390,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
           predDiffPar.reset(  start->checkoutParametersDifference() );
           predPar = CREATE_PARAMETERS(*start->referenceParameters(),
                                       (start->referenceParameters()->parameters() + (*predDiffPar)),
-                                      new AmgSymMatrix(5)(*start->parametersCovariance()));
+                                      new AmgSymMatrix(5)(*start->parametersCovariance())).release();
           delete start->checkoutParametersCovariance();
         }
       } else {
@@ -407,7 +407,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       } else {
         // filter using differences
         const TransportJacobian& jac = *m_trajPiece.back().jacobian();
-        AmgVector(5) updDiffPar = updatedPar->parameters() 
+        AmgVector(5) updDiffPar = updatedPar->parameters()
                                   - m_trajPiece.back().referenceParameters()->parameters();
         predDiffPar = std::make_unique<AmgVector(5)>(  jac*updDiffPar );
         AmgSymMatrix(5)* C = new AmgSymMatrix(5) (jac*(*updatedPar->covariance())*jac.transpose());
@@ -417,16 +417,25 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
           (*C)(Trk::theta,Trk::theta) += std::pow(input_it->materialEffects()->sigmaDeltaTheta(),2);
           const double& mass = m_particleMasses.mass[particleType];
           const double currQOverPsquared = std::pow((*predDiffPar)(Trk::qOverP) + input_it->referenceParameters()->parameters()[Trk::qOverP], 2);
-          const double sigmaDeltaQoverPsquared = (currQOverPsquared > 0.) ? (std::pow(input_it->materialEffects()->sigmaDeltaE(), 2) * (mass*mass + 1./currQOverPsquared) * (currQOverPsquared*currQOverPsquared*currQOverPsquared)) : 0.;
-          (*C)(Trk::qOverP,Trk::qOverP)+= sigmaDeltaQoverPsquared;
-          ATH_MSG_VERBOSE ("mass=" << mass << ", qOverP_ref="<< std::scientific << input_it->referenceParameters()->parameters()[Trk::qOverP]
-                  << ", qOverP_diff=" << (*predDiffPar)(Trk::qOverP)
-                  << ", sigmaDeltaE=" << input_it->materialEffects()->sigmaDeltaE()
-                  << ", sigmaDeltaQoverP=" << sqrt(sigmaDeltaQoverPsquared) << std::fixed);//std::defaultfloat);
+          const double sigmaDeltaQoverPsquared =
+            (currQOverPsquared > 0.)
+              ? (std::pow(input_it->materialEffects()->sigmaDeltaE(), 2) *
+                 (mass * mass + 1. / currQOverPsquared) *
+                 (currQOverPsquared * currQOverPsquared * currQOverPsquared))
+              : 0.;
+          (*C)(Trk::qOverP, Trk::qOverP) += sigmaDeltaQoverPsquared;
+          ATH_MSG_VERBOSE(
+            "mass="
+            << mass << ", qOverP_ref=" << std::scientific
+            << input_it->referenceParameters()->parameters()[Trk::qOverP]
+            << ", qOverP_diff=" << (*predDiffPar)(Trk::qOverP)
+            << ", sigmaDeltaE=" << input_it->materialEffects()->sigmaDeltaE()
+            << ", sigmaDeltaQoverP=" << sqrt(sigmaDeltaQoverPsquared)
+            << std::fixed); // std::defaultfloat);
           ATH_MSG_VERBOSE ("Added material effects.");
         }
         const AmgVector(5) x = input_it->referenceParameters()->parameters()+(*predDiffPar);
-        predPar = CREATE_PARAMETERS(*input_it->referenceParameters(),x,C);
+        predPar = CREATE_PARAMETERS(*input_it->referenceParameters(),x,C).release();
         ATH_MSG_DEBUG("used difference to make predpar = " << *predPar);
       }
     }
@@ -439,7 +448,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       return Trk::FitterStatusCode::ForwardFilterFailure;
     }
 
-    const Trk::RIO_OnTrack* testROT 
+    const Trk::RIO_OnTrack* testROT
       = dynamic_cast<const Trk::RIO_OnTrack*>(input_it->measurement());
 
     if (input_it->isOutlier() || testROT==nullptr || input_it->measurement()==nullptr) {
@@ -462,7 +471,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       // --- make a simple competing ROT: Left/right ambiguity for drift circles and
       //     competition against outlier hypothesis for (unambiguous) clusters
 
-      const Trk::CompetingRIOsOnTrack* highBetaCluster = 
+      const Trk::CompetingRIOsOnTrack* highBetaCluster =
 	m_compRotTool->createSimpleCompetingROT(*testROT->prepRawData(),*predPar,beta);
       if (!highBetaCluster) {
 	ATH_MSG_DEBUG ("CompROT creation failed in filterTrajPiece() annealing " <<beta);
@@ -472,12 +481,12 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       }
       if (input_it->isCluster() && msgLvl(MSG::VERBOSE))
 	std::cout << "DAF's CompCluster: " << *highBetaCluster << std::endl;
-      Trk::ProtoTrackStateOnSurface newState = 
+      Trk::ProtoTrackStateOnSurface newState =
 	Trk::ProtoTrackStateOnSurface(highBetaCluster,false,true,iDafSteps);
       m_trajPiece.push_back(newState);
       m_trajPiece.back().setMeasurementType(input_it->measurementType(),
 					    Trk::TrackState::HighPrecision);
-    } 
+    }
 
     if (m_forwardFitter->needsReferenceTrajectory()) {
       if (!input_it->referenceParameters()) {
@@ -491,7 +500,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       m_trajPiece.back().checkinParametersDifference(predDiffPar.release() );
       m_trajPiece.back().checkinParametersCovariance(new AmgSymMatrix(5)(*predPar->covariance()));
     }
- 
+
     if (input_it->isOutlier() || !m_trajPiece.back().measurement() ) {
       delete updatedPar;
       updatedPar = predPar;
@@ -503,7 +512,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       updatedPar = m_updator->addToState(*predPar,
 					 m_trajPiece.back().measurement()->localParameters(),
 					 m_trajPiece.back().measurement()->localCovariance(),
-					 fitQuality);
+					 fitQuality).release();
       if (!updatedPar) {
 	ATH_MSG_DEBUG ("addToState failed in filterTrajPiece(), annealing "<<beta);
 	m_trajPiece.clear();
@@ -521,7 +530,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
   delete updatedPar;
 
   FitQuality  currForwardFQ = m_utility->forwardFilterQuality(m_trajPiece);
-  m_chi2DuringAnnealing[0] = currForwardFQ.numberDoF()>0 ? 
+  m_chi2DuringAnnealing[0] = currForwardFQ.numberDoF()>0 ?
     currForwardFQ.chiSquared()/currForwardFQ.numberDoF() : 0.0;
 
   //////////////////////////////////////////////////////////////////////////////
@@ -540,8 +549,8 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
         ATH_MSG_WARNING ("Programming error - lost seed");
         m_utility->dumpTrajectory(m_trajPiece, name());
       }
-	/* old code for lost seed: 
-          const TrackParameters* newPredPar = 
+	/* old code for lost seed:
+          const TrackParameters* newPredPar =
 	  m_extrapolator->extrapolate(*start_predPar,
 				      ffs->measurement()->associatedSurface(),
 				      Trk::alongMomentum, false, particleType); */
@@ -551,9 +560,9 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 							false /*no runOutlier*/, dafMec,
 							false, 1);
       FitQuality  currForwardFQ = m_utility->forwardFilterQuality(m_trajPiece);
-      m_chi2DuringAnnealing[annealer] = currForwardFQ.numberDoF()>0 ? 
+      m_chi2DuringAnnealing[annealer] = currForwardFQ.numberDoF()>0 ?
 	currForwardFQ.chiSquared()/currForwardFQ.numberDoF() : 0.0;
-      
+
       if ( this->annealingProblem_driftCircles(savedForwardFQ,currForwardFQ,
 					       fitStatus,annealer,hadAnnealingProblemDC) ) {
 	ATH_MSG_DEBUG ("AnnMonitor-DC sends piecewise DAF back to start!");
@@ -579,9 +588,9 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 
     double assgnProbSum = 0.0;
     for(Trajectory::iterator it = m_trajPiece.begin(); it != m_trajPiece.end(); ++it) {
-      const Trk::CompetingRIOsOnTrack* compROT = 
+      const Trk::CompetingRIOsOnTrack* compROT =
 	dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
-      if (compROT != nullptr && !it->isOutlier()) assgnProbSum += 
+      if (compROT != nullptr && !it->isOutlier()) assgnProbSum +=
 						 compROT->assignmentProbability(compROT->indexOfMaxAssignProb());
     }
     if (assgnProbSum < 0.5) {
@@ -607,7 +616,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       m_trajPiece.clear();
       return fitStatus;
     }
-    if (m_trajPiece.begin()->forwardTrackParameters() ) 
+    if (m_trajPiece.begin()->forwardTrackParameters() )
       ATH_MSG_DEBUG ("check traj consistency " << *m_trajPiece.begin()->forwardTrackParameters() );
 
     beta      = ( annealer+1 >= m_option_annealingScheme.size() ?
@@ -617,7 +626,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 
     // --loop and lower the annealing temperature
     for(Trajectory::iterator it = m_trajPiece.begin(); it != m_trajPiece.end(); ++it) {
-      const Trk::CompetingRIOsOnTrack* compROT = 
+      const Trk::CompetingRIOsOnTrack* compROT =
 	dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
       if (compROT && it->smoothedTrackParameters() && !it->isOutlier()) {
         const Trk::TrackParameters* annealingPars = it->smoothedTrackParameters();
@@ -630,7 +639,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 
     if (msgLvl(MSG::VERBOSE)) {
       for(Trajectory::iterator it = m_trajPiece.begin(); it != m_trajPiece.end(); ++it) {
-        const Trk::CompetingRIOsOnTrack* compROT = 
+        const Trk::CompetingRIOsOnTrack* compROT =
 	  dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
         const Trk::FitQuality* testFQ = nullptr;
         if (it->smoothedTrackParameters() && it->measurement()) {
@@ -667,10 +676,10 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       return Trk::FitterStatusCode::BadInput;
     }
     if (!it->isOutlier()) fittableState = itForKF;
-    const Trk::CompetingRIOsOnTrack* compROT = 
+    const Trk::CompetingRIOsOnTrack* compROT =
       dynamic_cast<const Trk::CompetingRIOsOnTrack*>(it->measurement());
 
-    if (msgLvl(MSG::VERBOSE) && it->measurement() && itForKF->measurement()) 
+    if (msgLvl(MSG::VERBOSE) && it->measurement() && itForKF->measurement())
       std::cout << std::setiosflags(std::ios::fixed)
 		<< "results: " << itForKF->positionOnTrajectory()
 		<< " predict " << (it->smoothedTrackParameters() ?
@@ -680,12 +689,12 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 		<< (compROT? compROT->rioOnTrack(compROT->indexOfMaxAssignProb()).localParameters()[Trk::locX] : -999.0)
 		<<" prob="
 		<< (compROT? compROT->assignmentProbability(compROT->indexOfMaxAssignProb()) : -999.0);
-    
+
     std::string decision = "ex. outlier";
     if (it->isOutlier() && itForKF->trackStateType() != Trk::TrackState::ExternalOutlier)
       itForKF->isOutlier(Trk::TrackState::FilterOutlier);
 
-    if ( !it->isOutlier() && !compROT 
+    if ( !it->isOutlier() && !compROT
 	 && (it->measurement() != itForKF->measurement()) ) {
       itForKF->replaceMeasurement(it->checkoutMeasurement());
       itForKF->isOutlier(false);
@@ -694,11 +703,11 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
     if (!it->isOutlier() && compROT) {
       double predictedLocalR = it->smoothedTrackParameters()->parameters()[Trk::locR];
       double assProb = compROT->assignmentProbability(compROT->indexOfMaxAssignProb());
-      const PrepRawData* prd = compROT->rioOnTrack(compROT->indexOfMaxAssignProb()).prepRawData(); 
+      const PrepRawData* prd = compROT->rioOnTrack(compROT->indexOfMaxAssignProb()).prepRawData();
       if (it->isDriftCircle()) {
 	if (assProb > 1.5*m_option_outlierCut) {
 	  if (fabs(prd->localPosition()[Trk::locR])<0.30) {
-	    const Trk::RIO_OnTrack* recalibratedROT = 
+	    const Trk::RIO_OnTrack* recalibratedROT =
 	      m_recalibrator->makePreciseMeasurement(*compROT,*it->smoothedTrackParameters());
 	    itForKF->replaceMeasurement(recalibratedROT,Trk::TrackState::Nominal);
 	    itForKF->isOutlier(false);
@@ -708,7 +717,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 	    decision = "drift circle (max prob)";
 	  }
 	} else if (fabs(predictedLocalR) < 2.10) {
-	  const Trk::RIO_OnTrack* recalibratedROT = 
+	  const Trk::RIO_OnTrack* recalibratedROT =
 	    m_recalibrator->makeBroadMeasurement(*compROT,*it->smoothedTrackParameters());
 	  itForKF->replaceMeasurement(recalibratedROT); itForKF->isOutlier(false);
 	  decision = "tube hit";
@@ -722,7 +731,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 	  itForKF->isOutlier(Trk::TrackState::AssProbOutlier, 1);
 	  decision = "new outlier";
 	} else decision = "cluster hit";
-        
+
 	// TO-DO start doing broad-cluster association here.
       }
     }
@@ -737,7 +746,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
       if (it->parametersCovariance())
         itForKF->checkinParametersCovariance(it->checkoutParametersCovariance());
       itForKF->setForwardStateFitQuality(it->forwardStateChiSquared(),it->forwardStateNumberDoF());
-      if (it->dnaMaterialEffects()!=nullptr)      
+      if (it->dnaMaterialEffects()!=nullptr)
 	itForKF->checkinDNA_MaterialEffects(it->checkoutDNA_MaterialEffects());
     // }
   }
@@ -753,7 +762,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
   ATH_MSG_DEBUG ("now stepping the main trajectory iterators ahead." );
   Trajectory::iterator lastStateOnPiece= m_utility->lastFittableState(m_trajPiece);
   Trajectory::iterator resumeKfState   = m_utility->nextFittableState(trajectory,fittableState);
-  
+
   if (resumeKfState == trajectory.end()) { // ## case 1: DAF on full trajectory
    /* resumeKfState = fittableState;
     lastStateOnPiece = m_utility->previousFittableState(m_trajPiece,lastStateOnPiece);
@@ -772,7 +781,7 @@ Trk::KalmanPiecewiseAnnealingFilter::filterTrajectoryPiece
 
     if (m_forwardFitter->needsReferenceTrajectory()) ATH_MSG_ERROR("Code missing!");
     if (start_predPar) delete start_predPar;
-    start_predPar = 
+    start_predPar =
       m_extrapolator->extrapolate(*lastStateOnPiece->smoothedTrackParameters(),
 				  resumeKfState->measurement()->associatedSurface(),
 				  Trk::alongMomentum, false, particleType);
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx
index afd06632c399eb4f9a99e5373d9f2880693d8418..3ebf2488c9d00cef28527811d30b46b4fbe8099b 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx
@@ -223,10 +223,10 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fit(Trk::Trajectory&              tra
   if (!fittableMeasurement || !forwardTPar)
     m_utility->dumpTrajectory(trajectory, "DAF-inconsistency");
   // first smoothed TrkParameter is last forward prediction updated with last MBase
-  else smooPar.reset(  m_updator->addToState(*forwardTPar,
+  else smooPar= m_updator->addToState(*forwardTPar,
 					     fittableMeasurement->localParameters(),
 					     fittableMeasurement->localCovariance(),
-                                             fitQual) );
+                                             fitQual);
   if (msgLvl(MSG::INFO)) monitorTrackFits( Call, ( forwardTPar ? forwardTPar->eta() : 1000. ) );
   if(!smooPar) {
     ATH_MSG_WARNING ("first smoother update failed, reject track");
@@ -260,11 +260,12 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fit(Trk::Trajectory&              tra
   std::unique_ptr<const TrackParameters> predPar( CREATE_PARAMETERS(*(lastPredictedState->smoothedTrackParameters()),par,firstErrMtx) );
   // The first step of backward-filtering is done before any loop because of the
   // specially formed prediction (from the last forward parameters).
-  std::unique_ptr<const TrackParameters> updatedPar( m_updator->addToState(*predPar,
-									   fittableMeasurement->localParameters(),
-									   fittableMeasurement->localCovariance(),
-                                                                           trackQualityIncrement) );
-  if(!updatedPar || !trackQualityIncrement) {
+  std::unique_ptr<const TrackParameters> updatedPar =
+    m_updator->addToState(*predPar,
+                          fittableMeasurement->localParameters(),
+                          fittableMeasurement->localCovariance(),
+                          trackQualityIncrement);
+  if (!updatedPar || !trackQualityIncrement) {
     if (msgLvl(MSG::INFO)) monitorTrackFits( UpdateFailure, predPar->eta() );
     ATH_MSG_INFO (" update using initial measurement failed, reject track");
     return FitterStatusCode::UpdateFailure;
@@ -363,9 +364,10 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fit(Trk::Trajectory&              tra
         printGlobalParams(rit->positionOnTrajectory(), "  pred", predPar.get(),
                           detectedMomentumNoise );
       // update track parameters (allows for preset LR solution for straws)
-      updatedPar.reset(  m_updator->addToState(*predPar, fittableMeasurement->localParameters(),
-                                               fittableMeasurement->localCovariance(),
-                                               trackQualityIncrement) );
+      updatedPar = m_updator->addToState(*predPar,
+                                         fittableMeasurement->localParameters(),
+                                         fittableMeasurement->localCovariance(),
+                                         trackQualityIncrement);
 
       if (!updatedPar || !trackQualityIncrement) {
         if (msgLvl(MSG::INFO)) monitorTrackFits( UpdateFailure, predPar->eta() );
@@ -392,7 +394,7 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fit(Trk::Trajectory&              tra
       } else {
         if (m_doSmoothing) {
           forwardTPar = rit->forwardTrackParameters();
-          smooPar.reset(  m_updator->combineStates( *forwardTPar, *updatedPar) );
+          smooPar = m_updator->combineStates(*forwardTPar, *updatedPar);
         } else {
           smooPar.reset( updatedPar->clone() );
         }
@@ -492,9 +494,10 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fitWithReference(Trk::Trajectory&
                                          fitQual, /*doFQ=*/true ) );
   const AmgVector(5) x = lastPredictedState->referenceParameters()->parameters()
                        + updatedDifference->first;
-  smooPar.reset(  updatedDifference? CREATE_PARAMETERS(*lastPredictedState->referenceParameters(),
-                                                       x,new AmgSymMatrix(5)(updatedDifference->second)) : nullptr );
-  if (msgLvl(MSG::INFO)) monitorTrackFits( Call, ( smooPar ? smooPar->eta() : 1000. ) );
+  smooPar=updatedDifference? CREATE_PARAMETERS(*lastPredictedState->referenceParameters(),
+                                                       x,new AmgSymMatrix(5)(updatedDifference->second)) : nullptr ;
+  if (msgLvl(MSG::INFO))
+    monitorTrackFits(Call, (smooPar ? smooPar->eta() : 1000.));
   if (!smooPar || !fitQual) {
     ATH_MSG_WARNING ("first smoother update failed, reject track");
     if (msgLvl(MSG::INFO)) monitorTrackFits( UpdateFailure,
@@ -570,7 +573,7 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fitWithReference(Trk::Trajectory&
     updatedDifference.reset();
     if (msgLvl(MSG::DEBUG)) {
       const AmgVector(5) x = rit->referenceParameters()->parameters()+predDiffPar;
-      const Trk::TrackParameters* param = CREATE_PARAMETERS(*rit->referenceParameters(),x,nullptr);
+      const Trk::TrackParameters* param = CREATE_PARAMETERS(*rit->referenceParameters(),x,nullptr).release();
       printGlobalParams( rit->positionOnTrajectory(), " extrp", param );
       delete param;
     }
@@ -609,7 +612,7 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fitWithReference(Trk::Trajectory&
       if (msgLvl(MSG::DEBUG)) {
         const AmgVector(5) x = rit->referenceParameters()->parameters()
                              + updatedDifference->first;
-        const Trk::TrackParameters* param = CREATE_PARAMETERS(*rit->referenceParameters(),x,nullptr);
+        const Trk::TrackParameters* param = CREATE_PARAMETERS(*rit->referenceParameters(),x,nullptr).release();
         printGlobalParams (rit->positionOnTrajectory()," updat", param );
         delete param;
       }
@@ -623,10 +626,11 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fitWithReference(Trk::Trajectory&
     if (rit == lastSmoothableState) { // at the last don't do state combination.
       ATH_MSG_VERBOSE ("Identified state" << (rit->positionOnTrajectory()>9? " " : " 0")<<
                        rit->positionOnTrajectory() << " as last fittable state.");
-      smooPar.reset( CREATE_PARAMETERS(*rit->referenceParameters(),
-                                     (rit->referenceParameters()->parameters()+updatedDifference->first),
-                                       new AmgSymMatrix(5)(updatedDifference->second)) );
-      rit->checkinSmoothedPar(smooPar.release() );
+      smooPar = CREATE_PARAMETERS(
+        *rit->referenceParameters(),
+        (rit->referenceParameters()->parameters() + updatedDifference->first),
+        new AmgSymMatrix(5)(updatedDifference->second));
+      rit->checkinSmoothedPar(smooPar.release());
     } else if (m_doSmoothing) {
       std::unique_ptr< std::pair<AmgVector(5),AmgSymMatrix(5)> > smoothedDifference(
         m_updator->updateParameterDifference(*(rit->parametersDifference()),
@@ -641,9 +645,11 @@ Trk::FitterStatusCode Trk::KalmanSmoother::fitWithReference(Trk::Trajectory&
       }
       const AmgVector(5) x = rit->referenceParameters()->parameters()
                            + smoothedDifference->first;
-      smooPar.reset( CREATE_PARAMETERS(*rit->referenceParameters(),x,
-                                       new AmgSymMatrix(5)(smoothedDifference->second)) );
-      rit->checkinSmoothedPar(smooPar.release() );
+      smooPar =
+        CREATE_PARAMETERS(*rit->referenceParameters(),
+                          x,
+                          new AmgSymMatrix(5)(smoothedDifference->second));
+      rit->checkinSmoothedPar(smooPar.release());
     } else {
       smooPar.reset();
       ATH_MSG_VERBOSE ("No fitted track parameters made at this state because doSmoothing is OFF");
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdator.h b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdator.h
index 00eda328cfbeb6abadeac313e3268ea55041f571..c4b7d2801921e3c15e10cc2fd677cc49d352a387 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdator.h
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdator.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -14,17 +14,16 @@
 #ifndef TRK_KALMANUPDATOR_H
 #define TRK_KALMANUPDATOR_H
 
-#include "TrkToolInterfaces/IUpdator.h"
-#include "TrkEventPrimitives/ParamDefs.h"
-#include "TrkEventPrimitives/ProjectionMatricesSet.h"
-#include "TrkEventPrimitives/FitQualityOnSurface.h"
 #include "AthenaBaseComps/AthAlgTool.h"
+#include "EventPrimitives/EventPrimitives.h"
 #include "GaudiKernel/MsgStream.h"
 #include "GeoPrimitives/GeoPrimitives.h"
-#include "EventPrimitives/EventPrimitives.h"
+#include "TrkEventPrimitives/FitQualityOnSurface.h"
+#include "TrkEventPrimitives/ParamDefs.h"
+#include "TrkEventPrimitives/ProjectionMatricesSet.h"
+#include "TrkToolInterfaces/IUpdator.h"
 #include <cmath>
 
-
 namespace Trk {
 
 /** @class KalmanUpdator
@@ -36,238 +35,310 @@ namespace Trk {
     state vector. Implemented fully in Eigen using the EDM natively.
     As a drawback due to Eigen's internal implementation of matrix
     operations, this tool is generally slower than its alternatives
-    which are written based on array or SMatrix of fixed size Eigen 
+    which are written based on array or SMatrix of fixed size Eigen
     internal representations of EDM objects.
 
     @author M. Elsing, W. Liebig <http://consult.cern.ch/xwho>
  */
-class KalmanUpdator : virtual public IUpdator, public AthAlgTool { 
-  public:	
-    //! AlgTool standard constuctor
-    KalmanUpdator(const std::string&,const std::string&,const IInterface*);
-    ~KalmanUpdator();
-		
-    //! AlgTool initialisation
-    virtual StatusCode initialize() override final;
-    //! AlgTool termination
-    virtual StatusCode finalize() override final;	
-			
-    //! measurement updator for the KalmanFitter getting the meas't coord' 
-    //from Amg::Vector2D (use eg with PRD)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&) const override final;
-    //! measurement updator for the KalmanFitter getting the coordinates 
-    //from LocalParameters (use eg with MeasurementBase, ROT)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&) const override final;
-    //! measurement updator interface for the KalmanFitter returning the fit quality 
-    //of the state at the same time (Amg::Vector2D-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&, 
-                                         FitQualityOnSurface*& ) const override final;
-    //! measurement updator interface for the KalmanFitter returning the fit quality 
-    //of the state at the same time (LocalParameters-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&, 
-                                         FitQualityOnSurface*& ) const override final;
+class KalmanUpdator
+  : virtual public IUpdator
+  , public AthAlgTool
+{
+public:
+  //! AlgTool standard constuctor
+  KalmanUpdator(const std::string&, const std::string&, const IInterface*);
+  ~KalmanUpdator();
+
+  //! AlgTool initialisation
+  virtual StatusCode initialize() override final;
+  //! AlgTool termination
+  virtual StatusCode finalize() override final;
+
+  //! measurement updator for the KalmanFitter getting the meas't coord'
+  // from Amg::Vector2D (use eg with PRD)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! measurement updator for the KalmanFitter getting the coordinates
+  // from LocalParameters (use eg with MeasurementBase, ROT)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! measurement updator interface for the KalmanFitter returning the fit
+  //! quality
+  // of the state at the same time (Amg::Vector2D-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //! measurement updator interface for the KalmanFitter returning the fit
+  //! quality
+  // of the state at the same time (LocalParameters-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  //! reverse update eg for track property analysis (unbiased residuals)
+  // getting the measurement coordinates from the Amg::Vector2D class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! reverse update eg for track property analysis (unbiased residuals)
+  // getting the measurement coordinates from the LocalParameters class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! reverse updator for the KalmanFitter and other fitters using the
+  // interface with Amg::Vector2D and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //! reverse updator for the KalmanFitter and other fitters using
+  // the interface with LocalParameters and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
 
-    //! reverse update eg for track property analysis (unbiased residuals) 
-    //getting the measurement coordinates from the Amg::Vector2D class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&) const override final;
-    //! reverse update eg for track property analysis (unbiased residuals) 
-    //getting the measurement coordinates from the LocalParameters class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&) const override final ;
-    //! reverse updator for the KalmanFitter and other fitters using the 
-    //interface with Amg::Vector2D and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-    //! reverse updator for the KalmanFitter and other fitters using 
-    //the interface with LocalParameters and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-		
-    /** @brief trajectory state updator which combines two parts of a trajectory on a common surface.
+  /** @brief trajectory state updator which combines two parts of a trajectory
+     on a common surface.
 
-        Make sure that the TPs' surfaces are identical and
-        that the local hit is not duplicated in both trajectories!
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, 
-                                              const TrackParameters&) const override final;
-    /** @brief trajectory state updator which combines two parts of a trajectory 
-     * on a common surface and provides the FitQuality.
+      Make sure that the TPs' surfaces are identical and
+      that the local hit is not duplicated in both trajectories!
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  /** @brief trajectory state updator which combines two parts of a trajectory
+   * on a common surface and provides the FitQuality.
 
-        Make sure that the TPs' surfaces are identical and that the local hit is not duplicated!
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, 
-                                              const TrackParameters&, 
-                                              FitQualityOnSurface*&) const override final;
+      Make sure that the TPs' surfaces are identical and that the local hit is
+   not duplicated!
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&,
+    FitQualityOnSurface*&) const override final;
 
-    //! estimator for FitQuality on Surface from a full track state, that is a state 
-    //which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const Amg::Vector2D&, 
-                                                            const Amg::MatrixX& ) const override final;
+  //! estimator for FitQuality on Surface from a full track state, that is a
+  //! state
+  // which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
 
-    //! estimator for FitQuality on Surface from a full track state, that is 
-    //a state which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const LocalParameters&, 
-                                                            const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface from a predicted track state, that is a state 
-    //which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const Amg::Vector2D&, 
-                                                                 const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface from a predicted track state, that is a state 
-    //which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const LocalParameters&, 
-                                                                 const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface for the situation when a track is fitted to 
-    //the parameters of another trajectory part extrapolated to the common surface.
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const TrackParameters&) const override final;
-    //! interface for reference-track KF, not implemented.
-    virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference (const AmgVector(5)&, 
-                                                                                 const AmgSymMatrix(5)&, 
-                                                                                 const Amg::VectorX&, 
-                                                                                 const Amg::MatrixX&, 
-                                                                                 const int&, Trk::FitQualityOnSurface*&, 
-                                                                                 bool ) const override final 
-    {return nullptr;}
+  //! estimator for FitQuality on Surface from a full track state, that is
+  // a state which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface from a predicted track state, that is
+  //! a state
+  // which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface from a predicted track state, that is
+  //! a state
+  // which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface for the situation when a track is
+  //! fitted to
+  // the parameters of another trajectory part extrapolated to the common
+  // surface.
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  //! interface for reference-track KF, not implemented.
+  virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const Amg::VectorX&,
+    const Amg::MatrixX&,
+    const int&,
+    Trk::FitQualityOnSurface*&,
+    bool) const override final
+  {
+    return nullptr;
+  }
+
+  //! gives back how updator is configured for inital covariances
+  virtual std::vector<double> initialErrors() const override final;
 
-    //! gives back how updator is configured for inital covariances
-    virtual std::vector<double>  initialErrors() const override final;
-		
 private:
-    //! Common maths calculation code for addToState and removeFromState - Amg::Vector2D interface.
-    TrackParameters* calculateFilterStep(const TrackParameters&,
-                                         const Amg::Vector2D&,
-                                         const Amg::MatrixX&,
-                                         const int,
-                                         FitQualityOnSurface*&,
-                                         bool) const;
-    //! Common maths calculation code for addToState and removeFromState - LocalParameters interface.
-    TrackParameters* calculateFilterStep(const TrackParameters&,
-                                         const LocalParameters&,
-                                         const Amg::MatrixX&,
-                                         const int, 
-                                         FitQualityOnSurface*&,
-                                         bool) const;
-    /** also the chi2 calculation and FitQuality object creation is
-        combined in an extra method. It is called by ___FitQuality() and calculateFilterStep()
-        The sign controls the calculation in case a predicted input track state (sign=+1)
-        or smoothed/updated input track state (sign=-1).
-    */
-    FitQualityOnSurface* makeChi2Object(const Amg::VectorX&,
-                                        const Amg::MatrixX&, const Amg::MatrixX&,
-                                        const int, const int) const;
+  //! Common maths calculation code for addToState and removeFromState -
+  //! Amg::Vector2D interface.
+  std::unique_ptr<TrackParameters> calculateFilterStep(const TrackParameters&,
+                                                       const Amg::Vector2D&,
+                                                       const Amg::MatrixX&,
+                                                       const int,
+                                                       FitQualityOnSurface*&,
+                                                       bool) const;
+  //! Common maths calculation code for addToState and removeFromState -
+  //! LocalParameters interface.
+  std::unique_ptr<TrackParameters> calculateFilterStep(const TrackParameters&,
+                                                       const LocalParameters&,
+                                                       const Amg::MatrixX&,
+                                                       const int,
+                                                       FitQualityOnSurface*&,
+                                                       bool) const;
+  /** also the chi2 calculation and FitQuality object creation is
+      combined in an extra method. It is called by ___FitQuality() and
+     calculateFilterStep() The sign controls the calculation in case a predicted
+     input track state (sign=+1) or smoothed/updated input track state
+     (sign=-1).
+  */
+  FitQualityOnSurface* makeChi2Object(const Amg::VectorX&,
+                                      const Amg::MatrixX&,
+                                      const Amg::MatrixX&,
+                                      const int,
+                                      const int) const;
 
-    //! avoid CLHEP's empty math operations (H-matrix) by copying members out
-    Amg::MatrixX projection(const Amg::MatrixX&, const int) const;
+  //! avoid CLHEP's empty math operations (H-matrix) by copying members out
+  Amg::MatrixX projection(const Amg::MatrixX&, const int) const;
 
-    //! internal structuring: debugging output for start of method.
-    void logStart (const std::string&, const TrackParameters&) const;
-    //! internal structuring: common logfile output of the inputs 
-    void logInputCov (const Amg::MatrixX&, const Amg::VectorX&, const Amg::MatrixX&) const;
-    //! internal structuring: common logfile output during calculation
-    void logGainForm (int, const Amg::VectorX&, const Amg::MatrixX&, 
-                      const Amg::MatrixX&, const Amg::MatrixX&) const;
-    //! internal structuring: common logfile output after calculation
-    void logResult(const std::string&, const Amg::VectorX&, const Amg::MatrixX&) const;
+  //! internal structuring: debugging output for start of method.
+  void logStart(const std::string&, const TrackParameters&) const;
+  //! internal structuring: common logfile output of the inputs
+  void logInputCov(const Amg::MatrixX&,
+                   const Amg::VectorX&,
+                   const Amg::MatrixX&) const;
+  //! internal structuring: common logfile output during calculation
+  void logGainForm(int,
+                   const Amg::VectorX&,
+                   const Amg::MatrixX&,
+                   const Amg::MatrixX&,
+                   const Amg::MatrixX&) const;
+  //! internal structuring: common logfile output after calculation
+  void logResult(const std::string&,
+                 const Amg::VectorX&,
+                 const Amg::MatrixX&) const;
 
-    //! method testing correct use of LocalParameters */
-    bool consistentParamDimensions(const LocalParameters&, const int&) const;
-    //! tests if ranges of abolute phi (-pi, pi) and theta (0, pi) are correct */
-    bool thetaPhiWithinRange(const Amg::VectorX&, const int key=31) const;
-    //! tests if ranges of phi (-pi, pi) and theta (0, pi) residuals are correct */
-    bool diffThetaPhiWithinRange(const Amg::VectorX&, const int key=31) const;
-    //! brings phi/theta back into valid range using 2pi periodicity
-    bool correctThetaPhiRange(Amg::VectorX&, AmgSymMatrix(5)&,
-                              const bool isDifference=false, const int key=31) const;
-    bool correctThetaPhiRange(Amg::VectorX&, Amg::MatrixX&,
-                              const bool isDifference=false, const int key=31) const;
+  //! method testing correct use of LocalParameters */
+  bool consistentParamDimensions(const LocalParameters&, const int&) const;
+  //! tests if ranges of abolute phi (-pi, pi) and theta (0, pi) are correct */
+  bool thetaPhiWithinRange(const Amg::VectorX&, const int key = 31) const;
+  //! tests if ranges of phi (-pi, pi) and theta (0, pi) residuals are correct
+  //! */
+  bool diffThetaPhiWithinRange(const Amg::VectorX&, const int key = 31) const;
+  //! brings phi/theta back into valid range using 2pi periodicity
+  bool correctThetaPhiRange(Amg::VectorX&,
+                            AmgSymMatrix(5) &,
+                            const bool isDifference = false,
+                            const int key = 31) const;
+  bool correctThetaPhiRange(Amg::VectorX&,
+                            Amg::MatrixX&,
+                            const bool isDifference = false,
+                            const int key = 31) const;
 
-    std::vector<double>         m_cov0; //!< job option: initial covariance matrix
-    ProjectionMatricesSet       m_projectionMatrices;  //!< get the correct projection matrix
-    bool                        m_useFruehwirth8a;     //!< job option: formula for cov update
-    int                         m_outputlevel; //!< MsgStream output level cached
+  std::vector<double> m_cov0; //!< job option: initial covariance matrix
+  ProjectionMatricesSet
+    m_projectionMatrices; //!< get the correct projection matrix
+  bool m_useFruehwirth8a; //!< job option: formula for cov update
+  int m_outputlevel;      //!< MsgStream output level cached
 };
 
- inline bool KalmanUpdator::thetaPhiWithinRange (const Amg::VectorX& V, const int key) const {   
-   if (! (key&4 || key&8)) return true; // in case no angles measured.
-   if (key == 31) return ( (std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta]>=0.0) && (V[Trk::theta] <= M_PI) );
-   else { // if vector is compressed (i.e. localParameters) need to extract phi,theta first.
-     bool okay = true;
-     if (key & 4) { // phi is being measured
-       int jphi = 0;
-       for (int itag = 0, ipos=1; itag<Trk::phi; ++itag, ipos*=2) if (key & ipos) ++jphi;
-       okay = okay && (std::abs(V[jphi]) <= M_PI);
-     }
-     if (key & 8) { // theta is being measured
-       int jtheta = 0;
-       for (int itag = 0, ipos=1; itag<=Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
-       okay = okay && (std::abs(V[jtheta]-M_PI_2)<=M_PI_2);
-     }
-     return okay;
-   }
- }
+inline bool
+KalmanUpdator::thetaPhiWithinRange(const Amg::VectorX& V, const int key) const
+{
+  if (!(key & 4 || key & 8))
+    return true; // in case no angles measured.
+  if (key == 31)
+    return ((std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta] >= 0.0) &&
+            (V[Trk::theta] <= M_PI));
+  else { // if vector is compressed (i.e. localParameters) need to extract
+         // phi,theta first.
+    bool okay = true;
+    if (key & 4) { // phi is being measured
+      int jphi = 0;
+      for (int itag = 0, ipos = 1; itag < Trk::phi; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jphi;
+      okay = okay && (std::abs(V[jphi]) <= M_PI);
+    }
+    if (key & 8) { // theta is being measured
+      int jtheta = 0;
+      for (int itag = 0, ipos = 1; itag <= Trk::theta; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jtheta;
+      okay = okay && (std::abs(V[jtheta] - M_PI_2) <= M_PI_2);
+    }
+    return okay;
+  }
+}
+
+// for speed reasons make two separate inline functions
+// phi   differences should be smaller than pi (else go other way round) => same
+// as absolute phi value. theta differences should be smaller than pi but can be
+// negative => other constraint than absolute theta.
+inline bool
+KalmanUpdator::diffThetaPhiWithinRange(const Amg::VectorX& V,
+                                       const int key) const
+{
+  if (!(key & 4 || key & 8))
+    return true; // in case no angles measured.
+  if (key == 31)
+    return ((std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta] >= -M_PI) &&
+            (V[Trk::theta] <= M_PI));
+
+  else { // if vector is compressed (i.e. localParameters) need to extract
+         // phi,theta first.
+    bool okay = true;
+    if (key & 4) { // phi is being measured
+      int jphi = 0;
+      for (int itag = 0, ipos = 1; itag < Trk::phi; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jphi;
+      okay = okay && (std::abs(V[jphi]) <= M_PI);
+    }
+    if (key & 8) { // theta is being measured
+      int jtheta = 0;
+      for (int itag = 0, ipos = 1; itag <= Trk::theta; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jtheta;
+      okay = okay && (std::abs(V[jtheta]) <= M_PI);
+    }
+    return okay;
+  }
+}
+
+inline FitQualityOnSurface*
+KalmanUpdator::makeChi2Object(const Amg::VectorX& residual,
+                              const Amg::MatrixX& covTrk,
+                              const Amg::MatrixX& covRio,
+                              const int sign,
+                              const int key) const
+{ // sign: -1 = updated, +1 = predicted parameters.
+  Amg::MatrixX R = covRio + sign * projection(covTrk, key); // .similarity(H);
+  if (R.determinant() == 0) {
+    ATH_MSG_DEBUG("matrix inversion failed");
+    return new FitQualityOnSurface(0.0, (int)covRio.cols());
+  }
+  // get chi2 = r.T() * R^-1 * r
+  double chiSquared = residual.transpose() * R.inverse() * residual;
+  ATH_MSG_VERBOSE("-U- fitQuality of " << (sign > 0 ? "predicted" : "updated")
+                                       << " state, chi2 :" << chiSquared
+                                       << " / ndof= " << covRio.cols());
+  // return the FitQualityOnSurface object
+  return new FitQualityOnSurface(chiSquared, int(covRio.cols()));
+}
 
- // for speed reasons make two separate inline functions
- // phi   differences should be smaller than pi (else go other way round) => same as absolute phi value.
- // theta differences should be smaller than pi but can be negative => other constraint than absolute theta.
- inline bool KalmanUpdator::diffThetaPhiWithinRange (const Amg::VectorX& V, const int key) const {
-   if (! (key&4 || key&8)) return true; // in case no angles measured.
-   if (key == 31) return ( (std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta]>=-M_PI) && (V[Trk::theta] <= M_PI) );
-   
-   else { // if vector is compressed (i.e. localParameters) need to extract phi,theta first.
-     bool okay = true;
-     if (key & 4) { // phi is being measured
-       int jphi = 0;
-       for (int itag = 0, ipos=1; itag<Trk::phi; ++itag, ipos*=2) if (key & ipos) ++jphi;
-       okay = okay && (std::abs(V[jphi]) <= M_PI);
-     }
-     if (key & 8) { // theta is being measured
-       int jtheta = 0;
-       for (int itag = 0, ipos=1; itag<=Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
-       okay = okay && (std::abs(V[jtheta])<=M_PI);
-     }
-     return okay;
-   }
- }
-		
- inline FitQualityOnSurface* KalmanUpdator::makeChi2Object(const Amg::VectorX& residual,
-                                                           const Amg::MatrixX& covTrk,
-                                                           const Amg::MatrixX& covRio,
-                                                           const int sign,
-                                                           const int key) const
- {   // sign: -1 = updated, +1 = predicted parameters.
-    Amg::MatrixX R = covRio + sign * projection(covTrk,key); // .similarity(H);
-    if (R.determinant() == 0) {
-      ATH_MSG_DEBUG("matrix inversion failed");
-      return new FitQualityOnSurface(0.0,(int)covRio.cols());
-    } 
-    // get chi2 = r.T() * R^-1 * r
-    double chiSquared = residual.transpose()*R.inverse()*residual;
-    ATH_MSG_VERBOSE("-U- fitQuality of "<< (sign>0?"predicted":"updated") 
-                    <<" state, chi2 :" << chiSquared << " / ndof= " << covRio.cols());
-    // return the FitQualityOnSurface object
-    return new FitQualityOnSurface(chiSquared, int(covRio.cols()));
- }		
-		
-		
 } // end of namespace
 
 #endif // TRK_KALMANUPDATOR_CLHEP_H
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorAmg.h b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorAmg.h
index 6a311d6e11c24222201cf6fcbe6773c6c7090267..8d081a9118979f48fa85905a39c753a032a90bd6 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorAmg.h
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorAmg.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -14,11 +14,11 @@
 #ifndef TRK_KALMANUPDATORAMG_H
 #define TRK_KALMANUPDATORAMG_H
 
-#include "TrkToolInterfaces/IUpdator.h"
+#include "AthenaBaseComps/AthAlgTool.h"
 #include "TrkEventPrimitives/ParamDefs.h"
 #include "TrkEventPrimitives/ProjectionMatricesSet.h"
 #include "TrkParameters/TrackParameters.h"
-#include "AthenaBaseComps/AthAlgTool.h"
+#include "TrkToolInterfaces/IUpdator.h"
 // Eigen/Amg
 #include "EventPrimitives/EventPrimitives.h"
 #include "EventPrimitives/EventPrimitivesToStringConverter.h"
@@ -26,10 +26,10 @@
 
 namespace Trk {
 
-
 /** @class KalmanUpdatorAmg
 
-    @brief Implementation of Trk::IUpdator based on gain formalism and Eigen mathlib.
+    @brief Implementation of Trk::IUpdator based on gain formalism and Eigen
+   mathlib.
 
     Tool providing calculations on track states, i.e. to add or
     remove a measured hit to the state vector.
@@ -40,391 +40,531 @@ namespace Trk {
     based on KalmanUpdatorSMatrix from:
     @author Wolfgang Liebig <http://consult.cern.ch/xwho/people/54608>
  */
-class KalmanUpdatorAmg : virtual public IUpdator, public AthAlgTool { 
-
-  enum RangeCheckDef {absoluteCheck=0, differentialCheck=1};
-
-  public:	
-    //!< AlgTool standard constuctor
-    KalmanUpdatorAmg(const std::string&,const std::string&,const IInterface*);
-    //!<< AlgTool standard destructor
-    ~KalmanUpdatorAmg();
-		
-    //!< AlgTool initialisation
-    virtual StatusCode initialize() override final;
-    //!< AlgTool termination
-    virtual StatusCode finalize() override final;	
-			
-    //!< measurement updator for the KalmanFitter getting the meas't coord' from Amg::Vector2D (use eg with PRD)
-    // fails: @copydoc Trk::IUpdator::addToState(const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&) const override final;
-    //!< measurement updator for the KalmanFitter getting the coord' from 
-    //LocalParameters (use for example with MeasurementBase, ROT)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&) const override final;
-    //!< measurement updator interface for the KalmanFitter returning the fit quality of the state at the same time (Amg::Vector2D-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&, 
-                                         FitQualityOnSurface*& ) const override final;
-    //!< measurement updator interface for the KalmanFitter returning the fit quality of the state at the same time (LocalParameters-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&, FitQualityOnSurface*& ) const override final;
-
-    //!< reverse update eg for track property analysis (unbiased residuals) getting the measurement coordinates from the Amg::Vector2D class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&) const override final;
-    //!< reverse update eg for track property analysis (unbiased residuals) getting the 
-    //measurement coordinates from the LocalParameters class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&) const override final;
-    //!< reverse update for Kalman filters and other applications using the interface with Amg::Vector2D and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-    //!< reverse update for Kalman filters and other applications using the interface with LocalParameters and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-		
-    /** @brief trajectory state updator which combines two parts of a trajectory on a common surface.
-
-        Make sure that the TPs' surfaces are identical and
-        that the local hit is not duplicated in both trajectories!
-    */
-    virtual  TrackParameters* combineStates   (const TrackParameters&, 
-                                              const TrackParameters&) const override final;
-    /** @brief trajectory state updator which combines two parts of a trajectory on a common surface and provides the FitQuality.
-
-        Make sure that the TPs' surfaces are identical and that the local hit is not duplicated!*/
-    virtual  TrackParameters* combineStates   (const TrackParameters&, 
-                                               const TrackParameters&, 
-                                               FitQualityOnSurface*&) const override final;
-
-    //!< estimator for FitQuality on Surface from a full track state, that is a state which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const Amg::Vector2D&, 
-                                                            const Amg::MatrixX& ) const override final;
-    //!< estimator for FitQuality on Surface from a full track state, that is a state which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const LocalParameters&, 
-                                                            const Amg::MatrixX& ) const override final;
-    //!< estimator for FitQuality on Surface from a predicted track state, that is a state which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const Amg::Vector2D&, 
-                                                                 const Amg::MatrixX& ) const override final;
-    //!< estimator for FitQuality on Surface from a predicted track state, that is a state which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const LocalParameters&, 
-                                                                 const Amg::MatrixX& ) const override final;
-    //!< estimator for FitQuality on Surface for the situation when a track is fitted to the parameters of another trajectory part extrapolated to the common surface.
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const TrackParameters&) const override final;
-    //!< interface for reference-track KF
-    virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference (const AmgVector(5)&, 
-                                                                                 const AmgSymMatrix(5)&, 
-                                                                                 const Amg::VectorX&, 
-                                                                                 const Amg::MatrixX&, 
-                                                                                 const int&, 
-                                                                                 Trk::FitQualityOnSurface*&, bool ) const override final;
-
-    //!< give back how updator is configured for inital covariances
-    virtual std::vector<double>  initialErrors() const override final;
-		
+class KalmanUpdatorAmg
+  : virtual public IUpdator
+  , public AthAlgTool
+{
+
+  enum RangeCheckDef
+  {
+    absoluteCheck = 0,
+    differentialCheck = 1
+  };
+
+public:
+  //!< AlgTool standard constuctor
+  KalmanUpdatorAmg(const std::string&, const std::string&, const IInterface*);
+  //!<< AlgTool standard destructor
+  ~KalmanUpdatorAmg();
+
+  //!< AlgTool initialisation
+  virtual StatusCode initialize() override final;
+  //!< AlgTool termination
+  virtual StatusCode finalize() override final;
+
+  //!< measurement updator for the KalmanFitter getting the meas't coord' from
+  //!< Amg::Vector2D (use eg with PRD)
+  // fails: @copydoc Trk::IUpdator::addToState(const TrackParameters&, const
+  // Amg::Vector2D&, const Amg::MatrixX&)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //!< measurement updator for the KalmanFitter getting the coord' from
+  // LocalParameters (use for example with MeasurementBase, ROT)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //!< measurement updator interface for the KalmanFitter returning the fit
+  //!< quality of the state at the same time (Amg::Vector2D-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //!< measurement updator interface for the KalmanFitter returning the fit
+  //!< quality of the state at the same time (LocalParameters-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  //!< reverse update eg for track property analysis (unbiased residuals)
+  //!< getting the measurement coordinates from the Amg::Vector2D class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //!< reverse update eg for track property analysis (unbiased residuals)
+  //!< getting the
+  // measurement coordinates from the LocalParameters class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //!< reverse update for Kalman filters and other applications using the
+  //!< interface with Amg::Vector2D and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //!< reverse update for Kalman filters and other applications using the
+  //!< interface with LocalParameters and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  /** @brief trajectory state updator which combines two parts of a trajectory
+     on a common surface.
+
+      Make sure that the TPs' surfaces are identical and
+      that the local hit is not duplicated in both trajectories!
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  /** @brief trajectory state updator which combines two parts of a trajectory
+     on a common surface and provides the FitQuality.
+
+      Make sure that the TPs' surfaces are identical and that the local hit is
+     not duplicated!*/
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&,
+    FitQualityOnSurface*&) const override final;
+
+  //!< estimator for FitQuality on Surface from a full track state, that is a
+  //!< state which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //!< estimator for FitQuality on Surface from a full track state, that is a
+  //!< state which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //!< estimator for FitQuality on Surface from a predicted track state, that is
+  //!< a state which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //!< estimator for FitQuality on Surface from a predicted track state, that is
+  //!< a state which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //!< estimator for FitQuality on Surface for the situation when a track is
+  //!< fitted to the parameters of another trajectory part extrapolated to the
+  //!< common surface.
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  //!< interface for reference-track KF
+  virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const Amg::VectorX&,
+    const Amg::MatrixX&,
+    const int&,
+    Trk::FitQualityOnSurface*&,
+    bool) const override final;
+
+  //!< give back how updator is configured for inital covariances
+  virtual std::vector<double> initialErrors() const override final;
+
 private:
-    //!< common code analysing the measurement's rank and calling the appropriate implementation for this rank.
-    TrackParameters* prepareFilterStep(const TrackParameters&,
-                                       const LocalParameters&,
-                                       const Amg::MatrixX&,
-                                       const int, 
-                                       FitQualityOnSurface*&,
-                                       bool) const;     
-                                             
-
-    //!< estimator for FitQuality on Surface from a full/predicted track state, that is a state which contains the current hit (expressed as Amg::Vector2D).
-    const FitQualityOnSurface* stateFitQuality (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&, int predFull ) const;
-    //!< estimator for FitQuality on Surface from a full/predicted track state, that is a state which contains the current hit (expressed as LocalParameters).
-    const FitQualityOnSurface* stateFitQuality (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&, int predFull ) const;
-                                                                                     
-    //!< common maths calculation code for all addToState and removeFromState versions which happen to be called with 1-dim measurements.
-    TrackParameters* calculateFilterStep_1D(const TrackParameters& TP, const AmgSymMatrix(5)& trkCov,
-                                            double measPar, double measCov, int paramKey, 
-                                            int updateDirection,
-                                            FitQualityOnSurface*& fQ,
-                                            bool) const;
-    //!< updator maths for pure AMG matrix as needed by reference-track based KF
-    std::pair<AmgVector(5), AmgSymMatrix(5)>* 
-      calculateFilterStep_1D(const AmgVector(5)&, const AmgSymMatrix(5)&, 
-                             double measPar, double measCov, int paramKey,
-                             FitQualityOnSurface*& , bool) const;
-
-
-    //!< common maths calculation code for all addToState and removeFromState versions which happen to be called with (2-4)-dim measurements.
-    template <int DIM> 
-    TrackParameters* calculateFilterStep_T(const TrackParameters& TP, const AmgSymMatrix(5)& trkCov,
-                                           const AmgVector(DIM)& measPar, const AmgSymMatrix(DIM)& measCov, int paramKey,
-                                           int updateDirection,
-                                           FitQualityOnSurface*& fQ,
-                                           bool) const;    
-    //!< updator maths for pure AMG matrix as needed by reference-track based KF, 2-4 dim case
-    template <int DIM>
-    std::pair<AmgVector(5), AmgSymMatrix(5)>* 
-      calculateFilterStep_T(const AmgVector(5)&, const AmgSymMatrix(5)&,
-                            const AmgVector(DIM)& measPar, const AmgSymMatrix(DIM)& measCov,int paramKey,
-                            FitQualityOnSurface*& , bool) const;
-                                                 
-    //!< common maths calculation code for all addToState and removeFromState versions which happen to be called with (2-4)-dim measurements.
-    TrackParameters* calculateFilterStep_5D(const TrackParameters& TP, const AmgSymMatrix(5)& trkCov,
-                                            const AmgVector(5)& measPar, const AmgSymMatrix(5)& measCov,
-                                            int updateDirection,
-                                            FitQualityOnSurface*& fQ,
-                                            bool) const;
-                                                                                                  
-    //!< updator maths for pure AMG matrix as needed by reference-track based KF, 5-dim case
-    std::pair<AmgVector(5), AmgSymMatrix(5)>* 
-      calculateFilterStep_5D(const AmgVector(5)&, const AmgSymMatrix(5)&, 
-                             const AmgVector(5)&, const AmgSymMatrix(5)&,
-                             FitQualityOnSurface*& , bool) const;
-
-    //!< Avoid multiplications with sparse H matrices by cutting 2D rows&columns out of the full cov matrix.
-    template <int DIM> AmgSymMatrix(DIM) projection_T(const AmgSymMatrix(5)&, const int&) const;
-
-    /** also the chi2 calculation and FitQuality object creation is
-        combined in an extra method. It is called by all the XXX-FitQuality()
-        methods 
-        The sign controls the calculation in case a predicted input track state
-        (sign=+1) or smoothed/updated input track state (sign=-1).
-    */
-    //!< make chi2 object for 1D, int is the accessor in the 5-par vector
-    FitQualityOnSurface* makeChi2_1D(const AmgVector(5)& trkPar, const AmgSymMatrix(5)& trkCov,
-                                     double measPar, double measCov, int accessor, int updateDirection) const;
-    //!< make chi2 object for 2D-4D, int is the paramkey                                
-    template <int DIM> 
-    FitQualityOnSurface* makeChi2_T(const AmgVector(5)& trkPar, const AmgSymMatrix(5)& trkCov,
-                                    const AmgVector(DIM)&,const AmgSymMatrix(DIM)&, int paramKey, int updateDirection) const;
-
-    //!< Helper method to transform Eigen cov matrix to SMatrix.
-    const AmgSymMatrix(5)* getStartCov(const TrackParameters&, const int) const;
-    
-    //!< Helper method to convert internal results from SMatrix to Eigen. */
-    TrackParameters* convertToClonedTrackPars(const TrackParameters&,
-                                              const AmgVector(5)&,
-                                              const AmgSymMatrix(5)&,
-                                              int, bool, std::string_view) const;
-                                                    
-
-    // === note: any of the following log... method is only called if
-    // the msgstream level has been set appropriately. 
-    //!< internal structuring: debugging output for start of method.
-    void logStart (const std::string&, const AmgVector(5)&) const;
-    //!< internal structuring: common logfile output of the inputs 
-    void logInputCov (const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&) const;
-    //!< internal structuring: common logfile output during calculation
-    void logGainForm (const Amg::MatrixX&, const Amg::MatrixX&, const Amg::MatrixX&) const;
-    //!< internal structuring: common logfile output after calculation
-    void logResult(const std::string&, const AmgVector(5)&, const AmgSymMatrix(5)&) const;
-
-    //!< method testing correct use of LocalParameters
-    bool consistentParamDimensions(const LocalParameters&, const int&) const;
-
-    //!< Test if angles are inside boundaries.
-    /** Absolute phi values should be in [-pi, pi] (how about endpoints?)
-        absolute theta values should be in [0, +pi]
-        phi differences should also be in [-pi, pi] - else go other way round,
-        theta differences should be smaller than pi but can be negative 
-              => other constraint than absolute theta.
-    */
-    bool thetaPhiWithinRange_5D (const AmgVector(5)& V,
-                                 const KalmanUpdatorAmg::RangeCheckDef rcd) const;
-
-    //!< Test if theta angle is inside boundaries. No differential-check option.
-    bool thetaWithinRange_5D (const AmgVector(5)& V) const;
-
-    //!< method correcting the calculated angles back to their defined ranges phi (-pi, pi) and theta (0, pi).
-    /** Only works if the excess is not far from the defined range, as it
-        happens e.g. when the update moves across the phi= +/-pi boundary. */
-    bool correctThetaPhiRange_5D(AmgVector(5)&, AmgSymMatrix(5)&,
-                                 const KalmanUpdatorAmg::RangeCheckDef) const;
-
-
-    std::vector<double>         m_cov_stdvec;           //!<< job options for initial cov values
-    AmgVector(5)                m_cov0Vec;              //!<< initial cov values in AmgVector object
-    AmgSymMatrix(5)*            m_covariance0;          //!<< initial cov values in AmgMatrix
-    bool                        m_useFruehwirth8a;      //!<< job options controlling update formula for covariance matrix
-    float                       m_thetaGainDampingValue;
-                                
-    AmgSymMatrix(5)             m_unitMatrix;           //!<< avoid mem allocation at every call
-    
-    ProjectionMatricesSet       m_reMatrices;           //!< expansion and reduction matrices set 
-    
-    static  const ParamDefsAccessor   s_enumAccessor;
+  //!< common code analysing the measurement's rank and calling the appropriate
+  //!< implementation for this rank.
+  std::unique_ptr<TrackParameters> prepareFilterStep(const TrackParameters&,
+                                                     const LocalParameters&,
+                                                     const Amg::MatrixX&,
+                                                     const int,
+                                                     FitQualityOnSurface*&,
+                                                     bool) const;
+
+  //!< estimator for FitQuality on Surface from a full/predicted track state,
+  //!< that is a state which contains the current hit (expressed as
+  //!< Amg::Vector2D).
+  const FitQualityOnSurface* stateFitQuality(const TrackParameters&,
+                                             const Amg::Vector2D&,
+                                             const Amg::MatrixX&,
+                                             int predFull) const;
+  //!< estimator for FitQuality on Surface from a full/predicted track state,
+  //!< that is a state which contains the current hit (expressed as
+  //!< LocalParameters).
+  const FitQualityOnSurface* stateFitQuality(const TrackParameters&,
+                                             const LocalParameters&,
+                                             const Amg::MatrixX&,
+                                             int predFull) const;
+
+  //!< common maths calculation code for all addToState and removeFromState
+  //!< versions which happen to be called with 1-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_1D(
+    const TrackParameters& TP,
+    const AmgSymMatrix(5) & trkCov,
+    double measPar,
+    double measCov,
+    int paramKey,
+    int updateDirection,
+    FitQualityOnSurface*& fQ,
+    bool) const;
+  //!< updator maths for pure AMG matrix as needed by reference-track based KF
+  std::pair<AmgVector(5), AmgSymMatrix(5)>* calculateFilterStep_1D(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    double measPar,
+    double measCov,
+    int paramKey,
+    FitQualityOnSurface*&,
+    bool) const;
+
+  //!< common maths calculation code for all addToState and removeFromState
+  //!< versions which happen to be called with (2-4)-dim measurements.
+  template<int DIM>
+  std::unique_ptr<TrackParameters> calculateFilterStep_T(
+    const TrackParameters& TP,
+    const AmgSymMatrix(5) & trkCov,
+    const AmgVector(DIM) & measPar,
+    const AmgSymMatrix(DIM) & measCov,
+    int paramKey,
+    int updateDirection,
+    FitQualityOnSurface*& fQ,
+    bool) const;
+  //!< updator maths for pure AMG matrix as needed by reference-track based KF,
+  //!< 2-4 dim case
+  template<int DIM>
+  std::pair<AmgVector(5), AmgSymMatrix(5)>* calculateFilterStep_T(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const AmgVector(DIM) & measPar,
+    const AmgSymMatrix(DIM) & measCov,
+    int paramKey,
+    FitQualityOnSurface*&,
+    bool) const;
+
+  //!< common maths calculation code for all addToState and removeFromState
+  //!< versions which happen to be called with (2-4)-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_5D(
+    const TrackParameters& TP,
+    const AmgSymMatrix(5) & trkCov,
+    const AmgVector(5) & measPar,
+    const AmgSymMatrix(5) & measCov,
+    int updateDirection,
+    FitQualityOnSurface*& fQ,
+    bool) const;
+
+  //!< updator maths for pure AMG matrix as needed by reference-track based KF,
+  //!< 5-dim case
+  std::pair<AmgVector(5), AmgSymMatrix(5)>* calculateFilterStep_5D(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    FitQualityOnSurface*&,
+    bool) const;
+
+  //!< Avoid multiplications with sparse H matrices by cutting 2D rows&columns
+  //!< out of the full cov matrix.
+  template<int DIM>
+  AmgSymMatrix(DIM) projection_T(const AmgSymMatrix(5) &, const int&) const;
+
+  /** also the chi2 calculation and FitQuality object creation is
+      combined in an extra method. It is called by all the XXX-FitQuality()
+      methods
+      The sign controls the calculation in case a predicted input track state
+      (sign=+1) or smoothed/updated input track state (sign=-1).
+  */
+  //!< make chi2 object for 1D, int is the accessor in the 5-par vector
+  FitQualityOnSurface* makeChi2_1D(const AmgVector(5) & trkPar,
+                                   const AmgSymMatrix(5) & trkCov,
+                                   double measPar,
+                                   double measCov,
+                                   int accessor,
+                                   int updateDirection) const;
+  //!< make chi2 object for 2D-4D, int is the paramkey
+  template<int DIM>
+  FitQualityOnSurface* makeChi2_T(const AmgVector(5) & trkPar,
+                                  const AmgSymMatrix(5) & trkCov,
+                                  const AmgVector(DIM) &,
+                                  const AmgSymMatrix(DIM) &,
+                                  int paramKey,
+                                  int updateDirection) const;
+
+  //!< Helper method to transform Eigen cov matrix to SMatrix.
+  const AmgSymMatrix(5) * getStartCov(const TrackParameters&, const int) const;
+
+  //!< Helper method to convert internal results from SMatrix to Eigen. */
+  std::unique_ptr<TrackParameters> convertToClonedTrackPars(
+    const TrackParameters&,
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    int,
+    bool,
+    std::string_view) const;
+
+  // === note: any of the following log... method is only called if
+  // the msgstream level has been set appropriately.
+  //!< internal structuring: debugging output for start of method.
+  void logStart(const std::string&, const AmgVector(5) &) const;
+  //!< internal structuring: common logfile output of the inputs
+  void logInputCov(const AmgSymMatrix(5) &,
+                   const Amg::VectorX&,
+                   const Amg::MatrixX&) const;
+  //!< internal structuring: common logfile output during calculation
+  void logGainForm(const Amg::MatrixX&,
+                   const Amg::MatrixX&,
+                   const Amg::MatrixX&) const;
+  //!< internal structuring: common logfile output after calculation
+  void logResult(const std::string&,
+                 const AmgVector(5) &,
+                 const AmgSymMatrix(5) &) const;
+
+  //!< method testing correct use of LocalParameters
+  bool consistentParamDimensions(const LocalParameters&, const int&) const;
+
+  //!< Test if angles are inside boundaries.
+  /** Absolute phi values should be in [-pi, pi] (how about endpoints?)
+      absolute theta values should be in [0, +pi]
+      phi differences should also be in [-pi, pi] - else go other way round,
+      theta differences should be smaller than pi but can be negative
+            => other constraint than absolute theta.
+  */
+  bool thetaPhiWithinRange_5D(const AmgVector(5) & V,
+                              const KalmanUpdatorAmg::RangeCheckDef rcd) const;
+
+  //!< Test if theta angle is inside boundaries. No differential-check option.
+  bool thetaWithinRange_5D(const AmgVector(5) & V) const;
+
+  //!< method correcting the calculated angles back to their defined ranges phi
+  //!< (-pi, pi) and theta (0, pi).
+  /** Only works if the excess is not far from the defined range, as it
+      happens e.g. when the update moves across the phi= +/-pi boundary. */
+  bool correctThetaPhiRange_5D(AmgVector(5) &,
+                               AmgSymMatrix(5) &,
+                               const KalmanUpdatorAmg::RangeCheckDef) const;
+
+  std::vector<double> m_cov_stdvec; //!<< job options for initial cov values
+  AmgVector(5) m_cov0Vec;           //!<< initial cov values in AmgVector object
+  AmgSymMatrix(5) * m_covariance0;  //!<< initial cov values in AmgMatrix
+  bool m_useFruehwirth8a; //!<< job options controlling update formula for
+                          //!< covariance matrix
+  float m_thetaGainDampingValue;
+
+  AmgSymMatrix(5) m_unitMatrix; //!<< avoid mem allocation at every call
+
+  ProjectionMatricesSet m_reMatrices; //!< expansion and reduction matrices set
+
+  static const ParamDefsAccessor s_enumAccessor;
 };
 
- template <int DIM> TrackParameters* 
-    KalmanUpdatorAmg::calculateFilterStep_T(const TrackParameters& TP, const AmgSymMatrix(5)& trkCov,
-                                            const AmgVector(DIM)& measPar, const AmgSymMatrix(DIM)& measCov, int paramKey,
-                                            int sign,
-                                            FitQualityOnSurface*& fQ,
-                                            bool createFQoS) const
-  {
-      
-    ATH_MSG_DEBUG("--> entered KalmanUpdatorAmg::calculateFilterStep_T< " << DIM << ">");
-    // get the parameter vector
-    const AmgVector(5)&  trkPar = TP.parameters();
-    // reduction matrix H, Kalman gain K, residual r, combined covariance R
-    AmgMatrix(DIM,5) H; AmgMatrix(5,DIM) K; AmgMatrix(5,5) M; 
-    AmgVector(DIM) r; AmgSymMatrix(DIM) R; 
-    // reduction matrix
-    H = m_reMatrices.expansionMatrix(paramKey).block<DIM,5>(0,0);
-    // the projected parameters from the TrackParameters
-    AmgVector(DIM) projTrkPar;
-    if ( paramKey == 3 || paramKey == 7 || paramKey == 15 )
-        projTrkPar = trkPar.block<DIM,1>(0,0);
-    else projTrkPar = H*trkPar;
-    // residual after reduction
-    r = measPar - projTrkPar;
-    // combined covariance after reduction
-    R = (sign * measCov + projection_T<DIM>(trkCov,paramKey)).inverse();
-    // Kalman gain matrix
-    K = trkCov * H.transpose() * R;
-    // screen output
-    M = m_unitMatrix - K*H;
-    if (msgLvl(MSG::VERBOSE)) {logGainForm (r, R, K);}
-    // --- compute local filtered state
-    AmgVector(5) newPar = trkPar + K * r;
-    // --- compute filtered covariance matrix
-    AmgSymMatrix(5) newCov;
-    if (!m_useFruehwirth8a) {
-      // compute covariance matrix of local filteres state
-      //   C = M * trkCov * M.T() +/- K * covRio * K.T()
-      newCov = M*trkCov*M.transpose() + sign*K*measCov*K.transpose();
-    } else {
-      //   C = (1 - KH) trkCov = trkCov - K*H*trkCov = KtimesH*trkCov
-      newCov = M * trkCov;
-    }
-    if (createFQoS) {      // get chi2 = r.T() * R2^-1 * r
-      // when adding, the r and R are ready to for calculating the predicted chi2
-      // when removing the r and -R are ready for calculating the updated chi2.
-      double  chiSquared = (sign>0) ?  r.transpose()*R*r : r.transpose()*(-R)*r;
-      // create the FQSonSurface
-      fQ = new FitQualityOnSurface(chiSquared, DIM);
-    }
-    return convertToClonedTrackPars(TP,newPar,newCov,sign,createFQoS,"2D");
-    
- }
-
-  template <int DIM> std::pair<AmgVector(5), AmgSymMatrix(5)>*
-    KalmanUpdatorAmg::calculateFilterStep_T(const AmgVector(5)& trkPar, const AmgSymMatrix(5)& trkCov,
-                                            const AmgVector(DIM)& measPar, const AmgSymMatrix(DIM)& measCov,
-                                            int paramKey, FitQualityOnSurface*& fQ , bool createFQ) const
-  {
-    ATH_MSG_DEBUG("--> entered KalmanUpdatorAmg::calculateFilterStep_T< " << DIM << ">");
-    // reduction matrix H, Kalman gain K, residual r, combined covariance R
-    AmgMatrix(DIM,5) H; AmgMatrix(5,DIM) K; AmgMatrix(5,5) M;
-    AmgVector(DIM) r; AmgSymMatrix(DIM) R; int sign=1;
-    // reduction matrix
-    H = m_reMatrices.expansionMatrix(paramKey).block<DIM,5>(0,0);
-    // the projected parameters from the TrackParameters
-    AmgVector(DIM) projTrkPar;
-    if ( paramKey == 3 || paramKey == 7 || paramKey == 15 )
-      projTrkPar = trkPar.block<DIM,1>(0,0);
-    else projTrkPar = H*trkPar;
-    // residual after reduction
-    r = measPar - projTrkPar;
-    // combined covariance after reduction
-    R = (sign * measCov + projection_T<DIM>(trkCov,paramKey)).inverse();
-    // Kalman gain matrix
-    K = trkCov * H.transpose() * R;
-    // screen output
-    M = m_unitMatrix - K*H;
-    if (msgLvl(MSG::VERBOSE)) {logGainForm (r, R, K);}
-    // --- compute local filtered state
-    AmgVector(5) newPar = trkPar + K * r;
-    // --- compute filtered covariance matrix
-    AmgSymMatrix(5) newCov;
-    if (!m_useFruehwirth8a) {
-      // compute covariance matrix of local filtered state
-      //   C = M * trkCov * M.T() +/- K * covRio * K.T()
-      newCov = M*trkCov*M.transpose() + sign*K*measCov*K.transpose();
-    } else {
-      //   C = (1 - KH) trkCov = trkCov - K*H*trkCov = KtimesH*trkCov
-      newCov = M * trkCov;
+template<int DIM>
+std::unique_ptr<TrackParameters>
+KalmanUpdatorAmg::calculateFilterStep_T(const TrackParameters& TP,
+                                        const AmgSymMatrix(5) & trkCov,
+                                        const AmgVector(DIM) & measPar,
+                                        const AmgSymMatrix(DIM) & measCov,
+                                        int paramKey,
+                                        int sign,
+                                        FitQualityOnSurface*& fQ,
+                                        bool createFQoS) const
+{
+
+  ATH_MSG_DEBUG("--> entered KalmanUpdatorAmg::calculateFilterStep_T< " << DIM
+                                                                        << ">");
+  // get the parameter vector
+  const AmgVector(5)& trkPar = TP.parameters();
+  // reduction matrix H, Kalman gain K, residual r, combined covariance R
+  AmgMatrix(DIM, 5) H;
+  AmgMatrix(5, DIM) K;
+  AmgMatrix(5, 5) M;
+  AmgVector(DIM) r;
+  AmgSymMatrix(DIM) R;
+  // reduction matrix
+  H = m_reMatrices.expansionMatrix(paramKey).block<DIM, 5>(0, 0);
+  // the projected parameters from the TrackParameters
+  AmgVector(DIM) projTrkPar;
+  if (paramKey == 3 || paramKey == 7 || paramKey == 15)
+    projTrkPar = trkPar.block<DIM, 1>(0, 0);
+  else
+    projTrkPar = H * trkPar;
+  // residual after reduction
+  r = measPar - projTrkPar;
+  // combined covariance after reduction
+  R = (sign * measCov + projection_T<DIM>(trkCov, paramKey)).inverse();
+  // Kalman gain matrix
+  K = trkCov * H.transpose() * R;
+  // screen output
+  M = m_unitMatrix - K * H;
+  if (msgLvl(MSG::VERBOSE)) {
+    logGainForm(r, R, K);
+  }
+  // --- compute local filtered state
+  AmgVector(5) newPar = trkPar + K * r;
+  // --- compute filtered covariance matrix
+  AmgSymMatrix(5) newCov;
+  if (!m_useFruehwirth8a) {
+    // compute covariance matrix of local filteres state
+    //   C = M * trkCov * M.T() +/- K * covRio * K.T()
+    newCov = M * trkCov * M.transpose() + sign * K * measCov * K.transpose();
+  } else {
+    //   C = (1 - KH) trkCov = trkCov - K*H*trkCov = KtimesH*trkCov
+    newCov = M * trkCov;
+  }
+  if (createFQoS) { // get chi2 = r.T() * R2^-1 * r
+    // when adding, the r and R are ready to for calculating the predicted chi2
+    // when removing the r and -R are ready for calculating the updated chi2.
+    double chiSquared =
+      (sign > 0) ? r.transpose() * R * r : r.transpose() * (-R) * r;
+    // create the FQSonSurface
+    fQ = new FitQualityOnSurface(chiSquared, DIM);
+  }
+  return convertToClonedTrackPars(TP, newPar, newCov, sign, createFQoS, "2D");
+}
+
+template<int DIM>
+std::pair<AmgVector(5), AmgSymMatrix(5)>*
+KalmanUpdatorAmg::calculateFilterStep_T(const AmgVector(5) & trkPar,
+                                        const AmgSymMatrix(5) & trkCov,
+                                        const AmgVector(DIM) & measPar,
+                                        const AmgSymMatrix(DIM) & measCov,
+                                        int paramKey,
+                                        FitQualityOnSurface*& fQ,
+                                        bool createFQ) const
+{
+  ATH_MSG_DEBUG("--> entered KalmanUpdatorAmg::calculateFilterStep_T< " << DIM
+                                                                        << ">");
+  // reduction matrix H, Kalman gain K, residual r, combined covariance R
+  AmgMatrix(DIM, 5) H;
+  AmgMatrix(5, DIM) K;
+  AmgMatrix(5, 5) M;
+  AmgVector(DIM) r;
+  AmgSymMatrix(DIM) R;
+  int sign = 1;
+  // reduction matrix
+  H = m_reMatrices.expansionMatrix(paramKey).block<DIM, 5>(0, 0);
+  // the projected parameters from the TrackParameters
+  AmgVector(DIM) projTrkPar;
+  if (paramKey == 3 || paramKey == 7 || paramKey == 15)
+    projTrkPar = trkPar.block<DIM, 1>(0, 0);
+  else
+    projTrkPar = H * trkPar;
+  // residual after reduction
+  r = measPar - projTrkPar;
+  // combined covariance after reduction
+  R = (sign * measCov + projection_T<DIM>(trkCov, paramKey)).inverse();
+  // Kalman gain matrix
+  K = trkCov * H.transpose() * R;
+  // screen output
+  M = m_unitMatrix - K * H;
+  if (msgLvl(MSG::VERBOSE)) {
+    logGainForm(r, R, K);
+  }
+  // --- compute local filtered state
+  AmgVector(5) newPar = trkPar + K * r;
+  // --- compute filtered covariance matrix
+  AmgSymMatrix(5) newCov;
+  if (!m_useFruehwirth8a) {
+    // compute covariance matrix of local filtered state
+    //   C = M * trkCov * M.T() +/- K * covRio * K.T()
+    newCov = M * trkCov * M.transpose() + sign * K * measCov * K.transpose();
+  } else {
+    //   C = (1 - KH) trkCov = trkCov - K*H*trkCov = KtimesH*trkCov
+    newCov = M * trkCov;
+  }
+  if (createFQ) { // get chi2 = r.T() * R2^-1 * r
+    // when adding, the r and R are ready to for calculating the predicted chi2
+    // when removing the r and -R are ready for calculating the updated chi2.
+    double chiSquared = r.transpose() * R * r;
+    // create the FQSonSurface
+    fQ = new FitQualityOnSurface(chiSquared, DIM);
+  }
+  return new std::pair<AmgVector(5), AmgSymMatrix(5)>(
+    std::make_pair(newPar, newCov));
+}
+
+template<int DIM>
+AmgSymMatrix(DIM) Trk::KalmanUpdatorAmg::projection_T(const AmgSymMatrix(5) & M,
+                                                      const int& key) const
+{
+  if (key == 3 || key == 7 ||
+      key == 15) { // shortcuts for the most common use cases
+    return M.block<DIM, DIM>(0, 0);
+  } else {
+    Eigen::Matrix<int, DIM, 1, 0, DIM, 1> iv;
+    iv.setZero();
+    for (int i = 0, k = 0; i < 5; ++i) {
+      if (key & (1 << i))
+        iv[k++] = i;
     }
-    if (createFQ) {      // get chi2 = r.T() * R2^-1 * r
-      // when adding, the r and R are ready to for calculating the predicted chi2
-      // when removing the r and -R are ready for calculating the updated chi2.
-      double  chiSquared = r.transpose()*R*r;
-      // create the FQSonSurface
-      fQ = new FitQualityOnSurface(chiSquared, DIM);
+    AmgSymMatrix(DIM) covSubMatrix;
+    covSubMatrix.setZero();
+    for (int i = 0; i < DIM; ++i) {
+      for (int j = 0; j < DIM; ++j) {
+        covSubMatrix(i, j) = M(iv(i), iv(j));
+      }
     }
-    return new std::pair<AmgVector(5), AmgSymMatrix(5)>(std::make_pair(newPar,newCov));
+    return covSubMatrix;
   }
- 
- template <int DIM> AmgSymMatrix(DIM) 
- Trk::KalmanUpdatorAmg::projection_T(const AmgSymMatrix(5)& M, const int& key) const
- {
-   if (key == 3 || key == 7 || key == 15) { // shortcuts for the most common use cases 
-     return M.block<DIM, DIM>(0,0);
-   } else {
-     Eigen::Matrix<int, DIM, 1, 0, DIM, 1> iv; iv.setZero();
-     for (int i=0,k=0; i<5; ++i) { if (key & (1<<i)) iv[k++]=i; }
-     AmgSymMatrix(DIM) covSubMatrix; covSubMatrix.setZero();
-     for (int i=0; i<DIM; ++i) {
-       for (int j=0; j<DIM; ++j) {
-         covSubMatrix(i,j) = M(iv(i),iv(j));
-       }
-     }
-     return covSubMatrix;
-   }
- }
- 
- template <int DIM> 
- Trk::FitQualityOnSurface* Trk::KalmanUpdatorAmg::makeChi2_T(const AmgVector(5)& trkPar,
-                                                             const AmgSymMatrix(5)& trkCov,
-                                                             const AmgVector(DIM)& measPar,
-                                                             const AmgSymMatrix(DIM)& covPar,
-                                                             int paramKey,
-                                                             int sign) const
- {   // sign: -1 = updated, +1 = predicted parameters.
-
-   // make reduction matrix H from LocalParameters
-   AmgMatrix(DIM,5)  H = m_reMatrices.expansionMatrix(paramKey).block<DIM,5>(0,0);
-   // not get the residual
-   ATH_MSG_VERBOSE("-U- makeChi2<"<<DIM<<">: H="<<H<<" is "<<
-                   m_reMatrices.expansionMatrix(paramKey).rows()<<"x"<<
-                   m_reMatrices.expansionMatrix(paramKey).cols()<<" for paramkey "<<paramKey);
-   AmgVector(DIM) r = measPar - H * trkPar;
-   // get the projected matrix 
-   AmgSymMatrix(DIM) R = sign*projection_T<DIM>(trkCov,paramKey);     
-   R += covPar;
-   // calcualte the chi2 value
-   double chiSquared = 0.0;
-   if (R.determinant()==0.0) { 
-     ATH_MSG_DEBUG("matrix inversion not possible, set chi2 to zero");
-   } else {
-     chiSquared = r.transpose()*R.inverse()*r;
-   }
-   return new FitQualityOnSurface(chiSquared, DIM);
- }
-  
- inline bool KalmanUpdatorAmg::thetaPhiWithinRange_5D (const AmgVector(5)& V, const KalmanUpdatorAmg::RangeCheckDef rcd) const {
-   static const AmgVector(2) thetaMin(0.0,-M_PI);
-   return ( (fabs(V(Trk::phi)) <= M_PI) && 
-            (V(Trk::theta)>=thetaMin((int)rcd)) && (V(Trk::theta) <= M_PI) );
- }
-
- inline bool KalmanUpdatorAmg::thetaWithinRange_5D (const AmgVector(5)& V) const {
-   return (V(Trk::theta)>=0.0 && (V(Trk::theta) <= M_PI) );
- }
-		
+}
+
+template<int DIM>
+Trk::FitQualityOnSurface*
+Trk::KalmanUpdatorAmg::makeChi2_T(const AmgVector(5) & trkPar,
+                                  const AmgSymMatrix(5) & trkCov,
+                                  const AmgVector(DIM) & measPar,
+                                  const AmgSymMatrix(DIM) & covPar,
+                                  int paramKey,
+                                  int sign) const
+{ // sign: -1 = updated, +1 = predicted parameters.
+
+  // make reduction matrix H from LocalParameters
+  AmgMatrix(DIM, 5) H =
+    m_reMatrices.expansionMatrix(paramKey).block<DIM, 5>(0, 0);
+  // not get the residual
+  ATH_MSG_VERBOSE("-U- makeChi2<"
+                  << DIM << ">: H=" << H << " is "
+                  << m_reMatrices.expansionMatrix(paramKey).rows() << "x"
+                  << m_reMatrices.expansionMatrix(paramKey).cols()
+                  << " for paramkey " << paramKey);
+  AmgVector(DIM) r = measPar - H * trkPar;
+  // get the projected matrix
+  AmgSymMatrix(DIM) R = sign * projection_T<DIM>(trkCov, paramKey);
+  R += covPar;
+  // calcualte the chi2 value
+  double chiSquared = 0.0;
+  if (R.determinant() == 0.0) {
+    ATH_MSG_DEBUG("matrix inversion not possible, set chi2 to zero");
+  } else {
+    chiSquared = r.transpose() * R.inverse() * r;
+  }
+  return new FitQualityOnSurface(chiSquared, DIM);
+}
+
+inline bool
+KalmanUpdatorAmg::thetaPhiWithinRange_5D(
+  const AmgVector(5) & V,
+  const KalmanUpdatorAmg::RangeCheckDef rcd) const
+{
+  static const AmgVector(2) thetaMin(0.0, -M_PI);
+  return ((fabs(V(Trk::phi)) <= M_PI) &&
+          (V(Trk::theta) >= thetaMin((int)rcd)) && (V(Trk::theta) <= M_PI));
+}
+
+inline bool
+KalmanUpdatorAmg::thetaWithinRange_5D(const AmgVector(5) & V) const
+{
+  return (V(Trk::theta) >= 0.0 && (V(Trk::theta) <= M_PI));
+}
+
 } // end of namespace
 
 #endif // TRK_KALMANUPDATORAMG_H
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorSMatrix.h b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorSMatrix.h
index 5ba83a0ac0940c1e1e36478a5286766a6aba4b33..a0841f0e35a7504ac71bf4b61979176b2ae02692 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorSMatrix.h
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanUpdatorSMatrix.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -15,48 +15,60 @@
 #define TRK_KALMANUPDATORSMATRIX_H
 
 #if __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wstrict-overflow"
-# if !defined(__clang__) && __GNUC__ >= 6
-#  pragma GCC diagnostic ignored "-Wmisleading-indentation"
-# endif
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-overflow"
+#if !defined(__clang__) && __GNUC__ >= 6
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
 #endif
 
-#include "TrkToolInterfaces/IUpdator.h"
+#include "AthenaBaseComps/AthAlgTool.h"
 #include "TrkEventPrimitives/ParamDefs.h"
 #include "TrkParameters/TrackParameters.h"
-#include "AthenaBaseComps/AthAlgTool.h"
+#include "TrkToolInterfaces/IUpdator.h"
 // Eigen/Amg
 #include "EventPrimitives/EventPrimitives.h"
 // ROOT SMatrix lin alg: for internal calculations
 #include "Math/SMatrix.h"
 #include "Math/SVector.h"
-#include <string_view>
 #include <cmath>
+#include <string_view>
 
-typedef ROOT::Math::SMatrix<double,1,1,ROOT::Math::MatRepSym<double,1> >   SCovMatrix1;
-typedef ROOT::Math::SMatrix<double,2,2,ROOT::Math::MatRepSym<double,2> >   SCovMatrix2;
-typedef ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> >   SCovMatrix3;
-typedef ROOT::Math::SMatrix<double,4,4,ROOT::Math::MatRepSym<double,4> >   SCovMatrix4;
-typedef ROOT::Math::SMatrix<double,5,5,ROOT::Math::MatRepSym<double,5> >   SCovMatrix5;
-typedef ROOT::Math::SMatrix<double,2,2,ROOT::Math::MatRepStd<double,2,2> > SGenMatrix2;
-typedef ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepStd<double,3,3> > SGenMatrix3;
-typedef ROOT::Math::SMatrix<double,4,4,ROOT::Math::MatRepStd<double,4,4> > SGenMatrix4;
-typedef ROOT::Math::SMatrix<double,5,5,ROOT::Math::MatRepStd<double,5,5> > SGenMatrix5;
-typedef ROOT::Math::SVector<double,2>                                      SParVector2;
-typedef ROOT::Math::SVector<double,3>                                      SParVector3;
-typedef ROOT::Math::SVector<double,4>                                      SParVector4;
-typedef ROOT::Math::SVector<double,5>                                      SParVector5;
-
-
+typedef ROOT::Math::SMatrix<double, 1, 1, ROOT::Math::MatRepSym<double, 1>>
+  SCovMatrix1;
+typedef ROOT::Math::SMatrix<double, 2, 2, ROOT::Math::MatRepSym<double, 2>>
+  SCovMatrix2;
+typedef ROOT::Math::SMatrix<double, 3, 3, ROOT::Math::MatRepSym<double, 3>>
+  SCovMatrix3;
+typedef ROOT::Math::SMatrix<double, 4, 4, ROOT::Math::MatRepSym<double, 4>>
+  SCovMatrix4;
+typedef ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>
+  SCovMatrix5;
+typedef ROOT::Math::SMatrix<double, 2, 2, ROOT::Math::MatRepStd<double, 2, 2>>
+  SGenMatrix2;
+typedef ROOT::Math::SMatrix<double, 3, 3, ROOT::Math::MatRepStd<double, 3, 3>>
+  SGenMatrix3;
+typedef ROOT::Math::SMatrix<double, 4, 4, ROOT::Math::MatRepStd<double, 4, 4>>
+  SGenMatrix4;
+typedef ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepStd<double, 5, 5>>
+  SGenMatrix5;
+typedef ROOT::Math::SVector<double, 2> SParVector2;
+typedef ROOT::Math::SVector<double, 3> SParVector3;
+typedef ROOT::Math::SVector<double, 4> SParVector4;
+typedef ROOT::Math::SVector<double, 5> SParVector5;
 
 namespace Trk {
 
- enum RangeCheckDef {absoluteCheck=0, differentialCheck=1};
+enum RangeCheckDef
+{
+  absoluteCheck = 0,
+  differentialCheck = 1
+};
 
 /** @class KalmanUpdatorSMatrix
 
-    @brief Implementation of Trk::IUpdator based on gain formalism and SMatrix mathlib.
+    @brief Implementation of Trk::IUpdator based on gain formalism and SMatrix
+   mathlib.
 
     Tool providing calculations on track states, i.e. to add or
     remove a measured hit to the state vector.
@@ -66,260 +78,339 @@ namespace Trk {
 
     @author Wolfgang Liebig <http://consult.cern.ch/xwho/people/54608>
  */
-class KalmanUpdatorSMatrix : virtual public IUpdator, public AthAlgTool { 
-  public:	
-    //! AlgTool standard constuctor
-    KalmanUpdatorSMatrix(const std::string&,const std::string&,const IInterface*);
-    virtual ~KalmanUpdatorSMatrix();
-		
-    //! AlgTool initialisation
-    virtual StatusCode initialize() override;
-    //! AlgTool termination
-    virtual StatusCode finalize() override;
-			
-    //! measurement updator for the KalmanFitter getting the meas't coord' from Amg::Vector2D (use eg with PRD)
-    // fails: @copydoc Trk::IUpdator::addToState(const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&) const override final;
-    //! measurement updator for the KalmanFitter getting the coord' from LocalParameters (use for example with MeasurementBase, ROT)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&) const override final;
-    //! measurement updator interface for the KalmanFitter returning the fit quality of the state at the same time (Amg::Vector2D-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const Amg::Vector2D&, 
-                                         const Amg::MatrixX&, 
-                                         FitQualityOnSurface*& ) const override final;
-    //! measurement updator interface for the KalmanFitter returning the fit quality of the state at the same time (LocalParameters-version)
-    virtual TrackParameters* addToState (const TrackParameters&, 
-                                         const LocalParameters&, 
-                                         const Amg::MatrixX&, 
-                                         FitQualityOnSurface*& ) const override final;
-
-    //! reverse update eg for track property analysis (unbiased residuals) getting the measurement coordinates from the Amg::Vector2D class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&) const override final;
-    //! reverse update eg for track property analysis (unbiased residuals) getting the measurement coordinates from the LocalParameters class.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&) const override final;
-    //! reverse update for Kalman filters and other applications using the interface with Amg::Vector2D and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const Amg::Vector2D&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-    //! reverse update for Kalman filters and other applications using the interface with LocalParameters and FitQualityOnSurface.
-    virtual TrackParameters* removeFromState (const TrackParameters&, 
-                                              const LocalParameters&, 
-                                              const Amg::MatrixX&, 
-                                              FitQualityOnSurface*& ) const override final;
-		
-    /** @brief trajectory state updator which combines two parts of a trajectory on a common surface.
-
-        Make sure that the TPs' surfaces are identical and
-        that the local hit is not duplicated in both trajectories!
-    */
-
-    virtual TrackParameters* combineStates   (const TrackParameters&, 
-                                              const TrackParameters&) const override final;
-    /** @brief trajectory state updator which combines two parts of a trajectory on a common surface and provides the FitQuality.
-
-        Make sure that the TPs' surfaces are identical and that the local hit is not duplicated!
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, 
-                                              const TrackParameters&, 
-                                              FitQualityOnSurface*&) const override final;
-
-    //! estimator for FitQuality on Surface from a full track state, that is a state which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const Amg::Vector2D&, 
-                                                            const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface from a full track state, that is a state which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, 
-                                                            const LocalParameters&, 
-                                                            const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface from a predicted track state, that is a state which contains the current hit (expressed as Amg::Vector2D).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const Amg::Vector2D&,
-                                                                 const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface from a predicted track state, that is a state which contains the current hit (expressed as LocalParameters).
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const LocalParameters&, 
-                                                                 const Amg::MatrixX& ) const override final;
-    //! estimator for FitQuality on Surface for the situation when a track is fitted to the parameters of another trajectory part extrapolated to the common surface.
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, 
-                                                                 const TrackParameters&) const override final;
-    //! interface for reference-track KF, not implemented
-    virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference (const AmgVector(5)&, 
-                                                                                 const AmgSymMatrix(5)&, 
-                                                                                 const Amg::VectorX&, 
-                                                                                 const Amg::MatrixX&, 
-                                                                                 const int&, 
-                                                                                 Trk::FitQualityOnSurface*&, 
-                                                                                 bool ) const override final
-    {return nullptr;}
-
-    //! give back how updator is configured for inital covariances
-    virtual std::vector<double>  initialErrors() const override final;
-		
+class KalmanUpdatorSMatrix
+  : virtual public IUpdator
+  , public AthAlgTool
+{
+public:
+  //! AlgTool standard constuctor
+  KalmanUpdatorSMatrix(const std::string&,
+                       const std::string&,
+                       const IInterface*);
+  virtual ~KalmanUpdatorSMatrix();
+
+  //! AlgTool initialisation
+  virtual StatusCode initialize() override;
+  //! AlgTool termination
+  virtual StatusCode finalize() override;
+
+  //! measurement updator for the KalmanFitter getting the meas't coord' from
+  //! Amg::Vector2D (use eg with PRD)
+  // fails: @copydoc Trk::IUpdator::addToState(const TrackParameters&, const
+  // Amg::Vector2D&, const Amg::MatrixX&)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! measurement updator for the KalmanFitter getting the coord' from
+  //! LocalParameters (use for example with MeasurementBase, ROT)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! measurement updator interface for the KalmanFitter returning the fit
+  //! quality of the state at the same time (Amg::Vector2D-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //! measurement updator interface for the KalmanFitter returning the fit
+  //! quality of the state at the same time (LocalParameters-version)
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  //! reverse update eg for track property analysis (unbiased residuals) getting
+  //! the measurement coordinates from the Amg::Vector2D class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! reverse update eg for track property analysis (unbiased residuals) getting
+  //! the measurement coordinates from the LocalParameters class.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! reverse update for Kalman filters and other applications using the
+  //! interface with Amg::Vector2D and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  //! reverse update for Kalman filters and other applications using the
+  //! interface with LocalParameters and FitQualityOnSurface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  /** @brief trajectory state updator which combines two parts of a trajectory
+     on a common surface.
+
+      Make sure that the TPs' surfaces are identical and
+      that the local hit is not duplicated in both trajectories!
+  */
+
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  /** @brief trajectory state updator which combines two parts of a trajectory
+     on a common surface and provides the FitQuality.
+
+      Make sure that the TPs' surfaces are identical and that the local hit is
+     not duplicated!
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&,
+    FitQualityOnSurface*&) const override final;
+
+  //! estimator for FitQuality on Surface from a full track state, that is a
+  //! state which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface from a full track state, that is a
+  //! state which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface from a predicted track state, that is
+  //! a state which contains the current hit (expressed as Amg::Vector2D).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface from a predicted track state, that is
+  //! a state which contains the current hit (expressed as LocalParameters).
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  //! estimator for FitQuality on Surface for the situation when a track is
+  //! fitted to the parameters of another trajectory part extrapolated to the
+  //! common surface.
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  //! interface for reference-track KF, not implemented
+  virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const Amg::VectorX&,
+    const Amg::MatrixX&,
+    const int&,
+    Trk::FitQualityOnSurface*&,
+    bool) const override final
+  {
+    return nullptr;
+  }
+
+  //! give back how updator is configured for inital covariances
+  virtual std::vector<double> initialErrors() const override final;
+
 private:
-    //! common code analysing the measurement's rank and calling the appropriate implementation for this rank.
-    TrackParameters* prepareFilterStep(const TrackParameters&,
-                                       const LocalParameters&,
-                                       const Amg::MatrixX&,
-                                       const int, 
-                                       FitQualityOnSurface*&,
-                                       bool) const;
-    //! common maths calculation code for all addToState and removeFromState versions which happen to be called with 1-dim measurements.
-    TrackParameters* calculateFilterStep_1D(const TrackParameters&,
-                                            const SParVector5&,
-                                            const SCovMatrix5&,
-                                            const double&,
-                                            const int&,
-                                            const Amg::MatrixX&,
-                                            const int,
-                                            FitQualityOnSurface*&,
-                                            bool) const;
-    //! common maths calculation code for all addToState and removeFromState versions which happen to be called with 2-dim measurements.
-    TrackParameters* calculateFilterStep_2D(const TrackParameters&,
-                                            const SParVector5&,
-                                            const SCovMatrix5&,
-                                            const SParVector2&,
-                                            const int&,
-                                            const Amg::MatrixX&,
-                                            const int,
-                                            FitQualityOnSurface*&,
-                                            bool) const;
-    //! common maths calculation code for all addToState and removeFromState versions which happen to be called with 3-dim measurements.
-    TrackParameters* calculateFilterStep_3D(const TrackParameters&,
-                                            const SParVector5&,
-                                            const SCovMatrix5&,
-                                            const LocalParameters&,
-                                            const Amg::MatrixX&,
-                                            const int,
-                                            FitQualityOnSurface*&,
-                                            bool) const;
-    //! common maths calculation code for all addToState and removeFromState versions which happen to be called with 4-dim measurements.
-    TrackParameters* calculateFilterStep_4D(const TrackParameters&,
-                                            const SParVector5&,
-                                            const SCovMatrix5&,
-                                            const LocalParameters&,
-                                            const Amg::MatrixX&,
-                                            const int,
-                                            FitQualityOnSurface*&,
-                                            bool) const;
-    //! common maths calculation code for all addToState and removeFromState versions which happen to be called with 5-dim measurements or two track states.
-    /** For 5-dim track states the ParameterKey is known to be 31 and
-        does not need to be passed through the interface. */
-    TrackParameters* calculateFilterStep_5D(const TrackParameters&,
-                                            const SParVector5&,
-                                            const SCovMatrix5&,
-                                            const SParVector5&,
-                                            const Amg::MatrixX&,
-                                            const int,
-                                            FitQualityOnSurface*&,
-                                            bool) const;
-
-    //! Helper method to transform Eigen cov matrix to SMatrix.
-    bool getStartCov(SCovMatrix5&, const TrackParameters&, const int) const;
-    //! Helper method to convert internal results from SMatrix to Eigen. */
-    TrackParameters* convertToClonedTrackPars(const TrackParameters&,
-                                              const SParVector5&,
-                                              const SCovMatrix5&,
-                                              const int&, const bool&,
-                                              std::string_view) const;
-    /** also the chi2 calculation and FitQuality object creation is
-        combined in an extra method. It is called by all the XXX-FitQuality()
-        methods - SMatrix version for 1D, 2D, 5D and Eigen for 3D, 4D.
-        The calculateFilterStep() have the code duplicated to avoid
-        re-computing the residual-error matrix.
-        The sign controls the calculation in case a predicted input track state
-        (sign=+1) or smoothed/updated input track state (sign=-1).
-    */
-    FitQualityOnSurface* makeChi2_1D(const SParVector5&, const Amg::MatrixX&,
-                                     const double&,      const double&,
-                                     const int&,         const int&) const;
-    FitQualityOnSurface* makeChi2_2D(const SParVector5&, const Amg::MatrixX&,
-                                     const SParVector2&, const SCovMatrix2&,
-                                     const int&,         const int&) const;
-    FitQualityOnSurface* makeChi2_5D(const SParVector5&, const Amg::MatrixX&,
-                                     const SParVector5&, const Amg::MatrixX&,
-                                     const int&) const;
-    FitQualityOnSurface* makeChi2Object(const Amg::VectorX&,
-                                        const Amg::MatrixX&, const Amg::MatrixX&,
-                                        const Amg::MatrixX&, const int&) const;
-
-    //! Avoid multiplications with sparse H matrices by cutting 2D rows&columns out of the full cov matrix.
-    SCovMatrix2 projection_2D(const SCovMatrix5&, const int&) const;
-    //! Avoid multiplications with sparse H matrices by cutting 2D rows&columns out of the full cov matrix.
-    SCovMatrix2 projection_2D(const Amg::MatrixX&, const int&) const;
-    //! Avoid multiplications with sparse H matrices by cutting 3D rows&columns out of the full cov matrix.
-    SCovMatrix3 projection_3D(const SCovMatrix5&, const int&) const;
-    //! Avoid multiplications with sparse H matrices by cutting 4D rows&columns out of the full cov matrix.
-    SCovMatrix4 projection_4D(const SCovMatrix5&, const int&) const;
-
-    // === note: any of the following log... method is only called if
-    // the msgstream level has been set appropriately. 
-    //! internal structuring: debugging output for start of method.
-    void logStart (const std::string&, const TrackParameters&) const;
-    //! internal structuring: common logfile output of the inputs 
-    void logInputCov (const SCovMatrix5&, const Amg::VectorX&, const Amg::MatrixX&) const;
-    //! internal structuring: common logfile output during calculation
-    void logGainForm (int, const SParVector5&, const SCovMatrix5&,
-                      const SGenMatrix5&) const;
-    //! internal structuring: common logfile output after calculation
-    void logResult(const std::string&, const AmgVector(5)&, const AmgSymMatrix(5)&) const;
-
-    //! method testing correct use of LocalParameters
-    bool consistentParamDimensions(const LocalParameters&, const int&) const;
-
-    //! Test if angles are inside boundaries.
-    /** Absolute phi values should be in [-pi, pi] (how about endpoints?)
-        absolute theta values should be in [0, +pi]
-        phi differences should also be in [-pi, pi] - else go other way round,
-        theta differences should be smaller than pi but can be negative 
-              => other constraint than absolute theta.
-    */
-    bool thetaPhiWithinRange_5D (const SParVector5& V,
-                                 const RangeCheckDef rcd) const;
-
-    //! Test if theta angle is inside boundaries. No differential-check option.
-    bool thetaWithinRange_5D (const SParVector5& V) const;
-
-    //! method correcting the calculated angles back to their defined ranges phi (-pi, pi) and theta (0, pi).
-    /** Only works if the excess is not far from the defined range, as it
-        happens e.g. when the update moves across the phi= +/-pi boundary. */
-    bool correctThetaPhiRange_5D(SParVector5&, SCovMatrix5&,
-                                 const RangeCheckDef) const;
-
-
-    std::vector<double> m_cov_stdvec;//!< job options for initial cov values
-    SParVector5         m_cov0;      //!< initial cov values in SMatrix object
-    bool                m_useFruehwirth8a; //!< job options controlling update formula for covariance matrix
-    float               m_thetaGainDampingValue;
-
-    SCovMatrix5         m_unitMatrix; //!< avoid mem allocation at every call
-    static const ParamDefsAccessor s_enumAccessor;
+  //! common code analysing the measurement's rank and calling the appropriate
+  //! implementation for this rank.
+  std::unique_ptr<TrackParameters> prepareFilterStep(const TrackParameters&,
+                                                     const LocalParameters&,
+                                                     const Amg::MatrixX&,
+                                                     const int,
+                                                     FitQualityOnSurface*&,
+                                                     bool) const;
+  //! common maths calculation code for all addToState and removeFromState
+  //! versions which happen to be called with 1-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_1D(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const double&,
+    const int&,
+    const Amg::MatrixX&,
+    const int,
+    FitQualityOnSurface*&,
+    bool) const;
+  //! common maths calculation code for all addToState and removeFromState
+  //! versions which happen to be called with 2-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_2D(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const SParVector2&,
+    const int&,
+    const Amg::MatrixX&,
+    const int,
+    FitQualityOnSurface*&,
+    bool) const;
+  //! common maths calculation code for all addToState and removeFromState
+  //! versions which happen to be called with 3-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_3D(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    const int,
+    FitQualityOnSurface*&,
+    bool) const;
+  //! common maths calculation code for all addToState and removeFromState
+  //! versions which happen to be called with 4-dim measurements.
+  std::unique_ptr<TrackParameters> calculateFilterStep_4D(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    const int,
+    FitQualityOnSurface*&,
+    bool) const;
+  //! common maths calculation code for all addToState and removeFromState
+  //! versions which happen to be called with 5-dim measurements or two track
+  //! states.
+  /** For 5-dim track states the ParameterKey is known to be 31 and
+      does not need to be passed through the interface. */
+  std::unique_ptr<TrackParameters> calculateFilterStep_5D(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const SParVector5&,
+    const Amg::MatrixX&,
+    const int,
+    FitQualityOnSurface*&,
+    bool) const;
+
+  //! Helper method to transform Eigen cov matrix to SMatrix.
+  bool getStartCov(SCovMatrix5&, const TrackParameters&, const int) const;
+  //! Helper method to convert internal results from SMatrix to Eigen. */
+  std::unique_ptr<TrackParameters> convertToClonedTrackPars(
+    const TrackParameters&,
+    const SParVector5&,
+    const SCovMatrix5&,
+    const int&,
+    const bool&,
+    std::string_view) const;
+  /** also the chi2 calculation and FitQuality object creation is
+      combined in an extra method. It is called by all the XXX-FitQuality()
+      methods - SMatrix version for 1D, 2D, 5D and Eigen for 3D, 4D.
+      The calculateFilterStep() have the code duplicated to avoid
+      re-computing the residual-error matrix.
+      The sign controls the calculation in case a predicted input track state
+      (sign=+1) or smoothed/updated input track state (sign=-1).
+  */
+  FitQualityOnSurface* makeChi2_1D(const SParVector5&,
+                                   const Amg::MatrixX&,
+                                   const double&,
+                                   const double&,
+                                   const int&,
+                                   const int&) const;
+  FitQualityOnSurface* makeChi2_2D(const SParVector5&,
+                                   const Amg::MatrixX&,
+                                   const SParVector2&,
+                                   const SCovMatrix2&,
+                                   const int&,
+                                   const int&) const;
+  FitQualityOnSurface* makeChi2_5D(const SParVector5&,
+                                   const Amg::MatrixX&,
+                                   const SParVector5&,
+                                   const Amg::MatrixX&,
+                                   const int&) const;
+  FitQualityOnSurface* makeChi2Object(const Amg::VectorX&,
+                                      const Amg::MatrixX&,
+                                      const Amg::MatrixX&,
+                                      const Amg::MatrixX&,
+                                      const int&) const;
+
+  //! Avoid multiplications with sparse H matrices by cutting 2D rows&columns
+  //! out of the full cov matrix.
+  SCovMatrix2 projection_2D(const SCovMatrix5&, const int&) const;
+  //! Avoid multiplications with sparse H matrices by cutting 2D rows&columns
+  //! out of the full cov matrix.
+  SCovMatrix2 projection_2D(const Amg::MatrixX&, const int&) const;
+  //! Avoid multiplications with sparse H matrices by cutting 3D rows&columns
+  //! out of the full cov matrix.
+  SCovMatrix3 projection_3D(const SCovMatrix5&, const int&) const;
+  //! Avoid multiplications with sparse H matrices by cutting 4D rows&columns
+  //! out of the full cov matrix.
+  SCovMatrix4 projection_4D(const SCovMatrix5&, const int&) const;
+
+  // === note: any of the following log... method is only called if
+  // the msgstream level has been set appropriately.
+  //! internal structuring: debugging output for start of method.
+  void logStart(const std::string&, const TrackParameters&) const;
+  //! internal structuring: common logfile output of the inputs
+  void logInputCov(const SCovMatrix5&,
+                   const Amg::VectorX&,
+                   const Amg::MatrixX&) const;
+  //! internal structuring: common logfile output during calculation
+  void logGainForm(int,
+                   const SParVector5&,
+                   const SCovMatrix5&,
+                   const SGenMatrix5&) const;
+  //! internal structuring: common logfile output after calculation
+  void logResult(const std::string&,
+                 const AmgVector(5) &,
+                 const AmgSymMatrix(5) &) const;
+
+  //! method testing correct use of LocalParameters
+  bool consistentParamDimensions(const LocalParameters&, const int&) const;
+
+  //! Test if angles are inside boundaries.
+  /** Absolute phi values should be in [-pi, pi] (how about endpoints?)
+      absolute theta values should be in [0, +pi]
+      phi differences should also be in [-pi, pi] - else go other way round,
+      theta differences should be smaller than pi but can be negative
+            => other constraint than absolute theta.
+  */
+  bool thetaPhiWithinRange_5D(const SParVector5& V,
+                              const RangeCheckDef rcd) const;
+
+  //! Test if theta angle is inside boundaries. No differential-check option.
+  bool thetaWithinRange_5D(const SParVector5& V) const;
+
+  //! method correcting the calculated angles back to their defined ranges phi
+  //! (-pi, pi) and theta (0, pi).
+  /** Only works if the excess is not far from the defined range, as it
+      happens e.g. when the update moves across the phi= +/-pi boundary. */
+  bool correctThetaPhiRange_5D(SParVector5&,
+                               SCovMatrix5&,
+                               const RangeCheckDef) const;
+
+  std::vector<double> m_cov_stdvec; //!< job options for initial cov values
+  SParVector5 m_cov0;               //!< initial cov values in SMatrix object
+  bool m_useFruehwirth8a; //!< job options controlling update formula for
+                          //!< covariance matrix
+  float m_thetaGainDampingValue;
+
+  SCovMatrix5 m_unitMatrix; //!< avoid mem allocation at every call
+  static const ParamDefsAccessor s_enumAccessor;
 };
- inline bool KalmanUpdatorSMatrix::thetaPhiWithinRange_5D (const SParVector5& V,
-                                                    const RangeCheckDef rcd) const {
-   static const SParVector2 thetaMin(0.0,-M_PI);
-   return ( (std::abs(V(Trk::phi)) <= M_PI) && 
-            (V(Trk::theta)>=thetaMin((int)rcd)) && (V(Trk::theta) <= M_PI) );
- }
-
- inline bool KalmanUpdatorSMatrix::thetaWithinRange_5D (const SParVector5& V) const {
-   return (V(Trk::theta)>=0.0 && (V(Trk::theta) <= M_PI) );
- }
-		
-} // end of namespace
+inline bool
+KalmanUpdatorSMatrix::thetaPhiWithinRange_5D(const SParVector5& V,
+                                             const RangeCheckDef rcd) const
+{
+  static const SParVector2 thetaMin(0.0, -M_PI);
+  return ((std::abs(V(Trk::phi)) <= M_PI) &&
+          (V(Trk::theta) >= thetaMin((int)rcd)) && (V(Trk::theta) <= M_PI));
+}
+
+inline bool
+KalmanUpdatorSMatrix::thetaWithinRange_5D(const SParVector5& V) const
+{
+  return (V(Trk::theta) >= 0.0 && (V(Trk::theta) <= M_PI));
+}
 
+} // end of namespace
 
 #if __GNUC__
-# pragma GCC diagnostic pop
+#pragma GCC diagnostic pop
 #endif
 
-
 #endif // TRK_KALMANUPDATOR_H
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanWeightUpdator.h b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanWeightUpdator.h
index 0513f7698b8b790bf3112d6f0e0c803f60a99449..ea58045c6a36773e3ceaeaa53bf175fc51e73aaf 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanWeightUpdator.h
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/TrkMeasurementUpdator/KalmanWeightUpdator.h
@@ -14,13 +14,13 @@
 #ifndef TRK_KALMANWEIGHTUPDATOR_H
 #define TRK_KALMANWEIGHTUPDATOR_H
 
-#include "TrkToolInterfaces/IUpdator.h"
 #include "AthenaBaseComps/AthAlgTool.h"
+#include "EventPrimitives/EventPrimitives.h"
 #include "GaudiKernel/MsgStream.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include "TrkEventPrimitives/ParamDefs.h"
+#include "TrkToolInterfaces/IUpdator.h"
 #include <cmath>
-#include "GeoPrimitives/GeoPrimitives.h"
-#include "EventPrimitives/EventPrimitives.h"
 
 namespace Trk {
 
@@ -32,209 +32,300 @@ namespace Trk {
  *  This version of the tool implements the weight formalism
  *  @author Sebastian.Fleischmann@cern.ch
  */
-class KalmanWeightUpdator : virtual public IUpdator, public AthAlgTool {
+class KalmanWeightUpdator
+  : virtual public IUpdator
+  , public AthAlgTool
+{
 public:
-    //! standard AlgTool constructor
-    KalmanWeightUpdator(const std::string&,const std::string&,const IInterface*);
-    ~KalmanWeightUpdator();
-
-    //! standard Athena initialisation
-    virtual StatusCode initialize() override final;
-    //! standard Athena termination
-    virtual StatusCode finalize() override final;
-
-    /** @brief measurement updator for the KalmanFitter getting the measurement
-        coordinates from Amg::Vector2D (use for example with PrepRawData) */
-    virtual TrackParameters* addToState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&) const override final;
-    /** @brief measurement updator for the KalmanFitter getting the coordinates
-        from LocalParameters (use for example with MeasurementBase, ROT) */
-    virtual TrackParameters* addToState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&) const override final ;
-    /** @brief measurement updator interface for the KalmanFitter returning the
-        fit quality of the state at the same time (Amg::Vector2D-version) */
-    virtual TrackParameters* addToState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&, FitQualityOnSurface*& ) const override final;
-    /** @brief measurement updator interface for the KalmanFitter returning the
-        fit quality of the state at the same time (LocalParameters-version) */
-    virtual TrackParameters* addToState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&, FitQualityOnSurface*& ) const override final;
-
-    /** @brief reverse updator for the KalmanFitter and other fitters, getting
-        the measurement coordinates from the Amg::Vector2D class.
-
-        It can be used to get unbiased TrackParameters for track residual studies.
-    */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&) const override final;
-    /** @brief reverse updator for the KalmanFitter and other fitters, getting
-        the measurement coordinates from the LocalParameters class.
-
-        It can be used to get unbiased TrackParameters for track residual studies.
-    */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&) const override final;
-    /** @brief reverse updator for the KalmanFitter and other fitters using
-        the interface with Amg::Vector2D and FitQualityOnSurface.
-    */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&, FitQualityOnSurface*& ) const override final;
-    /** @brief reverse updator for the KalmanFitter and other fitters using
-        the interface with LocalParameters and FitQualityOnSurface.
-    */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&, FitQualityOnSurface*& ) const override final;
-
-    //! trajectory state updator which combines two parts of a trajectory.
-    /** make sure that the TPs' surfaces are identical and
-        that the local hit is not duplicated in both trajectories.
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, const TrackParameters&) const override final ;
-    //! combines two parts of a trajectory on a common surface and provides the FitQuality
-    /** make sure that the TPs' surfaces are identical and that the local hit is not duplicated.
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, const TrackParameters&, FitQualityOnSurface*&) const override final;
-
-    /** @brief estimator for FitQualityOnSurface from a full track state, i.e.
-        a state which contains the current hit (expressed as Amg::Vector2D).
-    */
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX& ) const override final;
-    /** @brief estimator for FitQualityOnSurface from a full track state, i.e.
-        a state which contains the current hit (expressed as LocalParameters).
-    */
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, const LocalParameters&, const Amg::MatrixX& ) const override final; 
-    /** @brief estimator for FitQualityOnSurface from a predicted track state,
-      i.e. a state which contains the current hit (expressed as Amg::Vector2D).
-    */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX& ) const override final;
-    /** @brief estimator for FitQualityOnSurface from a predicted track state,
-    i.e. a state which contains the current hit (expressed as LocalParameters).
-    */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const LocalParameters&, const Amg::MatrixX& ) const  override final;
-    /** @brief estimator for FitQuality on Surface for the situation when a
-        track is fitted to the parameters of another trajectory part
-        extrapolated to the common surface.
-    */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const TrackParameters&) const  override final;
-    //! interface for update for reference-track KF, not implemented.
-    virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference (const AmgVector(5)&, const AmgSymMatrix(5)&, 
-                                                                                 const Amg::VectorX&, const Amg::MatrixX&, 
-                                                                                 const int&, Trk::FitQualityOnSurface*&, bool ) const  override final {return nullptr;}
-
-    //! give back how updator is configured for inital weights
-    virtual std::vector<double>  initialErrors() const  override final;
+  //! standard AlgTool constructor
+  KalmanWeightUpdator(const std::string&,
+                      const std::string&,
+                      const IInterface*);
+  ~KalmanWeightUpdator();
+
+  //! standard Athena initialisation
+  virtual StatusCode initialize() override final;
+  //! standard Athena termination
+  virtual StatusCode finalize() override final;
+
+  /** @brief measurement updator for the KalmanFitter getting the measurement
+      coordinates from Amg::Vector2D (use for example with PrepRawData) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  /** @brief measurement updator for the KalmanFitter getting the coordinates
+      from LocalParameters (use for example with MeasurementBase, ROT) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  /** @brief measurement updator interface for the KalmanFitter returning the
+      fit quality of the state at the same time (Amg::Vector2D-version) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  /** @brief measurement updator interface for the KalmanFitter returning the
+      fit quality of the state at the same time (LocalParameters-version) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  /** @brief reverse updator for the KalmanFitter and other fitters, getting
+      the measurement coordinates from the Amg::Vector2D class.
+
+      It can be used to get unbiased TrackParameters for track residual studies.
+  */
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  /** @brief reverse updator for the KalmanFitter and other fitters, getting
+      the measurement coordinates from the LocalParameters class.
+
+      It can be used to get unbiased TrackParameters for track residual studies.
+  */
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  /** @brief reverse updator for the KalmanFitter and other fitters using
+      the interface with Amg::Vector2D and FitQualityOnSurface.
+  */
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+  /** @brief reverse updator for the KalmanFitter and other fitters using
+      the interface with LocalParameters and FitQualityOnSurface.
+  */
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const override final;
+
+  //! trajectory state updator which combines two parts of a trajectory.
+  /** make sure that the TPs' surfaces are identical and
+      that the local hit is not duplicated in both trajectories.
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  //! combines two parts of a trajectory on a common surface and provides the
+  //! FitQuality
+  /** make sure that the TPs' surfaces are identical and that the local hit is
+   * not duplicated.
+   */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&,
+    FitQualityOnSurface*&) const override final;
+
+  /** @brief estimator for FitQualityOnSurface from a full track state, i.e.
+      a state which contains the current hit (expressed as Amg::Vector2D).
+  */
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  /** @brief estimator for FitQualityOnSurface from a full track state, i.e.
+      a state which contains the current hit (expressed as LocalParameters).
+  */
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  /** @brief estimator for FitQualityOnSurface from a predicted track state,
+    i.e. a state which contains the current hit (expressed as Amg::Vector2D).
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const override final;
+  /** @brief estimator for FitQualityOnSurface from a predicted track state,
+  i.e. a state which contains the current hit (expressed as LocalParameters).
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const override final;
+  /** @brief estimator for FitQuality on Surface for the situation when a
+      track is fitted to the parameters of another trajectory part
+      extrapolated to the common surface.
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const TrackParameters&) const override final;
+  //! interface for update for reference-track KF, not implemented.
+  virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const Amg::VectorX&,
+    const Amg::MatrixX&,
+    const int&,
+    Trk::FitQualityOnSurface*&,
+    bool) const override final
+  {
+    return nullptr;
+  }
+
+  //! give back how updator is configured for inital weights
+  virtual std::vector<double> initialErrors() const override final;
 
 private:
-    //! common maths calculation code for addToState and removeFromState
-    TrackParameters* calculateFilterStep( const TrackParameters&,
-                                          const Amg::Vector2D&,
-                                          const Amg::MatrixX&,
-                                          const int,
-                                          FitQualityOnSurface*&,
-                                          bool) const;
-    /** @brief common maths calculation code for addToState and removeFromState.
-
-    Used formulas:
-
-    (R. Fruehwirth, et al., Data Analysis Techniques for High-Energy Physics, 2nd ed.)<br>
-    \f$ p_{k|k} = G_{k|k}^{-1} ( G_{k|k-1} p_{k|k-1} H^T_k W_k m_k )\f$
-    \f$ G_{k|k} = G_{k|k-1} + H^T_k W_k H_k \f$<br>
-    (R. Fruehwirth, Application of Kalman filtering, NIM A262, 446)<br>
-    \f$ r_{k|k} = m_k - H_k p_{k|k} \f$
-    \f$ \chi_{k|F}^2 = r_{k|k}^T W_k r_{k|k} + (p_{k|k} - p_{k|k-1})^T G_{k|k-1} (p_{k|k} - p_{k|k-1}) \f$
-     */
-    TrackParameters* calculateFilterStep( const TrackParameters&,
-                                          const LocalParameters&,
-                                          const Amg::MatrixX&,
-                                          const int,
-                                          FitQualityOnSurface*&,
-                                          bool) const;
-
-    /** @brief also the chi2 calculation and FitQuality object creation using
-        gain matrix formalism is combined in an extra method.
-
-        It is called by ___FitQuality().
-        The sign controls the calculation in case a predicted input track state (sign=+1)
-        or smoothed/updated input track state (sign=-1).<br>
-        Used formula:
-        (R. Fruehwirth, et al., Data Analysis Techniques for High-Energy Physics, 2nd ed.)
-        \f$ r = m - H p \f$
-        \f$ \chi^2 = r^T (V - H C H^T)^{-1} r \f$ 
-        */
-    FitQualityOnSurface* makeChi2Object(Amg::VectorX&,
-                                        const Amg::MatrixX&, const Amg::MatrixX&,
-                                        const Amg::MatrixX&, const int) const;
-    /** @brief The chi2 calculation and FitQuality object creation using
-        weighted means formalism is combined in an extra method.
-
-        It is called by calculateFilterStep() and combineStates().
-        Used formula:
-        (Fruehwirth, Application of Kalman filtering, NIM A262, 446)
-        \f$ r_1 = m - H p_{new} \f$
-        \f$ r_2 = p_{new} - p_{old} \f$
-        \f$ \chi^2 = r_1^T V^{-1}.r_1 + r_2^T C_{old}^{-1}.r_2 \f$ 
-        */
-    FitQualityOnSurface* makeChi2Object(    Amg::VectorX& residual1,
-                                            const Amg::MatrixX& weight1,
-                                            const int key1,
-                                            Amg::VectorX& residual2,
-                                            const Amg::MatrixX& weight2,
-                                            const int key2 ) const;
-
-    //! debugging output at input; only called if log.level() is low. */
-    void logInputCov (const Amg::MatrixX&, const Amg::VectorX&, const Amg::MatrixX&) const;
-    //! debugging output of result; only called if log.level() is low. */
-    void logResult (const std::string&, const TrackParameters&) const;
-    //! debugging output of cov result; only called if log.level() is low. */
-    void logOutputCov(const Amg::VectorX&, const Amg::MatrixX&) const;
-    //! debugging output of weight mat; only called if log.level() is low. */
-    void logOutputWeightMat(Amg::MatrixX& covPar) const;
-
-    //! job options: initial weight matrix for input pars without error matrix
-    std::vector<double> m_weight;
-
-    //! cached log.level()
-    int                 m_outputlevel;
-
-    //! check correct ranges of absolute phi (-pi, pi) and theta (0, pi) values
-    bool thetaPhiWithinRange(const Amg::VectorX&, const int key=31) const;
-    //! check correct ranges of phi (-pi, pi) and theta (0, pi) differences
-    bool diffThetaPhiWithinRange(const Amg::VectorX&, const int key=31) const;
-    //! bring phi or theta back into allowed range using periodicity
-    bool correctThetaPhiRange(Amg::VectorX&, const bool isDifference=false, const int key=31) const;
+  //! common maths calculation code for addToState and removeFromState
+  std::unique_ptr<TrackParameters> calculateFilterStep(const TrackParameters&,
+                                                       const Amg::Vector2D&,
+                                                       const Amg::MatrixX&,
+                                                       const int,
+                                                       FitQualityOnSurface*&,
+                                                       bool) const;
+  /** @brief common maths calculation code for addToState and removeFromState.
+
+  Used formulas:
+
+  (R. Fruehwirth, et al., Data Analysis Techniques for High-Energy Physics, 2nd
+  ed.)<br> \f$ p_{k|k} = G_{k|k}^{-1} ( G_{k|k-1} p_{k|k-1} H^T_k W_k m_k )\f$
+  \f$ G_{k|k} = G_{k|k-1} + H^T_k W_k H_k \f$<br>
+  (R. Fruehwirth, Application of Kalman filtering, NIM A262, 446)<br>
+  \f$ r_{k|k} = m_k - H_k p_{k|k} \f$
+  \f$ \chi_{k|F}^2 = r_{k|k}^T W_k r_{k|k} + (p_{k|k} - p_{k|k-1})^T G_{k|k-1}
+  (p_{k|k} - p_{k|k-1}) \f$
+   */
+  std::unique_ptr<TrackParameters> calculateFilterStep(const TrackParameters&,
+                                                       const LocalParameters&,
+                                                       const Amg::MatrixX&,
+                                                       const int,
+                                                       FitQualityOnSurface*&,
+                                                       bool) const;
+
+  /** @brief also the chi2 calculation and FitQuality object creation using
+      gain matrix formalism is combined in an extra method.
+
+      It is called by ___FitQuality().
+      The sign controls the calculation in case a predicted input track state
+     (sign=+1) or smoothed/updated input track state (sign=-1).<br> Used
+     formula: (R. Fruehwirth, et al., Data Analysis Techniques for High-Energy
+     Physics, 2nd ed.) \f$ r = m - H p \f$ \f$ \chi^2 = r^T (V - H C H^T)^{-1} r
+     \f$
+      */
+  FitQualityOnSurface* makeChi2Object(Amg::VectorX&,
+                                      const Amg::MatrixX&,
+                                      const Amg::MatrixX&,
+                                      const Amg::MatrixX&,
+                                      const int) const;
+  /** @brief The chi2 calculation and FitQuality object creation using
+      weighted means formalism is combined in an extra method.
+
+      It is called by calculateFilterStep() and combineStates().
+      Used formula:
+      (Fruehwirth, Application of Kalman filtering, NIM A262, 446)
+      \f$ r_1 = m - H p_{new} \f$
+      \f$ r_2 = p_{new} - p_{old} \f$
+      \f$ \chi^2 = r_1^T V^{-1}.r_1 + r_2^T C_{old}^{-1}.r_2 \f$
+      */
+  FitQualityOnSurface* makeChi2Object(Amg::VectorX& residual1,
+                                      const Amg::MatrixX& weight1,
+                                      const int key1,
+                                      Amg::VectorX& residual2,
+                                      const Amg::MatrixX& weight2,
+                                      const int key2) const;
+
+  //! debugging output at input; only called if log.level() is low. */
+  void logInputCov(const Amg::MatrixX&,
+                   const Amg::VectorX&,
+                   const Amg::MatrixX&) const;
+  //! debugging output of result; only called if log.level() is low. */
+  void logResult(const std::string&, const TrackParameters&) const;
+  //! debugging output of cov result; only called if log.level() is low. */
+  void logOutputCov(const Amg::VectorX&, const Amg::MatrixX&) const;
+  //! debugging output of weight mat; only called if log.level() is low. */
+  void logOutputWeightMat(Amg::MatrixX& covPar) const;
+
+  //! job options: initial weight matrix for input pars without error matrix
+  std::vector<double> m_weight;
+
+  //! cached log.level()
+  int m_outputlevel;
+
+  //! check correct ranges of absolute phi (-pi, pi) and theta (0, pi) values
+  bool thetaPhiWithinRange(const Amg::VectorX&, const int key = 31) const;
+  //! check correct ranges of phi (-pi, pi) and theta (0, pi) differences
+  bool diffThetaPhiWithinRange(const Amg::VectorX&, const int key = 31) const;
+  //! bring phi or theta back into allowed range using periodicity
+  bool correctThetaPhiRange(Amg::VectorX&,
+                            const bool isDifference = false,
+                            const int key = 31) const;
 };
 
-inline bool KalmanWeightUpdator::thetaPhiWithinRange (const Amg::VectorX& V, const int key) const {   
-    if (! (key&4 || key&8)) return true; // in case no angles measured.
-    if (key == 31) return ( (std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta]>=0.0) && (V[Trk::theta] <= M_PI) );
-    else { // if vector is compressed (i.e. localParameters) need to extract phi,theta first.
-        bool okay = true;
-        if (key & 4) { // phi is being measured
-            int jphi = 0;
-            for (int itag = 0, ipos=1; itag<Trk::phi; ++itag, ipos*=2) if (key & ipos) ++jphi;
-            okay = okay && (std::abs(V[jphi]) <= M_PI);
-        }
-        if (key & 8) { // theta is being measured
-            int jtheta = 0;
-            for (int itag = 0, ipos=1; itag<=Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
-            okay = okay && (std::abs(V[jtheta]-M_PI_2)<=M_PI_2);
-        }
-        return okay;
+inline bool
+KalmanWeightUpdator::thetaPhiWithinRange(const Amg::VectorX& V,
+                                         const int key) const
+{
+  if (!(key & 4 || key & 8))
+    return true; // in case no angles measured.
+  if (key == 31)
+    return ((std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta] >= 0.0) &&
+            (V[Trk::theta] <= M_PI));
+  else { // if vector is compressed (i.e. localParameters) need to extract
+         // phi,theta first.
+    bool okay = true;
+    if (key & 4) { // phi is being measured
+      int jphi = 0;
+      for (int itag = 0, ipos = 1; itag < Trk::phi; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jphi;
+      okay = okay && (std::abs(V[jphi]) <= M_PI);
+    }
+    if (key & 8) { // theta is being measured
+      int jtheta = 0;
+      for (int itag = 0, ipos = 1; itag <= Trk::theta; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jtheta;
+      okay = okay && (std::abs(V[jtheta] - M_PI_2) <= M_PI_2);
     }
+    return okay;
+  }
 }
 
 // for speed reasons make two separate inline functions
-// phi   differences should be smaller than pi (else go other way round) => same as absolute phi value.
-// theta differences should be smaller than pi but can be negative => other constraint than absolute theta.
-inline bool KalmanWeightUpdator::diffThetaPhiWithinRange (const Amg::VectorX& V, const int key) const {
-    if (! (key&4 || key&8)) return true; // in case no angles measured.
-    if (key == 31) return ( (std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta]>=-M_PI) && (V[Trk::theta] <= M_PI) );
-    else { // if vector is compressed (i.e. localParameters) need to extract phi,theta first.
-        bool okay = true;
-        if (key & 4) { // phi is being measured
-            int jphi = 0;
-            for (int itag = 0, ipos=1; itag<Trk::phi; ++itag, ipos*=2) if (key & ipos) ++jphi;
-            okay = okay && (std::abs(V[jphi]) <= M_PI);
-        }
-        if (key & 8) { // theta is being measured
-            int jtheta = 0;
-            for (int itag = 0, ipos=1; itag<=Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
-            okay = okay && (std::abs(V[jtheta])<=M_PI);
-        }
-        return okay;
+// phi   differences should be smaller than pi (else go other way round) => same
+// as absolute phi value. theta differences should be smaller than pi but can be
+// negative => other constraint than absolute theta.
+inline bool
+KalmanWeightUpdator::diffThetaPhiWithinRange(const Amg::VectorX& V,
+                                             const int key) const
+{
+  if (!(key & 4 || key & 8))
+    return true; // in case no angles measured.
+  if (key == 31)
+    return ((std::abs(V[Trk::phi]) <= M_PI) && (V[Trk::theta] >= -M_PI) &&
+            (V[Trk::theta] <= M_PI));
+  else { // if vector is compressed (i.e. localParameters) need to extract
+         // phi,theta first.
+    bool okay = true;
+    if (key & 4) { // phi is being measured
+      int jphi = 0;
+      for (int itag = 0, ipos = 1; itag < Trk::phi; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jphi;
+      okay = okay && (std::abs(V[jphi]) <= M_PI);
+    }
+    if (key & 8) { // theta is being measured
+      int jtheta = 0;
+      for (int itag = 0, ipos = 1; itag <= Trk::theta; ++itag, ipos *= 2)
+        if (key & ipos)
+          ++jtheta;
+      okay = okay && (std::abs(V[jtheta]) <= M_PI);
     }
+    return okay;
+  }
 }
 
 } // end of namespace
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdator.cxx b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdator.cxx
index 33132dc8f095b5e6684497d25ba497d096c8a4c8..3ca2fdbb840004d1dc67ca3c983737ecbe69bb30 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdator.cxx
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdator.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -61,8 +61,8 @@ StatusCode Trk::KalmanUpdator::finalize()
 }
 
 // updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
-                                                      const Amg::Vector2D&    measmtPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
+                                                      const Amg::Vector2D&    measmtPos,
                                                       const Amg::MatrixX&      measmtErr) const {
     if (m_outputlevel <= 0) logStart("addToState(TP,LPOS,ERR)",trkPar);
     FitQualityOnSurface*    fitQoS = nullptr;
@@ -70,7 +70,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters
 }
 
 // updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
                                                             const LocalParameters&  measmtPar,
                                                             const Amg::MatrixX&      measmtErr) const {
     if (m_outputlevel <= 0) logStart("addToState(TP,LPAR,ERR)",trkPar);
@@ -78,21 +78,21 @@ Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters
     return calculateFilterStep (trkPar, measmtPar, measmtErr,1,fitQoS, false);
 }
 // updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
-                                                      const Amg::Vector2D&    measmtPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
+                                                      const Amg::Vector2D&    measmtPos,
                                                       const Amg::MatrixX&      measmtErr,
                                                       FitQualityOnSurface*&   fitQoS) const {
     if (m_outputlevel <= 0) logStart("addToState(TP,LPOS,ERR,FQ)",trkPar);
     if (fitQoS) {
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
       return nullptr;
-    } 
+    }
       return calculateFilterStep (trkPar, measmtPos, measmtErr, 1, fitQoS, true);
-    
+
 }
 
 // updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::addToState (const Trk::TrackParameters& trkPar,
                                                       const LocalParameters&  measmtPar,
                                                       const Amg::MatrixX&      measmtErr,
                                                       FitQualityOnSurface*&   fitQoS) const {
@@ -100,14 +100,14 @@ Trk::TrackParameters* Trk::KalmanUpdator::addToState (const Trk::TrackParameters
     if (fitQoS) {
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
       return nullptr;
-    } 
+    }
       return calculateFilterStep (trkPar, measmtPar, measmtErr, 1, fitQoS, true);
-    
+
 }
 
 // inverse updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
-                                                           const Amg::Vector2D&    measmtPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
+                                                           const Amg::Vector2D&    measmtPos,
                                                            const Amg::MatrixX&      measmtErr) const {
     if (m_outputlevel<=0) logStart("removeFromState(TP,LPOS,ERR)",trkPar);
     FitQualityOnSurface*    fitQoS = nullptr;
@@ -115,7 +115,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParam
 }
 
 // inverse updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
                                                            const LocalParameters&  measmtPar,
                                                            const Amg::MatrixX&      measmtErr) const {
     if (m_outputlevel) logStart("removeFromState(TP,LPAR,ERR)",trkPar);
@@ -124,8 +124,8 @@ Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParam
 }
 
 // inverse updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
-                                                           const Amg::Vector2D&    measmtPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
+                                                           const Amg::Vector2D&    measmtPos,
                                                            const Amg::MatrixX&      measmtErr,
                                                            FitQualityOnSurface*&    fitQoS) const {
     if (m_outputlevel<=0) logStart("removeFromState(TP,LPOS,ERR,FQ)",trkPar);
@@ -133,13 +133,13 @@ Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParam
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to"
                        << " avoid mem leak!"  );
       return nullptr;
-    } 
+    }
       return calculateFilterStep (trkPar, measmtPos, measmtErr, -1, fitQoS, true);
-    
+
 }
 
 // inverse updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::removeFromState (const Trk::TrackParameters& trkPar,
                                                            const LocalParameters&  measmtPar,
                                                            const Amg::MatrixX&      measmtErr,
                                                            FitQualityOnSurface*&    fitQoS) const {
@@ -148,15 +148,17 @@ Trk::TrackParameters* Trk::KalmanUpdator::removeFromState (const Trk::TrackParam
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to"
                        << " avoid mem leak!"  );
         return nullptr;
-    } 
+    }
         return calculateFilterStep (trkPar, measmtPar, measmtErr, -1, fitQoS, true);
-    
+
 }
 
 // state-to-state updator, trajectory combination - version without fitQuality
-Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParameters& one,
-                                                         const Trk::TrackParameters& two) const {
-	// remember, either one OR two might have no error, but not both !
+std::unique_ptr<Trk::TrackParameters>
+Trk::KalmanUpdator::combineStates(const Trk::TrackParameters& one,
+                                  const Trk::TrackParameters& two) const
+{
+  // remember, either one OR two might have no error, but not both !
   if (!one.covariance() && !two.covariance()) {
     ATH_MSG_WARNING( "both parameters have no errors, invalid "
                      << "use of Updator::combineStates()"  );
@@ -166,24 +168,23 @@ Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParamet
   if (!one.covariance()) {
     if (m_outputlevel<=0) logResult("combineStates(TP,TP)",two.parameters(),
 				    *two.covariance());
-    return two.clone();
+    return std::unique_ptr<Trk::TrackParameters>(two.clone());
   }
   if (!two.covariance()) {
     if (m_outputlevel<=0) logResult("combineStates(TP,TP)",one.parameters(),
 				    *one.covariance());
-    return one.clone();
+    return std::unique_ptr<Trk::TrackParameters>(one.clone());
   }
-	
+
   // ... FIXME - TRT is so difficult, need to check that both parameters are in the same frame
   //			   otherwise go into frame of one !
-	
   // ok, normal, let's combine using gain matrix formalism
   const AmgSymMatrix(5)& covTrkOne = (*one.covariance());
   const AmgSymMatrix(5)& covTrkTwo = (*two.covariance());
-	
+
   AmgSymMatrix(5)  sumCov = covTrkOne + covTrkTwo;
   AmgSymMatrix(5)  K      = covTrkOne * sumCov.inverse();
-	
+
   Amg::VectorX         r   = two.parameters() - one.parameters();
   // catch [-pi,pi] phi boundary problems
   if (!diffThetaPhiWithinRange(r)) correctThetaPhiRange(r,sumCov,true);
@@ -194,16 +195,23 @@ Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParamet
     ATH_MSG_WARNING( "combineStates(TP,TP): could not combine angular values."  );
     return nullptr;
   }
-	
+
   // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-  TrackParameters* comb = one.associatedSurface().createTrackParameters(par[Trk::loc1],par[Trk::loc2],
-                                                                        par[Trk::phi],par[Trk::theta],par[Trk::qOverP],covPar); 
-  if (m_outputlevel<=0) logResult("combineStates(TP,TP)", par, *covPar);
+  auto comb =
+    one.associatedSurface().createUniqueTrackParameters(par[Trk::loc1],
+                                                        par[Trk::loc2],
+                                                        par[Trk::phi],
+                                                        par[Trk::theta],
+                                                        par[Trk::qOverP],
+                                                        covPar);
+  if (m_outputlevel <= 0){
+    logResult("combineStates(TP,TP)", par, *covPar);
+  }
   return comb;
 }
 
 // state-to-state updator, trajectory combination - version with fitQuality
-Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator::combineStates (const Trk::TrackParameters& one,
                                                          const Trk::TrackParameters& two,
                                                          FitQualityOnSurface*& fitQoS) const {
     // try if both Track Parameters are measured ones ?
@@ -215,19 +223,19 @@ Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParamet
   if (fitQoS) {
     ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
     return nullptr;
-  } 
+  }
     // if only one of two has an error, return that one
     if (!one.covariance()) {
       fitQoS =  new FitQualityOnSurface(0.f, 5);
       if (m_outputlevel<=0) logResult("combineStates(TP,TP,FQ)", one.parameters(),
 				      (*two.covariance()));
-      return two.clone();
+      return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
     if (!two.covariance()) {
       fitQoS =  new FitQualityOnSurface(0.f, 5);
       if (m_outputlevel<=0) logResult("combineStates(TP,TP,FQ)", one.parameters(),
 				      (*one.covariance()));
-      return one.clone();
+      return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
 
     // covariance matrix for prediction and the state to be added
@@ -251,23 +259,30 @@ Trk::TrackParameters* Trk::KalmanUpdator::combineStates (const Trk::TrackParamet
     // compute fit quality
     double  chiSquared = r.transpose()*R_inv*r;
     fitQoS =  new FitQualityOnSurface(chiSquared, 5);
-	
+
     // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-    TrackParameters* comb = one.associatedSurface().createTrackParameters(par[Trk::loc1],par[Trk::loc2],
-                                                                          par[Trk::phi],par[Trk::theta],par[Trk::qOverP],covPar); 
-    if (m_outputlevel<=0) logResult("combineStates(TP,TP,FQ)", par, *covPar);
+    auto comb =
+      one.associatedSurface().createUniqueTrackParameters(par[Trk::loc1],
+                                                          par[Trk::loc2],
+                                                          par[Trk::phi],
+                                                          par[Trk::theta],
+                                                          par[Trk::qOverP],
+                                                          covPar);
+    if (m_outputlevel <= 0){
+      logResult("combineStates(TP,TP,FQ)", par, *covPar);
+    }
     return comb;
-  
+
 }
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                          const Amg::Vector2D& locPos,
                                          const Amg::MatrixX& rioErr) const {
     ATH_MSG_DEBUG( "--> entered KalmanUpdator::fullStateFitQuality(TP,LPOS,ERR)"  );
-	
+
     // try if Track Parameters are measured ones ?
     if (!trkPar.covariance()) {
       ATH_MSG_ERROR( "updated smoother/trajectory has no error matrix"  );
@@ -282,27 +297,27 @@ Trk::KalmanUpdator::fullStateFitQuality (const Trk::TrackParameters& trkPar,
     for (int iLocCoord=0; iLocCoord < nLocCoord; iLocCoord++) {
       rioPar[iLocCoord] = locPos[iLocCoord];
     }
-    
+
     // measurement Matrix ( n x m )
     Amg::MatrixX H(rioErr.cols(),covTrk.cols());
     H.setZero();
     for (int i=0; i < nLocCoord; i++) H(i,i)=1.f;
-    
+
     // residuals
     Amg::VectorX    r = rioPar - H * trkPar.parameters();
-    
+
     // all the rest is outsourced to a common chi2 routine
     return makeChi2Object(r,covTrk,rioErr,-1,(nLocCoord==1?1:3));
 }
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                          const Trk::LocalParameters& rioPar,
                                          const Amg::MatrixX&     rioErr) const {
   ATH_MSG_VERBOSE( "--> entered KalmanUpdator::fullStateFitQuality(TP,LPAR,ERR)"  );
-	
+
   // try if Track Parameters are measured ones ?
   if (!trkPar.covariance()) {
     ATH_MSG_ERROR( "updated smoother/trajectory has no error matrix"  );
@@ -315,7 +330,7 @@ Trk::KalmanUpdator::fullStateFitQuality (const Trk::TrackParameters& trkPar,
 
   // State to measurement dimensional reduction Matrix ( n x m )
   const Amg::MatrixX& H(rioPar.expansionMatrix());
-	
+
   // residuals
   Amg::VectorX    r = rioPar;
   if( rioPar.parameterKey()==31 ) r -= trkPar.parameters();
@@ -326,7 +341,7 @@ Trk::KalmanUpdator::fullStateFitQuality (const Trk::TrackParameters& trkPar,
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                               const Amg::Vector2D& rioLocPos,
                                               const Amg::MatrixX& rioLocErr) const {
@@ -334,7 +349,7 @@ Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPa
   // try if Track Parameters are measured ones ?
   if (predPar.covariance() == nullptr) {
 #if 0
-    if (&predPar == nullptr) 
+    if (&predPar == nullptr)
       ATH_MSG_WARNING( "input state is NULL in predictedStateFitQuality()"  );
     else
 #endif
@@ -355,16 +370,16 @@ Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPa
   Amg::MatrixX H(rioLocErr.cols(),covPred.cols());
   H.setZero();
   for (int i=0; i < nLocCoord; i++) H(i,i)=1.f;
-	
+
   // residuals
   Amg::VectorX    r = rioPar - H * predPar.parameters();
-		
+
   // all the rest is outsourced to a common chi2 routine
   return makeChi2Object(r,covPred,rioLocErr,+1,(nLocCoord==1?1:3));
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                               const Trk::LocalParameters& rioPar,
                                               const Amg::MatrixX&     rioErr) const {
@@ -373,7 +388,7 @@ Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPa
   // try if Track Parameters are measured ones ?
   if (predPar.covariance() == nullptr) {
 #if 0
-    if (&predPar == nullptr) 
+    if (&predPar == nullptr)
       ATH_MSG_WARNING( "input state is NULL in predictedStateFitQuality()"  );
     else
 #endif
@@ -388,18 +403,18 @@ Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& predPa
 
   // State to measurement dimensional reduction Matrix ( n x m )
   const Amg::MatrixX& H(rioPar.expansionMatrix());
-	
+
   // residuals
   Amg::VectorX    r = rioPar;
   if(rioPar.parameterKey()==31) r -= predPar.parameters();
   else                          r -= H * predPar.parameters();
-  
+
   // all the rest is outsourced to a common chi2 routine
   return makeChi2Object(r,covPred,rioErr,+1,rioPar.parameterKey());
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& one,
                                               const Trk::TrackParameters& two) const {
   ATH_MSG_VERBOSE( "--> entered KalmanUpdator::predictedStateFitQuality(TP,TP)"  );
@@ -415,7 +430,7 @@ Trk::KalmanUpdator::predictedStateFitQuality (const Trk::TrackParameters& one,
                    << "assume initial state and return chi2=0.0"  );
     return new FitQualityOnSurface(0.f, 5);
   }
-    
+
   // covariance matrix for prediction and the state to be added
   const AmgSymMatrix(5)& covTrkOne = (*one.covariance());
   const AmgSymMatrix(5)& covTrkTwo = (*two.covariance());
@@ -434,20 +449,22 @@ std::vector<double> Trk::KalmanUpdator::initialErrors() const {
 }
 
 // mathematics for Kalman updator and inverse Kalman filter
-Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackParameters&  trkPar,
-                                                               const Amg::Vector2D&    locPos,
-                                                               const Amg::MatrixX& covRio,
-                                                               const int sign,
-                                                               Trk::FitQualityOnSurface*& fitQoS,
-                                                               bool createFQoS) const {
+std::unique_ptr<Trk::TrackParameters>
+Trk::KalmanUpdator::calculateFilterStep(const Trk::TrackParameters& trkPar,
+                                        const Amg::Vector2D& locPos,
+                                        const Amg::MatrixX& covRio,
+                                        const int sign,
+                                        Trk::FitQualityOnSurface*& fitQoS,
+                                        bool createFQoS) const
+{
 
-    // try if Track Parameters are measured ones ?
+  // try if Track Parameters are measured ones ?
   AmgSymMatrix(5) covTrk;
   if (!trkPar.covariance()) {
     if (sign<0) {
       ATH_MSG_WARNING( "MeasuredTrackParameters == Null, can not calculate updated parameter state"  );
       return nullptr;
-    } 
+    }
       // no error given - use a huge error matrix for the time
       // covTrk = Amg::MatrixX(5, 1) * 1000.f;
       ATH_MSG_VERBOSE( "-U- no covTrk at input -  assign large error matrix for the time being."  );
@@ -456,7 +473,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
       covTrk(2,2) = m_cov0[2];
       covTrk(3,3) = m_cov0[3];
       covTrk(4,4) = m_cov0[4];
-    
+
   }else {
     covTrk = (*trkPar.covariance());
   }
@@ -469,7 +486,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
                      << ": undefined phi,theta range in input parameters."  );
     return nullptr;
   }
-  
+
   // measurement vector of RIO_OnTrack - needs more care for # local par?
   int nLocCoord = covRio.cols();
   if ( (nLocCoord < 1) || (nLocCoord > 2 ) ) {
@@ -486,10 +503,10 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
   Amg::MatrixX H(covRio.cols(),covTrk.cols());
   H.setZero();
   for (int i=0; i < nLocCoord; i++) H(i,i)=1.f;
-    
+
   // residual from reconstructed hit wrt. predicted state
   Amg::VectorX r = rioPar - H * parTrk;
-    
+
   // compute covariance on of residual R = +/- covRIO + H * covTrk * H.T()
   Amg::MatrixX R = (sign * covRio) + projection(covTrk,(nLocCoord==1 ? 1 : 3) ); // .similarity(H);
   // compute Kalman gain matrix
@@ -521,7 +538,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
 				  (sign>0?"addToState(TP,LPOS,ERR,FQ)":"removeFromState(TP,LPOS,ERR,FQ)"):
 				  (sign>0?"addToState(TP,LPOS,ERR)":"removeFromState(TP,LPOS,ERR)"),
 				  par,*covPar);
-  
+
   // if a pointer is given, compute chi2
   if (createFQoS) {
     if (sign<0) {
@@ -534,19 +551,25 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
     }
   }
   // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-  TrackParameters* updated = trkPar.associatedSurface().createTrackParameters(par[Trk::loc1],par[Trk::loc2],
-											  par[Trk::phi],par[Trk::theta],par[Trk::qOverP],covPar); 
+  auto updated =
+    trkPar.associatedSurface().createUniqueTrackParameters(par[Trk::loc1],
+                                                           par[Trk::loc2],
+                                                           par[Trk::phi],
+                                                           par[Trk::theta],
+                                                           par[Trk::qOverP],
+                                                           covPar);
   return updated;
 }
 
-
 // mathematics for Kalman updator and inverse Kalman filter
-Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackParameters&  trkPar,
-                                                               const Trk::LocalParameters&  rioPar,
-                                                               const Amg::MatrixX& covRio,
-                                                               const int sign,
-                                                               Trk::FitQualityOnSurface*& fitQoS,
-                                                               bool createFQoS ) const {
+std::unique_ptr<Trk::TrackParameters>
+Trk::KalmanUpdator::calculateFilterStep(const Trk::TrackParameters& trkPar,
+                                        const Trk::LocalParameters& rioPar,
+                                        const Amg::MatrixX& covRio,
+                                        const int sign,
+                                        Trk::FitQualityOnSurface*& fitQoS,
+                                        bool createFQoS) const
+{
 
   // try if Track Parameters are measured ones ?
   AmgSymMatrix(5) covTrk;
@@ -555,7 +578,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
       ATH_MSG_WARNING( "MeasuredTrackParameters == Null, can not calculate "
                        << "updated parameter state."  );
       return nullptr;
-    } 
+    }
       // no error given - use a huge error matrix for the time
       // covTrk = Amg::MatrixX(5, 1) * 1000.f;
       ATH_MSG_VERBOSE( "-U- no covTrk at input - "
@@ -565,7 +588,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
       covTrk(2,2) = m_cov0[2];
       covTrk(3,3) = m_cov0[3];
       covTrk(4,4) = m_cov0[4];
-    
+
   } else {
     covTrk = (*trkPar.covariance());
   }
@@ -598,7 +621,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
   // catch [-pi,pi] phi boundary problems to keep chi2 under control
   if (!diffThetaPhiWithinRange(r,rioPar.parameterKey()) )
     correctThetaPhiRange(r,R,true,rioPar.parameterKey());
-  
+
   // compute Kalman gain matrix
   if (R.determinant()==0.) return nullptr;
   Amg::MatrixX K   = covTrk * H.transpose() * R.inverse();
@@ -608,7 +631,7 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
   if (m_outputlevel<0) {logGainForm (nLocCoord,r,R.inverse(),K,M);}
   // compute local filtered state
   Amg::VectorX par = parTrk + K * r;
-        
+
   // compute covariance matrix of local filteres state
   AmgSymMatrix(5)* covPar;
   if (m_useFruehwirth8a) {
@@ -639,9 +662,13 @@ Trk::TrackParameters* Trk::KalmanUpdator::calculateFilterStep (const Trk::TrackP
     }
   }
   // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-  TrackParameters* updated = trkPar.associatedSurface().createTrackParameters(par[Trk::loc1],par[Trk::loc2],
-                                                                              par[Trk::phi],par[Trk::theta],par[Trk::qOverP],covPar); 
-  return updated;
+  return trkPar.associatedSurface().createUniqueTrackParameters(
+    par[Trk::loc1],
+    par[Trk::loc2],
+    par[Trk::phi],
+    par[Trk::theta],
+    par[Trk::qOverP],
+    covPar);
 }
 
 Amg::MatrixX Trk::KalmanUpdator::projection(const Amg::MatrixX& M, const int key) const
@@ -652,7 +679,7 @@ Amg::MatrixX Trk::KalmanUpdator::projection(const Amg::MatrixX& M, const int key
   const Amg::MatrixX& redMatrix = m_projectionMatrices.reductionMatrix(key);
   Amg::MatrixX R = redMatrix.transpose()*M*redMatrix;
   return R;
-  
+
 }
 
 
@@ -688,7 +715,7 @@ bool Trk::KalmanUpdator::correctThetaPhiRange(Amg::VectorX& V, AmgSymMatrix(5)&
   else if (key & 8) { // theta is within localParameter and a measured coordinate
     for (int itag = 0, ipos=1 ; itag<Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
   }
-  
+
   // correct theta and phi coordinate
   if ((jtheta>=0) && (V[jtheta]<thetaMin || V[jtheta]> M_PI) ) {
     if (m_outputlevel <= 0 ) {
@@ -732,7 +759,7 @@ bool Trk::KalmanUpdator::correctThetaPhiRange(Amg::VectorX& V, AmgSymMatrix(5)&
       C(2,jtheta) = -C(2,jtheta);
       if (key>15) C(4,jtheta) = -C(4,jtheta);
     }
-    
+
     if (m_outputlevel <=0) {
       msg() << MSG::DEBUG << "-U- now use corrected " << (isDifference?"diff. ":" ") << "value phi= ";
       if (jphi>=0) msg() << V[jphi]; else msg() <<"free";
@@ -770,7 +797,7 @@ bool Trk::KalmanUpdator::correctThetaPhiRange(Amg::VectorX& V, Amg::MatrixX& C,
   else if (key & 8) { // theta is within localParameter and a measured coordinate
     for (int itag = 0, ipos=1 ; itag<Trk::theta; ++itag, ipos*=2) if (key & ipos) ++jtheta;
   }
-  
+
   // correct theta and phi coordinate
   if ((jtheta>=0) && (V[jtheta]<thetaMin || V[jtheta]> M_PI) ) {
     if (m_outputlevel <= 0 ) {
@@ -814,7 +841,7 @@ bool Trk::KalmanUpdator::correctThetaPhiRange(Amg::VectorX& V, Amg::MatrixX& C,
       C(2,jtheta) = -C(2,jtheta);
       if (key>15) C(4,jtheta) = -C(4,jtheta);
     }
-    
+
     if (m_outputlevel <=0) {
       msg() << MSG::DEBUG << "-U- now use corrected " << (isDifference?"diff. ":" ") << "value phi= ";
       if (jphi>=0) msg() << V[jphi]; else msg() <<"free";
@@ -860,9 +887,9 @@ void Trk::KalmanUpdator::logInputCov(const Amg::MatrixX& covTrk,
   msg() << "  covariance matrix                   " << "          " << "                     "
         << std::setw(9)<<covTrk(2,2)<<" "<< std::setw(9)<<covTrk(2,3)<<" "
         << std::setw(9)<<covTrk(2,4)<< "\n"  ;
-  msg() << "  of the PREDICTED track pars         " << "          " << "                               " 
+  msg() << "  of the PREDICTED track pars         " << "          " << "                               "
         << std::setw(9)<<covTrk(3,3)<<" "<< std::setw(9)<<covTrk(3,4)<<"\n"  ;
-  msg() << "                                      " << "          " << "                                         " 
+  msg() << "                                      " << "          " << "                                         "
         << std::setw(9)<<covTrk(4,4)<<std::setprecision(6)<< endmsg;
 
   int nLocCoord = covRio.cols();
@@ -887,7 +914,7 @@ void Trk::KalmanUpdator::logGainForm(int nc, const Amg::VectorX& r, const Amg::M
   for (int i=0; i<nc; i++)  msg() << MSG::VERBOSE // K is a row x col = 5 x nc matrix.
 	<< ( i==0 ? "-U- gain mtx  K=(" : "                (" )
         << std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right )
-        << std::setw(7) << std::setprecision(4) << K(0,i)<<", " 
+        << std::setw(7) << std::setprecision(4) << K(0,i)<<", "
         << std::setw(7) << std::setprecision(4) << K(1,i)<<", "
         << std::setw(7) << std::setprecision(4) << K(2,i)<<", "
         << std::setw(7) << std::setprecision(4) << K(3,i)<<", "
@@ -899,7 +926,7 @@ void Trk::KalmanUpdator::logGainForm(int nc, const Amg::VectorX& r, const Amg::M
         << M(4,4)                <<")" << endmsg;
 }
 
-void Trk::KalmanUpdator::logResult(const std::string& methodName, 
+void Trk::KalmanUpdator::logResult(const std::string& methodName,
                                    const Amg::VectorX& par, const Amg::MatrixX& covPar) const
 {
     // again some verbose debug output
@@ -909,7 +936,7 @@ void Trk::KalmanUpdator::logResult(const std::string& methodName,
           << std::setw(10)<<par[2]<< std::setw(10)<<par[3]<<std::setprecision(4)
           << std::setw(10)<<par[4]                <<endmsg;
     msg() << MSG::VERBOSE << "-U- new cov" <<std::setiosflags(std::ios::right)<<std::setprecision(3)
-          << std::setw(9)<<(covPar)(0,0)<<" "<< std::setw(9)<<(covPar)(0,1)<<" " 
+          << std::setw(9)<<(covPar)(0,0)<<" "<< std::setw(9)<<(covPar)(0,1)<<" "
           << std::setw(9)<<(covPar)(0,2)<<" "<< std::setw(9)<<(covPar)(0,3)
           << " " << std::setw(9)<<(covPar)(0,4)<< "\n";
     msg() << "                                      " << "           " << "          "
@@ -918,10 +945,10 @@ void Trk::KalmanUpdator::logResult(const std::string& methodName,
     msg() << "  covariance matrix                   " << "           " << "                    "
           << std::setw(9)<<(covPar)(2,2)<<" "<< std::setw(9)<<(covPar)(2,3)<<" "
           << std::setw(9)<<(covPar)(2,4)<< "\n";
-    msg() << "  of the UPDATED   track pars         " << "           " 
+    msg() << "  of the UPDATED   track pars         " << "           "
           << "                              " <<std::setw(9)<<(covPar)(3,3)<< " "
           << std::setw(9)<<(covPar)(3,4)<< "\n";
-    msg() << "                                      " << "           " 
-          << "                                        " 
+    msg() << "                                      " << "           "
+          << "                                        "
           << std::setw(9)<<(covPar)(4,4)<<std::setprecision(6)<< endmsg;
 }
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorAmg.cxx b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorAmg.cxx
index c2a47c4d4969bb5ba57e54a709883e3a11974399..090bc79666cdc542db91fb23c2b7ea1801a4dd5e 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorAmg.cxx
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorAmg.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -65,7 +65,7 @@ StatusCode Trk::KalmanUpdatorAmg::initialize()
       ATH_MSG_INFO("Track state cov matrix will be calculated according to Gelb-1975 p305.");
 
     ATH_MSG_INFO("initialize() successful in " << name());
-    
+
     return StatusCode::SUCCESS;
 }
 
@@ -77,18 +77,18 @@ StatusCode Trk::KalmanUpdatorAmg::finalize()
 }
 
 // updator #1 for Kalman Fitter - version with Amg::Vector2D (PrepRawData method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
-                                                         const Amg::Vector2D& measLocPos, 
-                                                         const Amg::MatrixX& measLocCov) const 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
+                                                         const Amg::Vector2D& measLocPos,
+                                                         const Amg::MatrixX& measLocCov) const
 {
   if (msgLvl(MSG::VERBOSE)) {logStart("addToState(TP,LPOS,ERR)",trkPar.parameters());}
   FitQualityOnSurface*    fitQoS = nullptr;
   const int updatingSign = 1;
-  
+
   // get the Start covariance matrix
   const AmgSymMatrix(5)* trkCov = getStartCov(trkPar,updatingSign);
   if (!trkCov) return nullptr;
-    
+
   int nLocCoord = measLocCov.cols();
   if (nLocCoord == 1) {
     return calculateFilterStep_1D (trkPar,*trkCov,
@@ -98,16 +98,16 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParamet
     return calculateFilterStep_T<2>(trkPar,*trkCov,
                                     measLocPos,measLocCov.block<2,2>(0,0),3,
                                     updatingSign,fitQoS,false);
-  } 
-  
+  }
+
   ATH_MSG_WARNING(" number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!");
   return nullptr;
 }
 
 // updator #2 for Kalman Fitter - version with LocalParameters (MeasurementBase method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
                                                          const LocalParameters&  measmtPar,
-                                                         const Amg::MatrixX& measmtCov) const 
+                                                         const Amg::MatrixX& measmtCov) const
 {
     if (msgLvl(MSG::VERBOSE)) {logStart("addToState(TP,LPAR,ERR)",trkPar.parameters());}
     FitQualityOnSurface*    fitQoS = nullptr;
@@ -115,8 +115,8 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParamet
 }
 
 // updator #3 for Kalman Fitter - version with Amg::Vector2D (PrepRawData method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
-                                                         const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
+                                                         const Amg::Vector2D& measLocPos,
                                                          const Amg::MatrixX& measLocCov,
                                                          FitQualityOnSurface*& fitQoS) const
 {
@@ -125,7 +125,7 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParamet
     if (fitQoS) {
         ATH_MSG_WARNING("expect nil FitQuality pointer, refuse operation to avoid mem leak!");
         return nullptr;
-    } 
+    }
       // get the Start covariance matrix
       const AmgSymMatrix(5)* trkCov = getStartCov(trkPar,updatingSign);
       if (!trkCov) return nullptr;
@@ -139,15 +139,15 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParamet
         return calculateFilterStep_T<2>(trkPar,*trkCov,
                                         measLocPos,measLocCov.block<2,2>(0,0),3,
                                         updatingSign,fitQoS,true);
-      } 
+      }
         ATH_MSG_WARNING(" number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!");
         return nullptr;
-      
-    
+
+
 }
 
 // updator #4 for Kalman Fitter - version with LocalParameters (MeasurementBase method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParameters& trkPar,
                                                          const LocalParameters& measmtPar,
                                                          const Amg::MatrixX& measmtCov,
                                                          FitQualityOnSurface*& fitQoS) const
@@ -156,23 +156,23 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::addToState (const Trk::TrackParamet
     if (fitQoS) {
         ATH_MSG_WARNING("expect nil FitQuality pointer, refuse operation to avoid mem leak!");
       return nullptr;
-    } 
+    }
       return prepareFilterStep (trkPar, measmtPar, measmtCov, 1, fitQoS, true);
-    
+
 }
 
 // inverse updator #1 for Kalman Fitter - version with Amg::Vector2D (PrepRawData method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
-                                                              const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
+                                                              const Amg::Vector2D& measLocPos,
                                                               const Amg::MatrixX& measLocCov) const {
     if (msgLvl(MSG::VERBOSE)) {logStart("removeFromState(TP,LPOS,ERR)",trkPar.parameters());}
     FitQualityOnSurface*    fitQoS = nullptr;
     const int updatingSign = -1;
-    
+
     // get the Start covariance matrix
     const AmgSymMatrix(5)* trkCov = getStartCov(trkPar,updatingSign);
     if (!trkCov) return nullptr;
-      
+
     if (msgLvl(MSG::VERBOSE)) {logInputCov(*trkCov,measLocPos,measLocCov);}
 
     int nLocCoord = measLocCov.cols();
@@ -184,14 +184,14 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackPa
       return calculateFilterStep_T<2>(trkPar,*trkCov,
                                      measLocPos,measLocCov.block<2,2>(0,0),3,
                                      updatingSign,fitQoS,false);
-    } 
+    }
       ATH_MSG_WARNING(" number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not un-update!");
       return nullptr;
-    
+
 }
 
 // inverse updator #2 for Kalman Fitter - version with LocalParameters (MeasurementBase method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
                                                               const LocalParameters& measmtPar,
                                                               const Amg::MatrixX& measmtCov) const {
     if (msgLvl(MSG::DEBUG)) {logStart("removeFromState(TP,LPAR,ERR)",trkPar.parameters());}
@@ -200,8 +200,8 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackPa
 }
 
 // inverse updator #3 for Kalman Fitter - version with Amg::Vector2D (PrepRawData method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
-                                                              const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackParameters& trkPar,
+                                                              const Amg::Vector2D& measLocPos,
                                                               const Amg::MatrixX& measLocCov,
                                                               FitQualityOnSurface*& fitQoS) const {
     const int updatingSign = -1;
@@ -210,14 +210,14 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackPa
       ATH_MSG_WARNING("expect nil FitQuality pointer, refuse operation to"
             << " avoid mem leak!");
       return nullptr;
-    } 
+    }
 
       // get the Start covariance matrix
       const AmgSymMatrix(5)* trkCov = getStartCov(trkPar,updatingSign);
-      if (!trkCov) return nullptr;      
-      
+      if (!trkCov) return nullptr;
+
       if (msgLvl(MSG::VERBOSE)) {logInputCov(*trkCov,measLocPos,measLocCov);}
-      
+
       int nLocCoord = measLocCov.cols();
       if (nLocCoord == 1) {
         return calculateFilterStep_1D (trkPar,*trkCov,
@@ -227,30 +227,30 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState (const Trk::TrackPa
         return calculateFilterStep_T<2>(trkPar,*trkCov,
                                        measLocPos,measLocCov.block<2,2>(0,0),3,
                                        updatingSign,fitQoS,true);
-      } 
+      }
         ATH_MSG_WARNING(" number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not un-update!");
         return nullptr;
-      
-    
+
+
 }
 
 // inverse updator #4 for Kalman Fitter - version with LocalParameters (MeasurementBase method)
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::removeFromState(const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::removeFromState(const Trk::TrackParameters& trkPar,
                                                              const LocalParameters& measmtPar,
                                                              const Amg::MatrixX& measmtCov,
-                                                             FitQualityOnSurface*& fitQoS) const 
+                                                             FitQualityOnSurface*& fitQoS) const
 {
     if (msgLvl(MSG::VERBOSE)) logStart("removeFromState(TP,LPAR,ERR,FQ)",trkPar.parameters());
     if (fitQoS) {
         ATH_MSG_WARNING("expect nil FitQuality pointer, refuse operation to avoid mem leak!");
         return nullptr;
-    } 
+    }
         return prepareFilterStep (trkPar, measmtPar, measmtCov, -1, fitQoS, true);
-    
+
 }
 
 // state-to-state updator, trajectory combination - version without fitQuality
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackParameters& one,
                                                             const Trk::TrackParameters& two) const {
 	// try if both Track Parameters are measured ones ?
 	const AmgSymMatrix(5)* covOne = one.covariance();
@@ -264,19 +264,19 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackPara
 	// if only one of two has an error, return that one
 	if (!covOne) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",two.parameters(),*covTwo);
-      return two.clone();
+      return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
 	if (!covTwo) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",one.parameters(),*covOne);
-      return one.clone();
+      return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
-	
+
     FitQualityOnSurface*    fitQoS = nullptr;
     return calculateFilterStep_5D(one,*covOne,two.parameters(),*covTwo,+1,fitQoS,false);
 }
 
 // state-to-state updator, trajectory combination - version with fitQuality
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackParameters& one,
                                                             const Trk::TrackParameters& two,
                                                             FitQualityOnSurface*& fitQoS) const {
     // try if both Track Parameters are measured ones ?
@@ -295,23 +295,23 @@ Trk::TrackParameters* Trk::KalmanUpdatorAmg::combineStates (const Trk::TrackPara
 	// if only one of two has an error, return that one
 	if (!covOne) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",two.parameters(),*covTwo);
-      return two.clone();
+      return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
 	if (!covTwo) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",one.parameters(),*covOne);
-      return one.clone();
+      return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
     return calculateFilterStep_5D(one,(*covOne),two.parameters(),(*covTwo),+1,fitQoS,true);
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
                                         const Amg::Vector2D& rioLocPos,
                                         const Amg::MatrixX& rioCov,
-                                        int fullPred) const 
+                                        int fullPred) const
 {
-   
+
    // try if Track Parameters are measured ones ?
    if (!trkPar.covariance()) {
       ATH_MSG_ERROR("updated track state has no error matrix, return 0.");
@@ -325,18 +325,18 @@ Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
    } if (nLocCoord == 2) {
       return makeChi2_T<2>(trkPar.parameters(),(*trkPar.covariance()),
                            rioLocPos,rioCov.block<2,2>(0,0), 3,fullPred);
-   } 
+   }
       ATH_MSG_WARNING("Error in local position - must be 1D or 2D!");
       return nullptr;
-   
+
 }
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                                  const Amg::Vector2D& rioLocPos,
-                                                 const Amg::MatrixX& rioCov) const 
+                                                 const Amg::MatrixX& rioCov) const
 {
    ATH_MSG_VERBOSE("--> entered KalmanUpdatorAmg::predictedStateFitQuality(TP,LPOS,ERR)");
    // ATH_MSG_VERBOSE("LPOS: "<<rioLocPos << " cov:"<<rioCov);
@@ -344,10 +344,10 @@ Trk::KalmanUpdatorAmg::predictedStateFitQuality (const Trk::TrackParameters& pre
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                             const Amg::Vector2D& rioLocPos,
-                                            const Amg::MatrixX& rioCov) const 
+                                            const Amg::MatrixX& rioCov) const
 {
    ATH_MSG_VERBOSE("--> entered KalmanUpdatorAmg::fullStateFitQuality(TP,LPOS,ERR)");
    return stateFitQuality(trkPar, rioLocPos,rioCov, 1);
@@ -355,13 +355,13 @@ Trk::KalmanUpdatorAmg::fullStateFitQuality (const Trk::TrackParameters& trkPar,
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
                                         const Trk::LocalParameters& parRio,
                                         const Amg::MatrixX& rioCov,
-                                        int fullPred) const 
+                                        int fullPred) const
 {
-                                                
+
 	// try if Track Parameters are measured ones ?
 	if (!trkPar.covariance()) {
         ATH_MSG_ERROR("updated track state has no error matrix, return 0.");
@@ -372,7 +372,7 @@ Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
     if (nLocCoord == 1) {
       return makeChi2_1D(trkPar.parameters(),(*trkPar.covariance()),
                          parRio(0),rioCov(0,0),parRio.parameterKey(),fullPred);
-    } 
+    }
     if (nLocCoord == 2) {
       return makeChi2_T<2>(trkPar.parameters(),(*trkPar.covariance()),
                            parRio.block<2,1>(0,0),rioCov.block<2,2>(0,0), parRio.parameterKey(),fullPred);
@@ -384,7 +384,7 @@ Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
     if (nLocCoord == 4) {
       return makeChi2_T<4>(trkPar.parameters(),(*trkPar.covariance()),
                            parRio.block<4,1>(0,0),rioCov.block<4,4>(0,0), parRio.parameterKey(),fullPred);
-    }    
+    }
     if (nLocCoord == 5) {
       return makeChi2_T<5>(trkPar.parameters(),(*trkPar.covariance()),
                            parRio.block<5,1>(0,0),rioCov.block<5,5>(0,0), parRio.parameterKey(),fullPred);
@@ -397,12 +397,12 @@ Trk::KalmanUpdatorAmg::stateFitQuality (const Trk::TrackParameters& trkPar,
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                             const Trk::LocalParameters& parRio,
-                                            const Amg::MatrixX& rioCov) const 
+                                            const Amg::MatrixX& rioCov) const
 {
-                                                
+
     ATH_MSG_VERBOSE("--> entered KalmanUpdatorAmg::fullStateFitQuality(TP,LPAR,ERR)");
     return stateFitQuality(trkPar,parRio,rioCov,-1);
 }
@@ -410,7 +410,7 @@ Trk::KalmanUpdatorAmg::fullStateFitQuality (const Trk::TrackParameters& trkPar,
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                                  const Trk::LocalParameters& parRio,
                                                  const Amg::MatrixX& rioCov) const
@@ -420,9 +420,9 @@ Trk::KalmanUpdatorAmg::predictedStateFitQuality (const Trk::TrackParameters& pre
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorAmg::predictedStateFitQuality (const Trk::TrackParameters& trkParOne,
-                                                 const Trk::TrackParameters& trkParTwo) const 
+                                                 const Trk::TrackParameters& trkParTwo) const
 {
     ATH_MSG_VERBOSE("--> entered KalmanUpdatorAmg::predictedStateFitQuality(TP,TP)");
 	// try if both Track Parameters are measured ones ?
@@ -449,7 +449,7 @@ std::vector<double> Trk::KalmanUpdatorAmg::initialErrors() const {
 }
 
 // analyse dimension of localParameters to call appropriate fast-access mathematics
-Trk::TrackParameters* Trk::KalmanUpdatorAmg::prepareFilterStep (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorAmg::prepareFilterStep (const Trk::TrackParameters& trkPar,
                                                                 const Trk::LocalParameters& parRio,
                                                                 const Amg::MatrixX& rioCov,
                                                                 const int sign,
@@ -523,19 +523,19 @@ std::pair<AmgVector(5), AmgSymMatrix(5)>* Trk::KalmanUpdatorAmg::updateParameter
 
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorAmg::calculateFilterStep_1D (const TrackParameters& TP, const AmgSymMatrix(5)&  trkCov,
                                                double measPar, double measCov, int paramKey,
                                                int sign,
                                                Trk::FitQualityOnSurface*& fitQoS,
-                                               bool createFQoS ) const 
+                                               bool createFQoS ) const
 {
-  
+
   // use measuring coordinate (variable "mk") instead of reduction matrix
   ATH_MSG_DEBUG("--> entered KalmanUpdatorAmg::calculateFilterStep_1D ");
   int mk=0;
   if (paramKey!=1) for (int i=0; i<5; ++i) if (paramKey & (1<<i)) { mk=i; break; }
-  // get the parameters from the 
+  // get the parameters from the
   const AmgVector(5)&  trkPar = TP.parameters();
   // use measuring coordinate (variable "mk") instead of reduction matrix
   double r = measPar - trkPar(mk);
@@ -560,7 +560,7 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_1D (const TrackParameters& TP, const
      newPar = trkPar + dampedCov * R * r;
      K(Trk::theta,0) = K(Trk::theta,0)*m_thetaGainDampingValue;
      ATH_MSG_DEBUG("-U- damped gain mtx K       = " << Amg::toString(K));
-   } else 
+   } else
      ATH_MSG_DEBUG("-U- theta out of range but can not damp this update.");
  }
   // --- compute covariance matrix of local filteres state
@@ -587,7 +587,7 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_1D (const TrackParameters& TP, const
 
   if (createFQoS) {
     double predictedResidual = (sign<0) ?  r : (measPar - newPar(mk)) ;
-    const AmgSymMatrix(5)& updatedCov   = (sign<0) ? 
+    const AmgSymMatrix(5)& updatedCov   = (sign<0) ?
       trkCov : // when removing, the input are updated par
       newCov ; // when adding, chi2 is made from upd. par
 
@@ -680,7 +680,7 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_1D(const AmgVector(5)& trkPar, const
   return new std::pair<AmgVector(5), AmgSymMatrix(5)>(std::make_pair(newPar,newCov));
 }
 
-Trk::TrackParameters* 
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorAmg::calculateFilterStep_5D(const TrackParameters& TP, const AmgSymMatrix(5)& trkCov,
                                              const AmgVector(5)& measPar, const AmgSymMatrix(5)& measCov,
                                              int sign,
@@ -691,10 +691,10 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_5D(const TrackParameters& TP, const A
     // get the parameter vector
     const AmgVector(5)&  trkPar = TP.parameters();
     // Kalman gain K, residual r, combined covariance R
-    AmgMatrix(5,5) K; AmgMatrix(5,5) M; 
-    AmgVector(5) r; AmgSymMatrix(5) R; 
-    
-    // same stuff without reduction    
+    AmgMatrix(5,5) K; AmgMatrix(5,5) M;
+    AmgVector(5) r; AmgSymMatrix(5) R;
+
+    // same stuff without reduction
     r = measPar - trkPar;
 
     // for full safety in Eigen see http://eigen.tuxfamily.org/dox/classEigen_1_1FullPivLU.html
@@ -724,7 +724,7 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_5D(const TrackParameters& TP, const A
       fQ = new FitQualityOnSurface(chiSquared, 5);
     }
     return convertToClonedTrackPars(TP,newPar,newCov,sign,createFQoS,"2D");
-    
+
  }
 
 std::pair<AmgVector(5), AmgSymMatrix(5)>*
@@ -737,7 +737,7 @@ Trk::KalmanUpdatorAmg::calculateFilterStep_5D(const AmgVector(5)& trkPar, const
     // Kalman gain K, residual r, combined covariance R
     AmgMatrix(5,5) K; AmgMatrix(5,5) M;
     AmgVector(5) r; AmgSymMatrix(5) R;
-    // same stuff without reduction    
+    // same stuff without reduction
     r = measPar - trkPar;
     R = (sign * measCov + trkCov).inverse();
     K = trkCov * R;
@@ -771,9 +771,9 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorAmg::makeChi2_1D(const AmgVector(5)&
                                                              const AmgSymMatrix(5)& trkCov,
                                                              double valRio, double rioCov, int paramKey,
                                                              int sign) const
-{ 
+{
   int mk=0;
-  if (paramKey!=1) for (int i=0; i<5; ++i) if (paramKey & (1<<i)) { mk=i; break; }  
+  if (paramKey!=1) for (int i=0; i<5; ++i) if (paramKey & (1<<i)) { mk=i; break; }
   // sign: -1 = updated, +1 = predicted parameters.
   double r = valRio - trkPar(mk);
   //  if (mk==3) catchPiPi;
@@ -781,55 +781,56 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorAmg::makeChi2_1D(const AmgVector(5)&
   if (chiSquared == 0.0) {
     ATH_MSG_DEBUG( "inversion of the error-on-the-residual failed for 1D measurement, set chi2 to zero.");
     return nullptr;
-  } 
+  }
     chiSquared = r*r/chiSquared;
-  
+
   return new FitQualityOnSurface(chiSquared, 1);
 }
 
-Trk::TrackParameters* 
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorAmg::convertToClonedTrackPars(const Trk::TrackParameters& TP,
                                                const AmgVector(5)& par,
                                                const AmgSymMatrix(5)& covPar,
                                                int sign,
                                                bool createFQoS,
-                                               std::string_view ndtext) const 
+                                               std::string_view ndtext) const
 {
-  
-  Trk::TrackParameters* resultPar = 
-      TP.associatedSurface().createTrackParameters(par[0],par[1],par[2],par[3],par[4],new AmgSymMatrix(5)(covPar));
+
+  std::unique_ptr<Trk::TrackParameters> resultPar =
+    TP.associatedSurface().createUniqueTrackParameters(
+      par[0], par[1], par[2], par[3], par[4], new AmgSymMatrix(5)(covPar));
   // screen output
   if (msgLvl(MSG::VERBOSE) && resultPar) {
     char reportCalledInterface[80];
     char ndtext2[5];
     memset(ndtext2, '\0', 5 ); ndtext.copy(ndtext2,2); // convert char to string
-    if (sign>0) 
+    if (sign>0)
       sprintf(reportCalledInterface,"%s-%s,%s)",
               (ndtext=="5D"?"combineStates(TP,TP":"addToState(TP,Meas"),
               ndtext2,(createFQoS?"Err,FQ":"Err"));
-    else 
+    else
       sprintf(reportCalledInterface,"%s,Meas-%s,%s)","removeFromState(TP,",
               ndtext2,(createFQoS?"Err,FQ":"Err"));
     logResult((std::string)reportCalledInterface, resultPar->parameters(),covPar);
   }
-  
+
   return resultPar;
 }
 
 const AmgSymMatrix(5)* Trk::KalmanUpdatorAmg::getStartCov(const Trk::TrackParameters& inputParameters,
                                                           const int isign) const
 {
-  
+
   const AmgSymMatrix(5)* covariance = inputParameters.covariance();
   if (!covariance) {
     if (isign<0) {
       ATH_MSG_WARNING ("-U- no trkCov in fit iteration, can not calculate updated parameter state.");
       return nullptr;
-    } 
+    }
       // no error given - use a huge error matrix for the time
       ATH_MSG_VERBOSE ("-U- no trkCov at input - assign large error matrix for the time being.");
       return m_covariance0;
-    
+
   }
   return covariance;
 }
@@ -848,7 +849,7 @@ bool Trk::KalmanUpdatorAmg::correctThetaPhiRange_5D(AmgVector(5)& V,AmgSymMatrix
                                                         const KalmanUpdatorAmg::RangeCheckDef rcd) const
 {
   static const AmgVector(2) thetaMin(0.0, -M_PI);
-  
+
   // correct theta coordinate
   if ( V(Trk::theta)<thetaMin((int)rcd) || V(Trk::theta)> M_PI ) {
     ATH_MSG_DEBUG ("-U- theta angle out of range: theta= "<<V(Trk::theta)<<", phi= "<<V(Trk::phi));
@@ -885,7 +886,7 @@ bool Trk::KalmanUpdatorAmg::correctThetaPhiRange_5D(AmgVector(5)& V,AmgSymMatrix
     V(Trk::phi) = fmod(V(Trk::phi)-M_PI,2*M_PI)+M_PI;
     ATH_MSG_DEBUG(" out of range, now "<< "corrected to " << V(Trk::phi));
   }
-  
+
   return true;
 }
 
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorSMatrix.cxx b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorSMatrix.cxx
index edb56ba9e4e39560fbd64a9193d84e0188b0fe9c..27acf82508515ff8ce98a64fc01ea6fdcc9a5574 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorSMatrix.cxx
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanUpdatorSMatrix.cxx
@@ -75,8 +75,8 @@ StatusCode Trk::KalmanUpdatorSMatrix::finalize()
 }
 
 // updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& inputTrkPar,
-                                                             const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& inputTrkPar,
+                                                             const Amg::Vector2D& measLocPos,
                                                              const Amg::MatrixX& measLocCov) const {
   if (msgLvl(MSG::VERBOSE)) logStart("addToState(TP,LPOS,ERR)",inputTrkPar);
   FitQualityOnSurface*    fitQoS = nullptr;
@@ -84,8 +84,8 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
 
   SCovMatrix5 covTrk;
   if (!getStartCov(covTrk,inputTrkPar,updatingSign)) return nullptr;
-  
-  
+
+
   int nLocCoord = measLocCov.cols();
   if (nLocCoord == 1) {
     return calculateFilterStep_1D (inputTrkPar, // transmit the surface
@@ -98,14 +98,14 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
                                    SParVector2(measLocPos[0],measLocPos[1]),3,
                                    measLocCov,
                                    updatingSign,fitQoS,false);
-  } 
-    ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!" ); 
+  }
+    ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!" );
     return nullptr;
-  
+
 }
 
 // updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& trkPar,
                                                              const LocalParameters&  measmtPar,
                                                              const Amg::MatrixX& measmtCov) const {
     if (msgLvl(MSG::VERBOSE)) logStart("addToState(TP,LPAR,ERR)",trkPar);
@@ -114,8 +114,8 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
 }
 
 // updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& inputTP,
-                                                             const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& inputTP,
+                                                             const Amg::Vector2D& measLocPos,
                                                              const Amg::MatrixX& measLocCov,
                                                              FitQualityOnSurface*& fitQoS) const {
     const int updatingSign = 1;
@@ -123,11 +123,11 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
     if (fitQoS) {
         ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!");
         return nullptr;
-    } 
+    }
 
       SCovMatrix5 covTrk;
       if (!getStartCov(covTrk,inputTP,updatingSign)) return nullptr;
-            
+
       int nLocCoord = measLocCov.cols();
       if (nLocCoord == 1) {
         return calculateFilterStep_1D (inputTP,
@@ -140,15 +140,15 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
                                        SParVector2(measLocPos[0],measLocPos[1]),3,
                                        measLocCov,
                                        updatingSign,fitQoS,true);
-        } 
-        ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!" ); 
+        }
+        ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates must be 1 or 2, can not update!" );
         return nullptr;
-      
-    
+
+
 }
 
 // updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackParameters& trkPar,
                                                              const LocalParameters& measmtPar,
                                                              const Amg::MatrixX& measmtCov,
                                                              FitQualityOnSurface*& fitQoS) const {
@@ -157,14 +157,14 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::addToState (const Trk::TrackPar
         ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to"
               << " avoid mem leak!" );
       return nullptr;
-    } 
+    }
       return prepareFilterStep (trkPar, measmtPar, measmtCov, 1, fitQoS, true);
-    
+
 }
 
 // inverse updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& inputTP,
-                                                                  const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& inputTP,
+                                                                  const Amg::Vector2D& measLocPos,
                                                                   const Amg::MatrixX& measLocCov) const {
     if (msgLvl(MSG::VERBOSE)) logStart("removeFromState(TP,LPOS,ERR)",inputTP);
     FitQualityOnSurface*    fitQoS = nullptr;
@@ -184,15 +184,15 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::Tra
                                      SParVector2(measLocPos[0],measLocPos[1]),3,
                                      measLocCov,
                                      updatingSign,fitQoS,false);
-    } 
+    }
       ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates "
-            << "must be 1 or 2, can not un-update!" ); 
+            << "must be 1 or 2, can not un-update!" );
       return nullptr;
-    
+
 }
 
 // inverse updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& trkPar,
                                                                   const LocalParameters& measmtPar,
                                                                   const Amg::MatrixX& measmtCov) const {
     if (msgLvl(MSG::DEBUG)) logStart("removeFromState(TP,LPAR,ERR)",trkPar);
@@ -201,8 +201,8 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::Tra
 }
 
 // inverse updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& inputTP,
-                                                                  const Amg::Vector2D& measLocPos, 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& inputTP,
+                                                                  const Amg::Vector2D& measLocPos,
                                                                   const Amg::MatrixX& measLocCov,
                                                                   FitQualityOnSurface*& fitQoS) const {
     const int updatingSign = -1;
@@ -211,11 +211,11 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::Tra
       msg(MSG::WARNING) << "expect nil FitQuality pointer, refuse operation to"
             << " avoid mem leak!" << endmsg;
       return nullptr;
-    } 
+    }
       SCovMatrix5 covTrk;
-      
+
       if (!getStartCov(covTrk,inputTP,updatingSign)) return nullptr;
-      
+
       int nLocCoord = measLocCov.cols();
       if (nLocCoord == 1) {
         return calculateFilterStep_1D (inputTP,
@@ -228,16 +228,16 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::Tra
                                        SParVector2(measLocPos[0],measLocPos[1]),3,
                                        measLocCov,
                                        updatingSign,fitQoS,true);
-      } 
+      }
         ATH_MSG_WARNING( " number (" << nLocCoord << ") of local coordinates"
               << " must be 1 or 2, can not un-update!" );
         return nullptr;
-      
-    
+
+
 }
 
 // inverse updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::TrackParameters& trkPar,
                                                                   const LocalParameters& measmtPar,
                                                                   const Amg::MatrixX& measmtCov,
                                                                   FitQualityOnSurface*& fitQoS) const {
@@ -245,13 +245,13 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::removeFromState (const Trk::Tra
     if (fitQoS) {
         ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!" );
         return nullptr;
-    } 
+    }
         return prepareFilterStep (trkPar, measmtPar, measmtCov, -1, fitQoS, true);
-    
+
 }
 
 // state-to-state updator, trajectory combination - version without fitQuality
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::combineStates (const Trk::TrackParameters& one,
                                                                 const Trk::TrackParameters& two) const {
 	// try if both Track Parameters are measured ones ?
 	const AmgSymMatrix(5)* covOne = one.covariance();
@@ -265,16 +265,16 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::Track
 	// if only one of two has an error, return that one
 	if (!covOne) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",two.parameters(),*covTwo);
-      return two.clone();
+      return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
 	if (!covTwo) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",one.parameters(),*covOne);
-      return one.clone();
+      return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
-	
+
 	// ... FIXME - TRT is so difficult, need to check that both parameters are in the same frame
 	//			   otherwise go into frame of one !
-	
+
 	// call 5dim updator to combine using gain matrix formalism
     SCovMatrix5 covOneSM;
     for (int i=0; i<5; ++i)
@@ -290,7 +290,7 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::Track
 }
 
 // state-to-state updator, trajectory combination - version with fitQuality
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::combineStates (const Trk::TrackParameters& one,
                                                                 const Trk::TrackParameters& two,
                                                                 FitQualityOnSurface*& fitQoS) const {
     // try if both Track Parameters are measured ones ?
@@ -302,29 +302,29 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::Track
 		ATH_MSG_WARNING( "both parameters have no errors, invalid use of Updator::combineStates()" );
 		return nullptr;
 	}
-	
+
 	if (fitQoS) {
         ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!");
         return nullptr;
     }
-    
+
 	// if only one of two has an error, return that one
 	if (!covOne) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",two.parameters(),*covTwo);
-      return two.clone();
+      return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
 	if (!covTwo) {
       if (msgLvl(MSG::VERBOSE)) logResult("combineStates(TP,TP)",one.parameters(),*covOne);
-      return one.clone();
+      return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
-	
+
     // call 5dim updator to combine using gain matrix formalism
     SCovMatrix5 covOneSM;
     for (int i=0; i<5; ++i)
       for (int j=0; j<=i; ++j) {
         covOneSM(j,i) = (*covOne)(j,i);
     }
-      
+
     return calculateFilterStep_5D(one,SParVector5(&one.parameters()[0],5),covOneSM,
                                   SParVector5(&two.parameters()[0],5),
                                   (*covTwo),
@@ -333,7 +333,7 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::combineStates (const Trk::Track
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorSMatrix::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                          const Amg::Vector2D& locPos,
                                          const Amg::MatrixX& covRio) const {
@@ -359,20 +359,20 @@ Trk::KalmanUpdatorSMatrix::fullStateFitQuality (const Trk::TrackParameters& trkP
                          (*trkPar.covariance()),
                          SParVector2(locPos[Trk::locX],locPos[Trk::locY]),
                          SmeasCov, 2,-1);
-    } 
+    }
       ATH_MSG_WARNING( "Error in local position - must be 1D or 2D!" );
       return nullptr;
-    
+
 }
 
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorSMatrix::fullStateFitQuality (const Trk::TrackParameters& trkPar,
                                                 const Trk::LocalParameters& parRio,
                                                 const Amg::MatrixX& covRio) const {
   ATH_MSG_VERBOSE( "--> entered KalmanUpdatorSMatrix::fullStateFitQuality(TP,LPAR,ERR)" );
-	
+
 	// try if Track Parameters are measured ones ?
 	if (!trkPar.covariance()) {
 		ATH_MSG_ERROR( "updated track state has no error matrix" );
@@ -413,19 +413,19 @@ Trk::KalmanUpdatorSMatrix::fullStateFitQuality (const Trk::TrackParameters& trkP
 
       // State to measurement dimensional reduction Matrix ( n x m )
       const Amg::MatrixX& H = parRio.expansionMatrix();
-	
+
       // residuals
       Amg::VectorX r;
       if (parRio.parameterKey()==31) r = (parRio - trkPar.parameters());
       else r = (parRio - H*trkPar.parameters());
-      
+
       // all the rest is outsourced to a common chi2 routine
       return makeChi2Object(r,(*trkPar.covariance()),covRio,H,-1);
-    
+
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                                      const Amg::Vector2D& rioLocPos,
                                                      const Amg::MatrixX& covRio) const {
@@ -433,7 +433,7 @@ Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters&
 	// try if Track Parameters are measured ones ?
 	if (!predPar.covariance()) {
 #if 0
-      if (&predPar == nullptr) 
+      if (&predPar == nullptr)
         ATH_MSG_WARNING( "input state is NULL in predictedStateFitQuality()" );
       else
 #endif
@@ -456,14 +456,14 @@ Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters&
                          (*predPar.covariance()),
                          SParVector2(rioLocPos[Trk::locX],rioLocPos[Trk::locY]),
                          SmeasCov, 2,+1);
-    } 
+    }
       ATH_MSG_WARNING( "Error in local position - must be 1D or 2D!" );
       return nullptr;
-    
+
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters& predPar,
                                                      const Trk::LocalParameters& parRio,
                                                      const Amg::MatrixX& covRio) const {
@@ -472,7 +472,7 @@ Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters&
     // try if Track Parameters are measured ones ?
 	if (!predPar.covariance()) {
 #if 0
-      if (&predPar == nullptr) 
+      if (&predPar == nullptr)
         ATH_MSG_WARNING( "input state is NULL in predictedStateFitQuality()" );
       else
 #endif
@@ -514,20 +514,20 @@ Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters&
 
       // State to measurement dimensional reduction Matrix ( n x m )
       const Amg::MatrixX& H = parRio.expansionMatrix();
-      
+
       // residuals
       Amg::VectorX r;
       if (parRio.parameterKey()==31) r = parRio - predPar.parameters();
       else r = parRio - H * predPar.parameters();
-      
+
       // all the rest is outsourced to a common chi2 routine
       return makeChi2Object(r,(*predPar.covariance()),
                             covRio,H,+1);
-    
+
 }
 
 // estimator for FitQuality on Surface (allows for setting of LR for straws)
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdatorSMatrix::predictedStateFitQuality (const Trk::TrackParameters& trkParOne,
                                                      const Trk::TrackParameters& trkParTwo) const {
   ATH_MSG_VERBOSE("--> entered KalmanUpdatorSMatrix::predictedStateFitQuality(TP,TP)");
@@ -557,7 +557,7 @@ std::vector<double> Trk::KalmanUpdatorSMatrix::initialErrors() const {
 }
 
 // analyse dimension of localParameters to call appropriate fast-access mathematics
-Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::prepareFilterStep (const Trk::TrackParameters& inputTrkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdatorSMatrix::prepareFilterStep (const Trk::TrackParameters& inputTrkPar,
                                                                     const Trk::LocalParameters&  parRio,
                                                                     const Amg::MatrixX& covRio,
                                                                     const int sign,
@@ -598,7 +598,7 @@ Trk::TrackParameters* Trk::KalmanUpdatorSMatrix::prepareFilterStep (const Trk::T
 }
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::calculateFilterStep_1D (const TrackParameters& TP,
                                                    const SParVector5&  trkPar,
                                                    const SCovMatrix5&  trkCov,
@@ -627,7 +627,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_1D (const TrackParameters& TP,
     ATH_MSG_VERBOSE( "-U- inv. sigmaR = " << R);
     ATH_MSG_VERBOSE( "-U- gain mtx     K=("
           <<std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right)
-          << std::setw(7) << std::setprecision(4) << K(0,0)<<", " 
+          << std::setw(7) << std::setprecision(4) << K(0,0)<<", "
           << std::setw(7) << std::setprecision(4) << K(1,0)<<", "
           << std::setw(7) << std::setprecision(4) << K(2,0)<<", "
           << std::setw(7) << std::setprecision(4) << K(3,0)<<", "
@@ -648,7 +648,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_1D (const TrackParameters& TP,
       K(Trk::theta,0) = K(Trk::theta,0)*m_thetaGainDampingValue;
       ATH_MSG_DEBUG( "-U- damped gain  K=("
             <<std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right)
-            << std::setw(7) << std::setprecision(4) << K(0,0)<<", " 
+            << std::setw(7) << std::setprecision(4) << K(0,0)<<", "
             << std::setw(7) << std::setprecision(4) << K(1,0)<<", "
             << std::setw(7) << std::setprecision(4) << K(2,0)<<", "
             << std::setw(7) << std::setprecision(4) << K(3,0)<<", "
@@ -710,7 +710,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_1D (const TrackParameters& TP,
 }
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::calculateFilterStep_2D (const TrackParameters& TP,
                                                    const SParVector5&  trkPar,
                                                    const SCovMatrix5&  trkCov,
@@ -742,12 +742,12 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_2D (const TrackParameters& TP,
   }
 
   // --- compute Kalman gain matrix
-  ROOT::Math::SMatrix<double,5,2,ROOT::Math::MatRepStd<double, 5, 2> > 
+  ROOT::Math::SMatrix<double,5,2,ROOT::Math::MatRepStd<double, 5, 2> >
     K = trkCov * ROOT::Math::Transpose(H) * R;
   if (msgLvl(MSG::VERBOSE)) {
-    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K; 
+    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K;
     logGainForm (2,  trans_r.Place_at(r,0),
-                 trans_R.Place_at(R,0,0), 
+                 trans_R.Place_at(R,0,0),
                  trans_K.Place_at(K,0,0));
   }
 
@@ -764,7 +764,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_2D (const TrackParameters& TP,
       if (msgLvl(MSG::DEBUG)) {
         msg(MSG::DEBUG) << "-U- damped gain K0=("
               <<std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right)
-              << std::setw(7) << std::setprecision(4) << K(0,0)<<", " 
+              << std::setw(7) << std::setprecision(4) << K(0,0)<<", "
               << std::setw(7) << std::setprecision(4) << K(1,0)<<", "
               << std::setw(7) << std::setprecision(4) << K(2,0)<<", "
               << std::setw(7) << std::setprecision(4) << K(3,0)<<", "
@@ -772,7 +772,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_2D (const TrackParameters& TP,
               << std::resetiosflags(std::ios::fixed) << endmsg;
         msg(MSG::DEBUG) << "-U-             K1=("
               <<std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right)
-              << std::setw(7) << std::setprecision(4) << K(0,1)<<", " 
+              << std::setw(7) << std::setprecision(4) << K(0,1)<<", "
               << std::setw(7) << std::setprecision(4) << K(1,1)<<", "
               << std::setw(7) << std::setprecision(4) << K(2,1)<<", "
               << std::setw(7) << std::setprecision(4) << K(3,1)<<", "
@@ -820,7 +820,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_2D (const TrackParameters& TP,
 }
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::calculateFilterStep_3D (const TrackParameters& TP,
                                                    const SParVector5&  trkPar,
                                                    const SCovMatrix5&  trkCov,
@@ -853,11 +853,11 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_3D (const TrackParameters& TP,
   }
 
   // compute Kalman gain matrix
-  ROOT::Math::SMatrix<double,5,3,ROOT::Math::MatRepStd<double, 5, 3> > 
+  ROOT::Math::SMatrix<double,5,3,ROOT::Math::MatRepStd<double, 5, 3> >
     K = trkCov * ROOT::Math::Transpose(H) * R;
   SGenMatrix5 M = m_unitMatrix - K * H;
   if (msgLvl(MSG::VERBOSE)) {
-    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K; 
+    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K;
     logGainForm (3,  trans_r.Place_at(r,0),
                  trans_R.Place_at(R,0,0), trans_K.Place_at(K,0,0));
   }
@@ -896,7 +896,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_3D (const TrackParameters& TP,
 
     // for both signs (add/remove) the chi2 is now calculated like for updated states
     SCovMatrix3 R2 = SmeasCov - projection_3D(updatedCov,measPar.parameterKey());
-    double  chiSquared;	
+    double  chiSquared;
     if ( !R2.Invert() ) {
       ATH_MSG_DEBUG( "matrix (3D) inversion not possible, set chi2 to zero");
       chiSquared = 0.f;
@@ -912,7 +912,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_3D (const TrackParameters& TP,
 }
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::calculateFilterStep_4D (const TrackParameters& TP,
                                             const SParVector5&  trkPar,
                                             const SCovMatrix5&  trkCov,
@@ -948,11 +948,11 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_4D (const TrackParameters& TP,
   }
 
   // compute Kalman gain matrix
-  ROOT::Math::SMatrix<double,5,4,ROOT::Math::MatRepStd<double, 5, 4> > 
+  ROOT::Math::SMatrix<double,5,4,ROOT::Math::MatRepStd<double, 5, 4> >
     K = trkCov * ROOT::Math::Transpose(H) * R;
   SGenMatrix5 M = m_unitMatrix - K * H;
   if (msgLvl(MSG::VERBOSE)) {
-    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K; 
+    SParVector5 trans_r; SCovMatrix5 trans_R; SGenMatrix5 trans_K;
     logGainForm (4,  trans_r.Place_at(r,0),
                  trans_R.Place_at(R,0,0), trans_K.Place_at(K,0,0));
   }
@@ -989,7 +989,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_4D (const TrackParameters& TP,
 
     // for both signs (add/remove) the chi2 is now calculated like for updated states
     SCovMatrix4 R2 = SmeasCov - projection_4D(updatedCov,measPar.parameterKey());
-    double  chiSquared;	
+    double  chiSquared;
     if ( !R2.Invert() ) {
       ATH_MSG_DEBUG( "matrix (4D) inversion not possible, set chi2 to zero");
       chiSquared = 0.f;
@@ -1005,7 +1005,7 @@ Trk::KalmanUpdatorSMatrix::calculateFilterStep_4D (const TrackParameters& TP,
 }
 
 // calculations for Kalman updator and inverse Kalman filter
-Trk::TrackParameters*
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::calculateFilterStep_5D (const TrackParameters& TP,
                                             const SParVector5&  trkParOne,
                                             const SCovMatrix5&  trkCovOne,
@@ -1105,9 +1105,9 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorSMatrix::makeChi2_1D(const SParVecto
   if (chiSquared == 0.0) {
     ATH_MSG_DEBUG( "inversion of the error-on-the-residual failed." );
     return nullptr;
-  } 
+  }
     chiSquared = r*r/chiSquared;
-  
+
   return new FitQualityOnSurface(chiSquared, 1);
 }
 
@@ -1146,7 +1146,7 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorSMatrix::makeChi2_5D(const SParVecto
 
   SCovMatrix5 ScovOne;
   SCovMatrix5 ScovTwo; // trafo EDM to new math lib
-  for (int i=0; i<5; ++i) 
+  for (int i=0; i<5; ++i)
     for (int j=0; j<=i; ++j) {
       ScovOne(i,j) = covOne(i,j);
       ScovTwo(i,j) = covTwo(i,j);
@@ -1164,7 +1164,7 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorSMatrix::makeChi2_5D(const SParVecto
   return new FitQualityOnSurface(chiSquared, 5);
 }
 
-Trk::TrackParameters* 
+std::unique_ptr<Trk::TrackParameters>
 Trk::KalmanUpdatorSMatrix::convertToClonedTrackPars(const Trk::TrackParameters& TP,
                                                     const SParVector5& par,
                                                     const SCovMatrix5& covpar,
@@ -1175,27 +1175,27 @@ Trk::KalmanUpdatorSMatrix::convertToClonedTrackPars(const Trk::TrackParameters&
   C->setZero();
   for (int i=0; i<5; ++i) {
     for (int j=0; j<=i; ++j) {
-      C->fillSymmetric(i,j, covpar(i,j)); 
+      C->fillSymmetric(i,j, covpar(i,j));
     }
   }
-  
-  Trk::TrackParameters* resultPar = 
-    TP.associatedSurface().createTrackParameters(par[0],par[1],par[2],par[3],par[4],C);
-  
+
+  std::unique_ptr<Trk::TrackParameters> resultPar =
+    TP.associatedSurface().createUniqueTrackParameters(par[0],par[1],par[2],par[3],par[4],C);
+
   if (msgLvl(MSG::VERBOSE) && resultPar) {
     char reportCalledInterface[80];
     char ndtext2[5];
     memset(ndtext2, '\0', 5 ); ndtext.copy(ndtext2,2); // convert char to string
-    if (sign>0) 
+    if (sign>0)
       sprintf(reportCalledInterface,"%s-%s,%s)",
               (ndtext=="5D"?"combineStates(TP,TP":"addToState(TP,Meas"),
               ndtext2,(createFQoS?"Err,FQ":"Err"));
-    else 
+    else
       sprintf(reportCalledInterface,"%s,Meas-%s,%s)","removeFromState(TP,",
               ndtext2,(createFQoS?"Err,FQ":"Err"));
     logResult((std::string)reportCalledInterface, resultPar->parameters(),*C);
   }
-  
+
   return resultPar;
 }
 
@@ -1204,7 +1204,7 @@ SCovMatrix2 Trk::KalmanUpdatorSMatrix::projection_2D(const SCovMatrix5& M, const
   if (key == 3) { // shortcut the most-used case
     SCovMatrix2 S = M.Sub<SCovMatrix2> (0,0);
     return S;
-  } 
+  }
     ROOT::Math::SVector<int,2>  iv;
     for (int i=0,k=0; i<5; ++i) { if (key & (1<<i)) iv(k++)=i; }
     SCovMatrix2 covSubMatrix;
@@ -1214,7 +1214,7 @@ SCovMatrix2 Trk::KalmanUpdatorSMatrix::projection_2D(const SCovMatrix5& M, const
       }
     }
     return covSubMatrix;
-  
+
 }
 
 SCovMatrix2 Trk::KalmanUpdatorSMatrix::projection_2D(const Amg::MatrixX& M,
@@ -1235,7 +1235,7 @@ SCovMatrix3 Trk::KalmanUpdatorSMatrix::projection_3D(const SCovMatrix5& M, const
 {
   if (key == 7) { // shortcut the most-used case
     return M.Sub<SCovMatrix3> (0,0);
-  } 
+  }
     ROOT::Math::SVector<int,3>  iv;
     for (int i=0,k=0; i<5; ++i) { if (key & (1<<i)) iv(k++)=i; }
     SCovMatrix3 covSubMatrix;
@@ -1245,14 +1245,14 @@ SCovMatrix3 Trk::KalmanUpdatorSMatrix::projection_3D(const SCovMatrix5& M, const
       }
     }
     return covSubMatrix;
-  
+
 }
 
 SCovMatrix4 Trk::KalmanUpdatorSMatrix::projection_4D(const SCovMatrix5& M, const int& key) const
 {
   if (key == 15) { // shortcut the most-used case
     return M.Sub<SCovMatrix4> (0,0);
-  } 
+  }
     ROOT::Math::SVector<int,4> iv;
     for (int i=0,k=0; i<5; ++i) { if (key & (1<<i)) iv(k++)=i; }
     SCovMatrix4 covSubMatrix;
@@ -1262,24 +1262,24 @@ SCovMatrix4 Trk::KalmanUpdatorSMatrix::projection_4D(const SCovMatrix5& M, const
       }
     }
     return covSubMatrix;
-  
+
 }
 
 bool Trk::KalmanUpdatorSMatrix::getStartCov(SCovMatrix5& M,
                                             const Trk::TrackParameters& inputParameters,
                                             const int isign) const
 {
-  
+
   const AmgSymMatrix(5)* covariance = inputParameters.covariance();
   if (!covariance) {
     if (isign<0) {
       ATH_MSG_WARNING ("MeasuredTrackParameters == Null, can not calculate updated parameter state.");
       return false;
-    } 
+    }
       // no error given - use a huge error matrix for the time
       ATH_MSG_VERBOSE ("-U- no covTrk at input - assign large error matrix for the time being.");
       M.SetDiagonal(m_cov0);
-    
+
   } else {
     //    int k = measTrkPar->localAmg::MatrixX().covariance().cols(); is always 5
     for (int i=0; i<5; ++i) {
@@ -1312,7 +1312,7 @@ Trk::FitQualityOnSurface* Trk::KalmanUpdatorSMatrix::makeChi2Object(const Amg::V
 
     // number of degree of freedom added
     int		numberDoF  = covRio.cols();
-	
+
    return new FitQualityOnSurface(chiSquared, numberDoF);
 }
 
@@ -1330,7 +1330,7 @@ bool Trk::KalmanUpdatorSMatrix::correctThetaPhiRange_5D(SParVector5& V,SCovMatri
                                                         const RangeCheckDef rcd) const
 {
   static const SParVector2 thetaMin(0.0, -M_PI);
-  
+
   // correct theta coordinate
   if ( V(Trk::theta)<thetaMin((int)rcd) || V(Trk::theta)> M_PI ) {
     ATH_MSG_DEBUG ("-U- theta angle out of range: theta= "<<V(Trk::theta)<<", phi= "<<V(Trk::phi));
@@ -1368,7 +1368,7 @@ bool Trk::KalmanUpdatorSMatrix::correctThetaPhiRange_5D(SParVector5& V,SCovMatri
     V(Trk::phi) = std::fmod(V(Trk::phi)-M_PI,2*M_PI)+M_PI;
     ATH_MSG_DEBUG( " out of range, now corrected to " << V(Trk::phi) );
   }
-  
+
   return true;
 }
 
@@ -1395,9 +1395,9 @@ void Trk::KalmanUpdatorSMatrix::logInputCov(const SCovMatrix5& covTrk,
   ATH_MSG_VERBOSE( "  covariance matrix                   " << "          " << "                     "
         << std::setw(9)<<covTrk(2,2)<<" "<< std::setw(9)<<covTrk(2,3)<<" "
         << std::setw(9)<<covTrk(2,4));
-  ATH_MSG_VERBOSE( "  of the PREDICTED track pars         " << "          " << "                               " 
+  ATH_MSG_VERBOSE( "  of the PREDICTED track pars         " << "          " << "                               "
         << std::setw(9)<<covTrk(3,3)<<" "<< std::setw(9)<<covTrk(3,4));
-  ATH_MSG_VERBOSE("                                      " << "          " << "                                         " 
+  ATH_MSG_VERBOSE("                                      " << "          " << "                                         "
         << std::setw(9)<<covTrk(4,4)<<std::setprecision(6));
 
   int nLocCoord = covRio.cols();
@@ -1423,7 +1423,7 @@ void Trk::KalmanUpdatorSMatrix::logGainForm(int nc, const SParVector5& r,
     msg(MSG::VERBOSE) // K is a row x col = 5 x nc matrix.
           << ( i==0 ? "-U- gain mtx  K=(" : "                (" )
           << std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right )
-          << std::setw(7) << std::setprecision(4) << K(0,i)<<", " 
+          << std::setw(7) << std::setprecision(4) << K(0,i)<<", "
           << std::setw(7) << std::setprecision(4) << K(1,i)<<", "
           << std::setw(7) << std::setprecision(4) << K(2,i)<<", "
           << std::setw(7) << std::setprecision(4) << K(3,i)<<", "
@@ -1431,7 +1431,7 @@ void Trk::KalmanUpdatorSMatrix::logGainForm(int nc, const SParVector5& r,
           << std::resetiosflags(std::ios::fixed) << "\n";
 }
 
-void Trk::KalmanUpdatorSMatrix::logResult(const std::string& methodName, 
+void Trk::KalmanUpdatorSMatrix::logResult(const std::string& methodName,
                                    const AmgVector(5)& par, const AmgSymMatrix(5)& covPar) const
 {
     // again some verbose debug output
@@ -1441,7 +1441,7 @@ void Trk::KalmanUpdatorSMatrix::logResult(const std::string& methodName,
           << std::setw(10)<<par[2]<< std::setw(10)<<par[3]<<std::setprecision(4)
           << std::setw(10)<<par[4]                <<"\n";
     msg(MSG::VERBOSE) << "-U- new cov" <<std::setiosflags(std::ios::right)<<std::setprecision(3)
-          << std::setw(9)<<(covPar)(0,0)<<" "<< std::setw(9)<<(covPar)(0,1)<<" " 
+          << std::setw(9)<<(covPar)(0,0)<<" "<< std::setw(9)<<(covPar)(0,1)<<" "
           << std::setw(9)<<(covPar)(0,2)<<" "<< std::setw(9)<<(covPar)(0,3)
           << " " << std::setw(9)<<(covPar)(0,4)<< "\n";
     msg(MSG::VERBOSE) << "                                      " << "           " << "          "
@@ -1450,10 +1450,10 @@ void Trk::KalmanUpdatorSMatrix::logResult(const std::string& methodName,
     msg(MSG::VERBOSE) << "  covariance matrix                   " << "           " << "                    "
           << std::setw(9)<<(covPar)(2,2) <<" "<< std::setw(9)<<(covPar)(2,3) <<" "
           << std::setw(9)<<(covPar)(2,4) << "\n";
-    msg(MSG::VERBOSE) << "  of the UPDATED   track pars         " << "           " 
+    msg(MSG::VERBOSE) << "  of the UPDATED   track pars         " << "           "
           << "                              " <<std::setw(9)<<(covPar)(3,3) << " "
           << std::setw(9)<<(covPar)(3,4) << "\n";
-    msg(MSG::VERBOSE) << "                                      " << "           " 
-          << "                                        " 
+    msg(MSG::VERBOSE) << "                                      " << "           "
+          << "                                        "
           << std::setw(9)<<(covPar)(4,4) <<std::setprecision(6)<< "\n";
 }
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanWeightUpdator.cxx b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanWeightUpdator.cxx
index 51cb1687a3f14ffc4d613a192d77bb03a0524b55..dcaa88252dbea2ca872af238c72f55bf752a055b 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanWeightUpdator.cxx
+++ b/Tracking/TrkTools/TrkMeasurementUpdator/src/KalmanWeightUpdator.cxx
@@ -55,29 +55,29 @@ StatusCode Trk::KalmanWeightUpdator::finalize() {
 }
 
 // updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
                                                               const Amg::Vector2D&    measmtPos,
                                                               const Amg::MatrixX&      measmtErr) const {
 
     FitQualityOnSurface*        fitQoS = nullptr;
-    Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPos, measmtErr,1,fitQoS, false);
+    std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPos, measmtErr,1,fitQoS, false);
     if (m_outputlevel <= 0 && outPar) logResult("addToState(TP,LPOS,ERR)",*outPar);
     return outPar;
 }
 
 // updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
                                                               const LocalParameters&  measmtPar,
                                                               const Amg::MatrixX&      measmtErr) const {
 
     FitQualityOnSurface*        fitQoS = nullptr;
-    Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPar, measmtErr,1,fitQoS, false);
+    std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPar, measmtErr,1,fitQoS, false);
     if (m_outputlevel <= 0 && outPar) logResult("addToState(TP,LPAR,ERR)",*outPar);
     return outPar;
 }
 
 // updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
                                                               const Amg::Vector2D&    measmtPos,
                                                               const Amg::MatrixX&      measmtErr,
                                                               FitQualityOnSurface*&   fitQoS) const {
@@ -85,88 +85,88 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::addToState (  const Trk::TrackPa
     if (fitQoS) {
         ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
         return nullptr;
-    } 
-        Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPos, measmtErr, 1, fitQoS, true);
+    }
+        std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPos, measmtErr, 1, fitQoS, true);
         if (!outPar)
             fitQoS = nullptr;
         if (m_outputlevel <= 0 && outPar)
             logResult("addToState(TP,LPOS,ERR,FQ)",*outPar);
         return outPar;
-    
+
 }
 
 // updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::addToState (  const Trk::TrackParameters& trkPar,
                                                               const LocalParameters&  measmtPar,
                                                               const Amg::MatrixX&      measmtErr,
                                                               FitQualityOnSurface*&   fitQoS) const {
     if (fitQoS) {
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
         return nullptr;
-    } 
-        Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPar, measmtErr, 1, fitQoS, true);
+    }
+        std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPar, measmtErr, 1, fitQoS, true);
         if (!outPar)
             fitQoS = nullptr;
         if (m_outputlevel <= 0 && outPar) logResult("addToState(TP,LPAR,ERR,FQ)",*outPar);
         return outPar;
-    
+
 }
 
 // inverse updator #1 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
                                                                   const Amg::Vector2D&    measmtPos,
                                                                   const Amg::MatrixX&      measmtErr) const {
     FitQualityOnSurface*        fitQoS = nullptr;
-    Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPos, measmtErr,-1,fitQoS, false);
+    std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPos, measmtErr,-1,fitQoS, false);
     if (m_outputlevel<=0 && outPar) logResult("removeFromState(TP,LPOS,ERR)",*outPar);
     return outPar;
 }
 
 // inverse updator #2 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
                                                                   const LocalParameters&   measmtPar,
                                                                   const Amg::MatrixX&      measmtErr) const {
 
     FitQualityOnSurface*        fitQoS = nullptr;
-    Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPar, measmtErr,-1,fitQoS,false);
+    std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPar, measmtErr,-1,fitQoS,false);
     if (m_outputlevel && outPar) logResult("removeFromState(TP,LPAR,ERR)",*outPar);
     return outPar;
 }
 
 // inverse updator #3 for Kalman Fitter - version with Amg::Vector2D (for example for PrepRawData)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
                                                                   const Amg::Vector2D&    measmtPos,
                                                                   const Amg::MatrixX&      measmtErr,
                                                                   FitQualityOnSurface*&    fitQoS) const {
     if (fitQoS) {
       ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
         return nullptr;
-    } 
-      Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPos, measmtErr, -1, fitQoS, true);
+    }
+      std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPos, measmtErr, -1, fitQoS, true);
         if (!outPar) fitQoS = nullptr;
         if (m_outputlevel<=0 && outPar) logResult("removeFromState(TP,LPOS,ERR,FQ)",*outPar);
         return outPar;
-    
+
 }
 
 // inverse updator #4 for Kalman Fitter - version with LocalParameters (for example for RIO_OnTrack)
-Trk::TrackParameters* Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::removeFromState ( const Trk::TrackParameters& trkPar,
                                                                   const LocalParameters&      measmtPar,
                                                                   const Amg::MatrixX&         measmtErr,
                                                                   FitQualityOnSurface*&       fitQoS) const {
   if (fitQoS) {
     ATH_MSG_WARNING( "expect nil FitQuality pointer, refuse operation to avoid mem leak!"  );
         return nullptr;
-    } 
-        Trk::TrackParameters* outPar = calculateFilterStep (trkPar, measmtPar, measmtErr, -1, fitQoS, true);
+    }
+        std::unique_ptr<Trk::TrackParameters> outPar = calculateFilterStep (trkPar, measmtPar, measmtErr, -1, fitQoS, true);
         if (!outPar) fitQoS = nullptr;
         if (m_outputlevel<=0 && outPar) logResult("removeFrommState(TP,LPAR,ERR,FQ)",*outPar);
         return outPar;
-    
+
 }
 
 // state-to-state updator, trajectory combination - version without fitQuality
-Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::combineStates (   const Trk::TrackParameters& one,
                                                                   const Trk::TrackParameters& two) const {
     // remember, either one OR two might have no error, but not both !
     if (!one.covariance() && !two.covariance()) {
@@ -176,11 +176,11 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
     // if only one of two has an error, return that one
     if (!one.covariance()) {
         if (m_outputlevel<=0) logResult("combineStates(TP,TP)",two);
-        return two.clone();
+        return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
     if (!two.covariance()) {
         if (m_outputlevel<=0) logResult("combineStates(TP,TP)",one);
-        return one.clone();
+        return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
 
 
@@ -194,7 +194,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
     AmgSymMatrix(5) G2 = two.covariance()->inverse();
     AmgSymMatrix(5) G = G1 + G2;
 
-    // avoid making weighted sum at opposite side of detector. 
+    // avoid making weighted sum at opposite side of detector.
     // We know that one&two's phis are in range, so lets put them back out of range.
     Amg::VectorX correctedTwo = two.parameters();
     if (std::abs(two.parameters()[Trk::phi] - one.parameters()[Trk::phi])> M_PI) {
@@ -211,14 +211,14 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
       return nullptr;
     }
     // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-    TrackParameters* comb = one.associatedSurface().createTrackParameters(p[Trk::loc1],p[Trk::loc2],
-                                                                          p[Trk::phi],p[Trk::theta],p[Trk::qOverP],covNew); 
+    std::unique_ptr<TrackParameters> comb = one.associatedSurface().createUniqueTrackParameters(p[Trk::loc1],p[Trk::loc2],
+                                                                          p[Trk::phi],p[Trk::theta],p[Trk::qOverP],covNew);
     if (m_outputlevel<=0 && comb) logResult("combineStates(TP,TP)",*comb);
     return comb;
 }
 
 // state-to-state updator, trajectory combination - version with fitQuality
-Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::TrackParameters& one,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::combineStates (   const Trk::TrackParameters& one,
                                                                   const Trk::TrackParameters& two,
                                                                   FitQualityOnSurface*& fitQoS) const {
     // try if both Track Parameters are measured ones ?
@@ -235,12 +235,12 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
     if (!one.covariance()) {
         fitQoS =  new FitQualityOnSurface(0.f, 5);
         if (m_outputlevel<=0) logResult("combineStates(TP,TP,FQ)",two);
-        return two.clone();
+        return std::unique_ptr<Trk::TrackParameters>(two.clone());
     }
     if (!two.covariance()) {
         fitQoS =  new FitQualityOnSurface(0.f, 5);
         if (m_outputlevel<=0) logResult("combineStates(TP,TP,FQ)",one);
-        return one.clone();
+        return std::unique_ptr<Trk::TrackParameters>(one.clone());
     }
 
     // ... FIXME - TRT is so difficult, need to check that both parameters are in the same frame
@@ -253,7 +253,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
     AmgSymMatrix(5) G2 = two.covariance()->inverse();
     AmgSymMatrix(5) G = G1 + G2;
 
-    // avoid making weighted sum at opposite side of detector. 
+    // avoid making weighted sum at opposite side of detector.
     // We know that one&two's phis are in range, so lets put them back out of range.
     Amg::VectorX correctedTwo = two.parameters();
     if (std::abs(two.parameters()[Trk::phi] - one.parameters()[Trk::phi])> M_PI) {
@@ -270,8 +270,8 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::combineStates (   const Trk::Tra
         return nullptr;
     }
     // return cloned version of Track Parameters (MeasuredPerigee, MeasuredAtA...)
-    TrackParameters* comb = one.associatedSurface().createTrackParameters(p[Trk::loc1],p[Trk::loc2],
-                                                                          p[Trk::phi],p[Trk::theta],p[Trk::qOverP],covNew); 
+    std::unique_ptr<TrackParameters> comb = one.associatedSurface().createUniqueTrackParameters(p[Trk::loc1],p[Trk::loc2],
+                                                                          p[Trk::phi],p[Trk::theta],p[Trk::qOverP],covNew);
     // compute fit quality:
     // chi^2 = (p_2 - p)^T G_2 (p_2 - p) + (p - p_1)^T G_1 (p - p_1)
     Amg::VectorX r2 = two.parameters() - p;
@@ -437,13 +437,13 @@ Trk::KalmanWeightUpdator::predictedStateFitQuality (    const Trk::TrackParamete
 
 std::vector<double> Trk::KalmanWeightUpdator::initialErrors() const {
   std::vector<double> E(5);
-  for (int i=0; i<5; ++i) E[i] = (m_weight[i]!=0.) ? 
+  for (int i=0; i<5; ++i) E[i] = (m_weight[i]!=0.) ?
       std::sqrt(1./m_weight[i]) : 1E5 ;
   return E;
 }
 
 // mathematics for Kalman updator and inverse Kalman filter
-Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk::TrackParameters& p,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk::TrackParameters& p,
                                                                       const Amg::Vector2D&  mpos,
                                                                       const Amg::MatrixX& cov,
                                                                       const int sign,
@@ -473,7 +473,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
       ATH_MSG_ERROR( "MeasuredTrackParameters == Null, can not calculate "
                      << "updated track state"  );
       return nullptr;
-    } 
+    }
       // no error given - use zero weight for the time
       GOld.setZero();
       ATH_MSG_VERBOSE( "-U- no covTrk at input - "
@@ -483,7 +483,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
       (GOld)(2,2) = m_weight[2];
       (GOld)(3,3) = m_weight[3];
       (GOld)(4,4) = m_weight[4];
-    
+
   } else {
     GOld = p.covariance()->inverse();
   }
@@ -521,13 +521,13 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
   AmgSymMatrix(5)* covNew = new AmgSymMatrix(5)(Gnew.inverse());
   // calc new track state: pNew = Gnew^{-1} * ( GOld * pOld +/- H.T * W * m)
   Amg::VectorX weightedSum = GOld * pOld + sign * H.transpose() * W * m;
-  
+
   Amg::VectorX pNew = (*covNew) * weightedSum;
   if ( (!thetaPhiWithinRange(pNew)) ? !correctThetaPhiRange(pNew) : false ) {
     ATH_MSG_WARNING( "calculateFS(TP,LPAR,ERR): bad angles in filtered state!"  );
     return nullptr;
   }
-  
+
   // compute chi2 if needed
   if (createFQoS) {
       // calc Chi2
@@ -538,16 +538,16 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
     //double chiSquared = W.similarity(r) + GOld.similarity(deltaP);
     fitQoS = makeChi2Object(r, W, 0, deltaP, GOld, 31);
   }
-    
-  TrackParameters* updated = p.associatedSurface().createTrackParameters(pNew[Trk::loc1],pNew[Trk::loc2],
+
+  std::unique_ptr<TrackParameters> updated = p.associatedSurface().createUniqueTrackParameters(pNew[Trk::loc1],pNew[Trk::loc2],
                                                                          pNew[Trk::phi],pNew[Trk::theta],
-                                                                         pNew[Trk::qOverP],covNew); 
+                                                                         pNew[Trk::qOverP],covNew);
   return updated;
 }
 
 
 // mathematics for Kalman updator and inverse Kalman filter
-Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk::TrackParameters& p,
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk::TrackParameters& p,
                                                                             const Trk::LocalParameters&  m,
                                                                             const Amg::MatrixX& W,
                                                                             const int sign,
@@ -573,7 +573,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
     if (sign<0) {
       ATH_MSG_ERROR( "MeasuredTrackParameters == Null, can not calculate updated track state"  );
       return nullptr;
-    } 
+    }
       // no error given - use zero weight for the time
       GOld.setZero();
       ATH_MSG_VERBOSE( "-U- no covTrk at input - "
@@ -583,7 +583,7 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
       (GOld)(2,2) = m_weight[2];
       (GOld)(3,3) = m_weight[3];
       (GOld)(4,4) = m_weight[4];
-    
+
   } else {
     GOld = p.covariance()->inverse();
   }
@@ -639,9 +639,13 @@ Trk::TrackParameters* Trk::KalmanWeightUpdator::calculateFilterStep ( const Trk:
     fitQoS = makeChi2Object(r, W, m.parameterKey(), deltaP, GOld, 31);
   }
 
-  TrackParameters* updated = p.associatedSurface().createTrackParameters(pNew[Trk::loc1],pNew[Trk::loc2],
-                                                                         pNew[Trk::phi],pNew[Trk::theta],
-                                                                         pNew[Trk::qOverP],Cnew); 
+  std::unique_ptr<TrackParameters> updated =
+    p.associatedSurface().createUniqueTrackParameters(pNew[Trk::loc1],
+                                                      pNew[Trk::loc2],
+                                                      pNew[Trk::phi],
+                                                      pNew[Trk::theta],
+                                                      pNew[Trk::qOverP],
+                                                      Cnew);
   return updated;
 }
 
@@ -721,7 +725,7 @@ void Trk::KalmanWeightUpdator::logInputCov(const Amg::MatrixX& covTrk,
     int nLocCoord = covRio.cols();
     ss << "-U- measurement locPos: ";
     for (int i=0; i<nLocCoord; i++) ss << rioPar[i] << " ";
-  
+
     ss << "-U- measurement (err)^2: " <<std::setprecision(4)<<covRio(0,0);
     for (int i=1; i<nLocCoord; i++) ss << ", "<<covRio(i,i);
     ss << std::setprecision(6)<<"\n";
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h b/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h
index d6e5427c64393436266e3521b6b79251aad6c0e2..44ac2b8bc40eb5f1bbfa8da0dcb3cdc237ff20c1 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h
+++ b/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h
@@ -21,11 +21,11 @@
 namespace Trk {
 
   /**
-     @class KalmanUpdator_xk 
-  
+     @class KalmanUpdator_xk
+
      Trk::KalmanUpdator_xk is a set of tools for adding and removing
      measurements to/from the state vector using xKalman algorithms
-     @author Igor.Gavrilenko@cern.ch     
+     @author Igor.Gavrilenko@cern.ch
   */
 
   class LocalParameters       ;
@@ -34,13 +34,13 @@ namespace Trk {
   class KalmanUpdator_xk : virtual public IUpdator,
     virtual public IPatternParametersUpdator,
     public AthAlgTool
-    { 
+    {
       ///////////////////////////////////////////////////////////////////
       // Public methods:
       ///////////////////////////////////////////////////////////////////
- 
-    public:	
-      
+
+    public:
+
       ///////////////////////////////////////////////////////////////////
       // Standard Athena tool methods
       ///////////////////////////////////////////////////////////////////
@@ -54,28 +54,28 @@ namespace Trk {
       // /////////////////////////////////////////////////////////////////
       // Main public methods for kalman filter updator tool
       // /////////////////////////////////////////////////////////////////
- 
+
       // /////////////////////////////////////////////////////////////////
       // Add and remove without Xi2 calculation
       // /////////////////////////////////////////////////////////////////
-    
+
       //! add without chi2 calculation, PRD-level, EDM track parameters
-      virtual TrackParameters* addToState 
+      virtual std::unique_ptr<TrackParameters> addToState
         (const TrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&) const override final;
       //! add without chi2 calculation, ROT-level, EDM track parameters
-      virtual TrackParameters* addToState 
+      virtual std::unique_ptr<TrackParameters> addToState
         (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final;
 
       //! add without chi2 calculation, PRD-level, pattern track parameters
-      virtual bool                   addToState 
+      virtual bool                   addToState
         (PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
          PatternTrackParameters&) const override final;
       //! add without chi2 calculation, ROT-level, pattern track parameters
-      virtual bool                   addToState 
+      virtual bool                   addToState
         (PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,
          PatternTrackParameters&) const override final;
       //! add without chi2 calculation, PRD-level, pattern track parameters, specifically 1D
-      virtual bool                   addToStateOneDimension 
+      virtual bool                   addToStateOneDimension
         (PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
          PatternTrackParameters&) const override final;
 
@@ -83,15 +83,15 @@ namespace Trk {
       // Remove without Xi2 calculation
       ///////////////////////////////////////////////////////////////////
 
-      virtual TrackParameters* removeFromState 
+      virtual std::unique_ptr<TrackParameters> removeFromState
 	(const TrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&) const override final;
-      virtual TrackParameters* removeFromState 
+      virtual std::unique_ptr<TrackParameters> removeFromState
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final;
 
-      virtual bool removeFromState 
+      virtual bool removeFromState
 	(PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 PatternTrackParameters&) const override final;
-      virtual bool removeFromState 
+      virtual bool removeFromState
 	(PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 PatternTrackParameters&) const override final;
 
@@ -99,23 +99,23 @@ namespace Trk {
       // Add  with Xi2 calculation
       ///////////////////////////////////////////////////////////////////
 
-      virtual TrackParameters* addToState 
+      virtual std::unique_ptr<TrackParameters> addToState
 	(const TrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 FitQualityOnSurface*&) const override final;
-      virtual TrackParameters* addToState 
+      virtual std::unique_ptr<TrackParameters> addToState
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 FitQualityOnSurface*&) const override final;
-      virtual std::pair<AmgVector(5),AmgSymMatrix(5)>* updateParameterDifference 
-	(const AmgVector(5)&,const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&, 
-	 const int&,Trk::FitQualityOnSurface*&,bool) const override final; 
-  
-      virtual bool addToState 
+      virtual std::pair<AmgVector(5),AmgSymMatrix(5)>* updateParameterDifference
+	(const AmgVector(5)&,const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&,
+	 const int&,Trk::FitQualityOnSurface*&,bool) const override final;
+
+      virtual bool addToState
 	(PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 PatternTrackParameters&,double&,int&) const override final;
-      virtual bool addToState 
+      virtual bool addToState
 	(PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 PatternTrackParameters&,double&,int&) const override final;
-      virtual bool                   addToStateOneDimension 
+      virtual bool                   addToStateOneDimension
 	(PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 PatternTrackParameters&,double&,int&) const override final;
 
@@ -123,17 +123,17 @@ namespace Trk {
       // Remove with Xi2 calculation
       ///////////////////////////////////////////////////////////////////
 
-      virtual TrackParameters* removeFromState 
+      virtual std::unique_ptr<TrackParameters> removeFromState
 	(const TrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 FitQualityOnSurface*&) const override final;
-      virtual TrackParameters* removeFromState 
+      virtual std::unique_ptr<TrackParameters> removeFromState
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 FitQualityOnSurface*&) const override final;
 
-      virtual bool removeFromState 
+      virtual bool removeFromState
 	(PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,
 	 PatternTrackParameters&,double&,int&) const override final;
-      virtual bool removeFromState 
+      virtual bool removeFromState
 	(PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 PatternTrackParameters&,double&,int&) const override;
 
@@ -141,43 +141,43 @@ namespace Trk {
       // Combine two state with or without Xi2 calculation
       ///////////////////////////////////////////////////////////////////
 
-      virtual TrackParameters* combineStates   
+      virtual std::unique_ptr<TrackParameters> combineStates
 	(const TrackParameters&, const TrackParameters&) const override final;
-      virtual TrackParameters* combineStates   
-	(const TrackParameters&, const TrackParameters&, 
+      virtual std::unique_ptr<TrackParameters> combineStates
+	(const TrackParameters&, const TrackParameters&,
 	 FitQualityOnSurface*&) const override final;
 
-      virtual bool combineStates   
+      virtual bool combineStates
 	(PatternTrackParameters&,PatternTrackParameters&,PatternTrackParameters&) const override final;
-      virtual bool combineStates   
+      virtual bool combineStates
 	(PatternTrackParameters&,PatternTrackParameters&,PatternTrackParameters&,
 	 double&) const override final;
 
       ///////////////////////////////////////////////////////////////////
       // Xi2 calculation
       ///////////////////////////////////////////////////////////////////
-      
-      virtual const FitQualityOnSurface* predictedStateFitQuality  
+
+      virtual const FitQualityOnSurface* predictedStateFitQuality
 	(const TrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&) const override final;
-      virtual const FitQualityOnSurface* predictedStateFitQuality  
+      virtual const FitQualityOnSurface* predictedStateFitQuality
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final;
-      virtual const FitQualityOnSurface* fullStateFitQuality 
+      virtual const FitQualityOnSurface* fullStateFitQuality
 	(const TrackParameters&,const Amg::Vector2D&,  const Amg::MatrixX&) const override final;
-      virtual const FitQualityOnSurface* fullStateFitQuality 
+      virtual const FitQualityOnSurface* fullStateFitQuality
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final;
       virtual const FitQualityOnSurface*  predictedStateFitQuality
 	(const TrackParameters&,const TrackParameters&) const override final;
 
-      virtual bool predictedStateFitQuality  
-	(const PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,int&,double&) 
+      virtual bool predictedStateFitQuality
+	(const PatternTrackParameters&,const Amg::Vector2D&  ,const Amg::MatrixX&,int&,double&)
 	const override final;
-      virtual bool predictedStateFitQuality  
-	(const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&) 
+      virtual bool predictedStateFitQuality
+	(const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&)
 	const override final;
-      virtual bool fullStateFitQuality 
+      virtual bool fullStateFitQuality
 	(const PatternTrackParameters&,const Amg::Vector2D&,  const Amg::MatrixX&,int&,double&)
 	const override final;
-      virtual bool fullStateFitQuality 
+      virtual bool fullStateFitQuality
 	(const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&)
 	const override final;
       virtual bool  predictedStateFitQuality
@@ -185,13 +185,13 @@ namespace Trk {
 
       ///////////////////////////////////////////////////////////////////
       // let the client tools know how the assumptions on the initial
-      // precision for non-measured track parameters are configured 
+      // precision for non-measured track parameters are configured
       ///////////////////////////////////////////////////////////////////
-      
+
       virtual std::vector<double> initialErrors() const override final;
 
     protected:
- 
+
       ///////////////////////////////////////////////////////////////////
       // Protected methods
       ///////////////////////////////////////////////////////////////////
@@ -199,12 +199,12 @@ namespace Trk {
       ///////////////////////////////////////////////////////////////////
       // Updators
       ///////////////////////////////////////////////////////////////////
-      
-      TrackParameters* update 
+
+      std::unique_ptr<TrackParameters> update
 	(const TrackParameters&,const Amg::Vector2D&,const Amg::MatrixX&,
 	 FitQualityOnSurface*&,int,bool) const;
 
-      TrackParameters* update 
+      std::unique_ptr<TrackParameters> update
 	(const TrackParameters&,const LocalParameters&,const Amg::MatrixX&,
 	 FitQualityOnSurface*&,int,bool) const;
 
@@ -223,8 +223,8 @@ namespace Trk {
       ///////////////////////////////////////////////////////////////////
       // Xi2 calculation
       ///////////////////////////////////////////////////////////////////
-      
-      bool predictedStateFitQuality  
+
+      bool predictedStateFitQuality
 	(const double*,const Amg::Vector2D&,const Amg::MatrixX&,int&,double&) const;
 
       bool fullStateFitQuality
@@ -233,7 +233,7 @@ namespace Trk {
       ///////////////////////////////////////////////////////////////////
       // Converters
       ///////////////////////////////////////////////////////////////////
- 
+
       bool trackParametersToUpdator
 	(const        TrackParameters&,double*,double*) const;
 
@@ -242,14 +242,14 @@ namespace Trk {
 
       bool localParametersToUpdator
 	(const LocalParameters&,const Amg::MatrixX&,int&,int&,double*,double*) const;
-      
-     TrackParameters* updatorToTrackParameters
-	(const TrackParameters&,double*,double*) const; 
+
+    std::unique_ptr<TrackParameters> updatorToTrackParameters
+	(const TrackParameters&,double*,double*) const;
 
       ///////////////////////////////////////////////////////////////////
       // Update no measured track parameters
       ///////////////////////////////////////////////////////////////////
-      
+
       bool updateNoMeasuredWithOneDim
 	(double*,double*,double*,double*) const;
 
diff --git a/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx b/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx
index abbb52f25c02e5331f647ba5bae69aec426610f0..a66c49a9d559c5598f1fa130e671b915ac997462 100755
--- a/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx
+++ b/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx
@@ -40,7 +40,7 @@ Trk::KalmanUpdator_xk::KalmanUpdator_xk
 }
 
 ///////////////////////////////////////////////////////////////////
-// Destructor  
+// Destructor
 ///////////////////////////////////////////////////////////////////
 
 Trk::KalmanUpdator_xk::~KalmanUpdator_xk()
@@ -58,7 +58,7 @@ StatusCode Trk::KalmanUpdator_xk::initialize()
   msg(MSG::INFO) << "initialize() successful in " << name() << endmsg;
 
   if( m_cov0.size()!=5) {
-    
+
       m_cov0.erase(m_cov0.begin(),m_cov0.end());
       m_cov0.push_back(  10.);
       m_cov0.push_back(  10.);
@@ -81,32 +81,32 @@ StatusCode Trk::KalmanUpdator_xk::finalize()
 ///////////////////////////////////////////////////////////////////
 // Add local position together with erro matrix  without Xi2 calculation
 ///////////////////////////////////////////////////////////////////
-    
-Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState 
+
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E) const
 {
-  Trk::FitQualityOnSurface* Q=nullptr; 
+  Trk::FitQualityOnSurface* Q=nullptr;
   return update(T,P,E,Q, 1,false);
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToState 
+bool                        Trk::KalmanUpdator_xk::addToState
 (Trk::PatternTrackParameters& T,
  const Amg::Vector2D        & P,
  const Amg::MatrixX         & E,
  Trk::PatternTrackParameters& Ta) const
 {
-  int    n ; 
+  int    n ;
   double x2;
   return update(T,P,E, 1,false,Ta,x2,n);
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToStateOneDimension  
+bool                        Trk::KalmanUpdator_xk::addToStateOneDimension
 (Trk::PatternTrackParameters& T,
  const Amg::Vector2D        & P,
  const Amg::MatrixX         & E,
@@ -120,24 +120,24 @@ bool                        Trk::KalmanUpdator_xk::addToStateOneDimension
 // Remove local position together with erro matrix  without Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E) const
 {
-  Trk::FitQualityOnSurface* Q=nullptr; 
+  Trk::FitQualityOnSurface* Q=nullptr;
   return update(T,P,E,Q,-1,false);
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::removeFromState 
+bool                        Trk::KalmanUpdator_xk::removeFromState
 (Trk::PatternTrackParameters& T,
  const Amg::Vector2D        & P,
  const Amg::MatrixX         & E,
  Trk::PatternTrackParameters& Ta) const
 {
-  int    n ; 
+  int    n ;
   double x2;
   return update(T,P,E,-1,false,Ta,x2,n);
 }
@@ -146,24 +146,24 @@ bool                        Trk::KalmanUpdator_xk::removeFromState
 // Add local parameters together with error matrix  without Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
  const Amg::MatrixX        & E) const
 {
-  Trk::FitQualityOnSurface* Q=nullptr; 
+  Trk::FitQualityOnSurface* Q=nullptr;
   return update(T,P,E,Q, 1,false);
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToState 
+bool                        Trk::KalmanUpdator_xk::addToState
 (Trk::PatternTrackParameters& T,
  const LocalParameters      & P,
  const Amg::MatrixX         & E,
  Trk::PatternTrackParameters& Ta) const
 {
-  int    n ; 
+  int    n ;
   double x2;
   return update(T,P,E, 1,false,Ta,x2,n);
 }
@@ -172,24 +172,24 @@ bool                        Trk::KalmanUpdator_xk::addToState
 // Remove local parameters together with error matrix  without Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
  const Amg::MatrixX        & E) const
 {
-  Trk::FitQualityOnSurface* Q=nullptr; 
+  Trk::FitQualityOnSurface* Q=nullptr;
   return update(T,P,E,Q,-1,false);
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool                       Trk::KalmanUpdator_xk::removeFromState 
+bool                       Trk::KalmanUpdator_xk::removeFromState
 (Trk::PatternTrackParameters& T,
  const LocalParameters      & P,
  const Amg::MatrixX         & E,
  Trk::PatternTrackParameters& Ta) const
 {
-  int    n ; 
+  int    n ;
   double x2;
   return update(T,P,E,-1,false,Ta,x2,n);
 }
@@ -198,7 +198,7 @@ bool                       Trk::KalmanUpdator_xk::removeFromState
 // Add local position together with error matrix  with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E,
@@ -209,7 +209,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToState 
+bool                        Trk::KalmanUpdator_xk::addToState
 (Trk::PatternTrackParameters& T ,
  const Amg::Vector2D        & P ,
  const Amg::MatrixX         & E ,
@@ -222,7 +222,7 @@ bool                        Trk::KalmanUpdator_xk::addToState
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToStateOneDimension  
+bool                        Trk::KalmanUpdator_xk::addToStateOneDimension
 (Trk::PatternTrackParameters& T ,
  const Amg::Vector2D        & P ,
  const Amg::MatrixX         & E ,
@@ -239,7 +239,7 @@ bool                        Trk::KalmanUpdator_xk::addToStateOneDimension
 // Remove local position together with error matrix  with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E,
@@ -250,7 +250,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::removeFromState 
+bool                        Trk::KalmanUpdator_xk::removeFromState
 (Trk::PatternTrackParameters& T ,
  const Amg::Vector2D        & P ,
  const Amg::MatrixX         & E ,
@@ -265,7 +265,7 @@ bool                        Trk::KalmanUpdator_xk::removeFromState
 // Add local parameters together with error matrix  with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
  const Amg::MatrixX        & E,
@@ -278,11 +278,11 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState
 // Add local parameters together with error matrix  with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterDifference 
+std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterDifference
 (const AmgVector(5)       & T ,
- const AmgSymMatrix(5)    & Et, 
- const Amg::VectorX       & P , 
- const Amg::MatrixX       & Ep, 
+ const AmgSymMatrix(5)    & Et,
+ const Amg::VectorX       & P ,
+ const Amg::MatrixX       & Ep,
  const int                & K ,
  Trk::FitQualityOnSurface*& Q ,
  bool                       X) const
@@ -295,7 +295,7 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD
   double m[5];
   double mv[15];
 
-  m [ 0]=P (0  ); 
+  m [ 0]=P (0  );
   mv[ 0]=Ep(0,0);
 
   if(n>1) {
@@ -323,24 +323,24 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD
 		   Et(2,0),Et(2,1),Et(2,2),
 		   Et(3,0),Et(3,1),Et(3,2),Et(3,3),
 		   Et(4,0),Et(4,1),Et(4,2),Et(4,3),Et(4,4)};
-  
+
   bool update = false;
   double x2;
   if     (n==2 && K==3) {
     update = updateWithTwoDim(1,X,m,mv,p,pv,x2);
-    if(update && X) Q = new Trk::FitQualityOnSurface(x2,2); 
+    if(update && X) Q = new Trk::FitQualityOnSurface(x2,2);
   }
   else if(n==1 && K==1) {
     update = updateWithOneDim(1,X,m,mv,p,pv,x2);
-    if(update && X) Q = new Trk::FitQualityOnSurface(x2,1); 
+    if(update && X) Q = new Trk::FitQualityOnSurface(x2,1);
   }
   else                  {
     update = updateWithAnyDim(1,X,m,mv,p,pv,x2,n,K);
-    if(update && X) Q = new Trk::FitQualityOnSurface(x2,n); 
+    if(update && X) Q = new Trk::FitQualityOnSurface(x2,n);
   }
   if(!update) return nullptr;
 
-  testAngles(p,pv); 
+  testAngles(p,pv);
 
   AmgVector(5)    nT ; nT <<p[0],p[1],p[2],p[3],p[4];
   AmgSymMatrix(5) nEt; nEt<<
@@ -351,13 +351,13 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD
 			 pv[10],pv[11],pv[12],pv[13],pv[14];
 
   return new std::pair<AmgVector(5),AmgSymMatrix(5)>(std::make_pair(nT,nEt));
-} 
+}
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::addToState 
+bool                        Trk::KalmanUpdator_xk::addToState
 (Trk::PatternTrackParameters& T ,
- const Trk::LocalParameters & P , 
+ const Trk::LocalParameters & P ,
  const Amg::MatrixX         & E ,
  Trk::PatternTrackParameters& Ta,
  double                     & Q ,
@@ -370,7 +370,7 @@ bool                        Trk::KalmanUpdator_xk::addToState
 // Remove local parameters together with error matrix  with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
  const Amg::MatrixX        & E,
@@ -381,7 +381,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::removeFromState 
+bool                        Trk::KalmanUpdator_xk::removeFromState
 (Trk::PatternTrackParameters& T ,
  const Trk::LocalParameters & P ,
  const Amg::MatrixX         & E ,
@@ -396,7 +396,7 @@ bool                        Trk::KalmanUpdator_xk::removeFromState
 // Combine two state without Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates   
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::combineStates
 (const Trk::TrackParameters& T1, const Trk::TrackParameters& T2) const
 {
   double M[5];
@@ -416,7 +416,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::combineStates 
+bool                        Trk::KalmanUpdator_xk::combineStates
 (Trk::PatternTrackParameters& T1,
  Trk::PatternTrackParameters& T2,
  Trk::PatternTrackParameters& T3) const
@@ -449,7 +449,7 @@ bool                        Trk::KalmanUpdator_xk::combineStates
 // Combine two state with Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates   
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::combineStates
 (const TrackParameters& T1, const TrackParameters& T2,
  FitQualityOnSurface*& Q) const
 {
@@ -471,7 +471,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates
 
 ///////////////////////////////////////////////////////////////////
 
-bool                        Trk::KalmanUpdator_xk::combineStates 
+bool                        Trk::KalmanUpdator_xk::combineStates
 (Trk::PatternTrackParameters& T1,
  Trk::PatternTrackParameters& T2,
  Trk::PatternTrackParameters& T3,
@@ -504,9 +504,9 @@ bool                        Trk::KalmanUpdator_xk::combineStates
 ///////////////////////////////////////////////////////////////////
 // Xi2 of Local position
 ///////////////////////////////////////////////////////////////////
-      
-const Trk::FitQualityOnSurface* 
-Trk::KalmanUpdator_xk::predictedStateFitQuality 
+
+const Trk::FitQualityOnSurface*
+Trk::KalmanUpdator_xk::predictedStateFitQuality
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E) const
@@ -517,14 +517,14 @@ Trk::KalmanUpdator_xk::predictedStateFitQuality
   double t[5] = {T.parameters()[0],T.parameters()[1],
 		 (*v)(0,0),(*v)(1,0),(*v)(1,1)};
 
-  int N; double x2; 
+  int N; double x2;
   if(predictedStateFitQuality(t,P,E,N,x2)) return new Trk::FitQualityOnSurface(x2,N);
   return nullptr;
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::predictedStateFitQuality 
+bool Trk::KalmanUpdator_xk::predictedStateFitQuality
 (const Trk::PatternTrackParameters& T,
  const Amg::Vector2D              & P,
  const Amg::MatrixX               & E,
@@ -539,14 +539,14 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
   double t[5] = {p[0],p[1],
 		 cov(0, 0),cov(0, 1),cov(1, 1)};
 
-  return predictedStateFitQuality(t,P,E,N,X2); 
+  return predictedStateFitQuality(t,P,E,N,X2);
 }
 
 ///////////////////////////////////////////////////////////////////
 // Xi2 of Local parameters
 ///////////////////////////////////////////////////////////////////
 
-const Trk::FitQualityOnSurface* 
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator_xk::predictedStateFitQuality
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
@@ -620,8 +620,8 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
 ///////////////////////////////////////////////////////////////////
 // Xi2 of Local position
 ///////////////////////////////////////////////////////////////////
-      
-const Trk::FitQualityOnSurface* 
+
+const Trk::FitQualityOnSurface*
 Trk::KalmanUpdator_xk::fullStateFitQuality
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
@@ -639,7 +639,7 @@ Trk::KalmanUpdator_xk::fullStateFitQuality
 
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::fullStateFitQuality 
+bool Trk::KalmanUpdator_xk::fullStateFitQuality
 (const Trk::PatternTrackParameters& T,
  const Amg::Vector2D              & P,
  const Amg::MatrixX               & E,
@@ -654,7 +654,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality
   double t[5] = {p[0],p[1],
 		 cov(0, 0),cov(0, 1),cov(1, 1)};
 
-  return fullStateFitQuality(t,P,E,N,X2); 
+  return fullStateFitQuality(t,P,E,N,X2);
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -676,7 +676,7 @@ const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::fullStateFitQuality
   int k;
   double m[5];
   double mv[15]; if(!localParametersToUpdator(P,E,n,k,m,mv)) return nullptr;
-  
+
   // Xi2 calculation
   //
   double r[5];
@@ -684,7 +684,7 @@ const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::fullStateFitQuality
   int ib = m_key[k];
   int ie=m_key[k+1];
   for(int i=ib; i!=ie; ++i) {w[i-ib] = mv[i-ib]-pv[m_map[i]];}
-  
+
   bool q=true; if(n!=1) q=invert(n,w,w); else w[0]=1./w[0];
 
   if(q) {
@@ -820,7 +820,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
 
 ///////////////////////////////////////////////////////////////////
 // let the client tools know how the assumptions on the initial
-// precision for non-measured track parameters are configured 
+// precision for non-measured track parameters are configured
 ///////////////////////////////////////////////////////////////////
 
 std::vector<double> Trk::KalmanUpdator_xk::initialErrors() const
@@ -840,11 +840,11 @@ std::vector<double> Trk::KalmanUpdator_xk::initialErrors() const
 ///////////////////////////////////////////////////////////////////
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove local position together with error matrix  
+// Add or remove local position together with error matrix
 // with or witout Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::update 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::update
 (const Trk::TrackParameters& T,
  const Amg::Vector2D       & P,
  const Amg::MatrixX        & E,
@@ -855,7 +855,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update
   // Measurement information preparation
   //
   double m[2];
-  double mv[3];  
+  double mv[3];
   int  n = E.rows(); if(n<=0) return nullptr;
   m [0]  = P[0];
   mv[0]  = E(0,0);
@@ -875,38 +875,38 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update
     double x2;
     if     (n==2) {
       update = updateWithTwoDim(O,X,m,mv,p,pv,x2);
-      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); 
+      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2);
     }
     else if(n==1) {
       update = updateWithOneDim(O,X,m,mv,p,pv,x2);
-      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); 
+      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1);
     }
     if(update) {
       testAngles(p,pv); return updatorToTrackParameters(T,p,pv);
-    } 
+    }
     return nullptr;
   }
 
   // For no measured track parameters
   //
   if(O<0) return nullptr;
-  
+
   if     (n==1) {
     update = updateNoMeasuredWithOneDim(m,mv,p,pv);
-    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,1); 
+    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,1);
   }
   else if(n==2) {
     update = updateNoMeasuredWithTwoDim(m,mv,p,pv);
-    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,2); 
+    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,2);
   }
- 
-  if(update) return updatorToTrackParameters(T,p,pv); 
+
+  if(update) return updatorToTrackParameters(T,p,pv);
   return nullptr;
 }
 
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::update 
+bool Trk::KalmanUpdator_xk::update
 (Trk::PatternTrackParameters& T ,
  const Amg::Vector2D        & P ,
  const Amg::MatrixX         & E ,
@@ -919,7 +919,7 @@ bool Trk::KalmanUpdator_xk::update
   // Measurement information preparation
   //
   double m[2];
-  double mv[3];  
+  double mv[3];
   N      = E.rows(); if(N<=0) return false;
   m [0]  = P[0];
   mv[0]  = E(0,0);
@@ -960,7 +960,7 @@ bool Trk::KalmanUpdator_xk::update
 
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::updateOneDimension 
+bool Trk::KalmanUpdator_xk::updateOneDimension
 (Trk::PatternTrackParameters& T ,
  const Amg::Vector2D        & P ,
  const Amg::MatrixX         & E ,
@@ -972,7 +972,7 @@ bool Trk::KalmanUpdator_xk::updateOneDimension
   // Measurement information preparation
   //
   double m[2];
-  double mv[3];  
+  double mv[3];
   int N  = E.rows(); if(N!=2 ) return false;
   m [0]  = P[0];
   m [1]  = P[1];
@@ -1012,11 +1012,11 @@ bool Trk::KalmanUpdator_xk::updateOneDimension
 
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove local parameters together with error matrix  
+// Add or remove local parameters together with error matrix
 // with or witout Xi2 calculation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::update 
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::update
 (const Trk::TrackParameters& T,
  const Trk::LocalParameters& P,
  const Amg::MatrixX        & E,
@@ -1042,15 +1042,15 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update
     double x2;
     if     (n==2 && k==3) {
       update = updateWithTwoDim(O,X,m,mv,p,pv,x2);
-      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); 
+      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2);
     }
     else if(n==1 && k==1) {
       update = updateWithOneDim(O,X,m,mv,p,pv,x2);
-      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); 
+      if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1);
     }
     else                  {
       update = updateWithAnyDim(O,X,m,mv,p,pv,x2,n,k);
-      if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(x2,n); 
+      if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(x2,n);
     }
     if(update) {testAngles(p,pv); return updatorToTrackParameters(T,p,pv);}
     return nullptr;
@@ -1061,15 +1061,15 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update
   if(O<0) return nullptr;
   if     (n==1 && k==1) {
     update = updateNoMeasuredWithOneDim(m,mv,p,pv);
-    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,1); 
+    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,1);
   }
   else if(n==2 && k==3) {
     update = updateNoMeasuredWithTwoDim(m,mv,p,pv);
-    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,2); 
+    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,2);
   }
   else                 {
     update = updateNoMeasuredWithAnyDim(m,mv,p,pv,k);
-    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,n); 
+    if(update && X && !Q)  Q = new Trk::FitQualityOnSurface(0.,n);
   }
   if(update) return updatorToTrackParameters(T,p,pv);
   return nullptr;
@@ -1077,7 +1077,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update
 
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::update 
+bool Trk::KalmanUpdator_xk::update
 (Trk::PatternTrackParameters& T ,
  const Trk::LocalParameters & P ,
  const Amg::MatrixX         & E ,
@@ -1092,7 +1092,7 @@ bool Trk::KalmanUpdator_xk::update
   int k;
   double m[5];
   double mv[15]; if(!localParametersToUpdator(P,E,N,k,m,mv)) return false;
- 
+
   // Conversion track parameters to updator presentation
   //
   double p[5];
@@ -1125,8 +1125,8 @@ bool Trk::KalmanUpdator_xk::update
 ///////////////////////////////////////////////////////////////////
 // Xi2 of Local position
 ///////////////////////////////////////////////////////////////////
-      
-bool Trk::KalmanUpdator_xk::predictedStateFitQuality 
+
+bool Trk::KalmanUpdator_xk::predictedStateFitQuality
 (const double*             T,
  const Amg::Vector2D     & P,
  const Amg::MatrixX      & E,
@@ -1136,12 +1136,12 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
   // Measurement information preparation
   //
   double m[2];
-  double mv[3]; X2 = 0.;  
+  double mv[3]; X2 = 0.;
   N      = E.rows(); if(N<=0) return false;
   m [0]  = P[0]-T[0];
-  mv[0]  = E(0,0)+T[2];  
+  mv[0]  = E(0,0)+T[2];
   if(N==1) {
-    
+
     if(mv[0]>0.) X2 = m[0]*m[0]/mv[0];
     return true;
   }
@@ -1149,7 +1149,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
     m [1]     = P[1]-T[1];
     mv[1]     = E(1,0)+T[3];
     mv[2]     = E(1,1)+T[4];
-    double d  = mv[0]*mv[2]-mv[1]*mv[1]; 
+    double d  = mv[0]*mv[2]-mv[1]*mv[1];
     if(d>0.) X2 = (m[0]*m[0]*mv[2]+m[1]*m[1]*mv[0]-2.*m[0]*m[1]*mv[1])/d;
     return true;
   }
@@ -1159,7 +1159,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality
 ///////////////////////////////////////////////////////////////////
 // Xi2 of Local position
 ///////////////////////////////////////////////////////////////////
-      
+
 bool Trk::KalmanUpdator_xk::fullStateFitQuality
 (const double*               T,
  const Amg::Vector2D       & P,
@@ -1170,12 +1170,12 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality
   // Measurement information preparation
   //
   double m[2];
-  double mv[3]; X2 = 0.; 
+  double mv[3]; X2 = 0.;
   N      = E.rows(); if(N<=0) return false;
   m [0]  = P[0]-T[0];
-  mv[0]  = E(0,0)-T[2];  
+  mv[0]  = E(0,0)-T[2];
   if(N==1) {
-    
+
     if(mv[0]>0.) X2 = m[0]*m[0]/mv[0];
     return true;
   }
@@ -1183,7 +1183,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality
     m [1]     = P[1]-T[1];
     mv[1]     = E(1,0)-T[3];
     mv[2]     = E(1,1)-T[4];
-    double d  = mv[0]*mv[2]-mv[1]*mv[1]; 
+    double d  = mv[0]*mv[2]-mv[1]*mv[1];
     if(d>0.) X2 = (m[0]*m[0]*mv[2]+m[1]*m[1]*mv[0]-2.*m[0]*m[1]*mv[1])/d;
     return true;
   }
@@ -1191,7 +1191,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add one dimension information to no measured track parameters 
+// Add one dimension information to no measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1219,7 +1219,7 @@ bool  Trk::KalmanUpdator_xk::updateNoMeasuredWithOneDim
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add two dimension information to no measured track parameters 
+// Add two dimension information to no measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1248,8 +1248,8 @@ bool Trk::KalmanUpdator_xk::updateNoMeasuredWithTwoDim
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add any dimension information (>=1 and <=5)  to no measured 
-// track parameters 
+// Add any dimension information (>=1 and <=5)  to no measured
+// track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 // K is key word
@@ -1260,7 +1260,7 @@ bool  Trk::KalmanUpdator_xk::updateNoMeasuredWithAnyDim
 {
 
   int i=0;
-  int j=0; 
+  int j=0;
   while(K) {if(K&1) P[i]=M[j++]; K>>=1; ++i;} if(i==0) return false;
 
   PV[ 0] = m_cov0[0];
@@ -1285,7 +1285,7 @@ bool  Trk::KalmanUpdator_xk::updateNoMeasuredWithAnyDim
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove one dimension information to measured track parameters 
+// Add or remove one dimension information to measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1310,7 +1310,7 @@ bool  Trk::KalmanUpdator_xk::updateWithOneDim
   double k4 = PV[10]*w0;
 
   if(O<0) {k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;}
-  
+
   // New parameters
   //
   P[0]+=(k0*r0);
@@ -1321,28 +1321,28 @@ bool  Trk::KalmanUpdator_xk::updateWithOneDim
 
   // New covariance matrix
   //
-  if((PV[14]-= (k4*PV[10]))<=0.) return false; 
+  if((PV[14]-= (k4*PV[10]))<=0.) return false;
       PV[13]-= (k4*PV[ 6]);
       PV[12]-= (k4*PV[ 3]);
       PV[11]-= (k4*PV[ 1]);
       PV[10]-= (k4*PV[ 0]);
-  if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; 
-      PV[ 8]-= (k3*PV[ 3]); 
-      PV[ 7]-= (k3*PV[ 1]); 
-      PV[ 6]-= (k3*PV[ 0]); 
-  if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; 
+  if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false;
+      PV[ 8]-= (k3*PV[ 3]);
+      PV[ 7]-= (k3*PV[ 1]);
+      PV[ 6]-= (k3*PV[ 0]);
+  if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false;
       PV[ 4]-= (k2*PV[ 1]);
       PV[ 3]-= (k2*PV[ 0]);
-  if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; 
+  if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false;
       PV[ 1]-= (k1*PV[ 0]);
-  if((PV[ 0]-= (k0*PV[ 0]))<=0.) return false; 
-  
+  if((PV[ 0]-= (k0*PV[ 0]))<=0.) return false;
+
   if(X) xi2 = r0*r0*w0;
   return true;
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove one dimension information to measured track parameters 
+// Add or remove one dimension information to measured track parameters
 // and check boundary for second parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
@@ -1368,13 +1368,13 @@ bool  Trk::KalmanUpdator_xk::updateWithOneDimWithBoundary
   double k4 = PV[10]*w0;
 
   if(O<0) {k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;}
-  
+
   // Boundary check
   //
   double P1 = P[1]+k1*r0          ;
   double dP = P1-M[1]             ;
-  double W  = sqrt(MV[2])*1.732051; 
-  
+  double W  = sqrt(MV[2])*1.732051;
+
   if(fabs(dP) <= W) {
 
     P[0]+=(k0*r0);
@@ -1392,25 +1392,25 @@ bool  Trk::KalmanUpdator_xk::updateWithOneDimWithBoundary
 
   // New covariance matrix
   //
-  if((PV[14]-= (k4*PV[10]))<=0.) return false; 
+  if((PV[14]-= (k4*PV[10]))<=0.) return false;
       PV[13]-= (k4*PV[ 6]);
       PV[12]-= (k4*PV[ 3]);
       PV[11]-= (k4*PV[ 1]);
       PV[10]-= (k4*PV[ 0]);
-  if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; 
-      PV[ 8]-= (k3*PV[ 3]); 
-      PV[ 7]-= (k3*PV[ 1]); 
-      PV[ 6]-= (k3*PV[ 0]); 
-  if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; 
+  if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false;
+      PV[ 8]-= (k3*PV[ 3]);
+      PV[ 7]-= (k3*PV[ 1]);
+      PV[ 6]-= (k3*PV[ 0]);
+  if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false;
       PV[ 4]-= (k2*PV[ 1]);
       PV[ 3]-= (k2*PV[ 0]);
-  if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; 
+  if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false;
       PV[ 1]-= (k1*PV[ 0]);
   return (PV[ 0]-= (k0*PV[ 0])) > 0.;
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove two dimension information to measured track parameters 
+// Add or remove two dimension information to measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1434,7 +1434,7 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDim
   // K matrix with (5x2) size
   //
   double k0 = PV[ 0]*w0+PV[ 1]*w1;
-  double k1 = PV[ 0]*w1+PV[ 1]*w2; 
+  double k1 = PV[ 0]*w1+PV[ 1]*w2;
   double k2 = PV[ 1]*w0+PV[ 2]*w1;
   double k3 = PV[ 1]*w1+PV[ 2]*w2;
   double k4 = PV[ 3]*w0+PV[ 4]*w1;
@@ -1445,10 +1445,10 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDim
   double k9 = PV[10]*w1+PV[11]*w2;
 
   if(O<0) {
-    k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; 
+    k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;
     k5=-k5; k6=-k6; k7=-k7; k8=-k8; k9=-k9;
   }
-  
+
   // New parameters
   //
   P[0]+=(k0*r0+k1*r1);
@@ -1465,9 +1465,9 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDim
       PV[11]-= (k8*PV[ 1]+k9*PV[ 2]);
       PV[10]-= (k8*PV[ 0]+k9*PV[ 1]);
   if((PV[ 9]-= (k6*PV[ 6]+k7*PV[ 7]))<=0.) return false;
-      PV[ 8]-= (k6*PV[ 3]+k7*PV[ 4]); 
-      PV[ 7]-= (k6*PV[ 1]+k7*PV[ 2]); 
-      PV[ 6]-= (k6*PV[ 0]+k7*PV[ 1]); 
+      PV[ 8]-= (k6*PV[ 3]+k7*PV[ 4]);
+      PV[ 7]-= (k6*PV[ 1]+k7*PV[ 2]);
+      PV[ 6]-= (k6*PV[ 0]+k7*PV[ 1]);
   if((PV[ 5]-= (k4*PV[ 3]+k5*PV[ 4]))<=0.) return false;
       PV[ 4]-= (k4*PV[ 1]+k5*PV[ 2]);
       PV[ 3]-= (k4*PV[ 0]+k5*PV[ 1]);
@@ -1475,13 +1475,13 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDim
   double c1 = (1.-k3)*PV[ 1]-k2*PV[ 0];
   if((PV[ 0]-= (k0*PV[ 0]+k1*PV[ 1]))<=0.) return false;
       PV[ 1] = c1;
-  
+
   if(X) xi2 = (r0*r0*w0+r1*r1*w2+2.*r0*r1*w1);
   return true;
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove two dimension information to measured track parameters 
+// Add or remove two dimension information to measured track parameters
 // without calculation new covariance matrix
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
@@ -1506,7 +1506,7 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDimParameters
   // K matrix with (5x2) size
   //
   double k0 = PV[ 0]*w0+PV[ 1]*w1;
-  double k1 = PV[ 0]*w1+PV[ 1]*w2; 
+  double k1 = PV[ 0]*w1+PV[ 1]*w2;
   double k2 = PV[ 1]*w0+PV[ 2]*w1;
   double k3 = PV[ 1]*w1+PV[ 2]*w2;
   double k4 = PV[ 3]*w0+PV[ 4]*w1;
@@ -1517,10 +1517,10 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDimParameters
   double k9 = PV[10]*w1+PV[11]*w2;
 
   if(O<0) {
-    k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; 
+    k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;
     k5=-k5; k6=-k6; k7=-k7; k8=-k8; k9=-k9;
   }
-  
+
   // New parameters
   //
   P[0]+=(k0*r0+k1*r1);
@@ -1533,7 +1533,7 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDimParameters
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove two dimension information to measured track parameters 
+// Add or remove two dimension information to measured track parameters
 // as one dimension and check boundary for second parameter
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
@@ -1557,35 +1557,35 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDimWithBoundary
   double c   = sqrt(c2)               ;
   double s   = sc/c                   ;
 
-  // New measurement 
+  // New measurement
   //
   double M0 = c*M[0]+s*M[1];
   M [ 1]    = c*M[1]-s*M[0];
   M [ 0]    = M0           ;
   MV[ 0]    = V0           ;
   MV[ 1]    = 0.           ;
-  MV[ 2]    = V1           ; 
-  
+  MV[ 2]    = V1           ;
+
   // Rotate track parameters and covariance matrix
   //
   double P0  = P[0]                     ;
   P [ 0]     = c*P0  +s*P[1]            ;
   P [ 1]     = c*P[1]-s*P0              ;
-  double B   = 2.*sc*PV[ 1]             ;    
+  double B   = 2.*sc*PV[ 1]             ;
   double PV0 = PV[ 0]                   ;
   double PV3 = PV[ 3]                   ;
   double PV6 = PV[ 6]                   ;
   double PV10= PV[10]                   ;
   PV[ 0]     = c2*PV0+s2*PV[ 2]+B       ;
-  PV[ 1]     = sc*(PV[ 2]-PV0)+PV[ 1]*al; 
+  PV[ 1]     = sc*(PV[ 2]-PV0)+PV[ 1]*al;
   PV[ 2]     = s2*PV0+c2*PV[ 2]-B       ;
   PV[ 3]     = c*PV3   +s*PV[ 4]        ;
   PV[ 4]     = c*PV[ 4]-s*PV3           ;
   PV[ 6]     = c*PV6   +s*PV[ 7]        ;
   PV[ 7]     = c*PV[ 7]-s*PV6           ;
   PV[10]     = c*PV10  +s*PV[11]        ;
-  PV[11]     = c*PV[11]-s*PV10          ;  
-  
+  PV[11]     = c*PV[11]-s*PV10          ;
+
   if(!updateWithOneDimWithBoundary(O,X,M,MV,P,PV,xi2)) return false;
 
   // Back rotation new track parameters and covariance matrix
@@ -1595,25 +1595,25 @@ bool  Trk::KalmanUpdator_xk::updateWithTwoDimWithBoundary
   P0         = P[0]                     ;
   P [ 0]     = c*P0  +s*P[1]            ;
   P [ 1]     = c*P[1]-s*P0              ;
-  B          = 2.*sc*PV[ 1]             ;    
+  B          = 2.*sc*PV[ 1]             ;
   PV0        = PV[ 0]                   ;
   PV3        = PV[ 3]                   ;
   PV6        = PV[ 6]                   ;
   PV10       = PV[10]                   ;
   PV[ 0]     = c2*PV0+s2*PV[ 2]+B       ;
-  PV[ 1]     = sc*(PV[ 2]-PV0)+PV[ 1]*al; 
+  PV[ 1]     = sc*(PV[ 2]-PV0)+PV[ 1]*al;
   PV[ 2]     = s2*PV0+c2*PV[ 2]-B       ;
   PV[ 3]     = c*PV3   +s*PV[ 4]        ;
   PV[ 4]     = c*PV[ 4]-s*PV3           ;
   PV[ 6]     = c*PV6   +s*PV[ 7]        ;
   PV[ 7]     = c*PV[ 7]-s*PV6           ;
   PV[10]     = c*PV10  +s*PV[11]        ;
-  PV[11]     = c*PV[11]-s*PV10          ;  
+  PV[11]     = c*PV[11]-s*PV10          ;
   return true;
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add  five dimension information to measured track parameters 
+// Add  five dimension information to measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1624,12 +1624,12 @@ bool  Trk::KalmanUpdator_xk::updateWithFiveDim
   const double pi2 = 2.*M_PI;
   const double pi = M_PI;
 
-  double w[15]={MV[ 0]+PV[ 0],MV[ 1]+PV[ 1],MV[ 2]+PV[ 2], 
-		MV[ 3]+PV[ 3],MV[ 4]+PV[ 4],MV[ 5]+PV[ 5], 
- 		MV[ 6]+PV[ 6],MV[ 7]+PV[ 7],MV[ 8]+PV[ 8], 
- 		MV[ 9]+PV[ 9],MV[10]+PV[10],MV[11]+PV[11], 
+  double w[15]={MV[ 0]+PV[ 0],MV[ 1]+PV[ 1],MV[ 2]+PV[ 2],
+		MV[ 3]+PV[ 3],MV[ 4]+PV[ 4],MV[ 5]+PV[ 5],
+ 		MV[ 6]+PV[ 6],MV[ 7]+PV[ 7],MV[ 8]+PV[ 8],
+ 		MV[ 9]+PV[ 9],MV[10]+PV[10],MV[11]+PV[11],
   		MV[12]+PV[12],MV[13]+PV[13],MV[14]+PV[14]};
-  
+
   if(!invert5(w,w)) return false;
 
   double k00 =(PV[ 0]*w[ 0]+PV[ 1]*w[ 1]+PV[ 3]*w[ 3])+(PV[ 6]*w[ 6]+PV[10]*w[10]);
@@ -1698,17 +1698,17 @@ bool  Trk::KalmanUpdator_xk::updateWithFiveDim
   if((PV[ 0]-=v0 )<=0.) return false;
       PV[ 1]-=v1 ;
   if((PV[ 2]-=v2 )<=0.) return false;
-      PV[ 3]-=v3 ; 
-      PV[ 4]-=v4 ; 
+      PV[ 3]-=v3 ;
+      PV[ 4]-=v4 ;
   if((PV[ 5]-=v5 )<=0.) return false;
-      PV[ 6]-=v6 ; 
-      PV[ 7]-=v7 ; 
-      PV[ 8]-=v8 ; 
+      PV[ 6]-=v6 ;
+      PV[ 7]-=v7 ;
+      PV[ 8]-=v8 ;
   if((PV[ 9]-=v9 )<=0.) return false;
-      PV[10]-=v10; 
-      PV[11]-=v11; 
-      PV[12]-=v12; 
-      PV[13]-=v13; 
+      PV[10]-=v10;
+      PV[11]-=v11;
+      PV[12]-=v12;
+      PV[13]-=v13;
   if((PV[14]-=v14)<=0.) return false;
 
   if(X) xi2 = Xi2(5,r,w);
@@ -1716,7 +1716,7 @@ bool  Trk::KalmanUpdator_xk::updateWithFiveDim
 }
 
 ///////////////////////////////////////////////////////////////////
-// Add or remove any dimension information to measured track parameters 
+// Add or remove any dimension information to measured track parameters
 // M and MV is measuremet           together with covariance
 // P and PV is new track parameters together with covarianace
 ///////////////////////////////////////////////////////////////////
@@ -1732,9 +1732,9 @@ bool Trk::KalmanUpdator_xk::updateWithAnyDim
 
   if(O>0) {s= 1.; for(int i=ib; i!=ie; ++i) {w[i-ib] = MV[i-ib]+PV[m_map[i]];}}
   else    {s=-1.; for(int i=ib; i!=ie; ++i) {w[i-ib] = MV[i-ib]-PV[m_map[i]];}}
-  
+
   if(N==1) w[0] = 1./w[0]; else if(!invert(N,w,w)) return false;
-  double v[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 
+  double v[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
   for(int i=ib; i!=ie; ++i) {v[m_map[i]] =w[i-ib];}
 
   double k00 =((PV[ 0]*v[ 0]+PV[ 1]*v[ 1]+PV[ 3]*v[ 3])+(PV[ 6]*v[ 6]+PV[10]*v[10]))*s;
@@ -1799,13 +1799,13 @@ bool Trk::KalmanUpdator_xk::updateWithAnyDim
   PV[10]-=v10; PV[11]-=v11; PV[12]-=v12; PV[13]-=v13; PV[14]-=v14;
 
   if(PV[0]<=0.||PV[2]<=0.||PV[5]<=0.||PV[9]<=0.||PV[14]<=0.) return false;
- 
+
   if(X) xi2 = Xi2(5,r,v);
   return true;
 }
 
 ///////////////////////////////////////////////////////////////////
-// Transformation track parameters to updator presentation 
+// Transformation track parameters to updator presentation
 // true if it is measured track parameters
 ///////////////////////////////////////////////////////////////////
 
@@ -1823,15 +1823,15 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator
   if(!v) return false;
 
   const AmgSymMatrix(5)& c = *v;
-  V[ 0] = c(0,0); 
+  V[ 0] = c(0,0);
   V[ 1] = c(1,0);
   V[ 2] = c(1,1);
   V[ 3] = c(2,0);
-  V[ 4] = c(2,1); 
+  V[ 4] = c(2,1);
   V[ 5] = c(2,2);
-  V[ 6] = c(3,0); 
+  V[ 6] = c(3,0);
   V[ 7] = c(3,1);
-  V[ 8] = c(3,2); 
+  V[ 8] = c(3,2);
   V[ 9] = c(3,3);
   V[10] = c(4,0);
   V[11] = c(4,1);
@@ -1842,7 +1842,7 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator
 }
 
 ///////////////////////////////////////////////////////////////////
-// Transformation track parameters to updator presentation 
+// Transformation track parameters to updator presentation
 // true if it is measured track parameters
 ///////////////////////////////////////////////////////////////////
 
@@ -1857,7 +1857,7 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator
   P[3] = par[3];
   P[4] = par[4];
 
-  if(!T.iscovariance()) return false; 
+  if(!T.iscovariance()) return false;
 
   const AmgSymMatrix(5) & cov = *T.covariance();
 
@@ -1881,8 +1881,8 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator
 
 ///////////////////////////////////////////////////////////////////
 // Transformation local parameters to updator presentation
-// N - dimension of local parameters,K - key  word 
-// P - parameters, V -covariance 
+// N - dimension of local parameters,K - key  word
+// P - parameters, V -covariance
 ///////////////////////////////////////////////////////////////////
 
 bool  Trk::KalmanUpdator_xk::localParametersToUpdator
@@ -1895,7 +1895,7 @@ bool  Trk::KalmanUpdator_xk::localParametersToUpdator
 
   //const CLHEP::HepVector& H = L;
 
-  P[ 0]=L(0); 
+  P[ 0]=L(0);
   V[ 0]=C(0,0);
 
   if(N>1) {
@@ -1921,9 +1921,9 @@ bool  Trk::KalmanUpdator_xk::localParametersToUpdator
 // Track parameters production from updator presentation
 ///////////////////////////////////////////////////////////////////
 
-Trk::TrackParameters* Trk::KalmanUpdator_xk::updatorToTrackParameters
+std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::updatorToTrackParameters
 (const Trk::TrackParameters& T,double* P,double* V) const
-{  
+{
   AmgSymMatrix(5)* e = new AmgSymMatrix(5);
 
   (*e)<<
@@ -1932,19 +1932,19 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::updatorToTrackParameters
     V[ 3],V[ 4],V[ 5],V[ 8],V[12],
     V[ 6],V[ 7],V[ 8],V[ 9],V[13],
     V[10],V[11],V[12],V[13],V[14];
-  return T.associatedSurface().createTrackParameters(P[0],P[1],P[2],P[3],P[4],e); 
+  return T.associatedSurface().createUniqueTrackParameters(P[0],P[1],P[2],P[3],P[4],e);
 }
 
 ///////////////////////////////////////////////////////////////////
-// Inversion of a positive definite symmetric matrix 
-// with size (2x2), (3x3), (4x4) and (5x5)                 
+// Inversion of a positive definite symmetric matrix
+// with size (2x2), (3x3), (4x4) and (5x5)
 // Input parameters  : n - size of matrix
-//                     a - the elements of the lower triangle of     
-//                               the matrix to be inverted                 
-// Output parameters : b -  inverted matrix                           
+//                     a - the elements of the lower triangle of
+//                               the matrix to be inverted
+// Output parameters : b -  inverted matrix
 ///////////////////////////////////////////////////////////////////
 
-bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const 
+bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const
 {
   if(n==2) return invert2(a,b);
   if(n==3) return invert3(a,b);
@@ -1954,19 +1954,19 @@ bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const
 }
 
 ///////////////////////////////////////////////////////////////////
-// Inversion of a positive definite symmetric matrix (2x2)                 
-// using Kramer's rule                                                                            
-// Input parameters  : a(0/2) -  the elements of the lower triangle of     
-//                               the matrix to be inverted                 
-//                               0                                         
-//                               1   2                                     
-// Output parameters : b(0/2) -  inverted matrix                           
+// Inversion of a positive definite symmetric matrix (2x2)
+// using Kramer's rule
+// Input parameters  : a(0/2) -  the elements of the lower triangle of
+//                               the matrix to be inverted
+//                               0
+//                               1   2
+// Output parameters : b(0/2) -  inverted matrix
 ///////////////////////////////////////////////////////////////////
 
-bool  Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const 
+bool  Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const
 {
   double d  = a[0]*a[2]-a[1]*a[1]; if(d<=0.) return false; d=1./d;
-  double b0 = a[2]*d; 
+  double b0 = a[2]*d;
   b[1]      =-a[1]*d;
   b[2]      = a[0]*d;
   b[0]      =     b0;
@@ -1974,17 +1974,17 @@ bool  Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const
 }
 
 ///////////////////////////////////////////////////////////////////
-// Inversion of a positive definite symmetric matrix (3x3)                 
-// using Kramer's rule                                                                            
-// Input parameters  : a(0/5) -  the elements of the lower triangle of     
-//                               the matrix to be inverted                 
-//                               0                                         
-//                               1   2                                     
-//                               3   4  5                                  
-// Output parameters : b(0/5) -  inverted matrix                           
+// Inversion of a positive definite symmetric matrix (3x3)
+// using Kramer's rule
+// Input parameters  : a(0/5) -  the elements of the lower triangle of
+//                               the matrix to be inverted
+//                               0
+//                               1   2
+//                               3   4  5
+// Output parameters : b(0/5) -  inverted matrix
 ///////////////////////////////////////////////////////////////////
 
-bool  Trk::KalmanUpdator_xk::invert3(double* a,double* b) const 
+bool  Trk::KalmanUpdator_xk::invert3(double* a,double* b) const
 {
   double b0 = (a[2]*a[5]-a[4]*a[4]);
   double b1 =-(a[1]*a[5]-a[3]*a[4]);
@@ -1992,7 +1992,7 @@ bool  Trk::KalmanUpdator_xk::invert3(double* a,double* b) const
   double b3 = (a[1]*a[4]-a[2]*a[3]);
   double b4 =-(a[0]*a[4]-a[1]*a[3]);
   double b5 = (a[0]*a[2]-a[1]*a[1]);
-  double  d = a[0]*b0+a[1]*b1+a[3]*b3; if(d<=0.) return false; 
+  double  d = a[0]*b0+a[1]*b1+a[3]*b3; if(d<=0.) return false;
   b[0]    = b0*(d=1./d);
   b[1]    = b1*d;
   b[2]    = b2*d;
@@ -2003,15 +2003,15 @@ bool  Trk::KalmanUpdator_xk::invert3(double* a,double* b) const
 }
 
 ///////////////////////////////////////////////////////////////////
-// Inversion of a positive definite symmetric matrix (4x4)       
-// using Kramer's rule 
-// Input parameters  : a(0/9) - the elements of the lower triangle of         
-//                               the matrix to be inverted                     
-//                               0                                             
-//                               1   2                                         
-//                               3   4  5                                      
-//                               6   7  8  9                                   
-// Output parameters : b(0/9) - inverted matrix                               
+// Inversion of a positive definite symmetric matrix (4x4)
+// using Kramer's rule
+// Input parameters  : a(0/9) - the elements of the lower triangle of
+//                               the matrix to be inverted
+//                               0
+//                               1   2
+//                               3   4  5
+//                               6   7  8  9
+// Output parameters : b(0/9) - inverted matrix
 ///////////////////////////////////////////////////////////////////
 
 bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const
@@ -2030,25 +2030,25 @@ bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const
   double d11 = a[4]*a[8]-a[5]*a[7];
   double d12 = a[4]*a[9]-a[8]*a[7];
   double d13 = a[5]*a[9]-a[8]*a[8];
-  
+
   // Determinant calculation
   //
-  double c0  = a[2]*d13-a[4]*d12+a[7]*d11; 
+  double c0  = a[2]*d13-a[4]*d12+a[7]*d11;
   double c1  = a[1]*d13-a[4]*d10+a[7]*d09;
   double c2  = a[1]*d12-a[2]*d10+a[7]*d08;
   double c3  = a[1]*d11-a[2]*d09+a[4]*d08;
   double det = a[0]*c0-a[1]*c1+a[3]*c2-a[6]*c3;
-  
+
   if (det <= 0.) return false;
   det = 1./det;
-   
+
   b[2] =  (a[0]*d13-a[3]*d10+a[6]*d09)*det;
   b[4] = -(a[0]*d12-a[1]*d10+a[6]*d08)*det;
   b[5] =  (a[0]*d07-a[1]*d05+a[6]*d03)*det;
   b[7] =  (a[0]*d11-a[1]*d09+a[3]*d08)*det;
   b[8] = -(a[0]*d06-a[1]*d04+a[3]*d03)*det;
   b[9] =  (a[0]*d02-a[1]*d01+a[3]*d00)*det;
-  b[0] =  c0                          *det; 
+  b[0] =  c0                          *det;
   b[1] = -c1                          *det;
   b[3] =  c2                          *det;
   b[6] = -c3                          *det;
@@ -2056,17 +2056,17 @@ bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const
 }
 
 ///////////////////////////////////////////////////////////////////
-// Inversion of a positive definite symmetric matrix (5x5)                     
-// by a modification of the Gauss-Jordan method                                
-//                                                                             
-// Input parameters  : a(0/14) - the elements of the lower triangle of         
-//                               the matrix to be inverted                     
-//                               0                                             
-//                               1   2                                         
-//                               3   4  5                                      
-//                               6   7  8  9                                   
-//                               10 11 12 13 14                                
-// Output parameters : b(0/14) - inverted matrix                               
+// Inversion of a positive definite symmetric matrix (5x5)
+// by a modification of the Gauss-Jordan method
+//
+// Input parameters  : a(0/14) - the elements of the lower triangle of
+//                               the matrix to be inverted
+//                               0
+//                               1   2
+//                               3   4  5
+//                               6   7  8  9
+//                               10 11 12 13 14
+// Output parameters : b(0/14) - inverted matrix
 ///////////////////////////////////////////////////////////////////
 
 bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const
@@ -2104,7 +2104,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const
   b8           = x5+x2*y4;
   b9           = x1+x2*y5;
   x1           = 1./b0;
-  x2           =-b1*x1; 
+  x2           =-b1*x1;
   x3           =-b3*x1;
   x4           = b6*x1;
   x5           = y2*x1;
@@ -2119,7 +2119,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const
   b8           = y5+y2*x4;
   b9           = y1+y2*x5;
   y1           = 1./b0;
-  y2           =-b1*y1; 
+  y2           =-b1*y1;
   y3           = b3*y1;
   y4           = b6*y1;
   y5           = x2*y1;
@@ -2133,7 +2133,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const
   b7           = x4+x2*y3;
   b8           = x5+x2*y4;
   b9           = x1+x2*y5;
-  b[14]        = 1./b0;     
+  b[14]        = 1./b0;
   b[10]        = b1*b[14];
   b[11]        = b3*b[14];
   b[12]        = b6*b[14];
@@ -2152,7 +2152,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const
 }
 
 ///////////////////////////////////////////////////////////////////
-// Xi2 for 2x2, 3x3, 4x4 and 5x5 matrix calculation 
+// Xi2 for 2x2, 3x3, 4x4 and 5x5 matrix calculation
 // R - residial  and W -weight matrix
 ///////////////////////////////////////////////////////////////////
 
@@ -2241,27 +2241,27 @@ double Trk::KalmanUpdator_xk::Xi2for5(double* R,double* W) const
 ///////////////////////////////////////////////////////////////////
 
 int Trk::KalmanUpdator_xk::differenceParLoc
-(int K,double* L,double* T, double* R) const 
+(int K,double* L,double* T, double* R) const
 {
   const double pi2 = 2.*M_PI;
   const double pi = M_PI;
-  
+
   int i = 0;
-  if(K &  1) {R[i]=L[i]-T[0]; ++i;} 
+  if(K &  1) {R[i]=L[i]-T[0]; ++i;}
   if(K &  2) {R[i]=L[i]-T[1]; ++i;}
   if(K &  4) {
-    R[i]=L[i]-T[2]; 
+    R[i]=L[i]-T[2];
     if     (R[i] > pi) R[i] = fmod(R[i]+pi,pi2)-pi;
     else if(R[i] <-pi) R[i] = fmod(R[i]-pi,pi2)+pi;
     ++i;
   }
   if(K &  8) {
-    R[i]=L[i]-T[3]; 
+    R[i]=L[i]-T[3];
     if     (R[i] > pi) R[i] = fmod(R[i]+pi,pi2)-pi;
     else if(R[i] <-pi) R[i] = fmod(R[i]-pi,pi2)+pi;
     ++i;
   }
-  if(K & 16) {R[i]=L[i]-T[4]; ++i;}  
+  if(K & 16) {R[i]=L[i]-T[4]; ++i;}
   return i;
 }
 
@@ -2271,20 +2271,20 @@ int Trk::KalmanUpdator_xk::differenceParLoc
 ///////////////////////////////////////////////////////////////////
 
 void Trk::KalmanUpdator_xk::differenceLocPar
-(int K,double* L,double* T, double* R) const 
+(int K,double* L,double* T, double* R) const
 {
   const double pi2 = 2.*M_PI;
   const double pi = M_PI;
   int i = 0;
   R[0]=0.; if(K &  1) R[0]=L[i++]-T[0];
-  R[1]=0.; if(K &  2) R[1]=L[i++]-T[1]; 
+  R[1]=0.; if(K &  2) R[1]=L[i++]-T[1];
   R[2]=0.; if(K &  4) {
-    R[2]=L[i++]-T[2]; 
+    R[2]=L[i++]-T[2];
     if     (R[2] > pi) R[2] = fmod(R[2]+pi,pi2)-pi;
     else if(R[2] <-pi) R[2] = fmod(R[2]-pi,pi2)+pi;
   }
   R[3]=0.; if(K &  8){
-    R[3]=L[i++]-T[3]; 
+    R[3]=L[i++]-T[3];
     if     (R[3] > pi) R[3] = fmod(R[3]+pi,pi2)-pi;
     else if(R[3] <-pi) R[3] = fmod(R[3]-pi,pi2)+pi;
   }
@@ -2302,7 +2302,7 @@ void Trk::KalmanUpdator_xk::mapKeyProduction()
   for(int K=1; K!= 32; ++K) {
 
     unsigned int I[5]={0,0,0,0,0};
-    unsigned int m=0; 
+    unsigned int m=0;
     for(int i=0; i!=5; ++i) {if((K>>i)&1) I[i]=1;}
 
     for(int i=0; i!=5; ++i) {
@@ -2314,7 +2314,7 @@ void Trk::KalmanUpdator_xk::mapKeyProduction()
 
 /////////////////////////////////////////////////////////////////////////////////
 // Test angles inside boundaries
-// Azimuthal angle p[2] shoud be > -pi and < +pi  
+// Azimuthal angle p[2] shoud be > -pi and < +pi
 // Polar     angle p[3] shoud be >  0  and < +pi
 /////////////////////////////////////////////////////////////////////////////////
 
@@ -2327,14 +2327,14 @@ void Trk::KalmanUpdator_xk::testAngles(double* p,double* v) const
   //
   if     (p[3] > pi) p[3] = fmod(p[3]+pi,pi2)-pi;
   else if(p[3] <-pi) p[3] = fmod(p[3]-pi,pi2)+pi;
-  
+
   if     (p[3] < 0.) {
 
     p[ 3] = -p[ 3];
     p[ 2]+=     pi;
-    v[ 6] = -v[ 6]; 
-    v[ 7] = -v[ 7]; 
-    v[ 8] = -v[ 8]; 
+    v[ 6] = -v[ 6];
+    v[ 7] = -v[ 7];
+    v[ 8] = -v[ 8];
     v[13] = -v[13];
   }
 
diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IUpdator.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IUpdator.h
index 3ded01052df5c6bf71eab90a8d5fa49289166a4a..d4a03e594cbc6226418318d0fb0d3e12545f19fc 100755
--- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IUpdator.h
+++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IUpdator.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -14,152 +14,220 @@
 #ifndef TRK_IUPDATOR_H
 #define TRK_IUPDATOR_H
 
+#include "EventPrimitives/EventPrimitives.h"
 #include "GaudiKernel/IAlgTool.h"
-#include "TrkParameters/TrackParameters.h" // typedef
 #include "TrkEventPrimitives/FitQualityOnSurface.h" // typedef
-#include "EventPrimitives/EventPrimitives.h"
+#include "TrkParameters/TrackParameters.h"          // typedef
+#include <memory>
 #include <vector>
-
 static const InterfaceID IID_IUpdator("Trk::IUpdator", 1, 0);
 
 namespace Trk {
 
-  #ifndef CreateParDef
-  #define CreateParDef
-  #define CREATE_PARAMETERS(ref,x,cov) (ref).associatedSurface().createTrackParameters(x[Trk::loc1],x[Trk::loc2],x[Trk::phi],x[Trk::theta],x[Trk::qOverP],cov)
-  #define CLONEWITHOUTCOV(ref) ref.associatedSurface().createTrackParameters(ref.parameters[Trk::loc1],ref.parameters[Trk::loc2],ref.parameters[Trk::phi],ref.parameters[Trk::theta],ref.parameters[Trk::qOverP],NULL)
-  #endif
-
-
-  class LocalParameters;
-
-  /** @class Trk::IUpdator
-
-      @brief Set of interfaces for methods operating on track states, mainly for Kalman filtering.
-
-      Provides the interface to encapsulate the measurement updating
-      calculations needed in progressive fitters such as the
-      TrkKalmanFitter.
-      The idea is that Updators take care internally of all
-      calculations needed to update or remove a hit from a state,
-      and to estimate the chi2 of a state, while the calling
-      fitter takes care of the iteration strategy itself.
-
-      @author Wolfgang Liebig <http://consult.cern.ch/xwho/people/54608>
-    */		 
-		
-  class IUpdator : virtual public IAlgTool { 
-public:	
-
-    /** Algtool infrastructure */
-    static const InterfaceID& interfaceID( ) ;
-    /** updator for Kalman-Filter based algorithms getting the measurement
-        coordinates from Amg::Vector2D (use for example with PrepRawData) */
-    virtual TrackParameters* addToState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&) const = 0;
-    /** updator for Kalman-Filter based algorithms getting the measurement
-        coordinates from LocalParameters (use for example with
-        MeasurementBase or RIO_OnTrack) */
-    virtual TrackParameters* addToState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&) const = 0;
-    /** the updator interface with FitQualityOnSurface allows to save the chi2 in
-        one step with the updating (the chi2 is automatically known during
-        the updating maths). Version using Amg::Vector2D. */
-    virtual TrackParameters* addToState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&, FitQualityOnSurface*& ) const = 0;
-    /** the updator interface with FitQualityOnSurface allows to save the chi2 in
-        one step with the updating (the chi2 is automatically known during
-        the updating maths). Version using LocalParameters. */
-    virtual TrackParameters* addToState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&, FitQualityOnSurface*& ) const = 0;
-
-    /** the reverse updating or inverse KalmanFilter removes a measurement
-        from the track state, giving a predicted or unbiased state, here 
-        working with Amg::Vector2D from (for example) PrepRawData objects.
-      */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&) const = 0;
-    /** the reverse updating or inverse KalmanFilter removes a measurement
-        from the track state, giving a predicted or unbiased state, here
-        working with LocalParameters from (for example) MeasurementBase
-        or RIO_OnTrack objects.
-      */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&) const = 0;
-    /** the reverse updating or inverse KalmanFilter removes a measurement from
-        the track state, giving a predicted or unbiased state, here working with
-        with Amg::Vector2D and in addition giving back the fit quality
-        of the given state.
-      */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX&, FitQualityOnSurface*&) const = 0;
-    /** the reverse updating or inverse KalmanFilter removes a measurement
-        from the track state, giving a predicted or unbiased state, here
-        working with LocalParameters and in addition giving back the
-        fit quality of the given state.
-      */
-    virtual TrackParameters* removeFromState (const TrackParameters&, const LocalParameters&, const Amg::MatrixX&, FitQualityOnSurface*&) const = 0;
-
-    /** adds to a track state the parameters from another state using a 
-        statistical combination - use with care! In particular it is the
-        caller's responsiblility that both states are expressed on the _same_
-        surface and that the measurement on this surface is contained in not
-        more than one of the two states. Method to be used e.g. for Kalman Smoothing
-        or InDet - Muons track combination.
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, const TrackParameters&) const = 0;
-    /** adds to a track state the parameters from another state using a 
-        statistical combination and determines fit quality - use with care!
-        In particular it is the caller's responsiblility that both states
-        are expressed on the _same_ surface and that the measurement on
-        this surface is contained in not more than one of the two states.
-        Method to be used e.g. for Kalman Smoothing or InDet - Muons track
-        combination.
-    */
-    virtual TrackParameters* combineStates   (const TrackParameters&, const TrackParameters&, FitQualityOnSurface*&) const = 0;
-
-    /** pure AMG interface for reference-track KF, allowing update of parameter differences
-    */
-    virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference (const AmgVector(5)&, const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&, const int&, Trk::FitQualityOnSurface*&, bool ) const = 0;
-
-    /** estimator for FitQuality on Surface from a full track state,
-        that is a state which contains the current hit (expressed as 
-        Amg::Vector2D). Keep in mind that this job can be done inside
-        addToState if you have kept the original prediction, thus
-        saving CPU time.
-    */
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX& ) const = 0;
-    /** estimator for FitQuality on Surface from a full track state,
-        that is a state which contains the current hit (expressed as 
-        LocalParameters). Keep in mind that this job can be done inside
-        addToState if you have kept the original prediction, thus
-        saving CPU time.
+#ifndef CreateParDef
+#define CreateParDef
+#define CREATE_PARAMETERS(ref, x, cov)                                         \
+  (ref).associatedSurface().createUniqueTrackParameters(x[Trk::loc1],          \
+                                                        x[Trk::loc2],          \
+                                                        x[Trk::phi],           \
+                                                        x[Trk::theta],         \
+                                                        x[Trk::qOverP],        \
+                                                        cov)
+#define CLONEWITHOUTCOV(ref)                                                   \
+  ref.associatedSurface().createUniqueTrackParameters(                         \
+    ref.parameters[Trk::loc1],                                                 \
+    ref.parameters[Trk::loc2],                                                 \
+    ref.parameters[Trk::phi],                                                  \
+    ref.parameters[Trk::theta],                                                \
+    ref.parameters[Trk::qOverP],                                               \
+    nullptr)
+#endif
+
+class LocalParameters;
+
+/** @class Trk::IUpdator
+
+    @brief Set of interfaces for methods operating on track states, mainly for
+   Kalman filtering.
+
+    Provides the interface to encapsulate the measurement updating
+    calculations needed in progressive fitters such as the
+    TrkKalmanFitter.
+    The idea is that Updators take care internally of all
+    calculations needed to update or remove a hit from a state,
+    and to estimate the chi2 of a state, while the calling
+    fitter takes care of the iteration strategy itself.
+
+    @author Wolfgang Liebig <http://consult.cern.ch/xwho/people/54608>
+  */
+
+class IUpdator : virtual public IAlgTool
+{
+public:
+  /** Algtool infrastructure */
+  static const InterfaceID& interfaceID();
+  /** updator for Kalman-Filter based algorithms getting the measurement
+      coordinates from Amg::Vector2D (use for example with PrepRawData) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const = 0;
+  /** updator for Kalman-Filter based algorithms getting the measurement
+      coordinates from LocalParameters (use for example with
+      MeasurementBase or RIO_OnTrack) */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const = 0;
+  /** the updator interface with FitQualityOnSurface allows to save the chi2 in
+      one step with the updating (the chi2 is automatically known during
+      the updating maths). Version using Amg::Vector2D. */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const = 0;
+  /** the updator interface with FitQualityOnSurface allows to save the chi2 in
+      one step with the updating (the chi2 is automatically known during
+      the updating maths). Version using LocalParameters. */
+  virtual std::unique_ptr<TrackParameters> addToState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const = 0;
+
+  /** the reverse updating or inverse KalmanFilter removes a measurement
+      from the track state, giving a predicted or unbiased state, here
+      working with Amg::Vector2D from (for example) PrepRawData objects.
     */
-    virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&, const LocalParameters&, const Amg::MatrixX& ) const = 0;
-    /** estimator for FitQuality on Surface from a predicted track state,
-        that is a state which does not contain the current hit (expressed as 
-        Amg::Vector2D). Keep in mind that this job is already done inside
-        addToState if you use the addToState(TP,LP,Err,FQoS) interface,
-        thus saving CPU time.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const = 0;
+  /** the reverse updating or inverse KalmanFilter removes a measurement
+      from the track state, giving a predicted or unbiased state, here
+      working with LocalParameters from (for example) MeasurementBase
+      or RIO_OnTrack objects.
     */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const Amg::Vector2D&, const Amg::MatrixX& ) const = 0;
-    /** estimator for FitQuality on Surface from a predicted track state,
-        that is a state which does not contain the current hit (expressed as 
-        LocalParameters). Keep in mind that this job is already done inside
-        addToState if you use the addToState(TP,LP,Err,FQoS) interface,
-        thus saving CPU time.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const = 0;
+  /** the reverse updating or inverse KalmanFilter removes a measurement from
+      the track state, giving a predicted or unbiased state, here working with
+      with Amg::Vector2D and in addition giving back the fit quality
+      of the given state.
     */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const LocalParameters&, const Amg::MatrixX& ) const = 0;
-    /** estimator for FitQuality on Surface for the situation when a track
-        is fitted to the parameters of another trajectory part extrapolated
-        to the common surface.
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const = 0;
+  /** the reverse updating or inverse KalmanFilter removes a measurement
+      from the track state, giving a predicted or unbiased state, here
+      working with LocalParameters and in addition giving back the
+      fit quality of the given state.
     */
-    virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&, const TrackParameters&) const = 0;
-
-     /** let the client tools know how the assumptions on the initial
-         precision for non-measured track parameters are configured */
-    virtual    std::vector<double>       initialErrors() const = 0;
+  virtual std::unique_ptr<TrackParameters> removeFromState(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&,
+    FitQualityOnSurface*&) const = 0;
+
+  /** adds to a track state the parameters from another state using a
+      statistical combination - use with care! In particular it is the
+      caller's responsiblility that both states are expressed on the _same_
+      surface and that the measurement on this surface is contained in not
+      more than one of the two states. Method to be used e.g. for Kalman
+     Smoothing or InDet - Muons track combination.
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&) const = 0;
+  /** adds to a track state the parameters from another state using a
+      statistical combination and determines fit quality - use with care!
+      In particular it is the caller's responsiblility that both states
+      are expressed on the _same_ surface and that the measurement on
+      this surface is contained in not more than one of the two states.
+      Method to be used e.g. for Kalman Smoothing or InDet - Muons track
+      combination.
+  */
+  virtual std::unique_ptr<TrackParameters> combineStates(
+    const TrackParameters&,
+    const TrackParameters&,
+    FitQualityOnSurface*&) const = 0;
+
+  /** pure AMG interface for reference-track KF, allowing update of parameter
+   * differences
+   */
+  virtual std::pair<AmgVector(5), AmgSymMatrix(5)>* updateParameterDifference(
+    const AmgVector(5) &,
+    const AmgSymMatrix(5) &,
+    const Amg::VectorX&,
+    const Amg::MatrixX&,
+    const int&,
+    Trk::FitQualityOnSurface*&,
+    bool) const = 0;
+
+  /** estimator for FitQuality on Surface from a full track state,
+      that is a state which contains the current hit (expressed as
+      Amg::Vector2D). Keep in mind that this job can be done inside
+      addToState if you have kept the original prediction, thus
+      saving CPU time.
+  */
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const = 0;
+  /** estimator for FitQuality on Surface from a full track state,
+      that is a state which contains the current hit (expressed as
+      LocalParameters). Keep in mind that this job can be done inside
+      addToState if you have kept the original prediction, thus
+      saving CPU time.
+  */
+  virtual const FitQualityOnSurface* fullStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const = 0;
+  /** estimator for FitQuality on Surface from a predicted track state,
+      that is a state which does not contain the current hit (expressed as
+      Amg::Vector2D). Keep in mind that this job is already done inside
+      addToState if you use the addToState(TP,LP,Err,FQoS) interface,
+      thus saving CPU time.
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const Amg::Vector2D&,
+    const Amg::MatrixX&) const = 0;
+  /** estimator for FitQuality on Surface from a predicted track state,
+      that is a state which does not contain the current hit (expressed as
+      LocalParameters). Keep in mind that this job is already done inside
+      addToState if you use the addToState(TP,LP,Err,FQoS) interface,
+      thus saving CPU time.
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const LocalParameters&,
+    const Amg::MatrixX&) const = 0;
+  /** estimator for FitQuality on Surface for the situation when a track
+      is fitted to the parameters of another trajectory part extrapolated
+      to the common surface.
+  */
+  virtual const FitQualityOnSurface* predictedStateFitQuality(
+    const TrackParameters&,
+    const TrackParameters&) const = 0;
+
+  /** let the client tools know how the assumptions on the initial
+      precision for non-measured track parameters are configured */
+  virtual std::vector<double> initialErrors() const = 0;
+};
 
-  };
-		
 } // end of namespace
 
-inline const InterfaceID& Trk::IUpdator::interfaceID()
+inline const InterfaceID&
+Trk::IUpdator::interfaceID()
 {
-        return IID_IUpdator;
+  return IID_IUpdator;
 }
 
 #endif // TRK_IUPDATOR_H
diff --git a/Tracking/TrkValidation/TrkValTools/src/MeasurementVectorNtupleTool.cxx b/Tracking/TrkValidation/TrkValTools/src/MeasurementVectorNtupleTool.cxx
index 3050517da861380eac4973df0b60903c600e7e4a..13230e4add6e53aea013351efb1eb5be5c59af9a 100644
--- a/Tracking/TrkValidation/TrkValTools/src/MeasurementVectorNtupleTool.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/MeasurementVectorNtupleTool.cxx
@@ -91,7 +91,7 @@ Trk::MeasurementVectorNtupleTool::MeasurementVectorNtupleTool(
   declareProperty("HoleSearchTool",               m_holeSearchTool,                       "Tool to search for holes on track");
                     // these are for detector-internal validation, unless an
                     // specific <-> general index hit mapper is there.
-  declareProperty("PixelNtupleHelperTools",       m_PixelNtupleHelperToolHandles,    
+  declareProperty("PixelNtupleHelperTools",       m_PixelNtupleHelperToolHandles,
                   "List of Pixel validation tools");
   declareProperty("SCTNtupleHelperTools",         m_SCTNtupleHelperToolHandles,           "List of SCT validation tools");
   declareProperty("TRTNtupleHelperTools",         m_TRTNtupleHelperToolHandles,           "List of TRT validation tools");
@@ -141,7 +141,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::initialize() {
   if (detStore()->retrieve(m_idHelper, "AtlasID").isFailure()) {
     ATH_MSG_ERROR ("Could not get AtlasDetectorID helper" );
     return StatusCode::FAILURE;
-  } 
+  }
   m_detTypeHelper = new MeasurementTypeID(m_idHelper);
 
   StatusCode sc(StatusCode::SUCCESS, true);
@@ -264,7 +264,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::initialize() {
     m_GeneralHelperTools.push_back(&(*(*itTools)));
     m_helperToolWarning[&(*(*itTools))] = false;
   }
-  
+
   // get the ResidualPullCalculator
   if (m_residualPullCalculator.empty()) {
     msg(MSG::INFO) << "No residual/pull calculator for general hit residuals configured."
@@ -290,7 +290,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::initialize() {
     }
   }
 
-  ATH_MSG_DEBUG ("successfully initialized in " << name()); 
+  ATH_MSG_DEBUG ("successfully initialized in " << name());
   return StatusCode::SUCCESS;
 }
 
@@ -327,20 +327,20 @@ StatusCode Trk::MeasurementVectorNtupleTool::addNtupleItems( TTree* tree ) const
     ATH_MSG_DEBUG ("added branches to ntuple");
     //-----------------
     // add items  *** Note: Documentation is in the header file, doxygen and wikis! ***
-    // 
+    //
     tree->Branch("TrackStatesUnbiased", &m_isUnbiased        );
     m_isUnbiased=999;
-    
+
     if (!m_residualPullCalculator.empty()) {
       tree->Branch("pullLocX",            &m_pullLocX            );
       tree->Branch("pullLocY",            &m_pullLocY            );
       tree->Branch("residualLocX",        &m_residualLocX        );
       tree->Branch("residualLocY",        &m_residualLocY        );
     }
-    
+
     tree->Branch("DetectorType",        &m_DetectorType      );
     tree->Branch("outlierFlag",         &m_isOutlier         );
-    
+
     tree->Branch("nPixelHits",          &m_nPixelHits        );
     tree->Branch("nSCTHits",            &m_nSCTHits          );
     tree->Branch("nTRTHits",            &m_nTRTHits          );
@@ -348,7 +348,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::addNtupleItems( TTree* tree ) const
     tree->Branch("nCSCHits",            &m_nCSCHits          );
     tree->Branch("nRPCHits",            &m_nRPCHits          );
     tree->Branch("nTGCHits",            &m_nTGCHits          );
-    
+
     tree->Branch("pixelHitIndex",       &m_pixelHitIndex     );
     tree->Branch("sctHitIndex",         &m_sctHitIndex       );
     tree->Branch("trtHitIndex",         &m_trtHitIndex       );
@@ -356,7 +356,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::addNtupleItems( TTree* tree ) const
     tree->Branch("cscHitIndex",         &m_cscHitIndex       );
     tree->Branch("rpcHitIndex",         &m_rpcHitIndex       );
     tree->Branch("tgcHitIndex",         &m_tgcHitIndex       );
-    
+
     ATH_MSG_VERBOSE ("added own branches to ntuple");
 
     StatusCode sc(StatusCode::SUCCESS,true);
@@ -476,7 +476,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackData (
        it!=trackStates->end();
        it++) {
 
-    
+
     if (!(*it)) {
       msg(MSG::WARNING) << "TrackStateOnSurface == Null" << endmsg;
       continue;
@@ -496,7 +496,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackData (
       TrackState::MeasurementType detectorType = m_detTypeHelper->defineType(measurement);
       const Trk::TrackParameters* theParameters = (*it)->trackParameters();
       const Trk::TrackParameters* unbiasedParameters = NULL;
-  
+
       // -----------------------------------------
       // use unbiased track states or normal ones?
       // unbiased track parameters are tried to retrieve if the updator tool
@@ -504,14 +504,14 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackData (
       //    for the current track (ie. if one trial to get unbiased track states
       //    fails, for all following track states of the current track the biased state
       //    will be used).
-      if (theParameters && m_updator && (m_isUnbiased==1) 
+      if (theParameters && m_updator && (m_isUnbiased==1)
           && (detectorType!=TrackState::Pseudo)
 	  && (! (*it)->type(Trk::TrackStateOnSurface::Outlier)) ) {
         if ( theParameters->covariance() ) {
             // Get unbiased state
           unbiasedParameters = m_updator->removeFromState( *theParameters,
                                measurement->localParameters(),
-                               measurement->localCovariance());
+                               measurement->localCovariance()).release();
           if (unbiasedParameters) {
             theParameters = unbiasedParameters;
             ATH_MSG_VERBOSE ("successfully calculated unbiased state");
@@ -536,7 +536,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackData (
       } // end if m_updator
 
       m_DetectorType->push_back((int)detectorType);
-      ATH_MSG_VERBOSE ("meas #" << stateIndexCounter << 
+      ATH_MSG_VERBOSE ("meas #" << stateIndexCounter <<
                        ": detector technology identified as " << detectorType);
 
       if ((fillMeasurementData(measurement,
@@ -586,7 +586,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackData (
 //////////////////////////////////////
 /// fill trackparticle data into variables without actually writing the record
 //////////////////////////////////////
-StatusCode Trk::MeasurementVectorNtupleTool::fillTrackParticleData 
+StatusCode Trk::MeasurementVectorNtupleTool::fillTrackParticleData
 ( const Trk::TrackParticleBase&) const
 {
 
@@ -598,7 +598,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillTrackParticleData
 //////////////////////////////////////
 // fill ntuple data of a given proto-trajectory (function used for fitter validation)
 //////////////////////////////////////
-StatusCode Trk::MeasurementVectorNtupleTool::fillProtoTrajectoryData 
+StatusCode Trk::MeasurementVectorNtupleTool::fillProtoTrajectoryData
 (  const Trk::ProtoTrajectory&,
    const int,
    const Trk::Perigee*,
@@ -752,7 +752,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillMeasurementData(
         m_trkParametersWarning = true;
       }
     }
-    
+
     m_isOutlier->push_back(isOutlier? 1 : 0);
     if (!m_residualPullCalculator.empty()) {
       // --------------------------------------
@@ -780,7 +780,7 @@ StatusCode Trk::MeasurementVectorNtupleTool::fillMeasurementData(
             if (!m_pullWarning && !isOutlier) {  // warn only once!!!
               m_pullWarning = true;
               msg(MSG::WARNING) << "no covariance of the track parameters given, can not compute pull!" << endmsg;
-              msg(MSG::INFO) << "Detector type "<< detectorType 
+              msg(MSG::INFO) << "Detector type "<< detectorType
 			     << (isOutlier? " (flagged as outlier)" : "(not an outlier)") << endmsg;
               msg(MSG::INFO) << "you may want to use the jobOption 'IgnoreMissingTrackCovarianceForPulls' to calculate it anyhow." << endmsg;
               msg(MSG::INFO) << "No further warnings will be given for this type of situation." << endmsg;