diff --git a/force_bdss/core/workflow.py b/force_bdss/core/workflow.py
index d7cfb50193a9ad46035da21faab84ebce6800d9a..8cdb20c21436f9bb8c386992a31b18ed842b3a99 100644
--- a/force_bdss/core/workflow.py
+++ b/force_bdss/core/workflow.py
@@ -3,6 +3,8 @@ from traits.api import HasStrictTraits, Instance, List
 from force_bdss.data_sources.base_data_source_model import BaseDataSourceModel
 from force_bdss.kpi.base_kpi_calculator_model import BaseKPICalculatorModel
 from force_bdss.mco.base_mco_model import BaseMCOModel
+from force_bdss.notification_listeners.base_notification_listener_model \
+    import BaseNotificationListenerModel
 
 
 class Workflow(HasStrictTraits):
@@ -18,3 +20,6 @@ class Workflow(HasStrictTraits):
     #: Contains the factory-specific KPI Calculator Model objects.
     #: The list can be empty
     kpi_calculators = List(BaseKPICalculatorModel)
+
+    #: Contains information about the listeners to be setup
+    notification_listeners = List(BaseNotificationListenerModel)
diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py
index df20c7606e2e7624eaa92e9c8ffcdd6e950bd51a..f5dc86a8f61ec1c594f87a6f8904a46fb519c816 100644
--- a/force_bdss/io/workflow_reader.py
+++ b/force_bdss/io/workflow_reader.py
@@ -89,6 +89,7 @@ class WorkflowReader(HasStrictTraits):
             wf.mco = self._extract_mco(wf_data)
             wf.data_sources[:] = self._extract_data_sources(wf_data)
             wf.kpi_calculators[:] = self._extract_kpi_calculators(wf_data)
+            wf.notification_listeners[:] = self._extract_listeners(wf_data)
         except KeyError as e:
             logging.exception("Could not read file")
             raise InvalidFileException("Could not read file. "
@@ -211,3 +212,15 @@ class WorkflowReader(HasStrictTraits):
 
     def _extract_input_slot_maps(self, maps_data):
         return [InputSlotMap(**d) for d in maps_data]
+
+    def _extract_notification_listeners(self, wf_data):
+        registry = self.factory_registry
+        listeners = []
+        for nl_entry in wf_data["notification_listeners"]:
+            nl_id = nl_entry["id"]
+            nl_factory = registry.notification_listener_factory_by_id(nl_id)
+            model_data = nl_entry["model_data"]
+            listeners.append(nl_factory.create_model(model_data))
+
+        return listeners
+
diff --git a/force_bdss/io/workflow_writer.py b/force_bdss/io/workflow_writer.py
index 8335d5b3a95ff669c863b6c7a3a8175aaf312ef7..1e5abca0d0c9df0c97c18e32e3bfa2e5053196d7 100644
--- a/force_bdss/io/workflow_writer.py
+++ b/force_bdss/io/workflow_writer.py
@@ -17,9 +17,7 @@ class WorkflowWriter(HasStrictTraits):
             A file object on which to write the workflow, properly serialized
             into JSON.
         """
-        data = {
-            "version": "1",
-        }
+        data = dict(version=1)
 
         data["workflow"] = self._workflow_data(workflow)
         json.dump(data, f)
@@ -32,7 +30,11 @@ class WorkflowWriter(HasStrictTraits):
                 for kpic in workflow.kpi_calculators],
             "data_sources": [
                 self._model_data(ds)
-                for ds in workflow.data_sources]
+                for ds in workflow.data_sources],
+            "notification_listeners": [
+                self._model_data(nl)
+                for nl in workflow.notification_listeners
+            ]
         }
 
         return workflow_data