diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h
index 7ef944443d28b88c1a08b5a96ea31669cae21ab3..15b210d0fd258097d6672e9f14643b7894a9fc47 100644
--- a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h
+++ b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h
@@ -23,6 +23,7 @@
 #include "xAODTracking/VertexContainer.h"
 #include "xAODTracking/VertexAuxContainer.h"
 #include "xAODTracking/TrackParticle.h"
+#include "xAODTracking/Vertex.h"
 
 #include "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
 #include "TrkExInterfaces/IExtrapolator.h"
@@ -37,13 +38,16 @@
 #include "BeamSpotConditionsData/BeamSpotData.h"
 #include "VxSecVertex/VxSecVertexInfo.h"
 
-
+#include "TH1.h"
+#include "TH2.h"
+#include "GaudiKernel/ITHistSvc.h"
 #include <fstream>
 //#include <TH1.h>
 
 
 class TH1D;
 class TH2D;
+class TH2F;
 class TH1F;
 class TProfile;
 class TTree;
@@ -115,8 +119,12 @@ namespace Rec {
       SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
       ToolHandle<Trk::IExtrapolator>  m_extrapolator{this,"ExtrapolatorName","Trk::Extrapolator/Extrapolator"};
       ToolHandle<Trk::TrkVKalVrtFitter> m_VrtFit;
+      
       const xAOD::Vertex*  m_thePV;
       const xAOD::VertexContainer*        m_vertexTES; // primary vertex container
+      SG::WriteHandleKey<xAOD::VertexContainer>  m_foundVerticesKey{this,"GNNVertexContainerName","AllGNNVertices","Found GNN vertices container"};
+      
+
       
       //{this, "SecVtxToo", "", "Secondary Vertexing Tool"};
 
@@ -136,7 +144,10 @@ namespace Rec {
       
     private:
     
-    std::vector<xAOD::Vertex*> vrtFitter( workVectorArrxAOD * inpParticlesxAOD, std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >  > & vrt ) const;
+    std::vector<xAOD::Vertex*> vrtFitter( workVectorArrxAOD * inpParticlesxAOD, 
+                                          std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >  > & vrt, 
+                                          const EventContext& ctx,
+                                          std::unique_ptr<xAOD::VertexContainer>& VtxCont ) const;
       
 
      using compatibilityGraph_t = boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS>;
@@ -156,12 +167,13 @@ namespace Rec {
          double BDT=1.1;
       };
       
-      void select2TrVrt(std::vector<const xAOD::TrackParticle*> & SelectedTracks, const xAOD::Vertex  & primVrt,
+ /*      void select2TrVrt(std::vector<const xAOD::TrackParticle*> & SelectedTracks, const xAOD::Vertex  & primVrt,
                         std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >> & vrt,
-                        compatibilityGraph_t& compatibilityGraph) const;
-
+                        compatibilityGraph_t& compatibilityGraph
+                        ) const;
 
-/*    struct clique_visitor
+ 
+   struct clique_visitor
       {
         clique_visitor(std::vector< std::vector<int> > & input): m_allCliques(input){ input.clear();}
         
@@ -177,6 +189,23 @@ namespace Rec {
     
       };*/
 
+
+  //Making Histograms
+  
+  TH1F* m_vertex_pos{};
+/*  struct DevTuple;
+  struct Hists{
+    StatusCode book (ITHistSvc& histSvc, const std::string& histDir);
+    TTree* m_tuple{};
+    DevTuple*  m_curTup;
+    
+    TH2F* m_vertex_chi{};
+    TH1F* m_vertex_mass{};
+    TH1F* m_vertex_pT{};
+  };
+   std::unique_ptr<Hists> m_h;
+
+*/
     
   };
 }
diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py
index 5cbd7a192a2d3ebd02d6506e68aea907e8e08cd5..27b459c0b6157cec90ba20cc1aa8b3d98a3facb2 100644
--- a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py
+++ b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py
@@ -83,7 +83,8 @@ def main():
                                                'TruthParticles':'xAOD::TruthParticleContainer','TruthParticlesAux':'xAOD::TruthParticleAuxContainer',
                                                'AntiKt4EMPFlowJets':'xAOD::JetContainer', 'AntiKt4EMPFlowJetsAux': 'xAOD::JetAuxContainer',
                                                'BTagging':'xAOD::BTaggingContainer', 'BTaggingAux': 'xAOD::BTaggingAuxContainer',
-                                               'TrackParticle':'xAOD::TrackParticleContainer', 'TrackParticleAux': 'xAOD::TrackParticleAuxContainer'} 
+                                               'TrackParticle':'xAOD::TrackParticleContainer', 'TrackParticleAux': 'xAOD::TrackParticleAuxContainer',
+                                               'VertexContainer':'xAOD::VertexContainer', 'VertexContainerAux':'xAOD::VertexAuxContainer'} 
 
     TRUTH0SlimmingHelper.AllVariables = [ 'EventInfo',
                                           'TruthEvents', 
@@ -91,7 +92,8 @@ def main():
                                           'TruthParticles',
                                           'AntiKt4EMPFlowJets',
                                           'BTagging',
-                                          'TrackParticle']
+                                          'TrackParticle',
+                                          'Vertex']
 
     # Metadata
     #TRUTH0MetaDataItems = [ "xAOD::TruthMetaDataContainer#TruthMetaData", "xAOD::TruthMetaDataAuxContainer#TruthMetaDataAux." ]
@@ -100,6 +102,7 @@ def main():
     from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
     TRUTH0ItemList = TRUTH0SlimmingHelper.GetItemList()
     TRUTH0ItemList+=["xAOD::TrackParticleContainer#DecoratedTrackParticles","xAOD::TrackParticleContainer#DecoratedTrackParticlesAux."]
+    TRUTH0ItemList+=["xAOD::VertexContainer#GNNvertexContainer", "xAOD::VertexContainer#GNNvertexContainerAux"]
     acc.merge(OutputStreamCfg(flags, "GNNVertexOutputDecoNew", ItemList=TRUTH0ItemList))
 
 
diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx
index 4b2bffa7ff988cb293d3732d18427486b1be71d5..246e6215d0a42a18ce278e0009f79f5cd58fbbfc 100644
--- a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx
+++ b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx
@@ -63,9 +63,9 @@ namespace Rec {
     }
 
     //Calling the tools to write decorations and read the the decoration
-    ATH_CHECK(m_VtxTool->decorateTracks(inTracks.ptr(), ctx));
+    //ATH_CHECK(m_VtxTool->decorateTracks(inTracks.ptr(), ctx));
     
-    ATH_CHECK(m_VtxTool->readDecorTracks(inTracks.ptr(), ctx));
+    //ATH_CHECK(m_VtxTool->readDecorTracks(inTracks.ptr(), ctx));
     
     
     SG::ReadHandle<xAOD::JetContainer> jetsDecoHandle(m_jetReadKey, ctx);
diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx
index 838b4c1a5856b05c27ddea5537822e535aa89998..d1e3820e3fc812906334a89e52bcb6a65452cc75 100644
--- a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx
+++ b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx
@@ -7,15 +7,12 @@
 #include "GaudiKernel/ConcurrencyFlags.h"
 #include "vector"
 #include "iostream"
-#include "TH1.h"
-#include "TH2.h"
 #include "TTree.h"
 #include "TMath.h"
 #include "TFile.h"
 #include "map"
 #include "set"
 #include "iterator"
-#include "iostream"
 #include "AnalysisUtils/AnalysisMisc.h"
 #include "GeoPrimitives/GeoPrimitivesHelpers.h"
 #include "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
@@ -32,7 +29,8 @@ namespace Rec {
     GNNVertexConstructorTool::GNNVertexConstructorTool(const std::string& type, const std::string& name, const IInterface* parent)
     : AthAlgTool(type,name,parent),
       m_VrtFit("Trk::TrkVKalVrtFitter/VertexFitterTool",this),
-      m_thePV(nullptr)
+      m_thePV(nullptr),
+      m_vertex_pos (nullptr)      
       
     //,      m_fillHist(true)
       
@@ -47,6 +45,7 @@ namespace Rec {
       //declareProperty("FillHist",   m_fillHist, "Fill technical histograms"  );
       declareProperty("GNNTool",m_gnn_Tool, "The GNN Tool");
       declareProperty("VertexFitterTool", m_VrtFit, "The vertex fitting tool");
+      
       //declareProperty("
       //m_instanceName="Test-Plot";
       
@@ -88,27 +87,42 @@ namespace Rec {
       ATH_CHECK( m_extrapolator.retrieve() );
       ATH_CHECK( m_beamSpotKey.initialize());
       ATH_CHECK( m_VrtFit.retrieve() );
+      ATH_CHECK( m_foundVerticesKey.initialize() );
       
       //ATH_CHECK(m_inTrackLinkKey.initialize());
       //ATH_CHECK(m_jetContainerKey.initialize());
       ATH_CHECK( m_eventInfoKey.initialize());
-    
-    
-      //Making a Vertex Container
       
- /*     const <xAOD::Vertex> GNNVertexContainer = nullptr;
-      const <xAOD::Vertex> GNNVertexAuxContainer = nullptr;
-    
-      std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDetAdaptiveMultiSecVtxFinderTool::doVertexing(
-        const std::vector<Trk::ITrackLink*>& trackVector) {
-        xAOD::VertexContainer* theVertexContainer = new xAOD::VertexContainer;
-        xAOD::VertexAuxContainer* theVertexAuxContainer = new xAOD::VertexAuxContainer;
-        theVertexContainer->setStore(theVertexAuxContainer);
-        
+
+/*      ITHistSvc*     hist_root=0;
+      StatusCode sc = service( "THistSvc", hist_root); 
+      std::string histDir;
+      histDir="GNNVertex/";
+      
+      m_h = std::make_unique<Hists>();
+      ATH_CHECK( m_h->book (*hist_root, histDir) );
 */
+
+
+
+  
   
       return StatusCode::SUCCESS;
     }
+    
+    
+/*    //Histograms
+    StatusCode GNNVertexConstructorTool::Hists::book (ITHistSvc& histSvc,
+                                                  const std::string& histDir)
+  {
+    
+    m_vertex_pos=new TH2F ("vertex_pos", "vertex_pos", 10, 0., 500, 10, 0., 1000);
+    
+    ATH_CHECK( histSvc.regHist(histDir+"vertex_pos", m_vertex_pos) );
+  }*/
+  
+  
+  
   
 //Finalize     
     StatusCode GNNVertexConstructorTool::finalize(){
@@ -193,7 +207,7 @@ namespace Rec {
 //Read Decoration from a Jet Container
     StatusCode GNNVertexConstructorTool::readDecorJet ( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const{
     
-    ATH_MSG_DEBUG("Reading a Decor in Jet");
+    //ATH_MSG_DEBUG("Reading a Decor in Jet");
     
     SG::ReadDecorHandle<xAOD::JetContainer, std::vector<ElementLink<DataVector<xAOD::TrackParticle_v1 > > > > readJetHandle_TL(m_jetReadKey_TL, ctx);
     SG::ReadDecorHandle<xAOD::JetContainer, std::vector<char,std::allocator<char> > >readJetHandle_TO(m_jetReadKey_TO, ctx);
@@ -203,13 +217,23 @@ namespace Rec {
     //Create a map of track links and track vertexing values (Using mutlimap)
 
     std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >  > VertexMap;    //empty Multi Vertex Map Container
+    
+    
+    
+    // Create the new container and its auxiliary store.
+    auto GNNvertexContainer      = std::make_unique<xAOD::VertexContainer>();
+    auto GNNvertexAuxContainer   = std::make_unique<xAOD::AuxContainerBase>();
+    GNNvertexContainer->setStore (GNNvertexAuxContainer.get()); //< Connect the two
+
+
 
+    
     for (auto jet : *jetCont) {    //Loop over Jets
       VertexMap.clear();
       auto vertexCollection=readJetHandle_TV(*jet);
       auto trackCollection=readJetHandle_TL(*jet);
       
-      ATH_MSG_DEBUG("New Jet");        
+      //ATH_MSG_DEBUG("New Jet");        
       int i=0;
       
       for (auto v: vertexCollection){
@@ -218,7 +242,7 @@ namespace Rec {
           i++;
       }
       std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >>::iterator itr;
-      ATH_MSG_DEBUG("Printing Map");
+      //ATH_MSG_DEBUG("Printing Map");
       
       workVectorArrxAOD * tmpVectxAOD=new workVectorArrxAOD();
  //     tmpVectxAOD->inpTrk.resize(inpTrk.size());
@@ -230,60 +254,61 @@ namespace Rec {
       tmpVectxAOD->beamZ=beamSpotHandle->beamPos().z();
       tmpVectxAOD->tanBeamTiltX=tan(beamSpotHandle->beamTilt(0));
       tmpVectxAOD->tanBeamTiltY=tan(beamSpotHandle->beamTilt(1));
-
       
-      auto GNNVTX=GNNVertexConstructorTool::vrtFitter(tmpVectxAOD, VertexMap);
       
-      //std::unique_ptr<Trk::VxSecVertexInfo> res = std::make_unique<Trk::VxSecVertexInfo>(Trk::VxSecVertexInfo(GNNVTX));
-     /* for (itr=VertexMap.begin(); itr != VertexMap.end(); ++itr){
       
-        ATH_MSG_DEBUG("\t" << itr->first <<"\t"<< itr->second <<"\n");
+      auto GNNVTX=GNNVertexConstructorTool::vrtFitter(tmpVectxAOD, VertexMap, ctx, GNNvertexContainer);
+      
+      delete tmpVectxAOD;
+      
       
-      }*/
     
     }
-
-    return StatusCode::SUCCESS;
+    
+    ATH_MSG_INFO("Vertex Container " << GNNvertexContainer->size());
+    StatusCode sc;
+      
+    sc= (evtStore()->record (GNNvertexContainer.release(), "GNNVtxs"));
+    sc= (evtStore()->record (GNNvertexAuxContainer.release(), "GNNVtxsAux."));
+   
+     return StatusCode::SUCCESS;
 
     }
     
     //Vertex Fitting
 
-  std::vector<xAOD::Vertex*> GNNVertexConstructorTool::vrtFitter( workVectorArrxAOD * xAODwrk, std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >  > & vrt ) const{
+  std::vector<xAOD::Vertex*> GNNVertexConstructorTool::vrtFitter( workVectorArrxAOD * xAODwrk, 
+                                                                  std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > >  > & vrt, 
+                                                                  const EventContext& ctx, 
+                                                                  std::unique_ptr<xAOD::VertexContainer>& VtxCont ) const{
 
     ATH_MSG_DEBUG("Vertex fitter called ");
+    
     std::vector<xAOD::Vertex*>finalVertices(0);
-    //Using the Multimap that has the grouping of the tracks to a single vertex
-    //Vertexing tool is <Trk::TrkVKalVrtFitter> m_VrtFit
     
+    ATH_MSG_DEBUG("Added Vertexes 0= " << VtxCont->size());
     
-    //Retrieve all the tracks linked to a specific key in multimap
-    //If key only has 1 track ignore??
-    //With # tracks >1 perform a vertex fit
+         
     
-    //First need an initial vertex position (use estimVrtPos)
-    //then set an approx vertex as a starting point (use setApproximateVertex)
-    //Perform a fit (use VKalVrtFit)
     
-    /*VKalVrtFit requirements
+/*    xAOD::VertexContainer *TestVertexContainer( nullptr );
+    ATH_CHECK( evtStore()->retrieve( TestVertexContainer, "BTagging_AntiKt4EMPFlowSecVtx" ) );
     
     
-    */
-   // Create the new container and its auxiliary store.
-   //  auto GNNvertex = std::make_unique<xAOD::VertexContainer>();
-   //  auto GNNvertexAux = std::make_unique<xAOD::AuxContainerBase>();
-   //  GNNvertex->setStore (GNNvertexAux.get()); //< Connect the two
-   
-   
-    xAOD::TrackParticle *Test =new xAOD::TrackParticle();
+     
+    xAOD::TrackParticle *Test =new xAOD::TrackParticle;
     ATH_MSG_DEBUG("GNNblah" );
-    Test->setTime(0.5);
+    //Test->setTime(0.5);
     
     xAOD::Vertex *GNNvertex = new xAOD::Vertex;
     ATH_MSG_DEBUG("GNNblah 2" );
-    GNNvertex->x();
+    TestVertexContainer->emplace_back(GNNvertex);
+    
+    
+    GNNvertex->setX(59.6);
+    ATH_MSG_DEBUG(GNNvertex->x());
     //GNNvertex->setVertexType(xAOD::VxType::SecVtx);
-    ATH_MSG_DEBUG("GNNblah 3" );
+    ATH_MSG_DEBUG("GNNblah 3" );*/
     
   /*  ATH_CHECK(evtStore()->retrieve( m_vertexTES, "PrimaryVertices"));
     
@@ -308,7 +333,7 @@ namespace Rec {
     
     StatusCode sc;
     
-    ATH_MSG_DEBUG("Test 1");
+    
     
     xAODwrk->tmpListTracks.clear();
     auto lastKey = (vrt.end())->first;          //returns next value after last key - easier for "for loop"
@@ -321,57 +346,40 @@ namespace Rec {
         for (auto i = elements.first; i != elements.second; ++i){        //printing the map 
           //ATH_MSG_DEBUG(" test " << i->first << ": " << i->second << '\n');
           xAODwrk->listSelTracks.push_back(*(i->second));
-          //GNNvertex->push_back(xAODwrk->listSelTracks);
-          //(xAODwrk->listSelTracks).emplace(GNNvertex);
-          ATH_MSG_DEBUG("jbfakjbf");
+          
           
           auto trkLink= i->second;
           //ATH_MSG_DEBUG(*trkLink->type());
           //GNNvertex->addTrackAtVertex(trkLink, 1.);
-          ATH_MSG_DEBUG("Test 2");
+          
           } 
         
     
-    
-        //m_VrtFit->VKalVtrFit(*state, false);
-      //auto nTracks =vrt.count(k);
-      
-      
-     // std::vector<double> iniVrtPos=estimVrtPos(nTracks,listSelTracks,foundVrt2t);
-      
-      //m_VrtFit->setApproximateVertex(iniVrtPos[0], iniVrtPos[1], iniVrtPos[2], *state); /*Use as starting point*/
-      
-      //xAOD::Vertex* GNNVtx =new xAOD::Vertex();
+
       
-    /*  for (auto *trk: xAODwrk->listSelTracks){
-        ElementLink<xAOD::TrackParticleContainer> trkElementLink (*(xAODwrk->listSelTracks, trk->index());
-        GNNvertex->addTrackAtVertex(trkElementLink, 1.);
-        
-      }*/
       
-      ATH_MSG_DEBUG("Test 3");
       sc =(m_VrtFit->VKalVrtFit(xAODwrk->listSelTracks, neutralPartDummy,
                                              newvrt.vertex,     newvrt.vertexMom, newvrt.vertexCharge, newvrt.vertexCov,
                                              newvrt.chi2PerTrk, newvrt.trkAtVrt,  newvrt.chi2,
                                              *state, false));
       if( sc.isFailure() )           continue;
       
-      /*if(foundVrts && foundVrts->vertices().size()){
-         const std::vector<xAOD::Vertex*> vtmp=foundVrts->vertices();
-         for(auto & iv :  vtmp) {
-           GNNVtxs->push_back(iv);
-           }*/
-      //GNNVtxs->push_back(GNNVtx);
-      //GNNVtx->setPosition(newvrt.vertex);
-      //finalVertices.push_back(newvrt.vertex[0,0,0]);
       ATH_MSG_DEBUG("Found IniVertex="<<newvrt.vertex[0]<<", "<<newvrt.vertex[1]<<", "<<newvrt.vertex[2]);
       
+      
+      float r= sqrt(newvrt.vertex[0]*newvrt.vertex[0]+newvrt.vertex[1]*newvrt.vertex[1]);
+      
+      
+      //m_vertex_pos->Fill(newvrt.vertex[0]);
+      
+      //hist("Vertex_chi2")->Fill(r, newvrt.chi2);
       // Compatibility to the primary vertex.
-      Amg::Vector3D vDist = newvrt.vertex ;//- m_thePV->position();
-      ATH_MSG_DEBUG("Test 5");
+      Amg::Vector3D vDist = newvrt.vertex ;// - m_thePV->position();
+      
       double vPos=(vDist.x()*newvrt.vertexMom.Px()+vDist.y()*newvrt.vertexMom.Py()+vDist.z()*newvrt.vertexMom.Pz())/newvrt.vertexMom.Rho();
       
-      ATH_MSG_DEBUG("Test 4");
+      xAOD::Vertex *GNNvertex = new xAOD::Vertex;
+      VtxCont->emplace_back(GNNvertex);
       GNNvertex->setVertexType(xAOD::VxType::SecVtx);
       GNNvertex->setPosition( newvrt.vertex);
       GNNvertex->setFitQuality(newvrt.chi2, 1);
@@ -382,22 +390,11 @@ namespace Rec {
       GNNvertex->auxdata<bool> ("isFake")    = true;
       
       ATH_MSG_DEBUG("Test 6");
-      //ATH_MSG_VERBOSE("with Chi2="<<newvrt.chi2<<" Ntrk="<<NPTR<<" trk1,2="<<newvrt.selTrk[0]<<", "<<newvrt.selTrk[1]);
-
+      
       } 
-       
-
       
     }
-    ATH_MSG_DEBUG("Finished for loop of K");
-    
-    //ATH_CHECK (evtStore()->record(GNNvertex.release(), "GNNvertex"));
-// Record the objects into the event store
-//   ANA_CHECK (evtStore()->record (GNNVtxs.release(), "GNNVtxs"));
-//   ANA_CHECK (evtStore()->record (GNNVtxsAux.release(), "GNNVtxsAux."));
    
-    
-    
     return finalVertices;
   }