diff --git a/resources/static/dialog/controllers/dialog_controller.js b/resources/static/dialog/controllers/dialog_controller.js
index e2c7f3b9729aa2f3211e01d11eb6517df41d50d8..fce5176da52e6f42b8ee899bfc64951ae4c24c05 100644
--- a/resources/static/dialog/controllers/dialog_controller.js
+++ b/resources/static/dialog/controllers/dialog_controller.js
@@ -124,6 +124,7 @@
             bid.Storage.setStagedOnBehalfOf("");
             self.doCancel();
           }
+          window.teardownChannel();
         });
       },
 
diff --git a/resources/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js
index d98f44680cc76dcbf8887d0579b779ba7909256d..5e51e0e21ef80a63d1090851193e4bcf613ed194 100644
--- a/resources/static/dialog/resources/channel.js
+++ b/resources/static/dialog/resources/channel.js
@@ -110,6 +110,16 @@
       setupIFrameChannel(controller);
   }
 
+  function close() {
+    var frameWindow = getRelayWindow();
+    
+    if (frameWindow) {
+      frameWindow.BrowserID.Relay.unregisterClient();
+    }
+    else {
+      throw "relay frame not found";
+    }    
+  }
 
   function init(options) {
     onCompleteCallback = undefined;
@@ -139,7 +149,12 @@
        * @param {object} options - contains:
        * *   options.getVerifiedEmail {function} - function to /get
        */
-      open: open
+      open: open,
+
+      /**
+       * Close the channel
+       */
+      close: close
     };
   }
 
@@ -148,4 +163,5 @@
    * window.setupChannel;
    */
   window.setupChannel = open;
+  window.teardownChannel = close;
 }());
diff --git a/resources/static/relay/relay.js b/resources/static/relay/relay.js
index 2c434508d6f866eb6c97929c892d3b5dcadaccf1..73dd22d89f1a0e50cd2cd2a6cdfea23749d02a24 100644
--- a/resources/static/relay/relay.js
+++ b/resources/static/relay/relay.js
@@ -124,6 +124,10 @@
       forwardCall();
     }
 
+    function unregisterClient() {
+      registeredMethods = null;
+    }
+
     function getVerboseMessage(code) {
       var msgs = {
         "canceled": "user canceled selection",
@@ -157,7 +161,8 @@
        * Register a client to use the relay
        * @method registerClient
        */
-      registerClient: registerClient
+      registerClient: registerClient,
+      unregisterClient: unregisterClient
     };
   }());