diff --git a/doc/source/plugin_development.rst b/doc/source/plugin_development.rst
index a563cceb24b0524ddf1957a4f19f987e17de8e06..278856aaccb9edc41902a8b97921fb05f01cdf3b 100644
--- a/doc/source/plugin_development.rst
+++ b/doc/source/plugin_development.rst
@@ -11,14 +11,31 @@ one of the above pluggable entities and its associated classes.
 To implement a new plugin, you must
 
 - define the entity you want to extend (e.g. ``MyOwnDataSource``) as a derived
-  class of the appropriate class (e.g. BaseDataSource), and reimplement
-  the appropriate methods.
-- Define the model that this DataSource needs, by extending
+  class of the appropriate class (e.g. ``BaseDataSource``), and reimplement
+  the appropriate methods:
+
+   - ``run()``: where the actual computation takes place, given the
+     configuration options specified in the model (which is received as an
+     argument). It is strongly advised that the ``run()`` method is stateless.
+   - ``slots()``: must return a 2-tuple of tuples. Each tuple contains instances
+     of the ``Slot`` class. Slots are the input and output entities of the
+     data source or KPI calculator. Given that this information depends on the
+     configuration options, ``slots()`` accepts the model and must return the
+     appropriate values according to the model options.
+
+- Define the model that this ``DataSource`` needs, by extending
   ``BaseDataSourceModel`` and adding, with traits, the appropriate data that
   are required by your data source to perform its task.
+  If a trait change in your model influences the input/output slots, you must
+  make sure that the event ``changes_slots`` is fired as a consequence of
+  those changes. This will notify the UI that the new slots need to be
+  recomputed and presented to the user. Failing to do so will have unexpected
+  consequences.
 - Define the Factory, by reimplementing BaseDataSourceFactory and reimplementing
   its ``create_*`` methods to return the above entities.
 - Define a ``Plugin`` by reimplementing ``BaseExtensionPlugin`` and
   reimplementing its initialization defaults methods to return your factory.
 - add the plugin class in the setup.py entry_point, under the namespace
   ``force.bdss.extensions``
+
+
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_model.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_model.py
index ad8d34bad87ce416d563346ef7d12257f3a01477..1564278c8d2c36026c2f48aee55e91df338b7716 100644
--- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_model.py
+++ b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_model.py
@@ -1,4 +1,4 @@
-from traits.api import Int, String
+from traits.api import Int, String, on_trait_change
 
 from force_bdss.api import BaseDataSourceModel
 
@@ -8,3 +8,7 @@ class CSVExtractorModel(BaseDataSourceModel):
     row = Int()
     column = Int()
     cuba_type = String()
+
+    @on_trait_change("cuba_type")
+    def _notify_changes_slots(self):
+        self.changes_slots = True
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_model.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_model.py
index 099c422f80070ed3b8bb844cdd0c01bb3a6e628f..cf8d0e3eda867c5b92f4e9a3839145f3375b494a 100644
--- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_model.py
+++ b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_model.py
@@ -1,4 +1,4 @@
-from traits.api import String
+from traits.api import String, on_trait_change
 
 from force_bdss.api import BaseKPICalculatorModel
 
@@ -6,3 +6,7 @@ from force_bdss.api import BaseKPICalculatorModel
 class KPIAdderModel(BaseKPICalculatorModel):
     cuba_type_in = String()
     cuba_type_out = String()
+
+    @on_trait_change("cuba_type_in,cuba_type_out")
+    def _notify_slots_changed(self):
+        self.changes_slots = True
diff --git a/force_bdss/data_sources/base_data_source_model.py b/force_bdss/data_sources/base_data_source_model.py
index 08add5665ddab78e1f99770f2ed0b97e16a28e58..64aaa339d9e8966e65b2de0802de2e47224f8a16 100644
--- a/force_bdss/data_sources/base_data_source_model.py
+++ b/force_bdss/data_sources/base_data_source_model.py
@@ -1,4 +1,4 @@
-from traits.api import ABCHasStrictTraits, Instance, List
+from traits.api import ABCHasStrictTraits, Instance, List, Event
 
 from force_bdss.core.input_slot_map import InputSlotMap
 from force_bdss.local_traits import Identifier
@@ -29,6 +29,12 @@ class BaseDataSourceModel(ABCHasStrictTraits):
     #: discarded and not propagated further.
     output_slot_names = List(Identifier(), visible=False)
 
+    #: This event claims that a change in the model influences the slots
+    #: (either input or output). It must be triggered every time a specific
+    #: option in your model implies a change in the slots. The UI will detect
+    #: this and adapt the visual entries.
+    changes_slots = Event()
+
     def __init__(self, factory, *args, **kwargs):
         self.factory = factory
         super(BaseDataSourceModel, self).__init__(*args, **kwargs)
diff --git a/force_bdss/kpi/base_kpi_calculator_model.py b/force_bdss/kpi/base_kpi_calculator_model.py
index afbbbeb578eaaabafa3dceb10db22ef24f088e6c..06dde10c7abd8e76e7b3e7f604d254cef79979de 100644
--- a/force_bdss/kpi/base_kpi_calculator_model.py
+++ b/force_bdss/kpi/base_kpi_calculator_model.py
@@ -1,4 +1,4 @@
-from traits.api import ABCHasStrictTraits, Instance, List
+from traits.api import ABCHasStrictTraits, Instance, List, Event
 
 from force_bdss.local_traits import Identifier
 from ..core.input_slot_map import InputSlotMap
@@ -29,6 +29,12 @@ class BaseKPICalculatorModel(ABCHasStrictTraits):
     #: discarded and not propagated further.
     output_slot_names = List(Identifier(), visible=False)
 
+    #: This event claims that a change in the model influences the slots
+    #: (either input or output). It must be triggered every time a specific
+    #: option in your model implies a change in the slots. The UI will detect
+    #: this and adapt the visual entries.
+    changes_slots = Event()
+
     def __init__(self, factory, *args, **kwargs):
         self.factory = factory
         super(BaseKPICalculatorModel, self).__init__(*args, **kwargs)