diff --git a/NPSimulation/src/Target.cc b/NPSimulation/src/Target.cc
index 6883e3ba5080a32f91396645ffad733d3bff8d17..5a9b130de45313e79a493027b817d2a9021220a0 100644
--- a/NPSimulation/src/Target.cc
+++ b/NPSimulation/src/Target.cc
@@ -618,9 +618,19 @@ void Target::WriteDEDXTable(G4ParticleDefinition* Particle ,G4double Emin,G4doub
       << "Particle: " << Particle->GetParticleName() << "\tMaterial: " << m_TargetMaterial->GetName() << endl ;
 
     G4EmCalculator emCalculator;
+    // Tipical Range needed, if Emax is larger, then adapted
+    if(Emax < 25000) Emax = 25000;    
 
-    for (G4double E=Emin; E < Emax; E+=(Emax-Emin)/1000.){
+    double step = 1*keV;
+    double before = 0 ;
+    for (G4double E=Emin; E < Emax; E+=step){
       G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_TargetMaterial);
+
+      if(before){
+        if(abs(before-dedx)/abs(before)<0.01) step*=10; 
+      }
+
+      before = dedx;
       File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ;
     }
 
@@ -632,12 +642,19 @@ void Target::WriteDEDXTable(G4ParticleDefinition* Particle ,G4double Emin,G4doub
       File   << "Table from Geant4 generate using NPSimulation \t "
         << "Particle: " << Particle->GetParticleName() << "\tMaterial: " << m_WindowsMaterial->GetName() << endl ;
 
-      for (G4double E=Emin; E < Emax; E+=(Emax-Emin)/10.){
-        //                     G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_WindowsMaterial);
-        G4double dedx = emCalculator.ComputeDEDX(   E, Particle ,
-            "ionIoni",  m_WindowsMaterial);
+      step = 1*keV;
+      before = 0 ;
+      for (G4double E=Emin; E < Emax; E+=step){
+        G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle,m_WindowsMaterial);
+
+        if(before){
+          if(abs(before-dedx)/abs(before)<0.01) step*=10; 
+        }
+
+        before = dedx;
         File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ;
       }
+
     }
     File.close();