diff --git a/src/test/vsg/__init__.py b/src/test/vsg/__init__.py
index 082009e..8da76c4 100644
--- a/src/test/vsg/__init__.py
+++ b/src/test/vsg/__init__.py
@@ -15,7 +15,6 @@
 #
 import os,sys
 import logging
-from nose import main as nosetest_main
 logging.getLogger('scapy.runtime').setLevel(logging.ERROR)
 ##add the python path to lookup the utils
 working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
@@ -27,5 +26,7 @@
 __path__.append(subscriber_dir)
 cli_dir = os.path.join(working_dir, '../cli')
 __path__.append(cli_dir)
-from CordTestConfig import CordTestConfigRestore
-nosetest_main(addplugins = [ CordTestConfigRestore() ])
+
+#from nose import main as nosetest_main
+#from CordTestConfig import CordTestConfigRestore
+#nosetest_main(addplugins = [ CordTestConfigRestore() ])
diff --git a/src/test/vsg/vsgTest.py b/src/test/vsg/vsgTest.py
index 9748f27..777b664 100644
--- a/src/test/vsg/vsgTest.py
+++ b/src/test/vsg/vsgTest.py
@@ -393,22 +393,24 @@
         assert_not_equal(vcpe, None)
         assert_not_equal(self.vcpe_dhcp, None)
         #first get dhcp on the vcpe interface
-        vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
-        assert_not_equal(vcpe_ip, None)
-        log.info('Got DHCP IP %s for %s' %(vcpe_ip, self.vcpe_dhcp))
-        log.info('Sending ICMP pings to host %s' %(host))
-        st, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        assert_equal(st, 0)
-        #bring down the wan interface and check again
-        st = VSGAccess.vcpe_wan_down(vcpe)
-        assert_equal(st, True)
-        st_ping, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        st = VSGAccess.vcpe_wan_up(vcpe)
-        assert_not_equal(st_ping, 0)
-        assert_equal(st, True)
-        st, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        VSGAccess.restore_interface_config(mgmt, vcpe = self.vcpe_dhcp)
-        assert_equal(st, 0)
+        try:
+            vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
+            assert_not_equal(vcpe_ip, None)
+            log.info('Got DHCP IP %s for %s' %(vcpe_ip, self.vcpe_dhcp))
+            log.info('Sending ICMP pings to host %s' %(host))
+            st, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            assert_equal(st, 0)
+            #bring down the wan interface and check again
+            st = VSGAccess.vcpe_wan_down(vcpe)
+            assert_equal(st, True)
+            st_ping, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            st = VSGAccess.vcpe_wan_up(vcpe)
+            assert_not_equal(st_ping, 0)
+            assert_equal(st, True)
+            st, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            assert_equal(st, 0)
+        finally:
+            self.config_restore()
 
     def test_vsg_for_external_connectivity_with_lan_interface_toggle_in_vcpe(self):
         """
@@ -428,22 +430,24 @@
         assert_not_equal(vcpe, None)
         assert_not_equal(self.vcpe_dhcp, None)
         #first get dhcp on the vcpe interface
-        vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
-        assert_not_equal(vcpe_ip, None)
-        log.info('Got DHCP IP %s for %s' %(vcpe_ip, self.vcpe_dhcp))
-        log.info('Sending ICMP pings to host %s' %(host))
-        st, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        assert_equal(st, 0)
-        #bring down the lan interface and check again
-        st = VSGAccess.vcpe_lan_down(vcpe)
-        assert_equal(st, True)
-        st_ping, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        st = VSGAccess.vcpe_lan_up(vcpe)
-        assert_not_equal(st_ping, 0)
-        assert_equal(st, True)
-        st, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        VSGAccess.restore_interface_config(mgmt, vcpe = self.vcpe_dhcp)
-        assert_equal(st, 0)
+        try:
+            vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
+            assert_not_equal(vcpe_ip, None)
+            log.info('Got DHCP IP %s for %s' %(vcpe_ip, self.vcpe_dhcp))
+            log.info('Sending ICMP pings to host %s' %(host))
+            st, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            assert_equal(st, 0)
+            #bring down the lan interface and check again
+            st = VSGAccess.vcpe_lan_down(vcpe)
+            assert_equal(st, True)
+            st_ping, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            st = VSGAccess.vcpe_lan_up(vcpe)
+            assert_not_equal(st_ping, 0)
+            assert_equal(st, True)
+            st, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            assert_equal(st, 0)
+        finally:
+            self.config_restore()
 
     def test_vsg_firewall_with_deny_destination_ip(self, vcpe=None):
 	"""
@@ -461,18 +465,18 @@
             vcpe = self.vcpe_container
         vsg = VSGAccess.get_vcpe_vsg(vcpe)
         assert_not_equal(vsg, None)
-        vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
-        assert_not_equal(vcpe_ip, None)
-        st, _ = getstatusoutput('ping -c 1 {}'.format(host))
-        assert_equal(st, 0)
         try:
+            vcpe_ip = self.get_dhcp(self.vcpe_dhcp, mgmt = mgmt)
+            assert_not_equal(vcpe_ip, None)
+            st, _ = getstatusoutput('ping -c 1 {}'.format(host))
+            assert_equal(st, 0)
             st, _ = vsg.run_cmd('sudo docker exec {} iptables -I FORWARD -d {} -j DROP'.format(vcpe,host))
             st, _ = getstatusoutput('ping -c 1 {}'.format(host))
             assert_not_equal(st, 0)
         finally:
             vsg.run_cmd('sudo docker exec {} iptables -F'.format(vcpe))
             vsg.run_cmd('sudo docker exec {} iptables -X'.format(vcpe))
-            VSGAccess.restore_interface_config(mgmt, vcpe = self.vcpe_dhcp)
+            self.config_restore()
 
     def test_vsg_firewall_with_rule_add_and_delete_dest_ip(self, vcpe=None):
         """
