diff --git a/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.rst b/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.rst
deleted file mode 100644
index 42bd5aeb3e66f886afce795c6b6263cef236955d..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor package
-=========================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.csv_extractor.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.csv\_extractor\_data\_source module
---------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.csv\_extractor\_factory module
----------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.csv\_extractor\_model module
--------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.tests.rst
deleted file mode 100644
index d1f1dff383e786f01fe04283564f6db5cd410b85..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.tests package
-================================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.tests\.test\_csv\_extractor\_data\_source module
----------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.tests.test_csv_extractor_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.csv\_extractor\.tests\.test\_csv\_extractor\_factory module
-----------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.tests.test_csv_extractor_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.rst
deleted file mode 100644
index 6092e644d113891668713407b6415b7b7269c58f..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota package
-========================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.dummy_dakota.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.dakota\_communicator module
------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_communicator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.dakota\_factory module
-------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.dakota\_model module
-----------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.dakota\_optimizer module
---------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_optimizer
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.parameters module
--------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.parameters
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.tests.rst
deleted file mode 100644
index 1982bc3830431453920de51ca442726e6b0b8444..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.tests.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.tests package
-===============================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.tests\.test\_dakota\_communicator module
-------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_communicator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.tests\.test\_dakota\_factory module
--------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_dakota\.tests\.test\_dakota\_optimizer module
----------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_optimizer
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.rst
deleted file mode 100644
index 1f144b3a36e8b7144f4960ddf95df6bd8039d4bb..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source package
-==============================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.dummy_data_source.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.dummy\_data\_source module
-----------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.dummy\_data\_source\_factory module
--------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.dummy\_data\_source\_model module
------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.tests.rst
deleted file mode 100644
index f41ad6161fc216ac23ea4edc2cb443c81c686fc2..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_data_source.tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.tests package
-=====================================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.tests\.test\_dummy\_data\_source module
------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.tests.test_dummy_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_data\_source\.tests\.test\_dummy\_data\_source\_factory module
---------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.tests.test_dummy_data_source_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.rst
deleted file mode 100644
index 421db22ab8d35b7bb5c25f9d3a6bee716a7a9e1a..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator package
-=================================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.dummy\_kpi\_calculator module
-----------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.dummy\_kpi\_calculator\_factory module
--------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.dummy\_kpi\_calculator\_model module
------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.rst
deleted file mode 100644
index 1b91f02857b5e94760007256a5d2a387a603f64b..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.tests package
-========================================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.tests\.test\_dummy\_kpi\_calculator module
------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.test_dummy_kpi_calculator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_kpi\_calculator\.tests\.test\_dummy\_kpi\_calculator\_factory module
---------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.test_dummy_kpi_calculator_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.rst
deleted file mode 100644
index ba025ccb2cd742b0a78c972c5dc0cde819bf681b..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener package
-========================================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.dummy_notification_listener.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.dummy\_notification\_listener module
-------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.dummy_notification_listener
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.dummy\_notification\_listener\_factory module
----------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.dummy_notification_listener_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.dummy\_notification\_listener\_model module
--------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.dummy_notification_listener_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.tests.rst
deleted file mode 100644
index 6cdd3cfb2883620aed7b76ad3f57a8ed3052982c..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_notification_listener.tests.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.tests package
-===============================================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.tests\.test\_dummy\_notification\_listener module
--------------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.tests.test_dummy_notification_listener
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.tests\.test\_dummy\_notification\_listener\_factory module
-----------------------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.tests.test_dummy_notification_listener_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_notification\_listener\.tests\.test\_dummy\_notification\_listener\_model module
---------------------------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.tests.test_dummy_notification_listener_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_notification_listener.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.rst b/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.rst
deleted file mode 100644
index 6167c3fa1dda8df9a20fa7c589ca235ed0626a3c..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder package
-=====================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.kpi_adder.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.kpi\_adder\_calculator module
-----------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.kpi\_adder\_factory module
--------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.kpi\_adder\_model module
------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.tests.rst
deleted file mode 100644
index 4412e8305e7018f5ebe2937df8330fbeb5d19e5a..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.tests package
-============================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.tests\.test\_kpi\_adder\_calculator module
------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.tests.test_kpi_adder_calculator
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.kpi\_adder\.tests\.test\_kpi\_adder\_factory module
---------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.tests.test_kpi_adder_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.rst b/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.rst
deleted file mode 100644
index 6313c008200eeb92b48d6be5fe6effe04d213588..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator package
-===========================================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.power_evaluator.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.power\_evaluator\_data\_source module
-------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.power\_evaluator\_factory module
--------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.power\_evaluator\_model module
------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_model
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.tests.rst
deleted file mode 100644
index 51a90e8b88ac81fe94a675a03c9d6df8b4cc6f6f..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.power_evaluator.tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.tests package
-==================================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.tests\.test\_power\_evaluator\_data\_source module
--------------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.tests.test_power_evaluator_data_source
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.power\_evaluator\.tests\.test\_power\_evaluator\_factory module
---------------------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.tests.test_power_evaluator_factory
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.power_evaluator.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.rst b/doc/source/api/force_bdss.core_plugins.dummy.rst
deleted file mode 100644
index 17e91bfed1c38b78b21a9ed0de9dd067a6073679..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-force\_bdss\.core\_plugins\.dummy package
-=========================================
-
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy.csv_extractor
-    force_bdss.core_plugins.dummy.dummy_dakota
-    force_bdss.core_plugins.dummy.dummy_data_source
-    force_bdss.core_plugins.dummy.dummy_kpi_calculator
-    force_bdss.core_plugins.dummy.dummy_notification_listener
-    force_bdss.core_plugins.dummy.kpi_adder
-    force_bdss.core_plugins.dummy.power_evaluator
-    force_bdss.core_plugins.dummy.tests
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.dummy\_plugin module
--------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.dummy_plugin
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.dummy.tests.rst b/doc/source/api/force_bdss.core_plugins.dummy.tests.rst
deleted file mode 100644
index 41e0d30f54f5152cd8b92191219a3177ce662036..0000000000000000000000000000000000000000
--- a/doc/source/api/force_bdss.core_plugins.dummy.tests.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-force\_bdss\.core\_plugins\.dummy\.tests package
-================================================
-
-Submodules
-----------
-
-force\_bdss\.core\_plugins\.dummy\.tests\.data\_source\_factory\_test\_mixin module
------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.tests\.kpi\_calculator\_factory\_test\_mixin module
---------------------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-force\_bdss\.core\_plugins\.dummy\.tests\.test\_direct\_execution module
-------------------------------------------------------------------------
-
-.. automodule:: force_bdss.core_plugins.dummy.tests.test_direct_execution
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: force_bdss.core_plugins.dummy.tests
-    :members:
-    :undoc-members:
-    :show-inheritance:
diff --git a/doc/source/api/force_bdss.core_plugins.rst b/doc/source/api/force_bdss.core_plugins.rst
index d667de4d88ad1e3f3b4ee21977731d9091daad0b..cce8a4b89316d59c4cf8b5b07faa094ac31b95f8 100644
--- a/doc/source/api/force_bdss.core_plugins.rst
+++ b/doc/source/api/force_bdss.core_plugins.rst
@@ -1,13 +1,6 @@
 force\_bdss\.core\_plugins package
 ==================================
 
-Subpackages
------------
-
-.. toctree::
-
-    force_bdss.core_plugins.dummy
-
 Module contents
 ---------------
 
diff --git a/doc/source/api/force_bdss.tests.probe_classes.rst b/doc/source/api/force_bdss.tests.probe_classes.rst
new file mode 100644
index 0000000000000000000000000000000000000000..acdf96347ff91d3908ea8bb7aa35aef3dc5d6683
--- /dev/null
+++ b/doc/source/api/force_bdss.tests.probe_classes.rst
@@ -0,0 +1,62 @@
+force\_bdss\.tests\.probe\_classes package
+==========================================
+
+Submodules
+----------
+
+force\_bdss\.tests\.probe\_classes\.data\_source module
+-------------------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.data_source
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+force\_bdss\.tests\.probe\_classes\.evaluator\_factory module
+-------------------------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.evaluator_factory
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+force\_bdss\.tests\.probe\_classes\.factory\_registry\_plugin module
+--------------------------------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.factory_registry_plugin
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+force\_bdss\.tests\.probe\_classes\.kpi\_calculator module
+----------------------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.kpi_calculator
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+force\_bdss\.tests\.probe\_classes\.mco module
+----------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.mco
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+force\_bdss\.tests\.probe\_classes\.notification\_listener module
+-----------------------------------------------------------------
+
+.. automodule:: force_bdss.tests.probe_classes.notification_listener
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: force_bdss.tests.probe_classes
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/source/api/force_bdss.tests.rst b/doc/source/api/force_bdss.tests.rst
index 6350da69650311ac06548905d9d6582165b7eee8..36c2088f59119ce57a6c27425af6543a28fec273 100644
--- a/doc/source/api/force_bdss.tests.rst
+++ b/doc/source/api/force_bdss.tests.rst
@@ -7,6 +7,7 @@ Subpackages
 .. toctree::
 
     force_bdss.tests.fixtures
+    force_bdss.tests.probe_classes
 
 Submodules
 ----------
diff --git a/force_bdss/cli/tests/test_execution.py b/force_bdss/cli/tests/test_execution.py
index 24bf92bcd5915c4b411baa68b6e2f4f6c914519c..3fbf57fb179b41dea4232cacd0067a89562288f6 100644
--- a/force_bdss/cli/tests/test_execution.py
+++ b/force_bdss/cli/tests/test_execution.py
@@ -25,13 +25,13 @@ def fixture_dir():
 class TestExecution(unittest.TestCase):
     def test_plain_invocation_mco(self):
         with cd(fixtures.dirpath()):
-            out = subprocess.check_call(["force_bdss", "test_csv.json"])
+            out = subprocess.check_call(["force_bdss", "test_empty.json"])
             self.assertEqual(out, 0)
 
     def test_plain_invocation_evaluate(self):
         with cd(fixtures.dirpath()):
             proc = subprocess.Popen([
-                "force_bdss", "--evaluate", "test_csv.json"],
+                "force_bdss", "--evaluate", "test_empty.json"],
                 stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE)
             proc.communicate(b"1")
diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py
index f0347cff034a10ea8fe54339a9ce41048507fff9..33fc4755a456ad4c0609b0365c643e8f844641a5 100644
--- a/force_bdss/core_evaluation_driver.py
+++ b/force_bdss/core_evaluation_driver.py
@@ -30,6 +30,10 @@ class CoreEvaluationDriver(BaseCoreDriver):
             sys.exit(1)
 
         mco_model = workflow.mco
+        if mco_model is None:
+            print("No MCO defined. Nothing to do. Exiting.")
+            sys.exit(0)
+
         mco_factory = mco_model.factory
         mco_communicator = mco_factory.create_communicator()
 
diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index fb4171427dadcf58e98b7342fef214b6fd375df4..478499af138b50ee6ecdd1abe0ca95e583d37e85 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -48,6 +48,10 @@ class CoreMCODriver(BaseCoreDriver):
             sys.exit(1)
 
         mco_model = workflow.mco
+        if mco_model is None:
+            print("No MCO defined. Nothing to do. Exiting.")
+            sys.exit(0)
+
         mco_factory = mco_model.factory
         return mco_factory.create_optimizer()
 
diff --git a/force_bdss/core_plugins/__init__.py b/force_bdss/core_plugins/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..604490c9bcc99bda43360f97c7e2dbe106950a80 100644
--- a/force_bdss/core_plugins/__init__.py
+++ b/force_bdss/core_plugins/__init__.py
@@ -0,0 +1,4 @@
+"""
+Here we host the core plugins. They ship with the BDSS and are always
+available. They provide a form of "standard library" of functionality.
+"""
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/__init__.py b/force_bdss/core_plugins/dummy/csv_extractor/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py
deleted file mode 100644
index 36f729720f8933fe6121d1c820bcb6f09ea662f0..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py
+++ /dev/null
@@ -1,31 +0,0 @@
-import csv
-from force_bdss.api import BaseDataSource, DataValue
-from force_bdss.core.slot import Slot
-
-
-class CSVExtractorDataSource(BaseDataSource):
-    def run(self, model, parameters):
-        with open(model.filename) as csvfile:
-            reader = csv.reader(csvfile)
-            for rowindex, row in enumerate(reader):
-                if rowindex < model.row:
-                    continue
-                elif rowindex == model.row:
-                    return [
-                        DataValue(
-                            type=model.cuba_type,
-                            value=float(row[model.column])
-                        )
-                    ]
-                else:
-                    break
-
-            raise IndexError("Could not find specified data.")
-
-    def slots(self, model):
-        return (
-            (),
-            (
-                Slot(type=model.cuba_type),
-            )
-        )
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py
deleted file mode 100644
index db28075d1e265b57909c1d20a202fae800702722..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from traits.api import String
-
-from force_bdss.api import factory_id, BaseDataSourceFactory
-
-from .csv_extractor_model import CSVExtractorModel
-from .csv_extractor_data_source import CSVExtractorDataSource
-
-
-class CSVExtractorFactory(BaseDataSourceFactory):
-    id = String(factory_id("enthought", "csv_extractor"))
-
-    name = String("CSV Extractor")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return CSVExtractorModel(self, **model_data)
-
-    def create_data_source(self):
-        return CSVExtractorDataSource(self)
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
deleted file mode 100644
index a8c4a0a6952d609e12d0476dac10169ed7bbbedc..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_model.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from traits.api import Int, String, on_trait_change, File
-
-from force_bdss.api import BaseDataSourceModel
-
-
-class CSVExtractorModel(BaseDataSourceModel):
-    filename = File()
-    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/csv_extractor/tests/__init__.py b/force_bdss/core_plugins/dummy/csv_extractor/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_data_source.py b/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_data_source.py
deleted file mode 100644
index 89f8f80617397648f3ca6c8e5b7be6b7bb338e14..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_data_source.py
+++ /dev/null
@@ -1,62 +0,0 @@
-import unittest
-
-from force_bdss.core.data_value import DataValue
-from force_bdss.core.slot import Slot
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_data_source \
-    import CSVExtractorDataSource
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_model import \
-    CSVExtractorModel
-from force_bdss.data_sources.base_data_source_factory import \
-    BaseDataSourceFactory
-from force_bdss.tests import fixtures
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestCSVExtractorDataSource(unittest.TestCase):
-    def setUp(self):
-        self.factory = mock.Mock(spec=BaseDataSourceFactory)
-
-    def test_initialization(self):
-        ds = CSVExtractorDataSource(self.factory)
-        self.assertEqual(ds.factory, self.factory)
-
-    def test_run(self):
-        ds = CSVExtractorDataSource(self.factory)
-        model = CSVExtractorModel(self.factory)
-        model.filename = fixtures.get("foo.csv")
-        model.row = 3
-        model.column = 5
-        mock_params = []
-        result = ds.run(model, mock_params)
-        self.assertIsInstance(result, list)
-        self.assertEqual(len(result), 1)
-        self.assertIsInstance(result[0], DataValue)
-        self.assertEqual(result[0].value, 42)
-
-    def test_run_with_exception(self):
-        ds = CSVExtractorDataSource(self.factory)
-        model = CSVExtractorModel(self.factory)
-        model.filename = fixtures.get("foo.csv")
-        mock_params = []
-        model.row = 30
-        model.column = 5
-        with self.assertRaises(IndexError):
-            ds.run(model, mock_params)
-
-        model.row = 3
-        model.column = 50
-        with self.assertRaises(IndexError):
-            ds.run(model, mock_params)
-
-    def test_slots(self):
-        ds = CSVExtractorDataSource(self.factory)
-        model = CSVExtractorModel(self.factory)
-        slots = ds.slots(model)
-        self.assertEqual(len(slots), 2)
-        self.assertEqual(len(slots[0]), 0)
-        self.assertEqual(len(slots[1]), 1)
-        self.assertIsInstance(slots[1][0], Slot)
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py b/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py
deleted file mode 100644
index 54f72f88bf927fd0f3a744ea6dbd5912c8ad97ef..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin \
-    import DataSourceFactoryTestMixin
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_factory import \
-    CSVExtractorFactory
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_data_source \
-    import CSVExtractorDataSource
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_model import \
-    CSVExtractorModel
-
-
-class TestCSVExtractorFactory(DataSourceFactoryTestMixin, unittest.TestCase):
-    @property
-    def factory_class(self):
-        return CSVExtractorFactory
-
-    @property
-    def model_class(self):
-        return CSVExtractorModel
-
-    @property
-    def data_source_class(self):
-        return CSVExtractorDataSource
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/__init__.py b/force_bdss/core_plugins/dummy/dummy_dakota/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py
deleted file mode 100644
index fbcb6f97be913b4aec2bea05a91f48a709bf6bf0..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import sys
-
-from force_bdss.api import (
-    BaseMCOCommunicator,
-    DataValue)
-
-
-class DummyDakotaCommunicator(BaseMCOCommunicator):
-    def receive_from_mco(self, model):
-        data = sys.stdin.read()
-        values = list(map(float, data.split()))
-        value_names = [p.name for p in model.parameters]
-        value_types = [p.type for p in model.parameters]
-
-        return [
-            DataValue(type=type_, name=name, value=value)
-            for type_, name, value in zip(
-                value_types, value_names, values)]
-
-    def send_to_mco(self, model, data_values):
-        data = " ".join([str(dv.value) for dv in data_values])
-        sys.stdout.write(data)
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py
deleted file mode 100644
index 6e6c5ccbe164cb5bbeee657f63b673a5b48f06c8..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from traits.api import String
-from force_bdss.api import factory_id, BaseMCOFactory
-from force_bdss.core_plugins.dummy.dummy_dakota.parameters import \
-    RangedMCOParameterFactory
-
-from .dakota_communicator import DummyDakotaCommunicator
-from .dakota_model import DummyDakotaModel
-from .dakota_optimizer import DummyDakotaOptimizer
-
-
-class DummyDakotaFactory(BaseMCOFactory):
-    id = String(factory_id("enthought", "dummy_dakota"))
-
-    name = "Dummy Dakota"
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-        return DummyDakotaModel(self, **model_data)
-
-    def create_optimizer(self):
-        return DummyDakotaOptimizer(self)
-
-    def create_communicator(self):
-        return DummyDakotaCommunicator(self)
-
-    def parameter_factories(self):
-        return [
-            RangedMCOParameterFactory(self)
-        ]
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py
deleted file mode 100644
index 65150979e82bf7dfe79074baf5f978053a23ef1b..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from force_bdss.api import BaseMCOModel
-
-
-class DummyDakotaModel(BaseMCOModel):
-    pass
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py
deleted file mode 100644
index 96d5fe70a617c0401f72df5e62555c0d602cd7f6..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import subprocess
-import sys
-import itertools
-import collections
-
-from force_bdss.api import BaseMCO
-
-
-def rotated_range(start, stop, starting_value):
-    r = list(range(start, stop))
-    start_idx = r.index(starting_value)
-    d = collections.deque(r)
-    d.rotate(-start_idx)
-    return list(d)
-
-
-class DummyDakotaOptimizer(BaseMCO):
-    def run(self, model):
-        parameters = model.parameters
-
-        values = []
-        for p in parameters:
-            values.append(
-                rotated_range(int(p.lower_bound),
-                              int(p.upper_bound),
-                              int(p.initial_value))
-            )
-
-        value_iterator = itertools.product(*values)
-
-        application = self.factory.plugin.application
-
-        self.started = True
-        for value in value_iterator:
-            ps = subprocess.Popen(
-                [sys.argv[0],
-                 "--evaluate",
-                 application.workflow_filepath],
-                stdout=subprocess.PIPE,
-                stdin=subprocess.PIPE)
-
-            out = ps.communicate(
-                " ".join([str(v) for v in value]).encode("utf-8"))
-            out_data = out[0].decode("utf-8").split()
-            self.new_data = {
-                'input': tuple(value),
-                'output': tuple(out_data)
-            }
-
-        self.finished = True
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py b/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py
deleted file mode 100644
index d15c6c6f26390b9ad1a4c7941f1e52a5ac7ba8df..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from traits.api import Float
-
-from force_bdss.ids import mco_parameter_id
-from force_bdss.mco.parameters.base_mco_parameter import BaseMCOParameter
-from force_bdss.mco.parameters.base_mco_parameter_factory import \
-    BaseMCOParameterFactory
-
-
-class RangedMCOParameter(BaseMCOParameter):
-    """Expresses a MCO parameter that has a range between two floating
-    point values."""
-    initial_value = Float(0.0)
-    lower_bound = Float(0.0)
-    upper_bound = Float(1.0)
-
-
-class RangedMCOParameterFactory(BaseMCOParameterFactory):
-    """The factory of the above model"""
-    id = mco_parameter_id("enthought", "dummy_dakota", "ranged")
-    model_class = RangedMCOParameter
-    name = "Range"
-    description = "A ranged parameter in floating point values."
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/__init__.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py
deleted file mode 100644
index 361e4f51944cd6d49688724891ffd0b3becb12ca..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py
+++ /dev/null
@@ -1,51 +0,0 @@
-import unittest
-
-from force_bdss.core.data_value import DataValue
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from envisage.plugin import Plugin
-
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory import (
-    DummyDakotaFactory)
-
-from force_bdss.mco.parameters.base_mco_parameter_factory import \
-    BaseMCOParameterFactory
-from force_bdss.core_plugins.dummy.dummy_dakota.parameters import \
-    RangedMCOParameter
-
-
-class TestDakotaCommunicator(unittest.TestCase):
-    def test_receive_from_mco(self):
-        factory = DummyDakotaFactory(mock.Mock(spec=Plugin))
-        mock_parameter_factory = mock.Mock(spec=BaseMCOParameterFactory)
-        model = factory.create_model()
-        model.parameters = [
-            RangedMCOParameter(mock_parameter_factory)
-        ]
-        comm = factory.create_communicator()
-
-        with mock.patch("sys.stdin") as stdin:
-            stdin.read.return_value = "1"
-
-            data = comm.receive_from_mco(model)
-            self.assertIsInstance(data, list)
-            self.assertEqual(len(data), 1)
-            self.assertEqual(data[0].value, 1)
-            self.assertEqual(data[0].type, "")
-
-    def test_send_to_mco(self):
-        factory = DummyDakotaFactory(mock.Mock(spec=Plugin))
-        model = factory.create_model()
-        comm = factory.create_communicator()
-
-        with mock.patch("sys.stdout") as stdout:
-            dv = DataValue(value=100)
-            comm.send_to_mco(model, [dv, dv])
-            self.assertEqual(stdout.write.call_args[0][0], '100 100')
-
-            comm.send_to_mco(model, [])
-            self.assertEqual(stdout.write.call_args[0][0], '')
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py
deleted file mode 100644
index e9d515a3908b982d1af9a5e38824e0c967af07c6..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import unittest
-
-from envisage.plugin import Plugin
-
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory import \
-    DummyDakotaFactory
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_model import \
-    DummyDakotaModel
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_optimizer import \
-    DummyDakotaOptimizer
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestDakotaFactory(unittest.TestCase):
-    def setUp(self):
-        self.plugin = mock.Mock(spec=Plugin)
-
-    def test_initialization(self):
-        factory = DummyDakotaFactory(self.plugin)
-        self.assertIn("dummy_dakota", factory.id)
-        self.assertEqual(factory.plugin, self.plugin)
-
-    def test_create_model(self):
-        factory = DummyDakotaFactory(self.plugin)
-        model = factory.create_model({})
-        self.assertIsInstance(model, DummyDakotaModel)
-
-        model = factory.create_model()
-        self.assertIsInstance(model, DummyDakotaModel)
-
-    def test_create_mco(self):
-        factory = DummyDakotaFactory(self.plugin)
-        ds = factory.create_optimizer()
-        self.assertIsInstance(ds, DummyDakotaOptimizer)
-
-    def test_create_communicator(self):
-        factory = DummyDakotaFactory(self.plugin)
-        ds = factory.create_optimizer()
-        self.assertIsInstance(ds, DummyDakotaOptimizer)
-
-    def test_parameter_factories(self):
-        factory = DummyDakotaFactory(self.plugin)
-        self.assertNotEqual(len(factory.parameter_factories()), 0)
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_optimizer.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_optimizer.py
deleted file mode 100644
index 34e5c186341bde5ce073c99c49d484ce4c9c4068..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_optimizer.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.dummy_dakota.parameters import (
-    RangedMCOParameter,
-    RangedMCOParameterFactory
-)
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_model import (
-    DummyDakotaModel
-)
-from force_bdss.mco.base_mco_factory import BaseMCOFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_optimizer import \
-    DummyDakotaOptimizer
-
-
-class TestDakotaOptimizer(unittest.TestCase):
-    def setUp(self):
-        self.factory = mock.Mock(spec=BaseMCOFactory)
-        self.factory.plugin = mock.Mock()
-        self.factory.plugin.application = mock.Mock()
-        self.factory.plugin.application.workflow_filepath = "whatever"
-
-    def test_initialization(self):
-        opt = DummyDakotaOptimizer(self.factory)
-        self.assertEqual(opt.factory, self.factory)
-
-    def test_run(self):
-        opt = DummyDakotaOptimizer(self.factory)
-        model = DummyDakotaModel(self.factory)
-        model.parameters = [
-            RangedMCOParameter(
-                mock.Mock(spec=RangedMCOParameterFactory),
-                lower_bound=1,
-                upper_bound=3,
-                initial_value=2)
-        ]
-
-        mock_process = mock.Mock()
-        mock_process.communicate = mock.Mock(return_value=(b"1 2 3", b""))
-
-        with mock.patch("subprocess.Popen") as mock_popen:
-            mock_popen.return_value = mock_process
-            opt.run(model)
-
-        self.assertEqual(mock_popen.call_count, 2)
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/__init__.py b/force_bdss/core_plugins/dummy/dummy_data_source/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py
deleted file mode 100644
index ac4dc61f73b6c3d9f8609187695242e852492172..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from force_bdss.api import BaseDataSource
-
-
-class DummyDataSource(BaseDataSource):
-    def run(self, model, parameters):
-        return parameters
-
-    def slots(self, model):
-        return (), ()
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py
deleted file mode 100644
index 9743e72bd8ff86698b2d18d947a9d794e1b5f3df..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from force_bdss.api import BaseDataSourceFactory, factory_id
-from .dummy_data_source_model import DummyDataSourceModel
-from .dummy_data_source import DummyDataSource
-
-
-class DummyDataSourceFactory(BaseDataSourceFactory):
-    id = factory_id("enthought", "dummy_data_source")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return DummyDataSourceModel(self, **model_data)
-
-    def create_data_source(self):
-        return DummyDataSource(self)
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py
deleted file mode 100644
index a79145f9bd9966a4834edb8ede4e89aa5500cebc..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from force_bdss.api import BaseDataSourceModel
-
-
-class DummyDataSourceModel(BaseDataSourceModel):
-    pass
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/tests/__init__.py b/force_bdss/core_plugins/dummy/dummy_data_source/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source.py b/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source.py
deleted file mode 100644
index db0b6e4912ba7dd9eb647463d528dd298a10d9b0..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source import \
-    DummyDataSource
-from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_model\
-    import \
-    DummyDataSourceModel
-from force_bdss.data_sources.base_data_source_factory import \
-    BaseDataSourceFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestDummyDataSource(unittest.TestCase):
-    def setUp(self):
-        self.factory = mock.Mock(spec=BaseDataSourceFactory)
-
-    def test_initialization(self):
-        ds = DummyDataSource(self.factory)
-        self.assertEqual(ds.factory, self.factory)
-
-    def test_slots(self):
-        ds = DummyDataSource(self.factory)
-        model = DummyDataSourceModel(self.factory)
-        slots = ds.slots(model)
-        self.assertEqual(slots, ((), ()))
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py b/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py
deleted file mode 100644
index 84e2a9ccf5c1a691bd95701d66263479cf7e7a90..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source import \
-    DummyDataSource
-from force_bdss.core_plugins.dummy.dummy_data_source\
-    .dummy_data_source_factory import DummyDataSourceFactory
-from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_model\
-    import DummyDataSourceModel
-from force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin \
-    import DataSourceFactoryTestMixin
-
-
-class TestDummyDataSourceFactory(
-        DataSourceFactoryTestMixin, unittest.TestCase):
-    @property
-    def factory_class(self):
-        return DummyDataSourceFactory
-
-    @property
-    def model_class(self):
-        return DummyDataSourceModel
-
-    @property
-    def data_source_class(self):
-        return DummyDataSource
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/__init__.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py
deleted file mode 100644
index 3e035cb77ed03c4ccd01960978eca8222f7a26c8..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from force_bdss.api import BaseKPICalculator
-
-
-class DummyKPICalculator(BaseKPICalculator):
-    def run(self, model, data_source_results):
-        return data_source_results
-
-    def slots(self, model):
-        return (), ()
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py
deleted file mode 100644
index 18176e362a03266c344f6d99ecf0c507e40a8443..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from traits.api import String
-from force_bdss.api import factory_id, BaseKPICalculatorFactory
-from .dummy_kpi_calculator import DummyKPICalculator
-from .dummy_kpi_calculator_model import DummyKPICalculatorModel
-
-
-class DummyKPICalculatorFactory(BaseKPICalculatorFactory):
-    id = String(factory_id("enthought", "dummy_kpi_calculator"))
-
-    name = String("Dummy KPI")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return DummyKPICalculatorModel(self, **model_data)
-
-    def create_kpi_calculator(self):
-        return DummyKPICalculator(self)
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py
deleted file mode 100644
index d72ee3f4556297d5ce718fbfaf6b8e555e018d8d..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from force_bdss.api import BaseKPICalculatorModel
-
-
-class DummyKPICalculatorModel(BaseKPICalculatorModel):
-    pass
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/__init__.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator.py
deleted file mode 100644
index 08aedc3e6f6e58b292276f8bd331efaa6e5e5de2..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import unittest
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator \
-    import DummyKPICalculator
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator \
-    .dummy_kpi_calculator_factory import DummyKPICalculatorFactory
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator \
-    .dummy_kpi_calculator_model import DummyKPICalculatorModel
-
-
-class TestDummyKPICalculator(unittest.TestCase):
-    def test_run(self):
-        factory = mock.Mock(spec=DummyKPICalculatorFactory)
-        kpic = DummyKPICalculator(factory)
-        model = DummyKPICalculatorModel(factory)
-        input_ = []
-        output = kpic.run(model, [])
-        self.assertEqual(input_, output)
-
-    def test_slots(self):
-        factory = mock.Mock(spec=DummyKPICalculatorFactory)
-        kpic = DummyKPICalculator(factory)
-        model = DummyKPICalculatorModel(factory)
-        self.assertEqual(kpic.slots(model), ((), ()))
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py
deleted file mode 100644
index 263611acc9e3c269552462b7dd4f1528dec9e4db..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator\
-    import \
-    DummyKPICalculator
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator\
-    .dummy_kpi_calculator_factory import \
-    DummyKPICalculatorFactory
-from force_bdss.core_plugins.dummy.dummy_kpi_calculator\
-    .dummy_kpi_calculator_model import \
-    DummyKPICalculatorModel
-from force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin \
-    import \
-    KPICalculatorFactoryTestMixin
-
-
-class TestDummyKPICalculatorFactory(
-        KPICalculatorFactoryTestMixin, unittest.TestCase):
-
-    @property
-    def factory_class(self):
-        return DummyKPICalculatorFactory
-
-    @property
-    def kpi_calculator_class(self):
-        return DummyKPICalculator
-
-    @property
-    def model_class(self):
-        return DummyKPICalculatorModel
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/__init__.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener.py
deleted file mode 100644
index d8d72417135abc21b32c6483c00f53958e11cf91..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import print_function
-
-from force_bdss.api import (
-    BaseNotificationListener,
-    MCOStartEvent,
-    MCOFinishEvent,
-    MCOProgressEvent
-)
-
-
-class DummyNotificationListener(BaseNotificationListener):
-    def deliver(self, event):
-        if isinstance(event, (MCOStartEvent, MCOFinishEvent)):
-            print(event.__class__.__name__)
-        elif isinstance(event, MCOProgressEvent):
-            print(event.__class__.__name__, event.input, event.output)
-        else:
-            print(event.__class__.__name__)
-
-    def initialize(self, model):
-        print("Initializing")
-
-    def finalize(self):
-        print("Finalizing")
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_factory.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_factory.py
deleted file mode 100644
index e8e7c37e202def30541b77353921d087fc97b6d1..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_factory.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from traits.api import String
-
-from force_bdss.api import (
-    factory_id,
-    BaseNotificationListenerFactory)
-
-from .dummy_notification_listener import DummyNotificationListener
-from .dummy_notification_listener_model import DummyNotificationListenerModel
-
-
-class DummyNotificationListenerFactory(BaseNotificationListenerFactory):
-    id = String(factory_id("enthought", "dummy_notification_listener"))
-
-    name = String("Dummy Notification Listener")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return DummyNotificationListenerModel(self, **model_data)
-
-    def create_listener(self):
-        return DummyNotificationListener(self)
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_model.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_model.py
deleted file mode 100644
index 0e2c5babca7c8b79501fdf064e728a77a5eaebc5..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/dummy_notification_listener_model.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from force_bdss.api import BaseNotificationListenerModel
-
-
-class DummyNotificationListenerModel(BaseNotificationListenerModel):
-    pass
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/__init__.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener.py
deleted file mode 100644
index 82741a48cbf9da91e31916eddc5aa17505640bb2..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import unittest
-
-from force_bdss.api import MCOStartEvent, MCOProgressEvent, MCOFinishEvent
-from force_bdss.notification_listeners.base_notification_listener_factory \
-    import \
-    BaseNotificationListenerFactory
-from force_bdss.notification_listeners.base_notification_listener_model \
-    import \
-    BaseNotificationListenerModel
-from force_bdss.tests.utils import captured_output
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.core_plugins.dummy.dummy_notification_listener \
-    .dummy_notification_listener import \
-    DummyNotificationListener
-
-
-class TestDummyNotificationListener(unittest.TestCase):
-    def test_initialization(self):
-        listener = DummyNotificationListener(
-            mock.Mock(spec=BaseNotificationListenerFactory))
-        model = mock.Mock(spec=BaseNotificationListenerModel)
-        with captured_output() as (out, err):
-            listener.initialize(model)
-            listener.deliver(MCOStartEvent())
-            listener.deliver(MCOProgressEvent())
-            listener.deliver(MCOFinishEvent())
-            listener.finalize()
-
-        self.assertEqual(
-            out.getvalue(),
-            "Initializing\nMCOStartEvent\nMCOProgressEvent () ()\n"
-            "MCOFinishEvent\nFinalizing\n")
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_factory.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_factory.py
deleted file mode 100644
index 10af546d7900afe7559f1cea610b8e744140eee2..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_factory.py
+++ /dev/null
@@ -1,26 +0,0 @@
-
-import unittest
-
-from envisage.plugin import Plugin
-
-from force_bdss.core_plugins.dummy.dummy_notification_listener\
-    .dummy_notification_listener_factory import \
-    DummyNotificationListenerFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestDummyNotificationListenerFactory(unittest.TestCase):
-    def test_create_methods(self):
-        factory = DummyNotificationListenerFactory(mock.Mock(spec=Plugin))
-        model = factory.create_model()
-        self.assertEqual(model.factory, factory)
-
-        model = factory.create_model({})
-        self.assertEqual(model.factory, factory)
-
-        listener = factory.create_listener()
-        self.assertEqual(listener.factory, factory)
diff --git a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_model.py b/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_model.py
deleted file mode 100644
index 94f3294334377541e7cd08eb30f31cdd5aa18604..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_notification_listener/tests/test_dummy_notification_listener_model.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.dummy_notification_listener\
-    .dummy_notification_listener_factory import \
-    DummyNotificationListenerFactory
-from force_bdss.core_plugins.dummy.dummy_notification_listener\
-    .dummy_notification_listener_model import \
-    DummyNotificationListenerModel
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestDummyNotificationListenerModel(unittest.TestCase):
-    def test_initialization(self):
-        factory = mock.Mock(spec=DummyNotificationListenerFactory)
-        model = DummyNotificationListenerModel(factory)
-        self.assertEqual(model.factory, factory)
diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py
deleted file mode 100644
index 766186f03a3330002830dad4c180f9098a88bfe2..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/dummy_plugin.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from force_bdss.api import BaseExtensionPlugin, plugin_id
-from .dummy_notification_listener.dummy_notification_listener_factory import (
-    DummyNotificationListenerFactory
-)
-from .csv_extractor.csv_extractor_factory import CSVExtractorFactory
-from .power_evaluator.power_evaluator_factory import PowerEvaluatorFactory
-from .kpi_adder.kpi_adder_factory import KPIAdderFactory
-from .dummy_dakota.dakota_factory import DummyDakotaFactory
-from .dummy_data_source.dummy_data_source_factory import DummyDataSourceFactory
-from .dummy_kpi_calculator.dummy_kpi_calculator_factory import (
-    DummyKPICalculatorFactory
-)
-
-
-class DummyPlugin(BaseExtensionPlugin):
-    id = plugin_id("enthought", "DummyPlugin")
-
-    def _data_source_factories_default(self):
-        return [DummyDataSourceFactory(self),
-                CSVExtractorFactory(self),
-                PowerEvaluatorFactory(self)]
-
-    def _mco_factories_default(self):
-        return [DummyDakotaFactory(self)]
-
-    def _kpi_calculator_factories_default(self):
-        return [DummyKPICalculatorFactory(self),
-                KPIAdderFactory(self)]
-
-    def _notification_listener_factories_default(self):
-        return [DummyNotificationListenerFactory(self),
-                ]
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/__init__.py b/force_bdss/core_plugins/dummy/kpi_adder/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py
deleted file mode 100644
index 793810e6c714a0e7e433355c409fd25ffebe27d9..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from force_bdss.api import BaseKPICalculator, DataValue
-from force_bdss.core.slot import Slot
-
-
-class KPIAdderCalculator(BaseKPICalculator):
-    def run(self, model, data_source_results):
-        sum = 0.0
-
-        for res in data_source_results:
-            if res.type != model.cuba_type_in:
-                continue
-
-            sum += res.value
-
-        return [
-            DataValue(
-                type=model.cuba_type_out,
-                value=sum
-            )]
-
-    def slots(self, model):
-        return (
-            (
-                Slot(type=model.cuba_type_in),
-                Slot(type=model.cuba_type_in),
-                Slot(type=model.cuba_type_in),
-            ),
-            (
-                Slot(type=model.cuba_type_out),
-            )
-        )
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py
deleted file mode 100644
index f001ff5b719abfc67a6bc2f4b4cf830e27a28709..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from traits.api import String
-
-from force_bdss.api import factory_id, BaseKPICalculatorFactory
-
-from .kpi_adder_model import KPIAdderModel
-from .kpi_adder_calculator import KPIAdderCalculator
-
-
-class KPIAdderFactory(BaseKPICalculatorFactory):
-    id = String(factory_id("enthought", "kpi_adder"))
-
-    name = String("KPI Adder")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return KPIAdderModel(self, **model_data)
-
-    def create_kpi_calculator(self):
-        return KPIAdderCalculator(self)
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
deleted file mode 100644
index cf8d0e3eda867c5b92f4e9a3839145f3375b494a..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_model.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from traits.api import String, on_trait_change
-
-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/core_plugins/dummy/kpi_adder/tests/__init__.py b/force_bdss/core_plugins/dummy/kpi_adder/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_calculator.py b/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_calculator.py
deleted file mode 100644
index d12f68990f72a2534405b6b93423f1daae7c7c0b..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_calculator.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import unittest
-
-from force_bdss.core.data_value import DataValue
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_model import \
-    KPIAdderModel
-from force_bdss.kpi.base_kpi_calculator_factory import BaseKPICalculatorFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator import \
-    KPIAdderCalculator
-
-
-class TestKPIAdderCalculator(unittest.TestCase):
-    def test_basic_functionality(self):
-        kpic = KPIAdderCalculator(mock.Mock(spec=BaseKPICalculatorFactory))
-        model = KPIAdderModel(mock.Mock(spec=BaseKPICalculatorFactory))
-        model.cuba_type_in = "PRESSURE"
-        model.cuba_type_out = "TOTAL_PRESSURE"
-        dv1 = DataValue(type="PRESSURE", value=10)
-        dv2 = DataValue(type="PRESSURE", value=30)
-        dv3 = DataValue(type="VOLUME", value=100)
-        res = kpic.run(model, [dv1, dv2, dv3])
-        self.assertEqual(res[0].type, "TOTAL_PRESSURE")
-        self.assertEqual(res[0].value, 40)
-
-    def test_slots(self):
-        kpic = KPIAdderCalculator(mock.Mock(spec=BaseKPICalculatorFactory))
-        model = KPIAdderModel(mock.Mock(spec=BaseKPICalculatorFactory))
-        in_slot, out_slot = kpic.slots(model)
-        self.assertEqual(len(in_slot), 3)
-        self.assertEqual(len(out_slot), 1)
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py b/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py
deleted file mode 100644
index ee5d96488a3ce505a6f792982c8ebf4c7ec2c976..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_factory import \
-    KPIAdderFactory
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator import \
-    KPIAdderCalculator
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_model import \
-    KPIAdderModel
-from force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin \
-    import \
-    KPICalculatorFactoryTestMixin
-
-
-class TestDummyKPICalculatorFactory(
-        KPICalculatorFactoryTestMixin, unittest.TestCase):
-
-    @property
-    def factory_class(self):
-        return KPIAdderFactory
-
-    @property
-    def kpi_calculator_class(self):
-        return KPIAdderCalculator
-
-    @property
-    def model_class(self):
-        return KPIAdderModel
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/__init__.py b/force_bdss/core_plugins/dummy/power_evaluator/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py
deleted file mode 100644
index d8eb722ea6e3f485d3311d869a4709b2cdc5d3cb..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import math
-
-from force_bdss.api import BaseDataSource, DataValue
-from force_bdss.core.slot import Slot
-
-
-class PowerEvaluatorDataSource(BaseDataSource):
-    def run(self, model, parameters):
-        x = parameters[0].value
-        return [
-            DataValue(
-                type=model.cuba_type_out,
-                value=math.pow(x, model.power)
-            )]
-
-    def slots(self, model):
-        return (
-            (
-                Slot(type=model.cuba_type_in),
-            ),
-            (
-                Slot(type=model.cuba_type_out),
-            )
-        )
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py
deleted file mode 100644
index ebd3aacf8fcd9b6a5e229756ad64a13ce9d97087..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from traits.api import String
-
-from force_bdss.api import factory_id, BaseDataSourceFactory
-
-from .power_evaluator_model import PowerEvaluatorModel
-from .power_evaluator_data_source import PowerEvaluatorDataSource
-
-
-class PowerEvaluatorFactory(BaseDataSourceFactory):
-    id = String(factory_id("enthought", "power_evaluator"))
-
-    name = String("Power Evaluator")
-
-    def create_model(self, model_data=None):
-        if model_data is None:
-            model_data = {}
-
-        return PowerEvaluatorModel(self, **model_data)
-
-    def create_data_source(self):
-        return PowerEvaluatorDataSource(self)
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py
deleted file mode 100644
index 14a2efcdb09959339213906051933ce303f18850..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from traits.api import Float, String, on_trait_change
-
-from force_bdss.api import BaseDataSourceModel
-
-
-class PowerEvaluatorModel(BaseDataSourceModel):
-    power = Float(1.0)
-    cuba_type_in = String()
-    cuba_type_out = String()
-
-    @on_trait_change("cuba_type_in,cuba_type_out")
-    def _notify_changes_slots(self):
-        self.changes_slots = True
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/__init__.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py
deleted file mode 100644
index f4d35ac929110d6a3ee513c62a1580f72aeaba04..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py
+++ /dev/null
@@ -1,57 +0,0 @@
-import unittest
-
-from force_bdss.core.data_value import DataValue
-from force_bdss.core.slot import Slot
-from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_data_source import PowerEvaluatorDataSource  # noqa
-from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_model import PowerEvaluatorModel  # noqa
-from force_bdss.data_sources.base_data_source_factory import \
-    BaseDataSourceFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class TestPowerEvaluatorDataSource(unittest.TestCase):
-    def setUp(self):
-        self.factory = mock.Mock(spec=BaseDataSourceFactory)
-
-    def test_initialization(self):
-        ds = PowerEvaluatorDataSource(self.factory)
-        self.assertEqual(ds.factory, self.factory)
-
-    def test_run(self):
-        ds = PowerEvaluatorDataSource(self.factory)
-        model = PowerEvaluatorModel(self.factory)
-        model.power = 2
-        mock_params = [DataValue(value=5, type="METER")]
-        result = ds.run(model, mock_params)
-        self.assertIsInstance(result, list)
-        self.assertEqual(len(result), 1)
-        self.assertIsInstance(result[0], DataValue)
-        self.assertEqual(result[0].value, 25)
-
-    def test_run_with_exception(self):
-        ds = PowerEvaluatorDataSource(self.factory)
-        model = PowerEvaluatorModel(self.factory)
-        mock_params = []
-        model.power = 3
-        with self.assertRaises(IndexError):
-            ds.run(model, mock_params)
-
-    def test_slots(self):
-        ds = PowerEvaluatorDataSource(self.factory)
-        model = PowerEvaluatorModel(self.factory)
-        slots = ds.slots(model)
-        self.assertEqual(len(slots), 2)
-        self.assertEqual(len(slots[0]), 1)
-        self.assertEqual(len(slots[1]), 1)
-        self.assertIsInstance(slots[0][0], Slot)
-        self.assertIsInstance(slots[1][0], Slot)
-
-        model.cuba_type_in = 'METER'
-        model.cuba_type_out = 'METER'
-        slots = ds.slots(model)
-        self.assertEqual(slots[0][0].type, 'METER')
-        self.assertEqual(slots[1][0].type, 'METER')
diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py
deleted file mode 100644
index 5df8c8f9e796042aaa8a8e0b8c4bd4500dfe4ea3..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import unittest
-
-from force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin \
-    import DataSourceFactoryTestMixin
-from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_factory import PowerEvaluatorFactory  # noqa
-from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_data_source import PowerEvaluatorDataSource  # noqa
-from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_model import PowerEvaluatorModel  # noqa
-
-
-class TestPowerEvaluatorFactory(DataSourceFactoryTestMixin,
-                                unittest.TestCase):
-    @property
-    def factory_class(self):
-        return PowerEvaluatorFactory
-
-    @property
-    def model_class(self):
-        return PowerEvaluatorModel
-
-    @property
-    def data_source_class(self):
-        return PowerEvaluatorDataSource
diff --git a/force_bdss/core_plugins/dummy/tests/__init__.py b/force_bdss/core_plugins/dummy/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py b/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
deleted file mode 100644
index 21aeb4a27ccee69e21d4f6e458f8a90866699ac5..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from envisage.plugin import Plugin
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-
-class DataSourceFactoryTestMixin(object):
-    def setUp(self):
-        self.plugin = mock.Mock(spec=Plugin)
-        super(DataSourceFactoryTestMixin, self).setUp()
-
-    # Note: we can't use metaclasses. Apparently using six.with_metaclass
-    # breaks the unittest TestCase mechanism. py3 metaclassing works.
-    @property
-    def factory_class(self):
-        raise NotImplementedError()
-
-    @property
-    def model_class(self):
-        raise NotImplementedError()
-
-    @property
-    def data_source_class(self):
-        raise NotImplementedError()
-
-    def test_initialization(self):
-        factory = self.factory_class(self.plugin)
-        self.assertNotEqual(factory.id, "")
-        self.assertEqual(factory.plugin, self.plugin)
-
-    def test_create_model(self):
-        factory = self.factory_class(self.plugin)
-        model = factory.create_model({})
-        self.assertIsInstance(model, self.model_class)
-
-        model = factory.create_model()
-        self.assertIsInstance(model, self.model_class)
-
-    def test_create_data_source(self):
-        factory = self.factory_class(self.plugin)
-        ds = factory.create_data_source()
-        self.assertIsInstance(ds, self.data_source_class)
diff --git a/force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py b/force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py
deleted file mode 100644
index 9cc48275302d03a0d2785d9dac8624630d597f7d..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py
+++ /dev/null
@@ -1,42 +0,0 @@
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from envisage.api import Plugin
-
-
-class KPICalculatorFactoryTestMixin(object):
-    def setUp(self):
-        self.plugin = mock.Mock(spec=Plugin)
-        super(KPICalculatorFactoryTestMixin, self).setUp()
-
-    @property
-    def factory_class(self):
-        raise NotImplementedError()
-
-    @property
-    def model_class(self):
-        raise NotImplementedError()
-
-    @property
-    def kpi_calculator_class(self):
-        raise NotImplementedError()
-
-    def test_initialization(self):
-        factory = self.factory_class(self.plugin)
-        self.assertNotEqual(factory.id, "")
-        self.assertEqual(factory.plugin, self.plugin)
-
-    def test_create_model(self):
-        factory = self.factory_class(self.plugin)
-        model = factory.create_model({})
-        self.assertIsInstance(model, self.model_class)
-
-        model = factory.create_model()
-        self.assertIsInstance(model, self.model_class)
-
-    def test_create_kpi_calculator(self):
-        factory = self.factory_class(self.plugin)
-        ds = factory.create_kpi_calculator()
-        self.assertIsInstance(ds, self.kpi_calculator_class)
diff --git a/force_bdss/core_plugins/dummy/tests/test_direct_execution.py b/force_bdss/core_plugins/dummy/tests/test_direct_execution.py
deleted file mode 100644
index b0f34b63318eb18f32cc6633230842f61a7177b3..0000000000000000000000000000000000000000
--- a/force_bdss/core_plugins/dummy/tests/test_direct_execution.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import unittest
-from traits.api import List
-
-from envisage.application import Application
-
-from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
-from force_bdss.cli.tests.test_execution import cd
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.core_evaluation_driver import CoreEvaluationDriver
-from force_bdss.core_plugins.dummy.dummy_plugin import DummyPlugin
-from force_bdss.tests import fixtures
-
-
-class DummyFactoryRegistryPlugin(FactoryRegistryPlugin):
-    mco_factories = List()
-    kpi_calculator_factories = List()
-    data_source_factories = List()
-    notification_listener_factories = List()
-
-
-def mock_factory_registry_plugin():
-    plugin = DummyPlugin()
-    factory_registry_plugin = DummyFactoryRegistryPlugin()
-    factory_registry_plugin.mco_factories = plugin.mco_factories
-    factory_registry_plugin.kpi_calculator_factories = \
-        plugin.kpi_calculator_factories
-    factory_registry_plugin.data_source_factories = \
-        plugin.data_source_factories
-    factory_registry_plugin.notification_listener_factories = \
-        plugin.notification_listener_factories
-    return factory_registry_plugin
-
-
-class TestDirectExecution(unittest.TestCase):
-    def setUp(self):
-        self.mock_factory_registry_plugin = mock_factory_registry_plugin()
-        application = mock.Mock(spec=Application)
-        application.get_plugin = mock.Mock(
-            return_value=self.mock_factory_registry_plugin
-        )
-        application.workflow_filepath = fixtures.get("test_csv.json")
-        self.mock_application = application
-
-    def test_initialization(self):
-        driver = CoreEvaluationDriver(
-            application=self.mock_application,
-        )
-        with cd(fixtures.dirpath()), \
-                mock.patch("sys.stdin") as stdin, \
-                mock.patch("sys.stdout") as stdout:
-
-            stdin.read.return_value = "1"
-            driver.application_started()
-            write_args = stdout.write.call_args
-
-        self.assertEqual(write_args[0][0], "85.0")
diff --git a/force_bdss/mco/base_mco_communicator.py b/force_bdss/mco/base_mco_communicator.py
index 22f023346bf5c234d848b9593c63ce49d8d7da85..fce0753a1988930ba5f24562503c47fbf02fcc54 100644
--- a/force_bdss/mco/base_mco_communicator.py
+++ b/force_bdss/mco/base_mco_communicator.py
@@ -19,8 +19,9 @@ class BaseMCOCommunicator(ABCHasStrictTraits):
     #: A reference to the factory
     factory = Instance(IMCOFactory)
 
-    def __init__(self, factory):
+    def __init__(self, factory, *args, **kwargs):
         self.factory = factory
+        super(BaseMCOCommunicator, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
     def receive_from_mco(self, model):
diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py
index ecce688715c8ce2fdcb0764bf0dabae2f05c215d..6ea3ceba0700860028b65a2a17b9b6065dbb228c 100644
--- a/force_bdss/mco/parameters/base_mco_parameter_factory.py
+++ b/force_bdss/mco/parameters/base_mco_parameter_factory.py
@@ -27,9 +27,9 @@ class BaseMCOParameterFactory(HasStrictTraits):
     # The model class to instantiate when create_model is called.
     model_class = Type('BaseMCOParameter')
 
-    def __init__(self, mco_factory):
+    def __init__(self, mco_factory, *args, **kwargs):
         self.mco_factory = mco_factory
-        super(BaseMCOParameterFactory, self).__init__()
+        super(BaseMCOParameterFactory, self).__init__(*args, **kwargs)
 
     def create_model(self, data_values=None):
         """Creates the instance of the model class and returns it.
diff --git a/force_bdss/tests/fixtures/test_empty.json b/force_bdss/tests/fixtures/test_empty.json
new file mode 100644
index 0000000000000000000000000000000000000000..4984d568725e4fca080c28f36d2fc9bf72bf1cca
--- /dev/null
+++ b/force_bdss/tests/fixtures/test_empty.json
@@ -0,0 +1,12 @@
+{
+  "version": "1",
+  "workflow": {
+    "mco": null,
+    "data_sources": [
+    ],
+    "kpi_calculators": [
+    ],
+    "notification_listeners": [
+    ]
+  }
+}
diff --git a/force_bdss/tests/fixtures/test_null.json b/force_bdss/tests/fixtures/test_null.json
index 04d2d8b7f438864a7dfe8b277a7f42d78576cdd7..8a0a016aed40e63b7ae68981e7a89bf39ec1867a 100644
--- a/force_bdss/tests/fixtures/test_null.json
+++ b/force_bdss/tests/fixtures/test_null.json
@@ -2,7 +2,7 @@
   "version": "1",
   "workflow": {
     "mco": {
-      "id": "force.bdss.enthought.factory.null_mco",
+      "id": "force.bdss.enthought.factory.test_mco",
       "model_data": {
         "parameters" : [
         ]
@@ -10,7 +10,7 @@
     },
     "data_sources": [
       {
-        "id": "force.bdss.enthought.factory.null_ds",
+        "id": "force.bdss.enthought.factory.test_ds",
         "model_data": {
           "input_slot_maps": [
           ],
@@ -21,7 +21,7 @@
     ],
     "kpi_calculators": [
       {
-        "id": "force.bdss.enthought.factory.null_kpic",
+        "id": "force.bdss.enthought.factory.test_kpic",
         "model_data": {
           "input_slot_maps": [
           ],
@@ -32,7 +32,7 @@
     ],
     "notification_listeners": [
       {
-        "id": "force.bdss.enthought.factory.null_nl",
+        "id": "force.bdss.enthought.factory.test_nl",
         "model_data": {
         }
       }
diff --git a/force_bdss/core_plugins/dummy/__init__.py b/force_bdss/tests/probe_classes/__init__.py
similarity index 100%
rename from force_bdss/core_plugins/dummy/__init__.py
rename to force_bdss/tests/probe_classes/__init__.py
diff --git a/force_bdss/tests/probe_classes/data_source.py b/force_bdss/tests/probe_classes/data_source.py
new file mode 100644
index 0000000000000000000000000000000000000000..f50f81a083eaddbf051134db1ca7b697501baf45
--- /dev/null
+++ b/force_bdss/tests/probe_classes/data_source.py
@@ -0,0 +1,73 @@
+from traits.api import Bool, Function, Str, Int, on_trait_change, Type
+
+from force_bdss.ids import factory_id
+from force_bdss.api import (
+    BaseDataSourceFactory, BaseDataSourceModel, BaseDataSource,
+    Slot
+)
+
+from .evaluator_factory import ProbeEvaluatorFactory
+
+
+def run_func(*args, **kwargs):
+    return []
+
+
+class ProbeDataSource(BaseDataSource):
+    run_function = Function(default_value=run_func)
+
+    run_called = Bool(False)
+    slots_called = Bool(False)
+
+    def run(self, model, parameters):
+        self.run_called = True
+        return self.run_function(model, parameters)
+
+    def slots(self, model):
+        self.slots_called = True
+        return (
+            tuple(Slot(type=model.input_slots_type)
+                  for _ in range(model.input_slots_size))
+        ), (
+            tuple(Slot(type=model.output_slots_type)
+                  for _ in range(model.output_slots_size))
+        )
+
+
+class ProbeDataSourceModel(BaseDataSourceModel):
+    input_slots_type = Str('PRESSURE')
+    output_slots_type = Str('PRESSURE')
+
+    input_slots_size = Int(0)
+    output_slots_size = Int(0)
+
+    @on_trait_change('input_slots_type,output_slots_type,'
+                     'input_slots_size,output_slots_size')
+    def update_slots(self):
+        self.changes_slots = True
+
+
+class ProbeDataSourceFactory(BaseDataSourceFactory,
+                             ProbeEvaluatorFactory):
+    id = Str(factory_id("enthought", "test_ds"))
+    name = Str('test_data_source')
+
+    model_class = Type(ProbeDataSourceModel)
+
+    def create_model(self, model_data=None):
+        if model_data is None:
+            model_data = {}
+        return self.model_class(
+            factory=self,
+            input_slots_type=self.input_slots_type,
+            output_slots_type=self.output_slots_type,
+            input_slots_size=self.input_slots_size,
+            output_slots_size=self.output_slots_size,
+            **model_data
+        )
+
+    def create_data_source(self):
+        return ProbeDataSource(
+            factory=self,
+            run_function=self.run_function,
+        )
diff --git a/force_bdss/tests/probe_classes/evaluator_factory.py b/force_bdss/tests/probe_classes/evaluator_factory.py
new file mode 100644
index 0000000000000000000000000000000000000000..7bcc07295dba9de6ce6d2508ba3c5b63d47a0c0b
--- /dev/null
+++ b/force_bdss/tests/probe_classes/evaluator_factory.py
@@ -0,0 +1,28 @@
+try:
+    import mock
+except ImportError:
+    from unittest import mock
+
+from envisage.plugin import Plugin
+
+from traits.api import HasStrictTraits, Function, Str, Int
+
+
+def run_func(*args, **kwargs):
+    return []
+
+
+class ProbeEvaluatorFactory(HasStrictTraits):
+    def __init__(self, plugin=None, *args, **kwargs):
+        if plugin is None:
+            plugin = mock.Mock(Plugin)
+        super(ProbeEvaluatorFactory, self).__init__(
+            plugin=plugin, *args, **kwargs)
+
+    run_function = Function(default_value=run_func)
+
+    input_slots_type = Str('PRESSURE')
+    output_slots_type = Str('PRESSURE')
+
+    input_slots_size = Int(0)
+    output_slots_size = Int(0)
diff --git a/force_bdss/tests/probe_classes/factory_registry_plugin.py b/force_bdss/tests/probe_classes/factory_registry_plugin.py
new file mode 100644
index 0000000000000000000000000000000000000000..ddf39c96e7d643b197466db80baaee2fc294ec78
--- /dev/null
+++ b/force_bdss/tests/probe_classes/factory_registry_plugin.py
@@ -0,0 +1,27 @@
+from traits.api import List
+
+from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
+
+from .mco import ProbeMCOFactory
+from .kpi_calculator import ProbeKPICalculatorFactory
+from .data_source import ProbeDataSourceFactory
+from .notification_listener import ProbeNotificationListenerFactory
+
+
+class ProbeFactoryRegistryPlugin(FactoryRegistryPlugin):
+    mco_factories = List()
+    kpi_calculator_factories = List()
+    data_source_factories = List()
+    notification_listener_factories = List()
+
+    def _mco_factories_default(self):
+        return [ProbeMCOFactory(self)]
+
+    def _kpi_calculator_factories_default(self):
+        return [ProbeKPICalculatorFactory(self)]
+
+    def _data_source_factories_default(self):
+        return [ProbeDataSourceFactory(self)]
+
+    def _notification_listener_factories_default(self):
+        return [ProbeNotificationListenerFactory(self)]
diff --git a/force_bdss/tests/probe_classes/kpi_calculator.py b/force_bdss/tests/probe_classes/kpi_calculator.py
new file mode 100644
index 0000000000000000000000000000000000000000..befdfb1366b869a600a94780356445dbcc6dabb1
--- /dev/null
+++ b/force_bdss/tests/probe_classes/kpi_calculator.py
@@ -0,0 +1,73 @@
+from traits.api import Bool, Function, Str, Int, on_trait_change, Type
+
+from force_bdss.ids import factory_id
+from force_bdss.api import (
+    BaseKPICalculatorFactory, BaseKPICalculatorModel, BaseKPICalculator,
+    Slot
+)
+
+from .evaluator_factory import ProbeEvaluatorFactory
+
+
+def run_func(*args, **kwargs):
+    return []
+
+
+class ProbeKPICalculator(BaseKPICalculator):
+    run_function = Function(default_value=run_func)
+
+    run_called = Bool(False)
+    slots_called = Bool(False)
+
+    def run(self, model, parameters):
+        self.run_called = True
+        return self.run_function(model, parameters)
+
+    def slots(self, model):
+        self.slots_called = True
+        return (
+            tuple(Slot(type=model.input_slots_type)
+                  for _ in range(model.input_slots_size))
+        ), (
+            tuple(Slot(type=model.output_slots_type)
+                  for _ in range(model.output_slots_size))
+        )
+
+
+class ProbeKPICalculatorModel(BaseKPICalculatorModel):
+    input_slots_type = Str('PRESSURE')
+    output_slots_type = Str('PRESSURE')
+
+    input_slots_size = Int(0)
+    output_slots_size = Int(0)
+
+    @on_trait_change('input_slots_type,output_slots_type,'
+                     'input_slots_size,output_slots_size')
+    def update_slots(self):
+        self.changes_slots = True
+
+
+class ProbeKPICalculatorFactory(BaseKPICalculatorFactory,
+                                ProbeEvaluatorFactory):
+    id = Str(factory_id("enthought", "test_kpic"))
+    name = Str('test_kpi_calculator')
+
+    model_class = Type(ProbeKPICalculatorModel)
+
+    def create_model(self, model_data=None):
+        if model_data is None:
+            model_data = {}
+        return self.model_class(
+            factory=self,
+            input_slots_type=self.input_slots_type,
+            output_slots_type=self.output_slots_type,
+            input_slots_size=self.input_slots_size,
+            output_slots_size=self.output_slots_size,
+            **model_data
+        )
+
+    def create_kpi_calculator(self):
+        return ProbeKPICalculator(
+            factory=self,
+            run_function=self.run_function,
+        )
diff --git a/force_bdss/tests/probe_classes/mco.py b/force_bdss/tests/probe_classes/mco.py
new file mode 100644
index 0000000000000000000000000000000000000000..369048452513afd0c0b2d8d096f1a7f0082e4c30
--- /dev/null
+++ b/force_bdss/tests/probe_classes/mco.py
@@ -0,0 +1,86 @@
+from traits.api import Str, Type, Bool, Int, Function, List
+
+from force_bdss.ids import mco_parameter_id, factory_id
+from force_bdss.core.data_value import DataValue
+from force_bdss.api import (
+    BaseMCOModel, BaseMCO, BaseMCOFactory,
+    BaseMCOParameter, BaseMCOParameterFactory,
+    BaseMCOCommunicator
+)
+
+
+class ProbeMCOModel(BaseMCOModel):
+    pass
+
+
+def run_func(*args, **kwargs):
+    return []
+
+
+class ProbeMCO(BaseMCO):
+    run_function = Function(default_value=run_func)
+
+    run_called = Bool(False)
+
+    def run(self, model):
+        self.run_called = True
+        return self.run_function(model)
+
+
+class ProbeParameter(BaseMCOParameter):
+    pass
+
+
+class ProbeParameterFactory(BaseMCOParameterFactory):
+    id = Str(mco_parameter_id("enthought", "test_mco", "test"))
+
+    model_class = Type(ProbeParameter)
+
+
+class ProbeMCOCommunicator(BaseMCOCommunicator):
+    send_called = Bool(False)
+    receive_called = Bool(False)
+
+    nb_output_data_values = Int(0)
+
+    def send_to_mco(self, model, kpi_results):
+        self.send_called = True
+
+    def receive_from_mco(self, model):
+        self.receive_called = True
+        return [
+            DataValue() for _ in range(self.nb_output_data_values)
+        ]
+
+
+class ProbeMCOFactory(BaseMCOFactory):
+    id = Str(factory_id("enthought", "test_mco"))
+
+    model_class = Type(ProbeMCOModel)
+
+    communicator_class = Type(ProbeMCOCommunicator)
+
+    mco_class = Type(ProbeMCO)
+
+    probe_parameter_factories = List(Type(ProbeParameterFactory))
+
+    nb_output_data_values = Int(0)
+
+    def create_model(self, model_data=None):
+        if model_data is None:
+            model_data = {}
+        return self.model_class(
+            self,
+            **model_data
+        )
+
+    def create_communicator(self):
+        return self.communicator_class(
+            self,
+            nb_output_data_values=self.nb_output_data_values)
+
+    def create_optimizer(self):
+        return self.mco_class(self)
+
+    def parameter_factories(self):
+        return []
diff --git a/force_bdss/tests/probe_classes/notification_listener.py b/force_bdss/tests/probe_classes/notification_listener.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc69480b5cb87fed0f9e43003322e634d527c7f5
--- /dev/null
+++ b/force_bdss/tests/probe_classes/notification_listener.py
@@ -0,0 +1,67 @@
+from traits.api import Bool, Str, Type, Function, Any
+
+from force_bdss.ids import factory_id
+from force_bdss.api import (
+    BaseNotificationListener, BaseNotificationListenerModel,
+    BaseNotificationListenerFactory)
+
+
+def pass_function(*args, **kwargs):
+    pass
+
+
+class ProbeNotificationListener(BaseNotificationListener):
+    initialize_called = Bool(False)
+    deliver_called = Bool(False)
+    finalize_called = Bool(False)
+
+    initialize_function = Function(default_value=pass_function)
+    deliver_function = Function(default_value=pass_function)
+    finalize_function = Function(default_value=pass_function)
+
+    initialize_call_args = Any()
+    deliver_call_args = Any()
+    finalize_call_args = Any(([], {}))
+
+    def initialize(self, model):
+        self.initialize_called = True
+        self.initialize_call_args = ([model], {})
+        self.initialize_function(model)
+
+    def deliver(self, event):
+        self.deliver_called = True
+        self.deliver_call_args = ([event], {})
+        self.deliver_function(event)
+
+    def finalize(self):
+        self.finalize_called = True
+        self.finalize_function()
+
+
+class ProbeNotificationListenerModel(BaseNotificationListenerModel):
+    pass
+
+
+class ProbeNotificationListenerFactory(BaseNotificationListenerFactory):
+    id = Str(factory_id("enthought", "test_nl"))
+    name = "test_notification_listener"
+
+    model_class = Type(ProbeNotificationListenerModel)
+
+    listener_class = Type(ProbeNotificationListener)
+
+    initialize_function = Function(default_value=pass_function)
+    deliver_function = Function(default_value=pass_function)
+    finalize_function = Function(default_value=pass_function)
+
+    def create_listener(self):
+        return self.listener_class(
+            self,
+            initialize_function=self.initialize_function,
+            deliver_function=self.deliver_function,
+            finalize_function=self.finalize_function)
+
+    def create_model(self, model_data=None):
+        if model_data is None:
+            model_data = {}
+        return self.model_class(self, **model_data)
diff --git a/force_bdss/tests/test_core_evaluation_driver.py b/force_bdss/tests/test_core_evaluation_driver.py
index 43101a3361b416e1330b7fd226aaab69cda83877..77058e5957621fcf6279d9a0e197f8203d5cae99 100644
--- a/force_bdss/tests/test_core_evaluation_driver.py
+++ b/force_bdss/tests/test_core_evaluation_driver.py
@@ -1,34 +1,15 @@
 import unittest
 
-from traits.api import Float, List
+from force_bdss.tests.probe_classes.factory_registry_plugin import \
+    ProbeFactoryRegistryPlugin
+from force_bdss.tests.probe_classes.mco import ProbeMCOFactory
+from force_bdss.tests.probe_classes.data_source import ProbeDataSourceFactory
+from force_bdss.tests.probe_classes.kpi_calculator import (
+    ProbeKPICalculatorFactory)
 
 from force_bdss.core.input_slot_map import InputSlotMap
-from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
 from force_bdss.core.data_value import DataValue
 from force_bdss.core.slot import Slot
-from force_bdss.data_sources.base_data_source import BaseDataSource
-from force_bdss.data_sources.base_data_source_factory import \
-    BaseDataSourceFactory
-from force_bdss.data_sources.base_data_source_model import BaseDataSourceModel
-from force_bdss.ids import mco_parameter_id, factory_id
-from force_bdss.kpi.base_kpi_calculator import BaseKPICalculator
-from force_bdss.kpi.base_kpi_calculator_factory import BaseKPICalculatorFactory
-from force_bdss.kpi.base_kpi_calculator_model import BaseKPICalculatorModel
-from force_bdss.mco.base_mco import BaseMCO
-from force_bdss.mco.base_mco_factory import BaseMCOFactory
-from force_bdss.mco.base_mco_communicator import BaseMCOCommunicator
-from force_bdss.mco.base_mco_model import BaseMCOModel
-from force_bdss.mco.parameters.base_mco_parameter import BaseMCOParameter
-from force_bdss.mco.parameters.base_mco_parameter_factory import \
-    BaseMCOParameterFactory
-from force_bdss.notification_listeners.base_notification_listener import \
-    BaseNotificationListener
-from force_bdss.notification_listeners.base_notification_listener_factory \
-    import \
-    BaseNotificationListenerFactory
-from force_bdss.notification_listeners.base_notification_listener_model \
-    import \
-    BaseNotificationListenerModel
 from force_bdss.tests import fixtures
 
 try:
@@ -42,212 +23,12 @@ from force_bdss.core_evaluation_driver import CoreEvaluationDriver, \
     _bind_data_values, _compute_layer_results
 
 
-class NullMCOModel(BaseMCOModel):
-    pass
-
-
-class NullMCO(BaseMCO):
-    def run(self, model):
-        pass
-
-
-class RangedParameter(BaseMCOParameter):
-    initial_value = Float()
-    lower_bound = Float()
-    upper_bound = Float()
-
-
-class RangedParameterFactory(BaseMCOParameterFactory):
-    id = mco_parameter_id("enthought", "null_mco", "null")
-    model_class = RangedParameter
-
-
-class NullMCOCommunicator(BaseMCOCommunicator):
-    def send_to_mco(self, model, kpi_results):
-        pass
-
-    def receive_from_mco(self, model):
-        return []
-
-
-class OneDataValueMCOCommunicator(BaseMCOCommunicator):
-    """A communicator that returns one single datavalue, for testing purposes.
-    """
-    def send_to_mco(self, model, kpi_results):
-        pass
-
-    def receive_from_mco(self, model):
-        return [
-            DataValue()
-        ]
-
-
-class NullMCOFactory(BaseMCOFactory):
-    id = factory_id("enthought", "null_mco")
-
-    def create_model(self, model_data=None):
-        return NullMCOModel(self, **model_data)
-
-    def create_communicator(self):
-        return NullMCOCommunicator(self)
-
-    def create_optimizer(self):
-        return NullMCO(self)
-
-    def parameter_factories(self):
-        return []
-
-
-class NullKPICalculatorModel(BaseKPICalculatorModel):
-    pass
-
-
-class NullKPICalculator(BaseKPICalculator):
-    def run(self, model, data_source_results):
-        return []
-
-    def slots(self, model):
-        return (), ()
-
-
-class BrokenOneValueKPICalculator(BaseKPICalculator):
-    def run(self, model, data_source_results):
-        return [DataValue()]
-
-    def slots(self, model):
-        return (), ()
-
-
-class OneValueKPICalculator(BaseKPICalculator):
-    def run(self, model, data_source_results):
-        return [DataValue()]
-
-    def slots(self, model):
-        return (), (Slot(), )
-
-
-class NullKPICalculatorFactory(BaseKPICalculatorFactory):
-    id = factory_id("enthought", "null_kpic")
-    name = "null_kpic"
-
-    def create_model(self, model_data=None):
-        return NullKPICalculatorModel(self)
-
-    def create_kpi_calculator(self):
-        return NullKPICalculator(self)
-
-
-class NullDataSourceModel(BaseDataSourceModel):
-    pass
-
-
-class NullDataSource(BaseDataSource):
-    def run(self, model, parameters):
-        return []
-
-    def slots(self, model):
-        return (), ()
-
-
-class BrokenOneValueDataSource(BaseDataSource):
-    """Incorrect data source implementation whose run returns a data value
-    but no slot was specified for it."""
-    def run(self, model, parameters):
-        return [DataValue()]
-
-    def slots(self, model):
-        return (), ()
-
-
-class OneValueDataSource(BaseDataSource):
-    """Incorrect data source implementation whose run returns a data value
-    but no slot was specified for it."""
-    def run(self, model, parameters):
-        return [DataValue()]
-
-    def slots(self, model):
-        return (), (
-            Slot(),
-        )
-
-
-class TwoInputsThreeOutputsDataSource(BaseDataSource):
-    """Incorrect data source implementation whose run returns a data value
-    but no slot was specified for it."""
-    def run(self, model, parameters):
-        return [DataValue(value=1), DataValue(value=2), DataValue(value=3)]
-
-    def slots(self, model):
-        return (
-            (Slot(), Slot()),
-            (Slot(), Slot(), Slot())
-        )
-
-
-class NullDataSourceFactory(BaseDataSourceFactory):
-    id = factory_id("enthought", "null_ds")
-    name = "null_ds"
-
-    def create_model(self, model_data=None):
-        return NullDataSourceModel(self)
-
-    def create_data_source(self):
-        return NullDataSource(self)
-
-
-class NullNotificationListener(BaseNotificationListener):
-    def initialize(self, model):
-        pass
-
-    def deliver(self, event):
-        pass
-
-    def finalize(self):
-        pass
-
-
-class NullNotificationListenerModel(BaseNotificationListenerModel):
-    pass
-
-
-class NullNotificationListenerFactory(BaseNotificationListenerFactory):
-    id = factory_id("enthought", "null_nl")
-    name = "null_nl"
-
-    def create_listener(self):
-        return NullNotificationListener(self)
-
-    def create_model(self, model_data=None):
-        return NullNotificationListenerModel(self)
-
-
-class DummyFactoryRegistryPlugin(FactoryRegistryPlugin):
-    mco_factories = List()
-    kpi_calculator_factories = List()
-    data_source_factories = List()
-    notification_listener_factories = List()
-
-
-def mock_factory_registry_plugin():
-    factory_registry_plugin = DummyFactoryRegistryPlugin()
-    factory_registry_plugin.mco_factories = [
-        NullMCOFactory(factory_registry_plugin)]
-    factory_registry_plugin.kpi_calculator_factories = [
-        NullKPICalculatorFactory(factory_registry_plugin)]
-    factory_registry_plugin.data_source_factories = [
-        NullDataSourceFactory(factory_registry_plugin)]
-    factory_registry_plugin.notification_listener_factories = [
-        NullNotificationListenerFactory(factory_registry_plugin)
-    ]
-    return factory_registry_plugin
-
-
 class TestCoreEvaluationDriver(unittest.TestCase):
     def setUp(self):
-        self.mock_factory_registry_plugin = mock_factory_registry_plugin()
+        self.factory_registry_plugin = ProbeFactoryRegistryPlugin()
         application = mock.Mock(spec=Application)
         application.get_plugin = mock.Mock(
-            return_value=self.mock_factory_registry_plugin
+            return_value=self.factory_registry_plugin
         )
         application.workflow_filepath = fixtures.get("test_null.json")
         self.mock_application = application
@@ -259,78 +40,93 @@ class TestCoreEvaluationDriver(unittest.TestCase):
         driver.application_started()
 
     def test_error_for_non_matching_mco_parameters(self):
-        factory = self.mock_factory_registry_plugin.mco_factories[0]
-        with mock.patch.object(factory.__class__,
-                               "create_communicator") as create_comm:
-            create_comm.return_value = OneDataValueMCOCommunicator(
-                factory)
-            driver = CoreEvaluationDriver(
-                application=self.mock_application,
-            )
-            with self.assertRaisesRegexp(
-                    RuntimeError,
-                    "The number of data values returned by the MCO"):
-                driver.application_started()
+        mco_factories = self.factory_registry_plugin.mco_factories
+        mco_factories[0] = ProbeMCOFactory(
+            None,
+            nb_output_data_values=1)
+        driver = CoreEvaluationDriver(
+            application=self.mock_application)
+        with self.assertRaisesRegexp(
+                RuntimeError,
+                "The number of data values returned by the MCO"):
+            driver.application_started()
 
     def test_error_for_incorrect_output_slots(self):
-        factory = self.mock_factory_registry_plugin.data_source_factories[0]
-        with mock.patch.object(factory.__class__,
-                               "create_data_source") as create_ds:
-            create_ds.return_value = BrokenOneValueDataSource(factory)
-            driver = CoreEvaluationDriver(
-                application=self.mock_application,
-            )
-            with self.assertRaisesRegexp(
-                    RuntimeError,
-                    "The number of data values \(1 values\)"
-                    " returned by 'null_ds' does not match"
-                    " the number of output slots"):
-                driver.application_started()
+        data_source_factories = \
+            self.factory_registry_plugin.data_source_factories
+
+        def run(self, *args, **kwargs):
+            return [DataValue()]
+        data_source_factories[0] = ProbeDataSourceFactory(
+            None,
+            run_function=run)
+        driver = CoreEvaluationDriver(
+            application=self.mock_application)
+        with self.assertRaisesRegexp(
+                RuntimeError,
+                "The number of data values \(1 values\)"
+                " returned by 'test_data_source' does not match"
+                " the number of output slots"):
+            driver.application_started()
 
     def test_error_for_missing_ds_output_names(self):
-        factory = self.mock_factory_registry_plugin.data_source_factories[0]
-        with mock.patch.object(factory.__class__,
-                               "create_data_source") as create_ds:
-            create_ds.return_value = OneValueDataSource(factory)
-            driver = CoreEvaluationDriver(
-                application=self.mock_application,
-            )
-            with self.assertRaisesRegexp(
-                    RuntimeError,
-                    "The number of data values \(1 values\)"
-                    " returned by 'null_ds' does not match"
-                    " the number of user-defined names"):
-                driver.application_started()
+        data_source_factories = \
+            self.factory_registry_plugin.data_source_factories
+
+        def run(self, *args, **kwargs):
+            return [DataValue()]
+        data_source_factories[0] = ProbeDataSourceFactory(
+            None,
+            run_function=run,
+            output_slots_size=1)
+        driver = CoreEvaluationDriver(
+            application=self.mock_application,
+        )
+        with self.assertRaisesRegexp(
+                RuntimeError,
+                "The number of data values \(1 values\)"
+                " returned by 'test_data_source' does not match"
+                " the number of user-defined names"):
+            driver.application_started()
 
     def test_error_for_incorrect_kpic_output_slots(self):
-        factory = self.mock_factory_registry_plugin.kpi_calculator_factories[0]
-        with mock.patch.object(factory.__class__,
-                               "create_kpi_calculator") as create_kpic:
-            create_kpic.return_value = BrokenOneValueKPICalculator(factory)
-            driver = CoreEvaluationDriver(
-                application=self.mock_application,
-            )
-            with self.assertRaisesRegexp(
-                    RuntimeError,
-                    "The number of data values \(1 values\)"
-                    " returned by 'null_kpic' does not match"
-                    " the number of output slots"):
-                driver.application_started()
+        kpi_calculator_factories = \
+            self.factory_registry_plugin.kpi_calculator_factories
+
+        def run(self, *args, **kwargs):
+            return [DataValue()]
+        kpi_calculator_factories[0] = ProbeKPICalculatorFactory(
+            None,
+            run_function=run)
+        driver = CoreEvaluationDriver(
+            application=self.mock_application,
+        )
+        with self.assertRaisesRegexp(
+                RuntimeError,
+                "The number of data values \(1 values\)"
+                " returned by 'test_kpi_calculator' does not match"
+                " the number of output slots"):
+            driver.application_started()
 
     def test_error_for_missing_kpic_output_names(self):
-        factory = self.mock_factory_registry_plugin.kpi_calculator_factories[0]
-        with mock.patch.object(factory.__class__,
-                               "create_kpi_calculator") as create_kpic:
-            create_kpic.return_value = OneValueKPICalculator(factory)
-            driver = CoreEvaluationDriver(
-                application=self.mock_application,
-            )
-            with self.assertRaisesRegexp(
-                    RuntimeError,
-                    "The number of data values \(1 values\)"
-                    " returned by 'null_kpic' does not match"
-                    " the number of user-defined names"):
-                driver.application_started()
+        kpi_calculator_factories = \
+            self.factory_registry_plugin.kpi_calculator_factories
+
+        def run(self, *args, **kwargs):
+            return [DataValue()]
+        kpi_calculator_factories[0] = ProbeKPICalculatorFactory(
+            None,
+            run_function=run,
+            output_slots_size=1)
+        driver = CoreEvaluationDriver(
+            application=self.mock_application,
+        )
+        with self.assertRaisesRegexp(
+                RuntimeError,
+                "The number of data values \(1 values\)"
+                " returned by 'test_kpi_calculator' does not match"
+                " the number of user-defined names"):
+            driver.application_started()
 
     def test_bind_data_values(self):
         data_values = [
@@ -377,7 +173,6 @@ class TestCoreEvaluationDriver(unittest.TestCase):
             _bind_data_values(data_values, slot_map, slots)
 
     def test_compute_layer_results(self):
-
         data_values = [
             DataValue(name="foo"),
             DataValue(name="bar"),
@@ -385,11 +180,14 @@ class TestCoreEvaluationDriver(unittest.TestCase):
             DataValue(name="quux")
         ]
 
-        mock_ds_factory = mock.Mock(spec=BaseDataSourceFactory)
-        mock_ds_factory.name = "mock factory"
-        mock_ds_factory.create_data_source.return_value = \
-            TwoInputsThreeOutputsDataSource(mock_ds_factory)
-        evaluator_model = NullDataSourceModel(factory=mock_ds_factory)
+        def run(self, *args, **kwargs):
+            return [DataValue(value=1), DataValue(value=2), DataValue(value=3)]
+        ds_factory = ProbeDataSourceFactory(
+            None,
+            input_slots_size=2,
+            output_slots_size=3,
+            run_function=run)
+        evaluator_model = ds_factory.create_model()
 
         evaluator_model.input_slot_maps = [
             InputSlotMap(name="foo"),
diff --git a/force_bdss/tests/test_core_mco_driver.py b/force_bdss/tests/test_core_mco_driver.py
index 3a4b33f2d9f15205bf9ebb8debafe85ec088c534..057be4b47a51a72f7998ca9abd2fb24af1cf00ae 100644
--- a/force_bdss/tests/test_core_mco_driver.py
+++ b/force_bdss/tests/test_core_mco_driver.py
@@ -1,13 +1,11 @@
 import unittest
 from testfixtures import LogCapture
 
+from force_bdss.tests.probe_classes.factory_registry_plugin import \
+    ProbeFactoryRegistryPlugin
 from force_bdss.core_driver_events import (
     MCOStartEvent, MCOFinishEvent, MCOProgressEvent)
-from force_bdss.notification_listeners.base_notification_listener import \
-    BaseNotificationListener
 from force_bdss.tests import fixtures
-from force_bdss.tests.test_core_evaluation_driver import \
-    mock_factory_registry_plugin
 
 try:
     import mock
@@ -19,12 +17,16 @@ from envisage.api import Application
 from force_bdss.core_mco_driver import CoreMCODriver
 
 
+def raise_exception(*args, **kwargs):
+    raise Exception()
+
+
 class TestCoreMCODriver(unittest.TestCase):
     def setUp(self):
-        self.mock_factory_registry_plugin = mock_factory_registry_plugin()
+        self.factory_registry_plugin = ProbeFactoryRegistryPlugin()
         application = mock.Mock(spec=Application)
         application.get_plugin = mock.Mock(
-            return_value=self.mock_factory_registry_plugin
+            return_value=self.factory_registry_plugin
         )
         application.workflow_filepath = fixtures.get("test_null.json")
         self.mock_application = application
@@ -53,45 +55,36 @@ class TestCoreMCODriver(unittest.TestCase):
             application=self.mock_application,
         )
         listener = driver.listeners[0]
-        mock_deliver = mock.Mock()
-        listener.__dict__["deliver"] = mock_deliver
         driver.mco.started = True
-        self.assertIsInstance(mock_deliver.call_args[0][0], MCOStartEvent)
+        self.assertIsInstance(listener.deliver_call_args[0][0], MCOStartEvent)
 
     def test_finished_event_handling(self):
         driver = CoreMCODriver(
             application=self.mock_application,
         )
         listener = driver.listeners[0]
-        mock_deliver = mock.Mock()
-        listener.__dict__["deliver"] = mock_deliver
         driver.mco.finished = True
-        self.assertIsInstance(mock_deliver.call_args[0][0], MCOFinishEvent)
+        self.assertIsInstance(listener.deliver_call_args[0][0], MCOFinishEvent)
 
     def test_progress_event_handling(self):
         driver = CoreMCODriver(
             application=self.mock_application,
         )
         listener = driver.listeners[0]
-        mock_deliver = mock.Mock()
-        listener.__dict__["deliver"] = mock_deliver
         driver.mco.new_data = {'input': (1, 2), 'output': (3, 4)}
-        self.assertIsInstance(mock_deliver.call_args[0][0], MCOProgressEvent)
-        self.assertEqual(mock_deliver.call_args[0][0].input, (1, 2))
-        self.assertEqual(mock_deliver.call_args[0][0].output, (3, 4))
+        self.assertIsInstance(
+            listener.deliver_call_args[0][0],
+            MCOProgressEvent)
+        self.assertEqual(listener.deliver_call_args[0][0].input, (1, 2))
+        self.assertEqual(listener.deliver_call_args[0][0].output, (3, 4))
 
     def test_listener_init_exception(self):
         driver = CoreMCODriver(
             application=self.mock_application,
         )
-        registry = self.mock_factory_registry_plugin
+        registry = self.factory_registry_plugin
         factory = registry.notification_listener_factories[0]
-        mock_create_listener = mock.Mock()
-        mock_listener = mock.Mock(spec=BaseNotificationListener)
-        mock_create_listener.return_value = mock_listener
-        mock_listener.initialize = mock.Mock()
-        mock_listener.initialize.side_effect = Exception()
-        factory.__dict__["create_listener"] = mock_create_listener
+        factory.initialize_function = raise_exception
         with LogCapture() as capture:
             listeners = driver.listeners
 
@@ -99,7 +92,7 @@ class TestCoreMCODriver(unittest.TestCase):
                 ("force_bdss.core_mco_driver",
                  "ERROR",
                  "Failed to create or initialize listener with id "
-                 "force.bdss.enthought.factory.null_nl: "))
+                 "force.bdss.enthought.factory.test_nl: "))
 
             self.assertEqual(len(listeners), 0)
 
@@ -108,18 +101,16 @@ class TestCoreMCODriver(unittest.TestCase):
             application=self.mock_application,
         )
         listener = driver.listeners[0]
-        mock_deliver = mock.Mock()
-        listener.__dict__["deliver"] = mock_deliver
-        mock_deliver.side_effect = Exception()
+        listener.deliver_function = raise_exception
         with LogCapture() as capture:
             driver.mco.started = True
-            self.assertTrue(mock_deliver.called)
+            self.assertTrue(listener.deliver_called)
 
             capture.check(
                 ("force_bdss.core_mco_driver",
                  "ERROR",
                  "Exception while delivering to listener "
-                 "NullNotificationListener: "))
+                 "ProbeNotificationListener: "))
 
     def test_finalize_error(self):
         driver = CoreMCODriver(
@@ -128,14 +119,11 @@ class TestCoreMCODriver(unittest.TestCase):
         driver.application_started()
 
         listener = driver.listeners[0]
-        mock_finalize = mock.Mock()
-        listener.__dict__["finalize"] = mock_finalize
-        mock_finalize.side_effect = Exception()
-
+        listener.finalize_function = raise_exception
         with LogCapture() as capture:
             driver.application_stopping()
             capture.check(
                 ("force_bdss.core_mco_driver",
                  "ERROR",
                  "Exception while finalizing listener "
-                 "NullNotificationListener: "))
+                 "ProbeNotificationListener: "))
diff --git a/setup.py b/setup.py
index a459f65f90103a4864d8aa3282a863af2018ace1..40e184df965b9bb87766eab6e8d1384b71f0f349 100644
--- a/setup.py
+++ b/setup.py
@@ -28,9 +28,6 @@ setup(
         'console_scripts': [
             'force_bdss = force_bdss.cli.force_bdss:run',
         ],
-        "force.bdss.extensions": [
-            "dummy = force_bdss.core_plugins.dummy.dummy_plugin:DummyPlugin",
-        ]
     },
     packages=find_packages(),
     install_requires=[