Index: classes/ClassesLinkDef.h
===================================================================
--- classes/ClassesLinkDef.h	(revision 3a105e5968948572e68704454c96e1ef779e8003)
+++ classes/ClassesLinkDef.h	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -57,4 +57,6 @@
 #pragma link C++ class Electron+;
 #pragma link C++ class Muon+;
+#pragma link C++ class CscCluster+;
+
 #pragma link C++ class Jet+;
 #pragma link C++ class Track+;
@@ -66,3 +68,2 @@
 
 #endif
-
Index: classes/DelphesClasses.cc
===================================================================
--- classes/DelphesClasses.cc	(revision 3a105e5968948572e68704454c96e1ef779e8003)
+++ classes/DelphesClasses.cc	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -35,4 +35,5 @@
 CompBase *Electron::fgCompare = CompPT<Electron>::Instance();
 CompBase *Muon::fgCompare = CompPT<Muon>::Instance();
+
 CompBase *Jet::fgCompare = CompPT<Jet>::Instance();
 CompBase *Track::fgCompare = CompPT<Track>::Instance();
@@ -42,4 +43,5 @@
 CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::Instance();
 CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
+CompBase *CscCluster::fgCompare = CompE<CscCluster>::Instance();
 
 //------------------------------------------------------------------------------
@@ -218,4 +220,5 @@
   Position(0.0, 0.0, 0.0, 0.0),
   InitialPosition(0.0, 0.0, 0.0, 0.0),
+  DecayPosition(0.0, 0.0, 0.0, 0.0),
   PositionError(0.0, 0.0, 0.0, 0.0),
   Area(0.0, 0.0, 0.0, 0.0),
@@ -389,4 +392,5 @@
   object.Position = Position;
   object.InitialPosition = InitialPosition;
+  object.DecayPosition = DecayPosition;
   object.PositionError = PositionError;
   object.Area = Area;
@@ -527,4 +531,5 @@
   Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
   InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
+  DecayPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
   Area.SetXYZT(0.0, 0.0, 0.0, 0.0);
   TrackCovariance.Zero();
Index: classes/DelphesClasses.h
===================================================================
--- classes/DelphesClasses.h	(revision 3a105e5968948572e68704454c96e1ef779e8003)
+++ classes/DelphesClasses.h	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -158,4 +158,9 @@
   Float_t Z; // particle vertex position (z component) | hepevt.vhep[number][2]
 
+  Float_t decayX;
+  Float_t decayY;
+  Float_t decayZ;
+  Float_t decayT;
+
   static CompBase *fgCompare; //!
   const CompBase *GetCompare() const { return fgCompare; }
@@ -646,4 +651,33 @@
   ClassDef(HectorHit, 1)
 };
+//---------------------------------------------------------------------------
+
+class CscCluster: public SortableObject
+{
+public:
+  Float_t Eta; // eta of LLP
+  Float_t Phi; // phi of LLP
+  Float_t PT; // pt of LLP
+  Float_t Px;// px of LLP
+  Float_t Py;// py of LLP
+  Float_t Pz;// pz of LLP
+  Float_t E; // E of LLP
+  Float_t Ehad; // had energy of LLP
+  Float_t Eem; // em energy of LLP
+  Float_t pid; // LLP pid
+  Float_t T; // LLP decay time-photon travel time
+  Float_t X; // LLP decay x
+  Float_t Y; //  LLP decay y
+  Float_t Z; //  LLP decay z
+  Float_t R; //  LLP decay z
+  Float_t beta; // LLP beta
+  Float_t ctau; //LLP ctau
+
+
+  static CompBase *fgCompare; //!
+  const CompBase *GetCompare() const { return fgCompare; }
+
+  ClassDef(CscCluster, 5)
+};
 
 //---------------------------------------------------------------------------
@@ -690,5 +724,5 @@
   Float_t DeltaPhi;
 
-  TLorentzVector Momentum, Position, InitialPosition, PositionError, Area;
+  TLorentzVector Momentum, Position, InitialPosition, PositionError, DecayPosition, Area;
 
   Float_t L; // path length
Index: classes/DelphesCscClusterFormula.cc
===================================================================
--- classes/DelphesCscClusterFormula.cc	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
+++ classes/DelphesCscClusterFormula.cc	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -0,0 +1,83 @@
+/*
+ *  Delphes: a framework for fast simulation of a generic collider experiment
+ *  Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "classes/DelphesCscClusterFormula.h"
+#include "classes/DelphesClasses.h"
+
+#include "TString.h"
+
+#include <stdexcept>
+#include <iostream>
+
+using namespace std;
+
+//------------------------------------------------------------------------------
+
+DelphesCscClusterFormula::DelphesCscClusterFormula() :
+  TFormula()
+{
+}
+
+//------------------------------------------------------------------------------
+
+DelphesCscClusterFormula::DelphesCscClusterFormula(const char *name, const char *expression) :
+  TFormula()
+{
+}
+
+//------------------------------------------------------------------------------
+
+DelphesCscClusterFormula::~DelphesCscClusterFormula()
+{
+}
+
+//------------------------------------------------------------------------------
+
+Int_t DelphesCscClusterFormula::Compile(const char *expression)
+{
+  TString buffer;
+  const char *it;
+  for(it = expression; *it; ++it)
+  {
+    if(*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n' || *it == '\\') continue;
+    buffer.Append(*it);
+  }
+  buffer.ReplaceAll("decayR", "x");
+  buffer.ReplaceAll("decayZ", "y");
+  buffer.ReplaceAll("Ehad", "z");
+  buffer.ReplaceAll("Eem", "t");
+
+#if ROOT_VERSION_CODE < ROOT_VERSION(6, 3, 0)
+  TFormula::SetMaxima(100000, 1000, 1000000);
+#endif
+  if(TFormula::Compile(buffer) != 0)
+  {
+    throw runtime_error("Invalid formula.");
+  }
+  return 0;
+}
+
+//------------------------------------------------------------------------------
+
+Double_t DelphesCscClusterFormula::Eval(Double_t decayR, Double_t decayZ, Double_t Ehad, Double_t Eem)
+{
+  Double_t x[4] = {decayR, decayZ, Ehad, Eem};
+  return EvalPar(x);
+}
+
+//------------------------------------------------------------------------------
Index: classes/DelphesCscClusterFormula.h
===================================================================
--- classes/DelphesCscClusterFormula.h	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
+++ classes/DelphesCscClusterFormula.h	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -0,0 +1,40 @@
+/*
+ *  Delphes: a framework for fast simulation of a generic collider experiment
+ *  Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef DelphesCscClusterFormula_h
+#define DelphesCscClusterFormula_h
+
+#include "TFormula.h"
+
+class Candidate;
+
+class DelphesCscClusterFormula: public TFormula
+{
+public:
+  DelphesCscClusterFormula();
+
+  DelphesCscClusterFormula(const char *name, const char *expression);
+
+  ~DelphesCscClusterFormula();
+
+  Int_t Compile(const char *expression);
+
+  Double_t Eval(Double_t deltaR, Double_t deltaZ = 0, Double_t Ehad = 0, Double_t Eem = 0);
+};
+
+#endif /* DelphesCscClusterFormula_h */
Index: classes/DelphesHepMC2Reader.cc
===================================================================
--- classes/DelphesHepMC2Reader.cc	(revision 3a105e5968948572e68704454c96e1ef779e8003)
+++ classes/DelphesHepMC2Reader.cc	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -438,4 +438,5 @@
 {
   Candidate *candidate;
+  Candidate *candidateDaughter;
   map<int, pair<int, int> >::iterator itMotherMap;
   map<int, pair<int, int> >::iterator itDaughterMap;
@@ -446,4 +447,5 @@
     candidate = static_cast<Candidate *>(allParticleOutputArray->At(i));
 
+
     if(candidate->M1 > 0)
     {
@@ -477,13 +479,20 @@
         candidate->D1 = -1;
         candidate->D2 = -1;
-      }
+        const TLorentzVector &decayPosition = candidate->Position;
+        candidate->DecayPosition.SetXYZT(decayPosition.X(), decayPosition.Y(), decayPosition.Z(), decayPosition.T());// decay position
+     }
       else
       {
         candidate->D1 = itDaughterMap->second.first;
         candidate->D2 = itDaughterMap->second.second;
-      }
-    }
-  }
-}
-
-//---------------------------------------------------------------------------
+        candidateDaughter = static_cast<Candidate *>(allParticleOutputArray->At(candidate->D1));
+        const TLorentzVector &decayPosition = candidateDaughter->Position;
+        candidate->DecayPosition.SetXYZT(decayPosition.X(), decayPosition.Y(), decayPosition.Z(), decayPosition.T());// decay position
+        
+
+      }
+    }
+  }
+}
+
+//---------------------------------------------------------------------------
Index: classes/DelphesHepMC3Reader.cc
===================================================================
--- classes/DelphesHepMC3Reader.cc	(revision 3a105e5968948572e68704454c96e1ef779e8003)
+++ classes/DelphesHepMC3Reader.cc	(revision 4564cba9fa0180ca6c293da8cea545291a6d0116)
@@ -458,4 +458,5 @@
   TObjArray *array;
   Candidate *candidate;
+  Candidate *candidateDaughter;
   TParticlePDG *pdgParticle;
   int pdgCode;
@@ -573,4 +574,6 @@
         candidate->D1 = -1;
         candidate->D2 = -1;
+        const TLorentzVector &decayPosition = candidate->Position;
+        candidate->DecayPosition.SetXYZT(decayPosition.X(), decayPosition.Y(), decayPosition.Z(), decayPosition.T());// decay position
       }
       else
@@ -578,8 +581,11 @@
         candidate->D1 = itDaughterMap->second.first;
         candidate->D2 = itDaughterMap->second.second;
-      }
-    }
-  }
-}
-
-//---------------------------------------------------------------------------
+        candidateDaughter = static_cast<Candidate *>(allParticleOutputArray->At(candidate->D1));
+        const TLorentzVector &decayPosition = candidateDaughter->Position;
+        candidate->DecayPosition.SetXYZT(decayPosition.X(), decayPosition.Y(), decayPosition.Z(), decayPosition.T());// decay position
+      }
+    }
+  }
+}
+
+//---------------------------------------------------------------------------
