Index: trunk/classes/ClassesLinkDef.h
===================================================================
--- trunk/classes/ClassesLinkDef.h	(revision 1322)
+++ trunk/classes/ClassesLinkDef.h	(revision 1323)
@@ -34,4 +34,5 @@
 #pragma link C++ class HepMCEvent+;
 #pragma link C++ class GenParticle+;
+#pragma link C++ class Vertex+;
 #pragma link C++ class MissingET+;
 #pragma link C++ class ScalarHT+;
Index: trunk/classes/DelphesClasses.h
===================================================================
--- trunk/classes/DelphesClasses.h	(revision 1322)
+++ trunk/classes/DelphesClasses.h	(revision 1323)
@@ -144,4 +144,17 @@
 //---------------------------------------------------------------------------
 
+class Vertex: public TObject
+{
+public:
+  Float_t T; // vertex position (t component)
+  Float_t X; // vertex position (x component)
+  Float_t Y; // vertex position (y component)
+  Float_t Z; // vertex position (z component)
+
+  ClassDef(Vertex, 1)
+};
+
+//---------------------------------------------------------------------------
+
 class MissingET: public TObject
 {
Index: trunk/examples/delphes_card_CMS_PileUp.tcl
===================================================================
--- trunk/examples/delphes_card_CMS_PileUp.tcl	(revision 1322)
+++ trunk/examples/delphes_card_CMS_PileUp.tcl	(revision 1323)
@@ -631,4 +631,5 @@
   add Branch ScalarHT/energy ScalarHT ScalarHT
   add Branch Rho/rho Rho Rho
-}
-
+  add Branch PileUpMerger/Vertices Vertex Vertex
+}
+
Index: trunk/modules/PileUpMerger.cc
===================================================================
--- trunk/modules/PileUpMerger.cc	(revision 1322)
+++ trunk/modules/PileUpMerger.cc	(revision 1323)
@@ -70,5 +70,6 @@
 
   // create output arrays
-  fOutputArray = ExportArray(GetString("OutputArray", "stableParticles"));
+  fParticleOutputArray = ExportArray(GetString("ParticleOutputArray", "stableParticles"));
+  fVertexOutputArray = ExportArray(GetString("VertexOutputArray", "vertices"));
 }
 
@@ -98,5 +99,5 @@
   while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
   {
-    fOutputArray->Add(candidate);
+    fParticleOutputArray->Add(candidate);
   }
 
@@ -131,4 +132,8 @@
     dphi = gRandom->Uniform(-TMath::Pi(), TMath::Pi());
 
+    candidate = factory->NewCandidate();
+    candidate->Position.SetXYZT(0.0, 0.0, dz, 0.0);
+    fVertexOutputArray->Add(candidate);
+
     while(fReader->ReadParticle(pid, x, y, z, t, px, py, pz, e))
     {
@@ -151,5 +156,5 @@
       candidate->Position.RotateZ(dphi);
 
-      fOutputArray->Add(candidate);
+      fParticleOutputArray->Add(candidate);
     }
   }
Index: trunk/modules/PileUpMerger.h
===================================================================
--- trunk/modules/PileUpMerger.h	(revision 1322)
+++ trunk/modules/PileUpMerger.h	(revision 1323)
@@ -43,5 +43,6 @@
   const TObjArray *fInputArray; //!
 
-  TObjArray *fOutputArray; //!
+  TObjArray *fParticleOutputArray; //!
+  TObjArray *fVertexOutputArray; //!
 
   ClassDef(PileUpMerger, 1)
Index: trunk/modules/TreeWriter.cc
===================================================================
--- trunk/modules/TreeWriter.cc	(revision 1322)
+++ trunk/modules/TreeWriter.cc	(revision 1323)
@@ -213,4 +213,27 @@
 //------------------------------------------------------------------------------
 
+void TreeWriter::ProcessVertices(ExRootTreeBranch *branch, TObjArray *array)
+{
+  TIter iterator(array);
+  Candidate *candidate = 0;
+  Vertex *entry = 0;
+
+  // loop over all vertices
+  iterator.Reset();
+  while((candidate = static_cast<Candidate*>(iterator.Next())))
+  {
+    const TLorentzVector &position = candidate->Position;
+
+    entry = static_cast<Vertex*>(branch->NewEntry());
+
+    entry->X = position.X();
+    entry->Y = position.Y();
+    entry->Z = position.Z();
+    entry->T = position.T();
+  }
+}
+
+//------------------------------------------------------------------------------
+
 void TreeWriter::ProcessTracks(ExRootTreeBranch *branch, TObjArray *array)
 {
@@ -221,5 +244,5 @@
   Double_t pt, signz, cosTheta, eta, rapidity;
 
-  // loop over all jets
+  // loop over all tracks
   iterator.Reset();
   while((candidate = static_cast<Candidate*>(iterator.Next())))
@@ -280,5 +303,5 @@
   Double_t pt, signPz, cosTheta, eta, rapidity;
 
-  // loop over all jets
+  // loop over all towers
   iterator.Reset();
   while((candidate = static_cast<Candidate*>(iterator.Next())))
Index: trunk/modules/TreeWriter.h
===================================================================
--- trunk/modules/TreeWriter.h	(revision 1322)
+++ trunk/modules/TreeWriter.h	(revision 1323)
@@ -41,4 +41,5 @@
 
   void ProcessParticles(ExRootTreeBranch *branch, TObjArray *array);
+  void ProcessVertices(ExRootTreeBranch *branch, TObjArray *array);
   void ProcessTracks(ExRootTreeBranch *branch, TObjArray *array);
   void ProcessTowers(ExRootTreeBranch *branch, TObjArray *array);
