diff --git a/force_bdss/cli/tests/fixtures/test_csv.json b/force_bdss/cli/tests/fixtures/test_csv.json
index 80437d0abf8ad92fd7d5529f3ab36fd5c614094e..b58994dba80eabeecad2fc886de0b5a377de74b4 100644
--- a/force_bdss/cli/tests/fixtures/test_csv.json
+++ b/force_bdss/cli/tests/fixtures/test_csv.json
@@ -1,4 +1,5 @@
 {
+  "version": "1",
   "multi_criteria_optimizer": {
     "id": "force.bdss.bundles.enthought.dakota",
     "model_data": {
@@ -35,4 +36,3 @@
     }
   ]
 }
-
diff --git a/force_bdss/cli/tests/fixtures/test_csv_corrupted.json b/force_bdss/cli/tests/fixtures/test_csv_corrupted.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c63c0851048d8f7bff41ecf0f8cee05f52fd120
--- /dev/null
+++ b/force_bdss/cli/tests/fixtures/test_csv_corrupted.json
@@ -0,0 +1,2 @@
+{
+}
diff --git a/force_bdss/cli/tests/fixtures/test_csv_v2.json b/force_bdss/cli/tests/fixtures/test_csv_v2.json
new file mode 100644
index 0000000000000000000000000000000000000000..a6963bba7644cf77ece55b383ec72204906d6d8b
--- /dev/null
+++ b/force_bdss/cli/tests/fixtures/test_csv_v2.json
@@ -0,0 +1,3 @@
+{
+  "version": "2"
+}
diff --git a/force_bdss/cli/tests/test_execution.py b/force_bdss/cli/tests/test_execution.py
index 3e4d28d928a9847fa8daa58aec65a4576ab2cc2c..d511f79f6f2a4b0a806b12bc50e7c02c216c237d 100644
--- a/force_bdss/cli/tests/test_execution.py
+++ b/force_bdss/cli/tests/test_execution.py
@@ -6,7 +6,7 @@ from contextlib import contextmanager
 
 @contextmanager
 def cd(dir):
-    cwd = os.curdir
+    cwd = os.getcwd()
     os.chdir(dir)
     try:
         yield
@@ -26,6 +26,17 @@ class TestExecution(unittest.TestCase):
             out = subprocess.check_call(["force_bdss", "test_csv.json"])
             self.assertEqual(out, 0)
 
+    def test_unsupported_file_input(self):
+        with cd(fixture_dir()):
+            with self.assertRaises(subprocess.CalledProcessError):
+                subprocess.check_call(["force_bdss", "test_csv_v2.json"])
+
+    def test_corrupted_file_input(self):
+        with cd(fixture_dir()):
+            with self.assertRaises(subprocess.CalledProcessError):
+                subprocess.check_call(["force_bdss",
+                                       "test_csv_corrupted.json"])
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index 6a1321e84587e9bc681dff92d529a3340ab728fb..f84c83dda83f6eeee1f7839608060d61551c952f 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -1,6 +1,12 @@
+from __future__ import print_function
+
+import sys
+
 from traits.api import on_trait_change
 
 from force_bdss.base_core_driver import BaseCoreDriver
+from force_bdss.workspecs.workflow import (InvalidVersionException,
+                                           InvalidFileException)
 
 
 class CoreMCODriver(BaseCoreDriver):
@@ -10,7 +16,11 @@ class CoreMCODriver(BaseCoreDriver):
 
     @on_trait_change("application:started")
     def application_started(self):
-        workflow = self.application.workflow
+        try:
+            workflow = self.application.workflow
+        except (InvalidVersionException, InvalidFileException) as e:
+            print(str(e), file=sys.stderr)
+            sys.exit(1)
 
         mco_data = workflow.multi_criteria_optimizer
         mco_bundle = self.bundle_registry.mco_bundle_by_id(mco_data.id)
diff --git a/force_bdss/workspecs/workflow.py b/force_bdss/workspecs/workflow.py
index ffac3a42247f89e5e977ca0a9e2b03da3e7cd792..edc85c80f6f1770b08a15ce3dba17aa9080d61e7 100644
--- a/force_bdss/workspecs/workflow.py
+++ b/force_bdss/workspecs/workflow.py
@@ -4,6 +4,16 @@ from force_bdss.workspecs.data_source import DataSource
 from force_bdss.workspecs.kpi_calculator import KPICalculator
 from .multi_criteria_optimizer import MultiCriteriaOptimizer
 
+SUPPORTED_FILE_VERSIONS = ["1"]
+
+
+class InvalidFileException(Exception):
+    pass
+
+
+class InvalidVersionException(InvalidFileException):
+    pass
+
 
 class Workflow(HasStrictTraits):
     name = String()
@@ -13,9 +23,19 @@ class Workflow(HasStrictTraits):
 
     @classmethod
     def from_json(cls, json_data):
+        try:
+            version = json_data["version"]
+        except KeyError:
+            raise InvalidFileException("Corrupted input file, no version"
+                                       " specified")
+
+        if version not in SUPPORTED_FILE_VERSIONS:
+            raise InvalidVersionException(
+                "File version {} not supported".format(json_data["version"]))
+
         self = cls(
             multi_criteria_optimizer=MultiCriteriaOptimizer.from_json(
-                    json_data["multi_criteria_optimizer"]
+                json_data["multi_criteria_optimizer"]
             ),
             data_sources=[
                 DataSource.from_json(data_source_data)