diff --git a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
index 0bbba6c5e5f7d695f4ee09d7249aa20729e8c859..003bab0b3856619b104c5b207ed7a4878adade80 100644
--- a/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
+++ b/notebooks/AGIPD/Characterize_AGIPD_Gain_Darks_NBC.ipynb
@@ -269,7 +269,7 @@
     "    ctrl_src=ctrl_src,\n",
     ")\n",
     "agipd_ctrl_dark.sort_dark_runs()\n",
-    "agipd_ctrl_dark.validate_gain_modes()\n",
+    "\n",
     "if mem_cells == 0:\n",
     "    mem_cells = agipd_ctrl_dark.get_memory_cells()\n",
     "\n",
diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py
index fdb8df0dd13052b9385d6304b786e0bf5d30d350..b8491ff4ba6be40b68bbc9873ea74cb445551c44 100644
--- a/src/cal_tools/agipdlib.py
+++ b/src/cal_tools/agipdlib.py
@@ -333,29 +333,41 @@ class AgipdCtrlRuns:
                     f"{name} is not the same for all runs {self.runs}"
                     f" with values of {values}, respectively.")
 
-    def sort_dark_runs(self, fixed_gain_mode):
+    def sort_dark_runs(self):
         """Order dark runs based on PatternTypeIndex."""
-        assert len(self.run_ctrls) == 3, f"AGIPD dark runs are expected to be 3. {len(self.run_ctrls)} runs are given."
-        # Expected patterns: XRay: 0, DarkHG: 1, DarkMG: 2, DarkLG: 3,
-        # SlopesPC: 4  # Gain runs??. Any more expected PatternTypeIndexs?
-        if fixed_gain_mode: 
-            # used gain mode 
-            pass
-        else:  # Adaptive mode. patterns -> DarkHG: 1, DarkMG: 2, DarkLG: 3
-            patterns = []
-                for c in self.run_ctrls:
-                    patterns.append(c.run_dc[
-                        self.ctrl_src, "patternTypeIndex"].as_single_value())
-
-        zipped_lists = zip(patterns, self.runs, self.run_ctrls)
+        assert len(self.runs) == 3, f"AGIPD dark runs are expected to be 3. {len(self.runs)} runs are given."
+        # Expected patterns:
+        # XRay: 0, DarkHG: 1, DarkMG: 2, DarkLG: 3, PC: 4 and CS: 5.
+        sort_by = {}
+
+        if self.gain_modes == self.adaptive_gain_modes:  # Adaptive gain
+            # Patterns -> DarkHG: 1, DarkMG: 2, DarkLG: 3
+            if "AGIPD1M" in self.ctrl_src:
+                pattern_dataset = "patternTypeIndex"
+            elif "AGIPD500K" in self.ctrl_src:
+                pattern_dataset = "expTypeIndex"
+
+            sort_by[pattern_dataset] = []  # sort by patterns
+            for c in self.run_ctrls:
+                sort_by[pattern_dataset].append(c.run_dc[
+                    self.ctrl_src, pattern_dataset].as_single_value())
+
+        # Check if a mix of adaptive and fixed gain runs.
+        elif any(gm == AgipdGainMode.ADAPTIVE_GAIN for gm in self.gain_modes):
+            raise ValueError(
+                f"Given runs {self.runs} have a mix of ADAPTIVE and "
+                f"FIXED gain modes: {self.gain_modes}.")
+        else:  # Fixed gain: Patterns is X-Ray: 0 for all runs. 
+            sort_by["gainModeIndex"] = [int(gm) for gm in self.gain_modes]
+
+        zipped_lists = zip(list(sort_by.values())[0], self.runs, self.run_ctrls)
 
         # Sort the lists based on the patterns
         sorted_zipped_lists = sorted(zipped_lists, key=lambda item: item[0])
         _, sorted_runs, sorted_run_ctrls = zip(*sorted_zipped_lists)
-
         if sorted_runs != self.runs:
             Warning("Given dark runs are unsorted. Runs will be sorted from"
-                    f" {self.runs} with patternTypeIndexs {patterns} to "
+                    f" {self.runs} with {list(sort_by.keys())[0]} {list(sort_by.values())} to "
                     f" {sorted_runs}.")
              # Update run_ctrls and runs order
             self.runs = sorted_runs
diff --git a/tests/test_agipdlib.py b/tests/test_agipdlib.py
index e312c377a13309a02351214243a95a7324e199bc..fed4b365d2960392729503e79a9e63e59655fe0a 100644
--- a/tests/test_agipdlib.py
+++ b/tests/test_agipdlib.py
@@ -292,34 +292,20 @@ def test_raise_fixed_gain_mode():
     with pytest.raises(ValueError):
         adaptive_fixed_ctrls.fixed_gain_mode()
 
-
 @pytest.mark.requires_gpfs
-def test_raise_validate_gain_modes():
-    adaptive_fixed_ctrls = AgipdCtrlRuns(
-        raw_folder=TEST_RAW_FOLDER,
-        runs=[9011, 9016, 9017],
-        image_src=SPB_AGIPD_INST_SRC,
-        ctrl_src=CTRL_SRC,
-    )
-    with pytest.raises(ValueError):
-        adaptive_fixed_ctrls.validate_gain_modes()
-
-    unsorted_fixed_gain_ctrls = AgipdCtrlRuns(
-        raw_folder=TEST_RAW_FOLDER,
-        runs=[9013, 9011, 9012],  # unsorted fixed gain runs
-        image_src=SPB_AGIPD_INST_SRC,
-        ctrl_src=CTRL_SRC,
-    )
-    with pytest.raises(ValueError):
-        unsorted_fixed_gain_ctrls.validate_gain_modes()
-
-@pytest.mark.requires_gpfs
-def test_sort_dark_runs():
-    unsorted_runs_ctrls = AgipdCtrlRuns(
+@pytest.mark.parametrize(
+    "runs,expected",
+    [
+        ([9013, 9011, 9012], [9011, 9012, 9013]),
+        ([9017, 9016, 9015], [9015, 9016, 9017]),
+    ],
+)
+def test_sort_dark_runs(runs, expected):
+    runs_ctrls = AgipdCtrlRuns(
         raw_folder=TEST_RAW_FOLDER,
-        runs=[9013, 9011, 9012],  # unsorted runs
+        runs=runs,
         image_src=SPB_AGIPD_INST_SRC,
         ctrl_src=CTRL_SRC,
     )
-    unsorted_runs_ctrls.sort_dark_runs()
-    assert unsorted_runs_ctrls.runs == [9011, 9012, 9013]
\ No newline at end of file
+    runs_ctrls.sort_dark_runs()
+    assert runs_ctrls.runs == expected