Index: classes/DelphesClasses.cc
===================================================================
--- classes/DelphesClasses.cc	(revision bc4bff069ecc654ac8bd124cdc85d16955f10539)
+++ classes/DelphesClasses.cc	(revision 2118a6a832cc93a9a5de40c77815686aab69655f)
@@ -121,4 +121,5 @@
   Charge(0), Mass(0.0),
   IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
+  ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
   Flavor(0), FlavorAlgo(0), FlavorPhys(0),
   BTag(0), BTagAlgo(0), BTagPhys(0),
@@ -127,5 +128,6 @@
   Momentum(0.0, 0.0, 0.0, 0.0),
   Position(0.0, 0.0, 0.0, 0.0),
-  InitialPosition(0.0, 0.0, 0.0, 0.0), 
+  PositionError(0.0, 0.0, 0.0, 0.0),
+  InitialPosition(0.0, 0.0, 0.0, 0.0),
   Area(0.0, 0.0, 0.0, 0.0),
   L(0),
@@ -253,4 +255,11 @@
   object.IsConstituent = IsConstituent;
   object.IsFromConversion = IsFromConversion;
+  object.ClusterIndex = ClusterIndex;
+  object.ClusterNDF = ClusterNDF;
+  object.ClusterSigma = ClusterSigma;
+  object.SumPT2 = SumPT2;
+  object.BTVSumPT2 = BTVSumPT2;
+  object.GenDeltaZ = GenDeltaZ;
+  object.GenSumPT2 = GenSumPT2;
   object.Flavor = Flavor;
   object.FlavorAlgo = FlavorAlgo;
@@ -270,5 +279,6 @@
   object.Momentum = Momentum;
   object.Position = Position;
-  object.InitialPosition = Position;
+  object.InitialPosition = InitialPosition;
+  object.PositionError = PositionError;
   object.Area = Area;
   object.L = L;
Index: modules/PileUpMerger.cc
===================================================================
--- modules/PileUpMerger.cc	(revision bc4bff069ecc654ac8bd124cdc85d16955f10539)
+++ modules/PileUpMerger.cc	(revision 2118a6a832cc93a9a5de40c77815686aab69655f)
@@ -115,8 +115,8 @@
   TDatabasePDG *pdg = TDatabasePDG::Instance();
   TParticlePDG *pdgParticle;
-  Int_t pid;
+  Int_t pid, nch, nvtx = -1;
   Float_t x, y, z, t, vx, vy;
-  Float_t px, py, pz, e;
-  Double_t dz, dphi, dt;
+  Float_t px, py, pz, e, pt;
+  Double_t dz, dphi, dt, sumpt2;
   Int_t numberOfEvents, event, numberOfParticles;
   Long64_t allEntries, entry;
@@ -137,4 +137,7 @@
   vy = 0.0;
   numberOfParticles = fInputArray->GetEntriesFast();
+  nch = 0;
+  sumpt2 = 0.0; 
+    
   while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
   {
@@ -143,7 +146,14 @@
     z = candidate->Position.Z();
     t = candidate->Position.T();
+    pt = candidate->Momentum.Pt();
     candidate->Position.SetZ(z + dz);
     candidate->Position.SetT(t + dt);
     fParticleOutputArray->Add(candidate);
+ 
+    if(TMath::Abs(candidate->Charge) >  1.0E-9)
+    {
+      nch++;    
+      sumpt2 += pt*pt;
+    }  
   }
 
@@ -154,8 +164,14 @@
   }
 
+  nvtx++;
   factory = GetFactory();
 
   vertex = factory->NewCandidate();
   vertex->Position.SetXYZT(vx, vy, dz, dt);
+  vertex->ClusterIndex = nvtx;
+  vertex->ClusterNDF = nch;
+  vertex->SumPT2 = sumpt2;
+  vertex->GenSumPT2 = sumpt2;  
+  
   fVertexOutputArray->Add(vertex);
 
@@ -201,5 +217,8 @@
     vx = 0.0;
     vy = 0.0;
+    
     numberOfParticles = 0;
+    sumpt2 = 0.0;
+    
     while(fReader->ReadParticle(pid, x, y, z, t, px, py, pz, e))
     {
@@ -227,6 +246,12 @@
       vx += candidate->Position.X();
       vy += candidate->Position.Y();
+      
       ++numberOfParticles;
-
+      if(TMath::Abs(candidate->Charge) >  1.0E-9)
+      {
+        nch++;    
+        sumpt2 += pt*pt;
+      } 
+       
       fParticleOutputArray->Add(candidate);
     }
@@ -237,12 +262,21 @@
       vy /= numberOfParticles;
     }
+    
+    nvtx++;
 
     vertex = factory->NewCandidate();
     vertex->Position.SetXYZT(vx, vy, dz, dt);
+    
+    vertex->ClusterIndex = nvtx; 
+    vertex->ClusterNDF = nch;
+    vertex->SumPT2 = sumpt2;
+    vertex->GenSumPT2 = sumpt2;
+    
     vertex->IsPU = 1;
 
     fVertexOutputArray->Add(vertex);
-  }
-}
-
-//------------------------------------------------------------------------------
+    
+  }
+}
+
+//------------------------------------------------------------------------------
Index: modules/VertexFinder.cc
===================================================================
--- modules/VertexFinder.cc	(revision bc4bff069ecc654ac8bd124cdc85d16955f10539)
+++ modules/VertexFinder.cc	(revision 2118a6a832cc93a9a5de40c77815686aab69655f)
@@ -278,7 +278,4 @@
                 continue;
                 
-              Double_t sz_tr =  track->second.at ("ez") *  track->second.at ("z");
-              Double_t sz_vt =  clusterIDToDouble.at (clusterIndex).at ("ez") *  clusterIDToDouble.at (clusterIndex).at ("z");
-                
               Double_t distance = fabs (clusterIDToDouble.at (clusterIndex).at ("z") - track->second.at ("z")) / hypot (clusterIDToDouble.at (clusterIndex).at ("ez"), track->second.at ("ez"));
               if (nearestDistance < 0.0 || distance < nearestDistance)
Index: modules/VertexSorter.cc
===================================================================
--- modules/VertexSorter.cc	(revision bc4bff069ecc654ac8bd124cdc85d16955f10539)
+++ modules/VertexSorter.cc	(revision 2118a6a832cc93a9a5de40c77815686aab69655f)
@@ -53,5 +53,5 @@
 void VertexSorter::Init()
 {
-  fInputArray = ImportArray(GetString("InputArray", "VertexFinder/clusters"));
+  fInputArray = ImportArray(GetString("InputArray", "VertexFinder/vertices"));
 
   fTrackInputArray = ImportArray(GetString("TrackInputArray", "VertexFinder/tracks"));
