diff --git a/neutron_tempest_plugin/bgpvpn/scenario/manager.py b/neutron_tempest_plugin/bgpvpn/scenario/manager.py
index b342bc6..21ba60d 100644
--- a/neutron_tempest_plugin/bgpvpn/scenario/manager.py
+++ b/neutron_tempest_plugin/bgpvpn/scenario/manager.py
@@ -1008,9 +1008,10 @@
     def _create_servers(self, ports_config=None, port_security=True):
         keypair = self.create_keypair()
         security_group_ids = [self.security_group['id']]
-        if ports_config is None:
+        if not ports_config:
             ports_config = [[self.networks[NET_A], IP_A_S1_1],
                             [self.networks[NET_B], IP_B_S1_1]]
+
         for (i, port_config) in enumerate(ports_config):
             network = port_config[0]
             server = self._create_server(
@@ -1124,8 +1125,13 @@
                           to_server_ip, from_server_ip, msg)
             raise
 
-    def _associate_fip_and_check_l3_bgpvpn(self, should_succeed=True):
-        subnet = self.subnets[NET_A][0]
+    def _associate_fip_and_check_l3_bgpvpn(self, subnet=None,
+                                           should_succeed=True):
+        if not subnet:
+            subnet = self.subnets[NET_A][0]
+        else:
+            subnet = self.subnets[subnet][0]
+
         self.router = self._create_router_and_associate_fip(0, subnet)
         self._check_l3_bgpvpn(should_succeed=should_succeed)
 
diff --git a/neutron_tempest_plugin/bgpvpn/scenario/test_bgpvpn_migration.py b/neutron_tempest_plugin/bgpvpn/scenario/test_bgpvpn_migration.py
index f565ba4..24f99dd 100644
--- a/neutron_tempest_plugin/bgpvpn/scenario/test_bgpvpn_migration.py
+++ b/neutron_tempest_plugin/bgpvpn/scenario/test_bgpvpn_migration.py
@@ -30,13 +30,18 @@
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
+NET_D = 'D'
+NET_E = 'E'
+NET_F = 'F'
+
+
 if "SUBNETPOOL_PREFIX_V4" in os.environ:
     subnet_base = netaddr.IPNetwork(os.environ['SUBNETPOOL_PREFIX_V4'])
     if subnet_base.prefixlen > 21:
         raise Exception("if SUBNETPOOL_PREFIX_V4 is set, it needs to offer "
                         "space for at least 8 /24 subnets")
 else:
-    subnet_base = netaddr.IPNetwork("10.100.0.0/16")
+    subnet_base = netaddr.IPNetwork("10.200.0.0/16")
 
 
 def assign_24(idx):
@@ -46,6 +51,17 @@
         subnet_base[range_size * idx:range_size * (idx + 1)])[0]
 
 
+S1D = assign_24(1)
+S1E = assign_24(4)
+S1F = assign_24(6)
+NET_D_S1 = str(S1D)
+NET_E_S1 = str(S1E)
+NET_F_S1 = str(S1F)
+IP_D_S1_1 = str(S1D[10])
+IP_E_S1_1 = str(S1E[20])
+IP_F_S1_1 = str(S1F[30])
+
+
 class TestBGPVPNMigration(base.BaseBgpvpnTest, manager.NetworkScenarioTest,
                           base2.BaseV2ComputeAdminTest):
     block_migration = None
@@ -60,7 +76,7 @@
     @lockutils.synchronized('bgpvpn')
     def new_rt(cls):
         cls._rt_index += 1
-        return "64512:%d" % cls._rt_index
+        return "64513:%d" % cls._rt_index
 
     def setUp(self):
         super(TestBGPVPNMigration, self).setUp()
@@ -81,11 +97,11 @@
 
          after live migration
 
-        1. Create networks A and B with their respective subnets
-        2. Associate network A and network B to a given L3 BGPVPN
-        3. Start up server 1 in network A
-        4. Start up server 2 in network B
-        5. Create router and connect it to network A
+        1. Create networks D, E and F with their respective subnets
+        2. Associate network D, E and network F to a given L3 BGPVPN
+        3. Start up server 1 in network D
+        4. Start up server 2 in network E
+        5. Create router and connect it to network D
         6. Give a FIP to server 1
         7. Check that server 1 can ping server 2
         8. Live migrate server 1
@@ -93,11 +109,17 @@
         10. Live migrate server 2
         11. Check that server 1 can ping server 2
         """
-        self._create_networks_and_subnets()
+        self._create_networks_and_subnets(names=[NET_D, NET_E, NET_F],
+                                          subnet_cidrs=[[NET_D_S1], [NET_E_S1],
+                                                        [NET_F_S1]])
         self._create_l3_bgpvpn()
         self._associate_all_nets_to_bgpvpn()
-        self._create_servers()
-        self._associate_fip_and_check_l3_bgpvpn()
+        self._create_servers(ports_config=[
+            [self.networks[NET_D], IP_D_S1_1],
+            [self.networks[NET_E], IP_E_S1_1],
+            [self.networks[NET_F], IP_F_S1_1]
+        ])
+        self._associate_fip_and_check_l3_bgpvpn(subnet=NET_D)
         # Migrate both VMs one by one and check connection
         for i in range(2):
             source_host = self.get_host_for_server(self.servers[i]['id'])
