diff --git a/.travis.yml b/.travis.yml
index 1cb784a..9a9d635 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,15 +9,9 @@
   - pip install PyYAML
   - pip install virtualenv
   - |
-    test -e Gemfile || cat <<EOF > Gemfile
-    source 'https://rubygems.org'
-    gem 'rake'
-    gem 'test-kitchen'
-    gem 'kitchen-docker'
-    gem 'kitchen-inspec'
-    gem 'inspec', '<3.0.0'
-    #Version was frozen, because of issues in the version of inspec >3.0.0 -- see https://mirantis.jira.com/browse/PROD-24324 for more info
-    gem 'kitchen-salt', :git => 'https://github.com/salt-formulas/kitchen-salt.git'
+    if [ ! -e Gemfile ]; then
+       curl -s -o ./Gemfile 'https://gerrit.mcp.mirantis.com/gitweb?p=salt-formulas/salt-formulas-scripts.git;a=blob_plain;f=Gemfile;hb=refs/heads/master'
+    fi
   - bundle install
 
 env:
diff --git a/Makefile b/Makefile
index d166862..fb69046 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,11 @@
 JOBS := 1
 endif
 
+ifeq (,$(wildcard ./.kitchen.openstack.yml))
+KITCHEN_LOCAL_YAML?=.kitchen.openstack.yml
+else
 KITCHEN_LOCAL_YAML?=.kitchen.yml
+endif
 KITCHEN_OPTS?="--concurrency=$(JOBS)"
 KITCHEN_OPTS_CREATE?=""
 KITCHEN_OPTS_CONVERGE?=""
diff --git a/_modules/neutronng.py b/_modules/neutronng.py
index 6ea50f9..87bc154 100644
--- a/_modules/neutronng.py
+++ b/_modules/neutronng.py
@@ -1,7 +1,9 @@
 # -*- coding: utf-8 -*-
 
 import logging
+import time
 from functools import wraps
+from salt.exceptions import CommandExecutionError
 LOG = logging.getLogger(__name__)
 
 # Import third party libs
@@ -416,3 +418,22 @@
         salt '*' neutronng.list_extensions
     '''
     return neutron_interface.list_extensions(**kwargs)
+
+
+def wait_for_api_ready(profile, retries=1, retry_timeout=10):
+
+    response = {'status': 'up'}
+    for i in range(1, retries+1):
+        try:
+            list_routers(profile=profile)
+        except Exception as e:
+                msg = ("Error: %s "
+                       "Sleeping for %ss. "
+                       "Attempts %s of %s ")
+                LOG.error(msg % (e, retry_timeout, i, retries))
+                time.sleep(retry_timeout)
+                if i == retries:
+                  raise CommandExecutionError(e)
+                continue
+    return response
+
diff --git a/_modules/neutronv2/__init__.py b/_modules/neutronv2/__init__.py
index 85db2b7..e275af6 100644
--- a/_modules/neutronv2/__init__.py
+++ b/_modules/neutronv2/__init__.py
@@ -12,6 +12,7 @@
 from neutronv2 import subnets
 from neutronv2 import agents
 from neutronv2 import routers
+from neutronv2 import common
 
 
 network_get_details = networks.network_get_details
@@ -62,6 +63,8 @@
 
 wait_for_network_services = agents.wait_for_network_services
 
+wait_for_api_ready = common.wait_for_api_ready
+
 __all__ = (
     'network_get_details', 'network_update', 'network_delete', 'network_list',
     'network_create', 'network_bulk_create', 'subnetpool_get_details',
diff --git a/_modules/neutronv2/common.py b/_modules/neutronv2/common.py
index 7b62122..6f3f56c 100644
--- a/_modules/neutronv2/common.py
+++ b/_modules/neutronv2/common.py
@@ -3,6 +3,8 @@
 import os_client_config
 import time
 
+from salt.exceptions import CommandExecutionError
+
 log = logging.getLogger(__name__)
 
 NEUTRON_VERSION_HEADER = 'x-openstack-networking-version'
@@ -108,3 +110,32 @@
             return resp
         return wrapped_f
     return wrap
+
+def wait_for_api_ready(cloud_name, retries=1, retry_timeout=10, **kwargs):
+
+    adapter = _get_raw_client(cloud_name)
+    response = None
+    for i in range(1, retries+1):
+        try:
+          response = getattr(adapter, 'get')(
+              '/', connect_retries=retries,
+              **kwargs)
+        except Exception as e:
+                msg = ("Error: %s "
+                       "Sleeping for %ss. "
+                       "Attempts %s of %s ")
+                log.error(msg % (e, retry_timeout, i, retries))
+                time.sleep(retry_timeout)
+                continue
+        break
+    if not response or not response.content:
+        if e:
+            raise CommandExecutionError(e)
+        else:
+            return {}
+    try:
+        resp = response.json()
+    except ValueError:
+        resp = response.content
+    return resp
+
diff --git a/neutron/client/resources/init.sls b/neutron/client/resources/init.sls
index 5ec7f0d..090ebb7 100644
--- a/neutron/client/resources/init.sls
+++ b/neutron/client/resources/init.sls
@@ -11,6 +11,13 @@
 
 {%- for identity_name, identity in client.get('server', {}).iteritems() %}
 
+wait_for_neutron_agents_legacy_{{ identity_name }}:
+  module.run:
+    - name: neutronng.wait_for_api_ready
+    - retries: 90
+    - retry_timeout: 1
+    - profile: {{ identity_name }}
+
 {%- if identity.security_group is defined %}
 
 {%- for security_group_name, security_group in identity.security_group.iteritems() %}
@@ -25,6 +32,8 @@
     - tenant: {{ security_group.tenant }}
     {%- if identity.endpoint_type is defined %}
     - endpoint_type: {{ identity.endpoint_type }}
+    - require:
+      - wait_for_neutron_agents_legacy_{{ identity_name }}
     {%- endif %}
 {%- endfor %}
 
@@ -67,6 +76,8 @@
     {%- if network.is_default is defined %}
     - is_default: {{ network.is_default }}
     {%- endif %}
+    - require:
+      - neutronng.wait_for_api_ready
 
 {%- if network.subnet is defined %}
 
diff --git a/neutron/client/resources/v2.sls b/neutron/client/resources/v2.sls
index 81ed1f4..3bd57b9 100644
--- a/neutron/client/resources/v2.sls
+++ b/neutron/client/resources/v2.sls
@@ -3,6 +3,13 @@
 
 {%- for identity_name, identity in client.get('resources', {}).get('v2', {}).iteritems() %}
 
+wait_for_neutron_agents_v2_{{ identity_name }}:
+  module.run:
+    - name: neutronv2.wait_for_api_ready
+    - retries: 90
+    - retry_timeout: 1
+    - cloud_name: {{ identity_name }}
+
   {%- if identity.network is defined %}
   {%- for network_name, network in identity.network.iteritems() %}
 
@@ -34,6 +41,8 @@
     {%- if network.is_default is defined %}
     - is_default: {{ network.is_default }}
     {%- endif %}
+    - require:
+      - wait_for_neutron_agents_v2_{{ identity_name }}
 
     {%- if network.subnet is defined %}
     {%- for subnet_name, subnet in network.subnet.iteritems() %}
@@ -110,4 +119,4 @@
   {%- endif %}
 
 {%- endfor %}
-{%- endif %}
\ No newline at end of file
+{%- endif %}
