diff --git a/tests/basic.py b/tests/basic.py
index 820a693..9110f1f 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -7,12 +7,12 @@
 
 Current Assumptions:
 
-  The oftest framework source is in ../src/python/oftest
-  Configuration of the platform and system is stored in oft_config in that dir
+  The function test_set_init is called with a complete configuration
+dictionary prior to the invocation of any tests from this file.
+
   The switch is actively attempting to contact the controller at the address
 indicated oin oft_config
 
-
 """
 
 import time
@@ -20,7 +20,6 @@
 import sys
 import logging
 
-import scapy.all as scapy
 import unittest
 
 import oftest.controller as controller
@@ -44,7 +43,6 @@
     Set up function for basic test classes
 
     @param config The configuration dictionary; see oft
-    @return TestSuite object for the class; may depend on config
     """
 
     global basic_port_map
@@ -154,15 +152,13 @@
         # Construct packet to send to dataplane
         # Send packet to dataplane, once to each port
         # Poll controller with expect message type packet in
-        # For now, a random packet from scapy tutorial
 
         rc = delete_all_flows(self.controller, basic_logger)
         self.assertEqual(rc, 0, "Failed to delete all flows")
 
         for of_port in basic_port_map.keys():
             basic_logger.info("PKT IN test, port " + str(of_port))
-            pkt = scapy.Ether()/scapy.IP(dst="www.slashdot.org")/scapy.TCP()/\
-                ("GET /index.html HTTP/1.0. port" + str(of_port))
+            pkt = simple_tcp_packet()
             self.dataplane.send(of_port, str(pkt))
             #@todo Check for unexpected messages?
             (response, raw) = self.controller.poll(ofp.OFPT_PACKET_IN, 2)
@@ -189,11 +185,12 @@
         # Construct packet to send to dataplane
         # Send packet to dataplane
         # Poll controller with expect message type packet in
-        # For now, a random packet from scapy tutorial
+
+        rc = delete_all_flows(self.controller, basic_logger)
+        self.assertEqual(rc, 0, "Failed to delete all flows")
 
         # These will get put into function
-        outpkt = scapy.Ether()/scapy.IP(dst="www.slashdot.org")/scapy.TCP()/\
-            "GET /index.html HTTP/1.0 \n\n"
+        outpkt = simple_tcp_packet()
         of_ports = basic_port_map.keys()
         of_ports.sort()
         for dp_port in of_ports:
@@ -224,11 +221,21 @@
     """
     def runTest(self):
         basic_logger.info("Running StatsGet")
+        basic_logger.info("Inserting trial flow")
+        request = message.flow_mod()
+        request.match.wildcards = ofp.OFPFW_ALL
+        request.buffer_id = 0xffffffff
+        rv = self.controller.message_send(request)
+        self.assertTrue(rv != -1, "Failed to insert test flow")
+        
+        basic_logger.info("Sending flow request")
         request = message.flow_stats_request()
         request.out_port = ofp.OFPP_NONE
-        request.match.wildcards = ofp.OFPFW_ALL
+        request.table_id = 0xff
+        request.match.wildcards = 0 # ofp.OFPFW_ALL
         response, pkt = self.controller.transact(request, timeout=2)
         self.assertTrue(response is not None, "Did not get response")
+        basic_logger.info(response.show())
 
 class FlowMod(SimpleProtocol):
     """
@@ -240,13 +247,10 @@
     def runTest(self):
         basic_logger.info("Running " + str(self))
         request = message.flow_mod()
-        of_ports = basic_port_map.keys()
-        of_ports.sort()
-        request.out_port = of_ports[0]
         request.match.wildcards = ofp.OFPFW_ALL
         request.buffer_id = 0xffffffff
         rv = self.controller.message_send(request)
-        self.assertTrue(rv != -1, "Did not get response")
-    
+        self.assertTrue(rv != -1, "Error installing flow mod")
+
 if __name__ == "__main__":
     print "Please run through oft script:  ./oft --test_spec=basic"
diff --git a/tests/testutils.py b/tests/testutils.py
index b4c9e28..6f8e0b4 100644
--- a/tests/testutils.py
+++ b/tests/testutils.py
@@ -1,16 +1,60 @@
 
+import scapy.all as scapy
+
 import oftest.controller as controller
 import oftest.cstruct as ofp
 import oftest.message as message
 import oftest.dataplane as dataplane
 import oftest.action as action
+import oftest.parse as parse
 import logging
 
-def delete_all_flows(controller, logger):
+def delete_all_flows(ctrl, logger):
+    """
+    Delete all flows on the switch
+    @param ctrl The controller object for the test
+    @param logger Logging object
+    """
+
     logger.info("Deleting all flows")
     msg = message.flow_mod()
     msg.match.wildcards = ofp.OFPFW_ALL
+    msg.out_port = ofp.OFPP_NONE
     msg.command = ofp.OFPFC_DELETE
     msg.buffer_id = 0xffffffff
-    return controller.message_send(msg)
-    
+    return ctrl.message_send(msg)
+
+def simple_tcp_packet(pktlen=100, 
+                      dl_dst='00:01:02:03:04:05',
+                      dl_src='00:06:07:08:09:0a',
+                      ip_src='192.168.0.1',
+                      ip_dst='192.168.0.2',
+                      tcp_sport=1234,
+                      tcp_dport=80
+                      ):
+    """
+    Return a simple dataplane TCP packet
+
+    Supports a few parameters:
+    @param len Length of packet in bytes w/o CRC
+    @param dl_dst Destinatino MAC
+    @param dl_src Source MAC
+    @param ip_src IP source
+    @param ip_dst IP destination
+    @param tcp_dport TCP destination port
+    @param ip_sport TCP source port
+
+    Generates a simple TCP request.  Users
+    shouldn't assume anything about this packet other than that
+    it is a valid ethernet/IP/TCP frame.
+    """
+    pkt = scapy.Ether(dst=dl_dst, src=dl_src)/ \
+        scapy.IP(src=ip_src, dst=ip_dst)/ \
+        scapy.TCP(sport=tcp_sport, dport=tcp_dport)
+    pkt = pkt/("D" * (pktlen - len(pkt)))
+
+    return pkt
+
+def do_barrier(ctrl):
+    b = message.barrier_request()
+    ctrl.transact(b)
