diff --git a/force_bdss/core/base_factory.py b/force_bdss/core/base_factory.py
index e8daa730591b65ebe6cc89398cc95e59d1cd50af..f69db3f1d97c1da7848c1a40bc7895ae51ef4226 100644
--- a/force_bdss/core/base_factory.py
+++ b/force_bdss/core/base_factory.py
@@ -1,5 +1,5 @@
 from envisage.plugin import Plugin
-from traits.api import HasStrictTraits, Str, Instance
+from traits.api import HasStrictTraits, Str, Unicode, Instance
 
 from force_bdss.ids import factory_id
 
@@ -12,6 +12,9 @@ class BaseFactory(HasStrictTraits):
     #: A human readable name of the factory. Spaces allowed
     name = Str()
 
+    #: A long description of the factory.
+    description = Unicode()
+
     #: Reference to the plugin that carries this factory
     #: This is automatically set by the system. you should not define it
     #: in your subclass.
@@ -21,6 +24,7 @@ class BaseFactory(HasStrictTraits):
         super(BaseFactory, self).__init__(plugin=plugin, *args, **kwargs)
 
         self.name = self.get_name()
+        self.description = self.get_description()
         identifier = self.get_identifier()
         try:
             id = self._global_id(identifier)
@@ -51,5 +55,8 @@ class BaseFactory(HasStrictTraits):
             "get_identifier was not implemented in factory {}".format(
                 self.__class__))
 
+    def get_description(self):
+        return u"No description available."
+
     def _global_id(self, identifier):
         return factory_id(self.plugin.id, identifier)
diff --git a/force_bdss/data_sources/tests/test_base_data_source_factory.py b/force_bdss/data_sources/tests/test_base_data_source_factory.py
index e2aa949db237b64a47a70e5ad4cd746a2642704a..8716ac78e4f0a246ae18b1f2a6d61666ca1a77b1 100644
--- a/force_bdss/data_sources/tests/test_base_data_source_factory.py
+++ b/force_bdss/data_sources/tests/test_base_data_source_factory.py
@@ -25,6 +25,7 @@ class TestBaseDataSourceFactory(unittest.TestCase):
         factory = DummyDataSourceFactory(self.plugin)
         self.assertEqual(factory.id, 'pid.factory.dummy_data_source')
         self.assertEqual(factory.name, 'Dummy data source')
+        self.assertEqual(factory.description, u"No description available.")
         self.assertEqual(factory.model_class, DummyDataSourceModel)
         self.assertEqual(factory.data_source_class, DummyDataSource)
         self.assertIsInstance(factory.create_data_source(), DummyDataSource)
diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py
index bc3a0fd078c0001f12267f426a22e363231815fa..7dfb632296d7581ef13f17fbfa9c52987723c122 100644
--- a/force_bdss/mco/parameters/base_mco_parameter_factory.py
+++ b/force_bdss/mco/parameters/base_mco_parameter_factory.py
@@ -1,4 +1,4 @@
-from traits.api import Str, Type, Instance, provides
+from traits.api import Type, Instance, provides, Unicode
 
 from force_bdss.core.base_factory import BaseFactory
 from force_bdss.ids import mco_parameter_id
@@ -20,20 +20,12 @@ class BaseMCOParameterFactory(BaseFactory):
     mco_factory = Instance('force_bdss.mco.base_mco_factory.BaseMCOFactory',
                            allow_none=False)
 
-    #: A long description of the parameter
-    description = Str()
-
     # The model class to instantiate when create_model is called.
     model_class = Type(
         "force_bdss.mco.parameters.base_mco_parameter.BaseMCOParameter",
         allow_none=False
     )
 
-    def get_description(self):
-        raise NotImplementedError(
-            "get_description was not implemented in factory {}".format(
-                self.__class__))
-
     def get_model_class(self):
         raise NotImplementedError(
             "get_model_class was not implemented in factory {}".format(
@@ -46,7 +38,6 @@ class BaseMCOParameterFactory(BaseFactory):
             *args,
             **kwargs)
 
-        self.description = self.get_description()
         self.model_class = self.get_model_class()
 
     def create_model(self, data_values=None):