diff --git a/fixtures/base.py b/fixtures/base.py
index 50e9cc7..721d772 100644
--- a/fixtures/base.py
+++ b/fixtures/base.py
@@ -81,7 +81,7 @@
             os_resource['subnet1'] = subnet['id']
 
     openstack_clients.network.add_interface_router(
-        os_resource['router']['id'],{'subnet_id': os_resource['subnet1']})
+        os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
     openstack_clients.network.add_interface_router(
         os_resource['router']['id'],
         {'subnet_id': os_resource['subnet2']['id']})
@@ -98,7 +98,7 @@
         os_resource['router']['id'])
     time.sleep(5)
     openstack_clients.network.delete_router(os_resource['router']['id'])
-    time.sleep(5)
+    time.sleep(10)  # extended to 10 since fails at TF sometimes
     openstack_clients.network.delete_network(os_resource['net1']['id'])
     openstack_clients.network.delete_network(os_resource['net2']['id'])
 
diff --git a/tests/test_vm2vm.py b/tests/test_vm2vm.py
index d387ce1..0a89f1e 100644
--- a/tests/test_vm2vm.py
+++ b/tests/test_vm2vm.py
@@ -36,6 +36,7 @@
     ssh_timeout = int(config.get('ssh_timeout', 500))
     threads = int(config.get('multiple_threads_number', 10))
     iperf_utility = config.get('multiple_threads_iperf_utility', 'iperf3')
+    custom_mtu = config.get('custom_mtu') or 'default'
     utils.check_iperf_utility(iperf_utility)
     result_table = Texttable(max_width=120)
 
@@ -90,6 +91,13 @@
                 list(vms[i].addresses.keys())[0]][0]['addr']
             vm_info.append({'vm': vms[i], 'fip': fip['floating_ip_address'],
                             'private_address': private_address})
+        # Set custom MTU if required
+        if os_actions.is_cloud_tf() and (custom_mtu != "default"):
+            logger.info("Setting up custom MTU at network ports...")
+            for vm in vms:
+                os_actions.update_network_port_with_custom_mtu(vm.id,
+                                                               custom_mtu)
+
         # Check VMs are reachable and prepare iperf3
         transport1 = ssh.SSHTransport(vm_info[0]['fip'], 'ubuntu',
                                       password='dd', private_key=private_key)
@@ -101,14 +109,14 @@
                 ssh.prepare_iperf(vm_info[i]['fip'], private_key=private_key)
                 mtus.append(transport1.get_mtu_from_vm(
                     vm_info[i]['fip'], private_key=private_key))
-        logger.info("MTU at networks: {}, {}".format(os_resources['net1']['mtu'],
-                                                 os_resources['net2']['mtu']))
+        logger.info("MTU at networks: {}, {}".format(
+            os_resources['net1']['mtu'], os_resources['net2']['mtu']))
         logger.info("MTU at VMs: {}".format(", ".join(mtus)))
 
         # Prepare the result table and run iperf3
-        table_rows = []
-        table_rows.append(['Test Case', 'Host 1', 'Host 2',
-                           'MTU at VMs', 'Result'])
+        table_rows = [[
+            'Test Case', 'Host 1', 'Host 2', 'MTU at VMs', 'Result'
+        ]]
         # Do iperf3 measurement #1
         logger.info("Doing 'VM to VM in same tenant on same node via Private "
                     "IP, 1 thread' measurement...")
@@ -152,8 +160,9 @@
         else:
             iperf_utility = "iperf"
             result3 = transport1.exec_command(
-                '{} -c {} -P {} -t {} | tail -n 1'.format(iperf_utility,
-                    vm_info[2]['private_address'], threads, iperf_time))
+                '{} -c {} -P {} -t {} | tail -n 1'.format(
+                    iperf_utility, vm_info[2]['private_address'],
+                    threads, iperf_time))
             res3 = (b" ".join(result3.split()[-2::])).decode('utf-8')
         logger.info("Result #3 is {}".format(res3))
         table_rows.append(['VM to VM in same tenant on different HW nodes '
diff --git a/utils/os_client.py b/utils/os_client.py
index 03462dc..9b128c5 100644
--- a/utils/os_client.py
+++ b/utils/os_client.py
@@ -408,6 +408,10 @@
                                  "Must be an integer at 'custom_mtu' in "
                                  "global_config.yaml.\n{}".format(mtu, e))
         net = self.os_clients.network.create_network(net_body)['network']
+        # WA for TF because the network object does not have 'mtu' field by
+        # default, so this blocked running tests at TF envs with default MTU
+        if 'mtu' not in net:
+            net['mtu'] = None
         logger.info("Created internal network {}".format(net_name))
         return net
 
@@ -465,3 +469,26 @@
             msg = "Could not delete a Floating IP, UUID {}. Error: {}" \
                   "".format(floatingip_id, e)
             logger.info(msg)
+
+    def is_cloud_tf(self):
+        # Detect the TF cloud by assuming it does not have any neutron
+        # agents (404 in response)
+        try:
+            self.os_clients.network.list_agents()
+        except neutron_common.exceptions.NotFound:
+            logger.info("MOS TF cloud is detected.")
+            return True
+        return False
+
+    def update_network_port_with_custom_mtu(self, vm_uuid, custom_mtu):
+        port_uuid = self.os_clients.network.list_ports(
+            device_id=vm_uuid).get("ports")[0]["id"]
+        body = {"port": {"extra_dhcp_opts": [
+            {"opt_name": "interface-mtu", "opt_value": str(custom_mtu)}]}}
+        try:
+            self.os_clients.network.update_port(port_uuid, body)
+        except Exception as e:
+            raise Exception("Could not set custom MTU by updating the port. "
+                            "See detailed error: {}".format(e))
+        logger.info("The port {} is updated with custom MTU {}."
+                    "".format(port_uuid, custom_mtu))
