diff --git a/bin/browserid b/bin/browserid
index d4fcfc3c749f7d8f8dceab1186c26ffadedcee1b..e1db01419e9a46588e9280758af75b5fdf11cfe9 100755
--- a/bin/browserid
+++ b/bin/browserid
@@ -8,7 +8,7 @@ const
 fs = require('fs'),
 path = require('path'),
 url = require('url'),
-http = require('http');
+http = require('http'),
 urlparse = require('urlparse'),
 express = require('express');
 
@@ -62,7 +62,7 @@ app.use(i18n.abide({
 
 var statsd_config = config.get('statsd');
 if (statsd_config && statsd_config.enabled) {
-  logger_statsd = require("connect-logger-statsd");
+  var logger_statsd = require("connect-logger-statsd");
   app.use(logger_statsd({
     host: statsd_config.hostname || "localhost",
     port: statsd_config.port || 8125,
@@ -157,7 +157,7 @@ db.open(config.get('database'), function (error) {
   // shut down express gracefully on SIGINT
   shutdown.handleTerminationSignals(app, function(readyForShutdownCB) {
     require('../lib/bcrypt.js').shutdown();
-    db.close(readyForShutdownCB)
+    db.close(readyForShutdownCB);
   });
 
   var bindTo = config.get('bind_to');
diff --git a/lib/static_resources.js b/lib/static_resources.js
index b994c3842d6b8abe2f939c53caf349150c4e521c..7a6863eab6dc14be472780fe7f44b08d8859fd97 100644
--- a/lib/static_resources.js
+++ b/lib/static_resources.js
@@ -16,60 +16,60 @@ var i18n = require('./i18n'),
 
 // Common to browserid.js dialog.js
 var common_js = [
-  '/lib/jquery-1.7.1.min.js',
-  '/lib/winchan.js',
-  '/lib/underscore.js',
-  '/lib/bidbundle.js',
-  '/lib/ejs.js',
-  '/lib/micrajax.js',
-  '/lib/urlparse.js',
-  '/shared/javascript-extensions.js',
+  '/common/js/lib/jquery-1.7.1.min.js',
+  '/common/js/lib/winchan.js',
+  '/common/js/lib/underscore.js',
+  '/common/js/lib/bidbundle.js',
+  '/common/js/lib/ejs.js',
+  '/common/js/lib/micrajax.js',
+  '/common/js/lib/urlparse.js',
+  '/common/js/javascript-extensions.js',
   '/i18n/:locale/client.json',
-  '/shared/gettext.js',
-  '/shared/browserid.js',
-  '/lib/hub.js',
-  '/lib/dom-jquery.js',
-  '/lib/module.js',
-  '/lib/jschannel.js',
-  '/shared/templates.js',
-  '/shared/renderer.js',
-  '/shared/class.js',
-  '/shared/mediator.js',
-  '/shared/tooltip.js',
-  '/shared/validation.js',
-  '/shared/helpers.js',
-  '/shared/screens.js',
-  '/shared/browser-support.js',
-  '/shared/enable_cookies_url.js',
-  '/shared/wait-messages.js',
-  '/shared/error-messages.js',
-  '/shared/error-display.js',
-  '/shared/storage.js',
-  '/shared/xhr_transport.js',
-  '/shared/xhr.js',
-  '/shared/network.js',
-  '/shared/provisioning.js',
-  '/shared/user.js',
-  '/shared/modules/page_module.js',
-  '/shared/modules/xhr_delay.js',
-  '/shared/modules/xhr_disable_form.js',
-  '/shared/modules/cookie_check.js',
-  '/shared/modules/development.js'
+  '/common/js/gettext.js',
+  '/common/js/browserid.js',
+  '/common/js/lib/hub.js',
+  '/common/js/lib/dom-jquery.js',
+  '/common/js/lib/module.js',
+  '/common/js/lib/jschannel.js',
+  '/common/js/templates.js',
+  '/common/js/renderer.js',
+  '/common/js/class.js',
+  '/common/js/mediator.js',
+  '/common/js/tooltip.js',
+  '/common/js/validation.js',
+  '/common/js/helpers.js',
+  '/common/js/screens.js',
+  '/common/js/browser-support.js',
+  '/common/js/enable_cookies_url.js',
+  '/common/js/wait-messages.js',
+  '/common/js/error-messages.js',
+  '/common/js/error-display.js',
+  '/common/js/storage.js',
+  '/common/js/xhr_transport.js',
+  '/common/js/xhr.js',
+  '/common/js/network.js',
+  '/common/js/provisioning.js',
+  '/common/js/user.js',
+  '/common/js/modules/page_module.js',
+  '/common/js/modules/xhr_delay.js',
+  '/common/js/modules/xhr_disable_form.js',
+  '/common/js/modules/cookie_check.js',
+  '/common/js/modules/development.js'
 ];
 
 var browserid_min_js = '/production/:locale/browserid.js';
 var browserid_js = und.flatten([
   common_js,
   [
-    '/pages/page_helpers.js',
-    '/pages/index.js',
-    '/pages/start.js',
-    '/pages/verify_secondary_address.js',
-    '/pages/forgot.js',
-    '/pages/manage_account.js',
-    '/pages/signin.js',
-    '/pages/signup.js',
-    '/pages/about.js'
+    '/pages/js/page_helpers.js',
+    '/pages/js/index.js',
+    '/pages/js/start.js',
+    '/pages/js/verify_secondary_address.js',
+    '/pages/js/forgot.js',
+    '/pages/js/manage_account.js',
+    '/pages/js/signin.js',
+    '/pages/js/signup.js',
+    '/pages/js/about.js'
   ]
 ]);
 
@@ -77,76 +77,76 @@ var dialog_min_js = '/production/:locale/dialog.js';
 var dialog_js = und.flatten([
   common_js,
   [
-    '/shared/command.js',
-    '/shared/history.js',
-    '/shared/state_machine.js',
+    '/common/js/command.js',
+    '/common/js/history.js',
+    '/common/js/state_machine.js',
 
-    '/shared/models/models.js',
-    '/shared/models/interaction_data.js',
+    '/common/js/models/models.js',
+    '/common/js/models/interaction_data.js',
 
-    '/shared/modules/interaction_data.js',
+    '/common/js/modules/interaction_data.js',
 
-    '/dialog/resources/internal_api.js',
-    '/dialog/resources/helpers.js',
-    '/dialog/resources/state.js',
-    '/dialog/resources/screen_size_hacks.js',
+    '/dialog/js/misc/internal_api.js',
+    '/dialog/js/misc/helpers.js',
+    '/dialog/js/misc/state.js',
+    '/dialog/js/misc/screen_size_hacks.js',
 
-    '/dialog/controllers/actions.js',
-    '/dialog/controllers/dialog.js',
-    '/dialog/controllers/authenticate.js',
-    '/dialog/controllers/check_registration.js',
-    '/dialog/controllers/pick_email.js',
-    '/dialog/controllers/add_email.js',
-    '/dialog/controllers/required_email.js',
-    '/dialog/controllers/verify_primary_user.js',
-    '/dialog/controllers/provision_primary_user.js',
-    '/dialog/controllers/primary_user_provisioned.js',
-    '/dialog/controllers/generate_assertion.js',
-    '/dialog/controllers/is_this_your_computer.js',
-    '/dialog/controllers/set_password.js',
-    '/dialog/controllers/rp_info.js',
-    '/dialog/start.js'
+    '/dialog/js/modules/actions.js',
+    '/dialog/js/modules/dialog.js',
+    '/dialog/js/modules/authenticate.js',
+    '/dialog/js/modules/check_registration.js',
+    '/dialog/js/modules/pick_email.js',
+    '/dialog/js/modules/add_email.js',
+    '/dialog/js/modules/required_email.js',
+    '/dialog/js/modules/verify_primary_user.js',
+    '/dialog/js/modules/provision_primary_user.js',
+    '/dialog/js/modules/primary_user_provisioned.js',
+    '/dialog/js/modules/generate_assertion.js',
+    '/dialog/js/modules/is_this_your_computer.js',
+    '/dialog/js/modules/set_password.js',
+    '/dialog/js/modules/rp_info.js',
+    '/dialog/js/start.js'
   ]]);
 
 exports.resources = {
   '/production/dialog.css': [
-    '/fonts/fonts_common.css',
-    '/fonts/fonts_dialog.css',
-    '/css/common.css',
-    '/dialog/css/popup.css',
+    '/common/fonts/fonts_common.css',
+    '/common/fonts/fonts_dialog.css',
+    '/common/css/style.css',
+    '/dialog/css/style.css',
     '/dialog/css/m.css'
   ],
   '/production/browserid.css': [
-    '/fonts/fonts_common.css',
-    '/fonts/fonts_mainsite.css',
-    '/css/common.css',
-    '/css/style.css',
-    '/css/m.css'
+    '/common/fonts/fonts_common.css',
+    '/common/fonts/fonts_pages.css',
+    '/common/css/style.css',
+    '/pages/css/style.css',
+    '/pages/css/m.css'
   ],
   '/production/ie8_main.css': [
-    '/css/ie8_common.css',
-    '/css/ie8_main.css'
+    '/common/css/ie8.css',
+    '/pages/css/ie8.css'
   ],
   '/production/ie8_dialog.css': [
-    '/css/ie8_common.css',
+    '/common/css/ie8.css',
     '/dialog/css/ie8.css'
   ],
   '/production/communication_iframe.js': [
-    '/lib/jschannel.js',
-    '/lib/winchan.js',
-    '/lib/underscore.js',
-    '/lib/bidbundle.js',
-    '/lib/hub.js',
-    '/lib/micrajax.js',
-    '/shared/javascript-extensions.js',
-    '/shared/browserid.js',
-    '/shared/mediator.js',
-    '/shared/helpers.js',
-    '/shared/storage.js',
-    '/shared/xhr_transport.js',
-    '/shared/xhr.js',
-    '/shared/network.js',
-    '/shared/user.js',
+    '/common/js/lib/jschannel.js',
+    '/common/js/lib/winchan.js',
+    '/common/js/lib/underscore.js',
+    '/common/js/lib/bidbundle.js',
+    '/common/js/lib/hub.js',
+    '/common/js/lib/micrajax.js',
+    '/common/js/javascript-extensions.js',
+    '/common/js/browserid.js',
+    '/common/js/mediator.js',
+    '/common/js/helpers.js',
+    '/common/js/storage.js',
+    '/common/js/xhr_transport.js',
+    '/common/js/xhr.js',
+    '/common/js/network.js',
+    '/common/js/user.js',
     '/communication_iframe/start.js'
   ],
   '/production/include.js': [
diff --git a/resources/static/css/ie8_common.css b/resources/static/common/css/ie8.css
similarity index 93%
rename from resources/static/css/ie8_common.css
rename to resources/static/common/css/ie8.css
index 99542f340d34480b5971bded5ad332c48bcfe6f0..c8ed84860842d538cb1764ae57d3d2d1c60109ac 100644
--- a/resources/static/css/ie8_common.css
+++ b/resources/static/common/css/ie8.css
@@ -11,7 +11,7 @@
 .submit button:focus,
 .submit .button:hover,
 .submit .button:focus {
-    background-image: url("/i/button-arrow.png");
+    background-image: url("/common/i/button-arrow.png");
     background-position: center right;
     background-repeat: no-repeat;
 }
diff --git a/resources/static/css/common.css b/resources/static/common/css/style.css
similarity index 83%
rename from resources/static/css/common.css
rename to resources/static/common/css/style.css
index 2cb6dbf41f259670449f1332b68b9ec3a750b6a0..c29a95bffb2b1b82c387529fbe41b5b656a71e2f 100644
--- a/resources/static/css/common.css
+++ b/resources/static/common/css/style.css
@@ -209,13 +209,13 @@ button::-moz-focus-inner, .button::-moz-focus-inner {
 .submit button {
     padding: 6px 45px 7px 10px;
     background-color: #4eb5e5;
-    background-image: url("/i/button-arrow.png");
-    background-image: url("/i/button-arrow.png"), -webkit-gradient(linear, left top, left bottom, from(#4eb5e5), to(#3196cf));
-    background-image: url("/i/button-arrow.png"), -webkit-linear-gradient(top, #4eb5e5, #3196cf);
-    background-image: url("/i/button-arrow.png"),    -moz-linear-gradient(top, #4eb5e5, #3196cf);
-    background-image: url("/i/button-arrow.png"),     -ms-linear-gradient(top, #4eb5e5, #3196cf);
-    background-image: url("/i/button-arrow.png"),      -o-linear-gradient(top, #4eb5e5, #3196cf);
-    background-image: url("/i/button-arrow.png"),         linear-gradient(top, #4eb5e5, #3196cf);
+    background-image: url("/common/i/button-arrow.png");
+    background-image: url("/common/i/button-arrow.png"), -webkit-gradient(linear, left top, left bottom, from(#4eb5e5), to(#3196cf));
+    background-image: url("/common/i/button-arrow.png"), -webkit-linear-gradient(top, #4eb5e5, #3196cf);
+    background-image: url("/common/i/button-arrow.png"),    -moz-linear-gradient(top, #4eb5e5, #3196cf);
+    background-image: url("/common/i/button-arrow.png"),     -ms-linear-gradient(top, #4eb5e5, #3196cf);
+    background-image: url("/common/i/button-arrow.png"),      -o-linear-gradient(top, #4eb5e5, #3196cf);
+    background-image: url("/common/i/button-arrow.png"),         linear-gradient(top, #4eb5e5, #3196cf);
     background-repeat: no-repeat, no-repeat;
     background-position: center right, center;
 }
@@ -226,13 +226,13 @@ button::-moz-focus-inner, .button::-moz-focus-inner {
 .submit .button:hover,
 .submit .button:focus {
     background-color: #43a6e2;
-    background-image: url("/i/button-arrow.png");
-    background-image: url("/i/button-arrow.png"), -webkit-gradient(linear, left top, left bottom, from(#43a6e2), to(#277ac1));
-    background-image: url("/i/button-arrow.png"), -webkit-linear-gradient(top, #43a6e2, #277ac1);
-    background-image: url("/i/button-arrow.png"),    -moz-linear-gradient(top, #43a6e2, #277ac1);
-    background-image: url("/i/button-arrow.png"),     -ms-linear-gradient(top, #43a6e2, #277ac1);
-    background-image: url("/i/button-arrow.png"),      -o-linear-gradient(top, #43a6e2, #277ac1);
-    background-image: url("/i/button-arrow.png"),         linear-gradient(top, #43a6e2, #277ac1);
+    background-image: url("/common/i/button-arrow.png");
+    background-image: url("/common/i/button-arrow.png"), -webkit-gradient(linear, left top, left bottom, from(#43a6e2), to(#277ac1));
+    background-image: url("/common/i/button-arrow.png"), -webkit-linear-gradient(top, #43a6e2, #277ac1);
+    background-image: url("/common/i/button-arrow.png"),    -moz-linear-gradient(top, #43a6e2, #277ac1);
+    background-image: url("/common/i/button-arrow.png"),     -ms-linear-gradient(top, #43a6e2, #277ac1);
+    background-image: url("/common/i/button-arrow.png"),      -o-linear-gradient(top, #43a6e2, #277ac1);
+    background-image: url("/common/i/button-arrow.png"),         linear-gradient(top, #43a6e2, #277ac1);
 }
 
 button[disabled], .submit_disabled button, .submit_disabled .button,
@@ -369,12 +369,12 @@ footer .help {
 
 #wait, #delay, #error {
   background-color: #dadee1;
-  background-image: url("/i/grain.png"), -webkit-gradient(linear, left top, left bottom, from(#dadee1), to(#c7ccd0));
-  background-image: url("/i/grain.png"), -webkit-linear-gradient(top, #dadee1, #c7ccd0);
-  background-image: url("/i/grain.png"),    -moz-linear-gradient(top, #dadee1, #c7ccd0);
-  background-image: url("/i/grain.png"),     -ms-linear-gradient(top, #dadee1, #c7ccd0);
-  background-image: url("/i/grain.png"),      -o-linear-gradient(top, #dadee1, #c7ccd0);
-  background-image: url("/i/grain.png"),         linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/common/i/grain.png"), -webkit-gradient(linear, left top, left bottom, from(#dadee1), to(#c7ccd0));
+  background-image: url("/common/i/grain.png"), -webkit-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/common/i/grain.png"),    -moz-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/common/i/grain.png"),     -ms-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/common/i/grain.png"),      -o-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/common/i/grain.png"),         linear-gradient(top, #dadee1, #c7ccd0);
 }
 
 #wait, #delay {
diff --git a/resources/static/fonts/LICENSE.txt b/resources/static/common/fonts/LICENSE.txt
similarity index 100%
rename from resources/static/fonts/LICENSE.txt
rename to resources/static/common/fonts/LICENSE.txt
diff --git a/resources/static/fonts/OpenSans-Bold.eot b/resources/static/common/fonts/OpenSans-Bold.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-Bold.eot
rename to resources/static/common/fonts/OpenSans-Bold.eot
diff --git a/resources/static/fonts/OpenSans-Bold.ttf b/resources/static/common/fonts/OpenSans-Bold.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-Bold.ttf
rename to resources/static/common/fonts/OpenSans-Bold.ttf
diff --git a/resources/static/fonts/OpenSans-Bold.woff b/resources/static/common/fonts/OpenSans-Bold.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-Bold.woff
rename to resources/static/common/fonts/OpenSans-Bold.woff
diff --git a/resources/static/fonts/OpenSans-BoldItalic.eot b/resources/static/common/fonts/OpenSans-BoldItalic.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-BoldItalic.eot
rename to resources/static/common/fonts/OpenSans-BoldItalic.eot
diff --git a/resources/static/fonts/OpenSans-BoldItalic.ttf b/resources/static/common/fonts/OpenSans-BoldItalic.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-BoldItalic.ttf
rename to resources/static/common/fonts/OpenSans-BoldItalic.ttf
diff --git a/resources/static/fonts/OpenSans-BoldItalic.woff b/resources/static/common/fonts/OpenSans-BoldItalic.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-BoldItalic.woff
rename to resources/static/common/fonts/OpenSans-BoldItalic.woff
diff --git a/resources/static/fonts/OpenSans-Italic.eot b/resources/static/common/fonts/OpenSans-Italic.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-Italic.eot
rename to resources/static/common/fonts/OpenSans-Italic.eot
diff --git a/resources/static/fonts/OpenSans-Italic.ttf b/resources/static/common/fonts/OpenSans-Italic.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-Italic.ttf
rename to resources/static/common/fonts/OpenSans-Italic.ttf
diff --git a/resources/static/fonts/OpenSans-Italic.woff b/resources/static/common/fonts/OpenSans-Italic.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-Italic.woff
rename to resources/static/common/fonts/OpenSans-Italic.woff
diff --git a/resources/static/fonts/OpenSans-Light.eot b/resources/static/common/fonts/OpenSans-Light.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-Light.eot
rename to resources/static/common/fonts/OpenSans-Light.eot
diff --git a/resources/static/fonts/OpenSans-Light.ttf b/resources/static/common/fonts/OpenSans-Light.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-Light.ttf
rename to resources/static/common/fonts/OpenSans-Light.ttf
diff --git a/resources/static/fonts/OpenSans-Light.woff b/resources/static/common/fonts/OpenSans-Light.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-Light.woff
rename to resources/static/common/fonts/OpenSans-Light.woff
diff --git a/resources/static/fonts/OpenSans-LightItalic.eot b/resources/static/common/fonts/OpenSans-LightItalic.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-LightItalic.eot
rename to resources/static/common/fonts/OpenSans-LightItalic.eot
diff --git a/resources/static/fonts/OpenSans-LightItalic.ttf b/resources/static/common/fonts/OpenSans-LightItalic.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-LightItalic.ttf
rename to resources/static/common/fonts/OpenSans-LightItalic.ttf
diff --git a/resources/static/fonts/OpenSans-LightItalic.woff b/resources/static/common/fonts/OpenSans-LightItalic.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-LightItalic.woff
rename to resources/static/common/fonts/OpenSans-LightItalic.woff
diff --git a/resources/static/fonts/OpenSans-Regular.eot b/resources/static/common/fonts/OpenSans-Regular.eot
similarity index 100%
rename from resources/static/fonts/OpenSans-Regular.eot
rename to resources/static/common/fonts/OpenSans-Regular.eot
diff --git a/resources/static/fonts/OpenSans-Regular.ttf b/resources/static/common/fonts/OpenSans-Regular.ttf
similarity index 100%
rename from resources/static/fonts/OpenSans-Regular.ttf
rename to resources/static/common/fonts/OpenSans-Regular.ttf
diff --git a/resources/static/fonts/OpenSans-Regular.woff b/resources/static/common/fonts/OpenSans-Regular.woff
similarity index 100%
rename from resources/static/fonts/OpenSans-Regular.woff
rename to resources/static/common/fonts/OpenSans-Regular.woff
diff --git a/resources/static/common/fonts/fonts_common.css b/resources/static/common/fonts/fonts_common.css
new file mode 100644
index 0000000000000000000000000000000000000000..b00de80c43026259809ad4440d73568ec5cddf7f
--- /dev/null
+++ b/resources/static/common/fonts/fonts_common.css
@@ -0,0 +1,33 @@
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: url('/common/fonts/OpenSans-Regular.eot');
+  src: local('Open Sans'),
+       local('OpenSans'),
+       url('/common/fonts/OpenSans-Regular.eot') format('embedded-opentype'),
+       url('/common/fonts/OpenSans-Regular.woff') format('woff'),
+       url('/common/fonts/OpenSans-Regular.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: url('/common/fonts/OpenSans-Light.eot');
+  src: local('Open Sans Light'),
+       local('OpenSans-Light'),
+       url('/common/fonts/OpenSans-Light.eot') format('embedded-opentype'),
+       url('/common/fonts/OpenSans-Light.woff') format('woff'),
+       url('/common/fonts/OpenSans-Light.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: url('/common/fonts/OpenSans-Bold.eot');
+  src: local('Open Sans Bold'),
+       local('OpenSans-Bold'),
+       url('/common/fonts/OpenSans-Bold.eot') format('embedded-opentype'),
+       url('/common/fonts/OpenSans-Bold.woff') format('woff'),
+       url('/common/fonts/OpenSans-Bold.ttf') format('truetype');
+}
diff --git a/resources/static/fonts/fonts_dialog.css b/resources/static/common/fonts/fonts_dialog.css
similarity index 100%
rename from resources/static/fonts/fonts_dialog.css
rename to resources/static/common/fonts/fonts_dialog.css
diff --git a/resources/static/common/fonts/fonts_pages.css b/resources/static/common/fonts/fonts_pages.css
new file mode 100644
index 0000000000000000000000000000000000000000..e2629c17da3d691d54497910e9b8a96f2707aba8
--- /dev/null
+++ b/resources/static/common/fonts/fonts_pages.css
@@ -0,0 +1,12 @@
+@font-face {
+  font-family: 'Open Sans';
+  font-style: italic;
+  font-weight: 400;
+  src: url('/common/fonts/OpenSans-Italic.eot');
+  src: local('Open Sans Italic'),
+       local('OpenSans-Italic'),
+       url('/common/fonts/OpenSans-Italic.eot') format('embedded-opentype'),
+       url('/common/fonts/OpenSans-Italic.woff') format('woff'),
+       url('/common/fonts/OpenSans-Italic.ttf') format('truetype');
+}
+
diff --git a/resources/static/i/button-arrow.png b/resources/static/common/i/button-arrow.png
similarity index 100%
rename from resources/static/i/button-arrow.png
rename to resources/static/common/i/button-arrow.png
diff --git a/resources/static/i/grain.png b/resources/static/common/i/grain.png
similarity index 100%
rename from resources/static/i/grain.png
rename to resources/static/common/i/grain.png
diff --git a/resources/static/shared/browser-support.js b/resources/static/common/js/browser-support.js
similarity index 100%
rename from resources/static/shared/browser-support.js
rename to resources/static/common/js/browser-support.js
diff --git a/resources/static/shared/browserid.js b/resources/static/common/js/browserid.js
similarity index 100%
rename from resources/static/shared/browserid.js
rename to resources/static/common/js/browserid.js
diff --git a/resources/static/shared/class.js b/resources/static/common/js/class.js
similarity index 100%
rename from resources/static/shared/class.js
rename to resources/static/common/js/class.js
diff --git a/resources/static/shared/command.js b/resources/static/common/js/command.js
similarity index 100%
rename from resources/static/shared/command.js
rename to resources/static/common/js/command.js
diff --git a/resources/static/shared/enable_cookies_url.js b/resources/static/common/js/enable_cookies_url.js
similarity index 100%
rename from resources/static/shared/enable_cookies_url.js
rename to resources/static/common/js/enable_cookies_url.js
diff --git a/resources/static/shared/error-display.js b/resources/static/common/js/error-display.js
similarity index 100%
rename from resources/static/shared/error-display.js
rename to resources/static/common/js/error-display.js
diff --git a/resources/static/shared/error-messages.js b/resources/static/common/js/error-messages.js
similarity index 100%
rename from resources/static/shared/error-messages.js
rename to resources/static/common/js/error-messages.js
diff --git a/resources/static/shared/gettext.js b/resources/static/common/js/gettext.js
similarity index 100%
rename from resources/static/shared/gettext.js
rename to resources/static/common/js/gettext.js
diff --git a/resources/static/shared/helpers.js b/resources/static/common/js/helpers.js
similarity index 100%
rename from resources/static/shared/helpers.js
rename to resources/static/common/js/helpers.js
diff --git a/resources/static/shared/history.js b/resources/static/common/js/history.js
similarity index 100%
rename from resources/static/shared/history.js
rename to resources/static/common/js/history.js
diff --git a/resources/static/shared/javascript-extensions.js b/resources/static/common/js/javascript-extensions.js
similarity index 100%
rename from resources/static/shared/javascript-extensions.js
rename to resources/static/common/js/javascript-extensions.js
diff --git a/resources/static/lib/base64.js b/resources/static/common/js/lib/base64.js
similarity index 100%
rename from resources/static/lib/base64.js
rename to resources/static/common/js/lib/base64.js
diff --git a/resources/static/common/js/lib/bidbundle.js b/resources/static/common/js/lib/bidbundle.js
new file mode 120000
index 0000000000000000000000000000000000000000..00c7194bcdfbd8c359d6471c712c07c53bf442b0
--- /dev/null
+++ b/resources/static/common/js/lib/bidbundle.js
@@ -0,0 +1 @@
+../../../../../node_modules/jwcrypto/bidbundle.js
\ No newline at end of file
diff --git a/resources/static/lib/dom-jquery.js b/resources/static/common/js/lib/dom-jquery.js
similarity index 100%
rename from resources/static/lib/dom-jquery.js
rename to resources/static/common/js/lib/dom-jquery.js
diff --git a/resources/static/lib/ejs.js b/resources/static/common/js/lib/ejs.js
similarity index 100%
rename from resources/static/lib/ejs.js
rename to resources/static/common/js/lib/ejs.js
diff --git a/resources/static/lib/highlight.js b/resources/static/common/js/lib/highlight.js
similarity index 100%
rename from resources/static/lib/highlight.js
rename to resources/static/common/js/lib/highlight.js
diff --git a/resources/static/lib/html5shim.js b/resources/static/common/js/lib/html5shim.js
similarity index 100%
rename from resources/static/lib/html5shim.js
rename to resources/static/common/js/lib/html5shim.js
diff --git a/resources/static/lib/hub.js b/resources/static/common/js/lib/hub.js
similarity index 100%
rename from resources/static/lib/hub.js
rename to resources/static/common/js/lib/hub.js
diff --git a/resources/static/lib/jquery-1.7.1.min.js b/resources/static/common/js/lib/jquery-1.7.1.min.js
similarity index 100%
rename from resources/static/lib/jquery-1.7.1.min.js
rename to resources/static/common/js/lib/jquery-1.7.1.min.js
diff --git a/resources/static/lib/jschannel.js b/resources/static/common/js/lib/jschannel.js
similarity index 100%
rename from resources/static/lib/jschannel.js
rename to resources/static/common/js/lib/jschannel.js
diff --git a/resources/static/lib/json2.js b/resources/static/common/js/lib/json2.js
similarity index 100%
rename from resources/static/lib/json2.js
rename to resources/static/common/js/lib/json2.js
diff --git a/resources/static/lib/micrajax.js b/resources/static/common/js/lib/micrajax.js
similarity index 100%
rename from resources/static/lib/micrajax.js
rename to resources/static/common/js/lib/micrajax.js
diff --git a/resources/static/lib/module.js b/resources/static/common/js/lib/module.js
similarity index 100%
rename from resources/static/lib/module.js
rename to resources/static/common/js/lib/module.js
diff --git a/resources/static/lib/underscore.js b/resources/static/common/js/lib/underscore.js
similarity index 100%
rename from resources/static/lib/underscore.js
rename to resources/static/common/js/lib/underscore.js
diff --git a/resources/static/lib/urlparse.js b/resources/static/common/js/lib/urlparse.js
similarity index 100%
rename from resources/static/lib/urlparse.js
rename to resources/static/common/js/lib/urlparse.js
diff --git a/resources/static/lib/winchan.js b/resources/static/common/js/lib/winchan.js
similarity index 100%
rename from resources/static/lib/winchan.js
rename to resources/static/common/js/lib/winchan.js
diff --git a/resources/static/shared/mediator.js b/resources/static/common/js/mediator.js
similarity index 100%
rename from resources/static/shared/mediator.js
rename to resources/static/common/js/mediator.js
diff --git a/resources/static/shared/models/interaction_data.js b/resources/static/common/js/models/interaction_data.js
similarity index 100%
rename from resources/static/shared/models/interaction_data.js
rename to resources/static/common/js/models/interaction_data.js
diff --git a/resources/static/shared/models/models.js b/resources/static/common/js/models/models.js
similarity index 100%
rename from resources/static/shared/models/models.js
rename to resources/static/common/js/models/models.js
diff --git a/resources/static/shared/modules/cookie_check.js b/resources/static/common/js/modules/cookie_check.js
similarity index 100%
rename from resources/static/shared/modules/cookie_check.js
rename to resources/static/common/js/modules/cookie_check.js
diff --git a/resources/static/shared/modules/development.js b/resources/static/common/js/modules/development.js
similarity index 100%
rename from resources/static/shared/modules/development.js
rename to resources/static/common/js/modules/development.js
diff --git a/resources/static/shared/modules/interaction_data.js b/resources/static/common/js/modules/interaction_data.js
similarity index 100%
rename from resources/static/shared/modules/interaction_data.js
rename to resources/static/common/js/modules/interaction_data.js
diff --git a/resources/static/shared/modules/page_module.js b/resources/static/common/js/modules/page_module.js
similarity index 100%
rename from resources/static/shared/modules/page_module.js
rename to resources/static/common/js/modules/page_module.js
diff --git a/resources/static/shared/modules/xhr_delay.js b/resources/static/common/js/modules/xhr_delay.js
similarity index 100%
rename from resources/static/shared/modules/xhr_delay.js
rename to resources/static/common/js/modules/xhr_delay.js
diff --git a/resources/static/shared/modules/xhr_disable_form.js b/resources/static/common/js/modules/xhr_disable_form.js
similarity index 100%
rename from resources/static/shared/modules/xhr_disable_form.js
rename to resources/static/common/js/modules/xhr_disable_form.js
diff --git a/resources/static/shared/network.js b/resources/static/common/js/network.js
similarity index 100%
rename from resources/static/shared/network.js
rename to resources/static/common/js/network.js
diff --git a/resources/static/shared/provisioning.js b/resources/static/common/js/provisioning.js
similarity index 100%
rename from resources/static/shared/provisioning.js
rename to resources/static/common/js/provisioning.js
diff --git a/resources/static/shared/renderer.js b/resources/static/common/js/renderer.js
similarity index 100%
rename from resources/static/shared/renderer.js
rename to resources/static/common/js/renderer.js
diff --git a/resources/static/shared/screens.js b/resources/static/common/js/screens.js
similarity index 100%
rename from resources/static/shared/screens.js
rename to resources/static/common/js/screens.js
diff --git a/resources/static/shared/state_machine.js b/resources/static/common/js/state_machine.js
similarity index 100%
rename from resources/static/shared/state_machine.js
rename to resources/static/common/js/state_machine.js
diff --git a/resources/static/shared/storage.js b/resources/static/common/js/storage.js
similarity index 100%
rename from resources/static/shared/storage.js
rename to resources/static/common/js/storage.js
diff --git a/resources/static/shared/templates.js b/resources/static/common/js/templates.js
similarity index 100%
rename from resources/static/shared/templates.js
rename to resources/static/common/js/templates.js
diff --git a/resources/static/shared/tooltip.js b/resources/static/common/js/tooltip.js
similarity index 100%
rename from resources/static/shared/tooltip.js
rename to resources/static/common/js/tooltip.js
diff --git a/resources/static/shared/user.js b/resources/static/common/js/user.js
similarity index 100%
rename from resources/static/shared/user.js
rename to resources/static/common/js/user.js
diff --git a/resources/static/shared/validation.js b/resources/static/common/js/validation.js
similarity index 100%
rename from resources/static/shared/validation.js
rename to resources/static/common/js/validation.js
diff --git a/resources/static/shared/wait-messages.js b/resources/static/common/js/wait-messages.js
similarity index 100%
rename from resources/static/shared/wait-messages.js
rename to resources/static/common/js/wait-messages.js
diff --git a/resources/static/shared/xhr.js b/resources/static/common/js/xhr.js
similarity index 100%
rename from resources/static/shared/xhr.js
rename to resources/static/common/js/xhr.js
diff --git a/resources/static/shared/xhr_transport.js b/resources/static/common/js/xhr_transport.js
similarity index 100%
rename from resources/static/shared/xhr_transport.js
rename to resources/static/common/js/xhr_transport.js
diff --git a/resources/static/css/sil.ttf b/resources/static/css/sil.ttf
deleted file mode 100644
index 903e32be5e3dbc418dea268b28bc3432bde14a10..0000000000000000000000000000000000000000
Binary files a/resources/static/css/sil.ttf and /dev/null differ
diff --git a/resources/static/css/ts.ttf b/resources/static/css/ts.ttf
deleted file mode 100644
index c5842d5fefd18738bcc6ec4384975bdae4a80b3b..0000000000000000000000000000000000000000
Binary files a/resources/static/css/ts.ttf and /dev/null differ
diff --git a/resources/static/dialog/css/popup.css b/resources/static/dialog/css/style.css
similarity index 91%
rename from resources/static/dialog/css/popup.css
rename to resources/static/dialog/css/style.css
index 39d97a1f508042e5650c79ca03fa7d77b6f0dff5..5edef21780867c23f7855a6b5981cb36fc3e1cd7 100644
--- a/resources/static/dialog/css/popup.css
+++ b/resources/static/dialog/css/style.css
@@ -5,13 +5,13 @@
 body {
   color: #383838;
   background-color: #dee3e6;
-  background-image: url('/i/grain.png');
-  background-image: url("/i/grain.png"), -webkit-gradient(linear, left top, left bottom, from(rgba(113, 126, 137, 0)), to(rgba(113, 126, 137, 0.2)));
-  background-image: url('/i/grain.png'), -webkit-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
-  background-image: url('/i/grain.png'),    -moz-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
-  background-image: url('/i/grain.png'),     -ms-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
-  background-image: url('/i/grain.png'),      -o-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
-  background-image: url('/i/grain.png'),         linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
+  background-image: url('/common/i/grain.png');
+  background-image: url("/common/i/grain.png"), -webkit-gradient(linear, left top, left bottom, from(rgba(113, 126, 137, 0)), to(rgba(113, 126, 137, 0.2)));
+  background-image: url('/common/i/grain.png'), -webkit-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
+  background-image: url('/common/i/grain.png'),    -moz-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
+  background-image: url('/common/i/grain.png'),     -ms-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
+  background-image: url('/common/i/grain.png'),      -o-linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
+  background-image: url('/common/i/grain.png'),         linear-gradient(top, rgba(113, 126, 137, 0), rgba(113, 126, 137, 0.2));
 }
 
 #signIn {
@@ -68,7 +68,7 @@ header {
 .home {
   width: 161px;
   height: 40px;
-  background: url("/i/persona-logo-transparent.png") 0 0 no-repeat;
+  background: url("/dialog/i/persona-logo-transparent.png") 0 0 no-repeat;
   text-indent: -9999px;
   display: inline-block;
   *display: block;
@@ -259,7 +259,7 @@ section > .contents {
     bottom: 0;
     left: 0;
     right: 0;
-    background-image: url('/i/arrow_grey.png');
+    background-image: url('/dialog/i/arrow_grey.png');
     background-repeat: no-repeat;
     background-position: center;
     background-color: transparent;
diff --git a/resources/static/i/arrow_grey.png b/resources/static/dialog/i/arrow_grey.png
similarity index 100%
rename from resources/static/i/arrow_grey.png
rename to resources/static/dialog/i/arrow_grey.png
diff --git a/resources/static/i/firefox_logo.png b/resources/static/dialog/i/firefox_logo.png
similarity index 100%
rename from resources/static/i/firefox_logo.png
rename to resources/static/dialog/i/firefox_logo.png
diff --git a/resources/static/i/persona-logo-transparent.png b/resources/static/dialog/i/persona-logo-transparent.png
similarity index 100%
rename from resources/static/i/persona-logo-transparent.png
rename to resources/static/dialog/i/persona-logo-transparent.png
diff --git a/resources/static/dialog/resources/helpers.js b/resources/static/dialog/js/misc/helpers.js
similarity index 100%
rename from resources/static/dialog/resources/helpers.js
rename to resources/static/dialog/js/misc/helpers.js
diff --git a/resources/static/dialog/resources/internal_api.js b/resources/static/dialog/js/misc/internal_api.js
similarity index 100%
rename from resources/static/dialog/resources/internal_api.js
rename to resources/static/dialog/js/misc/internal_api.js
diff --git a/resources/static/dialog/resources/screen_size_hacks.js b/resources/static/dialog/js/misc/screen_size_hacks.js
similarity index 100%
rename from resources/static/dialog/resources/screen_size_hacks.js
rename to resources/static/dialog/js/misc/screen_size_hacks.js
diff --git a/resources/static/dialog/resources/state.js b/resources/static/dialog/js/misc/state.js
similarity index 98%
rename from resources/static/dialog/resources/state.js
rename to resources/static/dialog/js/misc/state.js
index 7f36178c5aef18b25d44053317291c585589bd16..032bd85f683c1f9a9698fcecf87af9a9ad2c5af5 100644
--- a/resources/static/dialog/resources/state.js
+++ b/resources/static/dialog/js/misc/state.js
@@ -62,13 +62,6 @@ BrowserID.State = (function() {
     });
 
     handleState("window_unload", function() {
-      if (!self.success) {
-        storage.setReturnTo("");
-        // do not call doCancel here, let winchan's cancel
-        // handling do the work. This gives us consistent semantics
-        // across browsers on the RP side of the WinChan.
-      }
-
       // Round up final KPI stats as the user is leaving the dialog.  This
       // ensures the final state is sent to the KPI stats.  Any new logins are
       // counted, any new sites are counted, any new emails are included, etc.
diff --git a/resources/static/dialog/controllers/actions.js b/resources/static/dialog/js/modules/actions.js
similarity index 100%
rename from resources/static/dialog/controllers/actions.js
rename to resources/static/dialog/js/modules/actions.js
diff --git a/resources/static/dialog/controllers/add_email.js b/resources/static/dialog/js/modules/add_email.js
similarity index 100%
rename from resources/static/dialog/controllers/add_email.js
rename to resources/static/dialog/js/modules/add_email.js
diff --git a/resources/static/dialog/controllers/authenticate.js b/resources/static/dialog/js/modules/authenticate.js
similarity index 100%
rename from resources/static/dialog/controllers/authenticate.js
rename to resources/static/dialog/js/modules/authenticate.js
diff --git a/resources/static/dialog/controllers/check_registration.js b/resources/static/dialog/js/modules/check_registration.js
similarity index 100%
rename from resources/static/dialog/controllers/check_registration.js
rename to resources/static/dialog/js/modules/check_registration.js
diff --git a/resources/static/dialog/controllers/dialog.js b/resources/static/dialog/js/modules/dialog.js
similarity index 100%
rename from resources/static/dialog/controllers/dialog.js
rename to resources/static/dialog/js/modules/dialog.js
diff --git a/resources/static/dialog/controllers/generate_assertion.js b/resources/static/dialog/js/modules/generate_assertion.js
similarity index 100%
rename from resources/static/dialog/controllers/generate_assertion.js
rename to resources/static/dialog/js/modules/generate_assertion.js
diff --git a/resources/static/dialog/controllers/is_this_your_computer.js b/resources/static/dialog/js/modules/is_this_your_computer.js
similarity index 100%
rename from resources/static/dialog/controllers/is_this_your_computer.js
rename to resources/static/dialog/js/modules/is_this_your_computer.js
diff --git a/resources/static/dialog/controllers/pick_email.js b/resources/static/dialog/js/modules/pick_email.js
similarity index 100%
rename from resources/static/dialog/controllers/pick_email.js
rename to resources/static/dialog/js/modules/pick_email.js
diff --git a/resources/static/dialog/controllers/primary_user_provisioned.js b/resources/static/dialog/js/modules/primary_user_provisioned.js
similarity index 100%
rename from resources/static/dialog/controllers/primary_user_provisioned.js
rename to resources/static/dialog/js/modules/primary_user_provisioned.js
diff --git a/resources/static/dialog/controllers/provision_primary_user.js b/resources/static/dialog/js/modules/provision_primary_user.js
similarity index 100%
rename from resources/static/dialog/controllers/provision_primary_user.js
rename to resources/static/dialog/js/modules/provision_primary_user.js
diff --git a/resources/static/dialog/controllers/required_email.js b/resources/static/dialog/js/modules/required_email.js
similarity index 100%
rename from resources/static/dialog/controllers/required_email.js
rename to resources/static/dialog/js/modules/required_email.js
diff --git a/resources/static/dialog/controllers/rp_info.js b/resources/static/dialog/js/modules/rp_info.js
similarity index 100%
rename from resources/static/dialog/controllers/rp_info.js
rename to resources/static/dialog/js/modules/rp_info.js
diff --git a/resources/static/dialog/controllers/set_password.js b/resources/static/dialog/js/modules/set_password.js
similarity index 100%
rename from resources/static/dialog/controllers/set_password.js
rename to resources/static/dialog/js/modules/set_password.js
diff --git a/resources/static/dialog/controllers/verify_primary_user.js b/resources/static/dialog/js/modules/verify_primary_user.js
similarity index 100%
rename from resources/static/dialog/controllers/verify_primary_user.js
rename to resources/static/dialog/js/modules/verify_primary_user.js
diff --git a/resources/static/dialog/start.js b/resources/static/dialog/js/start.js
similarity index 100%
rename from resources/static/dialog/start.js
rename to resources/static/dialog/js/start.js
diff --git a/resources/static/dialog/mozilla.png b/resources/static/dialog/mozilla.png
deleted file mode 100644
index af714602027dc8e7745cf9a4c1218f00546196f4..0000000000000000000000000000000000000000
Binary files a/resources/static/dialog/mozilla.png and /dev/null differ
diff --git a/resources/static/fonts/fonts_common.css b/resources/static/fonts/fonts_common.css
deleted file mode 100644
index a88cb32976d9ea1307b8720b38bfc978dcf9b84a..0000000000000000000000000000000000000000
--- a/resources/static/fonts/fonts_common.css
+++ /dev/null
@@ -1,33 +0,0 @@
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 400;
-  src: url('/fonts/OpenSans-Regular.eot');
-  src: local('Open Sans'),
-       local('OpenSans'),
-       url('/fonts/OpenSans-Regular.eot') format('embedded-opentype'),
-       url('/fonts/OpenSans-Regular.woff') format('woff'),
-       url('/fonts/OpenSans-Regular.ttf') format('truetype');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 300;
-  src: url('/fonts/OpenSans-Light.eot');
-  src: local('Open Sans Light'),
-       local('OpenSans-Light'),
-       url('/fonts/OpenSans-Light.eot') format('embedded-opentype'),
-       url('/fonts/OpenSans-Light.woff') format('woff'),
-       url('/fonts/OpenSans-Light.ttf') format('truetype');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 700;
-  src: url('/fonts/OpenSans-Bold.eot');
-  src: local('Open Sans Bold'),
-       local('OpenSans-Bold'),
-       url('/fonts/OpenSans-Bold.eot') format('embedded-opentype'),
-       url('/fonts/OpenSans-Bold.woff') format('woff'),
-       url('/fonts/OpenSans-Bold.ttf') format('truetype');
-}
diff --git a/resources/static/fonts/fonts_mainsite.css b/resources/static/fonts/fonts_mainsite.css
deleted file mode 100644
index a425735dae71bff42278801ad5b11bbe624f4b75..0000000000000000000000000000000000000000
--- a/resources/static/fonts/fonts_mainsite.css
+++ /dev/null
@@ -1,12 +0,0 @@
-@font-face {
-  font-family: 'Open Sans';
-  font-style: italic;
-  font-weight: 400;
-  src: url('/fonts/OpenSans-Italic.eot');
-  src: local('Open Sans Italic'),
-       local('OpenSans-Italic'),
-       url('/fonts/OpenSans-Italic.eot') format('embedded-opentype'),
-       url('/fonts/OpenSans-Italic.woff') format('woff'),
-       url('/fonts/OpenSans-Italic.ttf') format('truetype');
-}
-
diff --git a/resources/static/i/count.png b/resources/static/i/count.png
deleted file mode 100644
index b6bccc3dc40388432b3ede95ce1204d50a5f78a1..0000000000000000000000000000000000000000
Binary files a/resources/static/i/count.png and /dev/null differ
diff --git a/resources/static/i/faux-tabzilla.png b/resources/static/i/faux-tabzilla.png
deleted file mode 100644
index 7619610c383b3e27505efc3f24ab0b5b93d9af1b..0000000000000000000000000000000000000000
Binary files a/resources/static/i/faux-tabzilla.png and /dev/null differ
diff --git a/resources/static/i/hint.png b/resources/static/i/hint.png
deleted file mode 100644
index 3ff8bf5314769e16ad6e44cbfa0f0839c321ab47..0000000000000000000000000000000000000000
Binary files a/resources/static/i/hint.png and /dev/null differ
diff --git a/resources/static/i/tutorial_1.png b/resources/static/i/tutorial_1.png
deleted file mode 100644
index eebf4b458198996f902493f577d120e03be877fe..0000000000000000000000000000000000000000
Binary files a/resources/static/i/tutorial_1.png and /dev/null differ
diff --git a/resources/static/i/tutorial_2.png b/resources/static/i/tutorial_2.png
deleted file mode 100644
index 11a7bf247fd96bb90e157bd2184a1e7e7174131d..0000000000000000000000000000000000000000
Binary files a/resources/static/i/tutorial_2.png and /dev/null differ
diff --git a/resources/static/i/tutorial_3.png b/resources/static/i/tutorial_3.png
deleted file mode 100644
index 3c6c11efd3f56aeed6bc74b303d9ab4715ea6971..0000000000000000000000000000000000000000
Binary files a/resources/static/i/tutorial_3.png and /dev/null differ
diff --git a/resources/static/lib/bidbundle.js b/resources/static/lib/bidbundle.js
deleted file mode 120000
index c2bfd9cad507d6df9fe365ec014dd1b6d0850a1d..0000000000000000000000000000000000000000
--- a/resources/static/lib/bidbundle.js
+++ /dev/null
@@ -1 +0,0 @@
-../../../node_modules/jwcrypto/bidbundle.js
\ No newline at end of file
diff --git a/resources/static/css/ie8_main.css b/resources/static/pages/css/ie8.css
similarity index 85%
rename from resources/static/css/ie8_main.css
rename to resources/static/pages/css/ie8.css
index 7a5122ddb60301ee9ccf3c9dd6e75c795794433c..27e301090480afe7c8886d313422ec8cd6ba378d 100644
--- a/resources/static/css/ie8_main.css
+++ b/resources/static/pages/css/ie8.css
@@ -7,7 +7,7 @@
  */
 
 body {
-  background-image: url("/i/marketplace-header.png");
+  background-image: url("/pages/i/marketplace-header.png");
   background-position: center top;
   background-repeat: repeat-x;
 }
diff --git a/resources/static/css/m.css b/resources/static/pages/css/m.css
similarity index 100%
rename from resources/static/css/m.css
rename to resources/static/pages/css/m.css
diff --git a/resources/static/css/style.css b/resources/static/pages/css/style.css
similarity index 98%
rename from resources/static/css/style.css
rename to resources/static/pages/css/style.css
index 6ac4fb9fd4c9c7f5c8eac819133263d8ed2883eb..96034587943cb6247e9a382cd8149d6b020691e8 100644
--- a/resources/static/css/style.css
+++ b/resources/static/pages/css/style.css
@@ -17,7 +17,7 @@ noscript {
 
 body {
   background-color: #6a7b86;
-  background-image: url("/i/marketplace-header.png"), url("/i/grain.png");
+  background-image: url("/pages/i/marketplace-header.png"), url("/common/i/grain.png");
   background-position: center top, center top;
   background-repeat: repeat-x, repeat;
   color: #fff;
@@ -396,7 +396,7 @@ button.delete:active {
   position: absolute;
   z-index: 1;
   left: 0;
-  background-image: url('/i/badge.png');
+  background-image: url('/pages/i/badge.png');
   background-position: 0px center;
   background-repeat: no-repeat;
 
@@ -525,7 +525,7 @@ header li {
 .home {
   width: 205px;
   height: 50px;
-  background: url("/i/persona-logo-wordmark.png") 0 0 no-repeat;
+  background: url("/pages/i/persona-logo-wordmark.png") 0 0 no-repeat;
   text-indent: -9999px;
   display: inline-block;
 }
diff --git a/resources/static/i/badge.png b/resources/static/pages/i/badge.png
similarity index 100%
rename from resources/static/i/badge.png
rename to resources/static/pages/i/badge.png
diff --git a/resources/static/i/developers-link.png b/resources/static/pages/i/developers-link.png
similarity index 100%
rename from resources/static/i/developers-link.png
rename to resources/static/pages/i/developers-link.png
diff --git a/resources/static/i/flexible-graphic.png b/resources/static/pages/i/flexible-graphic.png
similarity index 100%
rename from resources/static/i/flexible-graphic.png
rename to resources/static/pages/i/flexible-graphic.png
diff --git a/resources/static/i/marketplace-header.png b/resources/static/pages/i/marketplace-header.png
similarity index 100%
rename from resources/static/i/marketplace-header.png
rename to resources/static/pages/i/marketplace-header.png
diff --git a/resources/static/i/one-password-graphic.png b/resources/static/pages/i/one-password-graphic.png
similarity index 100%
rename from resources/static/i/one-password-graphic.png
rename to resources/static/pages/i/one-password-graphic.png
diff --git a/resources/static/i/persona-logo-wordmark.png b/resources/static/pages/i/persona-logo-wordmark.png
similarity index 100%
rename from resources/static/i/persona-logo-wordmark.png
rename to resources/static/pages/i/persona-logo-wordmark.png
diff --git a/resources/static/i/slit.png b/resources/static/pages/i/slit.png
similarity index 100%
rename from resources/static/i/slit.png
rename to resources/static/pages/i/slit.png
diff --git a/resources/static/pages/about.js b/resources/static/pages/js/about.js
similarity index 100%
rename from resources/static/pages/about.js
rename to resources/static/pages/js/about.js
diff --git a/resources/static/pages/forgot.js b/resources/static/pages/js/forgot.js
similarity index 100%
rename from resources/static/pages/forgot.js
rename to resources/static/pages/js/forgot.js
diff --git a/resources/static/pages/index.js b/resources/static/pages/js/index.js
similarity index 100%
rename from resources/static/pages/index.js
rename to resources/static/pages/js/index.js
diff --git a/resources/static/pages/manage_account.js b/resources/static/pages/js/manage_account.js
similarity index 100%
rename from resources/static/pages/manage_account.js
rename to resources/static/pages/js/manage_account.js
diff --git a/resources/static/pages/page_helpers.js b/resources/static/pages/js/page_helpers.js
similarity index 100%
rename from resources/static/pages/page_helpers.js
rename to resources/static/pages/js/page_helpers.js
diff --git a/resources/static/pages/signin.js b/resources/static/pages/js/signin.js
similarity index 100%
rename from resources/static/pages/signin.js
rename to resources/static/pages/js/signin.js
diff --git a/resources/static/pages/signup.js b/resources/static/pages/js/signup.js
similarity index 100%
rename from resources/static/pages/signup.js
rename to resources/static/pages/js/signup.js
diff --git a/resources/static/pages/start.js b/resources/static/pages/js/start.js
similarity index 100%
rename from resources/static/pages/start.js
rename to resources/static/pages/js/start.js
diff --git a/resources/static/pages/verify_secondary_address.js b/resources/static/pages/js/verify_secondary_address.js
similarity index 100%
rename from resources/static/pages/verify_secondary_address.js
rename to resources/static/pages/js/verify_secondary_address.js
diff --git a/resources/static/test/cases/shared/browser-support.js b/resources/static/test/cases/common/js/browser-support.js
similarity index 100%
rename from resources/static/test/cases/shared/browser-support.js
rename to resources/static/test/cases/common/js/browser-support.js
diff --git a/resources/static/test/cases/shared/class.js b/resources/static/test/cases/common/js/class.js
similarity index 100%
rename from resources/static/test/cases/shared/class.js
rename to resources/static/test/cases/common/js/class.js
diff --git a/resources/static/test/cases/shared/command.js b/resources/static/test/cases/common/js/command.js
similarity index 100%
rename from resources/static/test/cases/shared/command.js
rename to resources/static/test/cases/common/js/command.js
diff --git a/resources/static/test/cases/shared/enable_cookies_url.js b/resources/static/test/cases/common/js/enable_cookies_url.js
similarity index 100%
rename from resources/static/test/cases/shared/enable_cookies_url.js
rename to resources/static/test/cases/common/js/enable_cookies_url.js
diff --git a/resources/static/test/cases/shared/error-display.js b/resources/static/test/cases/common/js/error-display.js
similarity index 100%
rename from resources/static/test/cases/shared/error-display.js
rename to resources/static/test/cases/common/js/error-display.js
diff --git a/resources/static/test/cases/shared/helpers.js b/resources/static/test/cases/common/js/helpers.js
similarity index 100%
rename from resources/static/test/cases/shared/helpers.js
rename to resources/static/test/cases/common/js/helpers.js
diff --git a/resources/static/test/cases/shared/history.js b/resources/static/test/cases/common/js/history.js
similarity index 100%
rename from resources/static/test/cases/shared/history.js
rename to resources/static/test/cases/common/js/history.js
diff --git a/resources/static/test/cases/shared/models/interaction_data.js b/resources/static/test/cases/common/js/models/interaction_data.js
similarity index 100%
rename from resources/static/test/cases/shared/models/interaction_data.js
rename to resources/static/test/cases/common/js/models/interaction_data.js
diff --git a/resources/static/test/cases/shared/modules/cookie_check.js b/resources/static/test/cases/common/js/modules/cookie_check.js
similarity index 100%
rename from resources/static/test/cases/shared/modules/cookie_check.js
rename to resources/static/test/cases/common/js/modules/cookie_check.js
diff --git a/resources/static/test/cases/shared/modules/interaction_data.js b/resources/static/test/cases/common/js/modules/interaction_data.js
similarity index 100%
rename from resources/static/test/cases/shared/modules/interaction_data.js
rename to resources/static/test/cases/common/js/modules/interaction_data.js
diff --git a/resources/static/test/cases/shared/modules/page_module.js b/resources/static/test/cases/common/js/modules/page_module.js
similarity index 100%
rename from resources/static/test/cases/shared/modules/page_module.js
rename to resources/static/test/cases/common/js/modules/page_module.js
diff --git a/resources/static/test/cases/shared/modules/xhr_delay.js b/resources/static/test/cases/common/js/modules/xhr_delay.js
similarity index 100%
rename from resources/static/test/cases/shared/modules/xhr_delay.js
rename to resources/static/test/cases/common/js/modules/xhr_delay.js
diff --git a/resources/static/test/cases/shared/modules/xhr_disable_form.js b/resources/static/test/cases/common/js/modules/xhr_disable_form.js
similarity index 100%
rename from resources/static/test/cases/shared/modules/xhr_disable_form.js
rename to resources/static/test/cases/common/js/modules/xhr_disable_form.js
diff --git a/resources/static/test/cases/shared/network.js b/resources/static/test/cases/common/js/network.js
similarity index 100%
rename from resources/static/test/cases/shared/network.js
rename to resources/static/test/cases/common/js/network.js
diff --git a/resources/static/test/cases/shared/renderer.js b/resources/static/test/cases/common/js/renderer.js
similarity index 100%
rename from resources/static/test/cases/shared/renderer.js
rename to resources/static/test/cases/common/js/renderer.js
diff --git a/resources/static/test/cases/shared/screens.js b/resources/static/test/cases/common/js/screens.js
similarity index 100%
rename from resources/static/test/cases/shared/screens.js
rename to resources/static/test/cases/common/js/screens.js
diff --git a/resources/static/test/cases/shared/state_machine.js b/resources/static/test/cases/common/js/state_machine.js
similarity index 100%
rename from resources/static/test/cases/shared/state_machine.js
rename to resources/static/test/cases/common/js/state_machine.js
diff --git a/resources/static/test/cases/shared/storage.js b/resources/static/test/cases/common/js/storage.js
similarity index 100%
rename from resources/static/test/cases/shared/storage.js
rename to resources/static/test/cases/common/js/storage.js
diff --git a/resources/static/test/cases/shared/tooltip.js b/resources/static/test/cases/common/js/tooltip.js
similarity index 100%
rename from resources/static/test/cases/shared/tooltip.js
rename to resources/static/test/cases/common/js/tooltip.js
diff --git a/resources/static/test/cases/shared/user.js b/resources/static/test/cases/common/js/user.js
similarity index 100%
rename from resources/static/test/cases/shared/user.js
rename to resources/static/test/cases/common/js/user.js
diff --git a/resources/static/test/cases/shared/validation.js b/resources/static/test/cases/common/js/validation.js
similarity index 100%
rename from resources/static/test/cases/shared/validation.js
rename to resources/static/test/cases/common/js/validation.js
diff --git a/resources/static/test/cases/shared/xhr.js b/resources/static/test/cases/common/js/xhr.js
similarity index 100%
rename from resources/static/test/cases/shared/xhr.js
rename to resources/static/test/cases/common/js/xhr.js
diff --git a/resources/static/test/cases/dialog.js b/resources/static/test/cases/dialog.js
deleted file mode 100644
index 802dad601609ba877b034c2cbc4de3960a77e831..0000000000000000000000000000000000000000
--- a/resources/static/test/cases/dialog.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-module("dialog");
-
-test("dialog testing works", function(){
-	ok(true,"an assert is run");
-});
diff --git a/resources/static/test/cases/resources/helpers.js b/resources/static/test/cases/dialog/js/misc/helpers.js
similarity index 100%
rename from resources/static/test/cases/resources/helpers.js
rename to resources/static/test/cases/dialog/js/misc/helpers.js
diff --git a/resources/static/test/cases/resources/internal_api.js b/resources/static/test/cases/dialog/js/misc/internal_api.js
similarity index 100%
rename from resources/static/test/cases/resources/internal_api.js
rename to resources/static/test/cases/dialog/js/misc/internal_api.js
diff --git a/resources/static/test/cases/resources/state.js b/resources/static/test/cases/dialog/js/misc/state.js
similarity index 100%
rename from resources/static/test/cases/resources/state.js
rename to resources/static/test/cases/dialog/js/misc/state.js
diff --git a/resources/static/test/cases/controllers/actions.js b/resources/static/test/cases/dialog/js/modules/actions.js
similarity index 100%
rename from resources/static/test/cases/controllers/actions.js
rename to resources/static/test/cases/dialog/js/modules/actions.js
diff --git a/resources/static/test/cases/controllers/add_email.js b/resources/static/test/cases/dialog/js/modules/add_email.js
similarity index 100%
rename from resources/static/test/cases/controllers/add_email.js
rename to resources/static/test/cases/dialog/js/modules/add_email.js
diff --git a/resources/static/test/cases/controllers/authenticate.js b/resources/static/test/cases/dialog/js/modules/authenticate.js
similarity index 100%
rename from resources/static/test/cases/controllers/authenticate.js
rename to resources/static/test/cases/dialog/js/modules/authenticate.js
diff --git a/resources/static/test/cases/controllers/check_registration.js b/resources/static/test/cases/dialog/js/modules/check_registration.js
similarity index 100%
rename from resources/static/test/cases/controllers/check_registration.js
rename to resources/static/test/cases/dialog/js/modules/check_registration.js
diff --git a/resources/static/test/cases/controllers/dialog.js b/resources/static/test/cases/dialog/js/modules/dialog.js
similarity index 100%
rename from resources/static/test/cases/controllers/dialog.js
rename to resources/static/test/cases/dialog/js/modules/dialog.js
diff --git a/resources/static/test/cases/controllers/forgot_password.js b/resources/static/test/cases/dialog/js/modules/forgot_password.js
similarity index 100%
rename from resources/static/test/cases/controllers/forgot_password.js
rename to resources/static/test/cases/dialog/js/modules/forgot_password.js
diff --git a/resources/static/test/cases/controllers/generate_assertion.js b/resources/static/test/cases/dialog/js/modules/generate_assertion.js
similarity index 100%
rename from resources/static/test/cases/controllers/generate_assertion.js
rename to resources/static/test/cases/dialog/js/modules/generate_assertion.js
diff --git a/resources/static/test/cases/controllers/is_this_your_computer.js b/resources/static/test/cases/dialog/js/modules/is_this_your_computer.js
similarity index 100%
rename from resources/static/test/cases/controllers/is_this_your_computer.js
rename to resources/static/test/cases/dialog/js/modules/is_this_your_computer.js
diff --git a/resources/static/test/cases/controllers/pick_email.js b/resources/static/test/cases/dialog/js/modules/pick_email.js
similarity index 100%
rename from resources/static/test/cases/controllers/pick_email.js
rename to resources/static/test/cases/dialog/js/modules/pick_email.js
diff --git a/resources/static/test/cases/controllers/primary_user_provisioned.js b/resources/static/test/cases/dialog/js/modules/primary_user_provisioned.js
similarity index 100%
rename from resources/static/test/cases/controllers/primary_user_provisioned.js
rename to resources/static/test/cases/dialog/js/modules/primary_user_provisioned.js
diff --git a/resources/static/test/cases/controllers/provision_primary_user.js b/resources/static/test/cases/dialog/js/modules/provision_primary_user.js
similarity index 100%
rename from resources/static/test/cases/controllers/provision_primary_user.js
rename to resources/static/test/cases/dialog/js/modules/provision_primary_user.js
diff --git a/resources/static/test/cases/controllers/required_email.js b/resources/static/test/cases/dialog/js/modules/required_email.js
similarity index 100%
rename from resources/static/test/cases/controllers/required_email.js
rename to resources/static/test/cases/dialog/js/modules/required_email.js
diff --git a/resources/static/test/cases/controllers/rp_info.js b/resources/static/test/cases/dialog/js/modules/rp_info.js
similarity index 100%
rename from resources/static/test/cases/controllers/rp_info.js
rename to resources/static/test/cases/dialog/js/modules/rp_info.js
diff --git a/resources/static/test/cases/controllers/set_password.js b/resources/static/test/cases/dialog/js/modules/set_password.js
similarity index 100%
rename from resources/static/test/cases/controllers/set_password.js
rename to resources/static/test/cases/dialog/js/modules/set_password.js
diff --git a/resources/static/test/cases/controllers/verify_primary_user.js b/resources/static/test/cases/dialog/js/modules/verify_primary_user.js
similarity index 100%
rename from resources/static/test/cases/controllers/verify_primary_user.js
rename to resources/static/test/cases/dialog/js/modules/verify_primary_user.js
diff --git a/resources/static/test/cases/pages/about.js b/resources/static/test/cases/pages/js/about.js
similarity index 100%
rename from resources/static/test/cases/pages/about.js
rename to resources/static/test/cases/pages/js/about.js
diff --git a/resources/static/test/cases/pages/browserid.js b/resources/static/test/cases/pages/js/browserid.js
similarity index 100%
rename from resources/static/test/cases/pages/browserid.js
rename to resources/static/test/cases/pages/js/browserid.js
diff --git a/resources/static/test/cases/pages/forgot.js b/resources/static/test/cases/pages/js/forgot.js
similarity index 100%
rename from resources/static/test/cases/pages/forgot.js
rename to resources/static/test/cases/pages/js/forgot.js
diff --git a/resources/static/test/cases/pages/manage_account.js b/resources/static/test/cases/pages/js/manage_account.js
similarity index 100%
rename from resources/static/test/cases/pages/manage_account.js
rename to resources/static/test/cases/pages/js/manage_account.js
diff --git a/resources/static/test/cases/pages/page_helpers.js b/resources/static/test/cases/pages/js/page_helpers.js
similarity index 100%
rename from resources/static/test/cases/pages/page_helpers.js
rename to resources/static/test/cases/pages/js/page_helpers.js
diff --git a/resources/static/test/cases/pages/signin.js b/resources/static/test/cases/pages/js/signin.js
similarity index 100%
rename from resources/static/test/cases/pages/signin.js
rename to resources/static/test/cases/pages/js/signin.js
diff --git a/resources/static/test/cases/pages/signup.js b/resources/static/test/cases/pages/js/signup.js
similarity index 100%
rename from resources/static/test/cases/pages/signup.js
rename to resources/static/test/cases/pages/js/signup.js
diff --git a/resources/static/test/cases/pages/verify_secondary_address.js b/resources/static/test/cases/pages/js/verify_secondary_address.js
similarity index 100%
rename from resources/static/test/cases/pages/verify_secondary_address.js
rename to resources/static/test/cases/pages/js/verify_secondary_address.js
diff --git a/resources/views/about.ejs b/resources/views/about.ejs
index dfdeba036ae1e32c4470c9530e9b96b6a31d2792..b16b28ac52a5a143b96774b0c7622c6b9e29b890 100644
--- a/resources/views/about.ejs
+++ b/resources/views/about.ejs
@@ -13,13 +13,13 @@
                 </div>
 
                 <div class="graphic">
-                    <img src="i/one-password-graphic.png" alt="One password to rule them all.">
+                    <img src="/pages/i/one-password-graphic.png" alt="One password to rule them all.">
                 </div>
             </article>
 
             <article class="blurb flexible">
                 <div class="graphic first">
-                    <img src="i/flexible-graphic.png" alt="Use multiple email addresses">
+                    <img src="/pages/i/flexible-graphic.png" alt="Use multiple email addresses">
                 </div>
 
                 <div class="info">
@@ -42,7 +42,7 @@
             </article>
         </section>
 
-        <a href="https://developer.mozilla.org/en/BrowserID/Quick_Setup" class="developers"><img src="i/developers-link.png" alt="Persona for developers"><span>Implement Persona on your site </span>Developer guides and API documentation</a>
+        <a href="https://developer.mozilla.org/en/BrowserID/Quick_Setup" class="developers"><img src="/pages/i/developers-link.png" alt="Persona for developers"><span>Implement Persona on your site </span>Developer guides and API documentation</a>
     </div><!-- #dashboard -->
 </div>
 
diff --git a/resources/views/dialog_layout.ejs b/resources/views/dialog_layout.ejs
index 4b12722611e3681ead1acbc0eb7e202eff51bad5..954d9bfa5cff4c3e009f8f032aecad4e300f52d7 100644
--- a/resources/views/dialog_layout.ejs
+++ b/resources/views/dialog_layout.ejs
@@ -10,7 +10,7 @@
   <meta name="format-detection" content="email=no" />
 
   <!--[if lt IE 9]>
-    <script src="/lib/html5shim.js"></script>
+    <script src="/common/js/lib/html5shim.js"></script>
   <![endif]-->
   <%- cachify_css('/production/dialog.css') %>
   <!--[if lt IE 9]>
diff --git a/resources/views/index.ejs b/resources/views/index.ejs
index 8c526f38aa67b44854c3daa342bf594e03081c81..7eb8e2c35b8f6c9e22322a1062e428ce90671ffc 100644
--- a/resources/views/index.ejs
+++ b/resources/views/index.ejs
@@ -5,7 +5,7 @@
   <div id="hAlign" class="display_nonauth">
       <div id="vAlign">
           <div id="signUp">
-              <div id="card"><img src="<%- cachify('/i/slit.png') %>"></div>
+              <div id="card"><img src="<%- cachify('/pages/i/slit.png') %>"></div>
 
               <h1 class="white headline-main">Connect with Mozilla Persona, the safest &amp; easiest way to sign in.</h1>
               <p class="tour white">
diff --git a/resources/views/layout.ejs b/resources/views/layout.ejs
index d01aa64f819fb1fa741e229cd64231fe48afc183..bfaa83682d1ecbd45b97896476d22b672b498aef 100644
--- a/resources/views/layout.ejs
+++ b/resources/views/layout.ejs
@@ -8,7 +8,7 @@
   <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
   <meta name="format-detection" content="email=no" />
   <!--[if lt IE 9]>
-    <script src="/lib/html5shim.js"></script>
+    <script src="/common/js/lib/html5shim.js"></script>
   <![endif]-->
   <%- cachify_css('/production/browserid.css') %>
   <!--[if lt IE 9]>
diff --git a/resources/views/test.ejs b/resources/views/test.ejs
index da1332fe11b80a0fe7d2547c457495081ea4b377..546fb8a9ceb76c3c53f1ca64432426f89bcf9be3 100644
--- a/resources/views/test.ejs
+++ b/resources/views/test.ejs
@@ -9,7 +9,7 @@
 		<link rel="stylesheet" type="text/css" href="qunit/qunit.css" />
 		<title>Persona QUnit Test</title>
   <!--[if lt IE 9]>
-    <script src="/lib/html5shim.js"></script>
+    <script src="/common/js/lib/html5shim.js"></script>
   <![endif]-->
 	</head>
 	<body>
@@ -66,20 +66,21 @@
     </script>
     <script src="qunit/qunit.js"></script>
     <script src="/include.js"></script>
-    <script src="/lib/jquery-1.7.1.min.js"></script>
-    <script src="/lib/underscore.js"></script>
-    <script src="/lib/ejs.js"></script>
+    <script src="/common/js/lib/jquery-1.7.1.min.js"></script>
+    <script src="/common/js/lib/underscore.js"></script>
+    <script src="/common/js/lib/ejs.js"></script>
     <script src="/i18n/en_US/client.json"></script>
-    <script src="/shared/javascript-extensions.js"></script>
-    <script src="/shared/gettext.js"></script>
-    <script src="/lib/bidbundle.js"></script>
+    <script src="/common/js/javascript-extensions.js"></script>
+    <script src="/common/js/gettext.js"></script>
+    <script src="/common/js/lib/bidbundle.js"></script>
     <script src="http://testmob.org/include.js"></script>
-    <script src="/shared/browserid.js"></script>
-    <script src="/lib/dom-jquery.js"></script>
-    <script src="/lib/hub.js"></script>
-    <script src="/lib/module.js"></script>
-    <script src="/lib/jschannel.js"></script>
-    <script src="/lib/urlparse.js"></script>
+    <script src="/common/js/browserid.js"></script>
+    <script src="/common/js/lib/dom-jquery.js"></script>
+    <script src="/common/js/lib/hub.js"></script>
+    <script src="/common/js/lib/module.js"></script>
+    <script src="/common/js/lib/jschannel.js"></script>
+    <script src="/common/js/lib/urlparse.js"></script>
+
     <script src="mocks/mocks.js"></script>
     <script src="mocks/xhr.js"></script>
     <script src="mocks/templates.js"></script>
@@ -88,119 +89,119 @@
     <script src="mocks/winchan.js"></script>
     <script src="mocks/cachify.js"></script>
 
-    <script src="/shared/renderer.js"></script>
-    <script src="/shared/class.js"></script>
-    <script src="/shared/mediator.js"></script>
-    <script src="/shared/tooltip.js"></script>
-    <script src="/shared/validation.js"></script>
-    <script src="/shared/helpers.js"></script>
-    <script src="/shared/screens.js"></script>
-    <script src="/shared/browser-support.js"></script>
-    <script src="/shared/enable_cookies_url.js"></script>
-    <script src="/shared/wait-messages.js"></script>
-    <script src="/shared/error-messages.js"></script>
-    <script src="/shared/error-display.js"></script>
-    <script src="/shared/storage.js"></script>
-    <script src="/shared/xhr.js"></script>
-    <script src="/shared/network.js"></script>
-    <script src="/shared/provisioning.js"></script>
-    <script src="/shared/user.js"></script>
-    <script src="/shared/command.js"></script>
-    <script src="/shared/history.js"></script>
-    <script src="/shared/state_machine.js"></script>
-
-    <script src="/shared/models/models.js"></script>
-    <script src="/shared/models/interaction_data.js"></script>
-
-    <script src="/shared/modules/page_module.js"></script>
-    <script src="/shared/modules/xhr_delay.js"></script>
-    <script src="/shared/modules/xhr_disable_form.js"></script>
-    <script src="/shared/modules/cookie_check.js"></script>
-    <script src="/shared/modules/interaction_data.js"></script>
-
-    <script src="/dialog/resources/internal_api.js"></script>
-    <script src="/dialog/resources/helpers.js"></script>
-    <script src="/dialog/resources/state.js"></script>
-
-    <script src="/dialog/controllers/actions.js"></script>
-    <script src="/dialog/controllers/pick_email.js"></script>
-    <script src="/dialog/controllers/add_email.js"></script>
-    <script src="/dialog/controllers/dialog.js"></script>
-    <script src="/dialog/controllers/check_registration.js"></script>
-    <script src="/dialog/controllers/authenticate.js"></script>
-    <script src="/dialog/controllers/required_email.js"></script>
-    <script src="/dialog/controllers/verify_primary_user.js"></script>
-    <script src="/dialog/controllers/generate_assertion.js"></script>
-    <script src="/dialog/controllers/provision_primary_user.js"></script>
-    <script src="/dialog/controllers/primary_user_provisioned.js"></script>
-    <script src="/dialog/controllers/is_this_your_computer.js"></script>
-    <script src="/dialog/controllers/set_password.js"></script>
-    <script src="/dialog/controllers/rp_info.js"></script>
-
-    <script src="/pages/page_helpers.js"></script>
-    <script src="/pages/verify_secondary_address.js"></script>
-    <script src="/pages/forgot.js"></script>
-    <script src="/pages/manage_account.js"></script>
-    <script src="/pages/signin.js"></script>
-    <script src="/pages/signup.js"></script>
-    <script src="/pages/about.js"></script>
+    <script src="/common/js/renderer.js"></script>
+    <script src="/common/js/class.js"></script>
+    <script src="/common/js/mediator.js"></script>
+    <script src="/common/js/tooltip.js"></script>
+    <script src="/common/js/validation.js"></script>
+    <script src="/common/js/helpers.js"></script>
+    <script src="/common/js/screens.js"></script>
+    <script src="/common/js/browser-support.js"></script>
+    <script src="/common/js/enable_cookies_url.js"></script>
+    <script src="/common/js/wait-messages.js"></script>
+    <script src="/common/js/error-messages.js"></script>
+    <script src="/common/js/error-display.js"></script>
+    <script src="/common/js/storage.js"></script>
+    <script src="/common/js/xhr.js"></script>
+    <script src="/common/js/network.js"></script>
+    <script src="/common/js/provisioning.js"></script>
+    <script src="/common/js/user.js"></script>
+    <script src="/common/js/command.js"></script>
+    <script src="/common/js/history.js"></script>
+    <script src="/common/js/state_machine.js"></script>
+
+    <script src="/common/js/models/models.js"></script>
+    <script src="/common/js/models/interaction_data.js"></script>
+
+    <script src="/common/js/modules/page_module.js"></script>
+    <script src="/common/js/modules/xhr_delay.js"></script>
+    <script src="/common/js/modules/xhr_disable_form.js"></script>
+    <script src="/common/js/modules/cookie_check.js"></script>
+    <script src="/common/js/modules/interaction_data.js"></script>
+
+    <script src="/dialog/js/misc/internal_api.js"></script>
+    <script src="/dialog/js/misc/helpers.js"></script>
+    <script src="/dialog/js/misc/state.js"></script>
+
+    <script src="/dialog/js/modules/actions.js"></script>
+    <script src="/dialog/js/modules/pick_email.js"></script>
+    <script src="/dialog/js/modules/add_email.js"></script>
+    <script src="/dialog/js/modules/dialog.js"></script>
+    <script src="/dialog/js/modules/check_registration.js"></script>
+    <script src="/dialog/js/modules/authenticate.js"></script>
+    <script src="/dialog/js/modules/required_email.js"></script>
+    <script src="/dialog/js/modules/verify_primary_user.js"></script>
+    <script src="/dialog/js/modules/generate_assertion.js"></script>
+    <script src="/dialog/js/modules/provision_primary_user.js"></script>
+    <script src="/dialog/js/modules/primary_user_provisioned.js"></script>
+    <script src="/dialog/js/modules/is_this_your_computer.js"></script>
+    <script src="/dialog/js/modules/set_password.js"></script>
+    <script src="/dialog/js/modules/rp_info.js"></script>
+
+    <script src="/pages/js/page_helpers.js"></script>
+    <script src="/pages/js/verify_secondary_address.js"></script>
+    <script src="/pages/js/forgot.js"></script>
+    <script src="/pages/js/manage_account.js"></script>
+    <script src="/pages/js/signin.js"></script>
+    <script src="/pages/js/signup.js"></script>
+    <script src="/pages/js/about.js"></script>
 
     <script src="testHelpers/helpers.js"></script>
 
     <script src="cases/include.js"></script>
 
-    <script src="cases/shared/helpers.js"></script>
-    <script src="cases/shared/renderer.js"></script>
-    <script src="cases/shared/screens.js"></script>
-    <script src="cases/shared/tooltip.js"></script>
-    <script src="cases/shared/error-display.js"></script>
-    <script src="cases/shared/browser-support.js"></script>
-    <script src="cases/shared/enable_cookies_url.js"></script>
-    <script src="cases/shared/validation.js"></script>
-    <script src="cases/shared/storage.js"></script>
-    <script src="cases/shared/xhr.js"></script>
-    <script src="cases/shared/network.js"></script>
-    <script src="cases/shared/user.js"></script>
-    <script src="cases/shared/command.js"></script>
-    <script src="cases/shared/history.js"></script>
-    <script src="cases/shared/state_machine.js"></script>
-
-    <script src="cases/shared/models/interaction_data.js"></script>
-
-    <script src="cases/shared/modules/page_module.js"></script>
-    <script src="cases/shared/modules/xhr_delay.js"></script>
-    <script src="cases/shared/modules/xhr_disable_form.js"></script>
-    <script src="cases/shared/modules/cookie_check.js"></script>
-    <script src="cases/shared/modules/interaction_data.js"></script>
-
-    <script src="cases/pages/browserid.js"></script>
-    <script src="cases/pages/page_helpers.js"></script>
-    <script src="cases/pages/verify_secondary_address.js"></script>
-    <script src="cases/pages/forgot.js"></script>
-    <script src="cases/pages/signin.js"></script>
-    <script src="cases/pages/signup.js"></script>
-    <script src="cases/pages/manage_account.js"></script>
-    <script src="cases/pages/about.js"></script>
-
-    <script src="cases/resources/internal_api.js"></script>
-    <script src="cases/resources/helpers.js"></script>
-    <script src="cases/resources/state.js"></script>
-
-    <script src="cases/controllers/actions.js"></script>
-    <script src="cases/controllers/pick_email.js"></script>
-    <script src="cases/controllers/add_email.js"></script>
-    <script src="cases/controllers/check_registration.js"></script>
-    <script src="cases/controllers/authenticate.js"></script>
-    <script src="cases/controllers/required_email.js"></script>
-    <script src="cases/controllers/verify_primary_user.js"></script>
-    <script src="cases/controllers/generate_assertion.js"></script>
-    <script src="cases/controllers/provision_primary_user.js"></script>
-    <script src="cases/controllers/primary_user_provisioned.js"></script>
-    <script src="cases/controllers/is_this_your_computer.js"></script>
-    <script src="cases/controllers/set_password.js"></script>
-    <script src="cases/controllers/rp_info.js"></script>
+    <script src="cases/common/js/helpers.js"></script>
+    <script src="cases/common/js/renderer.js"></script>
+    <script src="cases/common/js/screens.js"></script>
+    <script src="cases/common/js/tooltip.js"></script>
+    <script src="cases/common/js/error-display.js"></script>
+    <script src="cases/common/js/browser-support.js"></script>
+    <script src="cases/common/js/enable_cookies_url.js"></script>
+    <script src="cases/common/js/validation.js"></script>
+    <script src="cases/common/js/storage.js"></script>
+    <script src="cases/common/js/xhr.js"></script>
+    <script src="cases/common/js/network.js"></script>
+    <script src="cases/common/js/user.js"></script>
+    <script src="cases/common/js/command.js"></script>
+    <script src="cases/common/js/history.js"></script>
+    <script src="cases/common/js/state_machine.js"></script>
+
+    <script src="cases/common/js/models/interaction_data.js"></script>
+
+    <script src="cases/common/js/modules/page_module.js"></script>
+    <script src="cases/common/js/modules/xhr_delay.js"></script>
+    <script src="cases/common/js/modules/xhr_disable_form.js"></script>
+    <script src="cases/common/js/modules/cookie_check.js"></script>
+    <script src="cases/common/js/modules/interaction_data.js"></script>
+
+    <script src="cases/pages/js/browserid.js"></script>
+    <script src="cases/pages/js/page_helpers.js"></script>
+    <script src="cases/pages/js/verify_secondary_address.js"></script>
+    <script src="cases/pages/js/forgot.js"></script>
+    <script src="cases/pages/js/signin.js"></script>
+    <script src="cases/pages/js/signup.js"></script>
+    <script src="cases/pages/js/manage_account.js"></script>
+    <script src="cases/pages/js/about.js"></script>
+
+    <script src="cases/dialog/js/misc/internal_api.js"></script>
+    <script src="cases/dialog/js/misc/helpers.js"></script>
+    <script src="cases/dialog/js/misc/state.js"></script>
+
+    <script src="cases/dialog/js/modules/actions.js"></script>
+    <script src="cases/dialog/js/modules/pick_email.js"></script>
+    <script src="cases/dialog/js/modules/add_email.js"></script>
+    <script src="cases/dialog/js/modules/check_registration.js"></script>
+    <script src="cases/dialog/js/modules/authenticate.js"></script>
+    <script src="cases/dialog/js/modules/required_email.js"></script>
+    <script src="cases/dialog/js/modules/verify_primary_user.js"></script>
+    <script src="cases/dialog/js/modules/generate_assertion.js"></script>
+    <script src="cases/dialog/js/modules/provision_primary_user.js"></script>
+    <script src="cases/dialog/js/modules/primary_user_provisioned.js"></script>
+    <script src="cases/dialog/js/modules/is_this_your_computer.js"></script>
+    <script src="cases/dialog/js/modules/set_password.js"></script>
+    <script src="cases/dialog/js/modules/rp_info.js"></script>
 
     <!-- must go last or all other tests will fail. -->
-    <script src="cases/controllers/dialog.js"></script>
+    <script src="cases/dialog/js/modules/dialog.js"></script>
 	</body>
 </html>