diff --git a/chameleon/grpc_client/grpc_client.py b/chameleon/grpc_client/grpc_client.py
index 05a4dd7..48cfa75 100644
--- a/chameleon/grpc_client/grpc_client.py
+++ b/chameleon/grpc_client/grpc_client.py
@@ -95,7 +95,8 @@
 
         try:
             if self.endpoint.startswith('@'):
-                _endpoint = self._get_endpoint_from_consul(self.endpoint[1:])
+                _endpoint = yield self._get_endpoint_from_consul(
+                    self.endpoint[1:])
             else:
                 _endpoint = self.endpoint
 
@@ -138,6 +139,7 @@
             log.info('reconnected', after_retries=self.retries)
             self.retries = 0
 
+    @inlineCallbacks
     def _get_endpoint_from_consul(self, service_name):
         """
         Look up an appropriate grpc endpoint (host, port) from
@@ -146,11 +148,16 @@
         host = self.consul_endpoint.split(':')[0].strip()
         port = int(self.consul_endpoint.split(':')[1].strip())
 
-        consul = Consul(host=host, port=port)
-        _, services = consul.catalog.service(service_name)
-
-        if len(services) == 0:
-            raise Exception('Cannot find service %s in consul' % service_name)
+        while True:
+            log.debug('consul-lookup', host=host, port=port)
+            consul = Consul(host=host, port=port)
+            _, services = consul.catalog.service(service_name)
+            log.debug('consul-response', services=services)
+            if services:
+                break
+            log.warning('no-service', consul_host=host, consul_port=port,
+                        service_name=service_name)
+            yield asleep(1.0)
 
         # pick a random entry
         # TODO should we prefer local IP addresses? Probably.
@@ -158,7 +165,7 @@
         service = services[randint(0, len(services) - 1)]
         endpoint = '{}:{}'.format(service['ServiceAddress'],
                                   service['ServicePort'])
-        return endpoint
+        returnValue(endpoint)
 
     def _retrieve_schema(self):
         """
diff --git a/chameleon/main.py b/chameleon/main.py
index 805acba..4d3939d 100755
--- a/chameleon/main.py
+++ b/chameleon/main.py
@@ -219,15 +219,18 @@
 
     @inlineCallbacks
     def startup_components(self):
-        self.log.info('starting-internal-components')
-        args = self.args
-        self.grpc_client = yield \
-            GrpcClient(args.consul, args.work_dir, args.grpc_endpoint)
-        self.web_server = yield \
-            WebServer(args.rest_port, args.work_dir, self.grpc_client).start()
-        self.grpc_client.set_reconnect_callback(
-            self.web_server.reload_generated_routes).start()
-        self.log.info('started-internal-services')
+        try:
+            self.log.info('starting-internal-components')
+            args = self.args
+            self.grpc_client = yield \
+                GrpcClient(args.consul, args.work_dir, args.grpc_endpoint)
+            self.rest_server = yield \
+                WebServer(args.rest_port, args.work_dir, self.grpc_client).start()
+            self.grpc_client.set_reconnect_callback(
+                self.rest_server.reload_generated_routes).start()
+            self.log.info('started-internal-services')
+        except Exception, e:
+            self.log.exception('startup-failed', e=e)
 
     @inlineCallbacks
     def shutdown_components(self):
