diff --git a/src/test/utils/CordTestConfig.py b/src/test/utils/CordTestConfig.py
index fc4aafe..74c4889 100644
--- a/src/test/utils/CordTestConfig.py
+++ b/src/test/utils/CordTestConfig.py
@@ -3,6 +3,50 @@
 import json
 import os
 from nose.tools import assert_not_equal
+from nose.plugins import Plugin
+from CordTestUtils import log_test as log
+
+log.setLevel('INFO')
+
+class CordTestConfigRestore(Plugin):
+    name = 'cordTestConfigRestore'
+    context = None
+    restore_methods = ('configRestore', 'config_restore',)
+
+    def options(self, parser, env=os.environ):
+        super(CordTestConfigRestore, self).options(parser, env = env)
+
+    def configure(self, options, conf):
+        self.enabled = True
+
+    #just save the test case context on start
+    def startContext(self, context):
+        if inspect.isclass(context) and issubclass(context, unittest.TestCase):
+            if context.__name__.endswith('exchange'):
+                self.context = context
+
+    #reset the context on exit
+    def afterContext(self, context):
+        if inspect.isclass(context) and issubclass(context, unittest.TestCase):
+            if context.__name__.endswith('exchange'):
+                self.context = None
+
+    def doFailure(self, test, exception):
+        if self.context:
+            log.info('Inside test case failure for test: %s' %self.context.__name__)
+            for restore_method in self.restore_methods:
+                if hasattr(self.context, restore_method):
+                    method = getattr(self.context, restore_method)
+                    #check only for class/static methods
+                    if method.__self__ is self.context:
+                        method()
+                        break
+
+    def addError(self, test, exception):
+        self.doFailure(test, exception)
+
+    def addFailure(self, test, exception):
+        self.doFailure(test, exception)
 
 def setup_module(module):
     class_test = None
