diff --git a/browserid/static/dialog/resources/browserid-identities.js b/browserid/static/dialog/resources/browserid-identities.js
index 75ea84e5b70e780b3abeb6121954410722ccc471..9ea8c24963d70cc1902d73f2d0e167504575f6a6 100644
--- a/browserid/static/dialog/resources/browserid-identities.js
+++ b/browserid/static/dialog/resources/browserid-identities.js
@@ -35,17 +35,24 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
-var jwk = require("./jwk");
-var jwt = require("./jwt");
-var vep = require("./vep");
-
 var BrowserIDIdentities = (function() {
+  var jwk, jwt, vep;
+  
+  function prepareDeps() {
+    if (!jwk) {
+      jwk= require("./jwk");
+      jwt = require("./jwt");
+      vep = require("./vep");
+    }
+  }
+
   "use strict";
   function getIssuedIdentities() {
       var emails = getEmails();
       var issued_identities = {};
       _(emails).each(function(email_obj, email_address) {
         try {
+          prepareDeps();
           email_obj.pub = jwk.PublicKey.fromSimpleObject(email_obj.pub);
         } catch (x) {
           delete emails[email_address];
@@ -147,6 +154,7 @@ var BrowserIDIdentities = (function() {
     stageIdentity: function(email, password, onSuccess, onFailure) {
       var self=this;
       // FIXME: keysize
+      prepareDeps();
       var keypair = jwk.KeyPair.generate(vep.params.algorithm, 64);
 
       self.stagedEmail = email;
@@ -271,6 +279,7 @@ var BrowserIDIdentities = (function() {
      */
     syncIdentity: function(email, onSuccess, onFailure) {
       // FIXME use true key sizes
+      prepareDeps();
       //var keypair = jwk.KeyPair.generate(vep.params.algorithm, vep.params.keysize);
       var keypair = jwk.KeyPair.generate(vep.params.algorithm, 64);
       Identities.certifyIdentity(email, keypair, onSuccess, onFailure);
@@ -288,6 +297,7 @@ var BrowserIDIdentities = (function() {
      */
     addIdentity: function(email, onSuccess, onFailure) {
       var self = this;
+      prepareDeps();
       var keypair = jwk.KeyPair.generate(vep.params.algorithm, 64);
 
       self.stagedEmail = email;
@@ -353,6 +363,7 @@ var BrowserIDIdentities = (function() {
 
       if (storedID) {
         // parse the secret key
+        prepareDeps();
         var sk = jwk.SecretKey.fromSimpleObject(storedID.priv);
         var tok = new jwt.JWT(null, new Date(), network.origin);
         assertion = vep.bundleCertsAndAssertion([storedID.cert], tok.sign(sk));
diff --git a/browserid/static/dialog/resources/storage.js b/browserid/static/dialog/resources/storage.js
index 8a57a426dc56bf8d9818d3f45a33143a3ab4fa10..e27f80da7e2701ee03c6790905d84d5bd15cdb40 100644
--- a/browserid/static/dialog/resources/storage.js
+++ b/browserid/static/dialog/resources/storage.js
@@ -33,57 +33,67 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
-var jwk = require("./jwk");
-
-var getEmails = function() {
-  try {
-    var emails = JSON.parse(window.localStorage.emails);
-    if (emails != null)
-      return emails;
-  } catch(e) {
-  }
+(function() {
+  
+  var jwk;
   
-  // if we had a problem parsing or the emails are null
-  clearEmails();
-  return {};
-};
+  function prepareDeps() {
+   if (!jwk) {
+     jwk = require("./jwk");
+   }
+  }
 
-var _storeEmails = function(emails) {
-  window.localStorage.emails = JSON.stringify(emails);
-};
+  window.getEmails = function() {
+    try {
+      var emails = JSON.parse(window.localStorage.emails);
+      if (emails != null)
+        return emails;
+    } catch(e) {
+    }
+    
+    // if we had a problem parsing or the emails are null
+    clearEmails();
+    return {};
+  };
 
-var addEmail = function(email, obj) {
-  var emails = getEmails();
-  emails[email] = obj;
-  _storeEmails(emails);
-};
+  var _storeEmails = function(emails) {
+    window.localStorage.emails = JSON.stringify(emails);
+  };
 
-var removeEmail = function(email) {
-  var emails = getEmails();
-  delete emails[email];
-  _storeEmails(emails);
-};
+  window.addEmail = function(email, obj) {
+    var emails = getEmails();
+    emails[email] = obj;
+    _storeEmails(emails);
+  };
 
-var clearEmails = function() {
-  _storeEmails({});
-};
+  window.removeEmail = function(email) {
+    var emails = getEmails();
+    delete emails[email];
+    _storeEmails(emails);
+  };
 
-var storeTemporaryKeypair = function(keypair) {
-  window.localStorage.tempKeypair = JSON.stringify({
-    publicKey: keypair.publicKey.toSimpleObject(),
-    secretKey: keypair.secretKey.toSimpleObject()
-  });
-};
+  window.clearEmails = function() {
+    _storeEmails({});
+  };
 
-var retrieveTemporaryKeypair = function() {
-  var raw_kp = JSON.parse(window.localStorage.tempKeypair);
-  window.localStorage.tempKeypair = null;
-  if (raw_kp) {
-    var kp = new jwk.KeyPair();
-    kp.publicKey = jwk.PublicKey.fromSimpleObject(raw_kp.publicKey);
-    kp.secretKey = jwk.SecretKey.fromSimpleObject(raw_kp.secretKey);
-    return kp;
-  } else {
-    return null;
-  }
-};
\ No newline at end of file
+  window.storeTemporaryKeypair = function(keypair) {
+    window.localStorage.tempKeypair = JSON.stringify({
+      publicKey: keypair.publicKey.toSimpleObject(),
+      secretKey: keypair.secretKey.toSimpleObject()
+    });
+  };
+
+  window.retrieveTemporaryKeypair = function() {
+    var raw_kp = JSON.parse(window.localStorage.tempKeypair);
+    window.localStorage.tempKeypair = null;
+    if (raw_kp) {
+      prepareDeps();
+      var kp = new jwk.KeyPair();
+      kp.publicKey = jwk.PublicKey.fromSimpleObject(raw_kp.publicKey);
+      kp.secretKey = jwk.SecretKey.fromSimpleObject(raw_kp.secretKey);
+      return kp;
+    } else {
+      return null;
+    }
+  };
+}());