diff --git a/NPLib/Detectors/Epic/TEpicData.h b/NPLib/Detectors/Epic/TEpicData.h
index f1489b5dbd47060f90e8f66e8d4a24a5c0990c1f..98fa084c3d0b47c1b5f3e30f6a3c8b8a10acb681 100644
--- a/NPLib/Detectors/Epic/TEpicData.h
+++ b/NPLib/Detectors/Epic/TEpicData.h
@@ -40,8 +40,8 @@ class TEpicData : public TObject {
         UShort_t    AnodeNbr;
         Double_t    Q1;
         Double_t    Time;
-        // vector of {Zstep, DEstep, DTstep}
-        std::vector<Double_t> PosZ;
+        // vector of {DEstep, DTstep} : 
+        // attention steps are modified to have a fix width along the z axis
         std::vector<Double_t> DE;
         std::vector<Double_t> DT; // DT=Ti-T0, with T0=Tfission or Tfirst_alpha
    
@@ -51,7 +51,6 @@ class TEpicData : public TObject {
         UShort_t GetAnodeNbr() const { return AnodeNbr; }
         Double_t GetQ1() const { return Q1; }
         Double_t GetTime() const { return Time; }
-        const std::vector<Double_t>& GetPosZ() const { return PosZ; }
         const std::vector<Double_t>& GetDE() const { return DE; }
         const std::vector<Double_t>& GetDT() const { return DT; }
    };
@@ -85,8 +84,8 @@ class TEpicData : public TObject {
   public:
     //////////////////////    SETTERS    ////////////////////////
     void Set(const int& tid, const string& name, const UShort_t& n, const Double_t& q1,  const Double_t& t,
-             const std::vector<double>& z, const std::vector<double>& de, const std::vector<double>& dt) {
-        fEpic_Data.push_back({tid, name, n, q1, t, z, de, dt});
+             const std::vector<double>& de, const std::vector<double>& dt) {
+        fEpic_Data.push_back({tid, name, n, q1, t, de, dt});
     }
     const EpicAnodeData& operator[](const unsigned int& i) const {return fEpic_Data[i];}
 
@@ -97,7 +96,6 @@ class TEpicData : public TObject {
     UShort_t GetAnodeNbr(const unsigned short& i) const { return fEpic_Data[i].AnodeNbr; }
     Double_t GetQ1(const unsigned int& i) const         { return fEpic_Data[i].Q1; }
     Double_t GetTime(const unsigned int& i) const       { return fEpic_Data[i].Time; }
-    const std::vector<Double_t>& GetPosZ(const unsigned int& i)         const { return fEpic_Data[i].PosZ; }
     const std::vector<Double_t>& GetDE(const unsigned int& i)           const { return fEpic_Data[i].DE; }
     const std::vector<Double_t>& GetDT(const unsigned int& i)           const { return fEpic_Data[i].DT; }
   //////////////////////////////////////////////////////////////
diff --git a/NPLib/Detectors/Epic/TEpicPhysics.cxx b/NPLib/Detectors/Epic/TEpicPhysics.cxx
index 77a85451a86c21ec1a22febc0b2693ff3403d7d0..58bfd2de37c38ccea14049c89054dc77a6130643 100644
--- a/NPLib/Detectors/Epic/TEpicPhysics.cxx
+++ b/NPLib/Detectors/Epic/TEpicPhysics.cxx
@@ -116,7 +116,6 @@ void TEpicPhysics::PreTreat() {
       m_PreTreatedData->Set(m_EventData->GetTrackID(i),
                             m_EventData->GetParticleName(i),
                             AnodeNumber, Q1, Time,
-                            m_EventData->GetPosZ(i),
                             m_EventData->GetDE(i),
                             m_EventData->GetDT(i));
     }
diff --git a/NPSimulation/Detectors/Epic/Epic.cc b/NPSimulation/Detectors/Epic/Epic.cc
index 40a827939af59a437281e79b7ef891d351d31be8..75896713dd4f85ab291eb7414b10cacfcc311e8a 100644
--- a/NPSimulation/Detectors/Epic/Epic.cc
+++ b/NPSimulation/Detectors/Epic/Epic.cc
@@ -539,7 +539,6 @@ void Epic::ReadSensitive(const G4Event* ){
 
   int previous_trackID = -1;
   unsigned int size = Scorer->GetMult();
-  //cout << endl << " ================= Epic::ReadSensitive() Scorer size = " << size << endl;
   for(unsigned int i = 0 ; i < size ; i++){
     vector<unsigned int> level = Scorer->GetLevel(i); 
     //double Time = RandGauss::shoot(Scorer->GetTime(i),Epic_NS::ResoTime);
@@ -556,17 +555,11 @@ void Epic::ReadSensitive(const G4Event* ){
     double posZ_anode = (1-m_nA)*(m_Distance_AK*mm + m_Thickness_K*mm) - std::trunc(0.5*m_nA)*(m_InterDistance_KK*mm + thickness_A); 
     posZ_anode += m_mapping_A[Anode] * (2. * (m_Distance_AK*mm + m_Thickness_K*mm) + m_InterDistance_KK*mm + thickness_A) ;
       
-    //// FIXME : need a fixed binning in dz of 25*um and in time
-    //// FIXME : fill another event class FasterData with only the vectors sorted in time
-  
-    
     // === Epic Data
     int    trackID = -1;
     string name_pertrackID = "";
     double influence_pertrackID = 0;
     double time_pertrackID = -1;
-        
-
     vector<double> dz;
     vector<double> de;
     vector<double> dt;
@@ -587,41 +580,51 @@ void Epic::ReadSensitive(const G4Event* ){
       if(end_of_new_trackID == true || j==step_name.size()-1) {
         if(name_pertrackID!="e-" && name_pertrackID!="anti_nu_e"){
           int num_bins = (int)(std::ceil( (m_Distance_AK-dz.at(dz.size()-1)) / (25.*um) )) ;
-    	    vector<double> rebinned_dz;  rebinned_dz.resize(num_bins);      
-    	    vector<double> rebinned_de;  rebinned_de.assign(num_bins, 0.0);
-    	    vector<double> rebinned_dt;  rebinned_dt.resize(num_bins); 
+    	    vector<double> rebinned_de(num_bins, 0.0);
+    	    vector<double> rebinned_dt(num_bins, 0.0); 
+          vector<double> rebinned_mult(num_bins, 0.0);
           double bin_Limits[num_bins+1];
           for(int bin=0; bin<=num_bins; bin++) bin_Limits[bin] = m_Distance_AK*mm - bin * (25.*um);
 
-          rebinned_de[0] = de.at(0);
+          rebinned_de[0] += de.at(0); rebinned_dt[0] += dt.at(0); rebinned_mult[0] += 1.;
           int bin_current = 0;
           for(int step=1; step<dz.size()-1; step++){
-            double dzmax = 0.5*(dz.at(step-1) + dz.at(step));
-            double dzmin = 0.5*(dz.at(step+1) + dz.at(step));
+            double dzmax = 0.5*(dz[step-1] + dz[step]);
+            double dzmin = 0.5*(dz[step+1] + dz[step]);
             for(int bin=bin_current; bin<num_bins; bin++){
               if(bin_Limits[bin] >= dzmax && dzmax >  bin_Limits[bin+1] && bin_Limits[bin] >  dzmin && dzmin >= bin_Limits[bin+1]){
                 bin_current = bin;
-                rebinned_de[bin] += de.at(step);
+                rebinned_de[bin] += de[step]; 
+                rebinned_dt[bin] += dt[step]; 
+                rebinned_mult[bin] += 1.;
                 break;
               }
               else if(bin<num_bins-1 && bin_Limits[bin] >= dzmax && dzmax >  bin_Limits[bin+1] && bin_Limits[bin+1] > dzmin && dzmin >= bin_Limits[bin+2]){
                 bin_current = bin;
                 double weight = (dzmax-bin_Limits[bin+1])/(dzmax-dzmin);
-                rebinned_de[bin] += weight * de.at(step);
-                rebinned_de[bin+1] += (1-weight) * de.at(step);
+                rebinned_de[bin] += weight * de[step];   rebinned_de[bin+1] += (1.-weight) * de[step]; 
+                rebinned_dt[bin] += weight * dt[step];   rebinned_dt[bin+1] += (1.-weight) * dt[step];
+                rebinned_mult[bin] += weight ;              rebinned_mult[bin+1] += 1. - weight ;      
                 break;
               }
 	          }
 	        }
-          rebinned_de[num_bins-1] += de.at(dz.at(dz.size()-1));
+          rebinned_de[num_bins-1] += de[dz[dz.size()-1]]; 
+          rebinned_dt[num_bins-1] += dt[dz[dz.size()-1]]; 
+          rebinned_mult[num_bins-1] += 1.;
+          for(int i=0; i<num_bins-1; i++){ 
+            if(rebinned_mult[i]>0) rebinned_dt[i] = rebinned_dt[i] / rebinned_mult[i] ;
+          }
           
           m_Event->Set(trackID,
                        name_pertrackID,
 		                   m_mapping_A[Anode],    // set anode number
                        influence_pertrackID,  // set Q1 FF or alpha only 
                        time_pertrackID,       // set Time
-                       dz, rebinned_de, dt);
-    	  }
+                       rebinned_de, rebinned_dt);
+    	    rebinned_de.clear();
+          rebinned_dt.clear();
+        }
 	      trackID = step_trackID.at(j);
         name_pertrackID = step_name.at(j);
 	      influence_pertrackID = 0;
@@ -639,13 +642,14 @@ void Epic::ReadSensitive(const G4Event* ){
     }// end of loop over j
   }// end of loop over i
 
+  //// FIXME : fill another event class FasterData with only the vectors sorted in time
   //// FIXME : fill the FasterData
-  if(m_Event->GetMultiplicity()>0){
-    // fill clean-up data to FasterData sorted by time and not by position
-    vector<double> dt_allTracks;
-    vector<double> dz_allTracks;
-    vector<double> de_allTracks;
-  }
+  ///if(m_Event->GetMultiplicity()>0){
+  ///  // fill clean-up data to FasterData sorted by time and not by position
+  ///  vector<double> dt_allTracks;
+  ///  vector<double> dz_allTracks;
+  ///  vector<double> de_allTracks;
+  ///}
 
 }