diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h
index 4b210fd05f60a9c0a932d48d32beb363692c0f81..054694ac30d3923283c6474fbb89e12ad0ad1394 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h
@@ -83,28 +83,31 @@
 #define INDETPRIVXFINDERTOOL_INDETADAPTIVEMULTIPRIVXFINDERTOOL_H
 
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "CxxUtils/checker_macros.h"
-#include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "InDetRecToolInterfaces/IVertexFinder.h"
+#include "GaudiKernel/EventContext.h"
 #include "TrkParameters/TrackParameters.h"
 #include "TrkParticleBase/TrackParticleBaseCollection.h"
 #include "TrkTrack/TrackCollection.h" // type def ...
-#include <utility>
+
+#include "BeamSpotConditionsData/BeamSpotData.h"
+#include "InDetRecToolInterfaces/IVertexFinder.h"
+#include "TrkVertexFitters/AdaptiveMultiVertexFitter.h"
+#include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
+#include "TrkVertexFitterInterfaces/IVertexAnalyticSeedFinder.h"
+#include "TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h"
 /**
  * Forward declarations
  */
-#include "BeamSpotConditionsData/BeamSpotData.h"
-#include "TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h"
 #include "xAODTracking/TrackParticleContainerFwd.h"
 #include "xAODTracking/TrackParticleFwd.h"
 #include "xAODTracking/VertexContainerFwd.h"
 #include "xAODTracking/VertexFwd.h"
+
+#include <utility>
+
 class TrackToVtxLinkContainer;
 
 namespace Trk {
-class IVertexAnalyticSeedFinder;
-class AdaptiveMultiVertexFitter;
 class Track;
 class ITrackLink;
 class TrkQuality;
@@ -112,7 +115,6 @@ class IVxCandidateXAODVertex;
 }
 
 namespace InDet {
-class IInDetTrackSelectionTool;
 
 class InDetAdaptiveMultiPriVxFinderTool
   : public AthAlgTool
@@ -123,7 +125,8 @@ public:
   InDetAdaptiveMultiPriVxFinderTool(const std::string& t,
                                     const std::string& n,
                                     const IInterface* p);
-  virtual ~InDetAdaptiveMultiPriVxFinderTool();
+
+  virtual ~InDetAdaptiveMultiPriVxFinderTool() = default;
 
   virtual StatusCode initialize() override;
 
@@ -140,23 +143,51 @@ public:
   using IVertexFinder::findVertex;
 
   virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
-  findVertex(const TrackCollection* trackTES) const override;
+  findVertex(const EventContext& ctx,
+             const TrackCollection* trackTES) const override;
 
   virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
-  findVertex(const xAOD::TrackParticleContainer* trackParticles) const override;
+  findVertex(const EventContext& ctx,
+             const xAOD::TrackParticleContainer* trackParticles) const override;
 
   virtual StatusCode finalize() override;
 
 private:
   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> findVertex(
+    const EventContext& ctx,
     const std::vector<const Trk::ITrackLink*>& trackVector) const;
 
   void SGError(const std::string& errService);
-  virtual void printParameterSettings();
+  void printParameterSettings();
+ 
+  ToolHandle<Trk::AdaptiveMultiVertexFitter> m_MultiVertexFitter{
+    this,
+    "VertexFitterTool",
+    "Trk::AdaptiveMultiVertexFitter",
+    "Multi Vertex Fitter"
+  };
+  ToolHandle<Trk::IVertexAnalyticSeedFinder> m_analyticSeedFinder{
+    this,
+    "SeedFinder",
+    "Trk::TrackDensitySeedFinder",
+    " Seed Finder"
+  };
+  ToolHandle<InDet::IInDetTrackSelectionTool> m_trkFilter{
+    this,
+    "TrackSelector",
+    "InDet::InDetTrackSelection",
+    "Track Selection Tool"
+  };
 
-  ToolHandle<Trk::AdaptiveMultiVertexFitter> m_MultiVertexFitter;
-  ToolHandle<Trk::IVertexAnalyticSeedFinder> m_analyticSeedFinder;
-  ToolHandle<InDet::IInDetTrackSelectionTool> m_trkFilter;
+  /*
+   * Impact parameter estimator used to calculate significance
+   */
+  ToolHandle<Trk::ITrackToVertexIPEstimator> m_ipEstimator{
+    this,
+    "IPEstimator",
+    "Trk::TrackToVertexIPEstimator",
+    "IP estimator"
+  };
 
   SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey{
     this,
@@ -257,13 +288,6 @@ private:
 
   double m_minweight;
 
-  /*
-   * Impact parameter estimator used to calculate significance
-   */
-  ToolHandle<Trk::ITrackToVertexIPEstimator> m_ipEstimator{
-    "Trk::TrackToVertexIPEstimator"
-  };
-
   /*
    * Maximum amount of iterations allowed for vertex finding.
    *
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
index baab3314d2cd8b98af40233983f19cb2c91c3382..5701911d59a10ed1c35a92fe7bef6ba4e85656cc 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
@@ -21,27 +21,20 @@
                           (trial working point for high luminosities)
 
 ***************************************************************************/
+#include "InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h"
 #include "VxVertex/RecVertex.h"
 #include "VxVertex/Vertex.h"
-#include "InDetPriVxFinderTool/InDetAdaptiveMultiPriVxFinderTool.h"
 #include "TrkTrack/Track.h"
 #include "TrkParameters/TrackParameters.h"
-#include <map>
-#include <vector>
-
 #include "EventPrimitives/EventPrimitives.h"
 #include "EventPrimitives/EventPrimitivesHelpers.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 
-#include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
-
 #include "VxMultiVertex/MvfFitInfo.h"
 #include "VxMultiVertex/MVFVxTrackAtVertex.h"
 #include "VxMultiVertex/TrackToVtxLink.h"
 #include "AthContainers/DataVector.h"
 #include "TrkEventPrimitives/ParamDefs.h"
-#include "TrkVertexFitters/AdaptiveMultiVertexFitter.h"
-#include "TrkVertexFitterInterfaces/IVertexAnalyticSeedFinder.h"
 #include "TrkTrack/LinkToTrack.h"
 #include "TrkLinks/LinkToXAODTrackParticle.h"
 
@@ -53,66 +46,60 @@
 #include "xAODTracking/TrackParticleAuxContainer.h"
 
 #include <cmath>
+#include <map>
+#include <vector>
 
 namespace InDet
 {
-  InDetAdaptiveMultiPriVxFinderTool::InDetAdaptiveMultiPriVxFinderTool(const std::string& t, const std::string& n,
-                                                                       const IInterface* p)
-    : AthAlgTool(t, n, p),
-    m_MultiVertexFitter("Trk::AdaptiveMultiVertexFitter"),
-    m_analyticSeedFinder("Trk::TrackDensitySeedFinder"),
-    m_trkFilter("InDet::InDetTrackSelection"),
-    m_useBeamConstraint(true),
-    m_TracksMaxZinterval(1.),
-    m_maxVertexChi2(18.42),
-    m_realMultiVertex(true),
-    m_useFastCompatibility(true),
-    m_selectiontype(0),
-    m_finalCutMaxVertexChi2(18.42),
-    m_cutVertexDependence(3.),
-    m_minweight(0.0001),
-    m_maxIterations(100),
-    m_addSingleTrackVertices(false),
-    m_do3dSplitting(false),
-    m_zBfieldApprox(0.60407),
-    m_maximumVertexContamination(0.5),
-    m_tracksMaxSignificance(5.),
-    m_useSeedConstraint(true)
-  {
-    declareInterface<IVertexFinder>(this);//by GP: changed from InDetMultiAdaptivePriVxFinderTool to IPriVxFinderTool
-    /* Retrieve StoreGate container and tool names from job options */
-    declareProperty("SeedFinder", m_analyticSeedFinder);
-    declareProperty("VertexFitterTool", m_MultiVertexFitter);
-    declareProperty("TrackSelector", m_trkFilter);
-
-    //finder options
-    declareProperty("TracksMaxZinterval", m_TracksMaxZinterval);
-    declareProperty("maxVertexChi2", m_maxVertexChi2);
-    declareProperty("finalCutMaxVertexChi2", m_finalCutMaxVertexChi2);
-    declareProperty("cutVertexDependence", m_cutVertexDependence);
-    declareProperty("MinWeight", m_minweight);
-    declareProperty("realMultiVertex", m_realMultiVertex);
-    declareProperty("useFastCompatibility", m_useFastCompatibility);
-    declareProperty("useBeamConstraint", m_useBeamConstraint);
-    declareProperty("addSingleTrackVertices", m_addSingleTrackVertices);
-    declareProperty("tracksMaxSignificance",m_tracksMaxSignificance);
-    declareProperty("m_useSeedConstraint",m_useSeedConstraint);
-    //********* signal vertex selection (for pile up) ****
-    declareProperty("selectiontype", m_selectiontype);
-    //==0 for sum p_t^2
-    //==1 for NN
-    //==2 for min bias compatibility estimation (in the future)
-    declareProperty("maxIterations", m_maxIterations);
-    declareProperty("do3dSplitting", m_do3dSplitting);
-    declareProperty("zBfieldApprox", m_zBfieldApprox);
-    declareProperty("maximumVertexContamination", m_maximumVertexContamination);
-    declareProperty( "IPEstimator", m_ipEstimator );
+InDetAdaptiveMultiPriVxFinderTool::InDetAdaptiveMultiPriVxFinderTool(
+  const std::string& t,
+  const std::string& n,
+  const IInterface* p)
+  : AthAlgTool(t, n, p)
+  , m_useBeamConstraint(true)
+  , m_TracksMaxZinterval(1.)
+  , m_maxVertexChi2(18.42)
+  , m_realMultiVertex(true)
+  , m_useFastCompatibility(true)
+  , m_selectiontype(0)
+  , m_finalCutMaxVertexChi2(18.42)
+  , m_cutVertexDependence(3.)
+  , m_minweight(0.0001)
+  , m_maxIterations(100)
+  , m_addSingleTrackVertices(false)
+  , m_do3dSplitting(false)
+  , m_zBfieldApprox(0.60407)
+  , m_maximumVertexContamination(0.5)
+  , m_tracksMaxSignificance(5.)
+  , m_useSeedConstraint(true)
+{
+  declareInterface<IVertexFinder>(
+    this); // by GP: changed from InDetMultiAdaptivePriVxFinderTool to
+           // IPriVxFinderTool
+  // finder options
+  declareProperty("TracksMaxZinterval", m_TracksMaxZinterval);
+  declareProperty("maxVertexChi2", m_maxVertexChi2);
+  declareProperty("finalCutMaxVertexChi2", m_finalCutMaxVertexChi2);
+  declareProperty("cutVertexDependence", m_cutVertexDependence);
+  declareProperty("MinWeight", m_minweight);
+  declareProperty("realMultiVertex", m_realMultiVertex);
+  declareProperty("useFastCompatibility", m_useFastCompatibility);
+  declareProperty("useBeamConstraint", m_useBeamConstraint);
+  declareProperty("addSingleTrackVertices", m_addSingleTrackVertices);
+  declareProperty("tracksMaxSignificance", m_tracksMaxSignificance);
+  declareProperty("m_useSeedConstraint", m_useSeedConstraint);
+  //********* signal vertex selection (for pile up) ****
+  declareProperty("selectiontype", m_selectiontype);
+  //==0 for sum p_t^2
+  //==1 for NN
+  //==2 for min bias compatibility estimation (in the future)
+  declareProperty("maxIterations", m_maxIterations);
+  declareProperty("do3dSplitting", m_do3dSplitting);
+  declareProperty("zBfieldApprox", m_zBfieldApprox);
+  declareProperty("maximumVertexContamination", m_maximumVertexContamination);
 
   }
 
-  InDetAdaptiveMultiPriVxFinderTool::~InDetAdaptiveMultiPriVxFinderTool()
-  {}
-
   StatusCode
   InDetAdaptiveMultiPriVxFinderTool::initialize() {
     /* Get the right vertex fitting tool */
@@ -146,8 +133,12 @@ namespace InDet
   } //anonymous namespace
 
   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
-  InDetAdaptiveMultiPriVxFinderTool::findVertex(const TrackCollection* trackTES) const{
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
+  InDetAdaptiveMultiPriVxFinderTool::findVertex(
+    const EventContext& ctx,
+    const TrackCollection* trackTES) const
+  {
+    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle{ m_beamSpotKey,
+                                                            ctx };
     const Trk::RecVertex &beamposition(beamSpotHandle->beamVtx());
 
     std::vector<const Trk::ITrackLink*> selectedTracks;
@@ -174,7 +165,8 @@ namespace InDet
     ATH_MSG_DEBUG("Of " << trackTES->size() << " tracks "
                         << selectedTracks.size() << " survived the preselection.");
 
-    std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(selectedTracks);
+    std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+      returnContainers = findVertex(ctx, selectedTracks);
 
     std::vector<const Trk::ITrackLink*>::iterator ibegin = selectedTracks.begin();
     std::vector<const Trk::ITrackLink*>::iterator iend = selectedTracks.end();
@@ -189,11 +181,14 @@ namespace InDet
     return returnContainers;
   }
 
-
   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
-  InDetAdaptiveMultiPriVxFinderTool::findVertex(const xAOD::TrackParticleContainer* trackParticles) const {
+  InDetAdaptiveMultiPriVxFinderTool::findVertex(
+    const EventContext& ctx,
+    const xAOD::TrackParticleContainer* trackParticles) const
+  {
     std::vector<const Trk::ITrackLink*> selectedTracks;
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
+    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle{ m_beamSpotKey,
+                                                            ctx };
     xAOD::Vertex beamposition;
     beamposition.makePrivateStore();
     beamposition.setPosition(beamSpotHandle->beamVtx().position());
@@ -227,7 +222,8 @@ namespace InDet
     ATH_MSG_DEBUG(
       "Of " << trackParticles->size() << " tracks " << selectedTracks.size() << " survived the preselection.");
 
-    std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(selectedTracks);
+    std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
+      returnContainers = findVertex(ctx, selectedTracks);
 
     std::vector<const Trk::ITrackLink*>::iterator ibegin = selectedTracks.begin();
     std::vector<const Trk::ITrackLink*>::iterator iend = selectedTracks.end();
@@ -244,13 +240,17 @@ namespace InDet
   }
 
   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
-  InDetAdaptiveMultiPriVxFinderTool::findVertex(const std::vector<const Trk::ITrackLink*>& trackVector) const {
-    // TODO: put this in a better place
+  InDetAdaptiveMultiPriVxFinderTool::findVertex(
+    const EventContext& ctx,
+    const std::vector<const Trk::ITrackLink*>& trackVector) const
+  {
     // Prepare objects holding the decoration of xAOD::Vertex with MVF auxdata
     // For optimization of access speed
-    xAOD::Vertex::Decorator< Trk::MvfFitInfo* > MvfFitInfo("MvfFitInfo");
-    xAOD::Vertex::Decorator< bool > isInitialized("isInitialized");
-    xAOD::Vertex::Decorator< std::vector< Trk::VxTrackAtVertex* > > VTAV("VTAV");
+    static const xAOD::Vertex::Decorator<Trk::MvfFitInfo*> MvfFitInfo(
+      "MvfFitInfo");
+    static const xAOD::Vertex::Decorator<bool> isInitialized("isInitialized");
+    static const xAOD::Vertex::Decorator<std::vector<Trk::VxTrackAtVertex*>>
+      VTAV("VTAV");
 
     if (m_selectiontype == 1) {
       ATH_MSG_WARNING("Only Selection Type 0 supported for MT");
@@ -271,19 +271,15 @@ namespace InDet
 
     Amg::Vector3D actualVertex;
 
-
     std::map<const Trk::ITrackLink*, Trk::TrackToVtxLink*> TrackLinkOf;
-
     //create a map between ITrackLink* and TrackToVtxLink*
     std::vector<const Trk::ITrackLink*>::const_iterator trkbegin = origTracks.begin();
     std::vector<const Trk::ITrackLink*>::const_iterator trkend = origTracks.end();
 
 
     for (std::vector<const Trk::ITrackLink*>::const_iterator trkiter = trkbegin; trkiter != trkend; ++trkiter) {
-      Trk::TrackToVtxLink* newTrkToVtxLink(new Trk::TrackToVtxLink(new std::vector<xAOD::Vertex*>)); // makePrivateStore()
-                                                                                                     // is called for
-                                                                                                     // each vertex to
-                                                                                                     // add in iteration
+      Trk::TrackToVtxLink* newTrkToVtxLink(new Trk::TrackToVtxLink(new std::vector<xAOD::Vertex*>));
+      // makePrivateStore() is called for each vertex to add in iteration
       TrackLinkOf[*trkiter] = newTrkToVtxLink;
       myTrackToVtxLinks.push_back(newTrkToVtxLink);
     }
@@ -292,7 +288,8 @@ namespace InDet
     //prepare iterators for tracks only necessary for seeding
     std::vector<const Trk::ITrackLink*>::iterator seedtrkbegin = seedTracks.begin();
     std::vector<const Trk::ITrackLink*>::iterator seedtrkend = seedTracks.end();
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
+    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle{ m_beamSpotKey,
+                                                            ctx };
     int iteration = 0;
 
   int nNoCompatibleTracks(0);
@@ -358,8 +355,9 @@ namespace InDet
       //new xAOD::Vertex with this
       xAOD::Vertex* actualcandidate = new xAOD::Vertex;
       actualcandidate->makePrivateStore();
-      actualcandidate->setVertexType(xAOD::VxType::NotSpecified); // to mimic the initialization present in the old EDM                                                          // constructor
-      // now add decorations!
+      actualcandidate->setVertexType(xAOD::VxType::NotSpecified);
+      // to mimic the initialization present in the old EDM
+      // constructor now add decorations!
       MvfFitInfo(*actualcandidate) = new Trk::MvfFitInfo(constraintVertex,
                                                          new Amg::Vector3D(actualVertex),
                                                          new Amg::Vector3D(actualVertex));
@@ -411,9 +409,12 @@ namespace InDet
           actualVertex = Amg::Vector3D(0., 0., newz);
           actualcandidate = new xAOD::Vertex();
           actualcandidate->makePrivateStore();
-          actualcandidate->setVertexType(xAOD::VxType::NotSpecified); // to mimic the initialization present in the old
-                                                                      // EDM constructor
-          // TODO: Think about where everything is deleted! Does Trk::MvfFitInfo destructor and do MVFVxTrackAtVertex
+          actualcandidate->setVertexType(xAOD::VxType::NotSpecified);
+          // to mimic the initialization present in the old
+          // EDM constructor
+
+          // TODO: Think about where everything is deleted! Does Trk::MvfFitInfo
+          // destructor and do MVFVxTrackAtVertex
           // destructors get called when actualcandidate gets deleted?
           // now add decorations!
           MvfFitInfo(*actualcandidate) = new Trk::MvfFitInfo(new xAOD::Vertex(*constraintVertex),
@@ -623,7 +624,6 @@ namespace InDet
         }
       }
 
-
       ///////////////
       //now break the cycle if you didn't diminish the number of seeds...
       ATH_MSG_DEBUG("Remaining seeds: " << seedTracks.size() << " previous round " << seedtracknumber);
@@ -731,27 +731,34 @@ namespace InDet
   ATH_MSG_DEBUG("Vertices deleted for contamination cut: " << nContamintationCut);
   ATH_MSG_DEBUG("Vertices deleted for proximity to previous: " << nWithin3sigma);
 
-    ATH_MSG_DEBUG("Primary vertex finding complete with " << iteration <<
-                  " iterations and " << myxAODVertices.size() << " vertices found.");
-
-    //correction of a bug: you can estimate the probability of being
-    //the primary interaction vertex only after the whole multivertexfit
-    //is finished!!! (the first is influenced by the fit of the second and so
-    //on...)
-    std::vector<xAODVertex_pair>::iterator vtxBegin = myxAODVertices.begin();
-    std::vector<xAODVertex_pair>::iterator vtxEnd = myxAODVertices.end();
-    // To make sure that the right tracks are in the std::vector<Trk::VxTrackAtVertex> of each vertex - up until now,
-    // they are kept in the VTAV decoration
-    for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
-      xAOD::Vertex* cand = vtxIter->second;
-      std::vector<Trk::VxTrackAtVertex>* tracksOfVertex = &(cand->vxTrackAtVertex());
-      tracksOfVertex->clear();
-      std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkBegin = VTAV(*cand).begin();
-      std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkEnd = VTAV(*cand).end();
-      for (std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkIter = MVFtrkBegin; MVFtrkIter != MVFtrkEnd;
-           ++MVFtrkIter) {
-        tracksOfVertex->push_back(**MVFtrkIter);
-      }
+  ATH_MSG_DEBUG("Primary vertex finding complete with "
+                << iteration << " iterations and " << myxAODVertices.size()
+                << " vertices found.");
+
+  // correction of a bug: you can estimate the probability of being
+  // the primary interaction vertex only after the whole multivertexfit
+  // is finished!!! (the first is influenced by the fit of the second and so
+  // on...)
+  std::vector<xAODVertex_pair>::iterator vtxBegin = myxAODVertices.begin();
+  std::vector<xAODVertex_pair>::iterator vtxEnd = myxAODVertices.end();
+  // To make sure that the right tracks are in the
+  // std::vector<Trk::VxTrackAtVertex> of each vertex - up until now, they are
+  // kept in the VTAV decoration
+  for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin;
+       vtxIter != vtxEnd;
+       ++vtxIter) {
+    xAOD::Vertex* cand = vtxIter->second;
+    std::vector<Trk::VxTrackAtVertex>* tracksOfVertex =
+      &(cand->vxTrackAtVertex());
+    tracksOfVertex->clear();
+    std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkBegin =
+      VTAV(*cand).begin();
+    std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkEnd = VTAV(*cand).end();
+    for (std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkIter = MVFtrkBegin;
+         MVFtrkIter != MVFtrkEnd;
+         ++MVFtrkIter) {
+      tracksOfVertex->push_back(**MVFtrkIter);
+    }
     }
     //before filling the container, you have to decide what is your most probable signal vertex
     for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
@@ -876,7 +883,8 @@ namespace InDet
     // TODO: put this in a better place
     // Prepare objects holding the decoration of xAOD::Vertex with MVF auxdata
     // For optimization of access speed
-    xAOD::Vertex::Decorator< std::vector<Trk::VxTrackAtVertex*> > VTAV("VTAV");
+    static const xAOD::Vertex::Decorator<std::vector<Trk::VxTrackAtVertex*>>
+      VTAV("VTAV");
 
     std::vector<Trk::VxTrackAtVertex*>::iterator begintracks = VTAV(*mycand).begin();
     std::vector<Trk::VxTrackAtVertex*>::iterator endtracks = VTAV(*mycand).end();
@@ -998,7 +1006,8 @@ namespace InDet
     {  
       if ( ipas->sigmad0 > 0 && ipas->sigmaz0 > 0)
       {
-  significance = std::sqrt( std::pow(ipas->IPd0/ipas->sigmad0,2) + std::pow(ipas->IPz0/ipas->sigmaz0,2) );
+        significance = std::sqrt(std::pow(ipas->IPd0 / ipas->sigmad0, 2) +
+                                 std::pow(ipas->IPz0 / ipas->sigmaz0, 2));
       }
       delete ipas;
     }
@@ -1010,8 +1019,8 @@ namespace InDet
     if (candidate == nullptr) return;
 
     // decorators
-    xAOD::Vertex::Decorator< Trk::MvfFitInfo* > MvfFitInfo("MvfFitInfo");
-    xAOD::Vertex::Decorator< std::vector< Trk::VxTrackAtVertex* > > VTAV("VTAV");
+    static const xAOD::Vertex::Decorator< Trk::MvfFitInfo* > MvfFitInfo("MvfFitInfo");
+    static const xAOD::Vertex::Decorator< std::vector< Trk::VxTrackAtVertex* > > VTAV("VTAV");
 
     if (VTAV.isAvailable(*candidate)) {
       for (auto tav : VTAV(*candidate)) {
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx
index ff11c0cc818724c7e0be1b4dfe288d4168390d5d..911eba162a5f8424d255496671b8c771833a7eb1 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx
@@ -94,7 +94,7 @@ namespace InDet
 }
 
 InDetIterativePriVxFinderTool::~InDetIterativePriVxFinderTool()
-{}
+= default;
 
 StatusCode InDetIterativePriVxFinderTool::initialize()
 {
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx
index cc9217335afc78f4e474e81631e25b430816a081..17ba30ffc95a6cbe630c5b0f707240ca406947fb 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx
@@ -92,7 +92,7 @@ namespace InDet
   }
 
   InDetMultiPriVxFinderTool::~InDetMultiPriVxFinderTool()
-  {}
+  = default;
 
   StatusCode
   InDetMultiPriVxFinderTool::initialize() {
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
index 2f26ea76e42fff47a4a6d3df5aaff82112591492..9ac1e16b78b51c75313606e41d317134d2ff3e4b 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
@@ -91,7 +91,7 @@ namespace InDet
   }
 
   InDetPriVxFinderTool::~InDetPriVxFinderTool()
-  {}
+  = default;
 
   StatusCode
   InDetPriVxFinderTool::initialize() {