diff --git a/Simulation/DetSimSD/src/CaloSensitiveDetector.cpp b/Simulation/DetSimSD/src/CaloSensitiveDetector.cpp
index 11fb8cddabccf91713e068f0a4396772079ce2c1..950c4c45f91c1084f21fc95982fb533ae6b7a596 100644
--- a/Simulation/DetSimSD/src/CaloSensitiveDetector.cpp
+++ b/Simulation/DetSimSD/src/CaloSensitiveDetector.cpp
@@ -33,6 +33,7 @@ CaloSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*) {
     // std::cout << "CaloSensitiveDetector::ProcessHits" << std::endl;
 
     dd4hep::sim::Geant4StepHandler h(step);
+    if(m_applyBirksLaw) h.doApplyBirksLaw();
     dd4hep::Position pos = 0.5 * (h.prePos() + h.postPos());
     HitContribution contrib = dd4hep::sim::Geant4Hit::extractContribution(step);
     const std::string& name = GetName();
@@ -62,9 +63,9 @@ CaloSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*) {
         m_hc->insert(hit);
     }
     hit->truth.push_back(contrib);
-    hit->energyDeposit += contrib.deposit;
-
-
+    //hit->energyDeposit += contrib.deposit;
+    hit->energyDeposit += h.totalEnergy();
+    //std::cout << "Apply Birk law: before = " << contrib.deposit << " after = " << h.totalEnergy() << std::endl;
     
     return true;
 }
diff --git a/Simulation/DetSimSD/src/CalorimeterSensDetTool.cpp b/Simulation/DetSimSD/src/CalorimeterSensDetTool.cpp
index 4219802f2f0df1bdc46be9552fd9661b3376295e..8e405936b96a00ad6a6bf6849211702e776cb76a 100644
--- a/Simulation/DetSimSD/src/CalorimeterSensDetTool.cpp
+++ b/Simulation/DetSimSD/src/CalorimeterSensDetTool.cpp
@@ -42,9 +42,13 @@ CalorimeterSensDetTool::createSD(const std::string& name) {
 	break;
       }
     }
-    G4VSensitiveDetector* sd = new CaloSensitiveDetector(name, *dd4hep_geo, is_merge_enabled);
+    CaloSensitiveDetector* sd = new CaloSensitiveDetector(name, *dd4hep_geo, is_merge_enabled);
     debug() << name << " set to merge true/false = " << is_merge_enabled << endmsg;
 
+    auto sens = dd4hep_geo->sensitiveDetector(name);
+    std::string typ = sens.type();
+    if(typ=="scintillator"&&m_applyBirksLaw) sd->ApplyBirksLaw();
+
     return sd;
 }
 
diff --git a/Simulation/DetSimSD/src/CalorimeterSensDetTool.h b/Simulation/DetSimSD/src/CalorimeterSensDetTool.h
index 549de18d10ee548d6ba2daa3f2734d65f3b156ee..00bdb69c568e20654c35cf3888ca6a00723dd78d 100644
--- a/Simulation/DetSimSD/src/CalorimeterSensDetTool.h
+++ b/Simulation/DetSimSD/src/CalorimeterSensDetTool.h
@@ -30,6 +30,7 @@ private:
     SmartIF<IGeomSvc> m_geosvc;
 
     Gaudi::Property<std::vector<std::string> > m_listCalsMergeDisable{this, "CalNamesMergeDisable", {}};
+    Gaudi::Property<bool>                      m_applyBirksLaw{this, "ApplyBirksLaw", true};
 };
 
 #endif