diff --git a/tests/oft b/tests/oft
index c4b1491..f7b72f0 100755
--- a/tests/oft
+++ b/tests/oft
@@ -124,6 +124,8 @@
 import time
 import os
 
+import testutils
+
 try:
     import scapy.all as scapy
 except:
@@ -496,5 +498,11 @@
 if __name__ == "__main__":
     logging.info("*** TEST RUN START: " + time.asctime())
     unittest.TextTestRunner(verbosity=_verb).run(suite)
+    if testutils.skipped_test_count > 0:
+        ts = " tests"
+        if testutils.skipped_test_count == 1: ts = " test"
+        logging.info("Skipped " + str(testutils.skipped_test_count) + ts)
+        print("Skipped " + str(testutils.skipped_test_count) + ts)
     logging.info("*** TEST RUN END  : " + time.asctime())
+        
 
diff --git a/tests/pktact.py b/tests/pktact.py
index 7c3fcbb..c2d4a68 100644
--- a/tests/pktact.py
+++ b/tests/pktact.py
@@ -718,6 +718,7 @@
         flow_match_test(self, pa_port_map, wildcards=ofp.OFPFW_ALL, 
                         dl_vlan=vid)
 
+    
 class AddVLANTag(BaseMatchCase):
     """
     Add a VLAN tag to an untagged packet
@@ -726,7 +727,7 @@
         new_vid = 2
         sup_acts = supported_actions_get(self)
         if not(sup_acts & 1<<ofp.OFPAT_SET_VLAN_VID):
-            pa_logger.info("Skipping add VLAN tag test")
+            skip_message_emit(self, "Add VLAN tag test")
             return
 
         len = 100
@@ -779,7 +780,7 @@
         new_vid = 3
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_VLAN_VID):
-            pa_logger.info("Skipping modify VLAN tag test")
+            skip_message_emit(self, "Modify VLAN tag test")
             return
 
         pkt = simple_tcp_packet(dl_vlan_enable=True, dl_vlan=old_vid)
@@ -798,7 +799,7 @@
         old_vid = 2
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_STRIP_VLAN):
-            pa_logger.info("Skipping strip VLAN tag test")
+            skip_message_emit(self, "Strip VLAN tag test")
             return
 
         len_w_vid = 104
@@ -835,7 +836,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_DL_SRC):
-            pa_logger.info("Skipping ModifyL2Src test")
+            skip_message_emit(self, "ModifyL2Src test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['dl_src'],
@@ -850,7 +851,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_DL_DST):
-            pa_logger.info("Skipping ModifyL2Dst test")
+            skip_message_emit(self, "ModifyL2dst test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['dl_dst'],
@@ -865,7 +866,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_NW_SRC):
-            pa_logger.info("Skipping ModifyL3Src test")
+            skip_message_emit(self, "ModifyL3Src test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_src'],
@@ -880,7 +881,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_NW_DST):
-            pa_logger.info("Skipping ModifyL3Dst test")
+            skip_message_emit(self, "ModifyL3Dst test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_dst'],
@@ -895,7 +896,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_TP_SRC):
-            pa_logger.info("Skipping ModifyL4Src test")
+            skip_message_emit(self, "ModifyL4Src test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['tcp_sport'],
@@ -910,7 +911,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_TP_DST):
-            pa_logger.info("Skipping ModifyL4Dst test")
+            skip_message_emit(self, "ModifyL4Dst test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['tcp_dport'],
@@ -925,7 +926,7 @@
     def runTest(self):
         sup_acts = supported_actions_get(self)
         if not (sup_acts & 1 << ofp.OFPAT_SET_NW_TOS):
-            pa_logger.info("Skipping ModifyTOS test")
+            skip_message_emit(self, "ModifyTOS test")
             return
 
         (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_tos'],
diff --git a/tests/testutils.py b/tests/testutils.py
index 5e57aba..7c14537 100644
--- a/tests/testutils.py
+++ b/tests/testutils.py
@@ -19,6 +19,9 @@
 import logging
 import types
 
+global skipped_test_count
+skipped_test_count = 0
+
 # Some useful defines
 IP_ETHERTYPE = 0x800
 TCP_PROTOCOL = 0x6
@@ -665,3 +668,19 @@
 
     return (ingress_pkt, expected_pkt, new_actions)
         
+
+def skip_message_emit(parent, s):
+    """
+    Print out a 'skipped' message to stderr
+
+    @param s The string to print out to the log file
+    @param parent Must implement config and logger objects
+    """
+    global skipped_test_count
+
+    skipped_test_count += 1
+    parent.logger.info("Skipping: " + s)
+    if parent.config["dbg_level"] < logging.WARNING:
+        sys.stderr.write("(skipped) ")
+    else:
+        sys.stderr.write("(S)")
