diff --git a/resources/static/dialog/controllers/pickemail_controller.js b/resources/static/dialog/controllers/pickemail_controller.js
index ce56f00714e23db9521762d2fd7b39cc6010e642..eda8675067f2cc817c7529d2451532bfaf7d1b78 100644
--- a/resources/static/dialog/controllers/pickemail_controller.js
+++ b/resources/static/dialog/controllers/pickemail_controller.js
@@ -42,7 +42,6 @@
       user = bid.User,
       errors = bid.Errors,
       storage = bid.Storage,
-      origin,
       body = $("body"),
       animationComplete = body.innerWidth() < 640,
       assertion;
@@ -138,8 +137,9 @@
 
     var valid = checkEmail.call(self, email);
     if (valid) {
-      storage.site.set(user.getOrigin(), "email", email);
-      storage.site.set(user.getOrigin(), "remember", $("#remember").is(":checked"));
+      var origin = user.getOrigin();
+      storage.site.set(origin, "email", email);
+      storage.site.set(origin, "remember", $("#remember").is(":checked"));
       getAssertion.call(self, email);
     }
   }
@@ -178,8 +178,7 @@
 
   PageController.extend("Pickemail", {}, {
     init: function(el, options) {
-      origin = options.origin;
-
+      var origin = user.getOrigin();
       this._super(el, {
         bodyTemplate: "pickemail.ejs",
         bodyVars: {
@@ -187,8 +186,8 @@
           // XXX ideal is to get rid of this and have a User function 
           // that takes care of getting email addresses AND the last used email 
           // for this site.
-          siteemail: storage.site.get(user.getOrigin(), "email"),
-          remember: storage.site.get(user.getOrigin(), "remember") || false
+          siteemail: storage.site.get(origin, "email"),
+          remember: storage.site.get(origin, "remember") || false
         }
       });
 
diff --git a/resources/static/dialog/test/funcunit/dialog_test.js b/resources/static/test/funcunit/dialog_test.js
similarity index 100%
rename from resources/static/dialog/test/funcunit/dialog_test.js
rename to resources/static/test/funcunit/dialog_test.js
diff --git a/resources/static/dialog/test/funcunit/funcunit.js b/resources/static/test/funcunit/funcunit.js
similarity index 100%
rename from resources/static/dialog/test/funcunit/funcunit.js
rename to resources/static/test/funcunit/funcunit.js
diff --git a/resources/static/dialog/qunit.html b/resources/static/test/qunit.html
similarity index 91%
rename from resources/static/dialog/qunit.html
rename to resources/static/test/qunit.html
index 83516e7fe76f21e5208a26ffa6f4d45c81cf2cdc..0a6a037b9b8cde7ca41a219ad777ff34b7d5afe1 100644
--- a/resources/static/dialog/qunit.html
+++ b/resources/static/test/qunit.html
@@ -1,13 +1,13 @@
 <html>
 	<head>
 		<link rel="stylesheet" type="text/css" href="/funcunit/qunit/qunit.css" />
-		<title>dialog QUnit Test</title>
+		<title>BrowserID QUnit Test</title>
 		<script type='text/javascript' src='/vepbundle'></script>
-		<script type='text/javascript' src='/steal/steal.js?/dialog/test/qunit'></script>
+		<script type='text/javascript' src='/steal/steal.js?/test/qunit'></script>
 	</head>
 	<body>
 
-		<h1 id="qunit-header">dialog Test Suite</h1>
+		<h1 id="qunit-header">BrowserID Test Suite</h1>
 		<h2 id="qunit-banner"></h2>
 		<div id="qunit-testrunner-toolbar"></div>
 		<h2 id="qunit-userAgent"></h2>
diff --git a/resources/static/dialog/test/qunit/controllers/authenticate_controller_unit_test.js b/resources/static/test/qunit/controllers/authenticate_controller_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/controllers/authenticate_controller_unit_test.js
rename to resources/static/test/qunit/controllers/authenticate_controller_unit_test.js
diff --git a/resources/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js b/resources/static/test/qunit/controllers/dialog_controller_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js
rename to resources/static/test/qunit/controllers/dialog_controller_unit_test.js
diff --git a/resources/static/dialog/test/qunit/controllers/page_controller_unit_test.js b/resources/static/test/qunit/controllers/page_controller_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/controllers/page_controller_unit_test.js
rename to resources/static/test/qunit/controllers/page_controller_unit_test.js
diff --git a/resources/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js b/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js
similarity index 82%
rename from resources/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js
rename to resources/static/test/qunit/controllers/pickemail_controller_unit_test.js
index 9d8daabe4d2356073ee8dc05ccf148caf2e69300..75390108f736adca6113bbde3c45e3913031aaed 100644
--- a/resources/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js
+++ b/resources/static/test/qunit/controllers/pickemail_controller_unit_test.js
@@ -39,7 +39,9 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
 
   var controller, 
       el = $("body"),
-      storage = BrowserID.Storage;
+      storage = BrowserID.Storage,
+      user = BrowserID.User,
+      testOrigin = "http://browserid.org";
 
   function reset() {
     el = $("#controller_head");
@@ -52,6 +54,7 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
     setup: function() {
       reset();
       storage.clear();
+      user.setOrigin(testOrigin);
     },
 
     teardown: function() {
@@ -67,9 +70,9 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
   test("pickemail controller with email associated with site", function() {
     storage.addEmail("testuser@testuser.com", {priv: "priv", pub: "pub"});
     storage.addEmail("testuser2@testuser.com", {priv: "priv", pub: "pub"});
-    storage.site.set("browserid.org", "email", "testuser2@testuser.com");
+    storage.site.set(testOrigin, "email", "testuser2@testuser.com");
 
-    controller = el.pickemail({origin: "browserid.org"}).controller();
+    controller = el.pickemail().controller();
     ok(controller, "controller created");
 
     var radioButton = $("input[type=radio]").eq(1);
@@ -82,7 +85,7 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
   test("pickemail controller without email associated with site", function() {
     storage.addEmail("testuser@testuser.com", {priv: "priv", pub: "pub"});
 
-    controller = el.pickemail({origin: "browserid.org"}).controller();
+    controller = el.pickemail().controller();
     ok(controller, "controller created");
 
     var radioButton = $("input[type=radio]").eq(0);
@@ -93,9 +96,9 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
   });
 
   function testRemember(remember) {
-    storage.site.set("browserid.org", "remember", remember);
+    storage.site.set(testOrigin, "remember", remember);
 
-    controller = el.pickemail({origin: "browserid.org"}).controller();
+    controller = el.pickemail().controller();
     ok(controller, "controller created");
 
     equal($("#remember").is(":checked"), remember, "appropriate checkbox check");
@@ -110,27 +113,27 @@ steal.plugins("jquery").then("/dialog/controllers/page_controller", "/dialog/con
   });
 
 
-  test("signIn saves email, remember", function() {
+  test("signIn saves email, remember status to storage", function() {
     storage.addEmail("testuser@testuser.com", {priv: "priv", pub: "pub"});
     storage.addEmail("testuser2@testuser.com", {priv: "priv", pub: "pub"});
 
-    controller = el.pickemail({origin: "browserid.org"}).controller();
+    controller = el.pickemail().controller();
 
     $("input[type=radio]").eq(1).click();
     $("#remember").attr("checked", true);
 
     controller.signIn();
 
-    equal(storage.site.get("browserid.org", "email"), "testuser2@testuser.com", "email saved correctly");
-    equal(storage.site.get("browserid.org", "remember"), true, "remember saved correctly");
+    equal(storage.site.get(testOrigin, "email"), "testuser2@testuser.com", "email saved correctly");
+    equal(storage.site.get(testOrigin, "remember"), true, "remember saved correctly");
 
     $("input[type=radio]").eq(0).click();
     $("#remember").removeAttr("checked");
 
     controller.signIn();
 
-    equal(storage.site.get("browserid.org", "email"), "testuser@testuser.com", "email saved correctly");
-    equal(storage.site.get("browserid.org", "remember"), false, "remember saved correctly");
+    equal(storage.site.get(testOrigin, "email"), "testuser@testuser.com", "email saved correctly");
+    equal(storage.site.get(testOrigin, "remember"), false, "remember saved correctly");
   });
 
 });
diff --git a/resources/static/dialog/test/qunit/dialog_test.js b/resources/static/test/qunit/dialog_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/dialog_test.js
rename to resources/static/test/qunit/dialog_test.js
diff --git a/resources/static/dialog/test/qunit/include_unit_test.js b/resources/static/test/qunit/include_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/include_unit_test.js
rename to resources/static/test/qunit/include_unit_test.js
diff --git a/resources/static/dialog/test/qunit/js/browserid_unit_test.js b/resources/static/test/qunit/js/browserid_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/js/browserid_unit_test.js
rename to resources/static/test/qunit/js/browserid_unit_test.js
diff --git a/resources/static/dialog/test/qunit/js/page_helpers_unit_test.js b/resources/static/test/qunit/js/page_helpers_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/js/page_helpers_unit_test.js
rename to resources/static/test/qunit/js/page_helpers_unit_test.js
diff --git a/resources/static/dialog/test/qunit/mocks/mocks.js b/resources/static/test/qunit/mocks/mocks.js
similarity index 100%
rename from resources/static/dialog/test/qunit/mocks/mocks.js
rename to resources/static/test/qunit/mocks/mocks.js
diff --git a/resources/static/dialog/test/qunit/mocks/xhr.js b/resources/static/test/qunit/mocks/xhr.js
similarity index 100%
rename from resources/static/dialog/test/qunit/mocks/xhr.js
rename to resources/static/test/qunit/mocks/xhr.js
diff --git a/resources/static/dialog/test/qunit/pages/add_email_address_test.js b/resources/static/test/qunit/pages/add_email_address_test.js
similarity index 96%
rename from resources/static/dialog/test/qunit/pages/add_email_address_test.js
rename to resources/static/test/qunit/pages/add_email_address_test.js
index f457a7425db4fc60b12fccc56aaa9e7996fdbb89..93d1863ed3eb89e23eefa38b1bbacc215ae9582a 100644
--- a/resources/static/dialog/test/qunit/pages/add_email_address_test.js
+++ b/resources/static/test/qunit/pages/add_email_address_test.js
@@ -34,7 +34,7 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
-steal.plugins("jquery").then("/dialog/test/qunit/mocks/xhr", "/dialog/resources/network", "/js/pages/add_email_address", function() {
+steal.plugins("jquery").then("/dialog/resources/network", "/js/pages/add_email_address", function() {
   "use strict";
 
   var bid = BrowserID,
diff --git a/resources/static/dialog/test/qunit/pages/forgot_unit_test.js b/resources/static/test/qunit/pages/forgot_unit_test.js
similarity index 96%
rename from resources/static/dialog/test/qunit/pages/forgot_unit_test.js
rename to resources/static/test/qunit/pages/forgot_unit_test.js
index ea45fed4411b9c4f4e2bcf001bc2c1724ee4286e..aa60225b7d3b09428a59f5e62116172c9ad1eb86 100644
--- a/resources/static/dialog/test/qunit/pages/forgot_unit_test.js
+++ b/resources/static/test/qunit/pages/forgot_unit_test.js
@@ -34,7 +34,7 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
-steal.plugins("jquery").then("/dialog/test/qunit/mocks/xhr", "/dialog/resources/network", "/dialog/resources/user", "/js/pages/forgot", function() {
+steal.plugins("jquery").then("/dialog/resources/network", "/dialog/resources/user", "/js/pages/forgot", function() {
   "use strict";
 
   var bid = BrowserID,
diff --git a/resources/static/dialog/test/qunit/pages/verify_email_address_test.js b/resources/static/test/qunit/pages/verify_email_address_test.js
similarity index 97%
rename from resources/static/dialog/test/qunit/pages/verify_email_address_test.js
rename to resources/static/test/qunit/pages/verify_email_address_test.js
index 306540fbd8a5ccb37050543520c9a1bc26430049..a38b9236b81dccd200d985039b26d7496187cae9 100644
--- a/resources/static/dialog/test/qunit/pages/verify_email_address_test.js
+++ b/resources/static/test/qunit/pages/verify_email_address_test.js
@@ -34,7 +34,7 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
-steal.plugins("jquery").then("/dialog/test/qunit/mocks/xhr", "/dialog/resources/network", "/js/pages/verify_email_address", function() {
+steal.plugins("jquery").then("/dialog/resources/network", "/js/pages/verify_email_address", function() {
   "use strict";
 
   var bid = BrowserID,
diff --git a/resources/static/dialog/test/qunit/qunit.js b/resources/static/test/qunit/qunit.js
similarity index 90%
rename from resources/static/dialog/test/qunit/qunit.js
rename to resources/static/test/qunit/qunit.js
index a0eb186337863c4843cd0c773c69f2ab92408082..84a12daeae1e12d7fd4e453f22eb57ca7aaa600d 100644
--- a/resources/static/dialog/test/qunit/qunit.js
+++ b/resources/static/test/qunit/qunit.js
@@ -1,12 +1,13 @@
 steal("/dialog/resources/browserid.js",
+      "/test/qunit/mocks/mocks.js",
+      "/test/qunit/mocks/xhr.js",
       "/dialog/resources/browser-support.js",
       "/dialog/resources/error-messages.js",
       "/dialog/resources/storage.js",
       "/dialog/resources/tooltip.js",
       "/dialog/resources/validation.js",
-      "/dialog/resources/underscore-min.js",
-      "/dialog/test/qunit/mocks/mocks.js",
-      "/dialog/test/qunit/mocks/xhr.js")
+      "/dialog/resources/underscore-min.js"
+      )
   .plugins(
     "jquery", 
     "jquery/controller",
diff --git a/resources/static/dialog/test/qunit/relay/relay_unit_test.js b/resources/static/test/qunit/relay/relay_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/relay/relay_unit_test.js
rename to resources/static/test/qunit/relay/relay_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/browser-support_unit_test.js b/resources/static/test/qunit/resources/browser-support_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/browser-support_unit_test.js
rename to resources/static/test/qunit/resources/browser-support_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/channel_unit_test.js b/resources/static/test/qunit/resources/channel_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/channel_unit_test.js
rename to resources/static/test/qunit/resources/channel_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/network_unit_test.js b/resources/static/test/qunit/resources/network_unit_test.js
similarity index 99%
rename from resources/static/dialog/test/qunit/resources/network_unit_test.js
rename to resources/static/test/qunit/resources/network_unit_test.js
index 25b95e2fca5adb2dad7aed5a001dbda30d96779a..cfd90f41d51b242263c573db20395d800c739f98 100644
--- a/resources/static/dialog/test/qunit/resources/network_unit_test.js
+++ b/resources/static/test/qunit/resources/network_unit_test.js
@@ -34,7 +34,7 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
-steal.plugins("jquery", "funcunit/qunit").then("/dialog/resources/network", "/dialog/test/qunit/mocks/xhr", function() {
+steal.plugins("jquery", "funcunit/qunit").then("/dialog/resources/network", function() {
   "use strict";
 
   var testName,
diff --git a/resources/static/dialog/test/qunit/resources/storage_unit_test.js b/resources/static/test/qunit/resources/storage_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/storage_unit_test.js
rename to resources/static/test/qunit/resources/storage_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/tooltip_unit_test.js b/resources/static/test/qunit/resources/tooltip_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/tooltip_unit_test.js
rename to resources/static/test/qunit/resources/tooltip_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/user_unit_test.js b/resources/static/test/qunit/resources/user_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/user_unit_test.js
rename to resources/static/test/qunit/resources/user_unit_test.js
diff --git a/resources/static/dialog/test/qunit/resources/validation_unit_test.js b/resources/static/test/qunit/resources/validation_unit_test.js
similarity index 100%
rename from resources/static/dialog/test/qunit/resources/validation_unit_test.js
rename to resources/static/test/qunit/resources/validation_unit_test.js