diff --git a/TestON/tests/HATestSanity/HATestSanity.params b/TestON/tests/HATestSanity/HATestSanity.params
index dad0fd7..e1e75f9 100644
--- a/TestON/tests/HATestSanity/HATestSanity.params
+++ b/TestON/tests/HATestSanity/HATestSanity.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>1,2,8,3,4,5,6,7,8,9,8,10,8,11,8,12,8,13</testcases>
+    <testcases>1,2,8,3,4,5,[6],7,8,4,9,8,4,10,8,4,11,8,4,12,8,4,13</testcases>
     <ENV>
     <cellName>HA</cellName>
     </ENV>
diff --git a/TestON/tests/HATestSanity/HATestSanity.py b/TestON/tests/HATestSanity/HATestSanity.py
index 8936578..03fcfe7 100644
--- a/TestON/tests/HATestSanity/HATestSanity.py
+++ b/TestON/tests/HATestSanity/HATestSanity.py
@@ -10,7 +10,7 @@
 CASE4: Ping across added host intents
 CASE5: Reading state of ONOS
 CASE6: The Failure case. Since this is the Sanity test, we do nothing.
-CASE7: Check state after failure
+CASE7: Check state after control plane failure
 CASE8: Compare topo
 CASE9: Link s3-s28 down
 CASE10: Link s3-s28 up
@@ -38,7 +38,7 @@
         onos-wait-for-start
         '''
         import time
-        main.log.report("ONOS HA Sanity test initialization")
+        main.log.report("ONOS HA Sanity test - initialization")
         main.case("Setting up test environment")
 
         # load some vairables from the params file
@@ -82,6 +82,14 @@
         main.step("Applying cell variable to environment")
         cell_result = main.ONOSbench.set_cell(cell_name)
         verify_result = main.ONOSbench.verify_cell()
+
+        main.ONOSbench.onos_stop(ONOS1_ip)
+        main.ONOSbench.onos_stop(ONOS2_ip)
+        main.ONOSbench.onos_stop(ONOS3_ip)
+        main.ONOSbench.onos_stop(ONOS4_ip)
+        main.ONOSbench.onos_stop(ONOS5_ip)
+        main.ONOSbench.onos_stop(ONOS6_ip)
+        main.ONOSbench.onos_stop(ONOS7_ip)
         #FIXME:this is short term fix 
         main.ONOSbench.onos_remove_raft_logs()
 
@@ -99,7 +107,7 @@
             if git_pull_result == main.TRUE:
                 clean_install_result = main.ONOSbench.clean_install()
             else:
-                main.log.report("Did not pull new code so skipping mvn "+ \
+                main.log.warn("Did not pull new code so skipping mvn "+ \
                         "clean install")
         main.ONOSbench.get_version(report=True)
 
@@ -148,12 +156,11 @@
         main.ONOScli6.start_onos_cli(ONOS6_ip)
         main.ONOScli7.start_onos_cli(ONOS7_ip)
 
-        #TODO: Enable once test is ready
-        #main.step("Start Packet Capture MN")
-        #main.Mininet2.start_tcpdump(
-        #        str(main.params['MNtcpdump']['folder'])+str(main.TEST)+"-MN.pcap",
-        #        intf = main.params['MNtcpdump']['intf'],
-        #        port = main.params['MNtcpdump']['port'])
+        main.step("Start Packet Capture MN")
+        main.Mininet2.start_tcpdump(
+                str(main.params['MNtcpdump']['folder'])+str(main.TEST)+"-MN.pcap",
+                intf = main.params['MNtcpdump']['intf'],
+                port = main.params['MNtcpdump']['port'])
 
 
         case1_result = (clean_install_result and package_result and
@@ -289,6 +296,9 @@
         """
         Ping across added host intents
         """
+        description = " Ping across added host intents"
+        main.log.report(description)
+        main.case(description)
         Ping_Result = main.TRUE
         for i in range(8,18):
             ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
@@ -301,9 +311,10 @@
         if Ping_Result==main.FALSE:
             main.log.report("Intents have not been installed correctly, pings failed.")
         if Ping_Result==main.TRUE:
-            main.log.report("Intents have been installed correctly, and verified by pings")
+            main.log.report("Intents have been installed correctly and verified by pings")
         utilities.assert_equals(expect = main.TRUE,actual=Ping_Result,
-                onpass="Intents have been installed correctly and pings work")
+                onpass="Intents have been installed correctly and pings work",
+                onfail ="Intents have not been installed correctly, pings failed." )
 
     def CASE5(self,main) :
         '''
@@ -592,10 +603,15 @@
         '''
         The Failure case. Since this is the Sanity test, we do nothing.
         '''
+        import time
+        time.sleep(60)
+        utilities.assert_equals(expect=main.TRUE, actual=main.TRUE,
+                onpass="Sleeping 60 seconds",
+                onfail="Something is terribly wrong with my math")
 
     def CASE7(self,main) :
         '''
-        Check state after failure
+        Check state after ONOS failure
         '''
         import os
         import json
@@ -643,8 +659,6 @@
         description2 = "Compare switch roles from before failure"
         main.step(description2)
 
-
-
         current_json = json.loads(ONOS1_mastership)
         old_json = json.loads(mastership_state)
         mastership_check = main.TRUE
@@ -982,6 +996,9 @@
         '''
         Clean up
         '''
+        description = "Test Cleanup"
+        main.log.report(description)
+        main.case(description)
         main.step("Killing tcpdumps")
         main.Mininet2.stop_tcpdump()
 
@@ -1017,3 +1034,8 @@
         main.ONOSbench.onos_stop(ONOS5_ip)
         main.ONOSbench.onos_stop(ONOS6_ip)
         main.ONOSbench.onos_stop(ONOS7_ip)
+
+        #TODO: actually check something here
+        utilities.assert_equals(expect=main.TRUE, actual=main.TRUE,
+                onpass="Test cleanup successful",
+                onfail="Test cleanup NOT successful")
