diff --git a/force_bdss/data_sources/base_data_source.py b/force_bdss/data_sources/base_data_source.py
index 49c114082a4ce68b0301f31e3f31e02959c8b06e..469ed8b902cc9d237139bf6b53ef6e2a952a20e8 100644
--- a/force_bdss/data_sources/base_data_source.py
+++ b/force_bdss/data_sources/base_data_source.py
@@ -12,5 +12,8 @@ class BaseDataSource(six.with_metaclass(abc.ABCMeta)):
     def name(self):
         return self.bundle.name
 
+    @abc.abstractmethod
     def run(self):
+        """Executes the data source evaluation/fetching and returns
+        the list of results as a DataSourceResult instance."""
         pass
diff --git a/force_bdss/data_sources/data_source_result.py b/force_bdss/data_sources/data_source_result.py
new file mode 100644
index 0000000000000000000000000000000000000000..17e52fb1eca6bb140c32a09ae22e7fb3bc768048
--- /dev/null
+++ b/force_bdss/data_sources/data_source_result.py
@@ -0,0 +1,22 @@
+from traits.api import HasTraits, Array, List, String, Instance
+
+from .base_data_source import BaseDataSource
+
+
+class DataSourceResult(HasTraits):
+    """Represents the result of a simulator.
+    It contains the resulting cuba key, the associated uncertainty and the
+    originating simulator.
+    Difference between uncertainty and quality: uncertainty is a numerical value
+    of the value, as in the case of an experimental simulation.
+    quality is the level of accuracy of the (e.g.c omputational) method, as
+    the importance and reliability of that value. It should be an enumeration
+    value such as HIGH, MEDIUM, POOR"""
+
+    originator = Instance(BaseDataSource)
+    value_types = List(String)
+    results = Array(shape=(None, None))
+    accuracy = Array(shape=(None, None))
+    quality = Array(shape=(None, None))
+
+