Index: modules/AngularSmearing.cc
===================================================================
--- modules/AngularSmearing.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/AngularSmearing.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -100,5 +100,5 @@
 {
   Candidate *candidate, *mother;
-  Double_t pt, eta, phi;
+  Double_t pt, eta, phi, e;
 
   fItInputArray->Reset();
@@ -110,9 +110,10 @@
     phi = candidatePosition.Phi();
     pt = candidateMomentum.Pt();
+    e = candidateMomentum.E();
 
     // apply smearing formula for eta,phi
 
-    eta = gRandom->Gaus(eta, fFormulaEta->Eval(pt, eta));
-    phi = gRandom->Gaus(phi, fFormulaPhi->Eval(pt, eta));
+    eta = gRandom->Gaus(eta, fFormulaEta->Eval(pt, eta, phi, e));
+    phi = gRandom->Gaus(phi, fFormulaPhi->Eval(pt, eta, phi, e));
     
     if(pt <= 0.0) continue;
Index: modules/BTagging.cc
===================================================================
--- modules/BTagging.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/BTagging.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -171,5 +171,5 @@
 {
   Candidate *jet, *parton;
-  Double_t pt, eta, phi;
+  Double_t pt, eta, phi, e;
   TObjArray *partonArray;
   map< Int_t, DelphesFormula * >::iterator itEfficiencyMap;
@@ -194,5 +194,6 @@
     phi = jetMomentum.Phi();
     pt = jetMomentum.Pt();
-
+    e = jetMomentum.E();
+    
     // loop over all input partons
     itPartonArray.Reset();
@@ -218,7 +219,7 @@
 
     // apply an efficency formula
-    jet->BTag |= (gRandom->Uniform() <= formula->Eval(pt, eta)) << fBitNumber;
-  }
-}
-
-//------------------------------------------------------------------------------
+    jet->BTag |= (gRandom->Uniform() <= formula->Eval(pt, eta, phi, e)) << fBitNumber;
+  }
+}
+
+//------------------------------------------------------------------------------
Index: modules/Efficiency.cc
===================================================================
--- modules/Efficiency.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/Efficiency.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -96,5 +96,5 @@
 { 
   Candidate *candidate;
-  Double_t pt, eta, phi;
+  Double_t pt, eta, phi, e;
 
   fItInputArray->Reset();
@@ -106,7 +106,8 @@
     phi = candidatePosition.Phi();
     pt = candidateMomentum.Pt();
+    e = candidateMomentum.E();
 
     // apply an efficency formula
-    if(gRandom->Uniform() > fFormula->Eval(pt, eta)) continue;
+    if(gRandom->Uniform() > fFormula->Eval(pt, eta, phi, e)) continue;
     
     fOutputArray->Add(candidate);
Index: modules/EnergyScale.cc
===================================================================
--- modules/EnergyScale.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/EnergyScale.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -104,5 +104,5 @@
     momentum = candidate->Momentum;
 
-    scale = fFormula->Eval(momentum.Pt(), momentum.Eta());
+    scale = fFormula->Eval(momentum.Pt(), momentum.Eta(), momentum.Phi(), momentum.E());
 
     if(scale > 0.0) momentum *= scale;
Index: modules/EnergySmearing.cc
===================================================================
--- modules/EnergySmearing.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/EnergySmearing.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -96,5 +96,5 @@
 {
   Candidate *candidate, *mother;
-  Double_t energy, eta, phi;
+  Double_t pt, energy, eta, phi;
 
   fItInputArray->Reset();
@@ -103,4 +103,6 @@
     const TLorentzVector &candidatePosition = candidate->Position;
     const TLorentzVector &candidateMomentum = candidate->Momentum;
+    
+    pt = candidatePosition.Pt();
     eta = candidatePosition.Eta();
     phi = candidatePosition.Phi();
@@ -108,5 +110,5 @@
  
     // apply smearing formula
-    energy = gRandom->Gaus(energy, fFormula->Eval(0.0, eta, 0.0, energy));
+    energy = gRandom->Gaus(energy, fFormula->Eval(pt, eta, phi, energy));
      
     if(energy <= 0.0) continue;
Index: modules/IdentificationMap.cc
===================================================================
--- modules/IdentificationMap.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/IdentificationMap.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -127,5 +127,5 @@
 {
   Candidate *candidate;
-  Double_t pt, eta, phi;
+  Double_t pt, eta, phi, e;
   TMisIDMap::iterator itEfficiencyMap;
   pair <TMisIDMap::iterator, TMisIDMap::iterator> range;
@@ -143,4 +143,6 @@
     phi = candidatePosition.Phi();
     pt = candidateMomentum.Pt();
+    e = candidateMomentum.E();
+   
     pdgCodeIn = candidate->PID;
     charge = candidate->Charge;
@@ -164,5 +166,5 @@
       pdgCodeOut = (it->second).first;
 
-      p = formula->Eval(pt, eta);
+      p = formula->Eval(pt, eta, phi, e);
 
       if(total <= r && r < total + p)
Index: modules/ImpactParameterSmearing.cc
===================================================================
--- modules/ImpactParameterSmearing.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/ImpactParameterSmearing.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -97,5 +97,5 @@
   Candidate *candidate, *particle, *mother;
   Double_t xd, yd, zd, dxy, sx, sy, sz, ddxy;
-  Double_t pt, eta, px, py;
+  Double_t pt, eta, px, py, phi, e;
 
   fItInputArray->Reset();
@@ -110,4 +110,7 @@
     eta = candidateMomentum.Eta();
     pt = candidateMomentum.Pt();
+    phi = candidateMomentum.Phi();
+    e = candidateMomentum.E();
+    
     px = candidateMomentum.Px();
     py = candidateMomentum.Py();
@@ -119,7 +122,7 @@
 
     // calculate smeared values
-    sx = gRandom->Gaus(0.0, fFormula->Eval(pt, eta));
-    sy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta));
-    sz = gRandom->Gaus(0.0, fFormula->Eval(pt, eta));
+    sx = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
+    sy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
+    sz = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
 
     xd += sx;
@@ -130,5 +133,5 @@
     dxy = (xd*py - yd*px)/pt;
 
-    ddxy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta));
+    ddxy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
 
     // fill smeared values in candidate
Index: modules/MomentumSmearing.cc
===================================================================
--- modules/MomentumSmearing.cc	(revision 4a93785a0cfeb2fb2b60fb004c8ae34d200c84a8)
+++ modules/MomentumSmearing.cc	(revision e8070b697ef43b2f34f51f11b3c6e4cd4fa2473c)
@@ -96,5 +96,5 @@
 {
   Candidate *candidate, *mother;
-  Double_t pt, eta, phi;
+  Double_t pt, eta, phi, e;
 
   fItInputArray->Reset();
@@ -106,7 +106,8 @@
     phi = candidatePosition.Phi();
     pt = candidateMomentum.Pt();
+    e = candidateMomentum.E();
 
     // apply smearing formula
-    pt = gRandom->Gaus(pt, fFormula->Eval(pt, eta) * pt);
+    pt = gRandom->Gaus(pt, fFormula->Eval(pt, eta, phi, e) * pt);
     
     if(pt <= 0.0) continue;
