diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py b/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py
index 6585312b19db9a72751d08f023b33cb0d415d6ce..d15c6c6f26390b9ad1a4c7941f1e52a5ac7ba8df 100644
--- a/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py
+++ b/force_bdss/core_plugins/dummy/dummy_dakota/parameters.py
@@ -16,7 +16,7 @@ class RangedMCOParameter(BaseMCOParameter):
 
 class RangedMCOParameterFactory(BaseMCOParameterFactory):
     """The factory of the above model"""
-    id = mco_parameter_id("enthought", "ranged")
+    id = mco_parameter_id("enthought", "dummy_dakota", "ranged")
     model_class = RangedMCOParameter
     name = "Range"
     description = "A ranged parameter in floating point values."
diff --git a/force_bdss/ids.py b/force_bdss/ids.py
index 2af5c0b5541a3132eb9010067cc9194e4b5fd165..4e5c4144566323d7e93e9f5b65592358bbf0ab16 100644
--- a/force_bdss/ids.py
+++ b/force_bdss/ids.py
@@ -29,23 +29,27 @@ def bundle_id(producer, identifier):
     -------
     str: an identifier to be used in the bundle.
     """
-    return _string_id("bundle", producer, identifier)
+    return _string_id(producer, "bundle", identifier)
 
 
-def mco_parameter_id(producer, 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("mco_parameter", producer, identifier)
+    return _string_id(producer,
+                      "bundle",
+                      mco_identifier,
+                      "parameter",
+                      parameter_identifier)
 
 
 def plugin_id(producer, identifier):
     """Creates an ID for the plugins. These must be defined, otherwise
     the envisage system will complain (but not break)
     """
-    return _string_id("plugin", producer, identifier)
+    return _string_id(producer, "plugin", identifier)
 
 
-def _string_id(entity_namespace, producer, identifier):
+def _string_id(*args):
     """Creates an id for a generic entity.
 
     Parameters
@@ -68,7 +72,8 @@ def _string_id(entity_namespace, producer, identifier):
             " " not in entry and
             len(entry) != 0)
 
-    if not all(map(is_valid, [entity_namespace, producer, identifier])):
-        raise ValueError("Invalid parameters specified.")
+    if not all(map(is_valid, args)):
+        raise ValueError("One or more of the specified parameters was "
+                         "invalid: {}".format(str(args)))
 
-    return "force.bdss.{}.{}.{}".format(entity_namespace, producer, identifier)
+    return ".".join(["force", "bdss"]+list(args))
diff --git a/force_bdss/io/tests/test_workflow_writer.py b/force_bdss/io/tests/test_workflow_writer.py
index aaaa3734279781e4cced83bb0b8f68929e26fcfc..df70880bf6cd64b44e8c274319eb1459ecc32b54 100644
--- a/force_bdss/io/tests/test_workflow_writer.py
+++ b/force_bdss/io/tests/test_workflow_writer.py
@@ -68,7 +68,7 @@ class TestWorkflowWriter(unittest.TestCase):
             BaseMCOParameter(
                 factory=mock.Mock(
                     spec=BaseMCOParameterFactory,
-                    id=mco_parameter_id("enthought", "mock")
+                    id=mco_parameter_id("enthought", "mock", "mock")
                 )
             )
         ]
diff --git a/force_bdss/tests/fixtures/test_csv.json b/force_bdss/tests/fixtures/test_csv.json
index 669ea67c685db36d30d7bbfab362340ba66cebfc..726de30843d158ec3b1aeb4afcc96e92b9ecaa5d 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.bundle.enthought.dummy_dakota",
+      "id": "force.bdss.enthought.bundle.dummy_dakota",
       "model_data": {
         "parameters" : [
           {
-            "id": "force.bdss.mco_parameter.enthought.ranged",
+            "id": "force.bdss.enthought.bundle.dummy_dakota.parameter.ranged",
             "model_data": {
                 "initial_value": 3,
                 "lower_bound": 0,
@@ -18,7 +18,7 @@
     },
     "data_sources": [
       {
-        "id": "force.bdss.bundle.enthought.csv_extractor",
+        "id": "force.bdss.enthought.bundle.csv_extractor",
         "model_data": {
           "filename": "foo.csv",
           "row": 3,
@@ -27,7 +27,7 @@
         }
       },
       {
-        "id": "force.bdss.bundle.enthought.csv_extractor",
+        "id": "force.bdss.enthought.bundle.csv_extractor",
         "model_data": {
           "filename": "foo.csv",
           "row": 3,
@@ -38,7 +38,7 @@
     ],
     "kpi_calculators": [
       {
-        "id": "force.bdss.bundle.enthought.kpi_adder",
+        "id": "force.bdss.enthought.bundle.kpi_adder",
         "model_data": {
           "cuba_type_in": "PRESSURE",
           "cuba_type_out": "TOTAL_PRESSURE"
diff --git a/force_bdss/tests/test_bundle_registry_plugin.py b/force_bdss/tests/test_bundle_registry_plugin.py
index b1ebd018d37a02a059caa713a6bfa2d82398955c..4bed99e86929befc49ec075b90ca4c3bc5636906 100644
--- a/force_bdss/tests/test_bundle_registry_plugin.py
+++ b/force_bdss/tests/test_bundle_registry_plugin.py
@@ -2,7 +2,9 @@ import unittest
 
 from force_bdss.base_extension_plugin import (
     BaseExtensionPlugin)
-from force_bdss.ids import bundle_id
+from force_bdss.ids import bundle_id, mco_parameter_id
+from force_bdss.mco.parameters.base_mco_parameter_factory import \
+    BaseMCOParameterFactory
 
 try:
     import mock
@@ -33,8 +35,17 @@ class TestBundleRegistry(unittest.TestCase):
 
 class MySuperPlugin(BaseExtensionPlugin):
     def _mco_bundles_default(self):
-        return [mock.Mock(spec=IMCOBundle,
-                          id=bundle_id("enthought", "mco1"))]
+        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,
@@ -64,8 +75,10 @@ class TestBundleRegistryWithContent(unittest.TestCase):
         self.assertEqual(len(self.plugin.kpi_calculator_bundles), 3)
 
     def test_lookup(self):
-        id = bundle_id("enthought", "mco1")
-        self.assertEqual(self.plugin.mco_bundle_by_id(id).id, id)
+        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)
diff --git a/force_bdss/tests/test_core_evaluation_driver.py b/force_bdss/tests/test_core_evaluation_driver.py
index 504ba1c8b72f526f714ec1056f0aa028dc3694d6..5be1849eba262b3460f68ad49f8e284d9bd61e77 100644
--- a/force_bdss/tests/test_core_evaluation_driver.py
+++ b/force_bdss/tests/test_core_evaluation_driver.py
@@ -44,7 +44,7 @@ class NullParameter(BaseMCOParameter):
 
 
 class NullParameterFactory(BaseMCOParameterFactory):
-    id = mco_parameter_id("enthought", "ranged")
+    id = mco_parameter_id("enthought", "dummy_dakota", "ranged")
     model_class = NullParameter
 
 
diff --git a/force_bdss/tests/test_ids.py b/force_bdss/tests/test_ids.py
index 1ebff9a8adfa40748165c75b4f467e6c4f2adb98..e8dbbb74a2fa4b2fc927786ab908590f24d54495 100644
--- a/force_bdss/tests/test_ids.py
+++ b/force_bdss/tests/test_ids.py
@@ -6,7 +6,7 @@ from force_bdss.ids import bundle_id, plugin_id
 class TestIdGenerators(unittest.TestCase):
     def test_bundle_id(self):
         self.assertEqual(bundle_id("foo", "bar"),
-                         "force.bdss.bundle.foo.bar")
+                         "force.bdss.foo.bundle.bar")
 
         for bad_entry in ["", None, "   ", "foo bar"]:
             with self.assertRaises(ValueError):
@@ -15,7 +15,7 @@ class TestIdGenerators(unittest.TestCase):
                 bundle_id("foo", bad_entry)
 
     def test_plugin_id(self):
-        self.assertEqual(plugin_id("foo", "bar"), "force.bdss.plugin.foo.bar")
+        self.assertEqual(plugin_id("foo", "bar"), "force.bdss.foo.plugin.bar")
 
         for bad_entry in ["", None, "   ", "foo bar"]:
             with self.assertRaises(ValueError):