diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index 87df355..aa35221 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -512,44 +512,6 @@
         self.assertEqual(expect_active, active ,"active counter is not incremented properly")
 
 
-def verify_flowstats(self,match,byte_count=None,packet_count=None):
-    # Verify flow counters : byte_count and packet_count
-
-    stat_req = message.flow_stats_request()
-    stat_req.match = match
-    stat_req.table_id = 0xff
-    stat_req.out_port = ofp.OFPP_NONE
-    
-    for i in range(0,100):
-        logging.info("Sending stats request")
-        # TODO: move REPLY_MORE handling to controller.transact?
-        response, pkt = self.controller.transact(stat_req,
-                                                     timeout=5)
-        self.assertTrue(response is not None,"No response to stats request")
-
-        packet_counter = 0
-        byte_counter = 0 
-
-        for item in response.stats:
-            packet_counter += item.packet_count
-            byte_counter += item.byte_count
-
-        logging.info("Received %d packets", packet_counter)
-        logging.info("Received %d bytes", byte_counter)
-
-        if (packet_count == None or packet_counter >= packet_count) and \
-           (byte_count == None or byte_counter >= byte_count):
-            break
-
-        sleep(0.1)
-    
-    if packet_count != None :
-        self.assertEqual(packet_count, packet_counter, "packet_count counter is not incremented correctly")
-
-    if byte_count != None :   
-        self.assertEqual(byte_count, byte_counter, "byte_count counter is not incremented correctly")
-
-
 def verify_portstats(self, port,tx_packets=None,rx_packets=None,rx_byte=None,tx_byte=None):
 
     
diff --git a/tests/counters.py b/tests/counters.py
index 4caae4f..d23cf75 100644
--- a/tests/counters.py
+++ b/tests/counters.py
@@ -60,9 +60,9 @@
         num_pkts = 5 
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
-         
-        #Verify Recieved Packets/Bytes Per Flow  
-        verify_flowstats(self,match,packet_count=num_pkts)
+
+        # Verify the packet counter was updated
+        verify_flow_stats(self, match, pkts=num_pkts)
 
 
 class BytPerFlow(base_tests.SimpleDataPlane):
@@ -93,9 +93,9 @@
         byte_count = num_pkts*len(str(pkt))
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
-         
-        #Verify Recieved Packets/Bytes Per Flow  
-        verify_flowstats(self,match,byte_count=byte_count)
+
+        # Verify the byte counter was updated
+        verify_flow_stats(self, match, bytes=byte_count)
 
 
 class DurationPerFlow(base_tests.SimpleDataPlane):
diff --git a/tests/detailed_contr_sw_messages.py b/tests/detailed_contr_sw_messages.py
index 601cc72..4ca6a6b 100644
--- a/tests/detailed_contr_sw_messages.py
+++ b/tests/detailed_contr_sw_messages.py
@@ -140,7 +140,7 @@
         send_packet(self,pkt,of_ports[0],of_ports[1])
 
         # Verify Flow counters have incremented
-        verify_flowstats(self,match,byte_count=len(str(pkt)),packet_count=1)
+        verify_flow_stats(self, match, pkts=1, bytes=len(str(pkt)))
         
         #Send Identical flow 
         (pkt1,match1) = wildcard_all(self,of_ports)
@@ -149,7 +149,7 @@
         verify_tablestats(self,expect_active=1)
 
         # Verify Flow counters reset
-        verify_flowstats(self,match,byte_count=0,packet_count=0)
+        verify_flow_stats(self, match, pkts=0, bytes=0)
 
    
 class EmerFlowTimeout(base_tests.SimpleProtocol): 
@@ -265,7 +265,7 @@
         send_packet(self,pkt,of_ports[0],of_ports[1])
 
         #Verify flow counters
-        verify_flowstats(self,match,byte_count=len(str(pkt)),packet_count=1)
+        verify_flow_stats(self, match, pkts=1, bytes=len(str(pkt)))
 
         #Modify flow- 1 
         modify_flow_action(self,of_ports,match)
@@ -274,7 +274,7 @@
         send_packet(self,pkt,of_ports[0],of_ports[2])
         
         #Verify flow counters are preserved
-        verify_flowstats(self,match,byte_count=(2*len(str(pkt))),packet_count=2)
+        verify_flow_stats(self, match, pkts=2, bytes=len(str(pkt))*2)
 
 
 class StrictModifyAction(base_tests.SimpleDataPlane):
@@ -308,7 +308,7 @@
         send_packet(self,pkt,of_ports[0],of_ports[1])
 
         # Verify flow counters of the flow-1
-        verify_flowstats(self,match,byte_count=len(str(pkt)),packet_count=1)
+        verify_flow_stats(self, match, pkts=1, bytes=len(str(pkt)))
 
         # Strict-Modify flow- 1 
         strict_modify_flow_action(self,of_ports[2],match,priority=100)
@@ -317,7 +317,7 @@
         send_packet(self,pkt,of_ports[0],of_ports[2])
         
         # Verify flow counters are preserved
-        verify_flowstats(self,match,byte_count=(2*len(str(pkt))),packet_count=2)
+        verify_flow_stats(self, match, pkts=2, bytes=2*len(str(pkt)))
 
 
 class DeleteNonexistingFlow(base_tests.SimpleDataPlane):
