Index: modules/Calorimeter.cc
===================================================================
--- modules/Calorimeter.cc	(revision 9cc5aebd473f566f2db87baa902b47d3c14e5481)
+++ modules/Calorimeter.cc	(revision d1678fd35cd10951a9db1a8f24c6be1010f090d4)
@@ -450,4 +450,5 @@
 
     fTower->AddCandidate(particle);
+    fTower->Position = position;
   }
 
@@ -461,5 +462,5 @@
 {
   Candidate *track, *tower, *mother;
-  Double_t energy, pt, eta, phi;
+  Double_t energy, pt, eta, phi, r;
   Double_t ecalEnergy, hcalEnergy;
   Double_t ecalNeutralEnergy, hcalNeutralEnergy;
@@ -511,5 +512,5 @@
   for(size_t i = 0; i < fTower->ECalEnergyTimePairs.size(); ++i)
   {
-    weight = TMath::Sqrt(fTower->ECalEnergyTimePairs[i].first);
+    weight = TMath::Power((fTower->ECalEnergyTimePairs[i].first),2);
     sumWeightedTime += weight * fTower->ECalEnergyTimePairs[i].second;
     sumWeight += weight;
@@ -517,11 +518,13 @@
   }
 
+  r = TMath::Sqrt(fTower->Position.X()*fTower->Position.X()+fTower->Position.Y()*fTower->Position.Y());
+
   if(sumWeight > 0.0)
   {
-    fTower->Position.SetPtEtaPhiE(1.0, eta, phi, sumWeightedTime / sumWeight);
+    fTower->Position.SetPtEtaPhiE(r, eta, phi, sumWeightedTime / sumWeight);
   }
   else
   {
-    fTower->Position.SetPtEtaPhiE(1.0, eta, phi, 999999.9);
+    fTower->Position.SetPtEtaPhiE(r, eta, phi, 999999.9);
   }
 
Index: modules/DualReadoutCalorimeter.cc
===================================================================
--- modules/DualReadoutCalorimeter.cc	(revision 9cc5aebd473f566f2db87baa902b47d3c14e5481)
+++ modules/DualReadoutCalorimeter.cc	(revision d1678fd35cd10951a9db1a8f24c6be1010f090d4)
@@ -466,4 +466,5 @@
 
     fTower->AddCandidate(particle);
+    fTower->Position = position;
   }
 
@@ -478,5 +479,5 @@
 
   Candidate *track, *tower, *mother;
-  Double_t energy, pt, eta, phi;
+  Double_t energy, pt, eta, phi, r;
   Double_t ecalEnergy, hcalEnergy;
   Double_t ecalNeutralEnergy, hcalNeutralEnergy, neutralEnergy;
@@ -494,15 +495,4 @@
   if(!fTower) return;
 
-
-  //if (fHCalTowerEnergy < 30 && fECalTowerEnergy < 30) return;
-  //cout<<"----------- New tower ---------"<<endl;
-
-
-  // here we change behaviour w.r.t to standard calorimeter. Start with worse case scenario. If fHCalTowerEnergy > 0, assume total energy smeared by HCAL resolution.
-  // For example, if overlapping charged pions and photons take hadronic resolution as combined measurement
-
-  // if no hadronic fraction at all, then use ECAL resolution
-
-  //cout<<"fECalTowerEnergy: "<<fECalTowerEnergy<<", fHCalTowerEnergy: "<<fHCalTowerEnergy<<", Eta: "<<fTowerEta<<endl;
 
   // if no hadronic energy, use ECAL resolution
@@ -562,5 +552,5 @@
   for(size_t i = 0; i < fTower->ECalEnergyTimePairs.size(); ++i)
   {
-    weight = TMath::Sqrt(fTower->ECalEnergyTimePairs[i].first);
+    weight = TMath::Power((fTower->ECalEnergyTimePairs[i].first),2);
     sumWeightedTime += weight * fTower->ECalEnergyTimePairs[i].second;
     sumWeight += weight;
@@ -568,11 +558,13 @@
   }
 
+  r = TMath::Sqrt(fTower->Position.X()*fTower->Position.X()+fTower->Position.Y()*fTower->Position.Y());
+
   if(sumWeight > 0.0)
   {
-    fTower->Position.SetPtEtaPhiE(1.0, eta, phi, sumWeightedTime/sumWeight);
+    fTower->Position.SetPtEtaPhiE(r, eta, phi, sumWeightedTime/sumWeight);
   }
   else
   {
-    fTower->Position.SetPtEtaPhiE(1.0, eta, phi, 999999.9);
+    fTower->Position.SetPtEtaPhiE(r, eta, phi, 999999.9);
   }
 
Index: modules/SimpleCalorimeter.cc
===================================================================
--- modules/SimpleCalorimeter.cc	(revision 9cc5aebd473f566f2db87baa902b47d3c14e5481)
+++ modules/SimpleCalorimeter.cc	(revision d1678fd35cd10951a9db1a8f24c6be1010f090d4)
@@ -394,8 +394,10 @@
     fTowerEnergy += energy;
 
-    fTowerTime += energy * position.T();
-    fTowerTimeWeight += energy;
+    fTowerTime += energy * energy * position.T(); //sigma_t ~ 1/E
+    fTowerTimeWeight += energy * energy;
 
     fTower->AddCandidate(particle);
+    fTower->Position = position;
+
   }
 
@@ -409,5 +411,5 @@
 {
   Candidate *tower, *track, *mother;
-  Double_t energy, neutralEnergy, pt, eta, phi;
+  Double_t energy, neutralEnergy, pt, eta, phi, r;
   Double_t sigma, neutralSigma;
   Double_t time;
@@ -442,6 +444,7 @@
 
   pt = energy / TMath::CosH(eta);
-
-  fTower->Position.SetPtEtaPhiE(1.0, eta, phi, time);
+  r = TMath::Sqrt(fTower->Position.X()*fTower->Position.X()+fTower->Position.Y()*fTower->Position.Y());
+  
+  fTower->Position.SetPtEtaPhiE(r, eta, phi, time);
   fTower->Momentum.SetPtEtaPhiE(pt, eta, phi, energy);
 
