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
index 0db16a6675b7671c06903351b160229e47566b3b..e1bfabe71e6622f289e0ae4c30cb9ec3908f06e2 100644
--- a/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.rst
+++ b/doc/source/api/force_bdss.core_plugins.dummy.csv_extractor.rst
@@ -11,18 +11,18 @@ Subpackages
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_bundle module
------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_data_source module
+----------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_bundle
+.. 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_data_source module
-----------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_factory module
+------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_data_source
+.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_factory
     :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
index a93a5fc4096ee9a1fedeb5c2141b40e22456bcd3..bc15d4ccf54e88665df9360316efeaf233202dff 100644
--- 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
@@ -4,18 +4,18 @@ force_bdss.core_plugins.dummy.csv_extractor.tests package
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.csv_extractor.tests.test_csv_extractor_bundle module
-----------------------------------------------------------------------------------
+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_bundle
+.. 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_data_source module
----------------------------------------------------------------------------------------
+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_data_source
+.. automodule:: force_bdss.core_plugins.dummy.csv_extractor.tests.test_csv_extractor_factory
     :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
index 0d90d4a58cfd87477922ea9af947b4c9fca5c450..da727e9a6af5b41d38fcdf6d526171b182d4c1f2 100644
--- a/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.rst
+++ b/doc/source/api/force_bdss.core_plugins.dummy.dummy_dakota.rst
@@ -11,18 +11,18 @@ Subpackages
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.dummy_dakota.dakota_bundle module
----------------------------------------------------------------
+force_bdss.core_plugins.dummy.dummy_dakota.dakota_communicator module
+---------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_bundle
+.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_communicator
     :members:
     :undoc-members:
     :show-inheritance:
 
-force_bdss.core_plugins.dummy.dummy_dakota.dakota_communicator module
----------------------------------------------------------------------
+force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory module
+----------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_communicator
+.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory
     :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
index febc1cb487e5b89984ef0c82d5aadd2e7cd5058b..f16cfb6acd559c4adbe26caf68d77a9f0b0a8a8a 100644
--- 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
@@ -4,18 +4,18 @@ force_bdss.core_plugins.dummy.dummy_dakota.tests package
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_bundle module
---------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_communicator module
+--------------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_bundle
+.. 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_communicator module
---------------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_factory module
+---------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_communicator
+.. automodule:: force_bdss.core_plugins.dummy.dummy_dakota.tests.test_dakota_factory
     :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
index f6b31d3bbaf5a90a1f95755423a1d36931a5d168..d0d5addb2c0a48e5275c71354717efcb9ec278aa 100644
--- 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
@@ -19,10 +19,10 @@ force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_bundle module
--------------------------------------------------------------------------------
+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_bundle
+.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_factory
     :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
index 84c724a0bce909180744f3812a3617e28a318f56..ba04010fb22db50b2deaa4600a371471331f3ffd 100644
--- 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
@@ -12,10 +12,10 @@ force_bdss.core_plugins.dummy.dummy_data_source.tests.test_dummy_data_source mod
     :undoc-members:
     :show-inheritance:
 
-force_bdss.core_plugins.dummy.dummy_data_source.tests.test_dummy_data_source_bundle module
-------------------------------------------------------------------------------------------
+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_bundle
+.. automodule:: force_bdss.core_plugins.dummy.dummy_data_source.tests.test_dummy_data_source_factory
     :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
index c02d6eeef6e62d171fcccee196f8d65bc9dfc1a3..c4b53e3047db8eb77157baf3a2ef0a6a36d01dd3 100644
--- 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
@@ -19,10 +19,10 @@ force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator_bundle module
--------------------------------------------------------------------------------------
+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_bundle
+.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.dummy_kpi_calculator_factory
     :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
index db2590a127da10f57b08460b12d490a0c80acda9..99dbeff87ae0a0c817f993ad482d41fbe10ddc5e 100644
--- 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
@@ -12,10 +12,10 @@ force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.test_dummy_kpi_calculat
     :undoc-members:
     :show-inheritance:
 
-force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.test_dummy_kpi_calculator_bundle module
-------------------------------------------------------------------------------------------------
+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_bundle
+.. automodule:: force_bdss.core_plugins.dummy.dummy_kpi_calculator.tests.test_dummy_kpi_calculator_factory
     :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
index e50d5f5412539c27e21d7a476823ff9408d26987..67bf40270dfca751a9ca1209b0d2c2f0221a9287 100644
--- a/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.rst
+++ b/doc/source/api/force_bdss.core_plugins.dummy.kpi_adder.rst
@@ -11,18 +11,18 @@ Subpackages
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_bundle module
----------------------------------------------------------------
+force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator module
+-------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_bundle
+.. 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_calculator module
--------------------------------------------------------------------
+force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_factory module
+----------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator
+.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_factory
     :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
index 1f08d8f05b81fa6c261c8425825427ff1fcb3fe8..bde777c1c1b0c216340ec0449c5c30fbe1bd2efa 100644
--- 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
@@ -4,18 +4,18 @@ force_bdss.core_plugins.dummy.kpi_adder.tests package
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.kpi_adder.tests.test_kpi_adder_bundle module
---------------------------------------------------------------------------
+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_bundle
+.. 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_calculator module
-------------------------------------------------------------------------------
+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_calculator
+.. automodule:: force_bdss.core_plugins.dummy.kpi_adder.tests.test_kpi_adder_factory
     :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
index 62d415bda34bce5ccd29614de5ba6673580cda08..5796f32993d0a6c988b4f6cd0035958ae8c553be 100644
--- a/doc/source/api/force_bdss.core_plugins.dummy.tests.rst
+++ b/doc/source/api/force_bdss.core_plugins.dummy.tests.rst
@@ -4,18 +4,18 @@ force_bdss.core_plugins.dummy.tests package
 Submodules
 ----------
 
-force_bdss.core_plugins.dummy.tests.data_source_bundle_test_mixin module
-------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin module
+-------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.tests.data_source_bundle_test_mixin
+.. 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_bundle_test_mixin module
----------------------------------------------------------------------------
+force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin module
+----------------------------------------------------------------------------
 
-.. automodule:: force_bdss.core_plugins.dummy.tests.kpi_calculator_bundle_test_mixin
+.. automodule:: force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.data_sources.rst b/doc/source/api/force_bdss.data_sources.rst
index 0d7330fb60412b83b9723f41098044db8536f0d3..f984d6d4fb4bb990dd81d2abdb4a9a92dac2390d 100644
--- a/doc/source/api/force_bdss.data_sources.rst
+++ b/doc/source/api/force_bdss.data_sources.rst
@@ -19,10 +19,10 @@ force_bdss.data_sources.base_data_source module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.data_sources.base_data_source_bundle module
-------------------------------------------------------
+force_bdss.data_sources.base_data_source_factory module
+-------------------------------------------------------
 
-.. automodule:: force_bdss.data_sources.base_data_source_bundle
+.. automodule:: force_bdss.data_sources.base_data_source_factory
     :members:
     :undoc-members:
     :show-inheritance:
@@ -35,10 +35,10 @@ force_bdss.data_sources.base_data_source_model module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.data_sources.i_data_source_bundle module
----------------------------------------------------
+force_bdss.data_sources.i_data_source_factory module
+----------------------------------------------------
 
-.. automodule:: force_bdss.data_sources.i_data_source_bundle
+.. automodule:: force_bdss.data_sources.i_data_source_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.data_sources.tests.rst b/doc/source/api/force_bdss.data_sources.tests.rst
index 7e3cc42616275ffc306d47b5deccba358e3ddfae..16d8fcd8f8effc282886f912b4bb638ca1f62118 100644
--- a/doc/source/api/force_bdss.data_sources.tests.rst
+++ b/doc/source/api/force_bdss.data_sources.tests.rst
@@ -12,10 +12,10 @@ force_bdss.data_sources.tests.test_base_data_source module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.data_sources.tests.test_base_data_source_bundle module
------------------------------------------------------------------
+force_bdss.data_sources.tests.test_base_data_source_factory module
+------------------------------------------------------------------
 
-.. automodule:: force_bdss.data_sources.tests.test_base_data_source_bundle
+.. automodule:: force_bdss.data_sources.tests.test_base_data_source_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.kpi.rst b/doc/source/api/force_bdss.kpi.rst
index 55b751599bfeada834e14115e197c0aef1f07799..2215a99b3293d2d4d969d19dbb3dafb47371613c 100644
--- a/doc/source/api/force_bdss.kpi.rst
+++ b/doc/source/api/force_bdss.kpi.rst
@@ -19,10 +19,10 @@ force_bdss.kpi.base_kpi_calculator module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.kpi.base_kpi_calculator_bundle module
-------------------------------------------------
+force_bdss.kpi.base_kpi_calculator_factory module
+-------------------------------------------------
 
-.. automodule:: force_bdss.kpi.base_kpi_calculator_bundle
+.. automodule:: force_bdss.kpi.base_kpi_calculator_factory
     :members:
     :undoc-members:
     :show-inheritance:
@@ -35,10 +35,10 @@ force_bdss.kpi.base_kpi_calculator_model module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.kpi.i_kpi_calculator_bundle module
----------------------------------------------
+force_bdss.kpi.i_kpi_calculator_factory module
+----------------------------------------------
 
-.. automodule:: force_bdss.kpi.i_kpi_calculator_bundle
+.. automodule:: force_bdss.kpi.i_kpi_calculator_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.kpi.tests.rst b/doc/source/api/force_bdss.kpi.tests.rst
index 96c191623081ab254267fe0e4fab43df8b63de66..3ab64ce53fa147e534b9d9ec5a333285df68475b 100644
--- a/doc/source/api/force_bdss.kpi.tests.rst
+++ b/doc/source/api/force_bdss.kpi.tests.rst
@@ -12,10 +12,10 @@ force_bdss.kpi.tests.test_base_kpi_calculator module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.kpi.tests.test_base_kpi_calculator_bundle module
------------------------------------------------------------
+force_bdss.kpi.tests.test_base_kpi_calculator_factory module
+------------------------------------------------------------
 
-.. automodule:: force_bdss.kpi.tests.test_base_kpi_calculator_bundle
+.. automodule:: force_bdss.kpi.tests.test_base_kpi_calculator_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.mco.rst b/doc/source/api/force_bdss.mco.rst
index c8047b33691b51c57d8f3ac75629b1c6f206f8ff..9e86c876080494051ae0b990cd0d400202f99065 100644
--- a/doc/source/api/force_bdss.mco.rst
+++ b/doc/source/api/force_bdss.mco.rst
@@ -20,18 +20,18 @@ force_bdss.mco.base_mco module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.mco.base_mco_bundle module
--------------------------------------
+force_bdss.mco.base_mco_communicator module
+-------------------------------------------
 
-.. automodule:: force_bdss.mco.base_mco_bundle
+.. automodule:: force_bdss.mco.base_mco_communicator
     :members:
     :undoc-members:
     :show-inheritance:
 
-force_bdss.mco.base_mco_communicator module
--------------------------------------------
+force_bdss.mco.base_mco_factory module
+--------------------------------------
 
-.. automodule:: force_bdss.mco.base_mco_communicator
+.. automodule:: force_bdss.mco.base_mco_factory
     :members:
     :undoc-members:
     :show-inheritance:
@@ -44,10 +44,10 @@ force_bdss.mco.base_mco_model module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.mco.i_mco_bundle module
-----------------------------------
+force_bdss.mco.i_mco_factory module
+-----------------------------------
 
-.. automodule:: force_bdss.mco.i_mco_bundle
+.. automodule:: force_bdss.mco.i_mco_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.mco.tests.rst b/doc/source/api/force_bdss.mco.tests.rst
index 6dbcf8432a56e54097c8d928f481e2ee23fed06b..f1af86e01f9d3bd09bc5b3c560cba6cc4c83758a 100644
--- a/doc/source/api/force_bdss.mco.tests.rst
+++ b/doc/source/api/force_bdss.mco.tests.rst
@@ -12,18 +12,18 @@ force_bdss.mco.tests.test_base_mco module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.mco.tests.test_base_mco_bundle module
-------------------------------------------------
+force_bdss.mco.tests.test_base_mco_communicator module
+------------------------------------------------------
 
-.. automodule:: force_bdss.mco.tests.test_base_mco_bundle
+.. automodule:: force_bdss.mco.tests.test_base_mco_communicator
     :members:
     :undoc-members:
     :show-inheritance:
 
-force_bdss.mco.tests.test_base_mco_communicator module
-------------------------------------------------------
+force_bdss.mco.tests.test_base_mco_factory module
+-------------------------------------------------
 
-.. automodule:: force_bdss.mco.tests.test_base_mco_communicator
+.. automodule:: force_bdss.mco.tests.test_base_mco_factory
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/api/force_bdss.rst b/doc/source/api/force_bdss.rst
index 6d71a20103c8f9654c5945b43c271cc403f66549..bbf6b646456c28936d93e09d10eb383fb0366118 100644
--- a/doc/source/api/force_bdss.rst
+++ b/doc/source/api/force_bdss.rst
@@ -50,14 +50,6 @@ force_bdss.bdss_application module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.bundle_registry_plugin module
-----------------------------------------
-
-.. automodule:: force_bdss.bundle_registry_plugin
-    :members:
-    :undoc-members:
-    :show-inheritance:
-
 force_bdss.core_evaluation_driver module
 ----------------------------------------
 
@@ -74,6 +66,14 @@ force_bdss.core_mco_driver module
     :undoc-members:
     :show-inheritance:
 
+force_bdss.factory_registry_plugin module
+-----------------------------------------
+
+.. automodule:: force_bdss.factory_registry_plugin
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
 force_bdss.ids module
 ---------------------
 
diff --git a/doc/source/api/force_bdss.tests.rst b/doc/source/api/force_bdss.tests.rst
index 67e8a0a030b89259487618e57a8ba36557186aa0..b84321511be4824b60dc79d0823675aacdd91ab2 100644
--- a/doc/source/api/force_bdss.tests.rst
+++ b/doc/source/api/force_bdss.tests.rst
@@ -19,18 +19,18 @@ force_bdss.tests.test_bdss_application module
     :undoc-members:
     :show-inheritance:
 
-force_bdss.tests.test_bundle_registry_plugin module
+force_bdss.tests.test_core_evaluation_driver module
 ---------------------------------------------------
 
-.. automodule:: force_bdss.tests.test_bundle_registry_plugin
+.. automodule:: force_bdss.tests.test_core_evaluation_driver
     :members:
     :undoc-members:
     :show-inheritance:
 
-force_bdss.tests.test_core_evaluation_driver module
----------------------------------------------------
+force_bdss.tests.test_factory_registry_plugin module
+----------------------------------------------------
 
-.. automodule:: force_bdss.tests.test_core_evaluation_driver
+.. automodule:: force_bdss.tests.test_factory_registry_plugin
     :members:
     :undoc-members:
     :show-inheritance:
diff --git a/doc/source/plugin_development.rst b/doc/source/plugin_development.rst
index 231161baa9bca63d69ca55868abd8f40805e4173..a563cceb24b0524ddf1957a4f19f987e17de8e06 100644
--- a/doc/source/plugin_development.rst
+++ b/doc/source/plugin_development.rst
@@ -5,9 +5,8 @@ A single Plugin can provide one or more of the pluggable entities
 described elsewhere (MCO/KPICalculators/DataSources). Multiple plugins can
 be installed to provide a broad range of functionalities.
 
-Plugins must return "Bundles". Each Bundle acts as a Factory, providing
-factory methods for one of the above pluggable entities and its associated
-classes.
+Plugins must return Factories. Each Factory provides factory methods for 
+one of the above pluggable entities and its associated classes.
 
 To implement a new plugin, you must
 
@@ -17,9 +16,9 @@ To implement a new plugin, you must
 - Define the model that this DataSource needs, by extending
   ``BaseDataSourceModel`` and adding, with traits, the appropriate data that
   are required by your data source to perform its task.
-- Define the Bundle, by reimplementing BaseDataSourceBundle and reimplementing
+- Define the Factory, by reimplementing BaseDataSourceFactory and reimplementing
   its ``create_*`` methods to return the above entities.
 - Define a ``Plugin`` by reimplementing ``BaseExtensionPlugin`` and
-  reimplementing its initialization defaults methods to return your bundle.
+  reimplementing its initialization defaults methods to return your factory.
 - add the plugin class in the setup.py entry_point, under the namespace
   ``force.bdss.extensions``
diff --git a/force_bdss/api.py b/force_bdss/api.py
index 7480b1b5ec447f3978df3421800be225de92f510..129f5ccd7c1e1e3048282abc9b8f0173bd735187 100644
--- a/force_bdss/api.py
+++ b/force_bdss/api.py
@@ -1,22 +1,22 @@
 from .base_extension_plugin import BaseExtensionPlugin  # noqa
-from .ids import bundle_id, plugin_id  # noqa
+from .ids import factory_id, plugin_id  # noqa
 from .core.data_value import DataValue  # noqa
 
 from .data_sources.base_data_source_model import BaseDataSourceModel  # noqa
 from .data_sources.base_data_source import BaseDataSource  # noqa
-from .data_sources.base_data_source_bundle import BaseDataSourceBundle  # noqa
-from .data_sources.i_data_source_bundle import IDataSourceBundle  # noqa
+from .data_sources.base_data_source_factory import BaseDataSourceFactory  # noqa
+from .data_sources.i_data_source_factory import IDataSourceFactory  # noqa
 
 from .kpi.base_kpi_calculator import BaseKPICalculator  # noqa
 from .kpi.base_kpi_calculator_model import BaseKPICalculatorModel  # noqa
-from .kpi.base_kpi_calculator_bundle import BaseKPICalculatorBundle  # noqa
-from .kpi.i_kpi_calculator_bundle import IKPICalculatorBundle  # noqa
+from .kpi.base_kpi_calculator_factory import BaseKPICalculatorFactory  # noqa
+from .kpi.i_kpi_calculator_factory import IKPICalculatorFactory  # noqa
 
 from .mco.base_mco_model import BaseMCOModel  # noqa
 from .mco.base_mco_communicator import BaseMCOCommunicator  # noqa
 from .mco.base_mco import BaseMCO  # noqa
-from .mco.base_mco_bundle import BaseMCOBundle  # noqa
-from .mco.i_mco_bundle import IMCOBundle  # noqa
+from .mco.base_mco_factory import BaseMCOFactory  # noqa
+from .mco.i_mco_factory import IMCOFactory  # noqa
 
 from .mco.parameters.base_mco_parameter_factory import BaseMCOParameterFactory  # noqa
 from .mco.parameters.base_mco_parameter import BaseMCOParameter  # noqa
diff --git a/force_bdss/base_core_driver.py b/force_bdss/base_core_driver.py
index 2b34ddb6a6ffb616482ff2036e4aab3c6223b4d8..cd78b3d809219ca7dba41b2e7bf2a06e4a91f869 100644
--- a/force_bdss/base_core_driver.py
+++ b/force_bdss/base_core_driver.py
@@ -2,9 +2,9 @@ from envisage.plugin import Plugin
 from traits.trait_types import Instance
 
 from .core.workflow import Workflow
-from .bundle_registry_plugin import (
-    BundleRegistryPlugin,
-    BUNDLE_REGISTRY_PLUGIN_ID
+from .factory_registry_plugin import (
+    FactoryRegistryPlugin,
+    FACTORY_REGISTRY_PLUGIN_ID
 )
 from .io.workflow_reader import WorkflowReader
 
@@ -14,16 +14,16 @@ class BaseCoreDriver(Plugin):
     or the evaluation.
     """
 
-    #: The registry of the bundles.
-    bundle_registry = Instance(BundleRegistryPlugin)
+    #: The registry of the factories
+    factory_registry = Instance(FactoryRegistryPlugin)
 
     #: Deserialized content of the workflow file.
     workflow = Instance(Workflow)
 
-    def _bundle_registry_default(self):
-        return self.application.get_plugin(BUNDLE_REGISTRY_PLUGIN_ID)
+    def _factory_registry_default(self):
+        return self.application.get_plugin(FACTORY_REGISTRY_PLUGIN_ID)
 
     def _workflow_default(self):
-        reader = WorkflowReader(self.bundle_registry)
+        reader = WorkflowReader(self.factory_registry)
         with open(self.application.workflow_filepath) as f:
             return reader.read(f)
diff --git a/force_bdss/base_extension_plugin.py b/force_bdss/base_extension_plugin.py
index 4a9915b0b5fa395d5cefbb742b26a9cc4943a9f1..a3f2bdf474c4cc4e8cd20d15945597a705f42e52 100644
--- a/force_bdss/base_extension_plugin.py
+++ b/force_bdss/base_extension_plugin.py
@@ -2,9 +2,9 @@ from envisage.plugin import Plugin
 from traits.trait_types import List
 
 from .ids import ExtensionPointID
-from .data_sources.i_data_source_bundle import IDataSourceBundle
-from .kpi.i_kpi_calculator_bundle import IKPICalculatorBundle
-from .mco.i_mco_bundle import IMCOBundle
+from .data_sources.i_data_source_factory import IDataSourceFactory
+from .kpi.i_kpi_calculator_factory import IKPICalculatorFactory
+from .mco.i_mco_factory import IMCOFactory
 
 
 class BaseExtensionPlugin(Plugin):
@@ -17,25 +17,25 @@ class BaseExtensionPlugin(Plugin):
     specific trait you want to populate. For example::
 
         class MyPlugin(BaseExtensionPlugin):
-            def _data_source_bundles(self):
-                return [MyDataSourceBundle1(),
-                        MyDataSourceBundle2()]
+            def _data_source_factories_default(self):
+                return [MyDataSourceFactory1(),
+                        MyDataSourceFactory2()]
     """
 
     #: A list of available Multi Criteria Optimizers this plugin exports.
-    mco_bundles = List(
-        IMCOBundle,
-        contributes_to=ExtensionPointID.MCO_BUNDLES
+    mco_factories = List(
+        IMCOFactory,
+        contributes_to=ExtensionPointID.MCO_FACTORIES
     )
 
     #: A list of the available Data Sources this plugin exports.
-    data_source_bundles = List(
-        IDataSourceBundle,
-        contributes_to=ExtensionPointID.DATA_SOURCE_BUNDLES
+    data_source_factories = List(
+        IDataSourceFactory,
+        contributes_to=ExtensionPointID.DATA_SOURCE_FACTORIES
     )
 
     #: A list of the available KPI calculators this plugin exports.
-    kpi_calculator_bundles = List(
-        IKPICalculatorBundle,
-        contributes_to=ExtensionPointID.KPI_CALCULATOR_BUNDLES
+    kpi_calculator_factories = List(
+        IKPICalculatorFactory,
+        contributes_to=ExtensionPointID.KPI_CALCULATOR_FACTORIES
     )
diff --git a/force_bdss/bdss_application.py b/force_bdss/bdss_application.py
index 29c7f2517fd63c69a1d82f24b3bb0677bb487895..2cc751620af346bcad03a6db223f75ec4faaa29c 100644
--- a/force_bdss/bdss_application.py
+++ b/force_bdss/bdss_application.py
@@ -8,7 +8,7 @@ from envisage.api import Application
 from envisage.core_plugin import CorePlugin
 from traits.api import Unicode, Bool
 
-from .bundle_registry_plugin import BundleRegistryPlugin
+from .factory_registry_plugin import FactoryRegistryPlugin
 from .core_evaluation_driver import CoreEvaluationDriver
 from .core_mco_driver import CoreMCODriver
 
@@ -30,7 +30,7 @@ class BDSSApplication(Application):
         self.evaluate = evaluate
         self.workflow_filepath = workflow_filepath
 
-        plugins = [CorePlugin(), BundleRegistryPlugin()]
+        plugins = [CorePlugin(), FactoryRegistryPlugin()]
 
         if self.evaluate:
             plugins.append(CoreEvaluationDriver())
diff --git a/force_bdss/core/workflow.py b/force_bdss/core/workflow.py
index 34032b98b31e01ee4d0abc05aef128b9d6acb5ed..d7cfb50193a9ad46035da21faab84ebce6800d9a 100644
--- a/force_bdss/core/workflow.py
+++ b/force_bdss/core/workflow.py
@@ -7,14 +7,14 @@ from force_bdss.mco.base_mco_model import BaseMCOModel
 
 class Workflow(HasStrictTraits):
     """Model object that represents the Workflow as a whole"""
-    #: Contains the bundle-specific MCO Model object.
+    #: Contains the factory-specific MCO Model object.
     #: Can be None if no MCO has been specified yet.
     mco = Instance(BaseMCOModel, allow_none=True)
 
-    #: Contains the bundle-specific DataSource Model objects.
+    #: Contains the factory-specific DataSource Model objects.
     #: The list can be empty
     data_sources = List(BaseDataSourceModel)
 
-    #: Contains the bundle-specific KPI Calculator Model objects.
+    #: Contains the factory-specific KPI Calculator Model objects.
     #: The list can be empty
     kpi_calculators = List(BaseKPICalculatorModel)
diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py
index 8315f8401e9c6e8c7485bdf3a94f30f63b438d2f..2ff044e8520b13dcdcc7cc60f305ab4b26846de9 100644
--- a/force_bdss/core_evaluation_driver.py
+++ b/force_bdss/core_evaluation_driver.py
@@ -30,8 +30,8 @@ class CoreEvaluationDriver(BaseCoreDriver):
             sys.exit(1)
 
         mco_model = workflow.mco
-        mco_bundle = mco_model.bundle
-        mco_communicator = mco_bundle.create_communicator()
+        mco_factory = mco_model.factory
+        mco_communicator = mco_factory.create_communicator()
 
         mco_data_values = self._get_data_values_from_mco(mco_model,
                                                          mco_communicator)
@@ -54,8 +54,8 @@ class CoreEvaluationDriver(BaseCoreDriver):
         ds_results = []
 
         for ds_model in workflow.data_sources:
-            ds_bundle = ds_model.bundle
-            data_source = ds_bundle.create_data_source()
+            ds_factory = ds_model.factory
+            data_source = ds_factory.create_data_source()
 
             # Get the slots for this data source. These must be matched to
             # the appropriate values in the environment data values.
@@ -76,7 +76,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
 
             # execute data source, passing only relevant data values.
             logging.info("Evaluating for Data Source {}".format(
-                ds_bundle.name))
+                ds_factory.name))
             res = data_source.run(ds_model, passed_data_values)
 
             if len(res) != len(out_slots):
@@ -85,7 +85,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
                     " by the DataSource '{}' does not match the number"
                     " of output slots it specifies ({} values)."
                     " This is likely a DataSource plugin error.").format(
-                    len(res), ds_bundle.name, len(out_slots)
+                    len(res), ds_factory.name, len(out_slots)
                 )
 
                 logging.error(error_txt)
@@ -99,7 +99,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
                     " This is either a DataSource plugin error or a file"
                     " error.").format(
                     len(res),
-                    ds_bundle.name,
+                    ds_factory.name,
                     len(ds_model.output_slot_names)
                 )
 
@@ -125,8 +125,8 @@ class CoreEvaluationDriver(BaseCoreDriver):
         kpi_results = []
 
         for kpic_model in workflow.kpi_calculators:
-            kpic_bundle = kpic_model.bundle
-            kpi_calculator = kpic_bundle.create_kpi_calculator()
+            kpic_factory = kpic_model.factory
+            kpi_calculator = kpic_factory.create_kpi_calculator()
 
             in_slots, out_slots = kpi_calculator.slots(kpic_model)
 
@@ -136,7 +136,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
                 in_slots)
 
             logging.info("Evaluating for KPICalculator {}".format(
-                kpic_bundle.name))
+                kpic_factory.name))
 
             res = kpi_calculator.run(kpic_model, passed_data_values)
 
@@ -146,7 +146,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
                     " the KPICalculator '{}' does not match the"
                     " number of output slots ({} values). This is"
                     " likely a KPICalculator plugin error."
-                ).format(len(res), kpic_bundle.name, len(out_slots))
+                ).format(len(res), kpic_factory.name, len(out_slots))
                 logging.error(error_txt)
                 raise RuntimeError(error_txt)
 
@@ -157,7 +157,7 @@ class CoreEvaluationDriver(BaseCoreDriver):
                     " number of user-defined names specified ({} values)."
                     " This is either an input file error or a plugin"
                     " error."
-                ).format(len(res), kpic_bundle.name,
+                ).format(len(res), kpic_factory.name,
                          len(kpic_model.output_slot_names))
                 logging.error(error_txt)
                 raise RuntimeError(error_txt)
diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index da740f9d99e0e6083247b36568c56a866b28227d..457f853163c238bc493b79cb3a2675a12fcfcade 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -29,6 +29,6 @@ class CoreMCODriver(BaseCoreDriver):
             sys.exit(1)
 
         mco_model = workflow.mco
-        mco_bundle = mco_model.bundle
-        mco = mco_bundle.create_optimizer()
+        mco_factory = mco_model.factory
+        mco = mco_factory.create_optimizer()
         mco.run(mco_model)
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py
similarity index 71%
rename from force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py
rename to force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py
index 30dedeeb0dbd7a72f2c09a47bee76759a4205e28..db28075d1e265b57909c1d20a202fae800702722 100644
--- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py
+++ b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_factory.py
@@ -1,13 +1,13 @@
 from traits.api import String
 
-from force_bdss.api import bundle_id, BaseDataSourceBundle
+from force_bdss.api import factory_id, BaseDataSourceFactory
 
 from .csv_extractor_model import CSVExtractorModel
 from .csv_extractor_data_source import CSVExtractorDataSource
 
 
-class CSVExtractorBundle(BaseDataSourceBundle):
-    id = String(bundle_id("enthought", "csv_extractor"))
+class CSVExtractorFactory(BaseDataSourceFactory):
+    id = String(factory_id("enthought", "csv_extractor"))
 
     name = String("CSV Extractor")
 
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
index 429b15ac1426a833dee4292429882c6a7adc9066..89f8f80617397648f3ca6c8e5b7be6b7bb338e14 100644
--- 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
@@ -6,8 +6,8 @@ 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_bundle import \
-    BaseDataSourceBundle
+from force_bdss.data_sources.base_data_source_factory import \
+    BaseDataSourceFactory
 from force_bdss.tests import fixtures
 
 try:
@@ -18,15 +18,15 @@ except ImportError:
 
 class TestCSVExtractorDataSource(unittest.TestCase):
     def setUp(self):
-        self.bundle = mock.Mock(spec=BaseDataSourceBundle)
+        self.factory = mock.Mock(spec=BaseDataSourceFactory)
 
     def test_initialization(self):
-        ds = CSVExtractorDataSource(self.bundle)
-        self.assertEqual(ds.bundle, self.bundle)
+        ds = CSVExtractorDataSource(self.factory)
+        self.assertEqual(ds.factory, self.factory)
 
     def test_run(self):
-        ds = CSVExtractorDataSource(self.bundle)
-        model = CSVExtractorModel(self.bundle)
+        ds = CSVExtractorDataSource(self.factory)
+        model = CSVExtractorModel(self.factory)
         model.filename = fixtures.get("foo.csv")
         model.row = 3
         model.column = 5
@@ -38,8 +38,8 @@ class TestCSVExtractorDataSource(unittest.TestCase):
         self.assertEqual(result[0].value, 42)
 
     def test_run_with_exception(self):
-        ds = CSVExtractorDataSource(self.bundle)
-        model = CSVExtractorModel(self.bundle)
+        ds = CSVExtractorDataSource(self.factory)
+        model = CSVExtractorModel(self.factory)
         model.filename = fixtures.get("foo.csv")
         mock_params = []
         model.row = 30
@@ -53,8 +53,8 @@ class TestCSVExtractorDataSource(unittest.TestCase):
             ds.run(model, mock_params)
 
     def test_slots(self):
-        ds = CSVExtractorDataSource(self.bundle)
-        model = CSVExtractorModel(self.bundle)
+        ds = CSVExtractorDataSource(self.factory)
+        model = CSVExtractorModel(self.factory)
         slots = ds.slots(model)
         self.assertEqual(len(slots), 2)
         self.assertEqual(len(slots[0]), 0)
diff --git a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_bundle.py b/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py
similarity index 53%
rename from force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_bundle.py
rename to force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py
index b5a563f889a698c349918bccd5b38f30dd445a20..54f72f88bf927fd0f3a744ea6dbd5912c8ad97ef 100644
--- a/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_bundle.py
+++ b/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_factory.py
@@ -1,19 +1,19 @@
 import unittest
 
-from force_bdss.core_plugins.dummy.tests.data_source_bundle_test_mixin import \
-    DataSourceBundleTestMixin
-from force_bdss.core_plugins.dummy.csv_extractor.csv_extractor_bundle import \
-    CSVExtractorBundle
+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 TestCSVExtractorBundle(DataSourceBundleTestMixin, unittest.TestCase):
+class TestCSVExtractorFactory(DataSourceFactoryTestMixin, unittest.TestCase):
     @property
-    def bundle_class(self):
-        return CSVExtractorBundle
+    def factory_class(self):
+        return CSVExtractorFactory
 
     @property
     def model_class(self):
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py
similarity index 82%
rename from force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py
index 189c27c1d2ecfc350995bd556483bbf5cb7269a2..6e6c5ccbe164cb5bbeee657f63b673a5b48f06c8 100644
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_factory.py
@@ -1,5 +1,5 @@
 from traits.api import String
-from force_bdss.api import bundle_id, BaseMCOBundle
+from force_bdss.api import factory_id, BaseMCOFactory
 from force_bdss.core_plugins.dummy.dummy_dakota.parameters import \
     RangedMCOParameterFactory
 
@@ -8,8 +8,8 @@ from .dakota_model import DummyDakotaModel
 from .dakota_optimizer import DummyDakotaOptimizer
 
 
-class DummyDakotaBundle(BaseMCOBundle):
-    id = String(bundle_id("enthought", "dummy_dakota"))
+class DummyDakotaFactory(BaseMCOFactory):
+    id = String(factory_id("enthought", "dummy_dakota"))
 
     name = "Dummy Dakota"
 
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py
index 2114efe81bc550500064a74f8466e87fe36f399b..5b1291a93e01a111b289f410fd03578f02bb850d 100644
--- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py
+++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py
@@ -28,7 +28,7 @@ class DummyDakotaOptimizer(BaseMCO):
 
         value_iterator = itertools.product(*values)
 
-        application = self.bundle.plugin.application
+        application = self.factory.plugin.application
 
         for value in value_iterator:
             ps = subprocess.Popen(
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
index 03e8e85328522fcbb3990933eac22ad18269138f..361e4f51944cd6d49688724891ffd0b3becb12ca 100644
--- 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
@@ -9,8 +9,8 @@ except ImportError:
 
 from envisage.plugin import Plugin
 
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_bundle import (
-    DummyDakotaBundle)
+from force_bdss.core_plugins.dummy.dummy_dakota.dakota_factory import (
+    DummyDakotaFactory)
 
 from force_bdss.mco.parameters.base_mco_parameter_factory import \
     BaseMCOParameterFactory
@@ -20,13 +20,13 @@ from force_bdss.core_plugins.dummy.dummy_dakota.parameters import \
 
 class TestDakotaCommunicator(unittest.TestCase):
     def test_receive_from_mco(self):
-        bundle = DummyDakotaBundle(mock.Mock(spec=Plugin))
+        factory = DummyDakotaFactory(mock.Mock(spec=Plugin))
         mock_parameter_factory = mock.Mock(spec=BaseMCOParameterFactory)
-        model = bundle.create_model()
+        model = factory.create_model()
         model.parameters = [
             RangedMCOParameter(mock_parameter_factory)
         ]
-        comm = bundle.create_communicator()
+        comm = factory.create_communicator()
 
         with mock.patch("sys.stdin") as stdin:
             stdin.read.return_value = "1"
@@ -38,9 +38,9 @@ class TestDakotaCommunicator(unittest.TestCase):
             self.assertEqual(data[0].type, "")
 
     def test_send_to_mco(self):
-        bundle = DummyDakotaBundle(mock.Mock(spec=Plugin))
-        model = bundle.create_model()
-        comm = bundle.create_communicator()
+        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)
diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_bundle.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py
similarity index 52%
rename from force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py
index 673fdd05f3fbf5da8fb436484d334cdac483e497..e9d515a3908b982d1af9a5e38824e0c967af07c6 100644
--- a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_factory.py
@@ -2,8 +2,8 @@ import unittest
 
 from envisage.plugin import Plugin
 
-from force_bdss.core_plugins.dummy.dummy_dakota.dakota_bundle import \
-    DummyDakotaBundle
+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 \
@@ -15,33 +15,33 @@ except ImportError:
     from unittest import mock
 
 
-class TestDakotaBundle(unittest.TestCase):
+class TestDakotaFactory(unittest.TestCase):
     def setUp(self):
         self.plugin = mock.Mock(spec=Plugin)
 
     def test_initialization(self):
-        bundle = DummyDakotaBundle(self.plugin)
-        self.assertIn("dummy_dakota", bundle.id)
-        self.assertEqual(bundle.plugin, self.plugin)
+        factory = DummyDakotaFactory(self.plugin)
+        self.assertIn("dummy_dakota", factory.id)
+        self.assertEqual(factory.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = DummyDakotaBundle(self.plugin)
-        model = bundle.create_model({})
+        factory = DummyDakotaFactory(self.plugin)
+        model = factory.create_model({})
         self.assertIsInstance(model, DummyDakotaModel)
 
-        model = bundle.create_model()
+        model = factory.create_model()
         self.assertIsInstance(model, DummyDakotaModel)
 
     def test_create_mco(self):
-        bundle = DummyDakotaBundle(self.plugin)
-        ds = bundle.create_optimizer()
+        factory = DummyDakotaFactory(self.plugin)
+        ds = factory.create_optimizer()
         self.assertIsInstance(ds, DummyDakotaOptimizer)
 
     def test_create_communicator(self):
-        bundle = DummyDakotaBundle(self.plugin)
-        ds = bundle.create_optimizer()
+        factory = DummyDakotaFactory(self.plugin)
+        ds = factory.create_optimizer()
         self.assertIsInstance(ds, DummyDakotaOptimizer)
 
     def test_parameter_factories(self):
-        bundle = DummyDakotaBundle(self.plugin)
-        self.assertNotEqual(len(bundle.parameter_factories()), 0)
+        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
index b8be17e7f34a1444162c0e2d873f30dcb34ad321..34e5c186341bde5ce073c99c49d484ce4c9c4068 100644
--- 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
@@ -7,7 +7,7 @@ from force_bdss.core_plugins.dummy.dummy_dakota.parameters import (
 from force_bdss.core_plugins.dummy.dummy_dakota.dakota_model import (
     DummyDakotaModel
 )
-from force_bdss.mco.base_mco_bundle import BaseMCOBundle
+from force_bdss.mco.base_mco_factory import BaseMCOFactory
 
 try:
     import mock
@@ -20,18 +20,18 @@ from force_bdss.core_plugins.dummy.dummy_dakota.dakota_optimizer import \
 
 class TestDakotaOptimizer(unittest.TestCase):
     def setUp(self):
-        self.bundle = mock.Mock(spec=BaseMCOBundle)
-        self.bundle.plugin = mock.Mock()
-        self.bundle.plugin.application = mock.Mock()
-        self.bundle.plugin.application.workflow_filepath = "whatever"
+        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.bundle)
-        self.assertEqual(opt.bundle, self.bundle)
+        opt = DummyDakotaOptimizer(self.factory)
+        self.assertEqual(opt.factory, self.factory)
 
     def test_run(self):
-        opt = DummyDakotaOptimizer(self.bundle)
-        model = DummyDakotaModel(self.bundle)
+        opt = DummyDakotaOptimizer(self.factory)
+        model = DummyDakotaModel(self.factory)
         model.parameters = [
             RangedMCOParameter(
                 mock.Mock(spec=RangedMCOParameterFactory),
diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py
similarity index 66%
rename from force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py
index 1ed7905b6de1269307a21da864c36be231492ac0..9743e72bd8ff86698b2d18d947a9d794e1b5f3df 100644
--- a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_factory.py
@@ -1,10 +1,10 @@
-from force_bdss.api import BaseDataSourceBundle, bundle_id
+from force_bdss.api import BaseDataSourceFactory, factory_id
 from .dummy_data_source_model import DummyDataSourceModel
 from .dummy_data_source import DummyDataSource
 
 
-class DummyDataSourceBundle(BaseDataSourceBundle):
-    id = bundle_id("enthought", "dummy_data_source")
+class DummyDataSourceFactory(BaseDataSourceFactory):
+    id = factory_id("enthought", "dummy_data_source")
 
     def create_model(self, model_data=None):
         if model_data is None:
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
index d0a0eb2c6e6d56e997a0cfdce0647dcc83fc143c..db0b6e4912ba7dd9eb647463d528dd298a10d9b0 100644
--- 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
@@ -5,8 +5,8 @@ from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source import \
 from force_bdss.core_plugins.dummy.dummy_data_source.dummy_data_source_model\
     import \
     DummyDataSourceModel
-from force_bdss.data_sources.base_data_source_bundle import \
-    BaseDataSourceBundle
+from force_bdss.data_sources.base_data_source_factory import \
+    BaseDataSourceFactory
 
 try:
     import mock
@@ -16,14 +16,14 @@ except ImportError:
 
 class TestDummyDataSource(unittest.TestCase):
     def setUp(self):
-        self.bundle = mock.Mock(spec=BaseDataSourceBundle)
+        self.factory = mock.Mock(spec=BaseDataSourceFactory)
 
     def test_initialization(self):
-        ds = DummyDataSource(self.bundle)
-        self.assertEqual(ds.bundle, self.bundle)
+        ds = DummyDataSource(self.factory)
+        self.assertEqual(ds.factory, self.factory)
 
     def test_slots(self):
-        ds = DummyDataSource(self.bundle)
-        model = DummyDataSourceModel(self.bundle)
+        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_bundle.py b/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py
similarity index 57%
rename from force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py
index 617c4edfd73c77c2144f30e04d4473a0eadd4a22..84e2a9ccf5c1a691bd95701d66263479cf7e7a90 100644
--- a/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_data_source/tests/test_dummy_data_source_factory.py
@@ -3,17 +3,18 @@ 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_bundle import DummyDataSourceBundle
+    .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_bundle_test_mixin import \
-    DataSourceBundleTestMixin
+from force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin \
+    import DataSourceFactoryTestMixin
 
 
-class TestDummyDataSourceBundle(DataSourceBundleTestMixin, unittest.TestCase):
+class TestDummyDataSourceFactory(
+        DataSourceFactoryTestMixin, unittest.TestCase):
     @property
-    def bundle_class(self):
-        return DummyDataSourceBundle
+    def factory_class(self):
+        return DummyDataSourceFactory
 
     @property
     def model_class(self):
diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py
similarity index 69%
rename from force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py
index 065361812bb5ecef475ce2b951f9f81f39e9787f..18176e362a03266c344f6d99ecf0c507e40a8443 100644
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_factory.py
@@ -1,11 +1,11 @@
 from traits.api import String
-from force_bdss.api import bundle_id, BaseKPICalculatorBundle
+from force_bdss.api import factory_id, BaseKPICalculatorFactory
 from .dummy_kpi_calculator import DummyKPICalculator
 from .dummy_kpi_calculator_model import DummyKPICalculatorModel
 
 
-class DummyKPICalculatorBundle(BaseKPICalculatorBundle):
-    id = String(bundle_id("enthought", "dummy_kpi_calculator"))
+class DummyKPICalculatorFactory(BaseKPICalculatorFactory):
+    id = String(factory_id("enthought", "dummy_kpi_calculator"))
 
     name = String("Dummy KPI")
 
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
index b0cd5c48070b7d62d2c748c65234fd52d5483414..08aedc3e6f6e58b292276f8bd331efaa6e5e5de2 100644
--- 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
@@ -8,22 +8,22 @@ except ImportError:
 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_bundle import DummyKPICalculatorBundle
+    .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):
-        bundle = mock.Mock(spec=DummyKPICalculatorBundle)
-        kpic = DummyKPICalculator(bundle)
-        model = DummyKPICalculatorModel(bundle)
+        factory = mock.Mock(spec=DummyKPICalculatorFactory)
+        kpic = DummyKPICalculator(factory)
+        model = DummyKPICalculatorModel(factory)
         input_ = []
         output = kpic.run(model, [])
         self.assertEqual(input_, output)
 
     def test_slots(self):
-        bundle = mock.Mock(spec=DummyKPICalculatorBundle)
-        kpic = DummyKPICalculator(bundle)
-        model = DummyKPICalculatorModel(bundle)
+        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_bundle.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py
similarity index 59%
rename from force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_bundle.py
rename to force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py
index 5fd0dc9d6d9d5a1f179c79ff538802e8f61043d8..263611acc9e3c269552462b7dd4f1528dec9e4db 100644
--- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_bundle.py
+++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/tests/test_dummy_kpi_calculator_factory.py
@@ -4,22 +4,22 @@ 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_bundle import \
-    DummyKPICalculatorBundle
+    .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_bundle_test_mixin \
+from force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin \
     import \
-    KPICalculatorBundleTestMixin
+    KPICalculatorFactoryTestMixin
 
 
-class TestDummyKPICalculatorBundle(
-        KPICalculatorBundleTestMixin, unittest.TestCase):
+class TestDummyKPICalculatorFactory(
+        KPICalculatorFactoryTestMixin, unittest.TestCase):
 
     @property
-    def bundle_class(self):
-        return DummyKPICalculatorBundle
+    def factory_class(self):
+        return DummyKPICalculatorFactory
 
     @property
     def kpi_calculator_class(self):
diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py
index 6fe74b066e8fc0fc11c40caa1b6a9f64800e0365..f67df4b0eee0cfdc924b49bb5343b0d5cedbe832 100644
--- a/force_bdss/core_plugins/dummy/dummy_plugin.py
+++ b/force_bdss/core_plugins/dummy/dummy_plugin.py
@@ -1,23 +1,23 @@
 from force_bdss.api import BaseExtensionPlugin, plugin_id
-from .csv_extractor.csv_extractor_bundle import CSVExtractorBundle
-from .kpi_adder.kpi_adder_bundle import KPIAdderBundle
-from .dummy_dakota.dakota_bundle import DummyDakotaBundle
-from .dummy_data_source.dummy_data_source_bundle import DummyDataSourceBundle
-from .dummy_kpi_calculator.dummy_kpi_calculator_bundle import (
-    DummyKPICalculatorBundle
+from .csv_extractor.csv_extractor_factory import CSVExtractorFactory
+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_bundles_default(self):
-        return [DummyDataSourceBundle(self),
-                CSVExtractorBundle(self)]
+    def _data_source_factories_default(self):
+        return [DummyDataSourceFactory(self),
+                CSVExtractorFactory(self)]
 
-    def _mco_bundles_default(self):
-        return [DummyDakotaBundle(self)]
+    def _mco_factories_default(self):
+        return [DummyDakotaFactory(self)]
 
-    def _kpi_calculator_bundles_default(self):
-        return [DummyKPICalculatorBundle(self),
-                KPIAdderBundle(self)]
+    def _kpi_calculator_factories_default(self):
+        return [DummyKPICalculatorFactory(self),
+                KPIAdderFactory(self)]
diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py
similarity index 70%
rename from force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py
rename to force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py
index 76535e51491d2cb84c297362600c27454cb05997..f001ff5b719abfc67a6bc2f4b4cf830e27a28709 100644
--- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py
+++ b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_factory.py
@@ -1,13 +1,13 @@
 from traits.api import String
 
-from force_bdss.api import bundle_id, BaseKPICalculatorBundle
+from force_bdss.api import factory_id, BaseKPICalculatorFactory
 
 from .kpi_adder_model import KPIAdderModel
 from .kpi_adder_calculator import KPIAdderCalculator
 
 
-class KPIAdderBundle(BaseKPICalculatorBundle):
-    id = String(bundle_id("enthought", "kpi_adder"))
+class KPIAdderFactory(BaseKPICalculatorFactory):
+    id = String(factory_id("enthought", "kpi_adder"))
 
     name = String("KPI Adder")
 
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
index f0bb6bc09c596284879132198a6d06d532e6df8a..d12f68990f72a2534405b6b93423f1daae7c7c0b 100644
--- 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
@@ -3,7 +3,7 @@ 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_bundle import BaseKPICalculatorBundle
+from force_bdss.kpi.base_kpi_calculator_factory import BaseKPICalculatorFactory
 
 try:
     import mock
@@ -16,8 +16,8 @@ from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_calculator import \
 
 class TestKPIAdderCalculator(unittest.TestCase):
     def test_basic_functionality(self):
-        kpic = KPIAdderCalculator(mock.Mock(spec=BaseKPICalculatorBundle))
-        model = KPIAdderModel(mock.Mock(spec=BaseKPICalculatorBundle))
+        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)
@@ -28,8 +28,8 @@ class TestKPIAdderCalculator(unittest.TestCase):
         self.assertEqual(res[0].value, 40)
 
     def test_slots(self):
-        kpic = KPIAdderCalculator(mock.Mock(spec=BaseKPICalculatorBundle))
-        model = KPIAdderModel(mock.Mock(spec=BaseKPICalculatorBundle))
+        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_bundle.py b/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py
similarity index 52%
rename from force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_bundle.py
rename to force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py
index a71462d78f9427b6a71a08757d93fd06fc4b7369..ee5d96488a3ce505a6f792982c8ebf4c7ec2c976 100644
--- a/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_bundle.py
+++ b/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_factory.py
@@ -1,22 +1,22 @@
 import unittest
 
-from force_bdss.core_plugins.dummy.kpi_adder.kpi_adder_bundle import \
-    KPIAdderBundle
+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_bundle_test_mixin \
+from force_bdss.core_plugins.dummy.tests.kpi_calculator_factory_test_mixin \
     import \
-    KPICalculatorBundleTestMixin
+    KPICalculatorFactoryTestMixin
 
 
-class TestDummyKPICalculatorBundle(
-        KPICalculatorBundleTestMixin, unittest.TestCase):
+class TestDummyKPICalculatorFactory(
+        KPICalculatorFactoryTestMixin, unittest.TestCase):
 
     @property
-    def bundle_class(self):
-        return KPIAdderBundle
+    def factory_class(self):
+        return KPIAdderFactory
 
     @property
     def kpi_calculator_class(self):
diff --git a/force_bdss/core_plugins/dummy/tests/data_source_bundle_test_mixin.py b/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
similarity index 62%
rename from force_bdss/core_plugins/dummy/tests/data_source_bundle_test_mixin.py
rename to force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
index 011a2b3f99f00b176810426b2687942092778fe7..21aeb4a27ccee69e21d4f6e458f8a90866699ac5 100644
--- a/force_bdss/core_plugins/dummy/tests/data_source_bundle_test_mixin.py
+++ b/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
@@ -6,15 +6,15 @@ except ImportError:
     from unittest import mock
 
 
-class DataSourceBundleTestMixin(object):
+class DataSourceFactoryTestMixin(object):
     def setUp(self):
         self.plugin = mock.Mock(spec=Plugin)
-        super(DataSourceBundleTestMixin, self).setUp()
+        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 bundle_class(self):
+    def factory_class(self):
         raise NotImplementedError()
 
     @property
@@ -26,19 +26,19 @@ class DataSourceBundleTestMixin(object):
         raise NotImplementedError()
 
     def test_initialization(self):
-        bundle = self.bundle_class(self.plugin)
-        self.assertNotEqual(bundle.id, "")
-        self.assertEqual(bundle.plugin, self.plugin)
+        factory = self.factory_class(self.plugin)
+        self.assertNotEqual(factory.id, "")
+        self.assertEqual(factory.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = self.bundle_class(self.plugin)
-        model = bundle.create_model({})
+        factory = self.factory_class(self.plugin)
+        model = factory.create_model({})
         self.assertIsInstance(model, self.model_class)
 
-        model = bundle.create_model()
+        model = factory.create_model()
         self.assertIsInstance(model, self.model_class)
 
     def test_create_data_source(self):
-        bundle = self.bundle_class(self.plugin)
-        ds = bundle.create_data_source()
+        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_bundle_test_mixin.py b/force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py
similarity index 57%
rename from force_bdss/core_plugins/dummy/tests/kpi_calculator_bundle_test_mixin.py
rename to force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py
index d89ccef2f89048d9da70a68690f74b82663feeb0..9cc48275302d03a0d2785d9dac8624630d597f7d 100644
--- a/force_bdss/core_plugins/dummy/tests/kpi_calculator_bundle_test_mixin.py
+++ b/force_bdss/core_plugins/dummy/tests/kpi_calculator_factory_test_mixin.py
@@ -6,13 +6,13 @@ except ImportError:
 from envisage.api import Plugin
 
 
-class KPICalculatorBundleTestMixin(object):
+class KPICalculatorFactoryTestMixin(object):
     def setUp(self):
         self.plugin = mock.Mock(spec=Plugin)
-        super(KPICalculatorBundleTestMixin, self).setUp()
+        super(KPICalculatorFactoryTestMixin, self).setUp()
 
     @property
-    def bundle_class(self):
+    def factory_class(self):
         raise NotImplementedError()
 
     @property
@@ -24,19 +24,19 @@ class KPICalculatorBundleTestMixin(object):
         raise NotImplementedError()
 
     def test_initialization(self):
-        bundle = self.bundle_class(self.plugin)
-        self.assertNotEqual(bundle.id, "")
-        self.assertEqual(bundle.plugin, self.plugin)
+        factory = self.factory_class(self.plugin)
+        self.assertNotEqual(factory.id, "")
+        self.assertEqual(factory.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = self.bundle_class(self.plugin)
-        model = bundle.create_model({})
+        factory = self.factory_class(self.plugin)
+        model = factory.create_model({})
         self.assertIsInstance(model, self.model_class)
 
-        model = bundle.create_model()
+        model = factory.create_model()
         self.assertIsInstance(model, self.model_class)
 
     def test_create_kpi_calculator(self):
-        bundle = self.bundle_class(self.plugin)
-        ds = bundle.create_kpi_calculator()
+        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
index 7f4b73648aec4740ab8e8af62fc7b4186dc027f9..871e579295bf54e5963d23279461b09bf9601575 100644
--- a/force_bdss/core_plugins/dummy/tests/test_direct_execution.py
+++ b/force_bdss/core_plugins/dummy/tests/test_direct_execution.py
@@ -3,7 +3,7 @@ from traits.api import List
 
 from envisage.application import Application
 
-from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
+from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
 from force_bdss.cli.tests.test_execution import cd
 
 try:
@@ -16,28 +16,29 @@ from force_bdss.core_plugins.dummy.dummy_plugin import DummyPlugin
 from force_bdss.tests import fixtures
 
 
-class DummyBundleRegistryPlugin(BundleRegistryPlugin):
-    mco_bundles = List()
-    kpi_calculator_bundles = List()
-    data_source_bundles = List()
+class DummyFactoryRegistryPlugin(FactoryRegistryPlugin):
+    mco_factories = List()
+    kpi_calculator_factories = List()
+    data_source_factories = List()
 
 
-def mock_bundle_registry_plugin():
+def mock_factory_registry_plugin():
     plugin = DummyPlugin()
-    bundle_registry_plugin = DummyBundleRegistryPlugin()
-    bundle_registry_plugin.mco_bundles = plugin.mco_bundles
-    bundle_registry_plugin.kpi_calculator_bundles = \
-        plugin.kpi_calculator_bundles
-    bundle_registry_plugin.data_source_bundles = plugin.data_source_bundles
-    return bundle_registry_plugin
+    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
+    return factory_registry_plugin
 
 
 class TestDirectExecution(unittest.TestCase):
     def setUp(self):
-        self.mock_bundle_registry_plugin = mock_bundle_registry_plugin()
+        self.mock_factory_registry_plugin = mock_factory_registry_plugin()
         application = mock.Mock(spec=Application)
         application.get_plugin = mock.Mock(
-            return_value=self.mock_bundle_registry_plugin
+            return_value=self.mock_factory_registry_plugin
         )
         application.workflow_filepath = fixtures.get("test_csv.json")
         self.mock_application = application
diff --git a/force_bdss/data_sources/base_data_source.py b/force_bdss/data_sources/base_data_source.py
index be9fb39f4f338fb5cca32664ac3a4970596d0f4b..2102b407add8f47aaaf74529d3edc50916ca786f 100644
--- a/force_bdss/data_sources/base_data_source.py
+++ b/force_bdss/data_sources/base_data_source.py
@@ -1,7 +1,7 @@
 from traits.api import ABCHasStrictTraits, Instance
 import abc
 
-from ..data_sources.i_data_source_bundle import IDataSourceBundle
+from ..data_sources.i_data_source_factory import IDataSourceFactory
 
 
 class BaseDataSource(ABCHasStrictTraits):
@@ -10,11 +10,11 @@ class BaseDataSource(ABCHasStrictTraits):
 
     Inherit from this class for your specific DataSource.
     """
-    #: A reference to the bundle
-    bundle = Instance(IDataSourceBundle)
+    #: A reference to the factory
+    factory = Instance(IDataSourceFactory)
 
-    def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+    def __init__(self, factory, *args, **kwargs):
+        self.factory = factory
         super(BaseDataSource, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
diff --git a/force_bdss/data_sources/base_data_source_bundle.py b/force_bdss/data_sources/base_data_source_factory.py
similarity index 66%
rename from force_bdss/data_sources/base_data_source_bundle.py
rename to force_bdss/data_sources/base_data_source_factory.py
index 585e31b0b4e1f553dda42a469c4c24ebdf27662a..b9d2d0744eba4c560a586f855ad630dbdbb3de87 100644
--- a/force_bdss/data_sources/base_data_source_bundle.py
+++ b/force_bdss/data_sources/base_data_source_factory.py
@@ -2,34 +2,34 @@ import abc
 from traits.api import ABCHasStrictTraits, provides, String, Instance
 from envisage.plugin import Plugin
 
-from .i_data_source_bundle import IDataSourceBundle
+from .i_data_source_factory import IDataSourceFactory
 
 
-@provides(IDataSourceBundle)
-class BaseDataSourceBundle(ABCHasStrictTraits):
-    """Base class for DataSource bundles. Reimplement this class to
+@provides(IDataSourceFactory)
+class BaseDataSourceFactory(ABCHasStrictTraits):
+    """Base class for DataSource factories. Reimplement this class to
     create your own DataSource.
     """
-    # NOTE: changes to this class must be ported also to the IDataSourceBundle
+    # NOTE: changes to this class must be ported also to the IDataSourceFactory
 
-    #: Unique identifier that identifies the bundle uniquely in the
-    #: universe of bundles. Create one with the function bundle_id()
+    #: Unique identifier that identifies the factory uniquely in the
+    #: universe of factories. Create one with the function factory_id()
     id = String()
 
-    #: A human readable name of the bundle. Spaces allowed
+    #: A human readable name of the factory. Spaces allowed
     name = String()
 
-    #: Reference to the plugin that carries this bundle
+    #: Reference to the plugin that carries this factory
     plugin = Instance(Plugin)
 
     def __init__(self, plugin, *args, **kwargs):
         self.plugin = plugin
-        super(BaseDataSourceBundle, self).__init__(*args, **kwargs)
+        super(BaseDataSourceFactory, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
     def create_data_source(self):
         """Factory method.
-        Must return the bundle-specific BaseDataSource instance.
+        Must return the factory-specific BaseDataSource instance.
 
         Returns
         -------
diff --git a/force_bdss/data_sources/base_data_source_model.py b/force_bdss/data_sources/base_data_source_model.py
index 2326075deff38378a0aa868cb465cb7a2ef4db21..3ec4e00c149f9f5e4f3f156f2a8cee3418b96a7d 100644
--- a/force_bdss/data_sources/base_data_source_model.py
+++ b/force_bdss/data_sources/base_data_source_model.py
@@ -1,20 +1,20 @@
 from traits.api import ABCHasStrictTraits, Instance, List, String
 
 from force_bdss.core.input_slot_map import InputSlotMap
-from .i_data_source_bundle import IDataSourceBundle
+from .i_data_source_factory import IDataSourceFactory
 
 
 class BaseDataSourceModel(ABCHasStrictTraits):
-    """Base class for the bundle specific DataSource models.
+    """Base class for the factory specific DataSource models.
     This model will also provide, through traits/traitsui magic the View
     that will appear in the workflow manager UI.
 
-    In your bundle definition, your bundle-specific model must reimplement
+    In your factory definition, your factory-specific model must reimplement
     this class.
     """
-    #: A reference to the creating bundle, so that we can
+    #: A reference to the creating factory, so that we can
     #: retrieve it as the originating factory.
-    bundle = Instance(IDataSourceBundle, visible=False, transient=True)
+    factory = Instance(IDataSourceFactory, visible=False, transient=True)
 
     #: Specifies binding between input slots and source for that value.
     #: Each InputSlotMap instance specifies this information for each of the
@@ -25,8 +25,8 @@ class BaseDataSourceModel(ABCHasStrictTraits):
     #: referenced somewhere else (e.g. the KPICalculators).
     output_slot_names = List(String())
 
-    def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+    def __init__(self, factory, *args, **kwargs):
+        self.factory = factory
         super(BaseDataSourceModel, self).__init__(*args, **kwargs)
 
     def __getstate__(self):
diff --git a/force_bdss/data_sources/i_data_source_bundle.py b/force_bdss/data_sources/i_data_source_factory.py
similarity index 66%
rename from force_bdss/data_sources/i_data_source_bundle.py
rename to force_bdss/data_sources/i_data_source_factory.py
index 0f803e3b8ae7f68445b71f643d0c5a1f614ada68..9213c09d4842c429ade8262ba8d016ffaa13060e 100644
--- a/force_bdss/data_sources/i_data_source_bundle.py
+++ b/force_bdss/data_sources/i_data_source_factory.py
@@ -2,11 +2,11 @@ from envisage.api import Plugin
 from traits.api import Interface, String, Instance
 
 
-class IDataSourceBundle(Interface):
-    """Envisage required interface for the BaseDataSourceBundle.
+class IDataSourceFactory(Interface):
+    """Envisage required interface for the BaseDataSourceFactory.
     You should not need to use this directly.
 
-    Refer to the BaseDataSourceBundle for documentation.
+    Refer to the BaseDataSourceFactory for documentation.
     """
     id = String()
 
diff --git a/force_bdss/data_sources/tests/test_base_data_source.py b/force_bdss/data_sources/tests/test_base_data_source.py
index a4de04182cb54cfd711cbf18ba7517ab2149151e..23c643dd5103a1bf2ce8b09f7e4e645a99e5f93a 100644
--- a/force_bdss/data_sources/tests/test_base_data_source.py
+++ b/force_bdss/data_sources/tests/test_base_data_source.py
@@ -1,7 +1,7 @@
 import unittest
 
 from force_bdss.data_sources.base_data_source import BaseDataSource
-from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle
+from force_bdss.data_sources.i_data_source_factory import IDataSourceFactory
 
 try:
     import mock
@@ -19,7 +19,7 @@ class DummyDataSource(BaseDataSource):
 
 class TestBaseDataSource(unittest.TestCase):
     def test_initialization(self):
-        bundle = mock.Mock(spec=IDataSourceBundle)
-        ds = DummyDataSource(bundle)
+        factory = mock.Mock(spec=IDataSourceFactory)
+        ds = DummyDataSource(factory)
 
-        self.assertEqual(ds.bundle, bundle)
+        self.assertEqual(ds.factory, factory)
diff --git a/force_bdss/data_sources/tests/test_base_data_source_bundle.py b/force_bdss/data_sources/tests/test_base_data_source_bundle.py
deleted file mode 100644
index b6994236760f5e9944f6d37e8c3c5e6a28627733..0000000000000000000000000000000000000000
--- a/force_bdss/data_sources/tests/test_base_data_source_bundle.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import unittest
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from envisage.plugin import Plugin
-from force_bdss.data_sources.base_data_source_bundle import \
-    BaseDataSourceBundle
-
-
-class DummyDataSourceBundle(BaseDataSourceBundle):
-    id = "foo"
-
-    name = "bar"
-
-    def create_data_source(self):
-        pass
-
-    def create_model(self, model_data=None):
-        pass
-
-
-class TestBaseDataSourceBundle(unittest.TestCase):
-    def test_initialization(self):
-        bundle = DummyDataSourceBundle(mock.Mock(spec=Plugin))
-        self.assertEqual(bundle.id, 'foo')
-        self.assertEqual(bundle.name, 'bar')
diff --git a/force_bdss/data_sources/tests/test_base_data_source_factory.py b/force_bdss/data_sources/tests/test_base_data_source_factory.py
new file mode 100644
index 0000000000000000000000000000000000000000..9a6b56203a0cbfafecfd4bd634b05504139a578d
--- /dev/null
+++ b/force_bdss/data_sources/tests/test_base_data_source_factory.py
@@ -0,0 +1,28 @@
+import unittest
+try:
+    import mock
+except ImportError:
+    from unittest import mock
+
+from envisage.plugin import Plugin
+from force_bdss.data_sources.base_data_source_factory import \
+    BaseDataSourceFactory
+
+
+class DummyDataSourceFactory(BaseDataSourceFactory):
+    id = "foo"
+
+    name = "bar"
+
+    def create_data_source(self):
+        pass
+
+    def create_model(self, model_data=None):
+        pass
+
+
+class TestBaseDataSourceFactory(unittest.TestCase):
+    def test_initialization(self):
+        factory = DummyDataSourceFactory(mock.Mock(spec=Plugin))
+        self.assertEqual(factory.id, 'foo')
+        self.assertEqual(factory.name, 'bar')
diff --git a/force_bdss/data_sources/tests/test_base_data_source_model.py b/force_bdss/data_sources/tests/test_base_data_source_model.py
index e0e3a0f9e63115f062561f2490ba12a0c01aff82..25b8d9a9c2b06374010bc6fe5cff680216019937 100644
--- a/force_bdss/data_sources/tests/test_base_data_source_model.py
+++ b/force_bdss/data_sources/tests/test_base_data_source_model.py
@@ -7,8 +7,8 @@ try:
 except ImportError:
     from unittest import mock
 
-from force_bdss.data_sources.base_data_source_bundle import \
-    BaseDataSourceBundle
+from force_bdss.data_sources.base_data_source_factory import \
+    BaseDataSourceFactory
 from force_bdss.data_sources.base_data_source_model import BaseDataSourceModel
 
 
@@ -18,7 +18,7 @@ class DummyDataSourceModel(BaseDataSourceModel):
 
 class TestBaseDataSourceModel(unittest.TestCase):
     def test_getstate(self):
-        model = DummyDataSourceModel(mock.Mock(spec=BaseDataSourceBundle))
+        model = DummyDataSourceModel(mock.Mock(spec=BaseDataSourceFactory))
         self.assertEqual(
             model.__getstate__(),
             {
diff --git a/force_bdss/bundle_registry_plugin.py b/force_bdss/factory_registry_plugin.py
similarity index 60%
rename from force_bdss/bundle_registry_plugin.py
rename to force_bdss/factory_registry_plugin.py
index 44e7d4808f6e58429dc1efa566b90d3fd0afa90e..80d5944f2f63033ca0d50ea50d58ec13f2ebd176 100644
--- a/force_bdss/bundle_registry_plugin.py
+++ b/force_bdss/factory_registry_plugin.py
@@ -3,22 +3,22 @@ from envisage.plugin import Plugin
 from traits.api import List
 
 from force_bdss.ids import ExtensionPointID
-from .data_sources.i_data_source_bundle import (
-    IDataSourceBundle)
-from .kpi.i_kpi_calculator_bundle import IKPICalculatorBundle
-from .mco.i_mco_bundle import (
-    IMCOBundle
+from .data_sources.i_data_source_factory import (
+    IDataSourceFactory)
+from .kpi.i_kpi_calculator_factory import IKPICalculatorFactory
+from .mco.i_mco_factory import (
+    IMCOFactory
 )
 
 
-BUNDLE_REGISTRY_PLUGIN_ID = "force.bdss.plugins.bundle_registry"
+FACTORY_REGISTRY_PLUGIN_ID = "force.bdss.plugins.factory_registry"
 
 
-class BundleRegistryPlugin(Plugin):
+class FactoryRegistryPlugin(Plugin):
     """Main plugin that handles the execution of the MCO
     or the evaluation.
     """
-    id = BUNDLE_REGISTRY_PLUGIN_ID
+    id = FACTORY_REGISTRY_PLUGIN_ID
 
     # Note: we are forced to declare these extensions points here instead
     # of the application object, and this is why we have to use this plugin.
@@ -27,37 +27,37 @@ class BundleRegistryPlugin(Plugin):
 
     #: A List of the available Multi Criteria Optimizers.
     #: This will be populated by MCO plugins.
-    mco_bundles = ExtensionPoint(
-        List(IMCOBundle),
-        id=ExtensionPointID.MCO_BUNDLES)
+    mco_factories = ExtensionPoint(
+        List(IMCOFactory),
+        id=ExtensionPointID.MCO_FACTORIES)
 
     #: A list of the available Data Sources.
     #: It will be populated by plugins.
-    data_source_bundles = ExtensionPoint(
-        List(IDataSourceBundle),
-        id=ExtensionPointID.DATA_SOURCE_BUNDLES)
+    data_source_factories = ExtensionPoint(
+        List(IDataSourceFactory),
+        id=ExtensionPointID.DATA_SOURCE_FACTORIES)
 
     #: A list of the available Key Performance Indicator calculators.
     #: It will be populated by plugins.
-    kpi_calculator_bundles = ExtensionPoint(
-        List(IKPICalculatorBundle),
-        id=ExtensionPointID.KPI_CALCULATOR_BUNDLES)
+    kpi_calculator_factories = ExtensionPoint(
+        List(IKPICalculatorFactory),
+        id=ExtensionPointID.KPI_CALCULATOR_FACTORIES)
 
-    def data_source_bundle_by_id(self, id):
-        """Finds a given data source bundle by means of its id.
-        The ID is as obtained by the function bundle_id() in the
+    def data_source_factory_by_id(self, id):
+        """Finds a given data source factory by means of its id.
+        The ID is as obtained by the function factory_id() in the
         plugin api.
 
         Parameters
         ----------
         id: str
-            The identifier returned by the bundle_id() function.
+            The identifier returned by the factory_id() function.
 
         Raises
         ------
         KeyError: if the entry is not found.
         """
-        for ds in self.data_source_bundles:
+        for ds in self.data_source_factories:
             if ds.id == id:
                 return ds
 
@@ -65,21 +65,21 @@ class BundleRegistryPlugin(Plugin):
             "Requested data source {} but don't know how "
             "to find it.".format(id))
 
-    def kpi_calculator_bundle_by_id(self, id):
-        """Finds a given kpi bundle by means of its id.
-        The ID is as obtained by the function bundle_id() in the
+    def kpi_calculator_factory_by_id(self, id):
+        """Finds a given kpi factory by means of its id.
+        The ID is as obtained by the function factory_id() in the
         plugin api.
 
         Parameters
         ----------
         id: str
-            The identifier returned by the bundle_id() function.
+            The identifier returned by the factory_id() function.
 
         Raises
         ------
         KeyError: if the entry is not found.
         """
-        for kpic in self.kpi_calculator_bundles:
+        for kpic in self.kpi_calculator_factories:
             if kpic.id == id:
                 return kpic
 
@@ -87,21 +87,21 @@ class BundleRegistryPlugin(Plugin):
             "Requested kpi calculator {} but don't know how "
             "to find it.".format(id))
 
-    def mco_bundle_by_id(self, id):
-        """Finds a given Multi Criteria Optimizer (MCO) bundle by means of
-        its id. The ID is as obtained by the function bundle_id() in the
+    def mco_factory_by_id(self, id):
+        """Finds a given Multi Criteria Optimizer (MCO) factory by means of
+        its id. The ID is as obtained by the function factory_id() in the
         plugin api.
 
         Parameters
         ----------
         id: str
-            The identifier returned by the bundle_id() function.
+            The identifier returned by the factory_id() function.
 
         Raises
         ------
         KeyError: if the entry is not found.
         """
-        for mco in self.mco_bundles:
+        for mco in self.mco_factories:
             if mco.id == id:
                 return mco
 
@@ -128,9 +128,9 @@ class BundleRegistryPlugin(Plugin):
         KeyError:
             if the entry is not found
         """
-        mco_bundle = self.mco_bundle_by_id(mco_id)
+        mco_factory = self.mco_factory_by_id(mco_id)
 
-        for factory in mco_bundle.parameter_factories():
+        for factory in mco_factory.parameter_factories():
             if factory.id == parameter_id:
                 return factory
 
diff --git a/force_bdss/ids.py b/force_bdss/ids.py
index 4e5c4144566323d7e93e9f5b65592358bbf0ab16..2bee28c2960f62e8a42f37bf071c385a2dacf912 100644
--- a/force_bdss/ids.py
+++ b/force_bdss/ids.py
@@ -2,41 +2,41 @@ import six
 
 
 class ExtensionPointID:
-    """The envisage extension points ids for the bundles ExtensionPoints.
+    """The envisage extension points ids for the factorys ExtensionPoints.
     These are populated by the envisage plugins.
 
     The plugin developer generally does not have to handle these identifiers,
     as they just have to reimplement the plugin base class and implement
     the appropriate default methods.
     """
-    MCO_BUNDLES = 'force.bdss.mco.bundles'
-    DATA_SOURCE_BUNDLES = 'force.bdss.data_source.bundles'
-    KPI_CALCULATOR_BUNDLES = 'force.bdss.kpi_calculator.bundles'
+    MCO_FACTORIES = 'force.bdss.mco.factories'
+    DATA_SOURCE_FACTORIES = 'force.bdss.data_source.factories'
+    KPI_CALCULATOR_FACTORIES = 'force.bdss.kpi_calculator.factories'
 
 
-def bundle_id(producer, identifier):
-    """Creates an id for the bundle.
+def factory_id(producer, identifier):
+    """Creates an id for the factory.
 
     Parameters
     ----------
     producer: str
         the company or research institute unique identifier (e.g. "enthought")
     identifier: str
-        A unique identifier for the bundle. The producer has authority and
+        A unique identifier for the factory. The producer has authority and
         control over the uniqueness of this identifier.
 
     Returns
     -------
-    str: an identifier to be used in the bundle.
+    str: an identifier to be used in the factory.
     """
-    return _string_id(producer, "bundle", identifier)
+    return _string_id(producer, "factory", identifier)
 
 
 def mco_parameter_id(producer, mco_identifier, parameter_identifier):
     """Creates an ID for an MCO parameter, so that it can be identified
     uniquely."""
     return _string_id(producer,
-                      "bundle",
+                      "factory",
                       mco_identifier,
                       "parameter",
                       parameter_identifier)
@@ -55,16 +55,16 @@ def _string_id(*args):
     Parameters
     ----------
     entity_namespace: str
-        A namespace for the entity we want to address (e.g. "bundle")
+        A namespace for the entity we want to address (e.g. "factory")
     producer: str
         the company or research institute unique identifier (e.g. "enthought")
     identifier: str
-        A unique identifier for the bundle. The producer has authority and
+        A unique identifier for the factory. The producer has authority and
         control over the uniqueness of this identifier.
 
     Returns
     -------
-    str: an identifier to be used in the bundle.
+    str: an identifier to be used in the factory.
     """
     def is_valid(entry):
         return (
diff --git a/force_bdss/io/tests/test_workflow_reader.py b/force_bdss/io/tests/test_workflow_reader.py
index 9119702953768f065117f69df99ac039981f03e4..b0704c45766410731a52a6e3a6e535ab1a5eb0dc 100644
--- a/force_bdss/io/tests/test_workflow_reader.py
+++ b/force_bdss/io/tests/test_workflow_reader.py
@@ -2,7 +2,7 @@ import json
 import unittest
 from six import StringIO
 
-from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
+from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
 from force_bdss.io.workflow_reader import (
     WorkflowReader,
     InvalidVersionException, InvalidFileException)
@@ -15,13 +15,13 @@ except ImportError:
 
 class TestWorkflowReader(unittest.TestCase):
     def setUp(self):
-        self.mock_bundle_registry = mock.Mock(spec=BundleRegistryPlugin)
+        self.mock_factory_registry = mock.Mock(spec=FactoryRegistryPlugin)
 
-        self.wfreader = WorkflowReader(self.mock_bundle_registry)
+        self.wfreader = WorkflowReader(self.mock_factory_registry)
 
     def test_initialization(self):
-        self.assertEqual(self.wfreader.bundle_registry,
-                         self.mock_bundle_registry)
+        self.assertEqual(self.wfreader.factory_registry,
+                         self.mock_factory_registry)
 
     def test_invalid_version(self):
         data = {
diff --git a/force_bdss/io/tests/test_workflow_writer.py b/force_bdss/io/tests/test_workflow_writer.py
index 0dc1397d8c0a4c0dcbaf4df7c91cccac22b02a46..7d649c067abf006eb9e71dd36feea441610fe1dd 100644
--- a/force_bdss/io/tests/test_workflow_writer.py
+++ b/force_bdss/io/tests/test_workflow_writer.py
@@ -3,7 +3,7 @@ import unittest
 
 from six import StringIO
 
-from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
+from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
 from force_bdss.io.workflow_reader import WorkflowReader
 from force_bdss.mco.parameters.base_mco_parameter import BaseMCOParameter
 from force_bdss.mco.parameters.base_mco_parameter_factory import \
@@ -14,27 +14,27 @@ try:
 except ImportError:
     from unittest import mock
 
-from force_bdss.ids import bundle_id, mco_parameter_id
+from force_bdss.ids import factory_id, mco_parameter_id
 from force_bdss.io.workflow_writer import WorkflowWriter
 from force_bdss.mco.base_mco_model import BaseMCOModel
-from force_bdss.mco.i_mco_bundle import IMCOBundle
+from force_bdss.mco.i_mco_factory import IMCOFactory
 from force_bdss.core.workflow import Workflow
 
 
 class TestWorkflowWriter(unittest.TestCase):
     def setUp(self):
-        self.mock_registry = mock.Mock(spec=BundleRegistryPlugin)
-        mock_mco_bundle = mock.Mock(spec=IMCOBundle,
-                                    id=bundle_id("enthought", "mock"))
+        self.mock_registry = mock.Mock(spec=FactoryRegistryPlugin)
+        mock_mco_factory = mock.Mock(spec=IMCOFactory,
+                                     id=factory_id("enthought", "mock"))
         mock_mco_model = mock.Mock(
             spec=BaseMCOModel,
-            bundle=mock_mco_bundle
+            factory=mock_mco_factory
         )
-        mock_mco_bundle.create_model = mock.Mock(
+        mock_mco_factory.create_model = mock.Mock(
             return_value=mock_mco_model
         )
-        self.mock_registry.mco_bundle_by_id = mock.Mock(
-            return_value=mock_mco_bundle)
+        self.mock_registry.mco_factory_by_id = mock.Mock(
+            return_value=mock_mco_factory)
 
     def test_write(self):
         wfwriter = WorkflowWriter()
@@ -57,15 +57,15 @@ class TestWorkflowWriter(unittest.TestCase):
         fp.seek(0)
         wfreader = WorkflowReader(self.mock_registry)
         wf_result = wfreader.read(fp)
-        self.assertEqual(wf_result.mco.bundle.id,
-                         wf.mco.bundle.id)
+        self.assertEqual(wf_result.mco.factory.id,
+                         wf.mco.factory.id)
 
     def _create_mock_workflow(self):
         wf = Workflow()
         wf.mco = BaseMCOModel(
             mock.Mock(
-                spec=IMCOBundle,
-                id=bundle_id("enthought", "mock")))
+                spec=IMCOFactory,
+                id=factory_id("enthought", "mock")))
         wf.mco.parameters = [
             BaseMCOParameter(
                 factory=mock.Mock(
diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py
index d82c917440ebdbc5afe3fd8bbe7f39b48191a27b..df20c7606e2e7624eaa92e9c8ffcdd6e950bd51a 100644
--- a/force_bdss/io/workflow_reader.py
+++ b/force_bdss/io/workflow_reader.py
@@ -5,7 +5,7 @@ from traits.api import HasStrictTraits, Instance
 
 from force_bdss.core.input_slot_map import InputSlotMap
 from force_bdss.core.workflow import Workflow
-from ..bundle_registry_plugin import BundleRegistryPlugin
+from ..factory_registry_plugin import FactoryRegistryPlugin
 
 SUPPORTED_FILE_VERSIONS = ["1"]
 
@@ -23,23 +23,23 @@ class WorkflowReader(HasStrictTraits):
     """
     Reads the workflow from a file.
     """
-    #: The bundle registry. The reader needs it to create the
-    #: bundle-specific model objects.
-    bundle_registry = Instance(BundleRegistryPlugin)
+    #: The Factory registry. The reader needs it to create the
+    #: specific model objects.
+    factory_registry = Instance(FactoryRegistryPlugin)
 
     def __init__(self,
-                 bundle_registry,
+                 factory_registry,
                  *args,
                  **kwargs):
         """Initializes the reader.
 
         Parameters
         ----------
-        bundle_registry: BundleRegistryPlugin
-            The bundle registry that provides lookup services
-            for a bundle identified by a given id.
+        factory_registry: FactoryRegistryPlugin
+            The factory registry that provides lookup services
+            for a factory identified by a given id.
         """
-        self.bundle_registry = bundle_registry
+        self.factory_registry = factory_registry
 
         super(WorkflowReader, self).__init__(*args, **kwargs)
 
@@ -105,11 +105,11 @@ class WorkflowReader(HasStrictTraits):
 
         Returns
         -------
-        a BaseMCOModel instance of the bundle-specific MCO driver, or None
+        a BaseMCOModel instance of the specific MCO driver, or None
         if no MCO is specified in the file (as in the case of premature
         saving).
         """
-        registry = self.bundle_registry
+        registry = self.factory_registry
 
         mco_data = wf_data.get("mco")
         if mco_data is None:
@@ -118,12 +118,12 @@ class WorkflowReader(HasStrictTraits):
             return None
 
         mco_id = mco_data["id"]
-        mco_bundle = registry.mco_bundle_by_id(mco_id)
+        mco_factory = registry.mco_factory_by_id(mco_id)
         model_data = wf_data["mco"]["model_data"]
         model_data["parameters"] = self._extract_mco_parameters(
             mco_id,
             model_data["parameters"])
-        model = mco_bundle.create_model(
+        model = mco_factory.create_model(
             wf_data["mco"]["model_data"])
         return model
 
@@ -138,19 +138,19 @@ class WorkflowReader(HasStrictTraits):
         Returns
         -------
         list of BaseDataSourceModel instances. Each BaseDataSourceModel is an
-        instance of the bundle specific model class. The list can be empty.
+        instance of the specific model class. The list can be empty.
         """
-        registry = self.bundle_registry
+        registry = self.factory_registry
 
         data_sources = []
         for ds_entry in wf_data["data_sources"]:
             ds_id = ds_entry["id"]
-            ds_bundle = registry.data_source_bundle_by_id(ds_id)
+            ds_factory = registry.data_source_factory_by_id(ds_id)
             model_data = ds_entry["model_data"]
             model_data["input_slot_maps"] = self._extract_input_slot_maps(
                 model_data["input_slot_maps"]
             )
-            data_sources.append(ds_bundle.create_model(model_data))
+            data_sources.append(ds_factory.create_model(model_data))
 
         return data_sources
 
@@ -165,22 +165,22 @@ class WorkflowReader(HasStrictTraits):
         Returns
         -------
         list of BaseKPICalculatorModel instances. Each BaseKPICalculatorModel
-        is an instance of the bundle specific model class. The list can be
+        is an instance of the specific model class. The list can be
         empty.
         """
-        registry = self.bundle_registry
+        registry = self.factory_registry
 
         kpi_calculators = []
         for kpic_entry in wf_data["kpi_calculators"]:
             kpic_id = kpic_entry["id"]
-            kpic_bundle = registry.kpi_calculator_bundle_by_id(kpic_id)
+            kpic_factory = registry.kpi_calculator_factory_by_id(kpic_id)
             model_data = kpic_entry["model_data"]
             model_data["input_slot_maps"] = self._extract_input_slot_maps(
                 model_data["input_slot_maps"]
             )
 
             kpi_calculators.append(
-                kpic_bundle.create_model(model_data)
+                kpic_factory.create_model(model_data)
             )
 
         return kpi_calculators
@@ -197,7 +197,7 @@ class WorkflowReader(HasStrictTraits):
         -------
         List of instances of a subclass of BaseMCOParameter
         """
-        registry = self.bundle_registry
+        registry = self.factory_registry
 
         parameters = []
 
diff --git a/force_bdss/io/workflow_writer.py b/force_bdss/io/workflow_writer.py
index 4b959893dc98c8211fccb215460dec7d8bd87fd4..8335d5b3a95ff669c863b6c7a3a8175aaf312ef7 100644
--- a/force_bdss/io/workflow_writer.py
+++ b/force_bdss/io/workflow_writer.py
@@ -28,10 +28,10 @@ class WorkflowWriter(HasStrictTraits):
         workflow_data = {
             "mco": self._mco_data(workflow.mco),
             "kpi_calculators": [
-                self._bundle_model_data(kpic)
+                self._model_data(kpic)
                 for kpic in workflow.kpi_calculators],
             "data_sources": [
-                self._bundle_model_data(ds)
+                self._model_data(ds)
                 for ds in workflow.data_sources]
         }
 
@@ -43,7 +43,7 @@ class WorkflowWriter(HasStrictTraits):
         if mco is None:
             return None
 
-        data = self._bundle_model_data(mco)
+        data = self._model_data(mco)
 
         parameters_data = []
         for param in data["model_data"]["parameters"]:
@@ -57,11 +57,11 @@ class WorkflowWriter(HasStrictTraits):
         data["model_data"]["parameters"] = parameters_data
         return data
 
-    def _bundle_model_data(self, bundle_model):
+    def _model_data(self, model):
         """
-        Extracts the data from a bundle model and returns its dictionary
+        Extracts the data from an external model and returns its dictionary
         """
         return {
-            "id": bundle_model.bundle.id,
-            "model_data": bundle_model.__getstate__()
+            "id": model.factory.id,
+            "model_data": model.__getstate__()
         }
diff --git a/force_bdss/kpi/base_kpi_calculator.py b/force_bdss/kpi/base_kpi_calculator.py
index b757dd403a9460d53e04d3aa7dd13ac833c5d2a2..0ba7607dc029a26a97b472d3df4f919cf417baad 100644
--- a/force_bdss/kpi/base_kpi_calculator.py
+++ b/force_bdss/kpi/base_kpi_calculator.py
@@ -2,7 +2,7 @@ import abc
 
 from traits.api import ABCHasStrictTraits, Instance
 
-from .i_kpi_calculator_bundle import IKPICalculatorBundle
+from .i_kpi_calculator_factory import IKPICalculatorFactory
 
 
 class BaseKPICalculator(ABCHasStrictTraits):
@@ -10,11 +10,11 @@ class BaseKPICalculator(ABCHasStrictTraits):
 
     Inherit this class for your KPI calculator.
     """
-    #: A reference to the bundle
-    bundle = Instance(IKPICalculatorBundle)
+    #: A reference to the factory
+    factory = Instance(IKPICalculatorFactory)
 
-    def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+    def __init__(self, factory, *args, **kwargs):
+        self.factory = factory
         super(BaseKPICalculator, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
diff --git a/force_bdss/kpi/base_kpi_calculator_bundle.py b/force_bdss/kpi/base_kpi_calculator_factory.py
similarity index 69%
rename from force_bdss/kpi/base_kpi_calculator_bundle.py
rename to force_bdss/kpi/base_kpi_calculator_factory.py
index 44e934fbcd4f360d7f48ca938cc7650aac67f5f6..cb0b69dcfe8de82a51225682d6cded07e191fae3 100644
--- a/force_bdss/kpi/base_kpi_calculator_bundle.py
+++ b/force_bdss/kpi/base_kpi_calculator_factory.py
@@ -2,25 +2,25 @@ import abc
 from envisage.plugin import Plugin
 from traits.api import ABCHasStrictTraits, provides, String, Instance
 
-from .i_kpi_calculator_bundle import IKPICalculatorBundle
+from .i_kpi_calculator_factory import IKPICalculatorFactory
 
 
-@provides(IKPICalculatorBundle)
-class BaseKPICalculatorBundle(ABCHasStrictTraits):
-    """Base class for the Key Performance Indicator calculator bundles.
-    Inherit from this class to create a bundle, and reimplement the abstract
+@provides(IKPICalculatorFactory)
+class BaseKPICalculatorFactory(ABCHasStrictTraits):
+    """Base class for the Key Performance Indicator calculator factories.
+    Inherit from this class to create a factory, and reimplement the abstract
     methods.
     """
     # NOTE: any changes in this interface must be ported to
-    # IKPICalculatorBundle
+    # IKPICalculatorFactory
 
-    #: A unique ID generated with bundle_id() routine
+    #: A unique ID generated with factory_id() routine
     id = String()
 
-    #: A UI friendly name for the bundle. Can contain spaces.
+    #: A UI friendly name for the factory. Can contain spaces.
     name = String()
 
-    #: A reference to the plugin that holds this bundle.
+    #: A reference to the plugin that holds this factory.
     plugin = Instance(Plugin)
 
     def __init__(self, plugin, *args, **kwargs):
@@ -29,10 +29,10 @@ class BaseKPICalculatorBundle(ABCHasStrictTraits):
         Parameters
         ----------
         plugin: Plugin
-            The plugin that holds this bundle.
+            The plugin that holds this factory.
         """
         self.plugin = plugin
-        super(BaseKPICalculatorBundle, self).__init__(*args, **kwargs)
+        super(BaseKPICalculatorFactory, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
     def create_kpi_calculator(self):
diff --git a/force_bdss/kpi/base_kpi_calculator_model.py b/force_bdss/kpi/base_kpi_calculator_model.py
index 825b460905f799d8a3bdace9ea017ba0109c64ae..77e2991c4f3f36754baa13940dbfac41a8b36a6e 100644
--- a/force_bdss/kpi/base_kpi_calculator_model.py
+++ b/force_bdss/kpi/base_kpi_calculator_model.py
@@ -1,20 +1,20 @@
 from traits.api import ABCHasStrictTraits, Instance, List, String
 
 from ..core.input_slot_map import InputSlotMap
-from .i_kpi_calculator_bundle import IKPICalculatorBundle
+from .i_kpi_calculator_factory import IKPICalculatorFactory
 
 
 class BaseKPICalculatorModel(ABCHasStrictTraits):
-    """Base class for the bundle specific KPI calculator models.
+    """Base class for the factory specific KPI calculator models.
     This model will also provide, through traits/traitsui magic the View
     that will appear in the workflow manager UI.
 
-    In your bundle definition, your bundle-specific model must reimplement
+    In your factory definition, your factory-specific model must reimplement
     this class.
     """
-    #: A reference to the creating bundle, so that we can
+    #: A reference to the creating factory, so that we can
     #: retrieve it as the originating factory.
-    bundle = Instance(IKPICalculatorBundle, visible=False, transient=True)
+    factory = Instance(IKPICalculatorFactory, visible=False, transient=True)
 
     #: Specifies binding between input slots and source for that value.
     #: Each InputSlotMap instance specifies this information for each of the
@@ -25,8 +25,8 @@ class BaseKPICalculatorModel(ABCHasStrictTraits):
     #: referenced somewhere else (e.g. the KPICalculators).
     output_slot_names = List(String())
 
-    def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+    def __init__(self, factory, *args, **kwargs):
+        self.factory = factory
         super(BaseKPICalculatorModel, self).__init__(*args, **kwargs)
 
     def __getstate__(self):
diff --git a/force_bdss/kpi/i_kpi_calculator_bundle.py b/force_bdss/kpi/i_kpi_calculator_factory.py
similarity index 65%
rename from force_bdss/kpi/i_kpi_calculator_bundle.py
rename to force_bdss/kpi/i_kpi_calculator_factory.py
index 2c32b24f72316d44d452af211cf41151cd680256..65a40c5e587c80d3c1c9649cc48bb6401913258a 100644
--- a/force_bdss/kpi/i_kpi_calculator_bundle.py
+++ b/force_bdss/kpi/i_kpi_calculator_factory.py
@@ -2,11 +2,11 @@ from traits.api import Interface, String, Instance
 from envisage.plugin import Plugin
 
 
-class IKPICalculatorBundle(Interface):
-    """Envisage required interface for the BaseKPICalculatorBundle.
+class IKPICalculatorFactory(Interface):
+    """Envisage required interface for the BaseKPICalculatorFactory.
     You should not need to use this directly.
 
-    Refer to the BaseKPICalculatorBundle for documentation.
+    Refer to the BaseKPICalculatorFactory for documentation.
     """
     id = String()
 
diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator.py b/force_bdss/kpi/tests/test_base_kpi_calculator.py
index 334c1915535d576c9d444a4de0e60fef6f13706a..945a49a1ba72b49c586fa06735a17361b4e5b85d 100644
--- a/force_bdss/kpi/tests/test_base_kpi_calculator.py
+++ b/force_bdss/kpi/tests/test_base_kpi_calculator.py
@@ -5,7 +5,7 @@ except ImportError:
     from unittest import mock
 
 from force_bdss.kpi.base_kpi_calculator import BaseKPICalculator
-from force_bdss.kpi.i_kpi_calculator_bundle import IKPICalculatorBundle
+from force_bdss.kpi.i_kpi_calculator_factory import IKPICalculatorFactory
 
 
 class DummyKPICalculator(BaseKPICalculator):
@@ -18,7 +18,7 @@ class DummyKPICalculator(BaseKPICalculator):
 
 class TestBaseKPICalculator(unittest.TestCase):
     def test_initialization(self):
-        bundle = mock.Mock(spec=IKPICalculatorBundle)
-        kpic = DummyKPICalculator(bundle)
+        factory = mock.Mock(spec=IKPICalculatorFactory)
+        kpic = DummyKPICalculator(factory)
 
-        self.assertEqual(kpic.bundle, bundle)
+        self.assertEqual(kpic.factory, factory)
diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py b/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py
deleted file mode 100644
index f3cc87d981890778075ebd95057e3c09ae5c49dd..0000000000000000000000000000000000000000
--- a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import unittest
-from envisage.plugin import Plugin
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from force_bdss.kpi.base_kpi_calculator_bundle import \
-    BaseKPICalculatorBundle
-
-
-class DummyKPICalculatorBundle(BaseKPICalculatorBundle):
-    id = "foo"
-
-    name = "bar"
-
-    def create_kpi_calculator(self):
-        pass
-
-    def create_model(self, model_data=None):
-        pass
-
-
-class TestBaseKPICalculatorBundle(unittest.TestCase):
-    def test_initialization(self):
-        bundle = DummyKPICalculatorBundle(mock.Mock(spec=Plugin))
-        self.assertEqual(bundle.id, 'foo')
-        self.assertEqual(bundle.name, 'bar')
diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator_factory.py b/force_bdss/kpi/tests/test_base_kpi_calculator_factory.py
new file mode 100644
index 0000000000000000000000000000000000000000..b6b26bb5d0551df79b4bc975aed6ca675e2d9f97
--- /dev/null
+++ b/force_bdss/kpi/tests/test_base_kpi_calculator_factory.py
@@ -0,0 +1,29 @@
+import unittest
+from envisage.plugin import Plugin
+
+try:
+    import mock
+except ImportError:
+    from unittest import mock
+
+from force_bdss.kpi.base_kpi_calculator_factory import \
+    BaseKPICalculatorFactory
+
+
+class DummyKPICalculatorFactory(BaseKPICalculatorFactory):
+    id = "foo"
+
+    name = "bar"
+
+    def create_kpi_calculator(self):
+        pass
+
+    def create_model(self, model_data=None):
+        pass
+
+
+class TestBaseKPICalculatorFactory(unittest.TestCase):
+    def test_initialization(self):
+        factory = DummyKPICalculatorFactory(mock.Mock(spec=Plugin))
+        self.assertEqual(factory.id, 'foo')
+        self.assertEqual(factory.name, 'bar')
diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator_model.py b/force_bdss/kpi/tests/test_base_kpi_calculator_model.py
index 64b81c20e111a5bce44e8e9d1987323f1f213813..5957a459bbf9b89457f2be24295ce25ee9954b81 100644
--- a/force_bdss/kpi/tests/test_base_kpi_calculator_model.py
+++ b/force_bdss/kpi/tests/test_base_kpi_calculator_model.py
@@ -1,7 +1,7 @@
 import unittest
 
 from force_bdss.core.input_slot_map import InputSlotMap
-from force_bdss.kpi.base_kpi_calculator_bundle import BaseKPICalculatorBundle
+from force_bdss.kpi.base_kpi_calculator_factory import BaseKPICalculatorFactory
 from force_bdss.kpi.base_kpi_calculator_model import BaseKPICalculatorModel
 
 try:
@@ -17,7 +17,7 @@ class DummyKPICalculatorModel(BaseKPICalculatorModel):
 class TestBaseKPICalculatorModel(unittest.TestCase):
     def test_getstate(self):
         model = DummyKPICalculatorModel(
-            mock.Mock(spec=BaseKPICalculatorBundle))
+            mock.Mock(spec=BaseKPICalculatorFactory))
         self.assertEqual(
             model.__getstate__(),
             {
diff --git a/force_bdss/mco/base_mco.py b/force_bdss/mco/base_mco.py
index d2afbec85a54984a41b2fecd733b775d8ff5b14a..1fb2664c21e7b6dc515374047985cff82c3791d0 100644
--- a/force_bdss/mco/base_mco.py
+++ b/force_bdss/mco/base_mco.py
@@ -2,7 +2,7 @@ import abc
 
 from traits.api import ABCHasStrictTraits, Instance
 
-from .i_mco_bundle import IMCOBundle
+from .i_mco_factory import IMCOFactory
 
 
 class BaseMCO(ABCHasStrictTraits):
@@ -10,18 +10,18 @@ class BaseMCO(ABCHasStrictTraits):
 
     Inherit this class for your MCO implementation
     """
-    #: A reference to the bundle
-    bundle = Instance(IMCOBundle)
+    #: A reference to the factory
+    factory = Instance(IMCOFactory)
 
-    def __init__(self, bundle, *args, **kwargs):
+    def __init__(self, factory, *args, **kwargs):
         """Initializes the MCO.
 
         Parameters
         ----------
-        bundle: BaseMCOBundle
-            The bundle this BaseMCO belongs to
+        factory: BaseMCOFactory
+            The factory this BaseMCO belongs to
         """
-        self.bundle = bundle
+        self.factory = factory
         super(BaseMCO, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
diff --git a/force_bdss/mco/base_mco_communicator.py b/force_bdss/mco/base_mco_communicator.py
index cad5ef3b965e4689d7394848d2cc98dd65ea4a2f..22f023346bf5c234d848b9593c63ce49d8d7da85 100644
--- a/force_bdss/mco/base_mco_communicator.py
+++ b/force_bdss/mco/base_mco_communicator.py
@@ -2,7 +2,7 @@ import abc
 
 from traits.api import ABCHasStrictTraits, Instance
 
-from .i_mco_bundle import IMCOBundle
+from .i_mco_factory import IMCOFactory
 
 
 class BaseMCOCommunicator(ABCHasStrictTraits):
@@ -16,11 +16,11 @@ class BaseMCOCommunicator(ABCHasStrictTraits):
     that we interpret as KPIs. These KPIs are encoded in some form, which is
     again specified by the MCO.
     """
-    #: A reference to the bundle
-    bundle = Instance(IMCOBundle)
+    #: A reference to the factory
+    factory = Instance(IMCOFactory)
 
-    def __init__(self, bundle):
-        self.bundle = bundle
+    def __init__(self, factory):
+        self.factory = factory
 
     @abc.abstractmethod
     def receive_from_mco(self, model):
diff --git a/force_bdss/mco/base_mco_bundle.py b/force_bdss/mco/base_mco_factory.py
similarity index 79%
rename from force_bdss/mco/base_mco_bundle.py
rename to force_bdss/mco/base_mco_factory.py
index c8e0d6d730918507ac25c7faeedf37b17ce7df03..60608fc6edcad79999b8af013eb81d53dd2dc71c 100644
--- a/force_bdss/mco/base_mco_bundle.py
+++ b/force_bdss/mco/base_mco_factory.py
@@ -3,28 +3,28 @@ import abc
 from traits.api import ABCHasStrictTraits, String, provides, Instance
 from envisage.plugin import Plugin
 
-from .i_mco_bundle import IMCOBundle
+from .i_mco_factory import IMCOFactory
 
 
-@provides(IMCOBundle)
-class BaseMCOBundle(ABCHasStrictTraits):
-    """Base class for the MultiCriteria Optimizer bundle.
+@provides(IMCOFactory)
+class BaseMCOFactory(ABCHasStrictTraits):
+    """Base class for the MultiCriteria Optimizer factory.
     """
     # NOTE: any changes to the interface of this class must be replicated
-    # in the IMultiCriteriaOptimizerBundle interface class.
+    # in the IMultiCriteriaOptimizerFactory interface class.
 
-    #: A unique ID produced with the bundle_id() routine.
+    #: A unique ID produced with the factory_id() routine.
     id = String()
 
-    #: A user friendly name of the bundle. Spaces allowed.
+    #: A user friendly name of the factory. Spaces allowed.
     name = String()
 
-    #: A reference to the Plugin that holds this bundle.
+    #: A reference to the Plugin that holds this factory.
     plugin = Instance(Plugin)
 
     def __init__(self, plugin, *args, **kwargs):
         self.plugin = plugin
-        super(BaseMCOBundle, self).__init__(*args, **kwargs)
+        super(BaseMCOFactory, self).__init__(*args, **kwargs)
 
     @abc.abstractmethod
     def create_optimizer(self):
diff --git a/force_bdss/mco/base_mco_model.py b/force_bdss/mco/base_mco_model.py
index b096aed5abc2fb5ac5d07e30693f4cba8592a024..d9969a8b4c796d474b263048405cb67f0c7513c3 100644
--- a/force_bdss/mco/base_mco_model.py
+++ b/force_bdss/mco/base_mco_model.py
@@ -1,26 +1,25 @@
 from traits.api import ABCHasStrictTraits, Instance, List
 
 from .parameters.base_mco_parameter import BaseMCOParameter
-from .i_mco_bundle import IMCOBundle
+from .i_mco_factory import IMCOFactory
 
 
 class BaseMCOModel(ABCHasStrictTraits):
-    """Base class for the bundle specific MCO models.
+    """Base class for the specific MCO models.
     This model will also provide, through traits/traitsui magic the View
     that will appear in the workflow manager UI.
 
-    In your bundle definition, your bundle-specific model must reimplement
-    this class.
+    In your definition, your specific model must reimplement this class.
     """
-    #: A reference to the creating bundle, so that we can
+    #: A reference to the creating factory, so that we can
     #: retrieve it as the originating factory.
-    bundle = Instance(IMCOBundle,
-                      visible=False,
-                      transient=True)
+    factory = Instance(IMCOFactory,
+                       visible=False,
+                       transient=True)
 
     # A list of the parameters for the MCO
     parameters = List(BaseMCOParameter)
 
-    def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+    def __init__(self, factory, *args, **kwargs):
+        self.factory = factory
         super(BaseMCOModel, self).__init__(*args, **kwargs)
diff --git a/force_bdss/mco/i_mco_bundle.py b/force_bdss/mco/i_mco_factory.py
similarity index 77%
rename from force_bdss/mco/i_mco_bundle.py
rename to force_bdss/mco/i_mco_factory.py
index 8c6afcef40dc23c4d8ca1a1f7169a22f52752ba6..a989a78596f2b25d7445f0af23d6cb2922150d9c 100644
--- a/force_bdss/mco/i_mco_bundle.py
+++ b/force_bdss/mco/i_mco_factory.py
@@ -2,11 +2,11 @@ from traits.api import Interface, String, Instance
 from envisage.plugin import Plugin
 
 
-class IMCOBundle(Interface):
-    """Interface for the BaseMCOBundle.
+class IMCOFactory(Interface):
+    """Interface for the BaseMCOFactory.
     You should not need it, as its main use is for envisage support.
 
-    Refer to BaseMCOBundle for documentation
+    Refer to BaseMCOFactory for documentation
     """
     id = String()
 
diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py
index efaa70c9ef13884a486e29b9683139f7664566cc..ecce688715c8ce2fdcb0764bf0dabae2f05c215d 100644
--- a/force_bdss/mco/parameters/base_mco_parameter_factory.py
+++ b/force_bdss/mco/parameters/base_mco_parameter_factory.py
@@ -1,6 +1,6 @@
 from traits.api import HasStrictTraits, String, Type, Instance
 
-from ..base_mco_bundle import BaseMCOBundle
+from ..base_mco_factory import BaseMCOFactory
 
 
 class BaseMCOParameterFactory(HasStrictTraits):
@@ -12,8 +12,8 @@ class BaseMCOParameterFactory(HasStrictTraits):
     the appropriate class of the parameter.
     """
 
-    #: A reference to the bundle this parameter factory lives in.
-    bundle = Instance(BaseMCOBundle)
+    #: A reference to the MCO factory this parameter factory lives in.
+    mco_factory = Instance(BaseMCOFactory)
 
     #: A unique string identifying the parameter
     id = String()
@@ -27,8 +27,8 @@ class BaseMCOParameterFactory(HasStrictTraits):
     # The model class to instantiate when create_model is called.
     model_class = Type('BaseMCOParameter')
 
-    def __init__(self, bundle):
-        self.bundle = bundle
+    def __init__(self, mco_factory):
+        self.mco_factory = mco_factory
         super(BaseMCOParameterFactory, self).__init__()
 
     def create_model(self, data_values=None):
diff --git a/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py b/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py
index 45d586defe8500c5c8b09101e496de8084f1d09b..4c3a0ab8d3965bfaf6513673a2e7c14bbac06aa2 100644
--- a/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py
+++ b/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py
@@ -1,6 +1,6 @@
 import unittest
 
-from force_bdss.mco.base_mco_bundle import BaseMCOBundle
+from force_bdss.mco.base_mco_factory import BaseMCOFactory
 
 try:
     import mock
@@ -27,7 +27,7 @@ class DummyMCOParameterFactory(BaseMCOParameterFactory):
 
 class TestBaseMCOParameterFactory(unittest.TestCase):
     def test_initialization(self):
-        factory = DummyMCOParameterFactory(mock.Mock(spec=BaseMCOBundle))
+        factory = DummyMCOParameterFactory(mock.Mock(spec=BaseMCOFactory))
         model = factory.create_model({"x": 42})
         self.assertIsInstance(model, DummyMCOParameter)
         self.assertEqual(model.x, 42)
diff --git a/force_bdss/mco/tests/test_base_mco.py b/force_bdss/mco/tests/test_base_mco.py
index e5e9130a5d9bfa3cc3081c12179d5e3531f0cddb..3762519369d38b5bb33848559bae0b047613db74 100644
--- a/force_bdss/mco/tests/test_base_mco.py
+++ b/force_bdss/mco/tests/test_base_mco.py
@@ -1,7 +1,7 @@
 import unittest
 
 from force_bdss.mco.base_mco import BaseMCO
-from force_bdss.mco.i_mco_bundle import IMCOBundle
+from force_bdss.mco.i_mco_factory import IMCOFactory
 
 try:
     import mock
@@ -16,7 +16,7 @@ class DummyMCO(BaseMCO):
 
 class TestBaseMultiCriteriaOptimizer(unittest.TestCase):
     def test_initialization(self):
-        bundle = mock.Mock(spec=IMCOBundle)
-        mco = DummyMCO(bundle)
+        factory = mock.Mock(spec=IMCOFactory)
+        mco = DummyMCO(factory)
 
-        self.assertEqual(mco.bundle, bundle)
+        self.assertEqual(mco.factory, factory)
diff --git a/force_bdss/mco/tests/test_base_mco_communicator.py b/force_bdss/mco/tests/test_base_mco_communicator.py
index 5769444dba7d6884a337f25a4d49dece4c20b0eb..02387b7049a9ba6d8f32e63827d640887801a989 100644
--- a/force_bdss/mco/tests/test_base_mco_communicator.py
+++ b/force_bdss/mco/tests/test_base_mco_communicator.py
@@ -1,7 +1,7 @@
 import unittest
 
 from force_bdss.mco.base_mco_communicator import BaseMCOCommunicator
-from force_bdss.mco.i_mco_bundle import IMCOBundle
+from force_bdss.mco.i_mco_factory import IMCOFactory
 
 try:
     import mock
@@ -19,7 +19,7 @@ class DummyMCOCommunicator(BaseMCOCommunicator):
 
 class TestBaseMCOCommunicator(unittest.TestCase):
     def test_initialization(self):
-        bundle = mock.Mock(spec=IMCOBundle)
-        mcocomm = DummyMCOCommunicator(bundle)
+        factory = mock.Mock(spec=IMCOFactory)
+        mcocomm = DummyMCOCommunicator(factory)
 
-        self.assertEqual(mcocomm.bundle, bundle)
+        self.assertEqual(mcocomm.factory, factory)
diff --git a/force_bdss/mco/tests/test_base_mco_bundle.py b/force_bdss/mco/tests/test_base_mco_factory.py
similarity index 58%
rename from force_bdss/mco/tests/test_base_mco_bundle.py
rename to force_bdss/mco/tests/test_base_mco_factory.py
index d5dfddce43b13b444e85ba9ba790654ab781b5a6..0c96a3bf63d49c956422ee68a8f9cf76555d1d45 100644
--- a/force_bdss/mco/tests/test_base_mco_bundle.py
+++ b/force_bdss/mco/tests/test_base_mco_factory.py
@@ -7,10 +7,10 @@ except ImportError:
 
 from envisage.plugin import Plugin
 
-from force_bdss.mco.base_mco_bundle import BaseMCOBundle
+from force_bdss.mco.base_mco_factory import BaseMCOFactory
 
 
-class DummyMCOBundle(BaseMCOBundle):
+class DummyMCOFactory(BaseMCOFactory):
     id = "foo"
 
     name = "bar"
@@ -28,8 +28,8 @@ class DummyMCOBundle(BaseMCOBundle):
         return []
 
 
-class TestBaseMCOBundle(unittest.TestCase):
+class TestBaseMCOFactory(unittest.TestCase):
     def test_initialization(self):
-        bundle = DummyMCOBundle(mock.Mock(spec=Plugin))
-        self.assertEqual(bundle.id, 'foo')
-        self.assertEqual(bundle.name, 'bar')
+        factory = DummyMCOFactory(mock.Mock(spec=Plugin))
+        self.assertEqual(factory.id, 'foo')
+        self.assertEqual(factory.name, 'bar')
diff --git a/force_bdss/tests/fixtures/test_csv.json b/force_bdss/tests/fixtures/test_csv.json
index 65df7887c1d9cef517e26219ec9c86cbd2e169ff..c70795734c8ba06f3d7f746a3121c1399e504506 100644
--- a/force_bdss/tests/fixtures/test_csv.json
+++ b/force_bdss/tests/fixtures/test_csv.json
@@ -2,11 +2,11 @@
   "version": "1",
   "workflow": {
     "mco": {
-      "id": "force.bdss.enthought.bundle.dummy_dakota",
+      "id": "force.bdss.enthought.factory.dummy_dakota",
       "model_data": {
         "parameters" : [
           {
-            "id": "force.bdss.enthought.bundle.dummy_dakota.parameter.ranged",
+            "id": "force.bdss.enthought.factory.dummy_dakota.parameter.ranged",
             "model_data": {
                 "initial_value": 3,
                 "lower_bound": 0,
@@ -20,7 +20,7 @@
     },
     "data_sources": [
       {
-        "id": "force.bdss.enthought.bundle.csv_extractor",
+        "id": "force.bdss.enthought.factory.csv_extractor",
         "model_data": {
           "filename": "foo.csv",
           "row": 3,
@@ -34,7 +34,7 @@
         }
       },
       {
-        "id": "force.bdss.enthought.bundle.csv_extractor",
+        "id": "force.bdss.enthought.factory.csv_extractor",
         "model_data": {
           "filename": "foo.csv",
           "row": 3,
@@ -50,7 +50,7 @@
     ],
     "kpi_calculators": [
       {
-        "id": "force.bdss.enthought.bundle.kpi_adder",
+        "id": "force.bdss.enthought.factory.kpi_adder",
         "model_data": {
           "cuba_type_in": "PRESSURE",
           "cuba_type_out": "TOTAL_PRESSURE",
diff --git a/force_bdss/tests/fixtures/test_null.json b/force_bdss/tests/fixtures/test_null.json
index b10ffe97ff8f6d850d9f21e25cbc3aa0df0e0cc7..5b017fbcffee49d68514de79567e8cc46cc9b345 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.bundle.null_mco",
+      "id": "force.bdss.enthought.factory.null_mco",
       "model_data": {
         "parameters" : [
         ]
@@ -10,7 +10,7 @@
     },
     "data_sources": [
       {
-        "id": "force.bdss.enthought.bundle.null_ds",
+        "id": "force.bdss.enthought.factory.null_ds",
         "model_data": {
           "input_slot_maps": [
           ],
@@ -21,7 +21,7 @@
     ],
     "kpi_calculators": [
       {
-        "id": "force.bdss.enthought.bundle.null_kpic",
+        "id": "force.bdss.enthought.factory.null_kpic",
         "model_data": {
           "input_slot_maps": [
           ],
diff --git a/force_bdss/tests/test_bundle_registry_plugin.py b/force_bdss/tests/test_bundle_registry_plugin.py
deleted file mode 100644
index 3050087502e47b1424db5ab2ba19788c57c9f176..0000000000000000000000000000000000000000
--- a/force_bdss/tests/test_bundle_registry_plugin.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import unittest
-
-from force_bdss.base_extension_plugin import (
-    BaseExtensionPlugin)
-from force_bdss.ids import bundle_id, mco_parameter_id
-from force_bdss.mco.parameters.base_mco_parameter_factory import \
-    BaseMCOParameterFactory
-
-try:
-    import mock
-except ImportError:
-    from unittest import mock
-
-from envisage.application import Application
-
-from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
-from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle
-from force_bdss.kpi.i_kpi_calculator_bundle import IKPICalculatorBundle
-from force_bdss.mco.i_mco_bundle import \
-    IMCOBundle
-
-
-class TestBundleRegistry(unittest.TestCase):
-    def setUp(self):
-        self.plugin = BundleRegistryPlugin()
-        self.app = Application([self.plugin])
-        self.app.start()
-        self.app.stop()
-
-    def test_initialization(self):
-        self.assertEqual(self.plugin.mco_bundles, [])
-        self.assertEqual(self.plugin.data_source_bundles, [])
-        self.assertEqual(self.plugin.kpi_calculator_bundles, [])
-
-
-class MySuperPlugin(BaseExtensionPlugin):
-    def _mco_bundles_default(self):
-        return [
-            mock.Mock(
-                spec=IMCOBundle,
-                id=bundle_id("enthought", "mco1"),
-                parameter_factories=mock.Mock(return_value=[
-                    mock.Mock(
-                        spec=BaseMCOParameterFactory,
-                        id=mco_parameter_id("enthought", "mco1", "ranged")
-                    )
-                ]),
-            )]
-
-    def _data_source_bundles_default(self):
-        return [mock.Mock(spec=IDataSourceBundle,
-                          id=bundle_id("enthought", "ds1")),
-                mock.Mock(spec=IDataSourceBundle,
-                          id=bundle_id("enthought", "ds2"))]
-
-    def _kpi_calculator_bundles_default(self):
-        return [mock.Mock(spec=IKPICalculatorBundle,
-                          id=bundle_id("enthought", "kpi1")),
-                mock.Mock(spec=IKPICalculatorBundle,
-                          id=bundle_id("enthought", "kpi2")),
-                mock.Mock(spec=IKPICalculatorBundle,
-                          id=bundle_id("enthought", "kpi3"))]
-
-
-class TestBundleRegistryWithContent(unittest.TestCase):
-    def setUp(self):
-        self.plugin = BundleRegistryPlugin()
-        self.app = Application([self.plugin, MySuperPlugin()])
-        self.app.start()
-        self.app.stop()
-
-    def test_initialization(self):
-        self.assertEqual(len(self.plugin.mco_bundles), 1)
-        self.assertEqual(len(self.plugin.data_source_bundles), 2)
-        self.assertEqual(len(self.plugin.kpi_calculator_bundles), 3)
-
-    def test_lookup(self):
-        mco_id = bundle_id("enthought", "mco1")
-        parameter_id = mco_parameter_id("enthought", "mco1", "ranged")
-        self.assertEqual(self.plugin.mco_bundle_by_id(mco_id).id, mco_id)
-        self.plugin.mco_parameter_factory_by_id(mco_id, parameter_id)
-
-        for entry in ["ds1", "ds2"]:
-            id = bundle_id("enthought", entry)
-            self.assertEqual(self.plugin.data_source_bundle_by_id(id).id, id)
-
-        for entry in ["kpi1", "kpi2", "kpi3"]:
-            id = bundle_id("enthought", entry)
-            self.assertEqual(self.plugin.kpi_calculator_bundle_by_id(id).id,
-                             id)
-
-        with self.assertRaises(KeyError):
-            self.plugin.mco_bundle_by_id(
-                bundle_id("enthought", "foo"))
-
-        with self.assertRaises(KeyError):
-            self.plugin.mco_parameter_factory_by_id(
-                mco_id,
-                mco_parameter_id("enthought", "mco1", "foo")
-            )
-
-        with self.assertRaises(KeyError):
-            self.plugin.data_source_bundle_by_id(
-                bundle_id("enthought", "foo")
-            )
-
-        with self.assertRaises(KeyError):
-            self.plugin.data_source_bundle_by_id(
-                bundle_id("enthought", "foo")
-            )
-
-        with self.assertRaises(KeyError):
-            self.plugin.kpi_calculator_bundle_by_id(
-                bundle_id("enthought", "foo")
-            )
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/force_bdss/tests/test_core_evaluation_driver.py b/force_bdss/tests/test_core_evaluation_driver.py
index 9f680fa52ac94c16226889fc215a21337273c584..0064b2b39c461612e9d8fa97f68f90fd36e2d88d 100644
--- a/force_bdss/tests/test_core_evaluation_driver.py
+++ b/force_bdss/tests/test_core_evaluation_driver.py
@@ -1,18 +1,18 @@
 import unittest
 from traits.api import Float, List
-from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
+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_bundle import \
-    BaseDataSourceBundle
+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, bundle_id
+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_bundle import BaseKPICalculatorBundle
+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_bundle import BaseMCOBundle
+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
@@ -70,8 +70,8 @@ class OneDataValueMCOCommunicator(BaseMCOCommunicator):
         ]
 
 
-class NullMCOBundle(BaseMCOBundle):
-    id = bundle_id("enthought", "null_mco")
+class NullMCOFactory(BaseMCOFactory):
+    id = factory_id("enthought", "null_mco")
 
     def create_model(self, model_data=None):
         return NullMCOModel(self, **model_data)
@@ -114,8 +114,8 @@ class OneValueKPICalculator(BaseKPICalculator):
         return (), (Slot(), )
 
 
-class NullKPICalculatorBundle(BaseKPICalculatorBundle):
-    id = bundle_id("enthought", "null_kpic")
+class NullKPICalculatorFactory(BaseKPICalculatorFactory):
+    id = factory_id("enthought", "null_kpic")
     name = "null_kpic"
 
     def create_model(self, model_data=None):
@@ -159,8 +159,8 @@ class OneValueDataSource(BaseDataSource):
         )
 
 
-class NullDataSourceBundle(BaseDataSourceBundle):
-    id = bundle_id("enthought", "null_ds")
+class NullDataSourceFactory(BaseDataSourceFactory):
+    id = factory_id("enthought", "null_ds")
     name = "null_ds"
 
     def create_model(self, model_data=None):
@@ -170,29 +170,29 @@ class NullDataSourceBundle(BaseDataSourceBundle):
         return NullDataSource(self)
 
 
-class DummyBundleRegistryPlugin(BundleRegistryPlugin):
-    mco_bundles = List()
-    kpi_calculator_bundles = List()
-    data_source_bundles = List()
+class DummyFactoryRegistryPlugin(FactoryRegistryPlugin):
+    mco_factories = List()
+    kpi_calculator_factories = List()
+    data_source_factories = List()
 
 
-def mock_bundle_registry_plugin():
-    bundle_registry_plugin = DummyBundleRegistryPlugin()
-    bundle_registry_plugin.mco_bundles = [
-        NullMCOBundle(bundle_registry_plugin)]
-    bundle_registry_plugin.kpi_calculator_bundles = [
-        NullKPICalculatorBundle(bundle_registry_plugin)]
-    bundle_registry_plugin.data_source_bundles = [
-        NullDataSourceBundle(bundle_registry_plugin)]
-    return bundle_registry_plugin
+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)]
+    return factory_registry_plugin
 
 
 class TestCoreEvaluationDriver(unittest.TestCase):
     def setUp(self):
-        self.mock_bundle_registry_plugin = mock_bundle_registry_plugin()
+        self.mock_factory_registry_plugin = mock_factory_registry_plugin()
         application = mock.Mock(spec=Application)
         application.get_plugin = mock.Mock(
-            return_value=self.mock_bundle_registry_plugin
+            return_value=self.mock_factory_registry_plugin
         )
         application.workflow_filepath = fixtures.get("test_null.json")
         self.mock_application = application
@@ -204,11 +204,11 @@ class TestCoreEvaluationDriver(unittest.TestCase):
         driver.application_started()
 
     def test_error_for_non_matching_mco_parameters(self):
-        bundle = self.mock_bundle_registry_plugin.mco_bundles[0]
-        with mock.patch.object(bundle.__class__,
+        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(
-                bundle)
+                factory)
             driver = CoreEvaluationDriver(
                 application=self.mock_application,
             )
@@ -218,10 +218,10 @@ class TestCoreEvaluationDriver(unittest.TestCase):
                 driver.application_started()
 
     def test_error_for_incorrect_output_slots(self):
-        bundle = self.mock_bundle_registry_plugin.data_source_bundles[0]
-        with mock.patch.object(bundle.__class__,
+        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(bundle)
+            create_ds.return_value = BrokenOneValueDataSource(factory)
             driver = CoreEvaluationDriver(
                 application=self.mock_application,
             )
@@ -233,10 +233,10 @@ class TestCoreEvaluationDriver(unittest.TestCase):
                 driver.application_started()
 
     def test_error_for_missing_ds_output_names(self):
-        bundle = self.mock_bundle_registry_plugin.data_source_bundles[0]
-        with mock.patch.object(bundle.__class__,
+        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(bundle)
+            create_ds.return_value = OneValueDataSource(factory)
             driver = CoreEvaluationDriver(
                 application=self.mock_application,
             )
@@ -248,10 +248,10 @@ class TestCoreEvaluationDriver(unittest.TestCase):
                 driver.application_started()
 
     def test_error_for_incorrect_kpic_output_slots(self):
-        bundle = self.mock_bundle_registry_plugin.kpi_calculator_bundles[0]
-        with mock.patch.object(bundle.__class__,
+        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(bundle)
+            create_kpic.return_value = BrokenOneValueKPICalculator(factory)
             driver = CoreEvaluationDriver(
                 application=self.mock_application,
             )
@@ -263,10 +263,10 @@ class TestCoreEvaluationDriver(unittest.TestCase):
                 driver.application_started()
 
     def test_error_for_missing_kpic_output_names(self):
-        bundle = self.mock_bundle_registry_plugin.kpi_calculator_bundles[0]
-        with mock.patch.object(bundle.__class__,
+        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(bundle)
+            create_kpic.return_value = OneValueKPICalculator(factory)
             driver = CoreEvaluationDriver(
                 application=self.mock_application,
             )
diff --git a/force_bdss/tests/test_factory_registry_plugin.py b/force_bdss/tests/test_factory_registry_plugin.py
new file mode 100644
index 0000000000000000000000000000000000000000..1d001d7fe7a507c258a26180972dd500866d3cd2
--- /dev/null
+++ b/force_bdss/tests/test_factory_registry_plugin.py
@@ -0,0 +1,119 @@
+import unittest
+
+from force_bdss.base_extension_plugin import (
+    BaseExtensionPlugin)
+from force_bdss.ids import factory_id, mco_parameter_id
+from force_bdss.mco.parameters.base_mco_parameter_factory import \
+    BaseMCOParameterFactory
+
+try:
+    import mock
+except ImportError:
+    from unittest import mock
+
+from envisage.application import Application
+
+from force_bdss.factory_registry_plugin import FactoryRegistryPlugin
+from force_bdss.data_sources.i_data_source_factory import IDataSourceFactory
+from force_bdss.kpi.i_kpi_calculator_factory import IKPICalculatorFactory
+from force_bdss.mco.i_mco_factory import \
+    IMCOFactory
+
+
+class TestFactoryRegistry(unittest.TestCase):
+    def setUp(self):
+        self.plugin = FactoryRegistryPlugin()
+        self.app = Application([self.plugin])
+        self.app.start()
+        self.app.stop()
+
+    def test_initialization(self):
+        self.assertEqual(self.plugin.mco_factories, [])
+        self.assertEqual(self.plugin.data_source_factories, [])
+        self.assertEqual(self.plugin.kpi_calculator_factories, [])
+
+
+class MySuperPlugin(BaseExtensionPlugin):
+    def _mco_factories_default(self):
+        return [
+            mock.Mock(
+                spec=IMCOFactory,
+                id=factory_id("enthought", "mco1"),
+                parameter_factories=mock.Mock(return_value=[
+                    mock.Mock(
+                        spec=BaseMCOParameterFactory,
+                        id=mco_parameter_id("enthought", "mco1", "ranged")
+                    )
+                ]),
+            )]
+
+    def _data_source_factories_default(self):
+        return [mock.Mock(spec=IDataSourceFactory,
+                          id=factory_id("enthought", "ds1")),
+                mock.Mock(spec=IDataSourceFactory,
+                          id=factory_id("enthought", "ds2"))]
+
+    def _kpi_calculator_factories_default(self):
+        return [mock.Mock(spec=IKPICalculatorFactory,
+                          id=factory_id("enthought", "kpi1")),
+                mock.Mock(spec=IKPICalculatorFactory,
+                          id=factory_id("enthought", "kpi2")),
+                mock.Mock(spec=IKPICalculatorFactory,
+                          id=factory_id("enthought", "kpi3"))]
+
+
+class TestFactoryRegistryWithContent(unittest.TestCase):
+    def setUp(self):
+        self.plugin = FactoryRegistryPlugin()
+        self.app = Application([self.plugin, MySuperPlugin()])
+        self.app.start()
+        self.app.stop()
+
+    def test_initialization(self):
+        self.assertEqual(len(self.plugin.mco_factories), 1)
+        self.assertEqual(len(self.plugin.data_source_factories), 2)
+        self.assertEqual(len(self.plugin.kpi_calculator_factories), 3)
+
+    def test_lookup(self):
+        mco_id = factory_id("enthought", "mco1")
+        parameter_id = mco_parameter_id("enthought", "mco1", "ranged")
+        self.assertEqual(self.plugin.mco_factory_by_id(mco_id).id, mco_id)
+        self.plugin.mco_parameter_factory_by_id(mco_id, parameter_id)
+
+        for entry in ["ds1", "ds2"]:
+            id = factory_id("enthought", entry)
+            self.assertEqual(self.plugin.data_source_factory_by_id(id).id, id)
+
+        for entry in ["kpi1", "kpi2", "kpi3"]:
+            id = factory_id("enthought", entry)
+            self.assertEqual(self.plugin.kpi_calculator_factory_by_id(id).id,
+                             id)
+
+        with self.assertRaises(KeyError):
+            self.plugin.mco_factory_by_id(
+                factory_id("enthought", "foo"))
+
+        with self.assertRaises(KeyError):
+            self.plugin.mco_parameter_factory_by_id(
+                mco_id,
+                mco_parameter_id("enthought", "mco1", "foo")
+            )
+
+        with self.assertRaises(KeyError):
+            self.plugin.data_source_factory_by_id(
+                factory_id("enthought", "foo")
+            )
+
+        with self.assertRaises(KeyError):
+            self.plugin.data_source_factory_by_id(
+                factory_id("enthought", "foo")
+            )
+
+        with self.assertRaises(KeyError):
+            self.plugin.kpi_calculator_factory_by_id(
+                factory_id("enthought", "foo")
+            )
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/force_bdss/tests/test_ids.py b/force_bdss/tests/test_ids.py
index e8dbbb74a2fa4b2fc927786ab908590f24d54495..0fbffcab26649d28a4bfc95ab47977399666ec41 100644
--- a/force_bdss/tests/test_ids.py
+++ b/force_bdss/tests/test_ids.py
@@ -1,18 +1,18 @@
 import unittest
 
-from force_bdss.ids import bundle_id, plugin_id
+from force_bdss.ids import factory_id, plugin_id
 
 
 class TestIdGenerators(unittest.TestCase):
-    def test_bundle_id(self):
-        self.assertEqual(bundle_id("foo", "bar"),
-                         "force.bdss.foo.bundle.bar")
+    def test_factory_id(self):
+        self.assertEqual(factory_id("foo", "bar"),
+                         "force.bdss.foo.factory.bar")
 
         for bad_entry in ["", None, "   ", "foo bar"]:
             with self.assertRaises(ValueError):
-                bundle_id(bad_entry, "bar")
+                factory_id(bad_entry, "bar")
             with self.assertRaises(ValueError):
-                bundle_id("foo", bad_entry)
+                factory_id("foo", bad_entry)
 
     def test_plugin_id(self):
         self.assertEqual(plugin_id("foo", "bar"), "force.bdss.foo.plugin.bar")