diff --git a/src/agora/io/signal.py b/src/agora/io/signal.py
index 3a3a551289bf4b0921b5403110b9fbcc0372d040..4110bddf55003e6e7c75d55534b2634bc6ceb188 100644
--- a/src/agora/io/signal.py
+++ b/src/agora/io/signal.py
@@ -23,7 +23,13 @@ class Signal(BridgeH5):
     def __init__(self, file: t.Union[str, PosixPath]):
         super().__init__(file, flag=None)
 
-        self.names = ["experiment", "position", "trap"]
+        self.index_names = (
+            "experiment",
+            "position",
+            "trap",
+            "cell_label",
+            "mother_label",
+        )
 
     def __getitem__(self, dsets: t.Union[str, t.Collection]):
 
@@ -223,7 +229,6 @@ class Signal(BridgeH5):
 
     def apply_merge(self, df, changes):
         if len(changes):
-
             for target, source in changes:
                 df.loc[tuple(target)] = self.join_tracks_pair(
                     df.loc[tuple(target)], df.loc[tuple(source)]
@@ -266,12 +271,11 @@ class Signal(BridgeH5):
 
     def dset_to_df(self, f, dataset):
         dset = f[dataset]
-        names = copy(self.names)
-        if not dataset.endswith("imBackground"):
-            names.append("cell_label")
-        lbls = {lbl: dset[lbl][()] for lbl in names if lbl in dset.keys()}
+        index_names = copy(self.index_names)
+
+        valid_names = [lbl for lbl in index_names if lbl in dset.keys()]
         index = pd.MultiIndex.from_arrays(
-            list(lbls.values()), names=names[-len(lbls) :]
+            [dset[lbl] for lbl in valid_names], names=valid_names
         )
 
         columns = (
diff --git a/src/postprocessor/core/processes/merger.py b/src/postprocessor/core/reshapers/merger.py
similarity index 100%
rename from src/postprocessor/core/processes/merger.py
rename to src/postprocessor/core/reshapers/merger.py
diff --git a/src/postprocessor/core/processes/picker.py b/src/postprocessor/core/reshapers/picker.py
similarity index 100%
rename from src/postprocessor/core/processes/picker.py
rename to src/postprocessor/core/reshapers/picker.py