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..d5cf1f62724edb7b2a633a6b25ec0aa03ee2f19b 100644
--- a/force_bdss/base_core_driver.py
+++ b/force_bdss/base_core_driver.py
@@ -2,8 +2,8 @@ from envisage.plugin import Plugin
 from traits.trait_types import Instance
 
 from .core.workflow import Workflow
-from .bundle_registry_plugin import (
-    BundleRegistryPlugin,
+from .factory_registry_plugin import (
+    FactoryRegistryPlugin,
     BUNDLE_REGISTRY_PLUGIN_ID
 )
 from .io.workflow_reader import WorkflowReader
@@ -15,7 +15,7 @@ class BaseCoreDriver(Plugin):
     """
 
     #: The registry of the bundles.
-    bundle_registry = Instance(BundleRegistryPlugin)
+    bundle_registry = Instance(FactoryRegistryPlugin)
 
     #: Deserialized content of the workflow file.
     workflow = Instance(Workflow)
diff --git a/force_bdss/base_extension_plugin.py b/force_bdss/base_extension_plugin.py
index 4a9915b0b5fa395d5cefbb742b26a9cc4943a9f1..be11411ef64a0a9c56455e65ab756bf9a766e320 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):
@@ -24,18 +24,18 @@ class BaseExtensionPlugin(Plugin):
 
     #: A list of available Multi Criteria Optimizers this plugin exports.
     mco_bundles = List(
-        IMCOBundle,
+        IMCOFactory,
         contributes_to=ExtensionPointID.MCO_BUNDLES
     )
 
     #: A list of the available Data Sources this plugin exports.
     data_source_bundles = List(
-        IDataSourceBundle,
+        IDataSourceFactory,
         contributes_to=ExtensionPointID.DATA_SOURCE_BUNDLES
     )
 
     #: A list of the available KPI calculators this plugin exports.
     kpi_calculator_bundles = List(
-        IKPICalculatorBundle,
+        IKPICalculatorFactory,
         contributes_to=ExtensionPointID.KPI_CALCULATOR_BUNDLES
     )
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_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_bundle.py b/force_bdss/core_plugins/dummy/csv_extractor/tests/test_csv_extractor_bundle.py
index b5a563f889a698c349918bccd5b38f30dd445a20..ffba0b4c8bd85ccf1e238cbd99b787aec7afc4ce 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_bundle.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 TestCSVExtractorBundle(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/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/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_bundle.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_bundle.py
index 673fdd05f3fbf5da8fb436484d334cdac483e497..baa84047ae357929345abbb046a9211bbd4882c8 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_bundle.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 \
@@ -20,12 +20,12 @@ class TestDakotaBundle(unittest.TestCase):
         self.plugin = mock.Mock(spec=Plugin)
 
     def test_initialization(self):
-        bundle = DummyDakotaBundle(self.plugin)
+        bundle = DummyDakotaFactory(self.plugin)
         self.assertIn("dummy_dakota", bundle.id)
         self.assertEqual(bundle.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = DummyDakotaBundle(self.plugin)
+        bundle = DummyDakotaFactory(self.plugin)
         model = bundle.create_model({})
         self.assertIsInstance(model, DummyDakotaModel)
 
@@ -33,15 +33,15 @@ class TestDakotaBundle(unittest.TestCase):
         self.assertIsInstance(model, DummyDakotaModel)
 
     def test_create_mco(self):
-        bundle = DummyDakotaBundle(self.plugin)
+        bundle = DummyDakotaFactory(self.plugin)
         ds = bundle.create_optimizer()
         self.assertIsInstance(ds, DummyDakotaOptimizer)
 
     def test_create_communicator(self):
-        bundle = DummyDakotaBundle(self.plugin)
+        bundle = DummyDakotaFactory(self.plugin)
         ds = bundle.create_optimizer()
         self.assertIsInstance(ds, DummyDakotaOptimizer)
 
     def test_parameter_factories(self):
-        bundle = DummyDakotaBundle(self.plugin)
+        bundle = DummyDakotaFactory(self.plugin)
         self.assertNotEqual(len(bundle.parameter_factories()), 0)
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..90420b5d0a2e24aeb818351ef57a85422f7de272 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,7 +20,7 @@ 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))
+        bundle = DummyDakotaFactory(mock.Mock(spec=Plugin))
         mock_parameter_factory = mock.Mock(spec=BaseMCOParameterFactory)
         model = bundle.create_model()
         model.parameters = [
@@ -38,7 +38,7 @@ class TestDakotaCommunicator(unittest.TestCase):
             self.assertEqual(data[0].type, "")
 
     def test_send_to_mco(self):
-        bundle = DummyDakotaBundle(mock.Mock(spec=Plugin))
+        bundle = DummyDakotaFactory(mock.Mock(spec=Plugin))
         model = bundle.create_model()
         comm = bundle.create_communicator()
 
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..65e0cce69bd33e5f31614fe5b2a1e4fc00a950e9 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,14 +20,14 @@ 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 = mock.Mock(spec=BaseMCOFactory)
         self.bundle.plugin = mock.Mock()
         self.bundle.plugin.application = mock.Mock()
         self.bundle.plugin.application.workflow_filepath = "whatever"
 
     def test_initialization(self):
         opt = DummyDakotaOptimizer(self.bundle)
-        self.assertEqual(opt.bundle, self.bundle)
+        self.assertEqual(opt.factory, self.bundle)
 
     def test_run(self):
         opt = DummyDakotaOptimizer(self.bundle)
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_bundle.py
index 617c4edfd73c77c2144f30e04d4473a0eadd4a22..ad3cc3397728fddf3a729e0b8faf9f6c698f4fe6 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_bundle.py
@@ -3,17 +3,17 @@ 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 TestDummyDataSourceBundle(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..cf9e96df1da03ca0bb4b7ddab9849861d490d017 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,14 +8,14 @@ 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)
+        bundle = mock.Mock(spec=DummyKPICalculatorFactory)
         kpic = DummyKPICalculator(bundle)
         model = DummyKPICalculatorModel(bundle)
         input_ = []
@@ -23,7 +23,7 @@ class TestDummyKPICalculator(unittest.TestCase):
         self.assertEqual(input_, output)
 
     def test_slots(self):
-        bundle = mock.Mock(spec=DummyKPICalculatorBundle)
+        bundle = mock.Mock(spec=DummyKPICalculatorFactory)
         kpic = DummyKPICalculator(bundle)
         model = DummyKPICalculatorModel(bundle)
         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_bundle.py
index 5fd0dc9d6d9d5a1f179c79ff538802e8f61043d8..78a15ebc99b6ffffe66ef8a68c4742f66a875e1e 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_bundle.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):
+        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..903e9616b3b536dac86415d8f6c469a4dfdd5e5f 100644
--- a/force_bdss/core_plugins/dummy/dummy_plugin.py
+++ b/force_bdss/core_plugins/dummy/dummy_plugin.py
@@ -1,10 +1,10 @@
 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
 )
 
 
@@ -12,12 +12,12 @@ class DummyPlugin(BaseExtensionPlugin):
     id = plugin_id("enthought", "DummyPlugin")
 
     def _data_source_bundles_default(self):
-        return [DummyDataSourceBundle(self),
-                CSVExtractorBundle(self)]
+        return [DummyDataSourceFactory(self),
+                CSVExtractorFactory(self)]
 
     def _mco_bundles_default(self):
-        return [DummyDakotaBundle(self)]
+        return [DummyDakotaFactory(self)]
 
     def _kpi_calculator_bundles_default(self):
-        return [DummyKPICalculatorBundle(self),
-                KPIAdderBundle(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_bundle.py b/force_bdss/core_plugins/dummy/kpi_adder/tests/test_kpi_adder_bundle.py
index a71462d78f9427b6a71a08757d93fd06fc4b7369..42ac211a5f9c0b66aab45dc4e5d0a23bd235e6c9 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_bundle.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):
+        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/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/tests/data_source_bundle_test_mixin.py b/force_bdss/core_plugins/dummy/tests/data_source_factory_test_mixin.py
similarity index 78%
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..c37d2083b041573c83116c90197a767a551cabbe 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,12 +26,12 @@ class DataSourceBundleTestMixin(object):
         raise NotImplementedError()
 
     def test_initialization(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         self.assertNotEqual(bundle.id, "")
         self.assertEqual(bundle.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         model = bundle.create_model({})
         self.assertIsInstance(model, self.model_class)
 
@@ -39,6 +39,6 @@ class DataSourceBundleTestMixin(object):
         self.assertIsInstance(model, self.model_class)
 
     def test_create_data_source(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         ds = bundle.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 76%
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..8f6208f962d810ea8bcda47c15e154570cb9556a 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,12 +24,12 @@ class KPICalculatorBundleTestMixin(object):
         raise NotImplementedError()
 
     def test_initialization(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         self.assertNotEqual(bundle.id, "")
         self.assertEqual(bundle.plugin, self.plugin)
 
     def test_create_model(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         model = bundle.create_model({})
         self.assertIsInstance(model, self.model_class)
 
@@ -37,6 +37,6 @@ class KPICalculatorBundleTestMixin(object):
         self.assertIsInstance(model, self.model_class)
 
     def test_create_kpi_calculator(self):
-        bundle = self.bundle_class(self.plugin)
+        bundle = self.factory_class(self.plugin)
         ds = bundle.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..2accf3264cdb5d7894b0a5bc8ac194f03083a196 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,7 +16,7 @@ from force_bdss.core_plugins.dummy.dummy_plugin import DummyPlugin
 from force_bdss.tests import fixtures
 
 
-class DummyBundleRegistryPlugin(BundleRegistryPlugin):
+class DummyBundleRegistryPlugin(FactoryRegistryPlugin):
     mco_bundles = List()
     kpi_calculator_bundles = List()
     data_source_bundles = List()
diff --git a/force_bdss/data_sources/base_data_source.py b/force_bdss/data_sources/base_data_source.py
index be9fb39f4f338fb5cca32664ac3a4970596d0f4b..0c7d487f6a73ef607aa5c9702f3da54e86a78b10 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):
@@ -11,10 +11,10 @@ class BaseDataSource(ABCHasStrictTraits):
     Inherit from this class for your specific DataSource.
     """
     #: A reference to the bundle
-    bundle = Instance(IDataSourceBundle)
+    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 88%
rename from force_bdss/data_sources/base_data_source_bundle.py
rename to force_bdss/data_sources/base_data_source_factory.py
index 585e31b0b4e1f553dda42a469c4c24ebdf27662a..ed98aa1d46a15ae99c258b0629901fac5e95dbf2 100644
--- a/force_bdss/data_sources/base_data_source_bundle.py
+++ b/force_bdss/data_sources/base_data_source_factory.py
@@ -2,11 +2,11 @@ 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):
+@provides(IDataSourceFactory)
+class BaseDataSourceFactory(ABCHasStrictTraits):
     """Base class for DataSource bundles. Reimplement this class to
     create your own DataSource.
     """
@@ -24,7 +24,7 @@ class BaseDataSourceBundle(ABCHasStrictTraits):
 
     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):
diff --git a/force_bdss/data_sources/base_data_source_model.py b/force_bdss/data_sources/base_data_source_model.py
index 2326075deff38378a0aa868cb465cb7a2ef4db21..eb5ee77a1e94eb5fa14ad26a28a53577d805df62 100644
--- a/force_bdss/data_sources/base_data_source_model.py
+++ b/force_bdss/data_sources/base_data_source_model.py
@@ -1,7 +1,7 @@
 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):
@@ -14,7 +14,7 @@ class BaseDataSourceModel(ABCHasStrictTraits):
     """
     #: A reference to the creating bundle, 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
index b6994236760f5e9944f6d37e8c3c5e6a28627733..3c0a5e1b8e1450f7905a7b464dc492844f525273 100644
--- a/force_bdss/data_sources/tests/test_base_data_source_bundle.py
+++ b/force_bdss/data_sources/tests/test_base_data_source_bundle.py
@@ -5,11 +5,11 @@ except ImportError:
     from unittest import mock
 
 from envisage.plugin import Plugin
-from force_bdss.data_sources.base_data_source_bundle import \
-    BaseDataSourceBundle
+from force_bdss.data_sources.base_data_source_factory import \
+    BaseDataSourceFactory
 
 
-class DummyDataSourceBundle(BaseDataSourceBundle):
+class DummyDataSourceBundle(BaseDataSourceFactory):
     id = "foo"
 
     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 92%
rename from force_bdss/bundle_registry_plugin.py
rename to force_bdss/factory_registry_plugin.py
index 44e7d4808f6e58429dc1efa566b90d3fd0afa90e..60b4b23be48647a823d8a29b289c2cdcb05d83be 100644
--- a/force_bdss/bundle_registry_plugin.py
+++ b/force_bdss/factory_registry_plugin.py
@@ -3,18 +3,18 @@ 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"
 
 
-class BundleRegistryPlugin(Plugin):
+class FactoryRegistryPlugin(Plugin):
     """Main plugin that handles the execution of the MCO
     or the evaluation.
     """
@@ -28,19 +28,19 @@ class BundleRegistryPlugin(Plugin):
     #: A List of the available Multi Criteria Optimizers.
     #: This will be populated by MCO plugins.
     mco_bundles = ExtensionPoint(
-        List(IMCOBundle),
+        List(IMCOFactory),
         id=ExtensionPointID.MCO_BUNDLES)
 
     #: A list of the available Data Sources.
     #: It will be populated by plugins.
     data_source_bundles = ExtensionPoint(
-        List(IDataSourceBundle),
+        List(IDataSourceFactory),
         id=ExtensionPointID.DATA_SOURCE_BUNDLES)
 
     #: A list of the available Key Performance Indicator calculators.
     #: It will be populated by plugins.
     kpi_calculator_bundles = ExtensionPoint(
-        List(IKPICalculatorBundle),
+        List(IKPICalculatorFactory),
         id=ExtensionPointID.KPI_CALCULATOR_BUNDLES)
 
     def data_source_bundle_by_id(self, id):
diff --git a/force_bdss/ids.py b/force_bdss/ids.py
index 4e5c4144566323d7e93e9f5b65592358bbf0ab16..3c999d8cccf2f3c16ede279361142e9812ca3054 100644
--- a/force_bdss/ids.py
+++ b/force_bdss/ids.py
@@ -14,7 +14,7 @@ class ExtensionPointID:
     KPI_CALCULATOR_BUNDLES = 'force.bdss.kpi_calculator.bundles'
 
 
-def bundle_id(producer, identifier):
+def factory_id(producer, identifier):
     """Creates an id for the bundle.
 
     Parameters
diff --git a/force_bdss/io/tests/test_workflow_reader.py b/force_bdss/io/tests/test_workflow_reader.py
index 9119702953768f065117f69df99ac039981f03e4..1e1eebf59d971864659ec30ecd850c91ec503cfb 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,12 +15,12 @@ except ImportError:
 
 class TestWorkflowReader(unittest.TestCase):
     def setUp(self):
-        self.mock_bundle_registry = mock.Mock(spec=BundleRegistryPlugin)
+        self.mock_bundle_registry = mock.Mock(spec=FactoryRegistryPlugin)
 
         self.wfreader = WorkflowReader(self.mock_bundle_registry)
 
     def test_initialization(self):
-        self.assertEqual(self.wfreader.bundle_registry,
+        self.assertEqual(self.wfreader.factory_registry,
                          self.mock_bundle_registry)
 
     def test_invalid_version(self):
diff --git a/force_bdss/io/tests/test_workflow_writer.py b/force_bdss/io/tests/test_workflow_writer.py
index 0dc1397d8c0a4c0dcbaf4df7c91cccac22b02a46..16cf15a342b78d2377e4c0cbc6e884f08d675085 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)
+            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..dde02891ce5125f181864d8b31561b8a0e619696 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,9 +23,9 @@ 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,
@@ -35,11 +35,11 @@ class WorkflowReader(HasStrictTraits):
 
         Parameters
         ----------
-        bundle_registry: BundleRegistryPlugin
+        bundle_registry: FactoryRegistryPlugin
             The bundle registry that provides lookup services
             for a bundle identified by a given id.
         """
-        self.bundle_registry = bundle_registry
+        self.factory_registry = bundle_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_bundle_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_bundle_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_bundle_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..110d9771ea21cd514aef8460a058c17e10138686 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):
@@ -11,10 +11,10 @@ class BaseKPICalculator(ABCHasStrictTraits):
     Inherit this class for your KPI calculator.
     """
     #: A reference to the bundle
-    bundle = Instance(IKPICalculatorBundle)
+    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 79%
rename from force_bdss/kpi/base_kpi_calculator_bundle.py
rename to force_bdss/kpi/base_kpi_calculator_factory.py
index 44e934fbcd4f360d7f48ca938cc7650aac67f5f6..57f3e0279c08b98ec6931230c2e4bbeb0baad75f 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):
+@provides(IKPICalculatorFactory)
+class BaseKPICalculatorFactory(ABCHasStrictTraits):
     """Base class for the Key Performance Indicator calculator bundles.
     Inherit from this class to create a bundle, 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):
@@ -32,7 +32,7 @@ class BaseKPICalculatorBundle(ABCHasStrictTraits):
             The plugin that holds this bundle.
         """
         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..ffe6aa06210844f118cef03e73ef465f76cc4c5f 100644
--- a/force_bdss/kpi/base_kpi_calculator_model.py
+++ b/force_bdss/kpi/base_kpi_calculator_model.py
@@ -1,7 +1,7 @@
 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):
@@ -14,7 +14,7 @@ class BaseKPICalculatorModel(ABCHasStrictTraits):
     """
     #: A reference to the creating bundle, 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
@@ -26,7 +26,7 @@ class BaseKPICalculatorModel(ABCHasStrictTraits):
     output_slot_names = List(String())
 
     def __init__(self, bundle, *args, **kwargs):
-        self.bundle = bundle
+        self.factory = bundle
         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..35fd17805bdbc15a4534e2fc011d0ffe15fbe3d3 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)
+        bundle = mock.Mock(spec=IKPICalculatorFactory)
         kpic = DummyKPICalculator(bundle)
 
-        self.assertEqual(kpic.bundle, bundle)
+        self.assertEqual(kpic.factory, bundle)
diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py b/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py
index f3cc87d981890778075ebd95057e3c09ae5c49dd..61f1970aaac963a4f69e3db168882f7a08a58664 100644
--- a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py
+++ b/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py
@@ -6,11 +6,11 @@ try:
 except ImportError:
     from unittest import mock
 
-from force_bdss.kpi.base_kpi_calculator_bundle import \
-    BaseKPICalculatorBundle
+from force_bdss.kpi.base_kpi_calculator_factory import \
+    BaseKPICalculatorFactory
 
 
-class DummyKPICalculatorBundle(BaseKPICalculatorBundle):
+class DummyKPICalculatorBundle(BaseKPICalculatorFactory):
     id = "foo"
 
     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..9c50c1c02f2a24cd5942b2a586732cc6295415cd 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):
@@ -11,17 +11,17 @@ class BaseMCO(ABCHasStrictTraits):
     Inherit this class for your MCO implementation
     """
     #: A reference to the bundle
-    bundle = Instance(IMCOBundle)
+    factory = Instance(IMCOFactory)
 
-    def __init__(self, bundle, *args, **kwargs):
+    def __init__(self, factory, *args, **kwargs):
         """Initializes the MCO.
 
         Parameters
         ----------
-        bundle: BaseMCOBundle
+        factory: BaseMCOBundle
             The bundle 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..830e9986671994066c53b5f28f629224c523236d 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):
@@ -17,7 +17,7 @@ class BaseMCOCommunicator(ABCHasStrictTraits):
     again specified by the MCO.
     """
     #: A reference to the bundle
-    bundle = Instance(IMCOBundle)
+    bundle = Instance(IMCOFactory)
 
     def __init__(self, bundle):
         self.bundle = bundle
diff --git a/force_bdss/mco/base_mco_bundle.py b/force_bdss/mco/base_mco_factory.py
similarity index 92%
rename from force_bdss/mco/base_mco_bundle.py
rename to force_bdss/mco/base_mco_factory.py
index c8e0d6d730918507ac25c7faeedf37b17ce7df03..a2703039440d158611b7a25029b1a67f80e61c08 100644
--- a/force_bdss/mco/base_mco_bundle.py
+++ b/force_bdss/mco/base_mco_factory.py
@@ -3,11 +3,11 @@ 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):
+@provides(IMCOFactory)
+class BaseMCOFactory(ABCHasStrictTraits):
     """Base class for the MultiCriteria Optimizer bundle.
     """
     # NOTE: any changes to the interface of this class must be replicated
@@ -24,7 +24,7 @@ class BaseMCOBundle(ABCHasStrictTraits):
 
     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..896f484f2c1df81fc41f41876552cb687a0bba22 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
     #: 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 94%
rename from force_bdss/mco/i_mco_bundle.py
rename to force_bdss/mco/i_mco_factory.py
index 8c6afcef40dc23c4d8ca1a1f7169a22f52752ba6..f3491e69d32ace4ccf76ccf865487bbddb1721e5 100644
--- a/force_bdss/mco/i_mco_bundle.py
+++ b/force_bdss/mco/i_mco_factory.py
@@ -2,7 +2,7 @@ from traits.api import Interface, String, Instance
 from envisage.plugin import Plugin
 
 
-class IMCOBundle(Interface):
+class IMCOFactory(Interface):
     """Interface for the BaseMCOBundle.
     You should not need it, as its main use is for envisage support.
 
diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py
index efaa70c9ef13884a486e29b9683139f7664566cc..cda303e96e54b6b4ce3c7fe7969dee5e8f62353a 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):
@@ -13,7 +13,7 @@ class BaseMCOParameterFactory(HasStrictTraits):
     """
 
     #: A reference to the bundle this parameter factory lives in.
-    bundle = Instance(BaseMCOBundle)
+    bundle = Instance(BaseMCOFactory)
 
     #: A unique string identifying the parameter
     id = String()
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..2fc002ff62006b653711f840d78d657483239dcd 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)
+        bundle = mock.Mock(spec=IMCOFactory)
         mco = DummyMCO(bundle)
 
-        self.assertEqual(mco.bundle, bundle)
+        self.assertEqual(mco.factory, bundle)
diff --git a/force_bdss/mco/tests/test_base_mco_bundle.py b/force_bdss/mco/tests/test_base_mco_bundle.py
index d5dfddce43b13b444e85ba9ba790654ab781b5a6..9d2b3a5ebbf095d3e9a11284b1ab986cb9bdfbd0 100644
--- a/force_bdss/mco/tests/test_base_mco_bundle.py
+++ b/force_bdss/mco/tests/test_base_mco_bundle.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 DummyMCOBundle(BaseMCOFactory):
     id = "foo"
 
     name = "bar"
diff --git a/force_bdss/mco/tests/test_base_mco_communicator.py b/force_bdss/mco/tests/test_base_mco_communicator.py
index 5769444dba7d6884a337f25a4d49dece4c20b0eb..c70905d45f056e703f5fa65c3d8fb2fea47e734f 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)
+        bundle = mock.Mock(spec=IMCOFactory)
         mcocomm = DummyMCOCommunicator(bundle)
 
         self.assertEqual(mcocomm.bundle, bundle)
diff --git a/force_bdss/tests/test_bundle_registry_plugin.py b/force_bdss/tests/test_bundle_registry_plugin.py
index 3050087502e47b1424db5ab2ba19788c57c9f176..1cc889c8a0145de5b9374e1e27121ff13d0d7bb9 100644
--- a/force_bdss/tests/test_bundle_registry_plugin.py
+++ b/force_bdss/tests/test_bundle_registry_plugin.py
@@ -2,7 +2,7 @@ import unittest
 
 from force_bdss.base_extension_plugin import (
     BaseExtensionPlugin)
-from force_bdss.ids import bundle_id, mco_parameter_id
+from force_bdss.ids import factory_id, mco_parameter_id
 from force_bdss.mco.parameters.base_mco_parameter_factory import \
     BaseMCOParameterFactory
 
@@ -13,16 +13,16 @@ except ImportError:
 
 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
+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 TestBundleRegistry(unittest.TestCase):
     def setUp(self):
-        self.plugin = BundleRegistryPlugin()
+        self.plugin = FactoryRegistryPlugin()
         self.app = Application([self.plugin])
         self.app.start()
         self.app.stop()
@@ -37,8 +37,8 @@ class MySuperPlugin(BaseExtensionPlugin):
     def _mco_bundles_default(self):
         return [
             mock.Mock(
-                spec=IMCOBundle,
-                id=bundle_id("enthought", "mco1"),
+                spec=IMCOFactory,
+                id=factory_id("enthought", "mco1"),
                 parameter_factories=mock.Mock(return_value=[
                     mock.Mock(
                         spec=BaseMCOParameterFactory,
@@ -48,23 +48,23 @@ class MySuperPlugin(BaseExtensionPlugin):
             )]
 
     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"))]
+        return [mock.Mock(spec=IDataSourceFactory,
+                          id=factory_id("enthought", "ds1")),
+                mock.Mock(spec=IDataSourceFactory,
+                          id=factory_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"))]
+        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 TestBundleRegistryWithContent(unittest.TestCase):
     def setUp(self):
-        self.plugin = BundleRegistryPlugin()
+        self.plugin = FactoryRegistryPlugin()
         self.app = Application([self.plugin, MySuperPlugin()])
         self.app.start()
         self.app.stop()
@@ -75,23 +75,23 @@ class TestBundleRegistryWithContent(unittest.TestCase):
         self.assertEqual(len(self.plugin.kpi_calculator_bundles), 3)
 
     def test_lookup(self):
-        mco_id = bundle_id("enthought", "mco1")
+        mco_id = factory_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)
+            id = factory_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)
+            id = factory_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"))
+                factory_id("enthought", "foo"))
 
         with self.assertRaises(KeyError):
             self.plugin.mco_parameter_factory_by_id(
@@ -101,17 +101,17 @@ class TestBundleRegistryWithContent(unittest.TestCase):
 
         with self.assertRaises(KeyError):
             self.plugin.data_source_bundle_by_id(
-                bundle_id("enthought", "foo")
+                factory_id("enthought", "foo")
             )
 
         with self.assertRaises(KeyError):
             self.plugin.data_source_bundle_by_id(
-                bundle_id("enthought", "foo")
+                factory_id("enthought", "foo")
             )
 
         with self.assertRaises(KeyError):
             self.plugin.kpi_calculator_bundle_by_id(
-                bundle_id("enthought", "foo")
+                factory_id("enthought", "foo")
             )
 
 
diff --git a/force_bdss/tests/test_core_evaluation_driver.py b/force_bdss/tests/test_core_evaluation_driver.py
index 9f680fa52ac94c16226889fc215a21337273c584..2649d191903869c4c1481da33ff4ceb96278d347 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 NullDataSourceBundle(BaseDataSourceFactory):
+    id = factory_id("enthought", "null_ds")
     name = "null_ds"
 
     def create_model(self, model_data=None):
@@ -170,18 +170,18 @@ class NullDataSourceBundle(BaseDataSourceBundle):
         return NullDataSource(self)
 
 
-class DummyBundleRegistryPlugin(BundleRegistryPlugin):
+class DummyFactoryRegistryPlugin(FactoryRegistryPlugin):
     mco_bundles = List()
     kpi_calculator_bundles = List()
     data_source_bundles = List()
 
 
-def mock_bundle_registry_plugin():
-    bundle_registry_plugin = DummyBundleRegistryPlugin()
+def mock_factory_registry_plugin():
+    bundle_registry_plugin = DummyFactoryRegistryPlugin()
     bundle_registry_plugin.mco_bundles = [
-        NullMCOBundle(bundle_registry_plugin)]
+        NullMCOFactory(bundle_registry_plugin)]
     bundle_registry_plugin.kpi_calculator_bundles = [
-        NullKPICalculatorBundle(bundle_registry_plugin)]
+        NullKPICalculatorFactory(bundle_registry_plugin)]
     bundle_registry_plugin.data_source_bundles = [
         NullDataSourceBundle(bundle_registry_plugin)]
     return bundle_registry_plugin
@@ -189,7 +189,7 @@ def mock_bundle_registry_plugin():
 
 class TestCoreEvaluationDriver(unittest.TestCase):
     def setUp(self):
-        self.mock_bundle_registry_plugin = mock_bundle_registry_plugin()
+        self.mock_bundle_registry_plugin = mock_factory_registry_plugin()
         application = mock.Mock(spec=Application)
         application.get_plugin = mock.Mock(
             return_value=self.mock_bundle_registry_plugin
diff --git a/force_bdss/tests/test_ids.py b/force_bdss/tests/test_ids.py
index e8dbbb74a2fa4b2fc927786ab908590f24d54495..19c083fdf3434efe513fc6a3a7e0940915afb308 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"),
+        self.assertEqual(factory_id("foo", "bar"),
                          "force.bdss.foo.bundle.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")