diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_listener.py b/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
index 6157d91..1dea088 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_listener.py
@@ -86,37 +86,25 @@
                                 const.ACTIVE,
                                 CONF.load_balancer.build_interval,
                                 CONF.load_balancer.build_timeout)
-
-        pool2_name = data_utils.rand_name("lb_member_pool2_listener")
-        pool2_kwargs = {
-            const.NAME: pool2_name,
-            const.PROTOCOL: cls.protocol,
-            const.LB_ALGORITHM: cls.lb_algorithm,
-        }
-        if CONF.load_balancer.provider == 'tungstenfabric':
-            listener2_name = data_utils.rand_name("lb_member_listener2")
-            listener2 = cls._create_tf_listener(
-                listener2_name, cls.protocol, 82, cls.lb_id)
-            listener2_id = listener2[const.ID]
+        if CONF.load_balancer.provider != 'tungstenfabric':
+            pool2_name = data_utils.rand_name("lb_member_pool2_listener")
+            pool2_kwargs = {
+                const.NAME: pool2_name,
+                const.PROTOCOL: cls.protocol,
+                const.LB_ALGORITHM: cls.lb_algorithm,
+            }
+            pool2 = cls.mem_pool_client.create_pool(**pool2_kwargs)
+            cls.pool2_id = pool2[const.ID]
             cls.addClassResourceCleanup(
-                cls.mem_listener_client.cleanup_listener, listener2_id,
+                cls.mem_pool_client.cleanup_pool,
+                cls.pool2_id,
                 lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
 
-            pool2_kwargs.update({const.LISTENER_ID: listener2_id})
-        else:
-            pool2_kwargs.update({const.LOADBALANCER_ID: cls.lb_id})
-        pool2 = cls.mem_pool_client.create_pool(**pool2_kwargs)
-        cls.pool2_id = pool2[const.ID]
-        cls.addClassResourceCleanup(
-            cls.mem_pool_client.cleanup_pool,
-            cls.pool2_id,
-            lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
-
-        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
-                                cls.lb_id, const.PROVISIONING_STATUS,
-                                const.ACTIVE,
-                                CONF.load_balancer.build_interval,
-                                CONF.load_balancer.build_timeout)
+            waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
+                                    cls.lb_id, const.PROVISIONING_STATUS,
+                                    const.ACTIVE,
+                                    CONF.load_balancer.build_interval,
+                                    CONF.load_balancer.build_timeout)
 
     @decorators.idempotent_id('4a874014-b7d1-49a4-ac9a-2400b3434700')
     def test_listener_CRUD(self):
@@ -212,7 +200,6 @@
             const.DESCRIPTION: new_description,
             const.ADMIN_STATE_UP: True,
             const.CONNECTION_LIMIT: 400,
-            const.DEFAULT_POOL_ID: self.pool2_id,
             # TODO(rm_work): need to finish the rest of this stuff
             # const.DEFAULT_TLS_CONTAINER_REF: '',
             # const.SNI_CONTAINER_REFS: [],
@@ -222,7 +209,8 @@
                 const.INSERT_HEADERS: {
                     const.X_FORWARDED_FOR: "false",
                     const.X_FORWARDED_PORT: "false"
-                }
+                },
+                const.DEFAULT_POOL_ID: self.pool2_id,
             })
         if self.mem_listener_client.is_version_supported(
                 self.api_version, '2.1'):
@@ -267,11 +255,12 @@
         self.assertEqual(80, listener[const.PROTOCOL_PORT])
         self.assertEqual(400, listener[const.CONNECTION_LIMIT])
         insert_headers = listener[const.INSERT_HEADERS]
-        self.assertFalse(
-            strutils.bool_from_string(insert_headers[const.X_FORWARDED_FOR]))
-        self.assertFalse(
-            strutils.bool_from_string(insert_headers[const.X_FORWARDED_PORT]))
-        self.assertEqual(self.pool2_id, listener[const.DEFAULT_POOL_ID])
+        if CONF.load_balancer.provider != 'tungstenfabric':
+            self.assertFalse(strutils.bool_from_string(
+                insert_headers[const.X_FORWARDED_FOR]))
+            self.assertFalse(strutils.bool_from_string(
+                insert_headers[const.X_FORWARDED_PORT]))
+            self.assertEqual(self.pool2_id, listener[const.DEFAULT_POOL_ID])
         if self.mem_listener_client.is_version_supported(
                 self.api_version, '2.1'):
             self.assertEqual(2000, listener[const.TIMEOUT_CLIENT_DATA])
