diff --git a/.gitignore b/.gitignore
index fc491864..b00b9105 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@ bin
 tags
 .tox
 .testrepository
+.stestr
 *.pyc
 *.sw[nop]
 *.pyc
diff --git a/hooks/neutron_utils.py b/hooks/neutron_utils.py
index 273ee020..e227f554 100644
--- a/hooks/neutron_utils.py
+++ b/hooks/neutron_utils.py
@@ -660,9 +660,14 @@ def resolve_config_files(plugin, release):
     return config_files
 
 
-def register_configs():
-    ''' Register config files with their respective contexts. '''
-    release = os_release('neutron-common')
+def register_configs(release=None):
+    '''
+    Register config files with their respective contexts.
+
+    :param release: string containing the openstack release to use
+                    over automatic detection based on installed pkgs.
+    '''
+    release = release or os_release('neutron-common')
     plugin = config('plugin')
     config_files = resolve_config_files(plugin, release)
     configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
@@ -685,15 +690,17 @@ def stop_services():
         service_stop(svc)
 
 
-def restart_map():
+def restart_map(release=None):
     '''
     Determine the correct resource map to be passed to
     charmhelpers.core.restart_on_change() based on the services configured.
 
+    :param release: string containing the openstack release to use
+                    over automatic detection based on installed pkgs.
     :returns: dict: A dictionary mapping config file to lists of services
                     that should be restarted when file changes.
     '''
-    release = os_release('neutron-common')
+    release = release or os_release('neutron-common')
     plugin = config('plugin')
     config_files = resolve_config_files(plugin, release)
     _map = {}
@@ -822,6 +829,13 @@ def do_openstack_upgrade(configs):
     log('Performing OpenStack upgrade to %s.' % (new_os_rel))
 
     configure_installation_source(new_src)
+
+    # NOTE(jamespage):
+    # Write-out new openstack release configuration files prior to upgrading
+    # to avoid having to restart services immediately after upgrade.
+    configs = register_configs(new_os_rel)
+    configs.write_all()
+
     dpkg_opts = [
         '--option', 'Dpkg::Options::=--force-confnew',
         '--option', 'Dpkg::Options::=--force-confdef',
@@ -834,8 +848,6 @@ def do_openstack_upgrade(configs):
     reset_os_release()
     apt_install(get_early_packages(), fatal=True)
     apt_install(get_packages(), fatal=True)
-    configs.set_release(openstack_release=new_os_rel)
-    configs.write_all()
 
 
 def configure_ovs():
diff --git a/unit_tests/test_neutron_utils.py b/unit_tests/test_neutron_utils.py
index 48217dd2..eb6d02bf 100644
--- a/unit_tests/test_neutron_utils.py
+++ b/unit_tests/test_neutron_utils.py
@@ -288,9 +288,13 @@ class TestNeutronUtils(CharmTestCase):
                  call('br1', 'eth0.200', promisc=True)]
         self.add_bridge_port.assert_has_calls(calls)
 
+    @patch.object(neutron_utils, 'register_configs')
     @patch('charmhelpers.contrib.openstack.templating.OSConfigRenderer')
     @patch.object(neutron_utils, 'git_install_requested')
-    def test_do_openstack_upgrade(self, git_requested, mock_renderer):
+    def test_do_openstack_upgrade(self, git_requested, mock_renderer,
+                                  mock_register_configs):
+        mock_configs = MagicMock()
+        mock_register_configs.return_value = mock_configs
         git_requested.return_value = False
         self.config.side_effect = self.test_config.get
         self.is_relation_made.return_value = False
@@ -298,8 +302,8 @@ class TestNeutronUtils(CharmTestCase):
         self.test_config.set('plugin', 'ovs')
         self.get_os_codename_install_source.return_value = 'havana'
         self.os_release.return_value = 'havana'
-        configs = neutron_utils.register_configs()
-        neutron_utils.do_openstack_upgrade(configs)
+        neutron_utils.do_openstack_upgrade(mock_configs)
+        mock_register_configs.assert_called_with('havana')
         self.assertTrue(self.log.called)
         self.apt_update.assert_called_with(fatal=True)
         dpkg_opts = [