diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index ae142d8..0ef9dc1 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -599,7 +599,7 @@
         matched_counter = matched-current_matched
         
         self.assertTrue(lookedup_counter==expect_lookup, "lookup counter is not incremented properly")
-        self.assertTrue(matched_counter==expect_lookup, "matched counter is not incremented properly")
+        self.assertTrue(matched_counter==expect_match, "matched counter is not incremented properly")
 
 def Verify_FlowStats(self,match,byte_count=0,packet_count=0):
     # Verify flow counters : byte_count and packet_count
diff --git a/tests/counters.py b/tests/counters.py
index b14c4c6..6a77049 100644
--- a/tests/counters.py
+++ b/tests/counters.py
@@ -62,6 +62,11 @@
         byte_count = num_pkts*len(str(pkt))
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
+
+        # FIXME: instead of sleeping, keep requesting flow stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
          
         #Verify Recieved Packets/Bytes Per Flow  
         Verify_FlowStats(self,match,byte_count=byte_count,packet_count=num_pkts)
@@ -168,6 +173,11 @@
         num_pkts = 5
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
+
+        # FIXME: instead of sleeping, keep requesting port stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
         
         #Verify recieved packet counters 
         Verify_PortStats1(self,of_ports[0],current_counter,num_pkts)
@@ -199,7 +209,7 @@
         
         # Send Port_Stats request for the ingress port (retrieve current counter state)
         port_stats_req = message.port_stats_request()
-        port_stats_req.port_no = of_ports[0]   
+        port_stats_req.port_no = of_ports[1]   
         response,pkt = self.controller.transact(port_stats_req)
         self.assertTrue(response is not None,"No response received for port stats request") 
         current_counter=0
@@ -211,9 +221,14 @@
         num_pkts = 5
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
+
+        # FIXME: instead of sleeping, keep requesting port stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
         
         #Verify transmitted_packet counters 
-        Verify_PortStats2(self,of_ports[0],current_counter,num_pkts)
+        Verify_PortStats2(self,of_ports[1],current_counter,num_pkts)
 
 
 class PortCounter3(base_tests.SimpleDataPlane):
@@ -255,6 +270,11 @@
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
 
+        # FIXME: instead of sleeping, keep requesting port stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
+
         
         #Verify recieved_bytes counters 
         Verify_PortStats3(self,of_ports[0],current_counter,byte_count)
@@ -285,7 +305,7 @@
 
         # Send Port_Stats request for the ingress port (retrieve current counter state)
         port_stats_req = message.port_stats_request()
-        port_stats_req.port_no = of_ports[0]   
+        port_stats_req.port_no = of_ports[1]   
         response,pkt = self.controller.transact(port_stats_req)
         self.assertTrue(response is not None,"No response received for port stats request") 
         current_counter=0
@@ -299,9 +319,14 @@
         for pkt_cnt in range(num_pkts):
             self.dataplane.send(of_ports[0],str(pkt))
 
+        # FIXME: instead of sleeping, keep requesting port stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
+
         
         #Verify trasmitted_bytes counters 
-        Verify_PortStats4(self,of_ports[0],current_counter,byte_count)
+        Verify_PortStats4(self,of_ports[1],current_counter,byte_count)
 
 
 class TableCounter1(base_tests.SimpleDataPlane):
@@ -378,6 +403,11 @@
         for pkt_cnt in range(num_sends):
             self.dataplane.send(of_ports[1],str(pkt))
 
+        # FIXME: instead of sleeping, keep requesting table stats until
+        # the expected queue counter increases or some large timeout is
+        # reached
+        time.sleep(2)
+
         #Verify lookup_count and matched_count counters.
         Verify_TableStats1(self,current_lookedup,current_matched,num_sends+num_sends2,num_sends)
 
@@ -474,7 +504,7 @@
                 (qs_after,p) = Get_QueueStats(self,egress_port,egress_queue_id)
 
                 #Verify transmitted packets counter is incremented in accordance
-                self.assertEqual(qs_after.stats[0].tx_bytes,qs_before.stats[0].tx_bytes + 1,"tx_bytes count incorrect")
+                self.assertEqual(qs_after.stats[0].tx_bytes,qs_before.stats[0].tx_bytes + len(str(pkt)),"tx_bytes count incorrect")
        
 
 
