diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index 0c55de6..cbbf87e 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -512,43 +512,6 @@
         self.assertEqual(expect_active, active ,"active counter is not incremented properly")
 
 
-def verify_queuestats(self,port_num,queue_id,expect_packet=None,expect_byte=None):
-    
-    # Verify queue counters : tx_packets and tx_bytes
-
-    request = message.queue_stats_request()
-    request.port_no  = port_num
-    request.queue_id = queue_id
-    
-    for i in range(0,100):
-
-        logging.info("Sending stats request")
-     
-        (queue_stats, p) = self.controller.transact(request)
-        self.assertNotEqual(queue_stats, None, "Queue stats request failed")
-        packet_counter = 0
-        byte_counter = 0 
-        
-        for item in queue_stats.stats:
-            packet_counter += item.tx_packets
-            byte_counter += item.tx_bytes
-
-            logging.info("Transmitted" + str(packet_counter) + " packets")
-            logging.info("Transmitted" + str(byte_counter) + "bytes")
-           
-        if (expect_packet == None or packet_counter == expect_packet) and \
-           (expect_byte == None or byte_counter == expect_byte):
-            break
-
-        sleep(0.1)
-    
-    if expect_packet != None :
-        self.assertEqual(packet_counter,expect_packet,"tx_packets counter is not incremented correctly")
-
-    if expect_byte != None :   
-        self.assertEqual(byte_counter,expect_byte,"tx_bytes counter is not incremented correctly")
-
-
 ############################## Various delete commands #############################################################################################
 
 def strict_delete(self,match,priority=None):
diff --git a/tests/counters.py b/tests/counters.py
index c30ba51..be6c979 100644
--- a/tests/counters.py
+++ b/tests/counters.py
@@ -374,7 +374,7 @@
                 delete_all_flows(self.controller)
 
                 # Get Queue stats for selected egress queue only
-                (qs_before,p) = get_queuestats(self,egress_port,egress_queue_id)
+                initial_stats = get_queue_stats(self, egress_port, egress_queue_id)
 
                 #Insert a flow with enqueue action to queues configured on egress_port
                 (pkt,match) = enqueue(self,ingress_port,egress_port,egress_queue_id)
@@ -382,9 +382,8 @@
                 #Send packet on the ingress_port and verify its received on egress_port
                 send_packet(self,pkt,ingress_port,egress_port)
                 
-                expected_packets = qs_before.stats[0].tx_packets+1
-
-                verify_queuestats(self,egress_port,egress_queue_id,expect_packet=expected_packets)
+                verify_queue_stats(self, egress_port, egress_queue_id,
+                                   initial=initial_stats, pkts=1)
        
 
 class TxBytPerQueue(base_tests.SimpleDataPlane):
@@ -413,7 +412,7 @@
                 delete_all_flows(self.controller)
 
                 # Get Queue stats for selected egress queue only
-                (qs_before,p) = get_queuestats(self,egress_port,egress_queue_id)
+                initial_stats = get_queue_stats(self, egress_port, egress_queue_id)
 
                 #Insert a flow with enqueue action to queues configured on egress_port
                 (pkt,match) = enqueue(self,ingress_port,egress_port,egress_queue_id)
@@ -421,9 +420,9 @@
                 #Send packet on the ingress_port and verify its received on egress_port
                 send_packet(self,pkt,ingress_port,egress_port)
                 
-                expected_bytes = qs_before.stats[0].tx_bytes+len(str(pkt))
-
-                verify_queuestats(self,egress_port,egress_queue_id,expect_byte=expected_bytes)
+                verify_queue_stats(self, egress_port, egress_queue_id,
+                                   initial=initial_stats,
+                                   bytes=len(str(pkt)))
        
        
 class RxDrops(base_tests.SimpleDataPlane):
