diff --git a/neutron_tempest_plugin/api/test_routers.py b/neutron_tempest_plugin/api/test_routers.py
index 4637dd6..5c98c8b 100644
--- a/neutron_tempest_plugin/api/test_routers.py
+++ b/neutron_tempest_plugin/api/test_routers.py
@@ -251,7 +251,8 @@
     required_extensions = ['dvr', 'l3-ha']
 
     @decorators.idempotent_id('644d7a4a-01a1-4b68-bb8d-0c0042cb1729')
-    def test_convert_centralized_router(self):
+    def test_convert_distributed_router_back_to_centralized(self):
+        # Convert a centralized router to distributed firstly
         router_args = {'tenant_id': self.client.tenant_id,
                        'distributed': False, 'ha': False}
         router = self.admin_client.create_router(
@@ -266,6 +267,14 @@
         self.assertTrue(update_body['router']['distributed'])
         show_body = self.admin_client.show_router(router['id'])
         self.assertTrue(show_body['router']['distributed'])
+        self.assertFalse(show_body['router']['ha'])
+        # Then convert the distributed router back to centralized
+        update_body = self.admin_client.update_router(router['id'],
+                                                      distributed=False)
+        self.assertFalse(update_body['router']['distributed'])
+        show_body = self.admin_client.show_router(router['id'])
+        self.assertFalse(show_body['router']['distributed'])
+        self.assertFalse(show_body['router']['ha'])
         show_body = self.client.show_router(router['id'])
         self.assertNotIn('distributed', show_body['router'])
         self.assertNotIn('ha', show_body['router'])
diff --git a/neutron_tempest_plugin/config.py b/neutron_tempest_plugin/config.py
index df07042..05142d8 100644
--- a/neutron_tempest_plugin/config.py
+++ b/neutron_tempest_plugin/config.py
@@ -86,6 +86,13 @@
     # Options for special, "advanced" image like e.g. Ubuntu. Such image can be
     # used in tests which require some more advanced tool than available in
     # Cirros
+    cfg.BoolOpt('default_image_is_advanced',
+                default=False,
+                help='Default image is an image which supports features '
+                     'that Cirros does not, like Ubuntu or CentOS supporting '
+                     'advanced features. '
+                     'If this is set to True, "advanced_image_ref" option '
+                     'is not required to be set.'),
     cfg.StrOpt('advanced_image_ref',
                default=None,
                help='Valid advanced image uuid to be used in tests. '
diff --git a/neutron_tempest_plugin/scenario/test_mtu.py b/neutron_tempest_plugin/scenario/test_mtu.py
index 71a77f4..df730c6 100644
--- a/neutron_tempest_plugin/scenario/test_mtu.py
+++ b/neutron_tempest_plugin/scenario/test_mtu.py
@@ -46,11 +46,24 @@
             secgroup_id=cls.secgroup['security_group']['id'])
         cls.create_pingable_secgroup_rule(
             secgroup_id=cls.secgroup['security_group']['id'])
+        if CONF.neutron_plugin_options.default_image_is_advanced:
+            cls.use_advanced_image = False
+            cls.username = CONF.validation.image_ssh_user
+        else:
+            cls.use_advanced_image = True
+            cls.username = CONF.neutron_plugin_options.advanced_image_ssh_user
 
     def create_pingable_vm(self, net, keypair, secgroup):
+        if self.use_advanced_image:
+            flavor_ref = CONF.neutron_plugin_options.advanced_image_flavor_ref
+            image_ref = CONF.neutron_plugin_options.advanced_image_ref
+        else:
+            flavor_ref = CONF.compute.flavor_ref
+            image_ref = CONF.compute.image_ref
+
         server = self.create_server(
-            flavor_ref=CONF.neutron_plugin_options.advanced_image_flavor_ref,
-            image_ref=CONF.neutron_plugin_options.advanced_image_ref,
+            flavor_ref=flavor_ref,
+            image_ref=image_ref,
             key_name=keypair['name'],
             networks=[{'uuid': net['id']}],
             security_groups=[{'name': secgroup[
@@ -107,24 +120,22 @@
                                                 self.keypair, self.secgroup)
         server_ssh_client1 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
-            CONF.neutron_plugin_options.advanced_image_ssh_user,
-            pkey=self.keypair['private_key'])
+            self.username, pkey=self.keypair['private_key'])
         server2, fip2 = self.create_pingable_vm(self.networks[1],
                                                 self.keypair, self.secgroup)
         server_ssh_client2 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
-            CONF.neutron_plugin_options.advanced_image_ssh_user,
-            pkey=self.keypair['private_key'])
+            self.username, pkey=self.keypair['private_key'])
         for fip in (fip1, fip2):
             self.check_connectivity(
                 fip['floating_ip_address'],
-                CONF.neutron_plugin_options.advanced_image_ssh_user,
-                self.keypair['private_key'])
+                self.username, self.keypair['private_key'])
         return server_ssh_client1, fip1, server_ssh_client2, fip2
 
     @testtools.skipUnless(
-          CONF.neutron_plugin_options.advanced_image_ref,
-          "Advanced image is required to run this test.")
+        (CONF.neutron_plugin_options.advanced_image_ref or
+         CONF.neutron_plugin_options.default_image_is_advanced),
+        "Advanced image is required to run this test.")
     @decorators.idempotent_id('3d73ec1a-2ec6-45a9-b0f8-04a273d9d344')
     def test_connectivity_min_max_mtu(self):
         server_ssh_client, _, _, fip2 = self._create_setup()
@@ -202,24 +213,22 @@
                                                 self.keypair, self.secgroup)
         server_ssh_client1 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
-            CONF.neutron_plugin_options.advanced_image_ssh_user,
-            pkey=self.keypair['private_key'])
+            self.username, pkey=self.keypair['private_key'])
         server2, fip2 = self.create_pingable_vm(self.networks[1],
                                                 self.keypair, self.secgroup)
         server_ssh_client2 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
-            CONF.neutron_plugin_options.advanced_image_ssh_user,
-            pkey=self.keypair['private_key'])
+            self.username, pkey=self.keypair['private_key'])
         for fip in (fip1, fip2):
             self.check_connectivity(
                 fip['floating_ip_address'],
-                CONF.neutron_plugin_options.advanced_image_ssh_user,
-                self.keypair['private_key'])
+                self.username, self.keypair['private_key'])
         return server_ssh_client1, fip1, server_ssh_client2, fip2
 
     @testtools.skipUnless(
-          CONF.neutron_plugin_options.advanced_image_ref,
-          "Advanced image is required to run this test.")
+        (CONF.neutron_plugin_options.advanced_image_ref or
+         CONF.neutron_plugin_options.default_image_is_advanced),
+        "Advanced image is required to run this test.")
     @decorators.idempotent_id('bc470200-d8f4-4f07-b294-1b4cbaaa35b9')
     def test_connectivity_min_max_mtu(self):
         server_ssh_client, _, _, fip2 = self._create_setup()
diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py
index 7ca5d29..6d855f1 100644
--- a/neutron_tempest_plugin/scenario/test_trunk.py
+++ b/neutron_tempest_plugin/scenario/test_trunk.py
@@ -244,20 +244,27 @@
             self._wait_for_trunk(vm.trunk)
             self._assert_has_ssh_connectivity(vm1.ssh_client)
 
-    @testtools.skipUnless(CONF.neutron_plugin_options.advanced_image_ref,
-                          "Advanced image is required to run this test.")
+    @testtools.skipUnless(
+        (CONF.neutron_plugin_options.advanced_image_ref or
+         CONF.neutron_plugin_options.default_image_is_advanced),
+        "Advanced image is required to run this test.")
     @decorators.idempotent_id('a8a02c9b-b453-49b5-89a2-cce7da66aafb')
     def test_subport_connectivity(self):
         vlan_tag = 10
         vlan_network = self.create_network()
         vlan_subnet = self.create_subnet(network=vlan_network, gateway=None)
 
-        vm1 = self._create_server_with_trunk_port(subport_network=vlan_network,
-                                                  segmentation_id=vlan_tag,
-                                                  use_advanced_image=True)
-        vm2 = self._create_server_with_trunk_port(subport_network=vlan_network,
-                                                  segmentation_id=vlan_tag,
-                                                  use_advanced_image=True)
+        use_advanced_image = (
+            not CONF.neutron_plugin_options.default_image_is_advanced)
+
+        vm1 = self._create_server_with_trunk_port(
+            subport_network=vlan_network,
+            segmentation_id=vlan_tag,
+            use_advanced_image=use_advanced_image)
+        vm2 = self._create_server_with_trunk_port(
+            subport_network=vlan_network,
+            segmentation_id=vlan_tag,
+            use_advanced_image=use_advanced_image)
 
         for vm in [vm1, vm2]:
             self._configure_vlan_subport(vm=vm,
@@ -278,7 +285,8 @@
             vm2.subport['fixed_ips'][0]['ip_address'])
 
     @testtools.skipUnless(
-        CONF.neutron_plugin_options.advanced_image_ref,
+        (CONF.neutron_plugin_options.advanced_image_ref or
+         CONF.neutron_plugin_options.default_image_is_advanced),
         "Advanced image is required to run this test.")
     @testtools.skipUnless(
         CONF.neutron_plugin_options.q_agent == "linuxbridge",
@@ -290,11 +298,14 @@
         vlan_subnet = self.create_subnet(vlan_network)
         self.create_router_interface(self.router['id'], vlan_subnet['id'])
 
+        use_advanced_image = (
+            not CONF.neutron_plugin_options.default_image_is_advanced)
+
         # Create servers
         trunk_network_server = self._create_server_with_trunk_port(
             subport_network=vlan_network,
             segmentation_id=vlan_tag,
-            use_advanced_image=True)
+            use_advanced_image=use_advanced_image)
         normal_network_server = self._create_server_with_network(self.network)
         vlan_network_server = self._create_server_with_network(vlan_network)
 
