diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexCollectionSortingTool.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexCollectionSortingTool.h
index 8e69611e493b8512b6a6087afa2686be42a737aa..365688fc9729e5a27a1415ac00c87d11aba25f48 100644
--- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexCollectionSortingTool.h
+++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexCollectionSortingTool.h
@@ -54,9 +54,8 @@ namespace Trk
        /** Interface for xAOD::VertexContainer.
 	* A new container and auxiliary store is returned.
 	*/
-       virtual std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> sortVertexContainer(const xAOD::VertexContainer& MyVxCont) = 0;
-
-
+       virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+       sortVertexContainer(const xAOD::VertexContainer& MyVxCont) const = 0;
   };
 }
 
diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexMergingTool.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexMergingTool.h
index 83004776a9cdfa29d8a448c3028008f2d834feaa..9a03236d78ae49fafcc557a88536f8c5ce18437e 100644
--- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexMergingTool.h
+++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IVertexMergingTool.h
@@ -49,7 +49,8 @@ namespace Trk
     static const InterfaceID& interfaceID() { return IID_IVertexMergingTool; };
 
     /** Interface for xAOD vertices **/
-    virtual std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) = 0;
+    virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+    mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) const = 0;
   };
 }
 
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/ATLAS_CHECK_THREAD_SAFETY b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 0000000000000000000000000000000000000000..d296da173ccfac524f70484468194b6395501975
--- /dev/null
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+Tracking/TrkVertexFitter/TrkVertexTools
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/SecVertexMergingTool.h b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/SecVertexMergingTool.h
index 3ca3411000d9e9be6cc7f00df57637fe79612185..6e90192a06bb55bc47d6c02171761f53b133fc18 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/SecVertexMergingTool.h
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/SecVertexMergingTool.h
@@ -41,8 +41,8 @@
   class SecVertexMergingTool : public AthAlgTool, virtual public IVertexMergingTool
   {
   public:
-    StatusCode initialize();
-    StatusCode finalize();
+    virtual StatusCode initialize() override; 
+    virtual StatusCode finalize() override;
     
     /**
      * constructor
@@ -57,16 +57,16 @@
     /**
      *Merging  
      */
-    virtual std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> mergeVertexContainer(const xAOD::VertexContainer& MyVxCont);
+    virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+    mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) const override;
 
-        
   private:
     
     int m_Compatidime ;  // Lianyou added
     float m_minDist ;
     ToolHandle< Trk::IVertexFitter > m_iVertexFitter;
 
-    bool checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 );
+    bool checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 ) const;
      
   }; //end of class description
  }//end of namespace definition
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexCollectionSortingTool.h b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexCollectionSortingTool.h
index 5138e41a9059a96c297c54dd15155faae892a964..7be4f7d5535d4ffa10d9e4b64f48b39dbb330146 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexCollectionSortingTool.h
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexCollectionSortingTool.h
@@ -38,8 +38,8 @@
   class VertexCollectionSortingTool : public AthAlgTool, virtual public IVertexCollectionSortingTool
   {
   public:
-    StatusCode initialize();
-    StatusCode finalize();
+    virtual StatusCode initialize() override;
+    virtual StatusCode finalize() override;
     
     /**
      * constructor
@@ -54,8 +54,9 @@
     virtual ~VertexCollectionSortingTool();
     
     /** Sort **/
-    virtual std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> sortVertexContainer(const xAOD::VertexContainer& MyVxCont);
-             
+    virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+    sortVertexContainer(const xAOD::VertexContainer& MyVxCont) const override;
+
   private:
     ToolHandle < Trk::IVertexWeightCalculator> m_iVertexWeightCalculator; 
       
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexMergingTool.h b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexMergingTool.h
index 858b88410467e9418de2075c6d4b926e6067a8c6..f616ec8811c39a72313cf49c2c85ad435774196f 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexMergingTool.h
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/TrkVertexTools/VertexMergingTool.h
@@ -56,16 +56,16 @@
     /**
      *Merging  
      */
-    virtual std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) override;
+    virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+    mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) const override;
 
-        
   private:
     
     SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
     ToolHandle< Trk::IVertexFitter > m_iVertexFitter;
     bool m_useBeamConstraint;
 
-    bool checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 );
+    bool checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 ) const;
      
   }; //end of class description
  }//end of namespace definition
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/src/SecVertexMergingTool.cxx b/Tracking/TrkVertexFitter/TrkVertexTools/src/SecVertexMergingTool.cxx
index 2ab40fc082d1d45ad767abf3bea179e8c2afea99..59c79e2bf00db08d75ae380c3adf7b965451994e 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/src/SecVertexMergingTool.cxx
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/src/SecVertexMergingTool.cxx
@@ -44,178 +44,193 @@ namespace Trk{
      return StatusCode::SUCCESS;
    }
 
-  std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> SecVertexMergingTool::mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) {
+   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+   SecVertexMergingTool::mergeVertexContainer(
+     const xAOD::VertexContainer& MyVxCont) const
 
-    ATH_MSG_DEBUG("Run vertex remerging");
-
-    //new output containers to be filled
-    xAOD::VertexContainer *NewContainer = new xAOD::VertexContainer();
-    xAOD::VertexAuxContainer* auxNewContainer = new xAOD::VertexAuxContainer();
-    NewContainer->setStore( auxNewContainer );
-    
-    bool moreDeco = ( MyVxCont.front() )->isAvailable<float>( "MomentaDirection" ) ;
-
-    if ( ! moreDeco ) ATH_MSG_DEBUG( "Missing decoration !!! " ) ;
-
-/**
-    SG::AuxElement::Decorator<std::vector<float> > mDecor_trkWght( "trkWeight" ) ;
-    SG::AuxElement::Decorator<float> mDecor_trkDOE( "trkDistOverError" ) ;
-    SG::AuxElement::Decorator<float> mDecor_direction( "MomentaDirection" );
-    SG::AuxElement::Decorator< float > mDecor_HitsFilter( "radiiPattern" );
-**/
-
-    SG::AuxElement::Decorator<float> mDecor_sumPt2( "sumPt2" );
-    SG::AuxElement::Decorator<float> mDecor_mass( "mass" );
-    SG::AuxElement::Decorator<float> mDecor_energy( "ee" );
-    SG::AuxElement::Decorator<int> mDecor_nrobbed( "nrobbed" );
-    SG::AuxElement::Decorator<int> mDecor_intrk( "NumInputTrk" );
-
-    //add remerged flags to all
-    std::vector<bool> remerged( MyVxCont.size(), false );    
-
-    xAOD::VertexContainer::const_iterator beginIter = MyVxCont.begin();
-    xAOD::VertexContainer::const_iterator endIter = MyVxCont.end();
-    unsigned int Ni=0;
-    for(xAOD::VertexContainer::const_iterator i = beginIter; i!=endIter; ++i, Ni++ ) {
-      xAOD::Vertex * vx = new xAOD::Vertex( **i );
-
-      if( remerged[Ni] ) continue ;  //skip vertices already merged into another
-
-      std::vector<const xAOD::TrackParticle*> combinedTracks;
-      std::vector< ElementLink< xAOD::TrackParticleContainer > > tpLinks1 = vx->trackParticleLinks();
-      if ( tpLinks1.size() >= 1 )
-      {
-        for(const auto & tp_EL : tpLinks1 )
-        {
-          const xAOD::TrackParticle* trk = *tp_EL ;
-          combinedTracks.push_back( trk ) ;
-        }
-
-        unsigned int Nj = Ni+1;
-        bool newmerge = false ;
-        for(xAOD::VertexContainer::const_iterator j=i+1; j!=endIter; ++j, Nj++ ) 
-        {
-          const xAOD::Vertex * mergeCand = (*j);
-          if ( remerged[Nj] ) continue ;
-
-          if ( newmerge )    
-          {
-            combinedTracks.clear() ;
-            tpLinks1 = vx->trackParticleLinks();
-            if ( tpLinks1.size() < 1 ) break ;
-            for(const auto & tp_EL : tpLinks1 )
-            {
-              const xAOD::TrackParticle* trk = *tp_EL ;
-              combinedTracks.push_back( trk ) ;
-            }
-            newmerge = false ;
-          }
-
-        //not dummy and not already merged into earlier vertex, so consider it as merging candidate
-          if( ! checkCompatibility( vx, mergeCand ) ) continue ;
-
-          ATH_MSG_DEBUG("To merge vertices " << Ni << " and " << Nj);
-              //get all the track particles to fit
-
-          const std::vector< ElementLink< xAOD::TrackParticleContainer > >
-                  tpLinks2 = mergeCand->trackParticleLinks();
-          if ( tpLinks2.size() < 1 ) continue ;
-
-          for(const auto & tp_EL : tpLinks2 )
-          {
-            const xAOD::TrackParticle* trk = *tp_EL ;
-            combinedTracks.push_back( trk ) ;
-          }
-
-          ATH_MSG_DEBUG("Tracks input : " << tpLinks1.size() << " + " << tpLinks2.size() );
-
-          //call the fitter -> using xAOD::TrackParticle it should set the track links for us
-          xAOD::Vertex * mergedVtx = 0;
-          //no interface for no constraint and no starting point, so use starting point of original vertex
-          Amg::Vector3D start( 0.5*( vx->position() + mergeCand->position() ));
-          mergedVtx = m_iVertexFitter->fit( combinedTracks, start );
-
-          ATH_MSG_DEBUG("Merged vertices " << mergedVtx->nTrackParticles() );
-
-          remerged[Nj] = true;
-          remerged[Ni] = true;
-          newmerge = true ;
-
- // update the decors 
-          float pt1 = sqrt( vx->auxdata<float>( "sumPt2" ) );
-          float pt2 = sqrt( mergeCand->auxdata<float>( "sumPt2" ) ) ;
-          float ntrk1 = 1.0*( ( vx->trackParticleLinks() ).size() ) ;
-          float ntrk2 = 1.0*( ( mergeCand->trackParticleLinks() ).size() ) ;
-          float wght1 = 0.6*pt1/( pt1 + pt2 ) + 0.4*ntrk1/( ntrk1 + ntrk2 ) ;
-          float wght2 = 0.6*pt2/( pt1 + pt2 ) + 0.4*ntrk2/( ntrk1 + ntrk2 ) ;
-
-          xAOD::VxType::VertexType typ1 = vx->vertexType() ;
-          xAOD::VxType::VertexType typ2 = mergeCand->vertexType() ;
-          float mas1 = vx->auxdata<float>( "mass" ) ;
-          float mas2 = mergeCand->auxdata<float>( "mass" ) ;
-          float e1 = vx->auxdata<float>( "ee" ) ;
-          float e2 = mergeCand->auxdata<float>( "ee" ) ;
-          int inNtrk1 = vx->auxdata<int>( "NumInputTrk" ) ;
-          int inNtrk2 = mergeCand->auxdata<int>( "NumInputTrk" ) ;
-
-          int ntrks = 0 ;
-          float md1=0., md2=0., hf1=0., hf2=0. ;
-          std::vector<float> trkW1, trkW2, doe1, doe2 ;
-          if ( moreDeco ) 
-          {
-            doe1 = vx->auxdataConst<std::vector<float>> ( "trkDistOverError") ;
-            doe2 = mergeCand->auxdataConst<std::vector<float>> ( "trkDistOverError") ;
-            doe2.insert( doe2.end(), doe1.begin(), doe1.end() ) ;
-            md1 = vx->auxdata<float>( "MomentaDirection" );
-            md2 = mergeCand->auxdata<float>( "MomentaDirection" );
-            hf1 = vx->auxdataConst<float>( "radiiPattern" );
-            hf2 = mergeCand->auxdataConst<float>( "radiiPattern" );
-            trkW1 = vx->auxdata< std::vector<float> >( "trkWeight" ) ;
-            trkW2 = mergeCand->auxdata< std::vector<float> >( "trkWeight" ) ;
-            trkW2.insert( trkW2.end(), trkW1.begin(), trkW1.end() ) ;
-            ntrks = vx->auxdata<int>( "NumTrkAtVtx" ) + mergeCand->auxdata<int>( "NumTrkAtVtx" ) ;
-          }
-
-              //delete copy of first vertex and then overwrite with merged vertex
-          delete vx;
-          vx = mergedVtx;
-
-          if ( wght1 >= wght2 ) 
-            vx->setVertexType( typ1 ) ;
-          else 
-            vx->setVertexType( typ2 ) ;
-
-          if ( moreDeco )
-          { 
-            vx->auxdata<std::vector<float> >( "trkDistOverError" ) = doe2 ;
-            vx->auxdata<float>( "MomentaDirection" ) = wght1*md1 + wght2*md2 ;
-            vx->auxdata<float>( "radiiPattern" ) = wght1*hf1 + wght2*hf2 ;
-            vx->auxdata< std::vector<float> >( "trkWeight" ) = trkW2 ;
-            vx->auxdata< int >( "NumTrkAtVtx" ) = ntrks ;
-          }
-
-          mDecor_sumPt2( *vx ) = pt1*pt1 + pt2*pt2 ;
-          mDecor_mass( *vx ) =  wght1*mas1 + wght2*mas2 ;
-          mDecor_energy( *vx ) =  wght1*e1 + wght2*e2 ;
-          mDecor_nrobbed( *vx ) = 0 ;
-          mDecor_intrk( *vx ) = (int)(wght1*inNtrk1 + wght1*inNtrk2)  ;
-
-
-        } //loop over j
-      }  // if vx found partner in compatibility
-
-      ATH_MSG_DEBUG( "Merged sumPt2 " << vx->auxdataConst<float>( "sumPt2" ) ) ;
-
-        //whether we merged or not, can add vx to the container
-      if ( vx != NULL ) NewContainer->push_back( vx );
-
-    }
+   {
 
-    return std::make_pair( NewContainer, auxNewContainer );
+     ATH_MSG_DEBUG("Run vertex remerging");
+
+     // new output containers to be filled
+     xAOD::VertexContainer* NewContainer = new xAOD::VertexContainer();
+     xAOD::VertexAuxContainer* auxNewContainer = new xAOD::VertexAuxContainer();
+     NewContainer->setStore(auxNewContainer);
+
+     bool moreDeco = (MyVxCont.front())->isAvailable<float>("MomentaDirection");
+
+     if (!moreDeco)
+       ATH_MSG_DEBUG("Missing decoration !!! ");
+
+     /**
+         SG::AuxElement::Decorator<std::vector<float> > mDecor_trkWght(
+     "trkWeight" ) ; SG::AuxElement::Decorator<float> mDecor_trkDOE(
+     "trkDistOverError" ) ; SG::AuxElement::Decorator<float> mDecor_direction(
+     "MomentaDirection" ); SG::AuxElement::Decorator< float > mDecor_HitsFilter(
+     "radiiPattern" );
+     **/
+
+     SG::AuxElement::Decorator<float> mDecor_sumPt2("sumPt2");
+     SG::AuxElement::Decorator<float> mDecor_mass("mass");
+     SG::AuxElement::Decorator<float> mDecor_energy("ee");
+     SG::AuxElement::Decorator<int> mDecor_nrobbed("nrobbed");
+     SG::AuxElement::Decorator<int> mDecor_intrk("NumInputTrk");
+
+     // add remerged flags to all
+     std::vector<bool> remerged(MyVxCont.size(), false);
+
+     xAOD::VertexContainer::const_iterator beginIter = MyVxCont.begin();
+     xAOD::VertexContainer::const_iterator endIter = MyVxCont.end();
+     unsigned int Ni = 0;
+     for (xAOD::VertexContainer::const_iterator i = beginIter; i != endIter;
+          ++i, Ni++) {
+       xAOD::Vertex* vx = new xAOD::Vertex(**i);
+
+       if (remerged[Ni])
+         continue; // skip vertices already merged into another
+
+       std::vector<const xAOD::TrackParticle*> combinedTracks;
+       std::vector<ElementLink<xAOD::TrackParticleContainer>> tpLinks1 =
+         vx->trackParticleLinks();
+       if (tpLinks1.size() >= 1) {
+         for (const auto& tp_EL : tpLinks1) {
+           const xAOD::TrackParticle* trk = *tp_EL;
+           combinedTracks.push_back(trk);
+         }
+
+         unsigned int Nj = Ni + 1;
+         bool newmerge = false;
+         for (xAOD::VertexContainer::const_iterator j = i + 1; j != endIter;
+              ++j, Nj++) {
+           const xAOD::Vertex* mergeCand = (*j);
+           if (remerged[Nj])
+             continue;
+
+           if (newmerge) {
+             combinedTracks.clear();
+             tpLinks1 = vx->trackParticleLinks();
+             if (tpLinks1.size() < 1)
+               break;
+             for (const auto& tp_EL : tpLinks1) {
+               const xAOD::TrackParticle* trk = *tp_EL;
+               combinedTracks.push_back(trk);
+             }
+             newmerge = false;
+           }
+
+           // not dummy and not already merged into earlier vertex, so consider
+           // it as merging candidate
+           if (!checkCompatibility(vx, mergeCand))
+             continue;
+
+           ATH_MSG_DEBUG("To merge vertices " << Ni << " and " << Nj);
+           // get all the track particles to fit
+
+           const std::vector<ElementLink<xAOD::TrackParticleContainer>>
+             tpLinks2 = mergeCand->trackParticleLinks();
+           if (tpLinks2.size() < 1)
+             continue;
+
+           for (const auto& tp_EL : tpLinks2) {
+             const xAOD::TrackParticle* trk = *tp_EL;
+             combinedTracks.push_back(trk);
+           }
+
+           ATH_MSG_DEBUG("Tracks input : " << tpLinks1.size() << " + "
+                                           << tpLinks2.size());
+
+           // call the fitter -> using xAOD::TrackParticle it should set the
+           // track links for us
+           xAOD::Vertex* mergedVtx = 0;
+           // no interface for no constraint and no starting point, so use
+           // starting point of original vertex
+           Amg::Vector3D start(0.5 * (vx->position() + mergeCand->position()));
+           mergedVtx = m_iVertexFitter->fit(combinedTracks, start);
+
+           ATH_MSG_DEBUG("Merged vertices " << mergedVtx->nTrackParticles());
+
+           remerged[Nj] = true;
+           remerged[Ni] = true;
+           newmerge = true;
+
+           // update the decors
+           float pt1 = sqrt(vx->auxdata<float>("sumPt2"));
+           float pt2 = sqrt(mergeCand->auxdata<float>("sumPt2"));
+           float ntrk1 = 1.0 * ((vx->trackParticleLinks()).size());
+           float ntrk2 = 1.0 * ((mergeCand->trackParticleLinks()).size());
+           float wght1 =
+             0.6 * pt1 / (pt1 + pt2) + 0.4 * ntrk1 / (ntrk1 + ntrk2);
+           float wght2 =
+             0.6 * pt2 / (pt1 + pt2) + 0.4 * ntrk2 / (ntrk1 + ntrk2);
+
+           xAOD::VxType::VertexType typ1 = vx->vertexType();
+           xAOD::VxType::VertexType typ2 = mergeCand->vertexType();
+           float mas1 = vx->auxdata<float>("mass");
+           float mas2 = mergeCand->auxdata<float>("mass");
+           float e1 = vx->auxdata<float>("ee");
+           float e2 = mergeCand->auxdata<float>("ee");
+           int inNtrk1 = vx->auxdata<int>("NumInputTrk");
+           int inNtrk2 = mergeCand->auxdata<int>("NumInputTrk");
+
+           int ntrks = 0;
+           float md1 = 0., md2 = 0., hf1 = 0., hf2 = 0.;
+           std::vector<float> trkW1, trkW2, doe1, doe2;
+           if (moreDeco) {
+             doe1 = vx->auxdataConst<std::vector<float>>("trkDistOverError");
+             doe2 =
+               mergeCand->auxdataConst<std::vector<float>>("trkDistOverError");
+             doe2.insert(doe2.end(), doe1.begin(), doe1.end());
+             md1 = vx->auxdata<float>("MomentaDirection");
+             md2 = mergeCand->auxdata<float>("MomentaDirection");
+             hf1 = vx->auxdataConst<float>("radiiPattern");
+             hf2 = mergeCand->auxdataConst<float>("radiiPattern");
+             trkW1 = vx->auxdata<std::vector<float>>("trkWeight");
+             trkW2 = mergeCand->auxdata<std::vector<float>>("trkWeight");
+             trkW2.insert(trkW2.end(), trkW1.begin(), trkW1.end());
+             ntrks = vx->auxdata<int>("NumTrkAtVtx") +
+                     mergeCand->auxdata<int>("NumTrkAtVtx");
+           }
+
+           // delete copy of first vertex and then overwrite with merged vertex
+           delete vx;
+           vx = mergedVtx;
+
+           if (wght1 >= wght2)
+             vx->setVertexType(typ1);
+           else
+             vx->setVertexType(typ2);
+
+           if (moreDeco) {
+             vx->auxdata<std::vector<float>>("trkDistOverError") = doe2;
+             vx->auxdata<float>("MomentaDirection") = wght1 * md1 + wght2 * md2;
+             vx->auxdata<float>("radiiPattern") = wght1 * hf1 + wght2 * hf2;
+             vx->auxdata<std::vector<float>>("trkWeight") = trkW2;
+             vx->auxdata<int>("NumTrkAtVtx") = ntrks;
+           }
+
+           mDecor_sumPt2(*vx) = pt1 * pt1 + pt2 * pt2;
+           mDecor_mass(*vx) = wght1 * mas1 + wght2 * mas2;
+           mDecor_energy(*vx) = wght1 * e1 + wght2 * e2;
+           mDecor_nrobbed(*vx) = 0;
+           mDecor_intrk(*vx) = (int)(wght1 * inNtrk1 + wght1 * inNtrk2);
+
+         } // loop over j
+       }   // if vx found partner in compatibility
+
+       ATH_MSG_DEBUG("Merged sumPt2 " << vx->auxdataConst<float>("sumPt2"));
+
+       // whether we merged or not, can add vx to the container
+       if (vx != NULL)
+         NewContainer->push_back(vx);
+     }
+
+     return std::make_pair(NewContainer, auxNewContainer);
  
   }
 
-  bool SecVertexMergingTool::checkCompatibility( const xAOD::Vertex * v1, const xAOD::Vertex * v2 ) 
+  bool
+  SecVertexMergingTool::checkCompatibility(const xAOD::Vertex* v1,
+                                           const xAOD::Vertex* v2) const
   {
 
     float sigma = 100 ;
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexCollectionSortingTool.cxx b/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexCollectionSortingTool.cxx
index f0e2a3970c532f7147832b73579e4126da3bd116..17f9d66ad642962707cc8db5ced66933b10e91cb 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexCollectionSortingTool.cxx
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexCollectionSortingTool.cxx
@@ -56,7 +56,9 @@ namespace Trk{
     return StatusCode::SUCCESS;
   }
 
-  std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> VertexCollectionSortingTool::sortVertexContainer( const xAOD::VertexContainer& MyVxCont)
+  std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+  VertexCollectionSortingTool::sortVertexContainer(
+    const xAOD::VertexContainer& MyVxCont) const
   { 
     std::vector<Vertex_pair> MyVertex_pairs;
     
diff --git a/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexMergingTool.cxx b/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexMergingTool.cxx
index a8559366139be97a835b2acbb10493f9407fc07c..e5d70ddbd017baf1aa2d7b5241552424500ecf9f 100644
--- a/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexMergingTool.cxx
+++ b/Tracking/TrkVertexFitter/TrkVertexTools/src/VertexMergingTool.cxx
@@ -39,7 +39,8 @@ namespace Trk{
    }///EndOfInitialize
 
 
-  std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> VertexMergingTool::mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) {
+  std::pair<xAOD::VertexContainer*,xAOD::VertexAuxContainer*> VertexMergingTool::mergeVertexContainer(const xAOD::VertexContainer& MyVxCont) const
+  {
 
     ATH_MSG_DEBUG("Run vertex remerging");
 
@@ -123,7 +124,7 @@ namespace Trk{
  
   }
 
-  bool VertexMergingTool::checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 ) {
+  bool VertexMergingTool::checkCompatibility( const xAOD::Vertex * vx1, const xAOD::Vertex * vx2 ) const {
 
     double z1 = vx1->z();
     double z2 = vx2->z();