diff --git a/core/functions/test_hdf.py b/core/functions/test_hdf.py
index 6d2f8d022c8bb9fe60796ee72e638b1c5e3cd89a..683c005b2f319afb7f3d1f20c9969b6c49dd4a59 100644
--- a/core/functions/test_hdf.py
+++ b/core/functions/test_hdf.py
@@ -10,8 +10,6 @@ f = h5py.File(
 )
 tracks = f["/extraction/general/None/area"][()]
 cell = Cells.from_source("/home/alan/Documents/sync_docs/PhD/tmp/DO6MS2_003store.h5")
-from postprocessor.core.picker import Picker, PickerParameters
+from postprocessor.core.processes.picker import Picker, PickerParameters
 
-picker = Picker(
-    signals=pd.DataFrame(tracks), cells=cell, parameters=PickerParameters.default()
-)
+picker = Picker(cells=cell, parameters=PickerParameters.default())
diff --git a/core/io/writer.py b/core/io/writer.py
index de1660e095d144f55f8d09248e4ced6e0f83619c..480c7e0306a99e0e8b5814e652ad7f2166d7ca2e 100644
--- a/core/io/writer.py
+++ b/core/io/writer.py
@@ -1,9 +1,12 @@
-import numpy as np
+import h5py
 import pandas as pd
 
-def Writer(filename):
+from postprocessor.core.io.base import BridgeH5
+
+
+def Writer(BridgeH5):
     def __init__(self, filename):
-        self._file = h5py.File(filename)
+        self._hdf = h5py.File(filename, "a")
 
     def write(self, address, data):
         self._file.add_group(address)
diff --git a/core/processes/base.py b/core/processes/base.py
index a53cee6d08dbbd289963e40311c6adea0f03ab60..8412fdb5f25404f30e6988327974dc4c44de200b 100644
--- a/core/processes/base.py
+++ b/core/processes/base.py
@@ -35,9 +35,15 @@ class ProcessABC(ABC):
     "Base class for processes"
 
     def __init__(self, parameters):
+        self._parameters = parameters
+
         for k, v in parameters.to_dict().items():  # access parameters directly
             setattr(self, k, v)
 
+    @property
+    def parameters(self):
+        return self._parameters
+
     @abstractmethod
     def run(self):
         pass
diff --git a/core/processes/picker.py b/core/processes/picker.py
index 26a0320b3d79165e5e43a14a699805f7a1ffde5c..9342ff17a95ced03b007cdc20cb75fccb27a268b 100644
--- a/core/processes/picker.py
+++ b/core/processes/picker.py
@@ -6,7 +6,7 @@ import pandas as pd
 
 from core.cells import CellsHDF
 
-from postprocessor.core.base import ParametersABC, ProcessABC
+from postprocessor.core.processes.base import ParametersABC, ProcessABC
 from postprocessor.core.functions.tracks import max_ntps, max_nonstop_ntps
 
 
diff --git a/core/processor.py b/core/processor.py
index f1e006cfd34b2651e47d5ae43d7e87639b2af410..9e433076c1ba64bdf1a96fe9ea51d1bf67c65cb6 100644
--- a/core/processor.py
+++ b/core/processor.py
@@ -1,29 +1,54 @@
+from typing import List, Dict, Union
 import pandas as pd
-from postprocessor.core.base import ParametersABC
-from core import Cells
+
+from postprocessor.core.processes.base import ParametersABC
+from postprocessor.core.processes.merger import MergerParameters, Merger
+from postprocessor.core.processes.picker import PickerParameters, Picker
+from postprocessor.core.io.writer import Writer
+from postprocessor.core.io.signal import Signal
+
+from core.cells import Cells
 
 
 class PostProParameters(ParametersABC):
     """
     Anthology of parameters used for postprocessing
+    :merger:
+    :picker: parameters for picker
+    :processes: List of processes that can be found in ./processes
+    :datasets: Dictionary
     """
 
-    def __init__(self, merger=None, picker=None, processes=None, datasets=None):
-        self.merger = merger
-        self.picker = picker
-        self.processes = processes
+    def __init__(self, merger=None, picker=None, processes=[], datasets=None):
+        self.merger: MergerParameters = merger
+        self.picker: PickerParameters = picker
+        self.processes: List = processes
 
-        self.datasets = datasets
+        self.datasets: Dict = datasets
 
     def __getitem__(self, item):
         return getattr(self, item)
 
+    @classmethod
+    def default(cls, kind=None):
+        if kind == "defaults" or kind == None:
+            return cls(
+                merger=MergerParameters.default(),
+                picker=PickerParameters.default(),
+                datasets={
+                    "merger": "/extraction/general/None/area",
+                    "picker": "/extraction/general/None/area",
+                    "processes": [],
+                },
+            )
+
 
 class PostProcessor:
     def __init__(self, fname, parameters, signals):
         self.parameters = parameters
-
         self._signals = Signals(fname)
+        self._writer = Writer(fname)
+
         self.datasets = parameters["datasets"]
         self.merger = Merger(parameters["merger"])
         self.picker = Picker(
@@ -39,40 +64,3 @@ class PostProcessor:
         for process, dataset in zip(self.processes, self.datasets["processes"]):
             process_result = process.run(signals.get_dataset(dataset))
             self.writer.write(process_result, dataset)
-
-
-class Signals:
-    """
-    Class that fetches data from the hdf5 storage for post-processing
-    """
-
-    def __init__(self, file):
-        self._hdf = h5py.File(file, "r")
-
-    def __getitem__(self, dataset):
-        dset = self._hdf[dataset][()]
-        attrs = self._hdf[dataset].attrs
-        first_dataset = "/" + dataset.split("/")[0] + "/"
-        timepoints = self._hdf[first_dataset].attrs["processed_timepoints"]
-
-        if "cell_label" in self._hdf[dataset].attrs:
-            ids = pd.MultiIndex.from_tuples(
-                zip(attrs["trap"], attrs["cell_label"]), names=["trap", "cell_label"]
-            )
-        else:
-            ids = pd.Index(attrs["trap"], names=["trap"])
-
-        return pd.DataFrame(dset, index=ids, columns=timepoints)
-
-    @staticmethod
-    def _if_ext_or_post(name):
-        if name.startswith("extraction") or name.startswith("postprocessing"):
-            if len(name.split("/")) > 3:
-                return name
-
-    @property
-    def datasets(self):
-        return signals._hdf.visit(self._if_ext_or_post)
-
-    def close(self):
-        self._hdf.close()