diff --git a/src/calng/AgipdCorrection.py b/src/calng/AgipdCorrection.py
index b7d4d629909da9adc2c337301edcda627c02881a..b07bca2b9c9f7332f5271747cd75af73a47739e0 100644
--- a/src/calng/AgipdCorrection.py
+++ b/src/calng/AgipdCorrection.py
@@ -3,6 +3,7 @@ import timeit
 import numpy as np
 from karabo.bound import (
     BOOL_ELEMENT,
+    FLOAT_ELEMENT,
     KARABO_CLASSINFO,
     STRING_ELEMENT,
     TABLE_ELEMENT,
@@ -88,6 +89,28 @@ class AgipdCorrection(BaseCorrection):
                 .commit(),
             )
 
+        (
+            BOOL_ELEMENT(expected)
+            .key("corrections.overrideMdAdditionalOffset")
+            .displayedName("Override md_additional_offset")
+            .assignmentOptional()
+            .defaultValue(False)
+            .reconfigurable()
+            .commit(),
+            FLOAT_ELEMENT(expected)
+            .key("corrections.mdAdditionalOffset")
+            .displayedName("Value for md_additional_offset (if overriding)")
+            .description(
+                "Normally, md_additional_offset (part of relative gain correction) is "
+                "computed when loading SlopesPC. In case you want to use a different "
+                "value (global for all medium gain pixels), you can specify it here "
+                "and set corrections.overrideMdAdditionalOffset to True."
+            )
+            .assignmentOptional()
+            .defaultValue(0)
+            .reconfigurable()
+            .commit(),
+        )
         # TODO: hook this up to actual correction done
         bad_pixel_selection_schema = Schema()
         (
@@ -143,6 +166,12 @@ class AgipdCorrection(BaseCorrection):
         else:
             self._output_transpose = None
         self._update_shapes()
+        if config.get("corrections.overrideMdAdditionalOffset"):
+            self._override_md_additional_offset = config.get(
+                "corrections.mdAdditionalOffset"
+            )
+        else:
+            self._override_md_additional_offset = None
         self.updateState(State.ON)
 
     def process_input(self, data, metadata):
@@ -286,6 +315,10 @@ class AgipdCorrection(BaseCorrection):
                 self.set("corrections.available.relGainPc", True)
                 self.set("corrections.enabled.relGainPc", True)
                 self.set("corrections.preview.relGainPc", True)
+            if self._override_md_additional_offset is not None:
+                self.gpu_runner.md_additional_offset_gpu.fill(
+                    self._override_md_additional_offset
+                )
         elif constant_name == "SlopesFF":
             self.gpu_runner.load_rel_gain_ff_map(constant_data)
             if not self.get("corrections.available.relGainXray"):
@@ -310,3 +343,17 @@ class AgipdCorrection(BaseCorrection):
             new_filter = np.array(eval(filter_string), dtype=np.uint16)
         assert np.max(new_filter) < self.get("dataFormat.memoryCells")
         self.pulse_filter = new_filter
+
+    def preReconfigure(self, config):
+        super().preReconfigure(config)
+        if config.has("corrections.overrideMdAdditionalOffset"):
+            if config.get("corrections.overrideMdAdditionalOffset"):
+                md_additional_offset = self.get("corrections.mdAdditionalOffset")
+                if config.has("corrections.mdAdditionalOffset"):
+                    md_additional_offset = config.get("corrections.mdAdditionalOffset")
+                self._override_md_additional_offset = md_additional_offset
+                self.gpu_runner.md_additional_offset_gpu.fill(
+                    self._override_md_additional_offset
+                )
+            else:
+                self._override_md_additional_offset = None