diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py
index 1783c0b81dd2bd37726a3503db44a3c3d8a3da34..7290f54f7a079c69360b7542e7be517015e6e955 100644
--- a/src/cal_tools/agipdlib.py
+++ b/src/cal_tools/agipdlib.py
@@ -28,7 +28,7 @@ from cal_tools.agipdutils import (
     melt_snowy_pixels,
 )
 from cal_tools.enums import AgipdGainMode, BadPixels, SnowResolution
-from cal_tools.litpx_counter import LitPixelCounter
+from cal_tools.litpx_counter import AnalysisAddon, LitPixelCounter
 from logging import warning
 
 
@@ -771,26 +771,19 @@ class AgipdCorrections:
         det_channel = det_channel.partition(":")[0] + ":output"
         agipd_corr_source = f"{karabo_id}/CORR/{det_channel}"
 
-        schema = {
-            agipd_corr_source: ["image"]
-        }
-        addons = {
-            "litpx_counter": f"{karabo_id}/LITPX/{det_channel}"
-        }
-        for addon_name, src_name in addons.items():
-            addon = data_dict.get(addon_name)
-            if addon is not None:
-                src_channels = schema.setdefault(src_name, [])
-                src_channels.append(addon.channel)
-
-        instrument_channels = []
-        for src_name, src_channels in schema.items():
-            instrument_channels += [f"{src_name}/{ch}" for ch in src_channels]
+        instrument_channels = [f"{agipd_corr_source}/image"]
 
         # backward compatibility BEGIN
         instrument_channels.append(f"{agipd_base}/image")
         # backward compatibility END
 
+        addons = []
+        for name, elem in data_dict.items():
+            if isinstance(elem, AnalysisAddon):
+                src_name = elem.source_name(karabo_id, det_channel)
+                addons.append((elem, src_name))
+                instrument_channels.append(f"{src_name}/{elem.channel}")
+
         with DataFile.from_details(out_folder, agg, runno, seqno) as outfile:
             outfile.create_metadata(
                 like=dc, instrument_channels=instrument_channels)
@@ -832,11 +825,7 @@ class AgipdCorrections:
 
             # create addon sources
             required_addon_data = []
-            for addon_name, src_name in addons.items():
-                addon = data_dict.get(addon_name)
-                if addon is None:
-                    continue
-
+            for addon, src_name in addons:
                 src = outfile.create_instrument_source(src_name)
                 addon.set_num_images(n_img)
                 addon.create_schema(src, trains, count)
diff --git a/src/cal_tools/litpx_counter.py b/src/cal_tools/litpx_counter.py
index 660ddbf72eaea1a42dc083925d09e08e0188a650..0a70097f066fe72c1731f92c25b65163905d03b9 100644
--- a/src/cal_tools/litpx_counter.py
+++ b/src/cal_tools/litpx_counter.py
@@ -25,6 +25,9 @@ class AnalysisAddon:
     def process(self, chunk):
         raise NotImplementedError
 
+    def source_name(self, karabo_id, channel):
+        return f"{karabo_id}/DANA/{channel}"
+
     def create_schema(self, source, file_trains=None, count=None):
         if file_trains is None:
             file_trains = source.file["INDEX/trainId"][:]
@@ -83,3 +86,6 @@ class LitPixelCounter(AnalysisAddon):
             self.num_lit_px[i] = np.sum(
                 self.image[i] > self.threshold, initial=0, where=mask)
             self.num_good_px[i] = np.sum(mask)
+
+    def source_name(self, karabo_id, channel):
+        return f"{karabo_id}/LITPX/{channel}"