diff --git a/fig/cli/main.py b/fig/cli/main.py
index e6a8f5ff5..e64769f03 100644
--- a/fig/cli/main.py
+++ b/fig/cli/main.py
@@ -8,7 +8,7 @@ import signal
 from inspect import getdoc
 
 from .. import __version__
-from ..project import NoSuchService, DependencyError
+from ..project import NoSuchService, ConfigurationError
 from ..service import CannotBeScaledError
 from .command import Command
 from .formatter import Formatter
@@ -40,7 +40,7 @@ def main():
     except KeyboardInterrupt:
         log.error("\nAborting.")
         sys.exit(1)
-    except (UserError, NoSuchService, DependencyError) as e:
+    except (UserError, NoSuchService, ConfigurationError) as e:
         log.error(e.msg)
         sys.exit(1)
     except NoSuchCommand as e:
diff --git a/fig/project.py b/fig/project.py
index 1b4d2725c..12ec7069b 100644
--- a/fig/project.py
+++ b/fig/project.py
@@ -67,6 +67,8 @@ class Project(object):
     def from_config(cls, name, config, client):
         dicts = []
         for service_name, service in list(config.items()):
+            if not isinstance(service, dict):
+                raise ConfigurationError('Service "%s" doesn\'t have any configuration options. All top level keys in your fig.yml must map to a dictionary of configuration options.')
             service['name'] = service_name
             dicts.append(service)
         return cls.from_dicts(name, dicts, client)
@@ -156,9 +158,13 @@ class NoSuchService(Exception):
         return self.msg
 
 
-class DependencyError(Exception):
+class ConfigurationError(Exception):
     def __init__(self, msg):
         self.msg = msg
 
     def __str__(self):
         return self.msg
+
+class DependencyError(ConfigurationError):
+    pass
+
diff --git a/tests/project_test.py b/tests/project_test.py
index 13afe533b..07f383404 100644
--- a/tests/project_test.py
+++ b/tests/project_test.py
@@ -1,5 +1,5 @@
 from __future__ import unicode_literals
-from fig.project import Project
+from fig.project import Project, ConfigurationError
 from .testcases import DockerClientTestCase
 
 
@@ -37,6 +37,27 @@ class ProjectTest(DockerClientTestCase):
         self.assertEqual(project.services[0].name, 'db')
         self.assertEqual(project.services[1].name, 'web')
 
+    def test_from_config(self):
+        project = Project.from_config('figtest', {
+            'web': {
+                'image': 'ubuntu',
+            },
+            'db': {
+                'image': 'ubuntu',
+            },
+        }, self.client)
+        self.assertEqual(len(project.services), 2)
+        self.assertEqual(project.get_service('web').name, 'web')
+        self.assertEqual(project.get_service('web').options['image'], 'ubuntu')
+        self.assertEqual(project.get_service('db').name, 'db')
+        self.assertEqual(project.get_service('db').options['image'], 'ubuntu')
+
+    def test_from_config_throws_error_when_not_dict(self):
+        with self.assertRaises(ConfigurationError):
+            project = Project.from_config('figtest', {
+                'web': 'ubuntu',
+            }, self.client)
+
     def test_get_service(self):
         web = self.create_service('web')
         project = Project('test', [web], self.client)