diff --git a/.gitignore b/.gitignore
index b0346bd65581b6b621f1720e7f860c7d88efd317..3641ea8f464ca6631e49512bb28279697cecc4e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@
 /node_modules
 /var
 /rpmbuild
+/npm-debug.log
 
diff --git a/browserid/app.js b/bin/browserid
old mode 100644
new mode 100755
similarity index 51%
rename from browserid/app.js
rename to bin/browserid
index 6f661ee7c23063c93e6e44bfcfaaafda91e8e68f..710f4ea686b64267d8285826211b7be1ad263db0
--- a/browserid/app.js
+++ b/bin/browserid
@@ -1,3 +1,5 @@
+#!/usr/bin/env node
+
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  *
@@ -37,25 +39,31 @@ const
 fs = require('fs'),
 path = require('path'),
 url = require('url'),
-wsapi = require('./lib/wsapi.js'),
-ca = require('./lib/ca.js'),
-httputils = require('./lib/httputils.js'),
-sessions = require('connect-cookie-session'),
+sessions = require('connect-cookie-session');
+
+// add lib/ to the require path
+require.paths.unshift(path.join(__dirname, '..', 'lib'));
+
+const
+wsapi = require('browserid/wsapi.js'),
+ca = require('browserid/ca.js'),
+httputils = require('httputils.js'),
 express = require('express'),
-secrets = require('../libs/secrets.js'),
-db = require('./lib/db.js'),
-configuration = require('../libs/configuration.js'),
-heartbeat = require('../libs/heartbeat.js'),
-substitution = require('../libs/substitute.js');
-metrics = require("../libs/metrics.js"),
-logger = require("../libs/logging.js").logger;
+secrets = require('secrets.js'),
+db = require('db.js'),
+config = require('configuration.js'),
+heartbeat = require('heartbeat.js'),
+metrics = require("metrics.js"),
+logger = require("logging.js").logger,
+forward = require('browserid/http_forward');
 
-logger.info("browserid server starting up");
+var app = undefined;
 
-// open the databse
-db.open(configuration.get('database'));
+app = express.createServer();
 
-const COOKIE_SECRET = secrets.hydrateSecret('browserid_cookie', configuration.get('var_path'));
+logger.info("browserid server starting up");
+
+const COOKIE_SECRET = secrets.hydrateSecret('browserid_cookie', config.get('var_path'));
 const COOKIE_KEY = 'browserid_state';
 
 function internal_redirector(new_url, suppress_noframes) {
@@ -68,10 +76,10 @@ function internal_redirector(new_url, suppress_noframes) {
 }
 
 function router(app) {
-  app.set("views", __dirname + '/views');
+  app.set("views", path.join(__dirname, "..", "resources", "views"));
 
   app.set('view options', {
-    production: configuration.get('use_minified_resources')
+    production: config.get('use_minified_resources')
   });
 
   // this should probably be an internal redirect
@@ -82,7 +90,7 @@ function router(app) {
       title: 'A Better Way to Sign In',
       layout: 'dialog_layout.ejs',
       useJavascript: true,
-      production: configuration.get('use_minified_resources')
+      production: config.get('use_minified_resources')
     });
   });
 
@@ -99,7 +107,7 @@ function router(app) {
     res.removeHeader('x-frame-options');
     res.render('relay.ejs', {
       layout: false,
-      production: configuration.get('use_minified_resources')
+      production: config.get('use_minified_resources')
     });
   });
 
@@ -192,139 +200,160 @@ function router(app) {
   });
 };
 
-exports.setup = function(server) {
-  // request to logger, dev formatted which omits personal data in the requests
-  server.use(express.logger({
-    format: 'dev',
-    stream: {
-      write: function(x) {
-        logger.info(typeof x === 'string' ? x.trim() : x);
-      }
+// request to logger, dev formatted which omits personal data in the requests
+app.use(express.logger({
+  format: 'dev',
+  stream: {
+    write: function(x) {
+      logger.info(typeof x === 'string' ? x.trim() : x);
     }
-  }));
-
-  // over SSL?
-  var overSSL = (configuration.get('scheme') == 'https');
-
-  server.use(express.cookieParser());
-
-  var cookieSessionMiddleware = sessions({
-    secret: COOKIE_SECRET,
-    key: COOKIE_KEY,
-    cookie: {
-      path: '/wsapi',
-      httpOnly: true,
-      // IMPORTANT: we allow users to go 1 weeks on the same device
-      // without entering their password again
-      maxAge: configuration.get('authentication_duration_ms'),
-      secure: overSSL
-    }
-  });
-
-  // cookie sessions && cache control
-  server.use(function(req, resp, next) {
-    // cookie sessions are only applied to calls to /wsapi
-    // as all other resources can be aggressively cached
-    // by layers higher up based on cache control headers.
-    // the fallout is that all code that interacts with sessions
-    // should be under /wsapi
-    if (/^\/wsapi/.test(req.url)) {
-      // explicitly disallow caching on all /wsapi calls (issue #294)
-      resp.setHeader('Cache-Control', 'no-cache, max-age=0');
-
-      // we set this parameter so the connect-cookie-session
-      // sends the cookie even though the local connection is HTTP
-      // (the load balancer does SSL)
-      if (overSSL)
-        req.connection.proxySecure = true;
-
-      return cookieSessionMiddleware(req, resp, next);
-
+  }
+}));
+
+// if these are verify requests, we'll redirect them off
+// to the verifier
+if (config.get('verifier_url')) {
+  app.use(function(req, res, next) {
+    if (/^\/verify$/.test(req.url)) {
+      forward(
+        config.get('verifier_url'), req, res,
+        function(err) {
+          if (err) {
+            logger.error("error forwarding request:", err);
+          }
+        });
     } else {
       return next();
     }
   });
+}
 
-  // verify all JSON responses are objects - prevents regression on issue #217
-  server.use(function(req, resp, next) {
-    var realRespJSON = resp.json;
-    resp.json = function(obj) {
-      if (!obj || typeof obj !== 'object') {
-        logger.error("INTERNAL ERROR!  *all* json responses must be objects");
-        throw "internal error";
-      }
-      realRespJSON.call(resp, obj);
-    };
+// over SSL?
+var overSSL = (config.get('scheme') == 'https');
+
+app.use(express.cookieParser());
+
+var cookieSessionMiddleware = sessions({
+  secret: COOKIE_SECRET,
+  key: COOKIE_KEY,
+  cookie: {
+    path: '/wsapi',
+    httpOnly: true,
+    // IMPORTANT: we allow users to go 1 weeks on the same device
+    // without entering their password again
+    maxAge: config.get('authentication_duration_ms'),
+    secure: overSSL
+  }
+});
+
+// cookie sessions && cache control
+app.use(function(req, resp, next) {
+  // cookie sessions are only applied to calls to /wsapi
+  // as all other resources can be aggressively cached
+  // by layers higher up based on cache control headers.
+  // the fallout is that all code that interacts with sessions
+  // should be under /wsapi
+  if (/^\/wsapi/.test(req.url)) {
+    // explicitly disallow caching on all /wsapi calls (issue #294)
+    resp.setHeader('Cache-Control', 'no-cache, max-age=0');
+
+    // we set this parameter so the connect-cookie-session
+    // sends the cookie even though the local connection is HTTP
+    // (the load balancer does SSL)
+    if (overSSL)
+      req.connection.proxySecure = true;
+
+    return cookieSessionMiddleware(req, resp, next);
+
+  } else {
     return next();
-  });
-
-  server.use(express.bodyParser());
-
-  // Check CSRF token early.  POST requests are only allowed to
-  // /wsapi and they always must have a valid csrf token
-  server.use(function(req, resp, next) {
-    // only on POSTs
-    if (req.method == "POST") {
-      var denied = false;
-      if (!/^\/wsapi/.test(req.url)) { // post requests only allowed to /wsapi
-        denied = true;
-        logger.warn("CSRF validation failure: POST only allowed to /wsapi urls.  not '" + req.url + "'");
-      }
-
-      if (req.session === undefined) { // there must be a session
-        denied = true;
-        logger.warn("CSRF validation failure: POST calls to /wsapi require an active session");
-      }
+  }
+});
 
-      // the session must have a csrf token
-      if (typeof req.session.csrf !== 'string') {
-        denied = true;
-        logger.warn("CSRF validation failure: POST calls to /wsapi require an csrf token to be set");
-      }
+config.performSubstitution(app);
 
-      // and the token must match what is sent in the post body
-      if (req.body.csrf != req.session.csrf) {
-        denied = true;
-        // if any of these things are false, then we'll block the request
-        logger.warn("CSRF validation failure, token mismatch. got:" + req.body.csrf + " want:" + req.session.csrf);
-      }
+// verify all JSON responses are objects - prevents regression on issue #217
+app.use(function(req, resp, next) {
+  var realRespJSON = resp.json;
+  resp.json = function(obj) {
+    if (!obj || typeof obj !== 'object') {
+      logger.error("INTERNAL ERROR!  *all* json responses must be objects");
+      throw "internal error";
+    }
+    realRespJSON.call(resp, obj);
+  };
+  return next();
+});
+
+app.use(express.bodyParser());
+
+// Check CSRF token early.  POST requests are only allowed to
+// /wsapi and they always must have a valid csrf token
+app.use(function(req, resp, next) {
+  // only on POSTs
+  if (req.method == "POST") {
+    var denied = false;
+    if (!/^\/wsapi/.test(req.url)) { // post requests only allowed to /wsapi
+      denied = true;
+      logger.warn("CSRF validation failure: POST only allowed to /wsapi urls.  not '" + req.url + "'");
+    }
 
-      if (denied) return httputils.badRequest(resp, "CSRF violation");
+    if (req.session === undefined) { // there must be a session
+      denied = true;
+      logger.warn("CSRF validation failure: POST calls to /wsapi require an active session");
+    }
 
+    // the session must have a csrf token
+    if (typeof req.session.csrf !== 'string') {
+      denied = true;
+      logger.warn("CSRF validation failure: POST calls to /wsapi require an csrf token to be set");
     }
-    return next();
-  });
 
-  // a tweak to get the content type of host-meta correct
-  server.use(function(req, resp, next) {
-    if (req.url === '/.well-known/host-meta') {
-      resp.setHeader('content-type', 'text/xml');
+    // and the token must match what is sent in the post body
+    if (req.body.csrf != req.session.csrf) {
+      denied = true;
+      // if any of these things are false, then we'll block the request
+      logger.warn("CSRF validation failure, token mismatch. got:" + req.body.csrf + " want:" + req.session.csrf);
     }
-    next();
-  });
 
-  // Strict Transport Security
-  server.use(function(req, resp, next) {
-      if (overSSL) {
-        // expires in 30 days, include subdomains like www
-        resp.setHeader("Strict-Transport-Security", "max-age=2592000; includeSubdomains");
-      }
-      next();
-    });
+    if (denied) return httputils.badRequest(resp, "CSRF violation");
 
-  // prevent framing
-  server.use(function(req, resp, next) {
-    resp.setHeader('x-frame-options', 'DENY');
-    next();
-  });
+  }
+  return next();
+});
 
-  // add middleware to re-write urls if needed
-  configuration.performSubstitution(server);
+// a tweak to get the content type of host-meta correct
+app.use(function(req, resp, next) {
+  if (req.url === '/.well-known/host-meta') {
+    resp.setHeader('content-type', 'text/xml');
+  }
+  next();
+});
+
+// Strict Transport Security
+app.use(function(req, resp, next) {
+  if (overSSL) {
+    // expires in 30 days, include subdomains like www
+    resp.setHeader("Strict-Transport-Security", "max-age=2592000; includeSubdomains");
+  }
+  next();
+});
 
-  // add the actual URL handlers other than static
-  router(server);
-}
+// prevent framing
+app.use(function(req, resp, next) {
+  resp.setHeader('x-frame-options', 'DENY');
+  next();
+});
 
-exports.shutdown = function() {
-  db.close();
-};
+// add the actual URL handlers other than static
+router(app);
+
+// use the express 'static' middleware for serving of static files (cache headers, HTTP range, etc)
+app.use(express.static(path.join(__dirname, "..", "resources", "static")));
+
+// open the databse
+db.open(config.get('database'), function () {
+  app.listen(config.get('port'), config.get('hostname'), function() {
+    logger.info("running on http://" + app.address().address + ":" + app.address().port);
+  });
+});
\ No newline at end of file
diff --git a/performance/run.js b/bin/load_gen
similarity index 97%
rename from performance/run.js
rename to bin/load_gen
index fea7840d007065bffe5d4f0721b24240b8b4a916..b3cd137a90a817b068aad1648ade916f8544f962 100755
--- a/performance/run.js
+++ b/bin/load_gen
@@ -20,7 +20,7 @@
  * the Initial Developer. All Rights Reserved.
  *
  * Contributor(s):
- *   Lloyd Hilaiel <lloyd@hilaiel.com> 
+ *   Lloyd Hilaiel <lloyd@hilaiel.com>
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -40,8 +40,7 @@
  * tool, which is capable of analysing the maximum active users that
  * a browserid deployment can support */
 
-
-// option processing with optimist 
+// option processing with optimist
 var argv = require('optimist')
 .usage('Apply load to a BrowserID server.\nUsage: $0', [ "foo" ])
 .alias('h', 'help')
@@ -92,14 +91,14 @@ var completed = {
 const activitiesPerUserPerSecond = (40.0 / ( 24 * 60 * 60 )); 
 
 // activities
-var activity = { 
+var activity = {
   "signup": {
     // a %20 montly growth rate means there's a 20% probability of
     // the monthly activity generated by an active user being a
     // new user signup
     probability: (1.0 / (40 * 28 * .2))
   },
-  "reset_pass": { 
+  "reset_pass": {
     // users forget their password once every 4 weeks
     probability: (1.0 / (40 * 28.0))
   },
@@ -129,7 +128,7 @@ var activity = {
 // now attach "start functions" to the activity map by including
 // the implementation of each activity
 Object.keys(activity).forEach(function(k) {
-  activity[k].startFunc = require("./lib/" + k).startFunc;
+  activity[k].startFunc = require("../lib/performance/" + k).startFunc;
 });
 
 // probs is a 2d array mapping normalized probabilities from 0-1 to
@@ -237,12 +236,12 @@ function poll() {
 
   // how many active users would we like to simulate
   var targetActive = args.m;
-  
+
   // if we're not throttled, then we'll trying 150% as many as
   // we're simulating right now.  If we're not simulating at least
   // 10000 active users, that shall be our lower bound
   if (!targetActive) {
-    if (averages[0] > 10000) targetActive = averages[0] * 1.5; 
+    if (averages[0] > 10000) targetActive = averages[0] * 1.5;
     else targetActive = 10000;
   }
 
diff --git a/verifier/app.js b/bin/verifier
old mode 100644
new mode 100755
similarity index 65%
rename from verifier/app.js
rename to bin/verifier
index 5e2c840d249a7c604686bd28371c6401ad992b90..6ba09340da954cef1d9884266a8e7b252a23b22b
--- a/verifier/app.js
+++ b/bin/verifier
@@ -1,3 +1,5 @@
+#!/usr/bin/env node
+
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  *
@@ -34,26 +36,51 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
-const    path = require('path'),
-          url = require('url'),
-           fs = require('fs'),
-certassertion = require('./lib/certassertion.js'),
-      express = require('express'),
-      metrics = require('../libs/metrics.js'),
-    heartbeat = require('../libs/heartbeat.js'),
-       logger = require('../libs/logging.js').logger;
+const
+sys = require("sys"),
+path = require('path'),
+url = require('url'),
+fs = require('fs'),
+express = require('express'),
+certassertion = require('../lib/verifier/certassertion.js'),
+metrics = require('../lib/metrics'),
+heartbeat = require('../lib/heartbeat'),
+logger = require('../lib/logging').logger;
 
 logger.info("verifier server starting up");
 
-// updating this call for certs now (Ben - 2011-09-06)
-// assertion is the single assertion of email
-// audience is the intended audience
-// certificates is the list of chained certificates, CSV-style
-function doVerify(req, resp, next) {
+const HOST = process.env['HOST'] || "127.0.0.1";
+const PORT = process.env['PORT'] || 62800;
+
+var app = express.createServer();
+
+// request to logger, dev formatted which omits personal data in the requests
+app.use(express.logger({
+  stream: {
+    write: function(x) {
+      logger.info(typeof x === 'string' ? x.trim() : x);
+    }
+  }
+}));
+
+app.use(express.bodyParser());
+
+// code_update is an internal api that causes the node server to
+// shut down.  This should never be externally accessible and
+// is used during the dead simple deployment procedure.
+app.get("/code_update", function (req, resp) {
+  logger.warn("code updated.  shutting down.");
+  process.exit();
+});
+
+// setup health check / heartbeat
+heartbeat.setup(app);
+
+app.post('/verify', function(req, resp, next) {
   req.body = req.body || {}
 
-  var assertion = (req.query && req.query.assertion) ? req.query.assertion : req.body.assertion;
-  var audience = (req.query && req.query.audience) ? req.query.audience : req.body.audience;
+  var assertion = req.body.assertion;
+  var audience = req.body.audience;
 
   if (!(assertion && audience))
     return resp.json({ status: "failure", reason: "need assertion and audience" });
@@ -91,33 +118,8 @@ function doVerify(req, resp, next) {
       });
     });
 
-}
-
-exports.setup = function(app) {
-  // request to logger, dev formatted which omits personal data in the requests
-
-  app.use(express.logger({
-    format: 'dev',
-    stream: {
-      write: function(x) {
-        logger.info(typeof x === 'string' ? x.trim() : x);
-      }
-    }
-  }));
-
-  app.use(express.bodyParser());
-
-  // code_update is an internal api that causes the node server to
-  // shut down.  This should never be externally accessible and
-  // is used during the dead simple deployment procedure.
-  app.get("/code_update", function (req, resp) {
-    logger.warn("code updated.  shutting down.");
-    process.exit();
-  });
-
-  // setup health check / heartbeat
-  heartbeat.setup(app);
+});
 
-  app.post('/', doVerify);
-  app.post('/verify', doVerify);
-};
+app.listen(PORT, HOST, function(conn) {
+  logger.info("running on http://" + app.address().address + ":" + app.address().port);
+});
diff --git a/browserid/run.js b/browserid/run.js
deleted file mode 100755
index 761fc95d6ef8c533bbe7c814bdb90aeb5935b537..0000000000000000000000000000000000000000
--- a/browserid/run.js
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env node
-
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-var  path = require("path"),
-fs = require("fs"),
-express = require("express"),
-logger = require("../libs/logging.js").logger;
-
-const amMain = (process.argv[1] === __filename);
-
-const PRIMARY_HOST = "127.0.0.1";
-const PRIMARY_PORT = 62700;
-
-var handler = require("./app.js");
-
-var app = undefined;
-
-exports.runServer = function() {
-  if (app) return;
-
-  app = express.createServer();
-
-  // let the specific server interact directly with the connect server to register their middleware
-  if (handler.setup) handler.setup(app);
-
-  // use the express 'static' middleware for serving of static files (cache headers, HTTP range, etc)
-  app.use(express.static(path.join(__dirname, "static")));
-
-  app.listen(PRIMARY_PORT, PRIMARY_HOST);
-};
-
-exports.stopServer = function(cb) {
-  if (!app) return;
-  app.on('close', function() {
-    cb();
-  });
-  app.close();
-  app = undefined;
-}
-
-// when directly invoked from the command line, we'll start the server
-if (amMain) exports.runServer();
-
diff --git a/browserid/tests/lib/start-stop.js b/browserid/tests/lib/start-stop.js
deleted file mode 100644
index d8a837f7e4629f3a35686552d365531baa63cb69..0000000000000000000000000000000000000000
--- a/browserid/tests/lib/start-stop.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-const assert = require('assert'),
-      fs = require('fs'),
-      path = require('path'),
-      wsapi = require('./wsapi.js');
-
-const varPath = path.join(path.dirname(path.dirname(__dirname)), "var");
-
-function removeVarDir() {
-  try {
-    fs.readdirSync(varPath).forEach(function(f) {
-        fs.unlinkSync(path.join(varPath, f));
-    });
-    fs.rmdirSync(varPath);
-  } catch(e) {}
-}
-
-exports.addStartupBatches = function(suite) {
-  suite.addBatch({
-    "remove the user database": {
-      topic: function() {
-        removeVarDir();
-        fs.mkdirSync(varPath, 0755);
-        return true;
-      },
-      "directory should exist": function(x) {
-        assert.ok(fs.statSync(varPath).isDirectory());
-      }
-    }
-  });
-
-  suite.addBatch({
-    "run the server": {
-      topic: function() {
-        const server = require("../../run.js");
-        server.runServer();
-        return true;
-      },
-      "server should be running": {
-        topic: wsapi.get('/__heartbeat__'),
-        "server is running": function (r, err) {
-          assert.equal(r.code, 200);
-        }
-      }
-    }
-  });
-
-  suite.addBatch({
-    "wait for readiness": {
-      topic: function() {
-        var cb = this.callback;
-        require("../../lib/db.js").onReady(function() { cb(true) });
-      },
-      "readiness has arrived": function(v) {
-        assert.ok(v);
-      }
-    }
-  });
-};
-
-exports.addShutdownBatches = function(suite) {
-  // stop the server
-  suite.addBatch({
-    "stop the server": {
-      topic: function() {
-        const server = require("../../run.js");
-        var cb = this.callback;
-        server.stopServer(function() { cb(true); });
-      },
-      "stopped": function(x) {
-        assert.strictEqual(x, true);
-      }
-    }
-  });
-
-  // stop the database
-  suite.addBatch({
-    "stop the database": {
-      topic: function() {
-        require("../../lib/db.js").close(this.callback);
-      },
-      "stopped": function(x) {
-        assert.isUndefined(x);
-      }
-    }
-  });
-
-  // clean up
-  suite.addBatch({
-    "clean up": {
-      topic: function() {
-        removeVarDir();
-        return true;
-      },
-      "directory should not exist": function(x) {
-        assert.throws(function(){ fs.statSync(varPath) });
-      }
-    }
-  });
-}
\ No newline at end of file
diff --git a/DEPLOYMENT.md b/docs/DEPLOYMENT.md
similarity index 100%
rename from DEPLOYMENT.md
rename to docs/DEPLOYMENT.md
diff --git a/performance/README.md b/docs/LOAD_GENERATION.md
similarity index 100%
rename from performance/README.md
rename to docs/LOAD_GENERATION.md
diff --git a/ORGANIZATION.md b/docs/ORGANIZATION.md
similarity index 100%
rename from ORGANIZATION.md
rename to docs/ORGANIZATION.md
diff --git a/rp/index.html b/example/index.html
similarity index 100%
rename from rp/index.html
rename to example/index.html
diff --git a/rp/jquery-min.js b/example/jquery-min.js
similarity index 100%
rename from rp/jquery-min.js
rename to example/jquery-min.js
diff --git a/browserid/lib/ca.js b/lib/browserid/ca.js
similarity index 92%
rename from browserid/lib/ca.js
rename to lib/browserid/ca.js
index 2c4cee8d34d0a911708026cea5f65d21eeb72fe0..ab07a592b45e1ef6b205dd49cc694d67845ad85f 100644
--- a/browserid/lib/ca.js
+++ b/lib/browserid/ca.js
@@ -39,8 +39,7 @@
 var jwcert = require('jwcrypto/jwcert'),
     jwk = require('jwcrypto/jwk'),
     jws = require('jwcrypto/jws'),
-    configuration = require('../../libs/configuration'),
-    secrets = require('../../libs/secrets'),
+    configuration = require('configuration'),
     path = require("path"),
     fs = require("fs");
 
@@ -59,7 +58,7 @@ function parseCert(serializedCert) {
 function certify(email, publicKey, expiration) {
   if (expiration == null)
     throw "expiration cannot be null";
-  return new jwcert.JWCert(HOSTNAME, expiration, publicKey, {email: email}).sign(secrets.SECRET_KEY);
+  return new jwcert.JWCert(HOSTNAME, expiration, publicKey, {email: email}).sign(configuration.get('secret_key'));
 }
 
 function verifyChain(certChain, cb) {
@@ -70,8 +69,8 @@ function verifyChain(certChain, cb) {
       // for now we only do browserid.org issued keys
       if (issuer != HOSTNAME)
         return next(null);
-      
-      next(secrets.PUBLIC_KEY);
+
+      next(exports.PUBLIC_KEY);
     }, cb);
 }
 
@@ -80,4 +79,4 @@ exports.certify = certify;
 exports.verifyChain = verifyChain;
 exports.parsePublicKey = parsePublicKey;
 exports.parseCert = parseCert;
-exports.PUBLIC_KEY = secrets.PUBLIC_KEY;
\ No newline at end of file
+exports.PUBLIC_KEY = configuration.get('public_key');
diff --git a/browserid/lib/email.js b/lib/browserid/email.js
similarity index 96%
rename from browserid/lib/email.js
rename to lib/browserid/email.js
index 7d8db0dfdc68d24aec062a39940e4b05313afe19..0a171152984cc10902f429022b1d08e79030c71b 100644
--- a/browserid/lib/email.js
+++ b/lib/browserid/email.js
@@ -34,13 +34,13 @@
  * ***** END LICENSE BLOCK ***** */
 
 const
-db = require('./db'),
+db = require('db.js'),
 emailer = require('nodemailer'),
 fs = require('fs'),
 path = require('path'),
 mustache = require('mustache'),
-config = require('../../libs/configuration.js'),
-logger = require('../../libs/logging.js').logger;
+config = require('configuration.js'),
+logger = require('logging.js').logger;
 
 /* if smtp parameters are configured, use them */
 var smtp_params = config.get('smtp');
diff --git a/browserid/lib/fake_verification.js b/lib/browserid/fake_verification.js
similarity index 100%
rename from browserid/lib/fake_verification.js
rename to lib/browserid/fake_verification.js
diff --git a/lib/browserid/http_forward.js b/lib/browserid/http_forward.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf69852f8d666a23964713c5995f467cecd6880c
--- /dev/null
+++ b/lib/browserid/http_forward.js
@@ -0,0 +1,41 @@
+const
+url = require('url'),
+http = require('http'),
+https = require('https'),
+logger = require('logging.js').logger;
+
+module.exports = function(dest, req, res, cb) {
+  var u = url.parse(dest);
+
+  var m = u.protocol === 'http:' ? http : https;
+
+  var preq = m.request({
+    host: u.hostname,
+    port: u.port,
+    path: u.pathname,
+    method: req.method
+  }, function(pres) {
+    res.writeHead(
+      pres.statusCode,
+      pres.headers
+    );
+    pres.on('data', function (chunk) {
+      res.write(chunk);
+    }).on('end', function() {
+      res.end();
+      cb();
+    });
+  }).on('error', function(e) {
+    res.end();
+    cb(e);
+  });
+
+  if (req.headers['content-type']) {
+    preq.setHeader('content-type', req.headers['content-type']);
+  }
+
+  req.on('data', function(chunk) { preq.write(chunk) })
+     .on('end', function() { preq.end() });
+
+  logger.info("forwarding request to " + dest);
+};
\ No newline at end of file
diff --git a/browserid/lib/prove_template.txt b/lib/browserid/prove_template.txt
similarity index 100%
rename from browserid/lib/prove_template.txt
rename to lib/browserid/prove_template.txt
diff --git a/browserid/lib/wsapi.js b/lib/browserid/wsapi.js
similarity index 98%
rename from browserid/lib/wsapi.js
rename to lib/browserid/wsapi.js
index 9c75fdbfc731bbbc1769f39ecb25efac83b9938b..7934f85d3936029e4c90cfd17729354a9ad7c457 100644
--- a/browserid/lib/wsapi.js
+++ b/lib/browserid/wsapi.js
@@ -39,15 +39,15 @@
 // with HTTP methods and the like, apply middleware, etc.
 
 const
-db = require('./db.js'),
+db = require('db.js'),
 url = require('url'),
-httputils = require('./httputils.js'),
+httputils = require('httputils.js'),
 email = require('./email.js'),
 bcrypt = require('bcrypt'),
 crypto = require('crypto'),
-logger = require('../../libs/logging.js').logger,
+logger = require('logging.js').logger,
 ca = require('./ca.js'),
-configuration = require('../../libs/configuration.js');
+configuration = require('configuration.js');
 
 function checkParams(params) {
   return function(req, resp, next) {
diff --git a/libs/configuration.js b/lib/configuration.js
similarity index 72%
rename from libs/configuration.js
rename to lib/configuration.js
index 54a24237863368ff86def66c6ba16b3af114a756..50aaacaae83b133b56424aae1ec1937441de7704 100644
--- a/libs/configuration.js
+++ b/lib/configuration.js
@@ -43,8 +43,11 @@
  */
 
 const
-substitution = require('./substitute.js'),
-path = require('path');
+postprocess = require('postprocess'),
+path = require('path'),
+urlparse = require('urlparse'),
+secrets = require('./secrets'),
+temp = require('temp');
 
 var g_config = {
 };
@@ -71,9 +74,7 @@ const g_configs = { };
 // production is the configuration that runs on our
 // public service (browserid.org)
 g_configs.production = {
-  hostname: 'browserid.org',
-  port: '443',
-  scheme: 'https',
+  URL: 'https://browserid.org',
   use_minified_resources: true,
   var_path: '/home/browserid/var/',
   database: {
@@ -86,21 +87,10 @@ g_configs.production = {
   certificate_validity_ms: (24 * 60 * 60 * 1000)
 };
 
-// beta (diresworb.org) the only difference from production 
-// is the hostname
-g_configs.beta = JSON.parse(JSON.stringify(g_configs.production));
-g_configs.beta.hostname = 'diresworb.org';
-
-// development (dev.diresworb.org) the only difference from production 
-// is, again, the hostname
-g_configs.development = JSON.parse(JSON.stringify(g_configs.production));
-g_configs.development.hostname = 'dev.diresworb.org';
 
 // local development configuration
 g_configs.local =  {
-  hostname: '127.0.0.1',
-  port: '10002',
-  scheme: 'http',
+  URL: 'http://127.0.0.1:10002',
   email_to_console: true, // don't send email, just dump verification URLs to console.
   use_minified_resources: false,
   var_path: path.join(__dirname, "..", "var"),
@@ -127,10 +117,19 @@ Object.keys(g_configs).forEach(function(config) {
 
 // test environments are variations on local
 g_configs.test_json = JSON.parse(JSON.stringify(g_configs.local));
-g_configs.test_json.database = { driver: "json", unit_test: true }; 
+g_configs.test_json.database = {
+  driver: "json",
+  // use a temporary path for testing
+  path: temp.path({suffix: '.db'})
+};
 
 g_configs.test_mysql = JSON.parse(JSON.stringify(g_configs.local));
-g_configs.test_mysql.database = { driver: "mysql", user: "test", unit_test: true }; 
+g_configs.test_mysql.database = {
+  driver: "mysql",
+  user: "test",
+  database: "browserid_" + secrets.generate(6),
+  create_schema: true
+};
 
 // default deployment is local
 if (undefined === process.env['NODE_ENV']) {
@@ -141,13 +140,36 @@ g_config = g_configs[process.env['NODE_ENV']];
 
 if (g_config === undefined) throw "unknown environment: " + exports.get('env');
 
-function getPortForURL() {
-  if (g_config['scheme'] === 'https' && g_config['port'] === '443') return "";
-  if (g_config['scheme'] === 'http' && g_config['port'] === '80') return "";
-  return ":" + g_config['port'];
+// what url are we running under?
+{
+  var ourURL = process.env['BROWSERID_URL'] || g_config['URL'];
+  var purl = urlparse(ourURL).validate().normalize().originOnly();
+  g_config.URL = purl.toString();
+  g_config.hostname = purl.host;
+  g_config.scheme = purl.scheme;
+  g_config.port = purl.port || (purl.scheme == 'https' ? 443 : 80);
+}
+
+if (process.env['VERIFIER_URL']) {
+  var url = urlparse(process.env['VERIFIER_URL']).validate().normalize().toString();
+  g_config.verifier_url = url;
+}
+
+// now handle ephemeral database configuration.  Used in testing.
+if (g_config.database.driver === 'mysql') {
+  if (process.env['MYSQL_DATABASE_NAME']) {
+    g_config.database.database = process.env['MYSQL_DATABASE_NAME'];
+  }
+} else if (g_config.database.driver === 'json') {
+  if (process.env['JSON_DATABASE_PATH']) {
+    g_config.database.path = process.env['JSON_DATABASE_PATH'];
+  }
 }
 
-g_config['URL'] = g_config['scheme'] + '://' + g_config['hostname'] + getPortForURL();
+// allow work factor to be twaddled from the environment
+if (process.env['BCRYPT_WORK_FACTOR']) {
+  g_config.bcrypt_work_factor = parseInt(process.env['BCRYPT_WORK_FACTOR']);
+}
 
 /*
  * Install middleware that will perform textual replacement on served output
@@ -159,12 +181,9 @@ g_config['URL'] = g_config['scheme'] + '://' + g_config['hostname'] + getPortFor
  * (all source files always should have the production hostname written into them)
  */
 exports.performSubstitution = function(app) {
-  if ((g_config.hostname != 'browserid.org' || g_config.port != '443' || g_config.scheme != 'https') &&
-      process.env['NODE_ENV'] !== 'local'){
-    app.use(substitution.substitute({
-      'https://browserid.org': g_config['URL'],
-      'browserid.org:443': g_config['hostname'] + ':' + g_config['port'],
-      'browserid.org': g_config['hostname']
+  if (g_config['URL'] != 'https://browserid.org') {
+    app.use(postprocess.middleware(function(req, buffer) {
+      return buffer.toString().replace(new RegExp('https://browserid.org', 'g'), g_config['URL']);
     }));
   }
 };
@@ -172,13 +191,10 @@ exports.performSubstitution = function(app) {
 // At the time this file is required, we'll determine the "process name" for this proc
 // if we can determine what type of process it is (browserid or verifier) based
 // on the path, we'll use that, otherwise we'll name it 'ephemeral'.
-if (process.argv[1] == path.join(__dirname, "..", "browserid", "run.js")) {
-  g_config['process_type'] = 'browserid';
-} else if (process.argv[1] == path.join(__dirname, "..", "verifier", "run.js")) {
-  g_config['process_type'] = 'verifier';
-} else {
-  g_config['process_type'] = 'ephemeral';
-}
+g_config['process_type'] = path.basename(process.argv[1], ".js");
+
+g_config['secret_key'] = secrets.loadSecretKey('root', exports.get('var_path'));
+g_config['public_key'] = secrets.loadPublicKey('root', exports.get('var_path'));
 
 // log the process_type
 setTimeout(function() {
diff --git a/browserid/lib/db.js b/lib/db.js
similarity index 96%
rename from browserid/lib/db.js
rename to lib/db.js
index 4545f2f71ea37ce55692d7ffee2892a45fb0a40b..97232454d422467662c6bb28eea7965c1b1184fa 100644
--- a/browserid/lib/db.js
+++ b/lib/db.js
@@ -33,7 +33,7 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
-var logger = require('../../libs/logging.js').logger;
+var logger = require('./logging.js').logger;
 
 var driver;
 
@@ -51,7 +51,7 @@ exports.open = function(cfg, cb) {
   var driverName = "json";
   if (cfg && cfg.driver) driverName = cfg.driver;
   try {
-    driver = require('./db_' + driverName + '.js');
+    driver = require('./db/' + driverName + '.js');
   } catch(e) {
     var msg = "FATAL: couldn't find database driver: " + driverName;
     console.log(msg);
diff --git a/browserid/lib/db_json.js b/lib/db/json.js
similarity index 80%
rename from browserid/lib/db_json.js
rename to lib/db/json.js
index 961761a9a5302344f967c672fc5d6433da560921..2fa8409131bc98673b5c24d1cb34c80e8743196e 100644
--- a/browserid/lib/db_json.js
+++ b/lib/db/json.js
@@ -41,10 +41,10 @@
 const
 path = require('path'),
 fs = require('fs'),
-secrets = require('../../libs/secrets'),
+secrets = require('../secrets.js'),
 jsel = require('JSONSelect'),
-logger = require('../../libs/logging.js').logger,
-configuration = require('../../libs/configuration.js'),
+logger = require('../logging.js').logger,
+configuration = require('../configuration.js'),
 temp = require('temp');
 
 // a little alias for stringify
@@ -52,6 +52,8 @@ const ESC = JSON.stringify;
 
 var dbPath = path.join(configuration.get('var_path'), "authdb.json");
 
+var drop_on_close = undefined;
+
 /* The JSON database. The structure is thus:
  *  [
  *    {
@@ -63,9 +65,11 @@ var dbPath = path.join(configuration.get('var_path'), "authdb.json");
  *  ]
  */
 
-var db = [];
-var stagedEmails = { };
-var staged = { };
+var db = {
+  users: [ ],
+  stagedEmails: { },
+  staged: { }
+};
 
 function flush() {
   try {
@@ -75,54 +79,58 @@ function flush() {
   }
 }
 
-// when unit_test is set in configuration, database should be
-// ephemeral.  which simply means we use a temp file and delete
-// on close;
-var delete_on_close = false;
+function sync() {
+  try {
+    db = JSON.parse(fs.readFileSync(dbPath));
+  } catch(e) {
+    logger.error("Cannot read database from " + dbPath);
+  }
+}
 
 exports.open = function(cfg, cb) {
-  delete_on_close = false;
-
-  if (cfg) {
-    if (cfg.unit_test) {
-      dbPath = temp.path({suffix: '.db'});
-      delete_on_close = true;
-    } else if (cfg.path) {
-      dbPath = cfg.path;
-    }
+  if (cfg && cfg.path) {
+    dbPath = cfg.path;
   }
+  logger.debug("opening JSON database: " + dbPath);
 
-  try {
-    db = JSON.parse(fs.readFileSync(dbPath));
-  } catch(e) {
+  if (cfg && cfg.drop_on_close) {
+    logger.debug("will remove database upon close");
+    drop_on_close = true;
   }
 
+  sync();
+
   setTimeout(cb, 0);
 };
 
 exports.close = function(cb) {
   flush();
-  setTimeout(cb, 0);
-  if (delete_on_close) {
-    delete_on_close = false;
-    fs.unlink(dbPath, function(err) { });
-  };
+
+  if (drop_on_close) {
+    drop_on_close = undefined;
+    fs.unlink(dbPath, function(err) { cb(err === null ? undefined : err); });
+  } else {
+    setTimeout(cb, 0);
+  }
 };
 
 exports.emailKnown = function(email, cb) {
-  var m = jsel.match(".emails :val(" + ESC(email) + ")", db);
+  sync();
+  var m = jsel.match(".emails :val(" + ESC(email) + ")", db.users);
   setTimeout(function() { cb(m.length > 0) }, 0);
 };
 
 exports.isStaged = function(email, cb) {
   if (cb) {
     setTimeout(function() {
-      cb(stagedEmails.hasOwnProperty(email));
+      sync();
+      cb(db.stagedEmails.hasOwnProperty(email));
     }, 0);
   }
 };
 
 exports.emailsBelongToSameAccount = function(lhs, rhs, cb) {
+  sync();
   emailToUserID(lhs, function(lhs_uid) {
     emailToUserID(rhs, function(rhs_uid) {
       cb(lhs_uid === rhs_uid);
@@ -139,7 +147,7 @@ function addEmailToAccount(existing_email, email, cb) {
     if (userID == undefined) {
       cb("no such email: " + existing_email, undefined);
     } else {
-      db[userID].emails.push(email);
+      db.users[userID].emails.push(email);
       flush();
       cb();
     }
@@ -150,45 +158,52 @@ exports.stageUser = function(email, cb) {
   var secret = secrets.generate(48);
 
   // overwrite previously staged users
-  staged[secret] = {
+  sync();
+  db.staged[secret] = {
     type: "add_account",
     email: email
   };
-
-  stagedEmails[email] = secret;
+  db.stagedEmails[email] = secret;
+  flush();
   setTimeout(function() { cb(secret); }, 0);
 };
 
 exports.stageEmail = function(existing_email, new_email, cb) {
   var secret = secrets.generate(48);
+
   // overwrite previously staged users
-  staged[secret] = {
+  sync();
+  db.staged[secret] = {
     type: "add_email",
     existing_email: existing_email,
     email: new_email
   };
-  stagedEmails[new_email] = secret;
+  db.stagedEmails[new_email] = secret;
+  flush();
+
   setTimeout(function() { cb(secret); }, 0);
 };
 
 
 exports.emailForVerificationSecret = function(secret, cb) {
   setTimeout(function() {
-    cb(staged[secret]? staged[secret].email:undefined);
+    cb(db.staged[secret] ? db.staged[secret].email : undefined);
   }, 0);
 };
 
 exports.gotVerificationSecret = function(secret, hash, cb) {
-  if (!staged.hasOwnProperty(secret)) return cb("unknown secret");
+  sync();
+  if (!db.staged.hasOwnProperty(secret)) return cb("unknown secret");
 
   // simply move from staged over to the emails "database"
-  var o = staged[secret];
-  delete staged[secret];
-  delete stagedEmails[o.email];
+  var o = db.staged[secret];
+  delete db.staged[secret];
+  delete db.stagedEmails[o.email];
+  flush();
   if (o.type === 'add_account') {
     exports.emailKnown(o.email, function(known) {
       function createAccount() {
-        db.push({
+        db.users.push({
           password: hash,
           emails: [ o.email ]
         });
@@ -232,25 +247,29 @@ exports.gotVerificationSecret = function(secret, hash, cb) {
 };
 
 exports.checkAuth = function(email, cb) {
-  var m = jsel.match(":root > object:has(.emails > :val(" + ESC(email) + ")) > .password", db);
+  sync();
+  var m = jsel.match(":root > object:has(.emails > :val(" + ESC(email) + ")) > .password", db.users);
   if (m.length === 0) m = undefined;
   else m = m[0];
   setTimeout(function() { cb(m) }, 0);
 };
 
 exports.updatePassword = function(email, hash, cb) {
-  var m = jsel.match(":root > object:has(.emails > :val(" + ESC(email) + "))", db);
+  sync();
+  var m = jsel.match(":root > object:has(.emails > :val(" + ESC(email) + "))", db.users);
   var err = undefined;
   if (m.length === 0) err = "no such email address";
   else m[0].password = hash;
+  flush();
   setTimeout(function() { cb(err) }, 0);
 };
 
 function emailToUserID(email, cb) {
+  sync();
   var id = undefined;
 
-  for (var i = 0; i < db.length; i++) {
-    if (jsel.match(":val(" + JSON.stringify(email) + ")", db[i]).length) {
+  for (var i = 0; i < db.users.length; i++) {
+    if (jsel.match(":val(" + JSON.stringify(email) + ")", db.users[i]).length) {
       id = i;
       break;
     }
@@ -261,13 +280,14 @@ function emailToUserID(email, cb) {
 }
 
 exports.listEmails = function(email, cb) {
+  sync();
   // get the user id associated with this account
   emailToUserID(email, function(userID) {
     if (userID === undefined) {
       cb("no such email: " + email);
       return;
     }
-    var email_list = jsel.match(".emails string", db[userID]);
+    var email_list = jsel.match(".emails string", db.users[userID]);
     var emails = {};
     for (var i=0; i < email_list.length; i++)
       emails[email_list[i]] = {};
@@ -277,24 +297,25 @@ exports.listEmails = function(email, cb) {
 };
 
 exports.removeEmail = function(authenticated_email, email, cb) {
-  var m = jsel.match(".emails:has(:val("+ESC(authenticated_email)+")):has(:val("+ESC(email)+"))", db);
+  sync();
+  var m = jsel.match(".emails:has(:val("+ESC(authenticated_email)+")):has(:val("+ESC(email)+"))", db.users);
 
   if (m.length) {
     var emails = m[0];
     for (var i = 0; i < emails.length; i++) {
       if (emails[i] === email) {
         emails.splice(i, 1);
+        flush();
         break;
       }
     }
   }
-
   setTimeout(function() { cb(); }, 0);
 };
 
 exports.cancelAccount = function(authenticated_email, cb) {
   emailToUserID(authenticated_email, function(user_id) {
-    db.splice(user_id, 1);
+    db.users.splice(user_id, 1);
     flush();
     cb();
   });
diff --git a/browserid/lib/db_mysql.js b/lib/db/mysql.js
similarity index 97%
rename from browserid/lib/db_mysql.js
rename to lib/db/mysql.js
index 9a7dbc8385a3226ec906b436da232fc4dd3e3f53..b1209b091b4572e8b321a98b74a5c7aae04b6ce4 100644
--- a/browserid/lib/db_mysql.js
+++ b/lib/db/mysql.js
@@ -60,8 +60,8 @@
 
 const
 mysql = require('mysql'),
-secrets = require('../../libs/secrets'),
-logger = require('../../libs/logging.js').logger;
+secrets = require('../secrets.js'),
+logger = require('../logging.js').logger;
 
 var client = undefined;
 
@@ -124,13 +124,13 @@ exports.open = function(cfg, cb) {
   // let's figure out the database name
   var database = cfg.database;
   if (!database) database = "browserid";
-  if (cfg.unit_test) {
-    database += "_" + secrets.generate(8);
-    drop_on_close = database;
-  }
+
+  // if the client specifies a name other than 'browserid', and specifies
+  // that we should drop the database on close, do it
+  if (database !== 'browserid' && cfg.drop_on_close) drop_on_close = database;
 
   // now create the databse
-  if (cfg.create_schema || cfg.unit_test) {
+  if (cfg.create_schema) {
     client.query("CREATE DATABASE IF NOT EXISTS " + database, function(err) {
       if (err) {
         logUnexpectedError(err);
diff --git a/libs/heartbeat.js b/lib/heartbeat.js
similarity index 100%
rename from libs/heartbeat.js
rename to lib/heartbeat.js
diff --git a/browserid/lib/httputils.js b/lib/httputils.js
similarity index 100%
rename from browserid/lib/httputils.js
rename to lib/httputils.js
diff --git a/performance/lib/add_email.js b/lib/load_gen/add_email.js
similarity index 100%
rename from performance/lib/add_email.js
rename to lib/load_gen/add_email.js
diff --git a/performance/lib/include_only.js b/lib/load_gen/include_only.js
similarity index 100%
rename from performance/lib/include_only.js
rename to lib/load_gen/include_only.js
diff --git a/performance/lib/reauth.js b/lib/load_gen/reauth.js
similarity index 100%
rename from performance/lib/reauth.js
rename to lib/load_gen/reauth.js
diff --git a/performance/lib/reset_pass.js b/lib/load_gen/reset_pass.js
similarity index 100%
rename from performance/lib/reset_pass.js
rename to lib/load_gen/reset_pass.js
diff --git a/performance/lib/signin.js b/lib/load_gen/signin.js
similarity index 100%
rename from performance/lib/signin.js
rename to lib/load_gen/signin.js
diff --git a/performance/lib/signup.js b/lib/load_gen/signup.js
similarity index 100%
rename from performance/lib/signup.js
rename to lib/load_gen/signup.js
diff --git a/performance/lib/test.js b/lib/load_gen/test.js
similarity index 100%
rename from performance/lib/test.js
rename to lib/load_gen/test.js
diff --git a/performance/lib/user_db.js b/lib/load_gen/user_db.js
similarity index 100%
rename from performance/lib/user_db.js
rename to lib/load_gen/user_db.js
diff --git a/libs/logging.js b/lib/logging.js
similarity index 97%
rename from libs/logging.js
rename to lib/logging.js
index b167c6eb0abdabc0c4be66bd0838849f85161720..3e7feb5a1a7d7e972f572b5c4923aaf205c4471f 100644
--- a/libs/logging.js
+++ b/lib/logging.js
@@ -78,4 +78,6 @@ exports.logger.emitErrs = false;
 
 exports.enableConsoleLogging = function() {
   exports.logger.add(winston.transports.Console, { colorize: true });
-};
\ No newline at end of file
+};
+
+if (process.env['LOG_TO_CONSOLE']) exports.enableConsoleLogging();
diff --git a/libs/metrics.js b/lib/metrics.js
similarity index 100%
rename from libs/metrics.js
rename to lib/metrics.js
diff --git a/libs/secrets.js b/lib/secrets.js
similarity index 93%
rename from libs/secrets.js
rename to lib/secrets.js
index 0b404f615cbe8bedcd6fd7469331ea50559501cb..6382d5e4220b2883973d61afd6f68a849c7c8a84 100644
--- a/libs/secrets.js
+++ b/lib/secrets.js
@@ -64,7 +64,7 @@ exports.hydrateSecret = function(name, dir) {
   return secret;
 };
 
-function loadSecretKey(name, dir) {
+exports.loadSecretKey = function(name, dir) {
   var p = path.join(dir, name + ".secretkey");
   var fileExists = false;
   var secret = undefined;
@@ -79,7 +79,7 @@ function loadSecretKey(name, dir) {
   return jwk.SecretKey.deserialize(secret);
 }
 
-function loadPublicKey(name, dir) {
+exports.loadPublicKey = function(name, dir) {
   var p = path.join(dir, name + ".publickey");
   var fileExists = false;
   var secret = undefined;
@@ -95,6 +95,3 @@ function loadPublicKey(name, dir) {
   // {alg: <ALG>, value: <SERIALIZED_KEY>}
   return jwk.PublicKey.deserialize(secret);
 }
-
-exports.SECRET_KEY = loadSecretKey('root', configuration.get('var_path'));
-exports.PUBLIC_KEY = loadPublicKey('root', configuration.get('var_path'));
diff --git a/verifier/lib/certassertion.js b/lib/verifier/certassertion.js
similarity index 94%
rename from verifier/lib/certassertion.js
rename to lib/verifier/certassertion.js
index 71590eb62721267cf841a66b72b8f34f953f2418..863573b9fa05c5a7dcbe3de0f27d6194b623ff97 100644
--- a/verifier/lib/certassertion.js
+++ b/lib/verifier/certassertion.js
@@ -45,21 +45,17 @@ jwk = require("jwcrypto/jwk"),
 jwt = require("jwcrypto/jwt"),
 jwcert = require("jwcrypto/jwcert"),
 vep = require("jwcrypto/vep"),
-configuration = require('../../libs/configuration'),
-secrets = require('../../libs/secrets'),
-logger = require("../../libs/logging.js").logger;
-
-// configuration information to check the issuer
-const config = require("../../libs/configuration.js");
+config = require("../../lib/configuration.js"),
+logger = require("../../lib/logging.js").logger;
 
 const HOSTMETA_URL = "/.well-known/host-meta";
 
 var publicKeys = {};
 
 // set up some default public keys
-publicKeys[configuration.get('hostname')] = secrets.PUBLIC_KEY;
+publicKeys[config.get('hostname')] = config.get('public_key');
 logger.debug("pre-seeded public key cache with key for " +
-             configuration.get('hostname'));
+             config.get('hostname'));
 
 function https_complete_get(host, url, successCB, errorCB) {
   https.get({host: host,path: url}, function(res) {
@@ -71,7 +67,7 @@ function https_complete_get(host, url, successCB, errorCB) {
     res.on('end', function() {
       successCB(allData);
     });
-    
+
   }).on('error', function(e) {
     console.log(e.toString());
     errorCB(e);
@@ -197,7 +193,7 @@ function verify(assertion, audience, successCB, errorCB, pkRetriever) {
         retrieveHostPublicKey(issuer, next, function(err) {next(null);});
     }, function(pk, principal) {
       // primary?
-      if (theIssuer != configuration.get('hostname')) {
+      if (theIssuer != config.get('hostname')) {
         // then the email better match the issuer
         console.log(principal);
         if (!principal.email.match("@" + theIssuer + "$"))
diff --git a/libs/wsapi_client.js b/lib/wsapi_client.js
similarity index 99%
rename from libs/wsapi_client.js
rename to lib/wsapi_client.js
index 292a9772c08933b6af4a4d341bdeac27b7257ef7..1db1af746b15c8f808bd4090fc341517c137750e 100644
--- a/libs/wsapi_client.js
+++ b/lib/wsapi_client.js
@@ -87,7 +87,7 @@ exports.get = function(cfg, path, context, getArgs, cb) {
     cb(false);
     return;
   }
-  
+
   var headers = { };
   injectCookies(context, headers);
 
diff --git a/libs/substitute.js b/libs/substitute.js
deleted file mode 100644
index 2c4c526aedbbaac25231c855ebddd27fcd26287b..0000000000000000000000000000000000000000
--- a/libs/substitute.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-// return a function that is substitution middleware, capable
-// of being installed to perform textual replacement on
-// all server output
-exports.substitute = function(subs) {
-  // given a buffer, find and replace all subs
-  function subHostNames(data) {
-    for (var i in subs) {
-      data = data.toString().replace(new RegExp(i, 'g'), subs[i]);
-    }
-
-    return data;
-  }
-
-  return function(req, resp, next) {
-    // cache the *real* functions
-    var realWrite = resp.write;
-    var realEnd = resp.end;
-    var realWriteHead = resp.writeHead;
-    var realSend = resp.send;
-
-    var buf = undefined;
-    var enc = undefined;
-    var contentType = undefined;
-
-    resp.writeHead = function (sc, reason, hdrs) {
-      var h = undefined;
-      if (typeof hdrs === 'object') h = hdrs;
-      else if (typeof reason === 'object') h = reason; 
-      for (var k in h) {
-        if (k.toLowerCase() === 'content-type') {
-          contentType = h[k];
-          break;
-        }
-      }
-      if (!contentType) contentType = resp.getHeader('content-type');
-      if (!contentType) contentType = "application/unknown";
-      realWriteHead.call(resp, sc, reason, hdrs);
-    };
-
-    resp.write = function (chunk, encoding) {
-      if (buf) buf += chunk;
-      else buf = chunk;
-      enc = encoding;
-    };
-
-    resp.send = function(stuff) {
-      buf = stuff;
-      realSend.call(resp,stuff);
-    };
-
-    resp.end = function() {
-      if (!contentType) contentType = resp.getHeader('content-type');
-      if (contentType && (contentType === "application/javascript" ||
-                          contentType.substr(0,4) === 'text'))
-      {
-        if (buf) {
-          if (Buffer.isBuffer(buf)) buf = buf.toString('utf8');
-          var l = Buffer.byteLength(buf);
-          buf = subHostNames(buf);
-          if (l != Buffer.byteLength(buf)) resp.setHeader('Content-Length', Buffer.byteLength(buf));
-        }
-      }
-      if (buf && buf.length) {
-        realWrite.call(resp, buf, enc);
-      }
-      realEnd.call(resp);
-    }
-
-    next();
-  };
-};
diff --git a/package.json b/package.json
index 3451a8b9ad32ffb24939cc3228f37bdeaeb354e7..5025dca64fcb9235f1960d77103c30dabe6993a2 100644
--- a/package.json
+++ b/package.json
@@ -26,10 +26,12 @@
     , "sax" : "0.2.3"
     , "mimelib-noiconv" : "0.1.3"
     , "jwcrypto": "https://github.com/mozilla/jwcrypto/tarball/83aa543"
+    , "postprocess": "0.0.2"
+    , "urlparse": "0.0.1"
   }
   , "scripts": {
     "postinstall": "./scripts/generate_ephemeral_keys.sh",
     "test": "./scripts/run_all_tests.sh",
-    "start": "node ./run.js"
+    "start": "./scripts/run_locally.js"
   }
 }
diff --git a/browserid/.gitignore b/resources/.gitignore
similarity index 50%
rename from browserid/.gitignore
rename to resources/.gitignore
index 87ff02149168e118b7f8f73ee8850cab949e80f6..ad546db10e4922983382c9235cb61b007e8d2475 100644
--- a/browserid/.gitignore
+++ b/resources/.gitignore
@@ -1,7 +1,9 @@
-/static/dialog/production.js
-/static/dialog/production.css
 /static/css/browserid.css
 /static/css/browserid.min.css
-/static/js/lib.min.js
+/static/dialog/css/production.css
+/static/dialog/css/production.min.css
+/static/dialog/production.js
+/static/include.orig.js
 /static/js/lib.js
-/var
+/static/js/lib.min.js
+/static/relay/production.js
diff --git a/browserid/assets/account-buttons.png b/resources/assets/account-buttons.png
similarity index 100%
rename from browserid/assets/account-buttons.png
rename to resources/assets/account-buttons.png
diff --git a/browserid/assets/browserID-135x35.png b/resources/assets/browserID-135x35.png
similarity index 100%
rename from browserid/assets/browserID-135x35.png
rename to resources/assets/browserID-135x35.png
diff --git a/browserid/assets/browserID-366x72.png b/resources/assets/browserID-366x72.png
similarity index 100%
rename from browserid/assets/browserID-366x72.png
rename to resources/assets/browserID-366x72.png
diff --git a/browserid/assets/browserID-80x20.png b/resources/assets/browserID-80x20.png
similarity index 100%
rename from browserid/assets/browserID-80x20.png
rename to resources/assets/browserID-80x20.png
diff --git a/browserid/assets/browserID-buttons.psd b/resources/assets/browserID-buttons.psd
similarity index 100%
rename from browserid/assets/browserID-buttons.psd
rename to resources/assets/browserID-buttons.psd
diff --git a/browserid/assets/browserID-logo.eps b/resources/assets/browserID-logo.eps
similarity index 100%
rename from browserid/assets/browserID-logo.eps
rename to resources/assets/browserID-logo.eps
diff --git a/browserid/static/.well-known/host-meta b/resources/static/.well-known/host-meta
similarity index 100%
rename from browserid/static/.well-known/host-meta
rename to resources/static/.well-known/host-meta
diff --git a/browserid/static/css/m.css b/resources/static/css/m.css
similarity index 100%
rename from browserid/static/css/m.css
rename to resources/static/css/m.css
diff --git a/browserid/static/css/sil.ttf b/resources/static/css/sil.ttf
similarity index 100%
rename from browserid/static/css/sil.ttf
rename to resources/static/css/sil.ttf
diff --git a/browserid/static/css/style.css b/resources/static/css/style.css
similarity index 100%
rename from browserid/static/css/style.css
rename to resources/static/css/style.css
diff --git a/browserid/static/css/ts.ttf b/resources/static/css/ts.ttf
similarity index 100%
rename from browserid/static/css/ts.ttf
rename to resources/static/css/ts.ttf
diff --git a/browserid/static/dialog/controllers/authenticate_controller.js b/resources/static/dialog/controllers/authenticate_controller.js
similarity index 100%
rename from browserid/static/dialog/controllers/authenticate_controller.js
rename to resources/static/dialog/controllers/authenticate_controller.js
diff --git a/browserid/static/dialog/controllers/checkregistration_controller.js b/resources/static/dialog/controllers/checkregistration_controller.js
similarity index 100%
rename from browserid/static/dialog/controllers/checkregistration_controller.js
rename to resources/static/dialog/controllers/checkregistration_controller.js
diff --git a/browserid/static/dialog/controllers/dialog_controller.js b/resources/static/dialog/controllers/dialog_controller.js
similarity index 100%
rename from browserid/static/dialog/controllers/dialog_controller.js
rename to resources/static/dialog/controllers/dialog_controller.js
diff --git a/browserid/static/dialog/controllers/page_controller.js b/resources/static/dialog/controllers/page_controller.js
similarity index 100%
rename from browserid/static/dialog/controllers/page_controller.js
rename to resources/static/dialog/controllers/page_controller.js
diff --git a/browserid/static/dialog/controllers/pickemail_controller.js b/resources/static/dialog/controllers/pickemail_controller.js
similarity index 100%
rename from browserid/static/dialog/controllers/pickemail_controller.js
rename to resources/static/dialog/controllers/pickemail_controller.js
diff --git a/browserid/static/dialog/css/m.css b/resources/static/dialog/css/m.css
similarity index 100%
rename from browserid/static/dialog/css/m.css
rename to resources/static/dialog/css/m.css
diff --git a/browserid/static/dialog/css/popup.css b/resources/static/dialog/css/popup.css
similarity index 100%
rename from browserid/static/dialog/css/popup.css
rename to resources/static/dialog/css/popup.css
diff --git a/browserid/static/dialog/dialog.js b/resources/static/dialog/dialog.js
similarity index 100%
rename from browserid/static/dialog/dialog.js
rename to resources/static/dialog/dialog.js
diff --git a/browserid/static/dialog/funcunit.html b/resources/static/dialog/funcunit.html
similarity index 100%
rename from browserid/static/dialog/funcunit.html
rename to resources/static/dialog/funcunit.html
diff --git a/browserid/static/dialog/mozilla.png b/resources/static/dialog/mozilla.png
similarity index 100%
rename from browserid/static/dialog/mozilla.png
rename to resources/static/dialog/mozilla.png
diff --git a/browserid/static/dialog/qunit.html b/resources/static/dialog/qunit.html
similarity index 100%
rename from browserid/static/dialog/qunit.html
rename to resources/static/dialog/qunit.html
diff --git a/browserid/static/dialog/register_iframe.html b/resources/static/dialog/register_iframe.html
similarity index 100%
rename from browserid/static/dialog/register_iframe.html
rename to resources/static/dialog/register_iframe.html
diff --git a/browserid/static/dialog/register_iframe.js b/resources/static/dialog/register_iframe.js
similarity index 100%
rename from browserid/static/dialog/register_iframe.js
rename to resources/static/dialog/register_iframe.js
diff --git a/browserid/static/dialog/resources/base64.js b/resources/static/dialog/resources/base64.js
similarity index 100%
rename from browserid/static/dialog/resources/base64.js
rename to resources/static/dialog/resources/base64.js
diff --git a/browserid/static/dialog/resources/browser-support.js b/resources/static/dialog/resources/browser-support.js
similarity index 100%
rename from browserid/static/dialog/resources/browser-support.js
rename to resources/static/dialog/resources/browser-support.js
diff --git a/browserid/static/dialog/resources/browserid-extensions.js b/resources/static/dialog/resources/browserid-extensions.js
similarity index 100%
rename from browserid/static/dialog/resources/browserid-extensions.js
rename to resources/static/dialog/resources/browserid-extensions.js
diff --git a/browserid/static/dialog/resources/browserid.js b/resources/static/dialog/resources/browserid.js
similarity index 100%
rename from browserid/static/dialog/resources/browserid.js
rename to resources/static/dialog/resources/browserid.js
diff --git a/browserid/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js
similarity index 100%
rename from browserid/static/dialog/resources/channel.js
rename to resources/static/dialog/resources/channel.js
diff --git a/browserid/static/dialog/resources/error-messages.js b/resources/static/dialog/resources/error-messages.js
similarity index 100%
rename from browserid/static/dialog/resources/error-messages.js
rename to resources/static/dialog/resources/error-messages.js
diff --git a/browserid/static/dialog/resources/jschannel.js b/resources/static/dialog/resources/jschannel.js
similarity index 100%
rename from browserid/static/dialog/resources/jschannel.js
rename to resources/static/dialog/resources/jschannel.js
diff --git a/browserid/static/dialog/resources/network.js b/resources/static/dialog/resources/network.js
similarity index 100%
rename from browserid/static/dialog/resources/network.js
rename to resources/static/dialog/resources/network.js
diff --git a/browserid/static/dialog/resources/storage.js b/resources/static/dialog/resources/storage.js
similarity index 100%
rename from browserid/static/dialog/resources/storage.js
rename to resources/static/dialog/resources/storage.js
diff --git a/browserid/static/dialog/resources/tooltip.js b/resources/static/dialog/resources/tooltip.js
similarity index 100%
rename from browserid/static/dialog/resources/tooltip.js
rename to resources/static/dialog/resources/tooltip.js
diff --git a/browserid/static/dialog/resources/underscore-min.js b/resources/static/dialog/resources/underscore-min.js
similarity index 100%
rename from browserid/static/dialog/resources/underscore-min.js
rename to resources/static/dialog/resources/underscore-min.js
diff --git a/browserid/static/dialog/resources/user.js b/resources/static/dialog/resources/user.js
similarity index 100%
rename from browserid/static/dialog/resources/user.js
rename to resources/static/dialog/resources/user.js
diff --git a/browserid/static/dialog/resources/validation.js b/resources/static/dialog/resources/validation.js
similarity index 100%
rename from browserid/static/dialog/resources/validation.js
rename to resources/static/dialog/resources/validation.js
diff --git a/browserid/static/dialog/resources/wait-messages.js b/resources/static/dialog/resources/wait-messages.js
similarity index 100%
rename from browserid/static/dialog/resources/wait-messages.js
rename to resources/static/dialog/resources/wait-messages.js
diff --git a/browserid/static/dialog/scripts/build.html b/resources/static/dialog/scripts/build.html
similarity index 100%
rename from browserid/static/dialog/scripts/build.html
rename to resources/static/dialog/scripts/build.html
diff --git a/browserid/static/dialog/scripts/build.js b/resources/static/dialog/scripts/build.js
similarity index 100%
rename from browserid/static/dialog/scripts/build.js
rename to resources/static/dialog/scripts/build.js
diff --git a/browserid/static/dialog/scripts/clean.js b/resources/static/dialog/scripts/clean.js
similarity index 100%
rename from browserid/static/dialog/scripts/clean.js
rename to resources/static/dialog/scripts/clean.js
diff --git a/browserid/static/dialog/scripts/docs.js b/resources/static/dialog/scripts/docs.js
similarity index 100%
rename from browserid/static/dialog/scripts/docs.js
rename to resources/static/dialog/scripts/docs.js
diff --git a/browserid/static/dialog/test/funcunit/dialog_test.js b/resources/static/dialog/test/funcunit/dialog_test.js
similarity index 100%
rename from browserid/static/dialog/test/funcunit/dialog_test.js
rename to resources/static/dialog/test/funcunit/dialog_test.js
diff --git a/browserid/static/dialog/test/funcunit/funcunit.js b/resources/static/dialog/test/funcunit/funcunit.js
similarity index 100%
rename from browserid/static/dialog/test/funcunit/funcunit.js
rename to resources/static/dialog/test/funcunit/funcunit.js
diff --git a/browserid/static/dialog/test/qunit/browserid_unit_test.js b/resources/static/dialog/test/qunit/browserid_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/browserid_unit_test.js
rename to resources/static/dialog/test/qunit/browserid_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js b/resources/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js
rename to resources/static/dialog/test/qunit/controllers/dialog_controller_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/controllers/page_controller_unit_test.js b/resources/static/dialog/test/qunit/controllers/page_controller_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/controllers/page_controller_unit_test.js
rename to resources/static/dialog/test/qunit/controllers/page_controller_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js b/resources/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js
rename to resources/static/dialog/test/qunit/controllers/pickemail_controller_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/dialog_test.js b/resources/static/dialog/test/qunit/dialog_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/dialog_test.js
rename to resources/static/dialog/test/qunit/dialog_test.js
diff --git a/browserid/static/dialog/test/qunit/include_unit_test.js b/resources/static/dialog/test/qunit/include_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/include_unit_test.js
rename to resources/static/dialog/test/qunit/include_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/pages/add_email_address_test.js b/resources/static/dialog/test/qunit/pages/add_email_address_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/pages/add_email_address_test.js
rename to resources/static/dialog/test/qunit/pages/add_email_address_test.js
diff --git a/browserid/static/dialog/test/qunit/qunit.js b/resources/static/dialog/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/qunit.js
rename to resources/static/dialog/test/qunit/qunit.js
diff --git a/browserid/static/dialog/test/qunit/relay/relay_unit_test.js b/resources/static/dialog/test/qunit/relay/relay_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/relay/relay_unit_test.js
rename to resources/static/dialog/test/qunit/relay/relay_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/browser-support_unit_test.js b/resources/static/dialog/test/qunit/resources/browser-support_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/browser-support_unit_test.js
rename to resources/static/dialog/test/qunit/resources/browser-support_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/channel_unit_test.js b/resources/static/dialog/test/qunit/resources/channel_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/channel_unit_test.js
rename to resources/static/dialog/test/qunit/resources/channel_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/network_unit_test.js b/resources/static/dialog/test/qunit/resources/network_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/network_unit_test.js
rename to resources/static/dialog/test/qunit/resources/network_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/storage_unit_test.js b/resources/static/dialog/test/qunit/resources/storage_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/storage_unit_test.js
rename to resources/static/dialog/test/qunit/resources/storage_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/user_unit_test.js b/resources/static/dialog/test/qunit/resources/user_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/user_unit_test.js
rename to resources/static/dialog/test/qunit/resources/user_unit_test.js
diff --git a/browserid/static/dialog/test/qunit/resources/validation_unit_test.js b/resources/static/dialog/test/qunit/resources/validation_unit_test.js
similarity index 100%
rename from browserid/static/dialog/test/qunit/resources/validation_unit_test.js
rename to resources/static/dialog/test/qunit/resources/validation_unit_test.js
diff --git a/browserid/static/dialog/views/authenticate.ejs b/resources/static/dialog/views/authenticate.ejs
similarity index 100%
rename from browserid/static/dialog/views/authenticate.ejs
rename to resources/static/dialog/views/authenticate.ejs
diff --git a/browserid/static/dialog/views/confirmemail.ejs b/resources/static/dialog/views/confirmemail.ejs
similarity index 100%
rename from browserid/static/dialog/views/confirmemail.ejs
rename to resources/static/dialog/views/confirmemail.ejs
diff --git a/browserid/static/dialog/views/error.ejs b/resources/static/dialog/views/error.ejs
similarity index 100%
rename from browserid/static/dialog/views/error.ejs
rename to resources/static/dialog/views/error.ejs
diff --git a/browserid/static/dialog/views/offline.ejs b/resources/static/dialog/views/offline.ejs
similarity index 100%
rename from browserid/static/dialog/views/offline.ejs
rename to resources/static/dialog/views/offline.ejs
diff --git a/browserid/static/dialog/views/pickemail.ejs b/resources/static/dialog/views/pickemail.ejs
similarity index 100%
rename from browserid/static/dialog/views/pickemail.ejs
rename to resources/static/dialog/views/pickemail.ejs
diff --git a/browserid/static/dialog/views/testBodyTemplate.ejs b/resources/static/dialog/views/testBodyTemplate.ejs
similarity index 100%
rename from browserid/static/dialog/views/testBodyTemplate.ejs
rename to resources/static/dialog/views/testBodyTemplate.ejs
diff --git a/browserid/static/dialog/views/wait.ejs b/resources/static/dialog/views/wait.ejs
similarity index 100%
rename from browserid/static/dialog/views/wait.ejs
rename to resources/static/dialog/views/wait.ejs
diff --git a/browserid/static/favicon.ico b/resources/static/favicon.ico
similarity index 100%
rename from browserid/static/favicon.ico
rename to resources/static/favicon.ico
diff --git a/browserid/static/funcunit/.gitignore b/resources/static/funcunit/.gitignore
similarity index 100%
rename from browserid/static/funcunit/.gitignore
rename to resources/static/funcunit/.gitignore
diff --git a/browserid/static/funcunit/.gitmodules b/resources/static/funcunit/.gitmodules
similarity index 100%
rename from browserid/static/funcunit/.gitmodules
rename to resources/static/funcunit/.gitmodules
diff --git a/browserid/static/funcunit/README b/resources/static/funcunit/README
similarity index 100%
rename from browserid/static/funcunit/README
rename to resources/static/funcunit/README
diff --git a/browserid/static/funcunit/autosuggest/auto_suggest.js b/resources/static/funcunit/autosuggest/auto_suggest.js
similarity index 100%
rename from browserid/static/funcunit/autosuggest/auto_suggest.js
rename to resources/static/funcunit/autosuggest/auto_suggest.js
diff --git a/browserid/static/funcunit/autosuggest/autosuggest.css b/resources/static/funcunit/autosuggest/autosuggest.css
similarity index 100%
rename from browserid/static/funcunit/autosuggest/autosuggest.css
rename to resources/static/funcunit/autosuggest/autosuggest.css
diff --git a/browserid/static/funcunit/autosuggest/autosuggest.html b/resources/static/funcunit/autosuggest/autosuggest.html
similarity index 100%
rename from browserid/static/funcunit/autosuggest/autosuggest.html
rename to resources/static/funcunit/autosuggest/autosuggest.html
diff --git a/browserid/static/funcunit/autosuggest/autosuggest.js b/resources/static/funcunit/autosuggest/autosuggest.js
similarity index 100%
rename from browserid/static/funcunit/autosuggest/autosuggest.js
rename to resources/static/funcunit/autosuggest/autosuggest.js
diff --git a/browserid/static/funcunit/autosuggest/autosuggest_test.js b/resources/static/funcunit/autosuggest/autosuggest_test.js
similarity index 100%
rename from browserid/static/funcunit/autosuggest/autosuggest_test.js
rename to resources/static/funcunit/autosuggest/autosuggest_test.js
diff --git a/browserid/static/funcunit/autosuggest/funcunit.html b/resources/static/funcunit/autosuggest/funcunit.html
similarity index 100%
rename from browserid/static/funcunit/autosuggest/funcunit.html
rename to resources/static/funcunit/autosuggest/funcunit.html
diff --git a/browserid/static/funcunit/build.js b/resources/static/funcunit/build.js
similarity index 100%
rename from browserid/static/funcunit/build.js
rename to resources/static/funcunit/build.js
diff --git a/browserid/static/funcunit/dependencies.json b/resources/static/funcunit/dependencies.json
similarity index 100%
rename from browserid/static/funcunit/dependencies.json
rename to resources/static/funcunit/dependencies.json
diff --git a/browserid/static/funcunit/docs.html b/resources/static/funcunit/docs.html
similarity index 100%
rename from browserid/static/funcunit/docs.html
rename to resources/static/funcunit/docs.html
diff --git a/browserid/static/funcunit/drivers/selenium.js b/resources/static/funcunit/drivers/selenium.js
similarity index 100%
rename from browserid/static/funcunit/drivers/selenium.js
rename to resources/static/funcunit/drivers/selenium.js
diff --git a/browserid/static/funcunit/drivers/standard.js b/resources/static/funcunit/drivers/standard.js
similarity index 100%
rename from browserid/static/funcunit/drivers/standard.js
rename to resources/static/funcunit/drivers/standard.js
diff --git a/browserid/static/funcunit/envjs b/resources/static/funcunit/envjs
similarity index 100%
rename from browserid/static/funcunit/envjs
rename to resources/static/funcunit/envjs
diff --git a/browserid/static/funcunit/envjs.bat b/resources/static/funcunit/envjs.bat
similarity index 100%
rename from browserid/static/funcunit/envjs.bat
rename to resources/static/funcunit/envjs.bat
diff --git a/browserid/static/funcunit/funcunit.html b/resources/static/funcunit/funcunit.html
similarity index 100%
rename from browserid/static/funcunit/funcunit.html
rename to resources/static/funcunit/funcunit.html
diff --git a/browserid/static/funcunit/funcunit.js b/resources/static/funcunit/funcunit.js
similarity index 100%
rename from browserid/static/funcunit/funcunit.js
rename to resources/static/funcunit/funcunit.js
diff --git a/browserid/static/funcunit/generate_docs.html b/resources/static/funcunit/generate_docs.html
similarity index 100%
rename from browserid/static/funcunit/generate_docs.html
rename to resources/static/funcunit/generate_docs.html
diff --git a/browserid/static/funcunit/index.html b/resources/static/funcunit/index.html
similarity index 100%
rename from browserid/static/funcunit/index.html
rename to resources/static/funcunit/index.html
diff --git a/browserid/static/funcunit/java/extensions/fakesteal.js b/resources/static/funcunit/java/extensions/fakesteal.js
similarity index 100%
rename from browserid/static/funcunit/java/extensions/fakesteal.js
rename to resources/static/funcunit/java/extensions/fakesteal.js
diff --git a/browserid/static/funcunit/java/extensions/wrapped.js b/resources/static/funcunit/java/extensions/wrapped.js
similarity index 100%
rename from browserid/static/funcunit/java/extensions/wrapped.js
rename to resources/static/funcunit/java/extensions/wrapped.js
diff --git a/browserid/static/funcunit/java/selenium-java-client-driver.jar b/resources/static/funcunit/java/selenium-java-client-driver.jar
similarity index 100%
rename from browserid/static/funcunit/java/selenium-java-client-driver.jar
rename to resources/static/funcunit/java/selenium-java-client-driver.jar
diff --git a/browserid/static/funcunit/java/selenium-server-standalone-2.0b3.jar b/resources/static/funcunit/java/selenium-server-standalone-2.0b3.jar
similarity index 100%
rename from browserid/static/funcunit/java/selenium-server-standalone-2.0b3.jar
rename to resources/static/funcunit/java/selenium-server-standalone-2.0b3.jar
diff --git a/browserid/static/funcunit/java/user-extensions.js b/resources/static/funcunit/java/user-extensions.js
similarity index 100%
rename from browserid/static/funcunit/java/user-extensions.js
rename to resources/static/funcunit/java/user-extensions.js
diff --git a/browserid/static/funcunit/loader.js b/resources/static/funcunit/loader.js
similarity index 100%
rename from browserid/static/funcunit/loader.js
rename to resources/static/funcunit/loader.js
diff --git a/browserid/static/funcunit/pages/example.js b/resources/static/funcunit/pages/example.js
similarity index 100%
rename from browserid/static/funcunit/pages/example.js
rename to resources/static/funcunit/pages/example.js
diff --git a/browserid/static/funcunit/pages/follow.js b/resources/static/funcunit/pages/follow.js
similarity index 100%
rename from browserid/static/funcunit/pages/follow.js
rename to resources/static/funcunit/pages/follow.js
diff --git a/browserid/static/funcunit/pages/init.js b/resources/static/funcunit/pages/init.js
similarity index 100%
rename from browserid/static/funcunit/pages/init.js
rename to resources/static/funcunit/pages/init.js
diff --git a/browserid/static/funcunit/pages/mastering.js b/resources/static/funcunit/pages/mastering.js
similarity index 100%
rename from browserid/static/funcunit/pages/mastering.js
rename to resources/static/funcunit/pages/mastering.js
diff --git a/browserid/static/funcunit/pages/selenium.js b/resources/static/funcunit/pages/selenium.js
similarity index 100%
rename from browserid/static/funcunit/pages/selenium.js
rename to resources/static/funcunit/pages/selenium.js
diff --git a/browserid/static/funcunit/pages/setup.js b/resources/static/funcunit/pages/setup.js
similarity index 100%
rename from browserid/static/funcunit/pages/setup.js
rename to resources/static/funcunit/pages/setup.js
diff --git a/browserid/static/funcunit/pages/standalone.js b/resources/static/funcunit/pages/standalone.js
similarity index 100%
rename from browserid/static/funcunit/pages/standalone.js
rename to resources/static/funcunit/pages/standalone.js
diff --git a/browserid/static/funcunit/pages/writing.js b/resources/static/funcunit/pages/writing.js
similarity index 100%
rename from browserid/static/funcunit/pages/writing.js
rename to resources/static/funcunit/pages/writing.js
diff --git a/browserid/static/funcunit/qunit.html b/resources/static/funcunit/qunit.html
similarity index 100%
rename from browserid/static/funcunit/qunit.html
rename to resources/static/funcunit/qunit.html
diff --git a/browserid/static/funcunit/qunit/qunit.css b/resources/static/funcunit/qunit/qunit.css
similarity index 100%
rename from browserid/static/funcunit/qunit/qunit.css
rename to resources/static/funcunit/qunit/qunit.css
diff --git a/browserid/static/funcunit/qunit/qunit.js b/resources/static/funcunit/qunit/qunit.js
similarity index 100%
rename from browserid/static/funcunit/qunit/qunit.js
rename to resources/static/funcunit/qunit/qunit.js
diff --git a/browserid/static/funcunit/qunit/rhino/rhino.js b/resources/static/funcunit/qunit/rhino/rhino.js
similarity index 100%
rename from browserid/static/funcunit/qunit/rhino/rhino.js
rename to resources/static/funcunit/qunit/rhino/rhino.js
diff --git a/browserid/static/funcunit/qunit/test/qunit.html b/resources/static/funcunit/qunit/test/qunit.html
similarity index 100%
rename from browserid/static/funcunit/qunit/test/qunit.html
rename to resources/static/funcunit/qunit/test/qunit.html
diff --git a/browserid/static/funcunit/qunit/test/test.js b/resources/static/funcunit/qunit/test/test.js
similarity index 100%
rename from browserid/static/funcunit/qunit/test/test.js
rename to resources/static/funcunit/qunit/test/test.js
diff --git a/browserid/static/funcunit/resources/jquery.js b/resources/static/funcunit/resources/jquery.js
similarity index 100%
rename from browserid/static/funcunit/resources/jquery.js
rename to resources/static/funcunit/resources/jquery.js
diff --git a/browserid/static/funcunit/resources/json.js b/resources/static/funcunit/resources/json.js
similarity index 100%
rename from browserid/static/funcunit/resources/json.js
rename to resources/static/funcunit/resources/json.js
diff --git a/browserid/static/funcunit/resources/selector.js b/resources/static/funcunit/resources/selector.js
similarity index 100%
rename from browserid/static/funcunit/resources/selector.js
rename to resources/static/funcunit/resources/selector.js
diff --git a/browserid/static/funcunit/resources/selenium_start.js b/resources/static/funcunit/resources/selenium_start.js
similarity index 100%
rename from browserid/static/funcunit/resources/selenium_start.js
rename to resources/static/funcunit/resources/selenium_start.js
diff --git a/browserid/static/funcunit/scripts/run.js b/resources/static/funcunit/scripts/run.js
similarity index 100%
rename from browserid/static/funcunit/scripts/run.js
rename to resources/static/funcunit/scripts/run.js
diff --git a/browserid/static/funcunit/settings.js b/resources/static/funcunit/settings.js
similarity index 100%
rename from browserid/static/funcunit/settings.js
rename to resources/static/funcunit/settings.js
diff --git a/browserid/static/funcunit/summary.ejs b/resources/static/funcunit/summary.ejs
similarity index 100%
rename from browserid/static/funcunit/summary.ejs
rename to resources/static/funcunit/summary.ejs
diff --git a/browserid/static/funcunit/syn/.gitignore b/resources/static/funcunit/syn/.gitignore
similarity index 100%
rename from browserid/static/funcunit/syn/.gitignore
rename to resources/static/funcunit/syn/.gitignore
diff --git a/browserid/static/funcunit/syn/README b/resources/static/funcunit/syn/README
similarity index 100%
rename from browserid/static/funcunit/syn/README
rename to resources/static/funcunit/syn/README
diff --git a/browserid/static/funcunit/syn/browsers.js b/resources/static/funcunit/syn/browsers.js
similarity index 100%
rename from browserid/static/funcunit/syn/browsers.js
rename to resources/static/funcunit/syn/browsers.js
diff --git a/browserid/static/funcunit/syn/build.js b/resources/static/funcunit/syn/build.js
similarity index 100%
rename from browserid/static/funcunit/syn/build.js
rename to resources/static/funcunit/syn/build.js
diff --git a/browserid/static/funcunit/syn/demo.html b/resources/static/funcunit/syn/demo.html
similarity index 100%
rename from browserid/static/funcunit/syn/demo.html
rename to resources/static/funcunit/syn/demo.html
diff --git a/browserid/static/funcunit/syn/demo/record.js b/resources/static/funcunit/syn/demo/record.js
similarity index 100%
rename from browserid/static/funcunit/syn/demo/record.js
rename to resources/static/funcunit/syn/demo/record.js
diff --git a/browserid/static/funcunit/syn/drag/drag.html b/resources/static/funcunit/syn/drag/drag.html
similarity index 100%
rename from browserid/static/funcunit/syn/drag/drag.html
rename to resources/static/funcunit/syn/drag/drag.html
diff --git a/browserid/static/funcunit/syn/drag/drag.js b/resources/static/funcunit/syn/drag/drag.js
similarity index 100%
rename from browserid/static/funcunit/syn/drag/drag.js
rename to resources/static/funcunit/syn/drag/drag.js
diff --git a/browserid/static/funcunit/syn/drag/qunit.html b/resources/static/funcunit/syn/drag/qunit.html
similarity index 100%
rename from browserid/static/funcunit/syn/drag/qunit.html
rename to resources/static/funcunit/syn/drag/qunit.html
diff --git a/browserid/static/funcunit/syn/drag/test/qunit/drag_test.js b/resources/static/funcunit/syn/drag/test/qunit/drag_test.js
similarity index 100%
rename from browserid/static/funcunit/syn/drag/test/qunit/drag_test.js
rename to resources/static/funcunit/syn/drag/test/qunit/drag_test.js
diff --git a/browserid/static/funcunit/syn/drag/test/qunit/qunit.js b/resources/static/funcunit/syn/drag/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/funcunit/syn/drag/test/qunit/qunit.js
rename to resources/static/funcunit/syn/drag/test/qunit/qunit.js
diff --git a/browserid/static/funcunit/syn/key.js b/resources/static/funcunit/syn/key.js
similarity index 100%
rename from browserid/static/funcunit/syn/key.js
rename to resources/static/funcunit/syn/key.js
diff --git a/browserid/static/funcunit/syn/mouse.js b/resources/static/funcunit/syn/mouse.js
similarity index 100%
rename from browserid/static/funcunit/syn/mouse.js
rename to resources/static/funcunit/syn/mouse.js
diff --git a/browserid/static/funcunit/syn/qunit.html b/resources/static/funcunit/syn/qunit.html
similarity index 100%
rename from browserid/static/funcunit/syn/qunit.html
rename to resources/static/funcunit/syn/qunit.html
diff --git a/browserid/static/funcunit/syn/recorder.html b/resources/static/funcunit/syn/recorder.html
similarity index 100%
rename from browserid/static/funcunit/syn/recorder.html
rename to resources/static/funcunit/syn/recorder.html
diff --git a/browserid/static/funcunit/syn/resources/jquery.event.drag.js b/resources/static/funcunit/syn/resources/jquery.event.drag.js
similarity index 100%
rename from browserid/static/funcunit/syn/resources/jquery.event.drag.js
rename to resources/static/funcunit/syn/resources/jquery.event.drag.js
diff --git a/browserid/static/funcunit/syn/resources/jquery.event.drop.js b/resources/static/funcunit/syn/resources/jquery.event.drop.js
similarity index 100%
rename from browserid/static/funcunit/syn/resources/jquery.event.drop.js
rename to resources/static/funcunit/syn/resources/jquery.event.drop.js
diff --git a/browserid/static/funcunit/syn/resources/jquery.js b/resources/static/funcunit/syn/resources/jquery.js
similarity index 100%
rename from browserid/static/funcunit/syn/resources/jquery.js
rename to resources/static/funcunit/syn/resources/jquery.js
diff --git a/browserid/static/funcunit/syn/resources/qunit/qunit.css b/resources/static/funcunit/syn/resources/qunit/qunit.css
similarity index 100%
rename from browserid/static/funcunit/syn/resources/qunit/qunit.css
rename to resources/static/funcunit/syn/resources/qunit/qunit.css
diff --git a/browserid/static/funcunit/syn/resources/qunit/qunit.js b/resources/static/funcunit/syn/resources/qunit/qunit.js
similarity index 100%
rename from browserid/static/funcunit/syn/resources/qunit/qunit.js
rename to resources/static/funcunit/syn/resources/qunit/qunit.js
diff --git a/browserid/static/funcunit/syn/syn.js b/resources/static/funcunit/syn/syn.js
similarity index 100%
rename from browserid/static/funcunit/syn/syn.js
rename to resources/static/funcunit/syn/syn.js
diff --git a/browserid/static/funcunit/syn/synthetic.html b/resources/static/funcunit/syn/synthetic.html
similarity index 100%
rename from browserid/static/funcunit/syn/synthetic.html
rename to resources/static/funcunit/syn/synthetic.html
diff --git a/browserid/static/funcunit/syn/synthetic.js b/resources/static/funcunit/syn/synthetic.js
similarity index 100%
rename from browserid/static/funcunit/syn/synthetic.js
rename to resources/static/funcunit/syn/synthetic.js
diff --git a/browserid/static/funcunit/syn/test/clickbasic.html b/resources/static/funcunit/syn/test/clickbasic.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/clickbasic.html
rename to resources/static/funcunit/syn/test/clickbasic.html
diff --git a/browserid/static/funcunit/syn/test/qunit/h3.html b/resources/static/funcunit/syn/test/qunit/h3.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/h3.html
rename to resources/static/funcunit/syn/test/qunit/h3.html
diff --git a/browserid/static/funcunit/syn/test/qunit/key_test.js b/resources/static/funcunit/syn/test/qunit/key_test.js
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/key_test.js
rename to resources/static/funcunit/syn/test/qunit/key_test.js
diff --git a/browserid/static/funcunit/syn/test/qunit/mouse_test.js b/resources/static/funcunit/syn/test/qunit/mouse_test.js
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/mouse_test.js
rename to resources/static/funcunit/syn/test/qunit/mouse_test.js
diff --git a/browserid/static/funcunit/syn/test/qunit/page1.html b/resources/static/funcunit/syn/test/qunit/page1.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/page1.html
rename to resources/static/funcunit/syn/test/qunit/page1.html
diff --git a/browserid/static/funcunit/syn/test/qunit/page2.html b/resources/static/funcunit/syn/test/qunit/page2.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/page2.html
rename to resources/static/funcunit/syn/test/qunit/page2.html
diff --git a/browserid/static/funcunit/syn/test/qunit/qunit.js b/resources/static/funcunit/syn/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/qunit.js
rename to resources/static/funcunit/syn/test/qunit/qunit.js
diff --git a/browserid/static/funcunit/syn/test/qunit/syn_test.js b/resources/static/funcunit/syn/test/qunit/syn_test.js
similarity index 100%
rename from browserid/static/funcunit/syn/test/qunit/syn_test.js
rename to resources/static/funcunit/syn/test/qunit/syn_test.js
diff --git a/browserid/static/funcunit/syn/test/submit.html b/resources/static/funcunit/syn/test/submit.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/submit.html
rename to resources/static/funcunit/syn/test/submit.html
diff --git a/browserid/static/funcunit/syn/test/submitted.html b/resources/static/funcunit/syn/test/submitted.html
similarity index 100%
rename from browserid/static/funcunit/syn/test/submitted.html
rename to resources/static/funcunit/syn/test/submitted.html
diff --git a/browserid/static/funcunit/template.html b/resources/static/funcunit/template.html
similarity index 100%
rename from browserid/static/funcunit/template.html
rename to resources/static/funcunit/template.html
diff --git a/browserid/static/funcunit/test/drag.html b/resources/static/funcunit/test/drag.html
similarity index 100%
rename from browserid/static/funcunit/test/drag.html
rename to resources/static/funcunit/test/drag.html
diff --git a/browserid/static/funcunit/test/findclosest.html b/resources/static/funcunit/test/findclosest.html
similarity index 100%
rename from browserid/static/funcunit/test/findclosest.html
rename to resources/static/funcunit/test/findclosest.html
diff --git a/browserid/static/funcunit/test/funcunit/find_closest_test.js b/resources/static/funcunit/test/funcunit/find_closest_test.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/find_closest_test.js
rename to resources/static/funcunit/test/funcunit/find_closest_test.js
diff --git a/browserid/static/funcunit/test/funcunit/funcunit.js b/resources/static/funcunit/test/funcunit/funcunit.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/funcunit.js
rename to resources/static/funcunit/test/funcunit/funcunit.js
diff --git a/browserid/static/funcunit/test/funcunit/funcunit_test.js b/resources/static/funcunit/test/funcunit/funcunit_test.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/funcunit_test.js
rename to resources/static/funcunit/test/funcunit/funcunit_test.js
diff --git a/browserid/static/funcunit/test/funcunit/open_test.js b/resources/static/funcunit/test/funcunit/open_test.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/open_test.js
rename to resources/static/funcunit/test/funcunit/open_test.js
diff --git a/browserid/static/funcunit/test/funcunit/protodrag_test.js b/resources/static/funcunit/test/funcunit/protodrag_test.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/protodrag_test.js
rename to resources/static/funcunit/test/funcunit/protodrag_test.js
diff --git a/browserid/static/funcunit/test/funcunit/syn_test.js b/resources/static/funcunit/test/funcunit/syn_test.js
similarity index 100%
rename from browserid/static/funcunit/test/funcunit/syn_test.js
rename to resources/static/funcunit/test/funcunit/syn_test.js
diff --git a/browserid/static/funcunit/test/jquery.event.drag.js b/resources/static/funcunit/test/jquery.event.drag.js
similarity index 100%
rename from browserid/static/funcunit/test/jquery.event.drag.js
rename to resources/static/funcunit/test/jquery.event.drag.js
diff --git a/browserid/static/funcunit/test/jquery.event.drop.js b/resources/static/funcunit/test/jquery.event.drop.js
similarity index 100%
rename from browserid/static/funcunit/test/jquery.event.drop.js
rename to resources/static/funcunit/test/jquery.event.drop.js
diff --git a/browserid/static/funcunit/test/jquery.js b/resources/static/funcunit/test/jquery.js
similarity index 100%
rename from browserid/static/funcunit/test/jquery.js
rename to resources/static/funcunit/test/jquery.js
diff --git a/browserid/static/funcunit/test/myapp.html b/resources/static/funcunit/test/myapp.html
similarity index 100%
rename from browserid/static/funcunit/test/myapp.html
rename to resources/static/funcunit/test/myapp.html
diff --git a/browserid/static/funcunit/test/myotherapp.html b/resources/static/funcunit/test/myotherapp.html
similarity index 100%
rename from browserid/static/funcunit/test/myotherapp.html
rename to resources/static/funcunit/test/myotherapp.html
diff --git a/browserid/static/funcunit/test/protodrag/dragdrop.js b/resources/static/funcunit/test/protodrag/dragdrop.js
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/dragdrop.js
rename to resources/static/funcunit/test/protodrag/dragdrop.js
diff --git a/browserid/static/funcunit/test/protodrag/effects.js b/resources/static/funcunit/test/protodrag/effects.js
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/effects.js
rename to resources/static/funcunit/test/protodrag/effects.js
diff --git a/browserid/static/funcunit/test/protodrag/funcunit_test.js b/resources/static/funcunit/test/protodrag/funcunit_test.js
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/funcunit_test.js
rename to resources/static/funcunit/test/protodrag/funcunit_test.js
diff --git a/browserid/static/funcunit/test/protodrag/myapp.html b/resources/static/funcunit/test/protodrag/myapp.html
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/myapp.html
rename to resources/static/funcunit/test/protodrag/myapp.html
diff --git a/browserid/static/funcunit/test/protodrag/prototype.js b/resources/static/funcunit/test/protodrag/prototype.js
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/prototype.js
rename to resources/static/funcunit/test/protodrag/prototype.js
diff --git a/browserid/static/funcunit/test/protodrag/scriptaculous.js b/resources/static/funcunit/test/protodrag/scriptaculous.js
similarity index 100%
rename from browserid/static/funcunit/test/protodrag/scriptaculous.js
rename to resources/static/funcunit/test/protodrag/scriptaculous.js
diff --git a/browserid/static/funcunit/test/qunit/qunit.js b/resources/static/funcunit/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/funcunit/test/qunit/qunit.js
rename to resources/static/funcunit/test/qunit/qunit.js
diff --git a/browserid/static/funcunit/test/run.js b/resources/static/funcunit/test/run.js
similarity index 100%
rename from browserid/static/funcunit/test/run.js
rename to resources/static/funcunit/test/run.js
diff --git a/browserid/static/funcunit/update b/resources/static/funcunit/update
similarity index 100%
rename from browserid/static/funcunit/update
rename to resources/static/funcunit/update
diff --git a/browserid/static/i/a_better_way.png b/resources/static/i/a_better_way.png
similarity index 100%
rename from browserid/static/i/a_better_way.png
rename to resources/static/i/a_better_way.png
diff --git a/browserid/static/i/arrow.png b/resources/static/i/arrow.png
similarity index 100%
rename from browserid/static/i/arrow.png
rename to resources/static/i/arrow.png
diff --git a/browserid/static/i/bg.png b/resources/static/i/bg.png
similarity index 100%
rename from browserid/static/i/bg.png
rename to resources/static/i/bg.png
diff --git a/browserid/static/i/blink.gif b/resources/static/i/blink.gif
similarity index 100%
rename from browserid/static/i/blink.gif
rename to resources/static/i/blink.gif
diff --git a/browserid/static/i/browserid_logo_lil.png b/resources/static/i/browserid_logo_lil.png
similarity index 100%
rename from browserid/static/i/browserid_logo_lil.png
rename to resources/static/i/browserid_logo_lil.png
diff --git a/browserid/static/i/browserid_logo_sm.png b/resources/static/i/browserid_logo_sm.png
similarity index 100%
rename from browserid/static/i/browserid_logo_sm.png
rename to resources/static/i/browserid_logo_sm.png
diff --git a/browserid/static/i/card.png b/resources/static/i/card.png
similarity index 100%
rename from browserid/static/i/card.png
rename to resources/static/i/card.png
diff --git a/browserid/static/i/check.png b/resources/static/i/check.png
similarity index 100%
rename from browserid/static/i/check.png
rename to resources/static/i/check.png
diff --git a/browserid/static/i/count.png b/resources/static/i/count.png
similarity index 100%
rename from browserid/static/i/count.png
rename to resources/static/i/count.png
diff --git a/browserid/static/i/firefox_logo.png b/resources/static/i/firefox_logo.png
similarity index 100%
rename from browserid/static/i/firefox_logo.png
rename to resources/static/i/firefox_logo.png
diff --git a/browserid/static/i/hint.png b/resources/static/i/hint.png
similarity index 100%
rename from browserid/static/i/hint.png
rename to resources/static/i/hint.png
diff --git a/browserid/static/i/icon.png b/resources/static/i/icon.png
similarity index 100%
rename from browserid/static/i/icon.png
rename to resources/static/i/icon.png
diff --git a/browserid/static/i/labs-logo-small.png b/resources/static/i/labs-logo-small.png
similarity index 100%
rename from browserid/static/i/labs-logo-small.png
rename to resources/static/i/labs-logo-small.png
diff --git a/browserid/static/i/lock.png b/resources/static/i/lock.png
similarity index 100%
rename from browserid/static/i/lock.png
rename to resources/static/i/lock.png
diff --git a/browserid/static/i/sign_in_blue.png b/resources/static/i/sign_in_blue.png
similarity index 100%
rename from browserid/static/i/sign_in_blue.png
rename to resources/static/i/sign_in_blue.png
diff --git a/browserid/static/i/sign_in_green.png b/resources/static/i/sign_in_green.png
similarity index 100%
rename from browserid/static/i/sign_in_green.png
rename to resources/static/i/sign_in_green.png
diff --git a/browserid/static/i/sign_in_grey.png b/resources/static/i/sign_in_grey.png
similarity index 100%
rename from browserid/static/i/sign_in_grey.png
rename to resources/static/i/sign_in_grey.png
diff --git a/browserid/static/i/sign_in_orange.png b/resources/static/i/sign_in_orange.png
similarity index 100%
rename from browserid/static/i/sign_in_orange.png
rename to resources/static/i/sign_in_orange.png
diff --git a/browserid/static/i/sign_in_red.png b/resources/static/i/sign_in_red.png
similarity index 100%
rename from browserid/static/i/sign_in_red.png
rename to resources/static/i/sign_in_red.png
diff --git a/browserid/static/i/slit.png b/resources/static/i/slit.png
similarity index 100%
rename from browserid/static/i/slit.png
rename to resources/static/i/slit.png
diff --git a/browserid/static/i/sprite.png b/resources/static/i/sprite.png
similarity index 100%
rename from browserid/static/i/sprite.png
rename to resources/static/i/sprite.png
diff --git a/browserid/static/i/sunny.png b/resources/static/i/sunny.png
similarity index 100%
rename from browserid/static/i/sunny.png
rename to resources/static/i/sunny.png
diff --git a/browserid/static/i/times.gif b/resources/static/i/times.gif
similarity index 100%
rename from browserid/static/i/times.gif
rename to resources/static/i/times.gif
diff --git a/browserid/static/i/tutorial_1.png b/resources/static/i/tutorial_1.png
similarity index 100%
rename from browserid/static/i/tutorial_1.png
rename to resources/static/i/tutorial_1.png
diff --git a/browserid/static/i/tutorial_2.png b/resources/static/i/tutorial_2.png
similarity index 100%
rename from browserid/static/i/tutorial_2.png
rename to resources/static/i/tutorial_2.png
diff --git a/browserid/static/i/tutorial_3.png b/resources/static/i/tutorial_3.png
similarity index 100%
rename from browserid/static/i/tutorial_3.png
rename to resources/static/i/tutorial_3.png
diff --git a/browserid/static/include.js b/resources/static/include.js
similarity index 100%
rename from browserid/static/include.js
rename to resources/static/include.js
diff --git a/browserid/static/jquery/.gitignore b/resources/static/jquery/.gitignore
similarity index 100%
rename from browserid/static/jquery/.gitignore
rename to resources/static/jquery/.gitignore
diff --git a/browserid/static/jquery/README b/resources/static/jquery/README
similarity index 100%
rename from browserid/static/jquery/README
rename to resources/static/jquery/README
diff --git a/browserid/static/jquery/build.js b/resources/static/jquery/build.js
similarity index 100%
rename from browserid/static/jquery/build.js
rename to resources/static/jquery/build.js
diff --git a/browserid/static/jquery/buildAll.js b/resources/static/jquery/buildAll.js
similarity index 100%
rename from browserid/static/jquery/buildAll.js
rename to resources/static/jquery/buildAll.js
diff --git a/browserid/static/jquery/class/class.html b/resources/static/jquery/class/class.html
similarity index 100%
rename from browserid/static/jquery/class/class.html
rename to resources/static/jquery/class/class.html
diff --git a/browserid/static/jquery/class/class.js b/resources/static/jquery/class/class.js
similarity index 100%
rename from browserid/static/jquery/class/class.js
rename to resources/static/jquery/class/class.js
diff --git a/browserid/static/jquery/class/class_test.js b/resources/static/jquery/class/class_test.js
similarity index 100%
rename from browserid/static/jquery/class/class_test.js
rename to resources/static/jquery/class/class_test.js
diff --git a/browserid/static/jquery/class/qunit.html b/resources/static/jquery/class/qunit.html
similarity index 100%
rename from browserid/static/jquery/class/qunit.html
rename to resources/static/jquery/class/qunit.html
diff --git a/browserid/static/jquery/controller/controller.html b/resources/static/jquery/controller/controller.html
similarity index 100%
rename from browserid/static/jquery/controller/controller.html
rename to resources/static/jquery/controller/controller.html
diff --git a/browserid/static/jquery/controller/controller.js b/resources/static/jquery/controller/controller.js
similarity index 100%
rename from browserid/static/jquery/controller/controller.js
rename to resources/static/jquery/controller/controller.js
diff --git a/browserid/static/jquery/controller/controller_test.js b/resources/static/jquery/controller/controller_test.js
similarity index 100%
rename from browserid/static/jquery/controller/controller_test.js
rename to resources/static/jquery/controller/controller_test.js
diff --git a/browserid/static/jquery/controller/history/history.html b/resources/static/jquery/controller/history/history.html
similarity index 100%
rename from browserid/static/jquery/controller/history/history.html
rename to resources/static/jquery/controller/history/history.html
diff --git a/browserid/static/jquery/controller/history/history.js b/resources/static/jquery/controller/history/history.js
similarity index 100%
rename from browserid/static/jquery/controller/history/history.js
rename to resources/static/jquery/controller/history/history.js
diff --git a/browserid/static/jquery/controller/history/html5/html5.js b/resources/static/jquery/controller/history/html5/html5.js
similarity index 100%
rename from browserid/static/jquery/controller/history/html5/html5.js
rename to resources/static/jquery/controller/history/html5/html5.js
diff --git a/browserid/static/jquery/controller/history/html5/qunit.html b/resources/static/jquery/controller/history/html5/qunit.html
similarity index 100%
rename from browserid/static/jquery/controller/history/html5/qunit.html
rename to resources/static/jquery/controller/history/html5/qunit.html
diff --git a/browserid/static/jquery/controller/history/html5/qunit/qunit.js b/resources/static/jquery/controller/history/html5/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/controller/history/html5/qunit/qunit.js
rename to resources/static/jquery/controller/history/html5/qunit/qunit.js
diff --git a/browserid/static/jquery/controller/history/qunit.html b/resources/static/jquery/controller/history/qunit.html
similarity index 100%
rename from browserid/static/jquery/controller/history/qunit.html
rename to resources/static/jquery/controller/history/qunit.html
diff --git a/browserid/static/jquery/controller/history/qunit/qunit.js b/resources/static/jquery/controller/history/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/controller/history/qunit/qunit.js
rename to resources/static/jquery/controller/history/qunit/qunit.js
diff --git a/browserid/static/jquery/controller/pages/document.js b/resources/static/jquery/controller/pages/document.js
similarity index 100%
rename from browserid/static/jquery/controller/pages/document.js
rename to resources/static/jquery/controller/pages/document.js
diff --git a/browserid/static/jquery/controller/pages/listening.js b/resources/static/jquery/controller/pages/listening.js
similarity index 100%
rename from browserid/static/jquery/controller/pages/listening.js
rename to resources/static/jquery/controller/pages/listening.js
diff --git a/browserid/static/jquery/controller/pages/plugin.js b/resources/static/jquery/controller/pages/plugin.js
similarity index 100%
rename from browserid/static/jquery/controller/pages/plugin.js
rename to resources/static/jquery/controller/pages/plugin.js
diff --git a/browserid/static/jquery/controller/qunit.html b/resources/static/jquery/controller/qunit.html
similarity index 100%
rename from browserid/static/jquery/controller/qunit.html
rename to resources/static/jquery/controller/qunit.html
diff --git a/browserid/static/jquery/controller/subscribe/funcunit.html b/resources/static/jquery/controller/subscribe/funcunit.html
similarity index 100%
rename from browserid/static/jquery/controller/subscribe/funcunit.html
rename to resources/static/jquery/controller/subscribe/funcunit.html
diff --git a/browserid/static/jquery/controller/subscribe/subscribe.html b/resources/static/jquery/controller/subscribe/subscribe.html
similarity index 100%
rename from browserid/static/jquery/controller/subscribe/subscribe.html
rename to resources/static/jquery/controller/subscribe/subscribe.html
diff --git a/browserid/static/jquery/controller/subscribe/subscribe.js b/resources/static/jquery/controller/subscribe/subscribe.js
similarity index 100%
rename from browserid/static/jquery/controller/subscribe/subscribe.js
rename to resources/static/jquery/controller/subscribe/subscribe.js
diff --git a/browserid/static/jquery/controller/view/qunit.html b/resources/static/jquery/controller/view/qunit.html
similarity index 100%
rename from browserid/static/jquery/controller/view/qunit.html
rename to resources/static/jquery/controller/view/qunit.html
diff --git a/browserid/static/jquery/controller/view/test/qunit/controller_view_test.js b/resources/static/jquery/controller/view/test/qunit/controller_view_test.js
similarity index 100%
rename from browserid/static/jquery/controller/view/test/qunit/controller_view_test.js
rename to resources/static/jquery/controller/view/test/qunit/controller_view_test.js
diff --git a/browserid/static/jquery/controller/view/test/qunit/qunit.js b/resources/static/jquery/controller/view/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/controller/view/test/qunit/qunit.js
rename to resources/static/jquery/controller/view/test/qunit/qunit.js
diff --git a/browserid/static/jquery/controller/view/test/qunit/views/init.micro b/resources/static/jquery/controller/view/test/qunit/views/init.micro
similarity index 100%
rename from browserid/static/jquery/controller/view/test/qunit/views/init.micro
rename to resources/static/jquery/controller/view/test/qunit/views/init.micro
diff --git a/browserid/static/jquery/controller/view/view.js b/resources/static/jquery/controller/view/view.js
similarity index 100%
rename from browserid/static/jquery/controller/view/view.js
rename to resources/static/jquery/controller/view/view.js
diff --git a/browserid/static/jquery/dom/closest/closest.js b/resources/static/jquery/dom/closest/closest.js
similarity index 100%
rename from browserid/static/jquery/dom/closest/closest.js
rename to resources/static/jquery/dom/closest/closest.js
diff --git a/browserid/static/jquery/dom/compare/compare.html b/resources/static/jquery/dom/compare/compare.html
similarity index 100%
rename from browserid/static/jquery/dom/compare/compare.html
rename to resources/static/jquery/dom/compare/compare.html
diff --git a/browserid/static/jquery/dom/compare/compare.js b/resources/static/jquery/dom/compare/compare.js
similarity index 100%
rename from browserid/static/jquery/dom/compare/compare.js
rename to resources/static/jquery/dom/compare/compare.js
diff --git a/browserid/static/jquery/dom/compare/compare_test.js b/resources/static/jquery/dom/compare/compare_test.js
similarity index 100%
rename from browserid/static/jquery/dom/compare/compare_test.js
rename to resources/static/jquery/dom/compare/compare_test.js
diff --git a/browserid/static/jquery/dom/compare/qunit.html b/resources/static/jquery/dom/compare/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/compare/qunit.html
rename to resources/static/jquery/dom/compare/qunit.html
diff --git a/browserid/static/jquery/dom/cookie/cookie.js b/resources/static/jquery/dom/cookie/cookie.js
similarity index 100%
rename from browserid/static/jquery/dom/cookie/cookie.js
rename to resources/static/jquery/dom/cookie/cookie.js
diff --git a/browserid/static/jquery/dom/cur_styles/cur_styles.html b/resources/static/jquery/dom/cur_styles/cur_styles.html
similarity index 100%
rename from browserid/static/jquery/dom/cur_styles/cur_styles.html
rename to resources/static/jquery/dom/cur_styles/cur_styles.html
diff --git a/browserid/static/jquery/dom/cur_styles/cur_styles.js b/resources/static/jquery/dom/cur_styles/cur_styles.js
similarity index 100%
rename from browserid/static/jquery/dom/cur_styles/cur_styles.js
rename to resources/static/jquery/dom/cur_styles/cur_styles.js
diff --git a/browserid/static/jquery/dom/cur_styles/cur_styles_test.js b/resources/static/jquery/dom/cur_styles/cur_styles_test.js
similarity index 100%
rename from browserid/static/jquery/dom/cur_styles/cur_styles_test.js
rename to resources/static/jquery/dom/cur_styles/cur_styles_test.js
diff --git a/browserid/static/jquery/dom/cur_styles/qunit.html b/resources/static/jquery/dom/cur_styles/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/cur_styles/qunit.html
rename to resources/static/jquery/dom/cur_styles/qunit.html
diff --git a/browserid/static/jquery/dom/cur_styles/test/curStyles.micro b/resources/static/jquery/dom/cur_styles/test/curStyles.micro
similarity index 100%
rename from browserid/static/jquery/dom/cur_styles/test/curStyles.micro
rename to resources/static/jquery/dom/cur_styles/test/curStyles.micro
diff --git a/browserid/static/jquery/dom/dimensions/dimensions.html b/resources/static/jquery/dom/dimensions/dimensions.html
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/dimensions.html
rename to resources/static/jquery/dom/dimensions/dimensions.html
diff --git a/browserid/static/jquery/dom/dimensions/dimensions.js b/resources/static/jquery/dom/dimensions/dimensions.js
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/dimensions.js
rename to resources/static/jquery/dom/dimensions/dimensions.js
diff --git a/browserid/static/jquery/dom/dimensions/qunit.html b/resources/static/jquery/dom/dimensions/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/qunit.html
rename to resources/static/jquery/dom/dimensions/qunit.html
diff --git a/browserid/static/jquery/dom/dimensions/test/qunit/curStyles.micro b/resources/static/jquery/dom/dimensions/test/qunit/curStyles.micro
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/test/qunit/curStyles.micro
rename to resources/static/jquery/dom/dimensions/test/qunit/curStyles.micro
diff --git a/browserid/static/jquery/dom/dimensions/test/qunit/dimensions_test.js b/resources/static/jquery/dom/dimensions/test/qunit/dimensions_test.js
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/test/qunit/dimensions_test.js
rename to resources/static/jquery/dom/dimensions/test/qunit/dimensions_test.js
diff --git a/browserid/static/jquery/dom/dimensions/test/qunit/outer.micro b/resources/static/jquery/dom/dimensions/test/qunit/outer.micro
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/test/qunit/outer.micro
rename to resources/static/jquery/dom/dimensions/test/qunit/outer.micro
diff --git a/browserid/static/jquery/dom/dimensions/test/qunit/qunit.js b/resources/static/jquery/dom/dimensions/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/dom/dimensions/test/qunit/qunit.js
rename to resources/static/jquery/dom/dimensions/test/qunit/qunit.js
diff --git a/browserid/static/jquery/dom/dom.js b/resources/static/jquery/dom/dom.js
similarity index 100%
rename from browserid/static/jquery/dom/dom.js
rename to resources/static/jquery/dom/dom.js
diff --git a/browserid/static/jquery/dom/fixture/fixture.html b/resources/static/jquery/dom/fixture/fixture.html
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixture.html
rename to resources/static/jquery/dom/fixture/fixture.html
diff --git a/browserid/static/jquery/dom/fixture/fixture.js b/resources/static/jquery/dom/fixture/fixture.js
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixture.js
rename to resources/static/jquery/dom/fixture/fixture.js
diff --git a/browserid/static/jquery/dom/fixture/fixture_test.js b/resources/static/jquery/dom/fixture/fixture_test.js
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixture_test.js
rename to resources/static/jquery/dom/fixture/fixture_test.js
diff --git a/browserid/static/jquery/dom/fixture/fixtures/foo.json b/resources/static/jquery/dom/fixture/fixtures/foo.json
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixtures/foo.json
rename to resources/static/jquery/dom/fixture/fixtures/foo.json
diff --git a/browserid/static/jquery/dom/fixture/fixtures/foobar.json b/resources/static/jquery/dom/fixture/fixtures/foobar.json
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixtures/foobar.json
rename to resources/static/jquery/dom/fixture/fixtures/foobar.json
diff --git a/browserid/static/jquery/dom/fixture/fixtures/messages.html b/resources/static/jquery/dom/fixture/fixtures/messages.html
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixtures/messages.html
rename to resources/static/jquery/dom/fixture/fixtures/messages.html
diff --git a/browserid/static/jquery/dom/fixture/fixtures/test.json b/resources/static/jquery/dom/fixture/fixtures/test.json
similarity index 100%
rename from browserid/static/jquery/dom/fixture/fixtures/test.json
rename to resources/static/jquery/dom/fixture/fixtures/test.json
diff --git a/browserid/static/jquery/dom/fixture/qunit.html b/resources/static/jquery/dom/fixture/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/fixture/qunit.html
rename to resources/static/jquery/dom/fixture/qunit.html
diff --git a/browserid/static/jquery/dom/form_params/form_params.html b/resources/static/jquery/dom/form_params/form_params.html
similarity index 100%
rename from browserid/static/jquery/dom/form_params/form_params.html
rename to resources/static/jquery/dom/form_params/form_params.html
diff --git a/browserid/static/jquery/dom/form_params/form_params.js b/resources/static/jquery/dom/form_params/form_params.js
similarity index 100%
rename from browserid/static/jquery/dom/form_params/form_params.js
rename to resources/static/jquery/dom/form_params/form_params.js
diff --git a/browserid/static/jquery/dom/form_params/qunit.html b/resources/static/jquery/dom/form_params/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/form_params/qunit.html
rename to resources/static/jquery/dom/form_params/qunit.html
diff --git a/browserid/static/jquery/dom/form_params/test/qunit/basics.micro b/resources/static/jquery/dom/form_params/test/qunit/basics.micro
similarity index 100%
rename from browserid/static/jquery/dom/form_params/test/qunit/basics.micro
rename to resources/static/jquery/dom/form_params/test/qunit/basics.micro
diff --git a/browserid/static/jquery/dom/form_params/test/qunit/checkbox.micro b/resources/static/jquery/dom/form_params/test/qunit/checkbox.micro
similarity index 100%
rename from browserid/static/jquery/dom/form_params/test/qunit/checkbox.micro
rename to resources/static/jquery/dom/form_params/test/qunit/checkbox.micro
diff --git a/browserid/static/jquery/dom/form_params/test/qunit/form_params_test.js b/resources/static/jquery/dom/form_params/test/qunit/form_params_test.js
similarity index 100%
rename from browserid/static/jquery/dom/form_params/test/qunit/form_params_test.js
rename to resources/static/jquery/dom/form_params/test/qunit/form_params_test.js
diff --git a/browserid/static/jquery/dom/form_params/test/qunit/qunit.js b/resources/static/jquery/dom/form_params/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/dom/form_params/test/qunit/qunit.js
rename to resources/static/jquery/dom/form_params/test/qunit/qunit.js
diff --git a/browserid/static/jquery/dom/form_params/test/qunit/truthy.micro b/resources/static/jquery/dom/form_params/test/qunit/truthy.micro
similarity index 100%
rename from browserid/static/jquery/dom/form_params/test/qunit/truthy.micro
rename to resources/static/jquery/dom/form_params/test/qunit/truthy.micro
diff --git a/browserid/static/jquery/dom/range/qunit.html b/resources/static/jquery/dom/range/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/range/qunit.html
rename to resources/static/jquery/dom/range/qunit.html
diff --git a/browserid/static/jquery/dom/range/range.html b/resources/static/jquery/dom/range/range.html
similarity index 100%
rename from browserid/static/jquery/dom/range/range.html
rename to resources/static/jquery/dom/range/range.html
diff --git a/browserid/static/jquery/dom/range/range.js b/resources/static/jquery/dom/range/range.js
similarity index 100%
rename from browserid/static/jquery/dom/range/range.js
rename to resources/static/jquery/dom/range/range.js
diff --git a/browserid/static/jquery/dom/range/range_test.js b/resources/static/jquery/dom/range/range_test.js
similarity index 100%
rename from browserid/static/jquery/dom/range/range_test.js
rename to resources/static/jquery/dom/range/range_test.js
diff --git a/browserid/static/jquery/dom/selection/qunit.html b/resources/static/jquery/dom/selection/qunit.html
similarity index 100%
rename from browserid/static/jquery/dom/selection/qunit.html
rename to resources/static/jquery/dom/selection/qunit.html
diff --git a/browserid/static/jquery/dom/selection/selection.html b/resources/static/jquery/dom/selection/selection.html
similarity index 100%
rename from browserid/static/jquery/dom/selection/selection.html
rename to resources/static/jquery/dom/selection/selection.html
diff --git a/browserid/static/jquery/dom/selection/selection.js b/resources/static/jquery/dom/selection/selection.js
similarity index 100%
rename from browserid/static/jquery/dom/selection/selection.js
rename to resources/static/jquery/dom/selection/selection.js
diff --git a/browserid/static/jquery/dom/selection/selection_test.js b/resources/static/jquery/dom/selection/selection_test.js
similarity index 100%
rename from browserid/static/jquery/dom/selection/selection_test.js
rename to resources/static/jquery/dom/selection/selection_test.js
diff --git a/browserid/static/jquery/dom/within/within.js b/resources/static/jquery/dom/within/within.js
similarity index 100%
rename from browserid/static/jquery/dom/within/within.js
rename to resources/static/jquery/dom/within/within.js
diff --git a/browserid/static/jquery/download/btn.png b/resources/static/jquery/download/btn.png
similarity index 100%
rename from browserid/static/jquery/download/btn.png
rename to resources/static/jquery/download/btn.png
diff --git a/browserid/static/jquery/download/dependencies.json b/resources/static/jquery/download/dependencies.json
similarity index 100%
rename from browserid/static/jquery/download/dependencies.json
rename to resources/static/jquery/download/dependencies.json
diff --git a/browserid/static/jquery/download/download.css b/resources/static/jquery/download/download.css
similarity index 100%
rename from browserid/static/jquery/download/download.css
rename to resources/static/jquery/download/download.css
diff --git a/browserid/static/jquery/download/download.html b/resources/static/jquery/download/download.html
similarity index 100%
rename from browserid/static/jquery/download/download.html
rename to resources/static/jquery/download/download.html
diff --git a/browserid/static/jquery/download/download.js b/resources/static/jquery/download/download.js
similarity index 100%
rename from browserid/static/jquery/download/download.js
rename to resources/static/jquery/download/download.js
diff --git a/browserid/static/jquery/download/test/controllerpage.html b/resources/static/jquery/download/test/controllerpage.html
similarity index 100%
rename from browserid/static/jquery/download/test/controllerpage.html
rename to resources/static/jquery/download/test/controllerpage.html
diff --git a/browserid/static/jquery/download/test/jquery-1.4.3.js b/resources/static/jquery/download/test/jquery-1.4.3.js
similarity index 100%
rename from browserid/static/jquery/download/test/jquery-1.4.3.js
rename to resources/static/jquery/download/test/jquery-1.4.3.js
diff --git a/browserid/static/jquery/download/test/run.js b/resources/static/jquery/download/test/run.js
similarity index 100%
rename from browserid/static/jquery/download/test/run.js
rename to resources/static/jquery/download/test/run.js
diff --git a/browserid/static/jquery/event/default/default.html b/resources/static/jquery/event/default/default.html
similarity index 100%
rename from browserid/static/jquery/event/default/default.html
rename to resources/static/jquery/event/default/default.html
diff --git a/browserid/static/jquery/event/default/default.js b/resources/static/jquery/event/default/default.js
similarity index 100%
rename from browserid/static/jquery/event/default/default.js
rename to resources/static/jquery/event/default/default.js
diff --git a/browserid/static/jquery/event/default/default_pause_test.html b/resources/static/jquery/event/default/default_pause_test.html
similarity index 100%
rename from browserid/static/jquery/event/default/default_pause_test.html
rename to resources/static/jquery/event/default/default_pause_test.html
diff --git a/browserid/static/jquery/event/default/default_pause_test.js b/resources/static/jquery/event/default/default_pause_test.js
similarity index 100%
rename from browserid/static/jquery/event/default/default_pause_test.js
rename to resources/static/jquery/event/default/default_pause_test.js
diff --git a/browserid/static/jquery/event/default/default_test.js b/resources/static/jquery/event/default/default_test.js
similarity index 100%
rename from browserid/static/jquery/event/default/default_test.js
rename to resources/static/jquery/event/default/default_test.js
diff --git a/browserid/static/jquery/event/default/defaultjquery.html b/resources/static/jquery/event/default/defaultjquery.html
similarity index 100%
rename from browserid/static/jquery/event/default/defaultjquery.html
rename to resources/static/jquery/event/default/defaultjquery.html
diff --git a/browserid/static/jquery/event/default/qunit.html b/resources/static/jquery/event/default/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/default/qunit.html
rename to resources/static/jquery/event/default/qunit.html
diff --git a/browserid/static/jquery/event/destroyed/destroyed.html b/resources/static/jquery/event/destroyed/destroyed.html
similarity index 100%
rename from browserid/static/jquery/event/destroyed/destroyed.html
rename to resources/static/jquery/event/destroyed/destroyed.html
diff --git a/browserid/static/jquery/event/destroyed/destroyed.js b/resources/static/jquery/event/destroyed/destroyed.js
similarity index 100%
rename from browserid/static/jquery/event/destroyed/destroyed.js
rename to resources/static/jquery/event/destroyed/destroyed.js
diff --git a/browserid/static/jquery/event/destroyed/destroyed_menu.html b/resources/static/jquery/event/destroyed/destroyed_menu.html
similarity index 100%
rename from browserid/static/jquery/event/destroyed/destroyed_menu.html
rename to resources/static/jquery/event/destroyed/destroyed_menu.html
diff --git a/browserid/static/jquery/event/destroyed/qunit.html b/resources/static/jquery/event/destroyed/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/destroyed/qunit.html
rename to resources/static/jquery/event/destroyed/qunit.html
diff --git a/browserid/static/jquery/event/destroyed/test/qunit/destroyed_test.js b/resources/static/jquery/event/destroyed/test/qunit/destroyed_test.js
similarity index 100%
rename from browserid/static/jquery/event/destroyed/test/qunit/destroyed_test.js
rename to resources/static/jquery/event/destroyed/test/qunit/destroyed_test.js
diff --git a/browserid/static/jquery/event/destroyed/test/qunit/qunit.js b/resources/static/jquery/event/destroyed/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/event/destroyed/test/qunit/qunit.js
rename to resources/static/jquery/event/destroyed/test/qunit/qunit.js
diff --git a/browserid/static/jquery/event/drag/drag.html b/resources/static/jquery/event/drag/drag.html
similarity index 100%
rename from browserid/static/jquery/event/drag/drag.html
rename to resources/static/jquery/event/drag/drag.html
diff --git a/browserid/static/jquery/event/drag/drag.js b/resources/static/jquery/event/drag/drag.js
similarity index 100%
rename from browserid/static/jquery/event/drag/drag.js
rename to resources/static/jquery/event/drag/drag.js
diff --git a/browserid/static/jquery/event/drag/drag_test.js b/resources/static/jquery/event/drag/drag_test.js
similarity index 100%
rename from browserid/static/jquery/event/drag/drag_test.js
rename to resources/static/jquery/event/drag/drag_test.js
diff --git a/browserid/static/jquery/event/drag/limit/limit.html b/resources/static/jquery/event/drag/limit/limit.html
similarity index 100%
rename from browserid/static/jquery/event/drag/limit/limit.html
rename to resources/static/jquery/event/drag/limit/limit.html
diff --git a/browserid/static/jquery/event/drag/limit/limit.js b/resources/static/jquery/event/drag/limit/limit.js
similarity index 100%
rename from browserid/static/jquery/event/drag/limit/limit.js
rename to resources/static/jquery/event/drag/limit/limit.js
diff --git a/browserid/static/jquery/event/drag/qunit.html b/resources/static/jquery/event/drag/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/drag/qunit.html
rename to resources/static/jquery/event/drag/qunit.html
diff --git a/browserid/static/jquery/event/drag/scroll/scroll.js b/resources/static/jquery/event/drag/scroll/scroll.js
similarity index 100%
rename from browserid/static/jquery/event/drag/scroll/scroll.js
rename to resources/static/jquery/event/drag/scroll/scroll.js
diff --git a/browserid/static/jquery/event/drag/step/step.html b/resources/static/jquery/event/drag/step/step.html
similarity index 100%
rename from browserid/static/jquery/event/drag/step/step.html
rename to resources/static/jquery/event/drag/step/step.html
diff --git a/browserid/static/jquery/event/drag/step/step.js b/resources/static/jquery/event/drag/step/step.js
similarity index 100%
rename from browserid/static/jquery/event/drag/step/step.js
rename to resources/static/jquery/event/drag/step/step.js
diff --git a/browserid/static/jquery/event/drop/drop.html b/resources/static/jquery/event/drop/drop.html
similarity index 100%
rename from browserid/static/jquery/event/drop/drop.html
rename to resources/static/jquery/event/drop/drop.html
diff --git a/browserid/static/jquery/event/drop/drop.js b/resources/static/jquery/event/drop/drop.js
similarity index 100%
rename from browserid/static/jquery/event/drop/drop.js
rename to resources/static/jquery/event/drop/drop.js
diff --git a/browserid/static/jquery/event/drop/drop_test.js b/resources/static/jquery/event/drop/drop_test.js
similarity index 100%
rename from browserid/static/jquery/event/drop/drop_test.js
rename to resources/static/jquery/event/drop/drop_test.js
diff --git a/browserid/static/jquery/event/event.js b/resources/static/jquery/event/event.js
similarity index 100%
rename from browserid/static/jquery/event/event.js
rename to resources/static/jquery/event/event.js
diff --git a/browserid/static/jquery/event/handle/handle.js b/resources/static/jquery/event/handle/handle.js
similarity index 100%
rename from browserid/static/jquery/event/handle/handle.js
rename to resources/static/jquery/event/handle/handle.js
diff --git a/browserid/static/jquery/event/hashchange/hashchange.js b/resources/static/jquery/event/hashchange/hashchange.js
similarity index 100%
rename from browserid/static/jquery/event/hashchange/hashchange.js
rename to resources/static/jquery/event/hashchange/hashchange.js
diff --git a/browserid/static/jquery/event/hover/hover.html b/resources/static/jquery/event/hover/hover.html
similarity index 100%
rename from browserid/static/jquery/event/hover/hover.html
rename to resources/static/jquery/event/hover/hover.html
diff --git a/browserid/static/jquery/event/hover/hover.js b/resources/static/jquery/event/hover/hover.js
similarity index 100%
rename from browserid/static/jquery/event/hover/hover.js
rename to resources/static/jquery/event/hover/hover.js
diff --git a/browserid/static/jquery/event/hover/qunit.html b/resources/static/jquery/event/hover/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/hover/qunit.html
rename to resources/static/jquery/event/hover/qunit.html
diff --git a/browserid/static/jquery/event/hover/test/qunit/hover_test.js b/resources/static/jquery/event/hover/test/qunit/hover_test.js
similarity index 100%
rename from browserid/static/jquery/event/hover/test/qunit/hover_test.js
rename to resources/static/jquery/event/hover/test/qunit/hover_test.js
diff --git a/browserid/static/jquery/event/hover/test/qunit/qunit.js b/resources/static/jquery/event/hover/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/event/hover/test/qunit/qunit.js
rename to resources/static/jquery/event/hover/test/qunit/qunit.js
diff --git a/browserid/static/jquery/event/key/key.html b/resources/static/jquery/event/key/key.html
similarity index 100%
rename from browserid/static/jquery/event/key/key.html
rename to resources/static/jquery/event/key/key.html
diff --git a/browserid/static/jquery/event/key/key.js b/resources/static/jquery/event/key/key.js
similarity index 100%
rename from browserid/static/jquery/event/key/key.js
rename to resources/static/jquery/event/key/key.js
diff --git a/browserid/static/jquery/event/key/key_test.js b/resources/static/jquery/event/key/key_test.js
similarity index 100%
rename from browserid/static/jquery/event/key/key_test.js
rename to resources/static/jquery/event/key/key_test.js
diff --git a/browserid/static/jquery/event/key/qunit.html b/resources/static/jquery/event/key/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/key/qunit.html
rename to resources/static/jquery/event/key/qunit.html
diff --git a/browserid/static/jquery/event/livehack/livehack.js b/resources/static/jquery/event/livehack/livehack.js
similarity index 100%
rename from browserid/static/jquery/event/livehack/livehack.js
rename to resources/static/jquery/event/livehack/livehack.js
diff --git a/browserid/static/jquery/event/pause/pause.html b/resources/static/jquery/event/pause/pause.html
similarity index 100%
rename from browserid/static/jquery/event/pause/pause.html
rename to resources/static/jquery/event/pause/pause.html
diff --git a/browserid/static/jquery/event/pause/pause.js b/resources/static/jquery/event/pause/pause.js
similarity index 100%
rename from browserid/static/jquery/event/pause/pause.js
rename to resources/static/jquery/event/pause/pause.js
diff --git a/browserid/static/jquery/event/pause/pause_test.js b/resources/static/jquery/event/pause/pause_test.js
similarity index 100%
rename from browserid/static/jquery/event/pause/pause_test.js
rename to resources/static/jquery/event/pause/pause_test.js
diff --git a/browserid/static/jquery/event/pause/qunit.html b/resources/static/jquery/event/pause/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/pause/qunit.html
rename to resources/static/jquery/event/pause/qunit.html
diff --git a/browserid/static/jquery/event/resize/demo.html b/resources/static/jquery/event/resize/demo.html
similarity index 100%
rename from browserid/static/jquery/event/resize/demo.html
rename to resources/static/jquery/event/resize/demo.html
diff --git a/browserid/static/jquery/event/resize/qunit.html b/resources/static/jquery/event/resize/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/resize/qunit.html
rename to resources/static/jquery/event/resize/qunit.html
diff --git a/browserid/static/jquery/event/resize/resize.html b/resources/static/jquery/event/resize/resize.html
similarity index 100%
rename from browserid/static/jquery/event/resize/resize.html
rename to resources/static/jquery/event/resize/resize.html
diff --git a/browserid/static/jquery/event/resize/resize.js b/resources/static/jquery/event/resize/resize.js
similarity index 100%
rename from browserid/static/jquery/event/resize/resize.js
rename to resources/static/jquery/event/resize/resize.js
diff --git a/browserid/static/jquery/event/resize/resize_test.js b/resources/static/jquery/event/resize/resize_test.js
similarity index 100%
rename from browserid/static/jquery/event/resize/resize_test.js
rename to resources/static/jquery/event/resize/resize_test.js
diff --git a/browserid/static/jquery/event/selection/qunit.html b/resources/static/jquery/event/selection/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/selection/qunit.html
rename to resources/static/jquery/event/selection/qunit.html
diff --git a/browserid/static/jquery/event/selection/selection.html b/resources/static/jquery/event/selection/selection.html
similarity index 100%
rename from browserid/static/jquery/event/selection/selection.html
rename to resources/static/jquery/event/selection/selection.html
diff --git a/browserid/static/jquery/event/selection/selection.js b/resources/static/jquery/event/selection/selection.js
similarity index 100%
rename from browserid/static/jquery/event/selection/selection.js
rename to resources/static/jquery/event/selection/selection.js
diff --git a/browserid/static/jquery/event/selection/selection_test.js b/resources/static/jquery/event/selection/selection_test.js
similarity index 100%
rename from browserid/static/jquery/event/selection/selection_test.js
rename to resources/static/jquery/event/selection/selection_test.js
diff --git a/browserid/static/jquery/event/swipe/qunit.html b/resources/static/jquery/event/swipe/qunit.html
similarity index 100%
rename from browserid/static/jquery/event/swipe/qunit.html
rename to resources/static/jquery/event/swipe/qunit.html
diff --git a/browserid/static/jquery/event/swipe/swipe.html b/resources/static/jquery/event/swipe/swipe.html
similarity index 100%
rename from browserid/static/jquery/event/swipe/swipe.html
rename to resources/static/jquery/event/swipe/swipe.html
diff --git a/browserid/static/jquery/event/swipe/swipe.js b/resources/static/jquery/event/swipe/swipe.js
similarity index 100%
rename from browserid/static/jquery/event/swipe/swipe.js
rename to resources/static/jquery/event/swipe/swipe.js
diff --git a/browserid/static/jquery/event/swipe/swipe_test.js b/resources/static/jquery/event/swipe/swipe_test.js
similarity index 100%
rename from browserid/static/jquery/event/swipe/swipe_test.js
rename to resources/static/jquery/event/swipe/swipe_test.js
diff --git a/browserid/static/jquery/generate/app b/resources/static/jquery/generate/app
similarity index 100%
rename from browserid/static/jquery/generate/app
rename to resources/static/jquery/generate/app
diff --git a/browserid/static/jquery/generate/controller b/resources/static/jquery/generate/controller
similarity index 100%
rename from browserid/static/jquery/generate/controller
rename to resources/static/jquery/generate/controller
diff --git a/browserid/static/jquery/generate/funcunit b/resources/static/jquery/generate/funcunit
similarity index 100%
rename from browserid/static/jquery/generate/funcunit
rename to resources/static/jquery/generate/funcunit
diff --git a/browserid/static/jquery/generate/model b/resources/static/jquery/generate/model
similarity index 100%
rename from browserid/static/jquery/generate/model
rename to resources/static/jquery/generate/model
diff --git a/browserid/static/jquery/generate/page b/resources/static/jquery/generate/page
similarity index 100%
rename from browserid/static/jquery/generate/page
rename to resources/static/jquery/generate/page
diff --git a/browserid/static/jquery/generate/plugin b/resources/static/jquery/generate/plugin
similarity index 100%
rename from browserid/static/jquery/generate/plugin
rename to resources/static/jquery/generate/plugin
diff --git a/browserid/static/jquery/generate/scaffold b/resources/static/jquery/generate/scaffold
similarity index 100%
rename from browserid/static/jquery/generate/scaffold
rename to resources/static/jquery/generate/scaffold
diff --git a/browserid/static/jquery/generate/templates/app/(application_name).css.ejs b/resources/static/jquery/generate/templates/app/(application_name).css.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/(application_name).css.ejs
rename to resources/static/jquery/generate/templates/app/(application_name).css.ejs
diff --git a/browserid/static/jquery/generate/templates/app/(application_name).html.ejs b/resources/static/jquery/generate/templates/app/(application_name).html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/(application_name).html.ejs
rename to resources/static/jquery/generate/templates/app/(application_name).html.ejs
diff --git a/browserid/static/jquery/generate/templates/app/(application_name).js.ejs b/resources/static/jquery/generate/templates/app/(application_name).js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/(application_name).js.ejs
rename to resources/static/jquery/generate/templates/app/(application_name).js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/controllers/.ignore b/resources/static/jquery/generate/templates/app/controllers/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/controllers/.ignore
rename to resources/static/jquery/generate/templates/app/controllers/.ignore
diff --git a/browserid/static/jquery/generate/templates/app/docs/.ignore b/resources/static/jquery/generate/templates/app/docs/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/docs/.ignore
rename to resources/static/jquery/generate/templates/app/docs/.ignore
diff --git a/browserid/static/jquery/generate/templates/app/fixtures/.ignore b/resources/static/jquery/generate/templates/app/fixtures/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/fixtures/.ignore
rename to resources/static/jquery/generate/templates/app/fixtures/.ignore
diff --git a/browserid/static/jquery/generate/templates/app/funcunit.html.ejs b/resources/static/jquery/generate/templates/app/funcunit.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/funcunit.html.ejs
rename to resources/static/jquery/generate/templates/app/funcunit.html.ejs
diff --git a/browserid/static/jquery/generate/templates/app/models/.ignore b/resources/static/jquery/generate/templates/app/models/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/models/.ignore
rename to resources/static/jquery/generate/templates/app/models/.ignore
diff --git a/browserid/static/jquery/generate/templates/app/qunit.html.ejs b/resources/static/jquery/generate/templates/app/qunit.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/qunit.html.ejs
rename to resources/static/jquery/generate/templates/app/qunit.html.ejs
diff --git a/browserid/static/jquery/generate/templates/app/resources/.ignore b/resources/static/jquery/generate/templates/app/resources/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/resources/.ignore
rename to resources/static/jquery/generate/templates/app/resources/.ignore
diff --git a/browserid/static/jquery/generate/templates/app/scripts/build.html.ejs b/resources/static/jquery/generate/templates/app/scripts/build.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/scripts/build.html.ejs
rename to resources/static/jquery/generate/templates/app/scripts/build.html.ejs
diff --git a/browserid/static/jquery/generate/templates/app/scripts/build.js.ejs b/resources/static/jquery/generate/templates/app/scripts/build.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/scripts/build.js.ejs
rename to resources/static/jquery/generate/templates/app/scripts/build.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/scripts/clean.js.ejs b/resources/static/jquery/generate/templates/app/scripts/clean.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/scripts/clean.js.ejs
rename to resources/static/jquery/generate/templates/app/scripts/clean.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/scripts/docs.js.ejs b/resources/static/jquery/generate/templates/app/scripts/docs.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/scripts/docs.js.ejs
rename to resources/static/jquery/generate/templates/app/scripts/docs.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/test/funcunit/(application_name)_test.js.ejs b/resources/static/jquery/generate/templates/app/test/funcunit/(application_name)_test.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/test/funcunit/(application_name)_test.js.ejs
rename to resources/static/jquery/generate/templates/app/test/funcunit/(application_name)_test.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/test/funcunit/funcunit.js.ejs b/resources/static/jquery/generate/templates/app/test/funcunit/funcunit.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/test/funcunit/funcunit.js.ejs
rename to resources/static/jquery/generate/templates/app/test/funcunit/funcunit.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/test/qunit/(application_name)_test.js.ejs b/resources/static/jquery/generate/templates/app/test/qunit/(application_name)_test.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/test/qunit/(application_name)_test.js.ejs
rename to resources/static/jquery/generate/templates/app/test/qunit/(application_name)_test.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/test/qunit/qunit.js.ejs b/resources/static/jquery/generate/templates/app/test/qunit/qunit.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/test/qunit/qunit.js.ejs
rename to resources/static/jquery/generate/templates/app/test/qunit/qunit.js.ejs
diff --git a/browserid/static/jquery/generate/templates/app/views/.ignore b/resources/static/jquery/generate/templates/app/views/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/app/views/.ignore
rename to resources/static/jquery/generate/templates/app/views/.ignore
diff --git a/browserid/static/jquery/generate/templates/controller/(underscore).html.ejs b/resources/static/jquery/generate/templates/controller/(underscore).html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/controller/(underscore).html.ejs
rename to resources/static/jquery/generate/templates/controller/(underscore).html.ejs
diff --git a/browserid/static/jquery/generate/templates/controller/(underscore).js.ejs b/resources/static/jquery/generate/templates/controller/(underscore).js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/controller/(underscore).js.ejs
rename to resources/static/jquery/generate/templates/controller/(underscore).js.ejs
diff --git a/browserid/static/jquery/generate/templates/controller/(underscore)_test.js.ejs b/resources/static/jquery/generate/templates/controller/(underscore)_test.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/controller/(underscore)_test.js.ejs
rename to resources/static/jquery/generate/templates/controller/(underscore)_test.js.ejs
diff --git a/browserid/static/jquery/generate/templates/controller/funcunit.html.ejs b/resources/static/jquery/generate/templates/controller/funcunit.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/controller/funcunit.html.ejs
rename to resources/static/jquery/generate/templates/controller/funcunit.html.ejs
diff --git a/browserid/static/jquery/generate/templates/controller/views/.ignore b/resources/static/jquery/generate/templates/controller/views/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/controller/views/.ignore
rename to resources/static/jquery/generate/templates/controller/views/.ignore
diff --git a/browserid/static/jquery/generate/templates/model/fixtures.link b/resources/static/jquery/generate/templates/model/fixtures.link
similarity index 100%
rename from browserid/static/jquery/generate/templates/model/fixtures.link
rename to resources/static/jquery/generate/templates/model/fixtures.link
diff --git a/browserid/static/jquery/generate/templates/model/models.link b/resources/static/jquery/generate/templates/model/models.link
similarity index 100%
rename from browserid/static/jquery/generate/templates/model/models.link
rename to resources/static/jquery/generate/templates/model/models.link
diff --git a/browserid/static/jquery/generate/templates/model/test/qunit.link b/resources/static/jquery/generate/templates/model/test/qunit.link
similarity index 100%
rename from browserid/static/jquery/generate/templates/model/test/qunit.link
rename to resources/static/jquery/generate/templates/model/test/qunit.link
diff --git a/browserid/static/jquery/generate/templates/page.ejs b/resources/static/jquery/generate/templates/page.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/page.ejs
rename to resources/static/jquery/generate/templates/page.ejs
diff --git a/browserid/static/jquery/generate/templates/plugin/(application_name).html.ejs b/resources/static/jquery/generate/templates/plugin/(application_name).html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/(application_name).html.ejs
rename to resources/static/jquery/generate/templates/plugin/(application_name).html.ejs
diff --git a/browserid/static/jquery/generate/templates/plugin/(application_name).js.ejs b/resources/static/jquery/generate/templates/plugin/(application_name).js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/(application_name).js.ejs
rename to resources/static/jquery/generate/templates/plugin/(application_name).js.ejs
diff --git a/browserid/static/jquery/generate/templates/plugin/docs/.gitignore b/resources/static/jquery/generate/templates/plugin/docs/.gitignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/docs/.gitignore
rename to resources/static/jquery/generate/templates/plugin/docs/.gitignore
diff --git a/browserid/static/jquery/generate/templates/plugin/fixtures/.ignore b/resources/static/jquery/generate/templates/plugin/fixtures/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/fixtures/.ignore
rename to resources/static/jquery/generate/templates/plugin/fixtures/.ignore
diff --git a/browserid/static/jquery/generate/templates/plugin/funcunit.html.ejs b/resources/static/jquery/generate/templates/plugin/funcunit.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/funcunit.html.ejs
rename to resources/static/jquery/generate/templates/plugin/funcunit.html.ejs
diff --git a/browserid/static/jquery/generate/templates/plugin/qunit.html.ejs b/resources/static/jquery/generate/templates/plugin/qunit.html.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/qunit.html.ejs
rename to resources/static/jquery/generate/templates/plugin/qunit.html.ejs
diff --git a/browserid/static/jquery/generate/templates/plugin/resources/.ignore b/resources/static/jquery/generate/templates/plugin/resources/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/resources/.ignore
rename to resources/static/jquery/generate/templates/plugin/resources/.ignore
diff --git a/browserid/static/jquery/generate/templates/plugin/scripts.link b/resources/static/jquery/generate/templates/plugin/scripts.link
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/scripts.link
rename to resources/static/jquery/generate/templates/plugin/scripts.link
diff --git a/browserid/static/jquery/generate/templates/plugin/test.link b/resources/static/jquery/generate/templates/plugin/test.link
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/test.link
rename to resources/static/jquery/generate/templates/plugin/test.link
diff --git a/browserid/static/jquery/generate/templates/plugin/views/.ignore b/resources/static/jquery/generate/templates/plugin/views/.ignore
similarity index 100%
rename from browserid/static/jquery/generate/templates/plugin/views/.ignore
rename to resources/static/jquery/generate/templates/plugin/views/.ignore
diff --git a/browserid/static/jquery/generate/templates/scaffold/controllers/(underscore)_controller.js.ejs b/resources/static/jquery/generate/templates/scaffold/controllers/(underscore)_controller.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/controllers/(underscore)_controller.js.ejs
rename to resources/static/jquery/generate/templates/scaffold/controllers/(underscore)_controller.js.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/fixtures/(plural).json.get.ejs b/resources/static/jquery/generate/templates/scaffold/fixtures/(plural).json.get.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/fixtures/(plural).json.get.ejs
rename to resources/static/jquery/generate/templates/scaffold/fixtures/(plural).json.get.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/models/(underscore).js.ejs b/resources/static/jquery/generate/templates/scaffold/models/(underscore).js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/models/(underscore).js.ejs
rename to resources/static/jquery/generate/templates/scaffold/models/(underscore).js.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/test/funcunit/(underscore)_controller_test.js.ejs b/resources/static/jquery/generate/templates/scaffold/test/funcunit/(underscore)_controller_test.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/test/funcunit/(underscore)_controller_test.js.ejs
rename to resources/static/jquery/generate/templates/scaffold/test/funcunit/(underscore)_controller_test.js.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/test/qunit/(underscore)_test.js.ejs b/resources/static/jquery/generate/templates/scaffold/test/qunit/(underscore)_test.js.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/test/qunit/(underscore)_test.js.ejs
rename to resources/static/jquery/generate/templates/scaffold/test/qunit/(underscore)_test.js.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/views/(underscore)/edit.ejs.ejs b/resources/static/jquery/generate/templates/scaffold/views/(underscore)/edit.ejs.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/views/(underscore)/edit.ejs.ejs
rename to resources/static/jquery/generate/templates/scaffold/views/(underscore)/edit.ejs.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/views/(underscore)/init.ejs.ejs b/resources/static/jquery/generate/templates/scaffold/views/(underscore)/init.ejs.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/views/(underscore)/init.ejs.ejs
rename to resources/static/jquery/generate/templates/scaffold/views/(underscore)/init.ejs.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/views/(underscore)/list.ejs.ejs b/resources/static/jquery/generate/templates/scaffold/views/(underscore)/list.ejs.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/views/(underscore)/list.ejs.ejs
rename to resources/static/jquery/generate/templates/scaffold/views/(underscore)/list.ejs.ejs
diff --git a/browserid/static/jquery/generate/templates/scaffold/views/(underscore)/show.ejs.ejs b/resources/static/jquery/generate/templates/scaffold/views/(underscore)/show.ejs.ejs
similarity index 100%
rename from browserid/static/jquery/generate/templates/scaffold/views/(underscore)/show.ejs.ejs
rename to resources/static/jquery/generate/templates/scaffold/views/(underscore)/show.ejs.ejs
diff --git a/browserid/static/jquery/generate/test/app_plugin_model_controller.js b/resources/static/jquery/generate/test/app_plugin_model_controller.js
similarity index 100%
rename from browserid/static/jquery/generate/test/app_plugin_model_controller.js
rename to resources/static/jquery/generate/test/app_plugin_model_controller.js
diff --git a/browserid/static/jquery/generate/test/run.js b/resources/static/jquery/generate/test/run.js
similarity index 100%
rename from browserid/static/jquery/generate/test/run.js
rename to resources/static/jquery/generate/test/run.js
diff --git a/browserid/static/jquery/generate/test/scaffold.js b/resources/static/jquery/generate/test/scaffold.js
similarity index 100%
rename from browserid/static/jquery/generate/test/scaffold.js
rename to resources/static/jquery/generate/test/scaffold.js
diff --git a/browserid/static/jquery/jquery.js b/resources/static/jquery/jquery.js
similarity index 100%
rename from browserid/static/jquery/jquery.js
rename to resources/static/jquery/jquery.js
diff --git a/browserid/static/jquery/lang/deparam/deparam.js b/resources/static/jquery/lang/deparam/deparam.js
similarity index 100%
rename from browserid/static/jquery/lang/deparam/deparam.js
rename to resources/static/jquery/lang/deparam/deparam.js
diff --git a/browserid/static/jquery/lang/deparam/deparam_test.js b/resources/static/jquery/lang/deparam/deparam_test.js
similarity index 100%
rename from browserid/static/jquery/lang/deparam/deparam_test.js
rename to resources/static/jquery/lang/deparam/deparam_test.js
diff --git a/browserid/static/jquery/lang/deparam/qunit.html b/resources/static/jquery/lang/deparam/qunit.html
similarity index 100%
rename from browserid/static/jquery/lang/deparam/qunit.html
rename to resources/static/jquery/lang/deparam/qunit.html
diff --git a/browserid/static/jquery/lang/json/json.js b/resources/static/jquery/lang/json/json.js
similarity index 100%
rename from browserid/static/jquery/lang/json/json.js
rename to resources/static/jquery/lang/json/json.js
diff --git a/browserid/static/jquery/lang/lang.html b/resources/static/jquery/lang/lang.html
similarity index 100%
rename from browserid/static/jquery/lang/lang.html
rename to resources/static/jquery/lang/lang.html
diff --git a/browserid/static/jquery/lang/lang.js b/resources/static/jquery/lang/lang.js
similarity index 100%
rename from browserid/static/jquery/lang/lang.js
rename to resources/static/jquery/lang/lang.js
diff --git a/browserid/static/jquery/lang/lang_test.js b/resources/static/jquery/lang/lang_test.js
similarity index 100%
rename from browserid/static/jquery/lang/lang_test.js
rename to resources/static/jquery/lang/lang_test.js
diff --git a/browserid/static/jquery/lang/openajax/openajax.html b/resources/static/jquery/lang/openajax/openajax.html
similarity index 100%
rename from browserid/static/jquery/lang/openajax/openajax.html
rename to resources/static/jquery/lang/openajax/openajax.html
diff --git a/browserid/static/jquery/lang/openajax/openajax.js b/resources/static/jquery/lang/openajax/openajax.js
similarity index 100%
rename from browserid/static/jquery/lang/openajax/openajax.js
rename to resources/static/jquery/lang/openajax/openajax.js
diff --git a/browserid/static/jquery/lang/qunit.html b/resources/static/jquery/lang/qunit.html
similarity index 100%
rename from browserid/static/jquery/lang/qunit.html
rename to resources/static/jquery/lang/qunit.html
diff --git a/browserid/static/jquery/lang/rsplit/rsplit.js b/resources/static/jquery/lang/rsplit/rsplit.js
similarity index 100%
rename from browserid/static/jquery/lang/rsplit/rsplit.js
rename to resources/static/jquery/lang/rsplit/rsplit.js
diff --git a/browserid/static/jquery/lang/vector/vector.js b/resources/static/jquery/lang/vector/vector.js
similarity index 100%
rename from browserid/static/jquery/lang/vector/vector.js
rename to resources/static/jquery/lang/vector/vector.js
diff --git a/browserid/static/jquery/model/associations/associations.html b/resources/static/jquery/model/associations/associations.html
similarity index 100%
rename from browserid/static/jquery/model/associations/associations.html
rename to resources/static/jquery/model/associations/associations.html
diff --git a/browserid/static/jquery/model/associations/associations.js b/resources/static/jquery/model/associations/associations.js
similarity index 100%
rename from browserid/static/jquery/model/associations/associations.js
rename to resources/static/jquery/model/associations/associations.js
diff --git a/browserid/static/jquery/model/associations/qunit.html b/resources/static/jquery/model/associations/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/associations/qunit.html
rename to resources/static/jquery/model/associations/qunit.html
diff --git a/browserid/static/jquery/model/associations/test/qunit/associations_test.js b/resources/static/jquery/model/associations/test/qunit/associations_test.js
similarity index 100%
rename from browserid/static/jquery/model/associations/test/qunit/associations_test.js
rename to resources/static/jquery/model/associations/test/qunit/associations_test.js
diff --git a/browserid/static/jquery/model/associations/test/qunit/qunit.js b/resources/static/jquery/model/associations/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/model/associations/test/qunit/qunit.js
rename to resources/static/jquery/model/associations/test/qunit/qunit.js
diff --git a/browserid/static/jquery/model/backup/backup.html b/resources/static/jquery/model/backup/backup.html
similarity index 100%
rename from browserid/static/jquery/model/backup/backup.html
rename to resources/static/jquery/model/backup/backup.html
diff --git a/browserid/static/jquery/model/backup/backup.js b/resources/static/jquery/model/backup/backup.js
similarity index 100%
rename from browserid/static/jquery/model/backup/backup.js
rename to resources/static/jquery/model/backup/backup.js
diff --git a/browserid/static/jquery/model/backup/qunit.html b/resources/static/jquery/model/backup/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/backup/qunit.html
rename to resources/static/jquery/model/backup/qunit.html
diff --git a/browserid/static/jquery/model/backup/qunit/qunit.js b/resources/static/jquery/model/backup/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/model/backup/qunit/qunit.js
rename to resources/static/jquery/model/backup/qunit/qunit.js
diff --git a/browserid/static/jquery/model/demo-convert.html b/resources/static/jquery/model/demo-convert.html
similarity index 100%
rename from browserid/static/jquery/model/demo-convert.html
rename to resources/static/jquery/model/demo-convert.html
diff --git a/browserid/static/jquery/model/demo-dom.html b/resources/static/jquery/model/demo-dom.html
similarity index 100%
rename from browserid/static/jquery/model/demo-dom.html
rename to resources/static/jquery/model/demo-dom.html
diff --git a/browserid/static/jquery/model/demo-encapsulate.html b/resources/static/jquery/model/demo-encapsulate.html
similarity index 100%
rename from browserid/static/jquery/model/demo-encapsulate.html
rename to resources/static/jquery/model/demo-encapsulate.html
diff --git a/browserid/static/jquery/model/demo-events.html b/resources/static/jquery/model/demo-events.html
similarity index 100%
rename from browserid/static/jquery/model/demo-events.html
rename to resources/static/jquery/model/demo-events.html
diff --git a/browserid/static/jquery/model/demo-setter.html b/resources/static/jquery/model/demo-setter.html
similarity index 100%
rename from browserid/static/jquery/model/demo-setter.html
rename to resources/static/jquery/model/demo-setter.html
diff --git a/browserid/static/jquery/model/fixtures/school.json b/resources/static/jquery/model/fixtures/school.json
similarity index 100%
rename from browserid/static/jquery/model/fixtures/school.json
rename to resources/static/jquery/model/fixtures/school.json
diff --git a/browserid/static/jquery/model/fixtures/schools.json b/resources/static/jquery/model/fixtures/schools.json
similarity index 100%
rename from browserid/static/jquery/model/fixtures/schools.json
rename to resources/static/jquery/model/fixtures/schools.json
diff --git a/browserid/static/jquery/model/guesstype/guesstype.js b/resources/static/jquery/model/guesstype/guesstype.js
similarity index 100%
rename from browserid/static/jquery/model/guesstype/guesstype.js
rename to resources/static/jquery/model/guesstype/guesstype.js
diff --git a/browserid/static/jquery/model/guesstype/guesstype_test.js b/resources/static/jquery/model/guesstype/guesstype_test.js
similarity index 100%
rename from browserid/static/jquery/model/guesstype/guesstype_test.js
rename to resources/static/jquery/model/guesstype/guesstype_test.js
diff --git a/browserid/static/jquery/model/list/cookie/cookie.html b/resources/static/jquery/model/list/cookie/cookie.html
similarity index 100%
rename from browserid/static/jquery/model/list/cookie/cookie.html
rename to resources/static/jquery/model/list/cookie/cookie.html
diff --git a/browserid/static/jquery/model/list/cookie/cookie.js b/resources/static/jquery/model/list/cookie/cookie.js
similarity index 100%
rename from browserid/static/jquery/model/list/cookie/cookie.js
rename to resources/static/jquery/model/list/cookie/cookie.js
diff --git a/browserid/static/jquery/model/list/cookie/qunit.html b/resources/static/jquery/model/list/cookie/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/list/cookie/qunit.html
rename to resources/static/jquery/model/list/cookie/qunit.html
diff --git a/browserid/static/jquery/model/list/cookie/qunit/qunit.js b/resources/static/jquery/model/list/cookie/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/model/list/cookie/qunit/qunit.js
rename to resources/static/jquery/model/list/cookie/qunit/qunit.js
diff --git a/browserid/static/jquery/model/list/list-insert.html b/resources/static/jquery/model/list/list-insert.html
similarity index 100%
rename from browserid/static/jquery/model/list/list-insert.html
rename to resources/static/jquery/model/list/list-insert.html
diff --git a/browserid/static/jquery/model/list/list.html b/resources/static/jquery/model/list/list.html
similarity index 100%
rename from browserid/static/jquery/model/list/list.html
rename to resources/static/jquery/model/list/list.html
diff --git a/browserid/static/jquery/model/list/list.js b/resources/static/jquery/model/list/list.js
similarity index 100%
rename from browserid/static/jquery/model/list/list.js
rename to resources/static/jquery/model/list/list.js
diff --git a/browserid/static/jquery/model/list/local/local.js b/resources/static/jquery/model/list/local/local.js
similarity index 100%
rename from browserid/static/jquery/model/list/local/local.js
rename to resources/static/jquery/model/list/local/local.js
diff --git a/browserid/static/jquery/model/list/memory.html b/resources/static/jquery/model/list/memory.html
similarity index 100%
rename from browserid/static/jquery/model/list/memory.html
rename to resources/static/jquery/model/list/memory.html
diff --git a/browserid/static/jquery/model/list/qunit.html b/resources/static/jquery/model/list/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/list/qunit.html
rename to resources/static/jquery/model/list/qunit.html
diff --git a/browserid/static/jquery/model/list/test/qunit/list_test.js b/resources/static/jquery/model/list/test/qunit/list_test.js
similarity index 100%
rename from browserid/static/jquery/model/list/test/qunit/list_test.js
rename to resources/static/jquery/model/list/test/qunit/list_test.js
diff --git a/browserid/static/jquery/model/list/test/qunit/qunit.js b/resources/static/jquery/model/list/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/model/list/test/qunit/qunit.js
rename to resources/static/jquery/model/list/test/qunit/qunit.js
diff --git a/browserid/static/jquery/model/model.js b/resources/static/jquery/model/model.js
similarity index 100%
rename from browserid/static/jquery/model/model.js
rename to resources/static/jquery/model/model.js
diff --git a/browserid/static/jquery/model/modelBinder.html b/resources/static/jquery/model/modelBinder.html
similarity index 100%
rename from browserid/static/jquery/model/modelBinder.html
rename to resources/static/jquery/model/modelBinder.html
diff --git a/browserid/static/jquery/model/pages/deferreds.js b/resources/static/jquery/model/pages/deferreds.js
similarity index 100%
rename from browserid/static/jquery/model/pages/deferreds.js
rename to resources/static/jquery/model/pages/deferreds.js
diff --git a/browserid/static/jquery/model/pages/encapsulate.js b/resources/static/jquery/model/pages/encapsulate.js
similarity index 100%
rename from browserid/static/jquery/model/pages/encapsulate.js
rename to resources/static/jquery/model/pages/encapsulate.js
diff --git a/browserid/static/jquery/model/pages/events.js b/resources/static/jquery/model/pages/events.js
similarity index 100%
rename from browserid/static/jquery/model/pages/events.js
rename to resources/static/jquery/model/pages/events.js
diff --git a/browserid/static/jquery/model/pages/typeconversion.js b/resources/static/jquery/model/pages/typeconversion.js
similarity index 100%
rename from browserid/static/jquery/model/pages/typeconversion.js
rename to resources/static/jquery/model/pages/typeconversion.js
diff --git a/browserid/static/jquery/model/qunit.html b/resources/static/jquery/model/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/qunit.html
rename to resources/static/jquery/model/qunit.html
diff --git a/browserid/static/jquery/model/service/json_rest/json_rest.js b/resources/static/jquery/model/service/json_rest/json_rest.js
similarity index 100%
rename from browserid/static/jquery/model/service/json_rest/json_rest.js
rename to resources/static/jquery/model/service/json_rest/json_rest.js
diff --git a/browserid/static/jquery/model/service/service.js b/resources/static/jquery/model/service/service.js
similarity index 100%
rename from browserid/static/jquery/model/service/service.js
rename to resources/static/jquery/model/service/service.js
diff --git a/browserid/static/jquery/model/service/twitter/twitter.html b/resources/static/jquery/model/service/twitter/twitter.html
similarity index 100%
rename from browserid/static/jquery/model/service/twitter/twitter.html
rename to resources/static/jquery/model/service/twitter/twitter.html
diff --git a/browserid/static/jquery/model/service/twitter/twitter.js b/resources/static/jquery/model/service/twitter/twitter.js
similarity index 100%
rename from browserid/static/jquery/model/service/twitter/twitter.js
rename to resources/static/jquery/model/service/twitter/twitter.js
diff --git a/browserid/static/jquery/model/service/yql/yql.html b/resources/static/jquery/model/service/yql/yql.html
similarity index 100%
rename from browserid/static/jquery/model/service/yql/yql.html
rename to resources/static/jquery/model/service/yql/yql.html
diff --git a/browserid/static/jquery/model/service/yql/yql.js b/resources/static/jquery/model/service/yql/yql.js
similarity index 100%
rename from browserid/static/jquery/model/service/yql/yql.js
rename to resources/static/jquery/model/service/yql/yql.js
diff --git a/browserid/static/jquery/model/test/4.json b/resources/static/jquery/model/test/4.json
similarity index 100%
rename from browserid/static/jquery/model/test/4.json
rename to resources/static/jquery/model/test/4.json
diff --git a/browserid/static/jquery/model/test/create.json b/resources/static/jquery/model/test/create.json
similarity index 100%
rename from browserid/static/jquery/model/test/create.json
rename to resources/static/jquery/model/test/create.json
diff --git a/browserid/static/jquery/model/test/people.json b/resources/static/jquery/model/test/people.json
similarity index 100%
rename from browserid/static/jquery/model/test/people.json
rename to resources/static/jquery/model/test/people.json
diff --git a/browserid/static/jquery/model/test/person.json b/resources/static/jquery/model/test/person.json
similarity index 100%
rename from browserid/static/jquery/model/test/person.json
rename to resources/static/jquery/model/test/person.json
diff --git a/browserid/static/jquery/model/test/qunit/findAll.json b/resources/static/jquery/model/test/qunit/findAll.json
similarity index 100%
rename from browserid/static/jquery/model/test/qunit/findAll.json
rename to resources/static/jquery/model/test/qunit/findAll.json
diff --git a/browserid/static/jquery/model/test/qunit/model_test.js b/resources/static/jquery/model/test/qunit/model_test.js
similarity index 100%
rename from browserid/static/jquery/model/test/qunit/model_test.js
rename to resources/static/jquery/model/test/qunit/model_test.js
diff --git a/browserid/static/jquery/model/test/qunit/qunit.js b/resources/static/jquery/model/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/model/test/qunit/qunit.js
rename to resources/static/jquery/model/test/qunit/qunit.js
diff --git a/browserid/static/jquery/model/test/schools.json b/resources/static/jquery/model/test/schools.json
similarity index 100%
rename from browserid/static/jquery/model/test/schools.json
rename to resources/static/jquery/model/test/schools.json
diff --git a/browserid/static/jquery/model/test/update4.json b/resources/static/jquery/model/test/update4.json
similarity index 100%
rename from browserid/static/jquery/model/test/update4.json
rename to resources/static/jquery/model/test/update4.json
diff --git a/browserid/static/jquery/model/validations/qunit.html b/resources/static/jquery/model/validations/qunit.html
similarity index 100%
rename from browserid/static/jquery/model/validations/qunit.html
rename to resources/static/jquery/model/validations/qunit.html
diff --git a/browserid/static/jquery/model/validations/qunit/validations_test.js b/resources/static/jquery/model/validations/qunit/validations_test.js
similarity index 100%
rename from browserid/static/jquery/model/validations/qunit/validations_test.js
rename to resources/static/jquery/model/validations/qunit/validations_test.js
diff --git a/browserid/static/jquery/model/validations/validations.html b/resources/static/jquery/model/validations/validations.html
similarity index 100%
rename from browserid/static/jquery/model/validations/validations.html
rename to resources/static/jquery/model/validations/validations.html
diff --git a/browserid/static/jquery/model/validations/validations.js b/resources/static/jquery/model/validations/validations.js
similarity index 100%
rename from browserid/static/jquery/model/validations/validations.js
rename to resources/static/jquery/model/validations/validations.js
diff --git a/browserid/static/jquery/qunit.html b/resources/static/jquery/qunit.html
similarity index 100%
rename from browserid/static/jquery/qunit.html
rename to resources/static/jquery/qunit.html
diff --git a/browserid/static/jquery/test/qunit/integration.js b/resources/static/jquery/test/qunit/integration.js
similarity index 100%
rename from browserid/static/jquery/test/qunit/integration.js
rename to resources/static/jquery/test/qunit/integration.js
diff --git a/browserid/static/jquery/test/qunit/qunit.js b/resources/static/jquery/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/test/qunit/qunit.js
rename to resources/static/jquery/test/qunit/qunit.js
diff --git a/browserid/static/jquery/test/run.js b/resources/static/jquery/test/run.js
similarity index 100%
rename from browserid/static/jquery/test/run.js
rename to resources/static/jquery/test/run.js
diff --git a/browserid/static/jquery/test/template.ejs b/resources/static/jquery/test/template.ejs
similarity index 100%
rename from browserid/static/jquery/test/template.ejs
rename to resources/static/jquery/test/template.ejs
diff --git a/browserid/static/jquery/test/thing.json b/resources/static/jquery/test/thing.json
similarity index 100%
rename from browserid/static/jquery/test/thing.json
rename to resources/static/jquery/test/thing.json
diff --git a/browserid/static/jquery/tie/qunit.html b/resources/static/jquery/tie/qunit.html
similarity index 100%
rename from browserid/static/jquery/tie/qunit.html
rename to resources/static/jquery/tie/qunit.html
diff --git a/browserid/static/jquery/tie/tie.html b/resources/static/jquery/tie/tie.html
similarity index 100%
rename from browserid/static/jquery/tie/tie.html
rename to resources/static/jquery/tie/tie.html
diff --git a/browserid/static/jquery/tie/tie.js b/resources/static/jquery/tie/tie.js
similarity index 100%
rename from browserid/static/jquery/tie/tie.js
rename to resources/static/jquery/tie/tie.js
diff --git a/browserid/static/jquery/tie/tie_test.js b/resources/static/jquery/tie/tie_test.js
similarity index 100%
rename from browserid/static/jquery/tie/tie_test.js
rename to resources/static/jquery/tie/tie_test.js
diff --git a/browserid/static/jquery/update b/resources/static/jquery/update
similarity index 100%
rename from browserid/static/jquery/update
rename to resources/static/jquery/update
diff --git a/browserid/static/jquery/view/compress.js b/resources/static/jquery/view/compress.js
similarity index 100%
rename from browserid/static/jquery/view/compress.js
rename to resources/static/jquery/view/compress.js
diff --git a/browserid/static/jquery/view/ejs/ejs.html b/resources/static/jquery/view/ejs/ejs.html
similarity index 100%
rename from browserid/static/jquery/view/ejs/ejs.html
rename to resources/static/jquery/view/ejs/ejs.html
diff --git a/browserid/static/jquery/view/ejs/ejs.js b/resources/static/jquery/view/ejs/ejs.js
similarity index 100%
rename from browserid/static/jquery/view/ejs/ejs.js
rename to resources/static/jquery/view/ejs/ejs.js
diff --git a/browserid/static/jquery/view/ejs/funcunit.html b/resources/static/jquery/view/ejs/funcunit.html
similarity index 100%
rename from browserid/static/jquery/view/ejs/funcunit.html
rename to resources/static/jquery/view/ejs/funcunit.html
diff --git a/browserid/static/jquery/view/ejs/other.js b/resources/static/jquery/view/ejs/other.js
similarity index 100%
rename from browserid/static/jquery/view/ejs/other.js
rename to resources/static/jquery/view/ejs/other.js
diff --git a/browserid/static/jquery/view/ejs/qunit.html b/resources/static/jquery/view/ejs/qunit.html
similarity index 100%
rename from browserid/static/jquery/view/ejs/qunit.html
rename to resources/static/jquery/view/ejs/qunit.html
diff --git a/browserid/static/jquery/view/ejs/test/qunit/ejs_test.js b/resources/static/jquery/view/ejs/test/qunit/ejs_test.js
similarity index 100%
rename from browserid/static/jquery/view/ejs/test/qunit/ejs_test.js
rename to resources/static/jquery/view/ejs/test/qunit/ejs_test.js
diff --git a/browserid/static/jquery/view/ejs/test/qunit/qunit.js b/resources/static/jquery/view/ejs/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/view/ejs/test/qunit/qunit.js
rename to resources/static/jquery/view/ejs/test/qunit/qunit.js
diff --git a/browserid/static/jquery/view/fulljslint.js b/resources/static/jquery/view/fulljslint.js
similarity index 100%
rename from browserid/static/jquery/view/fulljslint.js
rename to resources/static/jquery/view/fulljslint.js
diff --git a/browserid/static/jquery/view/helpers/helpers.js b/resources/static/jquery/view/helpers/helpers.js
similarity index 100%
rename from browserid/static/jquery/view/helpers/helpers.js
rename to resources/static/jquery/view/helpers/helpers.js
diff --git a/browserid/static/jquery/view/jaml/jaml.js b/resources/static/jquery/view/jaml/jaml.js
similarity index 100%
rename from browserid/static/jquery/view/jaml/jaml.js
rename to resources/static/jquery/view/jaml/jaml.js
diff --git a/browserid/static/jquery/view/micro/micro.js b/resources/static/jquery/view/micro/micro.js
similarity index 100%
rename from browserid/static/jquery/view/micro/micro.js
rename to resources/static/jquery/view/micro/micro.js
diff --git a/browserid/static/jquery/view/qunit.html b/resources/static/jquery/view/qunit.html
similarity index 100%
rename from browserid/static/jquery/view/qunit.html
rename to resources/static/jquery/view/qunit.html
diff --git a/browserid/static/jquery/view/test/compression/compression.html b/resources/static/jquery/view/test/compression/compression.html
similarity index 100%
rename from browserid/static/jquery/view/test/compression/compression.html
rename to resources/static/jquery/view/test/compression/compression.html
diff --git a/browserid/static/jquery/view/test/compression/compression.js b/resources/static/jquery/view/test/compression/compression.js
similarity index 100%
rename from browserid/static/jquery/view/test/compression/compression.js
rename to resources/static/jquery/view/test/compression/compression.js
diff --git a/browserid/static/jquery/view/test/compression/production.js b/resources/static/jquery/view/test/compression/production.js
similarity index 100%
rename from browserid/static/jquery/view/test/compression/production.js
rename to resources/static/jquery/view/test/compression/production.js
diff --git a/browserid/static/jquery/view/test/compression/run.js b/resources/static/jquery/view/test/compression/run.js
similarity index 100%
rename from browserid/static/jquery/view/test/compression/run.js
rename to resources/static/jquery/view/test/compression/run.js
diff --git a/browserid/static/jquery/view/test/compression/views/keep.me b/resources/static/jquery/view/test/compression/views/keep.me
similarity index 100%
rename from browserid/static/jquery/view/test/compression/views/keep.me
rename to resources/static/jquery/view/test/compression/views/keep.me
diff --git a/browserid/static/jquery/view/test/qunit/deferred.ejs b/resources/static/jquery/view/test/qunit/deferred.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/deferred.ejs
rename to resources/static/jquery/view/test/qunit/deferred.ejs
diff --git a/browserid/static/jquery/view/test/qunit/deferreds.ejs b/resources/static/jquery/view/test/qunit/deferreds.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/deferreds.ejs
rename to resources/static/jquery/view/test/qunit/deferreds.ejs
diff --git a/browserid/static/jquery/view/test/qunit/hookup.ejs b/resources/static/jquery/view/test/qunit/hookup.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/hookup.ejs
rename to resources/static/jquery/view/test/qunit/hookup.ejs
diff --git a/browserid/static/jquery/view/test/qunit/large.ejs b/resources/static/jquery/view/test/qunit/large.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/large.ejs
rename to resources/static/jquery/view/test/qunit/large.ejs
diff --git a/browserid/static/jquery/view/test/qunit/nested_plugin.ejs b/resources/static/jquery/view/test/qunit/nested_plugin.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/nested_plugin.ejs
rename to resources/static/jquery/view/test/qunit/nested_plugin.ejs
diff --git a/browserid/static/jquery/view/test/qunit/plugin.ejs b/resources/static/jquery/view/test/qunit/plugin.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/plugin.ejs
rename to resources/static/jquery/view/test/qunit/plugin.ejs
diff --git a/browserid/static/jquery/view/test/qunit/qunit.js b/resources/static/jquery/view/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/qunit.js
rename to resources/static/jquery/view/test/qunit/qunit.js
diff --git a/browserid/static/jquery/view/test/qunit/temp.ejs b/resources/static/jquery/view/test/qunit/temp.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/temp.ejs
rename to resources/static/jquery/view/test/qunit/temp.ejs
diff --git a/browserid/static/jquery/view/test/qunit/template.ejs b/resources/static/jquery/view/test/qunit/template.ejs
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/template.ejs
rename to resources/static/jquery/view/test/qunit/template.ejs
diff --git a/browserid/static/jquery/view/test/qunit/template.jaml b/resources/static/jquery/view/test/qunit/template.jaml
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/template.jaml
rename to resources/static/jquery/view/test/qunit/template.jaml
diff --git a/browserid/static/jquery/view/test/qunit/template.micro b/resources/static/jquery/view/test/qunit/template.micro
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/template.micro
rename to resources/static/jquery/view/test/qunit/template.micro
diff --git a/browserid/static/jquery/view/test/qunit/template.tmpl b/resources/static/jquery/view/test/qunit/template.tmpl
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/template.tmpl
rename to resources/static/jquery/view/test/qunit/template.tmpl
diff --git a/browserid/static/jquery/view/test/qunit/view_test.js b/resources/static/jquery/view/test/qunit/view_test.js
similarity index 100%
rename from browserid/static/jquery/view/test/qunit/view_test.js
rename to resources/static/jquery/view/test/qunit/view_test.js
diff --git a/browserid/static/jquery/view/tmpl/test.tmpl b/resources/static/jquery/view/tmpl/test.tmpl
similarity index 100%
rename from browserid/static/jquery/view/tmpl/test.tmpl
rename to resources/static/jquery/view/tmpl/test.tmpl
diff --git a/browserid/static/jquery/view/tmpl/tmpl.js b/resources/static/jquery/view/tmpl/tmpl.js
similarity index 100%
rename from browserid/static/jquery/view/tmpl/tmpl.js
rename to resources/static/jquery/view/tmpl/tmpl.js
diff --git a/browserid/static/jquery/view/tmpl/tmpl_test.js b/resources/static/jquery/view/tmpl/tmpl_test.js
similarity index 100%
rename from browserid/static/jquery/view/tmpl/tmpl_test.js
rename to resources/static/jquery/view/tmpl/tmpl_test.js
diff --git a/browserid/static/jquery/view/view.html b/resources/static/jquery/view/view.html
similarity index 100%
rename from browserid/static/jquery/view/view.html
rename to resources/static/jquery/view/view.html
diff --git a/browserid/static/jquery/view/view.js b/resources/static/jquery/view/view.js
similarity index 100%
rename from browserid/static/jquery/view/view.js
rename to resources/static/jquery/view/view.js
diff --git a/browserid/static/js.bat b/resources/static/js.bat
similarity index 100%
rename from browserid/static/js.bat
rename to resources/static/js.bat
diff --git a/browserid/static/js/browserid.js b/resources/static/js/browserid.js
similarity index 100%
rename from browserid/static/js/browserid.js
rename to resources/static/js/browserid.js
diff --git a/browserid/static/js/highlight.js b/resources/static/js/highlight.js
similarity index 100%
rename from browserid/static/js/highlight.js
rename to resources/static/js/highlight.js
diff --git a/browserid/static/js/html5shim.js b/resources/static/js/html5shim.js
similarity index 100%
rename from browserid/static/js/html5shim.js
rename to resources/static/js/html5shim.js
diff --git a/browserid/static/js/jquery-1.6.2.min.js b/resources/static/js/jquery-1.6.2.min.js
similarity index 100%
rename from browserid/static/js/jquery-1.6.2.min.js
rename to resources/static/js/jquery-1.6.2.min.js
diff --git a/browserid/static/js/json2.js b/resources/static/js/json2.js
similarity index 100%
rename from browserid/static/js/json2.js
rename to resources/static/js/json2.js
diff --git a/browserid/static/js/pages/add_email_address.js b/resources/static/js/pages/add_email_address.js
similarity index 100%
rename from browserid/static/js/pages/add_email_address.js
rename to resources/static/js/pages/add_email_address.js
diff --git a/browserid/static/js/pages/forgot.js b/resources/static/js/pages/forgot.js
similarity index 100%
rename from browserid/static/js/pages/forgot.js
rename to resources/static/js/pages/forgot.js
diff --git a/browserid/static/js/pages/index.js b/resources/static/js/pages/index.js
similarity index 100%
rename from browserid/static/js/pages/index.js
rename to resources/static/js/pages/index.js
diff --git a/browserid/static/js/pages/manage_account.js b/resources/static/js/pages/manage_account.js
similarity index 100%
rename from browserid/static/js/pages/manage_account.js
rename to resources/static/js/pages/manage_account.js
diff --git a/browserid/static/js/pages/signin.js b/resources/static/js/pages/signin.js
similarity index 100%
rename from browserid/static/js/pages/signin.js
rename to resources/static/js/pages/signin.js
diff --git a/browserid/static/js/pages/signup.js b/resources/static/js/pages/signup.js
similarity index 100%
rename from browserid/static/js/pages/signup.js
rename to resources/static/js/pages/signup.js
diff --git a/browserid/static/js/pages/verify_email_address.js b/resources/static/js/pages/verify_email_address.js
similarity index 100%
rename from browserid/static/js/pages/verify_email_address.js
rename to resources/static/js/pages/verify_email_address.js
diff --git a/browserid/static/relay/relay.js b/resources/static/relay/relay.js
similarity index 100%
rename from browserid/static/relay/relay.js
rename to resources/static/relay/relay.js
diff --git a/browserid/static/steal/.gitignore b/resources/static/steal/.gitignore
similarity index 100%
rename from browserid/static/steal/.gitignore
rename to resources/static/steal/.gitignore
diff --git a/browserid/static/steal/README b/resources/static/steal/README
similarity index 100%
rename from browserid/static/steal/README
rename to resources/static/steal/README
diff --git a/browserid/static/steal/build/apps/apps.js b/resources/static/steal/build/apps/apps.js
similarity index 100%
rename from browserid/static/steal/build/apps/apps.js
rename to resources/static/steal/build/apps/apps.js
diff --git a/browserid/static/steal/build/apps/test.js b/resources/static/steal/build/apps/test.js
similarity index 100%
rename from browserid/static/steal/build/apps/test.js
rename to resources/static/steal/build/apps/test.js
diff --git a/browserid/static/steal/build/build.js b/resources/static/steal/build/build.js
similarity index 100%
rename from browserid/static/steal/build/build.js
rename to resources/static/steal/build/build.js
diff --git a/browserid/static/steal/build/pluginify/parse.js b/resources/static/steal/build/pluginify/parse.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/parse.js
rename to resources/static/steal/build/pluginify/parse.js
diff --git a/browserid/static/steal/build/pluginify/pluginify.js b/resources/static/steal/build/pluginify/pluginify.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/pluginify.js
rename to resources/static/steal/build/pluginify/pluginify.js
diff --git a/browserid/static/steal/build/pluginify/test/firstFunc.js b/resources/static/steal/build/pluginify/test/firstFunc.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/test/firstFunc.js
rename to resources/static/steal/build/pluginify/test/firstFunc.js
diff --git a/browserid/static/steal/build/pluginify/test/pluginify_test.js b/resources/static/steal/build/pluginify/test/pluginify_test.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/test/pluginify_test.js
rename to resources/static/steal/build/pluginify/test/pluginify_test.js
diff --git a/browserid/static/steal/build/pluginify/test/secondFunc.js b/resources/static/steal/build/pluginify/test/secondFunc.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/test/secondFunc.js
rename to resources/static/steal/build/pluginify/test/secondFunc.js
diff --git a/browserid/static/steal/build/pluginify/test/test_steals.js b/resources/static/steal/build/pluginify/test/test_steals.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/test/test_steals.js
rename to resources/static/steal/build/pluginify/test/test_steals.js
diff --git a/browserid/static/steal/build/pluginify/test/weirdRegexps.js b/resources/static/steal/build/pluginify/test/weirdRegexps.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/test/weirdRegexps.js
rename to resources/static/steal/build/pluginify/test/weirdRegexps.js
diff --git a/browserid/static/steal/build/pluginify/tokens.js b/resources/static/steal/build/pluginify/tokens.js
similarity index 100%
rename from browserid/static/steal/build/pluginify/tokens.js
rename to resources/static/steal/build/pluginify/tokens.js
diff --git a/browserid/static/steal/build/scripts/compiler.jar b/resources/static/steal/build/scripts/compiler.jar
similarity index 100%
rename from browserid/static/steal/build/scripts/compiler.jar
rename to resources/static/steal/build/scripts/compiler.jar
diff --git a/browserid/static/steal/build/scripts/scripts.js b/resources/static/steal/build/scripts/scripts.js
similarity index 100%
rename from browserid/static/steal/build/scripts/scripts.js
rename to resources/static/steal/build/scripts/scripts.js
diff --git a/browserid/static/steal/build/scripts/yui.jar b/resources/static/steal/build/scripts/yui.jar
similarity index 100%
rename from browserid/static/steal/build/scripts/yui.jar
rename to resources/static/steal/build/scripts/yui.jar
diff --git a/browserid/static/steal/build/styles/cssmin.js b/resources/static/steal/build/styles/cssmin.js
similarity index 100%
rename from browserid/static/steal/build/styles/cssmin.js
rename to resources/static/steal/build/styles/cssmin.js
diff --git a/browserid/static/steal/build/styles/styles.js b/resources/static/steal/build/styles/styles.js
similarity index 100%
rename from browserid/static/steal/build/styles/styles.js
rename to resources/static/steal/build/styles/styles.js
diff --git a/browserid/static/steal/build/styles/test/app/app.css b/resources/static/steal/build/styles/test/app/app.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/app/app.css
rename to resources/static/steal/build/styles/test/app/app.css
diff --git a/browserid/static/steal/build/styles/test/app/app.html b/resources/static/steal/build/styles/test/app/app.html
similarity index 100%
rename from browserid/static/steal/build/styles/test/app/app.html
rename to resources/static/steal/build/styles/test/app/app.html
diff --git a/browserid/static/steal/build/styles/test/app/app.js b/resources/static/steal/build/styles/test/app/app.js
similarity index 100%
rename from browserid/static/steal/build/styles/test/app/app.js
rename to resources/static/steal/build/styles/test/app/app.js
diff --git a/browserid/static/steal/build/styles/test/app/production.css b/resources/static/steal/build/styles/test/app/production.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/app/production.css
rename to resources/static/steal/build/styles/test/app/production.css
diff --git a/browserid/static/steal/build/styles/test/css/css1.css b/resources/static/steal/build/styles/test/css/css1.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/css/css1.css
rename to resources/static/steal/build/styles/test/css/css1.css
diff --git a/browserid/static/steal/build/styles/test/css/justin.png b/resources/static/steal/build/styles/test/css/justin.png
similarity index 100%
rename from browserid/static/steal/build/styles/test/css/justin.png
rename to resources/static/steal/build/styles/test/css/justin.png
diff --git a/browserid/static/steal/build/styles/test/css2.css b/resources/static/steal/build/styles/test/css2.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/css2.css
rename to resources/static/steal/build/styles/test/css2.css
diff --git a/browserid/static/steal/build/styles/test/multiline.css b/resources/static/steal/build/styles/test/multiline.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/multiline.css
rename to resources/static/steal/build/styles/test/multiline.css
diff --git a/browserid/static/steal/build/styles/test/page.html b/resources/static/steal/build/styles/test/page.html
similarity index 100%
rename from browserid/static/steal/build/styles/test/page.html
rename to resources/static/steal/build/styles/test/page.html
diff --git a/browserid/static/steal/build/styles/test/production.css b/resources/static/steal/build/styles/test/production.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/production.css
rename to resources/static/steal/build/styles/test/production.css
diff --git a/browserid/static/steal/build/styles/test/productionCompare.css b/resources/static/steal/build/styles/test/productionCompare.css
similarity index 100%
rename from browserid/static/steal/build/styles/test/productionCompare.css
rename to resources/static/steal/build/styles/test/productionCompare.css
diff --git a/browserid/static/steal/build/styles/test/styles_test.js b/resources/static/steal/build/styles/test/styles_test.js
similarity index 100%
rename from browserid/static/steal/build/styles/test/styles_test.js
rename to resources/static/steal/build/styles/test/styles_test.js
diff --git a/browserid/static/steal/build/styles/test/upload.PNG b/resources/static/steal/build/styles/test/upload.PNG
similarity index 100%
rename from browserid/static/steal/build/styles/test/upload.PNG
rename to resources/static/steal/build/styles/test/upload.PNG
diff --git a/browserid/static/steal/build/test/basicpage.html b/resources/static/steal/build/test/basicpage.html
similarity index 100%
rename from browserid/static/steal/build/test/basicpage.html
rename to resources/static/steal/build/test/basicpage.html
diff --git a/browserid/static/steal/build/test/basicsource.js b/resources/static/steal/build/test/basicsource.js
similarity index 100%
rename from browserid/static/steal/build/test/basicsource.js
rename to resources/static/steal/build/test/basicsource.js
diff --git a/browserid/static/steal/build/test/foreign.html b/resources/static/steal/build/test/foreign.html
similarity index 100%
rename from browserid/static/steal/build/test/foreign.html
rename to resources/static/steal/build/test/foreign.html
diff --git a/browserid/static/steal/build/test/foreign.js b/resources/static/steal/build/test/foreign.js
similarity index 100%
rename from browserid/static/steal/build/test/foreign.js
rename to resources/static/steal/build/test/foreign.js
diff --git a/browserid/static/steal/build/test/https.html b/resources/static/steal/build/test/https.html
similarity index 100%
rename from browserid/static/steal/build/test/https.html
rename to resources/static/steal/build/test/https.html
diff --git a/browserid/static/steal/build/test/https.js b/resources/static/steal/build/test/https.js
similarity index 100%
rename from browserid/static/steal/build/test/https.js
rename to resources/static/steal/build/test/https.js
diff --git a/browserid/static/steal/build/test/removecode.js b/resources/static/steal/build/test/removecode.js
similarity index 100%
rename from browserid/static/steal/build/test/removecode.js
rename to resources/static/steal/build/test/removecode.js
diff --git a/browserid/static/steal/build/test/run.js b/resources/static/steal/build/test/run.js
similarity index 100%
rename from browserid/static/steal/build/test/run.js
rename to resources/static/steal/build/test/run.js
diff --git a/browserid/static/steal/build/test/stealpage.html b/resources/static/steal/build/test/stealpage.html
similarity index 100%
rename from browserid/static/steal/build/test/stealpage.html
rename to resources/static/steal/build/test/stealpage.html
diff --git a/browserid/static/steal/build/test/stealprodpage.html b/resources/static/steal/build/test/stealprodpage.html
similarity index 100%
rename from browserid/static/steal/build/test/stealprodpage.html
rename to resources/static/steal/build/test/stealprodpage.html
diff --git a/browserid/static/steal/build/test/test.js b/resources/static/steal/build/test/test.js
similarity index 100%
rename from browserid/static/steal/build/test/test.js
rename to resources/static/steal/build/test/test.js
diff --git a/browserid/static/steal/buildjs b/resources/static/steal/buildjs
similarity index 100%
rename from browserid/static/steal/buildjs
rename to resources/static/steal/buildjs
diff --git a/browserid/static/steal/clean/beautify.js b/resources/static/steal/clean/beautify.js
similarity index 100%
rename from browserid/static/steal/clean/beautify.js
rename to resources/static/steal/clean/beautify.js
diff --git a/browserid/static/steal/clean/clean.js b/resources/static/steal/clean/clean.js
similarity index 100%
rename from browserid/static/steal/clean/clean.js
rename to resources/static/steal/clean/clean.js
diff --git a/browserid/static/steal/clean/jslint.js b/resources/static/steal/clean/jslint.js
similarity index 100%
rename from browserid/static/steal/clean/jslint.js
rename to resources/static/steal/clean/jslint.js
diff --git a/browserid/static/steal/clean/test/clean_test.js b/resources/static/steal/clean/test/clean_test.js
similarity index 100%
rename from browserid/static/steal/clean/test/clean_test.js
rename to resources/static/steal/clean/test/clean_test.js
diff --git a/browserid/static/steal/clean/test/test.js b/resources/static/steal/clean/test/test.js
similarity index 100%
rename from browserid/static/steal/clean/test/test.js
rename to resources/static/steal/clean/test/test.js
diff --git a/browserid/static/steal/clean/test/testEnd.js b/resources/static/steal/clean/test/testEnd.js
similarity index 100%
rename from browserid/static/steal/clean/test/testEnd.js
rename to resources/static/steal/clean/test/testEnd.js
diff --git a/browserid/static/steal/cleanjs b/resources/static/steal/cleanjs
similarity index 100%
rename from browserid/static/steal/cleanjs
rename to resources/static/steal/cleanjs
diff --git a/browserid/static/steal/coffee/coffee-script.js b/resources/static/steal/coffee/coffee-script.js
similarity index 100%
rename from browserid/static/steal/coffee/coffee-script.js
rename to resources/static/steal/coffee/coffee-script.js
diff --git a/browserid/static/steal/coffee/coffee.js b/resources/static/steal/coffee/coffee.js
similarity index 100%
rename from browserid/static/steal/coffee/coffee.js
rename to resources/static/steal/coffee/coffee.js
diff --git a/browserid/static/steal/dev/dev.js b/resources/static/steal/dev/dev.js
similarity index 100%
rename from browserid/static/steal/dev/dev.js
rename to resources/static/steal/dev/dev.js
diff --git a/browserid/static/steal/end.js b/resources/static/steal/end.js
similarity index 100%
rename from browserid/static/steal/end.js
rename to resources/static/steal/end.js
diff --git a/browserid/static/steal/generate/app b/resources/static/steal/generate/app
similarity index 100%
rename from browserid/static/steal/generate/app
rename to resources/static/steal/generate/app
diff --git a/browserid/static/steal/generate/ejs.js b/resources/static/steal/generate/ejs.js
similarity index 100%
rename from browserid/static/steal/generate/ejs.js
rename to resources/static/steal/generate/ejs.js
diff --git a/browserid/static/steal/generate/generate.js b/resources/static/steal/generate/generate.js
similarity index 100%
rename from browserid/static/steal/generate/generate.js
rename to resources/static/steal/generate/generate.js
diff --git a/browserid/static/steal/generate/inflector.js b/resources/static/steal/generate/inflector.js
similarity index 100%
rename from browserid/static/steal/generate/inflector.js
rename to resources/static/steal/generate/inflector.js
diff --git a/browserid/static/steal/generate/system.js b/resources/static/steal/generate/system.js
similarity index 100%
rename from browserid/static/steal/generate/system.js
rename to resources/static/steal/generate/system.js
diff --git a/browserid/static/steal/generate/templates/app/(application_name).css.ejs b/resources/static/steal/generate/templates/app/(application_name).css.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/(application_name).css.ejs
rename to resources/static/steal/generate/templates/app/(application_name).css.ejs
diff --git a/browserid/static/steal/generate/templates/app/(application_name).html.ejs b/resources/static/steal/generate/templates/app/(application_name).html.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/(application_name).html.ejs
rename to resources/static/steal/generate/templates/app/(application_name).html.ejs
diff --git a/browserid/static/steal/generate/templates/app/(application_name).js.ejs b/resources/static/steal/generate/templates/app/(application_name).js.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/(application_name).js.ejs
rename to resources/static/steal/generate/templates/app/(application_name).js.ejs
diff --git a/browserid/static/steal/generate/templates/app/docs/.ignore b/resources/static/steal/generate/templates/app/docs/.ignore
similarity index 100%
rename from browserid/static/steal/generate/templates/app/docs/.ignore
rename to resources/static/steal/generate/templates/app/docs/.ignore
diff --git a/browserid/static/steal/generate/templates/app/resources/.ignore b/resources/static/steal/generate/templates/app/resources/.ignore
similarity index 100%
rename from browserid/static/steal/generate/templates/app/resources/.ignore
rename to resources/static/steal/generate/templates/app/resources/.ignore
diff --git a/browserid/static/steal/generate/templates/app/resources/example.coffee.ejs b/resources/static/steal/generate/templates/app/resources/example.coffee.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/resources/example.coffee.ejs
rename to resources/static/steal/generate/templates/app/resources/example.coffee.ejs
diff --git a/browserid/static/steal/generate/templates/app/resources/example.js.ejs b/resources/static/steal/generate/templates/app/resources/example.js.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/resources/example.js.ejs
rename to resources/static/steal/generate/templates/app/resources/example.js.ejs
diff --git a/browserid/static/steal/generate/templates/app/resources/example.less.ejs b/resources/static/steal/generate/templates/app/resources/example.less.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/resources/example.less.ejs
rename to resources/static/steal/generate/templates/app/resources/example.less.ejs
diff --git a/browserid/static/steal/generate/templates/app/scripts/build.html.ejs b/resources/static/steal/generate/templates/app/scripts/build.html.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/scripts/build.html.ejs
rename to resources/static/steal/generate/templates/app/scripts/build.html.ejs
diff --git a/browserid/static/steal/generate/templates/app/scripts/build.js.ejs b/resources/static/steal/generate/templates/app/scripts/build.js.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/scripts/build.js.ejs
rename to resources/static/steal/generate/templates/app/scripts/build.js.ejs
diff --git a/browserid/static/steal/generate/templates/app/scripts/clean.js.ejs b/resources/static/steal/generate/templates/app/scripts/clean.js.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/app/scripts/clean.js.ejs
rename to resources/static/steal/generate/templates/app/scripts/clean.js.ejs
diff --git a/browserid/static/steal/generate/templates/app/test/.ignore b/resources/static/steal/generate/templates/app/test/.ignore
similarity index 100%
rename from browserid/static/steal/generate/templates/app/test/.ignore
rename to resources/static/steal/generate/templates/app/test/.ignore
diff --git a/browserid/static/steal/generate/templates/page.ejs b/resources/static/steal/generate/templates/page.ejs
similarity index 100%
rename from browserid/static/steal/generate/templates/page.ejs
rename to resources/static/steal/generate/templates/page.ejs
diff --git a/browserid/static/steal/generate/test/run.js b/resources/static/steal/generate/test/run.js
similarity index 100%
rename from browserid/static/steal/generate/test/run.js
rename to resources/static/steal/generate/test/run.js
diff --git a/browserid/static/steal/get/basic.js b/resources/static/steal/get/basic.js
similarity index 100%
rename from browserid/static/steal/get/basic.js
rename to resources/static/steal/get/basic.js
diff --git a/browserid/static/steal/get/dummysteal.js b/resources/static/steal/get/dummysteal.js
similarity index 100%
rename from browserid/static/steal/get/dummysteal.js
rename to resources/static/steal/get/dummysteal.js
diff --git a/browserid/static/steal/get/get.js b/resources/static/steal/get/get.js
similarity index 100%
rename from browserid/static/steal/get/get.js
rename to resources/static/steal/get/get.js
diff --git a/browserid/static/steal/get/gets.json b/resources/static/steal/get/gets.json
similarity index 100%
rename from browserid/static/steal/get/gets.json
rename to resources/static/steal/get/gets.json
diff --git a/browserid/static/steal/get/getter.js b/resources/static/steal/get/getter.js
similarity index 100%
rename from browserid/static/steal/get/getter.js
rename to resources/static/steal/get/getter.js
diff --git a/browserid/static/steal/get/git.js b/resources/static/steal/get/git.js
similarity index 100%
rename from browserid/static/steal/get/git.js
rename to resources/static/steal/get/git.js
diff --git a/browserid/static/steal/get/github.js b/resources/static/steal/get/github.js
similarity index 100%
rename from browserid/static/steal/get/github.js
rename to resources/static/steal/get/github.js
diff --git a/browserid/static/steal/get/json.js b/resources/static/steal/get/json.js
similarity index 100%
rename from browserid/static/steal/get/json.js
rename to resources/static/steal/get/json.js
diff --git a/browserid/static/steal/get/test/.gitignore b/resources/static/steal/get/test/.gitignore
similarity index 100%
rename from browserid/static/steal/get/test/.gitignore
rename to resources/static/steal/get/test/.gitignore
diff --git a/browserid/static/steal/get/test/.gitmodules b/resources/static/steal/get/test/.gitmodules
similarity index 100%
rename from browserid/static/steal/get/test/.gitmodules
rename to resources/static/steal/get/test/.gitmodules
diff --git a/browserid/static/steal/get/test/README b/resources/static/steal/get/test/README
similarity index 100%
rename from browserid/static/steal/get/test/README
rename to resources/static/steal/get/test/README
diff --git a/browserid/static/steal/get/test/get_test.js b/resources/static/steal/get/test/get_test.js
similarity index 100%
rename from browserid/static/steal/get/test/get_test.js
rename to resources/static/steal/get/test/get_test.js
diff --git a/browserid/static/steal/get/test/stealCode1.js b/resources/static/steal/get/test/stealCode1.js
similarity index 100%
rename from browserid/static/steal/get/test/stealCode1.js
rename to resources/static/steal/get/test/stealCode1.js
diff --git a/browserid/static/steal/getjs b/resources/static/steal/getjs
similarity index 100%
rename from browserid/static/steal/getjs
rename to resources/static/steal/getjs
diff --git a/browserid/static/steal/js b/resources/static/steal/js
similarity index 100%
rename from browserid/static/steal/js
rename to resources/static/steal/js
diff --git a/browserid/static/steal/js.bat b/resources/static/steal/js.bat
similarity index 100%
rename from browserid/static/steal/js.bat
rename to resources/static/steal/js.bat
diff --git a/browserid/static/steal/less/less.js b/resources/static/steal/less/less.js
similarity index 100%
rename from browserid/static/steal/less/less.js
rename to resources/static/steal/less/less.js
diff --git a/browserid/static/steal/less/less.less b/resources/static/steal/less/less.less
similarity index 100%
rename from browserid/static/steal/less/less.less
rename to resources/static/steal/less/less.less
diff --git a/browserid/static/steal/less/less_engine.js b/resources/static/steal/less/less_engine.js
similarity index 100%
rename from browserid/static/steal/less/less_engine.js
rename to resources/static/steal/less/less_engine.js
diff --git a/browserid/static/steal/less/less_test.js b/resources/static/steal/less/less_test.js
similarity index 100%
rename from browserid/static/steal/less/less_test.js
rename to resources/static/steal/less/less_test.js
diff --git a/browserid/static/steal/less/qunit.html b/resources/static/steal/less/qunit.html
similarity index 100%
rename from browserid/static/steal/less/qunit.html
rename to resources/static/steal/less/qunit.html
diff --git a/browserid/static/steal/make.js b/resources/static/steal/make.js
similarity index 100%
rename from browserid/static/steal/make.js
rename to resources/static/steal/make.js
diff --git a/browserid/static/steal/parse/parse.js b/resources/static/steal/parse/parse.js
similarity index 100%
rename from browserid/static/steal/parse/parse.js
rename to resources/static/steal/parse/parse.js
diff --git a/browserid/static/steal/parse/parse_test.js b/resources/static/steal/parse/parse_test.js
similarity index 100%
rename from browserid/static/steal/parse/parse_test.js
rename to resources/static/steal/parse/parse_test.js
diff --git a/browserid/static/steal/parse/test/stealCode1.js b/resources/static/steal/parse/test/stealCode1.js
similarity index 100%
rename from browserid/static/steal/parse/test/stealCode1.js
rename to resources/static/steal/parse/test/stealCode1.js
diff --git a/browserid/static/steal/parse/test/testCode.js b/resources/static/steal/parse/test/testCode.js
similarity index 100%
rename from browserid/static/steal/parse/test/testCode.js
rename to resources/static/steal/parse/test/testCode.js
diff --git a/browserid/static/steal/parse/tokens.js b/resources/static/steal/parse/tokens.js
similarity index 100%
rename from browserid/static/steal/parse/tokens.js
rename to resources/static/steal/parse/tokens.js
diff --git a/browserid/static/steal/patchfile b/resources/static/steal/patchfile
similarity index 100%
rename from browserid/static/steal/patchfile
rename to resources/static/steal/patchfile
diff --git a/browserid/static/steal/pluginifyjs b/resources/static/steal/pluginifyjs
similarity index 100%
rename from browserid/static/steal/pluginifyjs
rename to resources/static/steal/pluginifyjs
diff --git a/browserid/static/steal/rhino/blank.html b/resources/static/steal/rhino/blank.html
similarity index 100%
rename from browserid/static/steal/rhino/blank.html
rename to resources/static/steal/rhino/blank.html
diff --git a/browserid/static/steal/rhino/build.js b/resources/static/steal/rhino/build.js
similarity index 100%
rename from browserid/static/steal/rhino/build.js
rename to resources/static/steal/rhino/build.js
diff --git a/browserid/static/steal/rhino/docs.js b/resources/static/steal/rhino/docs.js
similarity index 100%
rename from browserid/static/steal/rhino/docs.js
rename to resources/static/steal/rhino/docs.js
diff --git a/browserid/static/steal/rhino/empty.html b/resources/static/steal/rhino/empty.html
similarity index 100%
rename from browserid/static/steal/rhino/empty.html
rename to resources/static/steal/rhino/empty.html
diff --git a/browserid/static/steal/rhino/env.js b/resources/static/steal/rhino/env.js
similarity index 100%
rename from browserid/static/steal/rhino/env.js
rename to resources/static/steal/rhino/env.js
diff --git a/browserid/static/steal/rhino/file.js b/resources/static/steal/rhino/file.js
similarity index 100%
rename from browserid/static/steal/rhino/file.js
rename to resources/static/steal/rhino/file.js
diff --git a/browserid/static/steal/rhino/js.jar b/resources/static/steal/rhino/js.jar
similarity index 100%
rename from browserid/static/steal/rhino/js.jar
rename to resources/static/steal/rhino/js.jar
diff --git a/browserid/static/steal/rhino/loader b/resources/static/steal/rhino/loader
similarity index 100%
rename from browserid/static/steal/rhino/loader
rename to resources/static/steal/rhino/loader
diff --git a/browserid/static/steal/rhino/loader.bat b/resources/static/steal/rhino/loader.bat
similarity index 100%
rename from browserid/static/steal/rhino/loader.bat
rename to resources/static/steal/rhino/loader.bat
diff --git a/browserid/static/steal/rhino/loader.js b/resources/static/steal/rhino/loader.js
similarity index 100%
rename from browserid/static/steal/rhino/loader.js
rename to resources/static/steal/rhino/loader.js
diff --git a/browserid/static/steal/rhino/prompt.js b/resources/static/steal/rhino/prompt.js
similarity index 100%
rename from browserid/static/steal/rhino/prompt.js
rename to resources/static/steal/rhino/prompt.js
diff --git a/browserid/static/steal/rhino/steal.js b/resources/static/steal/rhino/steal.js
similarity index 100%
rename from browserid/static/steal/rhino/steal.js
rename to resources/static/steal/rhino/steal.js
diff --git a/browserid/static/steal/rhino/test.js b/resources/static/steal/rhino/test.js
similarity index 100%
rename from browserid/static/steal/rhino/test.js
rename to resources/static/steal/rhino/test.js
diff --git a/browserid/static/steal/rhino/utils.js b/resources/static/steal/rhino/utils.js
similarity index 100%
rename from browserid/static/steal/rhino/utils.js
rename to resources/static/steal/rhino/utils.js
diff --git a/browserid/static/steal/steal.js b/resources/static/steal/steal.js
similarity index 100%
rename from browserid/static/steal/steal.js
rename to resources/static/steal/steal.js
diff --git a/browserid/static/steal/steal.production.js b/resources/static/steal/steal.production.js
similarity index 100%
rename from browserid/static/steal/steal.production.js
rename to resources/static/steal/steal.production.js
diff --git a/browserid/static/steal/test/absoluteurl.html b/resources/static/steal/test/absoluteurl.html
similarity index 100%
rename from browserid/static/steal/test/absoluteurl.html
rename to resources/static/steal/test/absoluteurl.html
diff --git a/browserid/static/steal/test/absoluteurl/absoluteurl.js b/resources/static/steal/test/absoluteurl/absoluteurl.js
similarity index 100%
rename from browserid/static/steal/test/absoluteurl/absoluteurl.js
rename to resources/static/steal/test/absoluteurl/absoluteurl.js
diff --git a/browserid/static/steal/test/absoluteurl/alert.js b/resources/static/steal/test/absoluteurl/alert.js
similarity index 100%
rename from browserid/static/steal/test/absoluteurl/alert.js
rename to resources/static/steal/test/absoluteurl/alert.js
diff --git a/browserid/static/steal/test/another/two.js b/resources/static/steal/test/another/two.js
similarity index 100%
rename from browserid/static/steal/test/another/two.js
rename to resources/static/steal/test/another/two.js
diff --git a/browserid/static/steal/test/envjs/qunit.html b/resources/static/steal/test/envjs/qunit.html
similarity index 100%
rename from browserid/static/steal/test/envjs/qunit.html
rename to resources/static/steal/test/envjs/qunit.html
diff --git a/browserid/static/steal/test/envjs/qunit.js b/resources/static/steal/test/envjs/qunit.js
similarity index 100%
rename from browserid/static/steal/test/envjs/qunit.js
rename to resources/static/steal/test/envjs/qunit.js
diff --git a/browserid/static/steal/test/funcunit.html b/resources/static/steal/test/funcunit.html
similarity index 100%
rename from browserid/static/steal/test/funcunit.html
rename to resources/static/steal/test/funcunit.html
diff --git a/browserid/static/steal/test/funcunit/funcunit.js b/resources/static/steal/test/funcunit/funcunit.js
similarity index 100%
rename from browserid/static/steal/test/funcunit/funcunit.js
rename to resources/static/steal/test/funcunit/funcunit.js
diff --git a/browserid/static/steal/test/funcunit/steal_test.js b/resources/static/steal/test/funcunit/steal_test.js
similarity index 100%
rename from browserid/static/steal/test/funcunit/steal_test.js
rename to resources/static/steal/test/funcunit/steal_test.js
diff --git a/browserid/static/steal/test/one/four.js b/resources/static/steal/test/one/four.js
similarity index 100%
rename from browserid/static/steal/test/one/four.js
rename to resources/static/steal/test/one/four.js
diff --git a/browserid/static/steal/test/one/one.js b/resources/static/steal/test/one/one.js
similarity index 100%
rename from browserid/static/steal/test/one/one.js
rename to resources/static/steal/test/one/one.js
diff --git a/browserid/static/steal/test/qunit.html b/resources/static/steal/test/qunit.html
similarity index 100%
rename from browserid/static/steal/test/qunit.html
rename to resources/static/steal/test/qunit.html
diff --git a/browserid/static/steal/test/qunit/one.css b/resources/static/steal/test/qunit/one.css
similarity index 100%
rename from browserid/static/steal/test/qunit/one.css
rename to resources/static/steal/test/qunit/one.css
diff --git a/browserid/static/steal/test/qunit/qunit.js b/resources/static/steal/test/qunit/qunit.js
similarity index 100%
rename from browserid/static/steal/test/qunit/qunit.js
rename to resources/static/steal/test/qunit/qunit.js
diff --git a/browserid/static/steal/test/qunit/steal_test.js b/resources/static/steal/test/qunit/steal_test.js
similarity index 100%
rename from browserid/static/steal/test/qunit/steal_test.js
rename to resources/static/steal/test/qunit/steal_test.js
diff --git a/browserid/static/steal/test/run.js b/resources/static/steal/test/run.js
similarity index 100%
rename from browserid/static/steal/test/run.js
rename to resources/static/steal/test/run.js
diff --git a/browserid/static/steal/test/steal.html b/resources/static/steal/test/steal.html
similarity index 100%
rename from browserid/static/steal/test/steal.html
rename to resources/static/steal/test/steal.html
diff --git a/browserid/static/steal/test/test.js b/resources/static/steal/test/test.js
similarity index 100%
rename from browserid/static/steal/test/test.js
rename to resources/static/steal/test/test.js
diff --git a/browserid/static/steal/test/three.js b/resources/static/steal/test/three.js
similarity index 100%
rename from browserid/static/steal/test/three.js
rename to resources/static/steal/test/three.js
diff --git a/browserid/static/steal/test/two.css b/resources/static/steal/test/two.css
similarity index 100%
rename from browserid/static/steal/test/two.css
rename to resources/static/steal/test/two.css
diff --git a/browserid/static/steal/update b/resources/static/steal/update
similarity index 100%
rename from browserid/static/steal/update
rename to resources/static/steal/update
diff --git a/browserid/views/about.ejs b/resources/views/about.ejs
similarity index 100%
rename from browserid/views/about.ejs
rename to resources/views/about.ejs
diff --git a/browserid/views/dialog.ejs b/resources/views/dialog.ejs
similarity index 100%
rename from browserid/views/dialog.ejs
rename to resources/views/dialog.ejs
diff --git a/browserid/views/dialog_layout.ejs b/resources/views/dialog_layout.ejs
similarity index 100%
rename from browserid/views/dialog_layout.ejs
rename to resources/views/dialog_layout.ejs
diff --git a/browserid/views/forgot.ejs b/resources/views/forgot.ejs
similarity index 100%
rename from browserid/views/forgot.ejs
rename to resources/views/forgot.ejs
diff --git a/browserid/views/index.ejs b/resources/views/index.ejs
similarity index 100%
rename from browserid/views/index.ejs
rename to resources/views/index.ejs
diff --git a/browserid/views/layout.ejs b/resources/views/layout.ejs
similarity index 100%
rename from browserid/views/layout.ejs
rename to resources/views/layout.ejs
diff --git a/browserid/views/privacy.ejs b/resources/views/privacy.ejs
similarity index 100%
rename from browserid/views/privacy.ejs
rename to resources/views/privacy.ejs
diff --git a/browserid/views/relay.ejs b/resources/views/relay.ejs
similarity index 100%
rename from browserid/views/relay.ejs
rename to resources/views/relay.ejs
diff --git a/browserid/views/signin.ejs b/resources/views/signin.ejs
similarity index 100%
rename from browserid/views/signin.ejs
rename to resources/views/signin.ejs
diff --git a/browserid/views/signup.ejs b/resources/views/signup.ejs
similarity index 100%
rename from browserid/views/signup.ejs
rename to resources/views/signup.ejs
diff --git a/browserid/views/tos.ejs b/resources/views/tos.ejs
similarity index 100%
rename from browserid/views/tos.ejs
rename to resources/views/tos.ejs
diff --git a/browserid/views/unsupported_dialog.ejs b/resources/views/unsupported_dialog.ejs
similarity index 100%
rename from browserid/views/unsupported_dialog.ejs
rename to resources/views/unsupported_dialog.ejs
diff --git a/browserid/views/verifyemail.ejs b/resources/views/verifyemail.ejs
similarity index 100%
rename from browserid/views/verifyemail.ejs
rename to resources/views/verifyemail.ejs
diff --git a/browserid/views/verifyuser.ejs b/resources/views/verifyuser.ejs
similarity index 100%
rename from browserid/views/verifyuser.ejs
rename to resources/views/verifyuser.ejs
diff --git a/rp/index2.html b/rp/index2.html
deleted file mode 100644
index cdc25d3781af1b7fc01affcba7c6b7276833ed2c..0000000000000000000000000000000000000000
--- a/rp/index2.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>
-BrowserID Relying Party
-</title>
-<link href='http://fonts.googleapis.com/css?family=Permanent+Marker' rel='stylesheet' type='text/css'>
-<style type="text/css">
-
-body { margin: auto; font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; }
-a:link, a:visited { font-style: italic; text-decoration: none; color: #008; }
-a:hover { border-bottom: 2px solid black ; }
-.number { font-family: 'Permanent Marker', arial, serif; font-size: 4em; float: left; padding: 0; margin: 0; vertical-align: top; width: 1.3em}
-.title { font-size: 2em; font-weight: bold; text-align: center; margin: 1.5em; }
-.intro { font-size: 1.2em; width: 600px; margin: auto; }
-.step { width: 600px; margin: auto; margin-top: 1em;}
-.desc { padding-top: 1.5em; min-height: 4.5em;}
-.output {
-  font-family: 'lucida console', monaco, 'andale mono', 'bitstream vera sans mono', consolas, monospace;
-  border: 3px solid #666;
-  -moz-border-radius: 4px;
-  -webkit-border-radius: 4px;
-  border-radius: 4px;
-  padding: .5em;
-  margin: .5em;
-  color: #ccc;
-  background-color: #333;
-/*  white-space: pre;*/
-  font-size: .9em;
-  width:600px;
-  word-wrap: break-word;
-}
-
-</style>
-</head>
-<body>
-<div class="title">
-  Example BrowserID Relying Party - Specific Identity
-</div>
-
-<div class="intro">
-  This is the simplest possible (stateless, static, client-only)  BrowserID Relying Party.  It
-  demonstrates the steps required to use BrowserID to verify the identity of a user.<br />
-  <a id="tokenGetter" href="#">Click here to preauth</a>. <span id="token"></span><br />
-  <a id="badpartyStarter" href="#">Click here to kick off the bad party</a>.<br />
-  <a id="partyStarter" href="#">Click here to kick off the party</a>.<br />  Here's what will happen:
-</div>
-
-<div class="step">
-  <div class="number">1.</div>
-  <div class="desc"><b>Browser Interaction:</b> Upon clicking the link above, the webpage will call <tt>navigator.id.getSpecificVerifiedEmail()</tt> to indicate to the browser that it would like an identity for the user</div>
-</div>
-
-<div class="step">
-  <div class="number">2.</div>
-  <div class="desc"><b>User Interaction:</b> The browser will spawn a dialog that the user can interact with the select what identity they want to provide to the site </div>
-</div>
-
-<div class="step">
-  <div class="number">3.</div>
-  <div class="desc"><b>Assertion Generation:</b> Upon selection of an identity, an <i>assertion</i> will be returned to the webpage via a callback, it looks like this: </div>
-  <div class="output" id="oAssertion">...waiting for party commencement...</div>
-</div>
-
-<div class="step">
-  <div class="number">4.</div>
-  <div class="desc"><b>Assertion Verification:</b> This site can then send that assertion up to a <i>verification server</i> which cryptographically checks that the identity embedded in the verification actually belongs to the browser in use by the monkey at the keyboard.  The request looks like </div>
-  <div class="output" id="oVerificationRequest">...waiting for party commencement...</div>
-</div>
-
-<div class="step">
-  <div class="number">5.</div>
-  <div class="desc"><b>Verification Response</b>: The verification server responds to the site to tell it whether or not the verification blob is valid:</div>
-  <div class="output" id="oVerificationResponse">...waiting for party commencement...</div>
-</div>
-
-<div class="step">
-  <div class="number">6.</div>
-  <div class="desc"><b>All Done!</b>  The site can now create an account keyed on the users identity (email address), set cookies, etc!  Signing in again is just re-running these same steps.</div>
-</div>
-
-</body>
-<script src="jquery-min.js"></script>
-<script src="https://browserid.org/include.js"></script>
-<script>
-  function dumpObject(obj) {
-    var htmlRep = "";
-    for (var k in obj) {
-      if (obj.hasOwnProperty(k) && typeof obj[k] === 'string') {
-        htmlRep += "<b>" + k + ":</b> " + obj[k] + "<br/>";
-      } else if (k === 'valid-until') {
-        htmlRep += "<b>" + k + ":</b> " + (new Date(obj[k])).toString() + "<br/>";
-      }
-
-    }
-    return htmlRep;
-  }
-
-  function start_the_party(email, token) {
-      navigator.id.getSpecificVerifiedEmail(email, token, function(assertion) {
-        // Now we'll send this assertion over to the verification server for validation
-        $("#oAssertion").empty().html(dumpObject(assertion));
-
-        var url = "http://browserid.org/verify?assertion=" + window.encodeURIComponent(assertion) +
-                  "&audience=" + window.encodeURIComponent("rp.eyedee.me");
-        $("#oVerificationRequest").empty().text(url);
-
-        $.ajax({
-          url: url,
-          success: function(data, textStatus, jqXHR) {
-            $("#oVerificationResponse").empty().text(JSON.stringify(data, null, 4));
-          },
-          error: function(jqXHR, textStatus, errorThrown) {
-            $("#oVerificationResponse").empty().text(jqXHR.responseText);
-          }
-        })
-      }, function(code, msg) {
-        alert("something very bad happened! ("+code+"): " + msg); 
-      });
-  }
-
-  $(document).ready(function() {
-    var GUID = null;
-    $("#tokenGetter").click(function() {
-      navigator.id.preauthEmail("ben@adida.net", function(guid) {      
-        $('#token').html(guid);
-        GUID=guid;
-      });
-    });
-
-    $("#partyStarter").click(function() {
-      start_the_party('ben@adida.net', GUID);
-    });
-
-    $("#badpartyStarter").click(function() {
-      start_the_party('ben2@adida.net', GUID);
-    });
-  });
-</script>
-
-</html>
diff --git a/run.js b/run.js
deleted file mode 100755
index 0d82815313779d4df0fe965102506067b9801eaa..0000000000000000000000000000000000000000
--- a/run.js
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/usr/bin/env node
-
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-// a little node webserver designed to run the unit tests herein
-
-var      sys = require("sys"),
-        http = require("http"),
-         url = require("url"),
-        path = require("path"),
-          fs = require("fs"),
-     express = require("express"),
-substitution = require('./libs/substitute.js');
-
-// when running under the harness, let's also output log messages to the terminal
-require('./libs/logging.js').enableConsoleLogging();
-
-var configuration = require('./libs/configuration.js');
-
-var PRIMARY_HOST = process.env.IP_ADDRESS || "127.0.0.1";
-
-var boundServers = [ ];
-
-var subs = undefined;
-function substitutionMiddleware(req, resp, next) {
-  if (!subs) {
-    subs = { };
-    for (var i = 0; i < boundServers.length; i++) {
-      var o = boundServers[i]
-      var a = o.server.address();
-      var from = o.name;
-      var to = "http://" + a.address + ":" + a.port;
-      subs[from] = to;
-
-      // now do another replacement to catch bare hostnames sans http(s)
-      // and explicit cases where port is appended
-      var fromWithPort;
-      if (from.substr(0,5) === 'https') {
-        from = from.substr(8);
-        fromWithPort = from + ":443";
-      } else {
-        from = from.substr(7);
-        fromWithPort = from + ":80";
-      }
-      to = to.substr(7);
-
-      if (o.subPath) to += o.subPath;
-
-      subs[fromWithPort] = to;
-      subs[from] = to;
-    }
-  }
-  (substitution.substitute(subs))(req, resp, next);
-}
-
-function createServer(obj) {
-  var app = express.createServer();
-
-  // this file is a *test* harness, to make it go, we'll insert a little
-  // handler that substitutes output, changing production URLs to
-  // developement URLs.
-  app.use(substitutionMiddleware);
-
-  // let the specific server interact directly with the express server to
-  // register their middleware, routes, etc...
-  if (obj.setup) obj.setup(app);
-
-  // now set up the static resource servin'
-  var p = obj.path, ps = path.join(p, "static");
-  try { if (fs.statSync(ps).isDirectory()) p = ps; } catch(e) { }
-  app.use(express.static(p));
-
-  // and listen!
-  app.listen(obj.port, PRIMARY_HOST);
-  return app;
-};
-
-// start up webservers on ephemeral ports for each subdirectory here.
-var dirs = [
-  // the reference verification server.  A version is hosted at
-  // browserid.org and may be used, or the RP may perform their
-  // own verification.
-  {
-    name: "https://browserid.org/verify",
-    subPath: "/",
-    path: path.join(__dirname, "verifier")
-  },
-  // An example relying party.
-  {
-    name: "http://rp.eyedee.me",
-    path: path.join(__dirname, "rp")
-  },
-
-  // BrowserID: the secondary + ip + more.
-  {
-    name: "https://browserid.org",
-    path: path.join(__dirname, "browserid")
-  }
-];
-
-function formatLink(server, extraPath) {
-  var addr = server.address();
-  var url = 'http://' + addr.address + ':' + addr.port;
-  if (extraPath) {
-    url += extraPath;
-  }
-  return url;
-}
-
-console.log("Running test servers:");
-
-var port_num=10000;
-dirs.forEach(function(dirObj) {
-  if (!fs.statSync(dirObj.path).isDirectory()) return;
-  // does this server have a js handler for custom request handling?
-  var handlerPath = path.join(dirObj.path, "app.js");
-  var runJS = {};
-  try {
-    var runJSExists = false;
-    try { runJSExists = fs.statSync(handlerPath).isFile() } catch(e) {};
-    if (runJSExists) runJS = require(handlerPath);
-  } catch(e) {
-    console.log("Error loading " + handlerPath + ": " + e);
-    process.exit(1);
-  }
-
-  var so = {
-    path: dirObj.path,
-    server: undefined,
-    port: port_num++,
-    name: dirObj.name,
-    handler: runJS.handler,
-    setup: runJS.setup,
-    shutdown: runJS.shutdown,
-    subPath: dirObj.subPath
-  };
-  so.server = createServer(so)
-  boundServers.push(so);
-  console.log("  " + dirObj.name + ": " + formatLink(so.server));
-});
-
-process.on('SIGINT', function () {
-  console.log('\nSIGINT recieved! trying to shut down gracefully...');
-  boundServers.forEach(function(bs) {
-    if (bs.shutdown) bs.shutdown();
-    bs.server.on('close', function() {
-      console.log("server shutdown,", bs.server.connections, "connections still open...");
-    });
-    bs.server.close();
-  });
-  // exit more harshly in 700ms
-  setTimeout(function() {
-    console.log("exiting...");
-    process.exit(0);
-  }, 700);
-});
diff --git a/browserid.spec b/scripts/browserid.spec
similarity index 100%
rename from browserid.spec
rename to scripts/browserid.spec
diff --git a/browserid/compress.sh b/scripts/compress.sh
similarity index 93%
rename from browserid/compress.sh
rename to scripts/compress.sh
index 761edbf14317e3b72540919e39c44b002c1b54e2..4ef16ff38447d650e359a7c9b99bb533b99047f3 100755
--- a/browserid/compress.sh
+++ b/scripts/compress.sh
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+cd $(dirname "$0")/..
+
 UGLIFY=`which uglifyjs 2> /dev/null`
 if [ ! -x "$UGLIFY" ]; then
     echo "uglifyjs not found in your path.  can't create production resources.  disaster."
@@ -12,13 +14,13 @@ if [ ! -x "$JAVA" ]; then
     exit 1
 fi
 
-YUI_LOCATION=`pwd`'/static/steal/build/scripts/yui.jar'
+YUI_LOCATION=`pwd`'/resources/static/steal/build/scripts/yui.jar'
 
 echo ''
 echo '****Compressing include.js****'
 echo ''
 
-cd static
+cd resources/static
 mv include.js include.orig.js
 $UGLIFY include.orig.js > include.js
 
diff --git a/scripts/rpmbuild.sh b/scripts/rpmbuild.sh
index c7caae8cd57330e18d3f5b337e14a50def13467d..46f30b1eeea913a6d94135524d19fbccd6e7db77 100755
--- a/scripts/rpmbuild.sh
+++ b/scripts/rpmbuild.sh
@@ -20,7 +20,7 @@ tar -C .. --exclude rpmbuild -czf \
 
 set +e
 
-rpmbuild --define "_topdir $PWD/rpmbuild" -ba browserid.spec
+rpmbuild --define "_topdir $PWD/rpmbuild" -ba scripts/browserid.spec
 rc=$?
 if [ $rc -eq 0 ]; then
     ls -l $PWD/rpmbuild/RPMS/*/*.rpm
diff --git a/scripts/run_all_tests.sh b/scripts/run_all_tests.sh
index ed6ab62f2f1afaa86b8cfe1974258dddb0e0d0bc..3976cd66fab79b019c05aa4c05f6cbfee37cccb8 100755
--- a/scripts/run_all_tests.sh
+++ b/scripts/run_all_tests.sh
@@ -16,9 +16,9 @@ cd $BASEDIR
 for env in test_json test_mysql ; do
   export NODE_ENV=$env
   $SCRIPT_DIR/test_db_connectivity.js
-  if [ $? = 0 ] ; then 
+  if [ $? = 0 ] ; then
       echo "Testing with NODE_ENV=$env"
-      for file in browserid/tests/*.js ; do
+      for file in tests/*.js ; do
           echo $file
           vows $file
           if [[ $? != 0 ]] ; then
diff --git a/scripts/run_locally.js b/scripts/run_locally.js
new file mode 100755
index 0000000000000000000000000000000000000000..75453824b8b78656c86b8315532bbf4eafe7e9c3
--- /dev/null
+++ b/scripts/run_locally.js
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+
+const
+spawn = require('child_process').spawn,
+path = require('path');
+
+exports.daemons = daemons = {};
+
+const HOST = process.env['IP_ADDRESS'] || process.env['HOST'] || "127.0.0.1";
+
+var daemonsToRun = {
+  verifier: {
+    PORT: 10000,
+    HOST: HOST
+  },
+  browserid: {
+    PORT: 10002,
+    HOST: HOST
+  },
+  example: {
+    path: path.join(__dirname, "..", "scripts", "serve_example.js"),
+    PORT: 10001
+  }
+};
+
+// all spawned processes should log to console
+process.env['LOG_TO_CONSOLE'] = 1;
+
+// all spawned processes will communicate with the local browserid
+process.env['BROWSERID_URL'] = 'http://' + HOST + ":10002";
+process.env['VERIFIER_URL'] = 'http://' + HOST + ":10000/verify";
+
+Object.keys(daemonsToRun).forEach(function(k) {
+  Object.keys(daemonsToRun[k]).forEach(function(ek) {
+    process.env[ek] = daemonsToRun[k][ek];
+  });
+  var pathToScript = daemonsToRun[k].path || path.join(__dirname, "..", "bin", k);
+  var p = spawn('node', [ pathToScript ]);
+
+  function dump(d) {
+    d.toString().split('\n').forEach(function(d) {
+      if (d.length === 0) return;
+      console.log(k, '(' + p.pid + '):', d);
+    });
+  }
+
+  p.stdout.on('data', dump);
+  p.stderr.on('data', dump);
+
+  console.log("spawned", k, "("+pathToScript+") with pid", p.pid);
+  Object.keys(daemonsToRun[k]).forEach(function(ek) {
+    delete process.env[ek];
+  });
+
+  daemons[k] = p;
+
+  p.on('exit', function (code, signal) {
+    console.log(k, 'exited with code', code, (signal ? 'on signal ' + signal : ""));
+    delete daemons[k];
+    Object.keys(daemons).forEach(function (k) { daemons[k].kill(); });
+    if (Object.keys(daemons).length === 0) {
+      console.log("all daemons torn down, exiting...");
+    }
+  });
+});
+
+process.on('SIGINT', function () {
+  console.log('\nSIGINT recieved! trying to shut down gracefully...');
+  Object.keys(daemons).forEach(function (k) { daemons[k].kill('SIGINT'); });
+});
diff --git a/scripts/serve_example.js b/scripts/serve_example.js
new file mode 100755
index 0000000000000000000000000000000000000000..904081830eca2f7392ede8c1d7434c488d402b01
--- /dev/null
+++ b/scripts/serve_example.js
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+// finally, let's run a tiny webserver for the example code.
+const
+express = require('express'),
+path = require('path'),
+urlparse = require('urlparse'),
+postprocess = require('postprocess');
+
+var exampleServer = express.createServer();
+
+exampleServer.use(express.logger());
+
+if (process.env['BROWSERID_URL']) {
+  var burl = urlparse(process.env['BROWSERID_URL']).validate().normalize().originOnly().toString();
+  console.log('using browserid server at ' + burl);
+
+  exampleServer.use(postprocess.middleware(function(req, buffer) {
+    return buffer.toString().replace(new RegExp('https://browserid.org', 'g'), burl);
+  }));
+}
+
+exampleServer.use(express.static(path.join(__dirname, "..", "example")));
+
+exampleServer.listen(
+  process.env['PORT'] || 10001,
+  process.env['HOST'] || process.env['IP_ADDRESS'] || "127.0.0.1",
+  function() {
+    var addy = exampleServer.address();
+    console.log("http://" + addy.address + ":" + addy.port);
+  });
diff --git a/scripts/test_db_connectivity.js b/scripts/test_db_connectivity.js
index 2a446931742ee6b531700c78839d835acaee104c..acdfdad023c69204e2a8838fc5e734d9c9e0427e 100755
--- a/scripts/test_db_connectivity.js
+++ b/scripts/test_db_connectivity.js
@@ -4,8 +4,8 @@
 // the database using the present configuration.
 
 const
-configuration = require('../libs/configuration.js'),
-db = require('../browserid/lib/db.js');
+configuration = require('../lib/configuration.js'),
+db = require('../lib/db.js');
 
 var dbCfg = configuration.get('database');
 
diff --git a/browserid/tests/ca-test.js b/tests/ca-test.js
similarity index 97%
rename from browserid/tests/ca-test.js
rename to tests/ca-test.js
index 2dfd984ee4120a048df26965b0b3537c76941316..c990798d0e1439fb3ba835171b27e6bafaac4742 100755
--- a/browserid/tests/ca-test.js
+++ b/tests/ca-test.js
@@ -41,8 +41,8 @@ const assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js'),
-ca = require('../lib/ca.js'),
+email = require('browserid/email.js'),
+ca = require('browserid/ca.js'),
 jwcert = require('jwcrypto/jwcert'),
 jwk = require('jwcrypto/jwk'),
 jws = require('jwcrypto/jws');
diff --git a/browserid/tests/cert-emails-test.js b/tests/cert-emails-test.js
similarity index 90%
rename from browserid/tests/cert-emails-test.js
rename to tests/cert-emails-test.js
index 2b3ef1cafe5b7229983a55dca63725dcf146f07c..b8e353fe3057b5829c60bfb901199f23ed9257a3 100755
--- a/browserid/tests/cert-emails-test.js
+++ b/tests/cert-emails-test.js
@@ -41,8 +41,8 @@ const assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js'),
-ca = require('../lib/ca.js'),
+email = require('browserid/email.js'),
+ca = require('browserid/ca.js'),
 jwcert = require('jwcrypto/jwcert'),
 jwk = require('jwcrypto/jwk'),
 jws = require('jwcrypto/jws'),
@@ -58,21 +58,36 @@ start_stop.addStartupBatches(suite);
 // ever time a new token is sent out, let's update the global
 // var 'token'
 var token = undefined;
-email.setInterceptor(function(email, site, secret) { token = secret; });
+start_stop.browserid.on('token', function(secret) {
+  token = secret;
+});
 
 // INFO: some of these tests are repeat of sync-emails... to set
 // things up properly for key certification
 
 // create a new account via the api with (first address)
 suite.addBatch({
-  "stage an account": {
+  "staging an account": {
     topic: wsapi.post('/wsapi/stage_user', {
       email: 'syncer@somehost.com',
       pubkey: 'fakekey',
       site:'fakesite.com'
     }),
-    "yields a sane token": function(r, err) {
-      assert.strictEqual(typeof token, 'string');
+    "succeeds": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
     }
   }
 });
@@ -112,13 +127,13 @@ suite.addBatch({
       assert.strictEqual(r.code, 400);
     }
   },
-  "cert key invoked with just an email": {  
+  "cert key invoked with just an email": {
     topic: wsapi.post(cert_key_url, { email: 'syncer@somehost.com' }),
     "returns a 400" : function(r, err) {
       assert.strictEqual(r.code, 400);
     }
   },
-  "cert key invoked with proper argument": {  
+  "cert key invoked with proper argument": {
     topic: wsapi.post(cert_key_url, { email: 'syncer@somehost.com', pubkey: kp.publicKey.serialize() }),
     "returns a response with a proper content-type" : function(r, err) {
       assert.strictEqual(r.code, 200);
diff --git a/browserid/tests/cookie-session-security-test.js b/tests/cookie-session-security-test.js
similarity index 96%
rename from browserid/tests/cookie-session-security-test.js
rename to tests/cookie-session-security-test.js
index 3a1d18817dd5a44f2d73c27099c7ffd088de1624..dad6e25452b47e29e050ecd97b2177153f5582c6 100755
--- a/browserid/tests/cookie-session-security-test.js
+++ b/tests/cookie-session-security-test.js
@@ -41,9 +41,9 @@ const assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-wcli = require('../../libs/wsapi_client');
-email = require('../lib/email.js'),
-ca = require('../lib/ca.js'),
+wcli = require('wsapi_client');
+email = require('browserid/email.js'),
+ca = require('browserid/ca.js'),
 jwcert = require('jwcrypto/jwcert'),
 jwk = require('jwcrypto/jwk'),
 jws = require('jwcrypto/jws');
diff --git a/browserid/tests/db-test.js b/tests/db-test.js
similarity index 98%
rename from browserid/tests/db-test.js
rename to tests/db-test.js
index c4c1136bf02850e2ceab1989d8e198f9947973d1..6f7d92c5eabb7e658747d877ffc01e93dbcfaa3d 100755
--- a/browserid/tests/db-test.js
+++ b/tests/db-test.js
@@ -37,19 +37,22 @@
 
 require('./lib/test_env.js');
 
+// add lib/ to the require path
+
 const
 assert = require('assert'),
 vows = require('vows'),
-db = require('../lib/db.js'),
 fs = require('fs'),
 path = require('path'),
-configuration = require('../../libs/configuration.js');
+db = require('db.js'),
+configuration = require('configuration.js');
 
 var suite = vows.describe('db');
 // disable vows (often flakey?) async error behavior
 suite.options.error = false;
 
 var dbCfg = configuration.get('database');
+dbCfg.drop_on_close = true;
 
 suite.addBatch({
   "onReady": {
@@ -192,7 +195,7 @@ suite.addBatch({
         db.isStaged('lloyd@somewhe.re', function(r) { cb(secret, r); });
       },
       "makes it visible via isStaged": function(sekret, r) { assert.isTrue(r); },
-      "and lets you verify it": {
+      "lets you verify it": {
         topic: function(secret, r) {
           db.gotVerificationSecret(secret, undefined, this.callback);
         },
diff --git a/browserid/tests/forgotten-email-test.js b/tests/forgotten-email-test.js
similarity index 84%
rename from browserid/tests/forgotten-email-test.js
rename to tests/forgotten-email-test.js
index 8fa595b469eec88174cfe2b9c08150dc8fcac0d5..87774f4a812059525096d799d5b843976cf491de 100755
--- a/browserid/tests/forgotten-email-test.js
+++ b/tests/forgotten-email-test.js
@@ -41,29 +41,39 @@ const assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js');
+email = require('browserid/email.js');
 
 var suite = vows.describe('forgotten-email');
 
-// disable vows (often flakey?) async error behavior
-suite.options.error = false;
-
 start_stop.addStartupBatches(suite);
 
-// ever time a new token is sent out, let's update the global
+// every time a new token is sent out, let's update the global
 // var 'token'
 var token = undefined;
-email.setInterceptor(function(email, site, secret) { token = secret; });
 
 // create a new account via the api with (first address)
 suite.addBatch({
-  "stage first account": {
+  "staging an account": {
     topic: wsapi.post('/wsapi/stage_user', {
       email: 'first@fakeemail.com',
       site:'fakesite.com'
     }),
-    "the token is sane": function(r, err) {
-      assert.strictEqual('string', typeof token);
+    "works": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
   }
 });
@@ -76,6 +86,7 @@ suite.addBatch({
     "account created": function(r, err) {
       assert.equal(r.code, 200);
       assert.strictEqual(true, JSON.parse(r.body).success);
+      token = undefined;
     }
   }
 });
@@ -97,8 +108,22 @@ suite.addBatch({
       email: 'second@fakeemail.com',
       site:'fakesite.com'
     }),
-    "the token is sane": function(r, err) {
-      assert.strictEqual('string', typeof token);
+    "works": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
   }
 });
@@ -112,6 +137,7 @@ suite.addBatch({
     "account created": function(r, err) {
       assert.equal(r.code, 200);
       assert.strictEqual(JSON.parse(r.body).success, true);
+      token = undefined;
     }
   }
 });
@@ -146,8 +172,22 @@ suite.addBatch({
       email: 'first@fakeemail.com',
       site:'otherfakesite.com'
     }),
-    "the token is sane": function(r, err) {
-      assert.strictEqual('string', typeof token);
+    "works": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
   }
 });
diff --git a/tests/lib/start-stop.js b/tests/lib/start-stop.js
new file mode 100644
index 0000000000000000000000000000000000000000..67b49c9dcb36a32e7d71b05e2bd90a41563afcdc
--- /dev/null
+++ b/tests/lib/start-stop.js
@@ -0,0 +1,198 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla BrowserID.
+ *
+ * The Initial Developer of the Original Code is Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+const
+assert = require('assert'),
+fs = require('fs'),
+path = require('path'),
+wsapi = require('./wsapi.js'),
+spawn = require('child_process').spawn,
+events = require('events'),
+config = require('configuration'),
+db = require('db');
+
+var proc = undefined;
+
+process.on('exit', function () {
+  if (proc) { proc.kill(); }
+});
+
+exports.browserid = new events.EventEmitter;
+
+function setupProc(proc) {
+  var m, sentReady = false;
+
+  proc.stdout.on('data', function(x) {
+//    console.log(x.toString());
+    var tokenRegex = new RegExp('token=([A-Za-z0-9]+)$', 'm');
+
+    if (!sentReady && /^browserid.*127\.0\.0\.1:10002/.test(x)) {
+      exports.browserid.emit('ready');
+      sentReady = true;
+    } else if (m = tokenRegex.exec(x)) {
+      exports.browserid.emit('token', m[1]);
+    }
+  });
+}
+
+function removeVarDir() {
+  try {
+    fs.readdirSync(varPath).forEach(function(f) {
+        fs.unlinkSync(path.join(varPath, f));
+    });
+    fs.rmdirSync(varPath);
+  } catch(e) {}
+}
+
+exports.addStartupBatches = function(suite) {
+
+  // disable vows (often flakey?) async error behavior
+  suite.options.error = false;
+
+  // propogate our ephemeral database parameters down to
+  // child processes so that all process are communicating
+  // with the same db
+  suite.addBatch({
+    "specifying an ephemeral database": {
+      topic: function() {
+        if (config.get('database').driver === 'mysql') {
+          process.env['MYSQL_DATABASE_NAME'] = config.get('database').database;
+        } else if (config.get('database').driver === 'json') {
+          process.env['JSON_DATABASE_PATH'] = config.get('database').path;
+        }
+        return true;
+      },
+      "should work": function(x) {
+        var cfg = process.env['MYSQL_DATABASE_NAME'] || process.env['JSON_DATABASE_PATH'];
+        assert.equal(typeof cfg, 'string');
+      }
+    }
+  });
+
+  suite.addBatch({
+    "opening the database": {
+      topic: function() {
+        var cfg = config.get('database');
+        cfg.drop_on_close = true;
+        db.open(cfg, this.callback);
+      },
+      "should work fine": function(r) {
+        assert.isUndefined(r);
+      }
+    }
+  });
+
+  suite.addBatch({
+    "run the server": {
+      topic: function() {
+        var pathToHarness = path.join(__dirname, '..', '..', 'scripts', 'run_locally.js');
+        proc = spawn('node', [ pathToHarness ])
+        setupProc(proc);
+        exports.browserid.on('ready', this.callback);
+      },
+      "server should be running": {
+        topic: wsapi.get('/__heartbeat__'),
+        "server is running": function (r, err) {
+          assert.equal(r.code, 200);
+          assert.equal(r.body, 'ok');
+        }
+      }
+    }
+  });
+};
+
+exports.addRestartBatch = function(suite) {
+  // stop the server
+  suite.addBatch({
+    "stop the server": {
+      topic: function() {
+        var cb = this.callback;
+        proc.kill('SIGINT');
+        proc.on('exit', this.callback);
+      },
+      "stopped": function(x) {
+        assert.strictEqual(x, 0);
+      }
+    }
+  });
+
+  suite.addBatch({
+    "run the server": {
+      topic: function() {
+        var pathToHarness = path.join(__dirname, '..', '..', 'scripts', 'run_locally.js');
+        proc = spawn('node', [ pathToHarness ])
+        setupProc(proc);
+        exports.browserid.on('ready', this.callback);
+      },
+      "server should be running": {
+        topic: wsapi.get('/__heartbeat__'),
+        "server is running": function (r, err) {
+          assert.equal(r.code, 200);
+          assert.equal(r.body, 'ok');
+        }
+      }
+    }
+  });
+
+};
+
+exports.addShutdownBatches = function(suite) {
+  // stop the server
+  suite.addBatch({
+    "stop the server": {
+      topic: function() {
+        var cb = this.callback;
+        proc.kill('SIGINT');
+        proc.on('exit', this.callback);
+      },
+      "stopped": function(x) {
+        assert.strictEqual(x, 0);
+      }
+    }
+  });
+
+  // clean up
+  suite.addBatch({
+    "closing the database": {
+      topic: function() {
+        db.close(this.callback);
+      },
+      "should work": function(err) {
+        assert.isUndefined(err);
+      }
+    }
+  });
+}
+
diff --git a/browserid/tests/lib/test_env.js b/tests/lib/test_env.js
similarity index 96%
rename from browserid/tests/lib/test_env.js
rename to tests/lib/test_env.js
index a98816c4ad723f88d2654b44b2e0acc972965bfc..9017cebc5152e551a731735391252584fe9379ce 100644
--- a/browserid/tests/lib/test_env.js
+++ b/tests/lib/test_env.js
@@ -44,4 +44,6 @@ if (undefined === process.env['NODE_ENV']) {
   process.env['NODE_ENV'] = 'test_json';
 } else if (process.env['NODE_ENV'].substr(0,5) !== 'test_') {
   console.log("(Woah.  Running tests without a test_ configuration.  Is this *really* what you want?)");
-} 
+}
+
+require.paths.unshift(require('path').join(__dirname, '..', '..', 'lib'));
diff --git a/browserid/tests/lib/wsapi.js b/tests/lib/wsapi.js
similarity index 96%
rename from browserid/tests/lib/wsapi.js
rename to tests/lib/wsapi.js
index a738c16cee4c71e8f68257444473d02a12affa82..92374727546475461031d317af049eaabf08221f 100644
--- a/browserid/tests/lib/wsapi.js
+++ b/tests/lib/wsapi.js
@@ -34,14 +34,14 @@
  * ***** END LICENSE BLOCK ***** */
 
 const
-wcli = require('../../../libs/wsapi_client');
+wcli = require('wsapi_client');
 
 // the client "context"
 var context = {};
 
 // the configuration
 var configuration = {
-  browserid: 'http://127.0.0.1:62700/'
+  browserid: 'http://127.0.0.1:10001/'
 }
 
 exports.clearCookies = function() {
diff --git a/browserid/tests/list-emails-wsapi-test.js b/tests/list-emails-wsapi-test.js
similarity index 89%
rename from browserid/tests/list-emails-wsapi-test.js
rename to tests/list-emails-wsapi-test.js
index e31480e25f5d263331a555bb646ea5b1cd415f9d..1cc60423148f69d2cdaf8cc3b1d90fb26f80f5ac 100755
--- a/browserid/tests/list-emails-wsapi-test.js
+++ b/tests/list-emails-wsapi-test.js
@@ -40,8 +40,7 @@ require('./lib/test_env.js');
 const assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
-wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js');
+wsapi = require('./lib/wsapi.js');
 
 var suite = vows.describe('forgotten-email');
 
@@ -53,7 +52,6 @@ start_stop.addStartupBatches(suite);
 // ever time a new token is sent out, let's update the global
 // var 'token'
 var token = undefined;
-email.setInterceptor(function(email, site, secret) { token = secret; });
 
 // create a new account via the api with (first address)
 suite.addBatch({
@@ -62,8 +60,22 @@ suite.addBatch({
       email: 'syncer@somehost.com',
       site:'fakesite.com'
     }),
-    "yields a sane token": function(r, err) {
-      assert.strictEqual(typeof token, 'string');
+    "works": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
   }
 });
@@ -76,6 +88,7 @@ suite.addBatch({
     "works": function(r, err) {
       assert.equal(r.code, 200);
       assert.strictEqual(JSON.parse(r.body).success, true);
+      token = undefined;
     }
   }
 });
diff --git a/browserid/tests/page-requests-test.js b/tests/page-requests-test.js
similarity index 99%
rename from browserid/tests/page-requests-test.js
rename to tests/page-requests-test.js
index 156a0611df558716b6c3d25edbc8e8fd13c3679d..2a5b530e46fadb15eddb06682b1459ecddae8f20 100755
--- a/browserid/tests/page-requests-test.js
+++ b/tests/page-requests-test.js
@@ -48,12 +48,11 @@ var suite = vows.describe('page requests');
 // start up a pristine server
 start_stop.addStartupBatches(suite);
 
-// This set of tests check to make sure all of the expected pages are served 
-// up with the correct status codes.  We use Lloyd's wsapi client as our REST 
+// This set of tests check to make sure all of the expected pages are served
+// up with the correct status codes.  We use Lloyd's wsapi client as our REST
 // interface.
 
 
-
 // Taken from the vows page.
 function assertStatus(code) {
   return function (res, err) {
diff --git a/browserid/tests/password-bcrypt-update-test.js b/tests/password-bcrypt-update-test.js
similarity index 92%
rename from browserid/tests/password-bcrypt-update-test.js
rename to tests/password-bcrypt-update-test.js
index d5693eeae05b6bdd67cca8a11bd3aece966c2471..ad0483652b4db4414215e6a7489fe062f0a7d065 100755
--- a/browserid/tests/password-bcrypt-update-test.js
+++ b/tests/password-bcrypt-update-test.js
@@ -42,9 +42,8 @@ require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js'),
-db = require('../lib/db.js'),
-config = require('../../libs/configuration.js'),
+db = require('db.js'),
+config = require('configuration.js'),
 bcrypt = require('bcrypt');
 
 var suite = vows.describe('password-length');
@@ -59,9 +58,6 @@ const TEST_EMAIL = 'update@passwd.bcrypt',
 
 // surpress console output of emails with a noop email interceptor
 var token = undefined;
-email.setInterceptor(function(email, site, secret) {
-  token = secret;
-});
 
 suite.addBatch({
   "get csrf token": {
@@ -89,6 +85,20 @@ suite.addBatch({
   }
 });
 
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
+    }
+  }
+});
+
 // create a new account via the api with (first address)
 suite.addBatch({
   "setting password": {
@@ -121,13 +131,15 @@ suite.addBatch({
 suite.addBatch({
   "updating work factor": {
     topic: function() {
-      config.set('bcrypt_work_factor', 8);
+      process.env['BCRYPT_WORK_FACTOR'] = 8;
       return true;
     },
     "succeeds": function() {}
   }
 });
 
+start_stop.addRestartBatch(suite);
+
 // at authentication time we should see the password get updated
 suite.addBatch({
   "re-authentication": {
diff --git a/browserid/tests/password-length-test.js b/tests/password-length-test.js
similarity index 97%
rename from browserid/tests/password-length-test.js
rename to tests/password-length-test.js
index 6bd243cc478132e9c68231299a32a74f4b0715b7..055afd202e0f66e00acc59d5f5f5c465a6173dff 100755
--- a/browserid/tests/password-length-test.js
+++ b/tests/password-length-test.js
@@ -42,7 +42,7 @@ require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
 wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js');
+email = require('browserid/email.js');
 
 var suite = vows.describe('password-length');
 
@@ -51,9 +51,11 @@ suite.options.error = false;
 
 start_stop.addStartupBatches(suite);
 
-// surpress console output of emails with a noop email interceptor
+// surpress console output of emails with a noop email intercepto
 var token = undefined;
-email.setInterceptor(function(email, site, secret) { token = secret; });
+start_stop.browserid.on('token', function(secret) {
+  token = secret;
+});
 
 suite.addBatch({
   "get csrf token": {
@@ -79,7 +81,7 @@ suite.addBatch({
       assert.equal(r.code, 200);
     }
   }
-})
+});
 
 // create a new account via the api with (first address)
 suite.addBatch({
@@ -113,7 +115,6 @@ suite.addBatch({
     }
   }
 });
-
 start_stop.addShutdownBatches(suite);
 
 // run or export the suite.
diff --git a/browserid/tests/registration-status-wsapi-test.js b/tests/registration-status-wsapi-test.js
similarity index 90%
rename from browserid/tests/registration-status-wsapi-test.js
rename to tests/registration-status-wsapi-test.js
index b4bc4be330d65e913d657740e413bd939152cdb1..e0d40aa7762a1062482d8954cd200bd3fa03e6b4 100755
--- a/browserid/tests/registration-status-wsapi-test.js
+++ b/tests/registration-status-wsapi-test.js
@@ -41,8 +41,7 @@ const
 assert = require('assert'),
 vows = require('vows'),
 start_stop = require('./lib/start-stop.js'),
-wsapi = require('./lib/wsapi.js'),
-email = require('../lib/email.js');
+wsapi = require('./lib/wsapi.js');
 
 var suite = vows.describe('registration-status-wsapi');
 
@@ -52,7 +51,6 @@ var suite = vows.describe('registration-status-wsapi');
 // ever time a new token is sent out, let's update the global
 // var 'token'
 var token = undefined;
-email.setInterceptor(function(email, site, secret) {token = secret; });
 
 // start up a pristine server
 start_stop.addStartupBatches(suite);
@@ -82,10 +80,25 @@ suite.addBatch({
       email: 'first@fakeemail.com',
       site:'fakesite.com'
     }),
-    "the token is sane": function(r, err) {
-      assert.strictEqual('string', typeof token);
+    "returns 200": function(r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
-  }});
+  }
+});
 
 suite.addBatch({
   "comparing token to email": {
@@ -129,6 +142,7 @@ suite.addBatch({
     },
     "works": function(r, err) {
       assert.equal(r.code, 200);
+      token = undefined;
     }
   }
 });
@@ -186,8 +200,22 @@ suite.addBatch({
       email: 'first@fakeemail.com',
       site:'secondfakesite.com'
     }),
-    "yields a valid token": function(r, err) {
-      assert.strictEqual('string', typeof token);
+    "yields a HTTP 200": function (r, err) {
+      assert.strictEqual(r.code, 200);
+    }
+  }
+});
+
+// wait for the token
+suite.addBatch({
+  "a token": {
+    topic: function() {
+      if (token) return token;
+      else start_stop.browserid.once('token', this.callback);
+    },
+    "is obtained": function (t) {
+      assert.strictEqual(typeof t, 'string');
+      token = t;
     }
   }
 });
@@ -211,6 +239,7 @@ suite.addBatch({
     },
     "and returns a 200 code": function(r, err) {
       assert.equal(r.code, 200);
+      token = undefined;
     }
   }
 });
diff --git a/verifier/lib/httputils.js b/verifier/lib/httputils.js
deleted file mode 100644
index f062b02f9ed12fc519e18f3a41037e47eca2b408..0000000000000000000000000000000000000000
--- a/verifier/lib/httputils.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-// various little utilities to make crafting boilerplate responses
-// simple
-
-exports.fourOhFour = function(resp, reason)
-{
-  resp.writeHead(404, {"Content-Type": "text/plain"});
-  resp.write("Not Found");
-  if (reason) {
-    resp.write(": " + reason);
-  }
-  resp.end();
-};
-
-exports.serverError = function(resp, reason)
-{
-  resp.writeHead(500, {"Content-Type": "text/plain"});
-  if (reason) resp.write(reason);
-  resp.end();
-};
-
-exports.badRequest = function(resp, reason)
-{
-  resp.writeHead(400, {"Content-Type": "text/plain"});
-  resp.write("Bad Request");
-  if (reason) {
-    resp.write(": " + reason);
-  }
-  resp.end();
-};
-
diff --git a/verifier/run.js b/verifier/run.js
deleted file mode 100755
index 3c93845cef5995e116f6cf0e3937f0c835f124f3..0000000000000000000000000000000000000000
--- a/verifier/run.js
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env node
-
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-var   sys = require("sys"),
-     path = require("path"),
-       fs = require("fs"),
-  express = require("express");
-
-var PRIMARY_HOST = "127.0.0.1";
-var PRIMARY_PORT = 62800;
-
-var handler = require("./app.js");
-
-var app = express.createServer();
-
-// let the specific server interact directly with the express server to register their middleware
-if (handler.setup) handler.setup(app);
-
-app.listen(PRIMARY_PORT, PRIMARY_HOST);
diff --git a/verifier/test/certassertion-test.js b/verifier/test/certassertion-test.js
deleted file mode 100644
index 24edbead4e003185e41a33d3f8b354f6d85eb992..0000000000000000000000000000000000000000
--- a/verifier/test/certassertion-test.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla BrowserID.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2011
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *     Ben Adida <benadida@mozilla.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-var vows = require("vows"),
-    assert = require("assert"),
-    certassertion = require("../lib/certassertion"),
-    jwk = require("jwcrypto/jwk"),
-    jwt = require("jwcrypto/jwt"),
-    jwcert = require("jwcrypto/jwcert"),
-    vep = require("jwcrypto/vep"),
-    events = require("events");
-
-vows.describe('certassertion').addBatch({
-  "generate and certify key + assertion" : {
-    topic: function() {
-      // generate a key
-      var root_kp = jwk.KeyPair.generate("RS", 64);
-      var user_kp = jwk.KeyPair.generate("RS", 64);
-      var cert = new jwcert.JWCert("fakeroot.com", new Date(), user_kp.publicKey, {email:"user@fakeroot.com"}).sign(root_kp.secretKey);
-      var assertion = new jwt.JWT(null, new Date(), "rp.com").sign(user_kp.secretKey);
-
-      var self = this;
-      var bundle = vep.bundleCertsAndAssertion([cert],assertion);
-      
-      // verify it
-      certassertion.verify(
-        bundle, "rp.com",
-        function(email, audience, expires) {
-          self.callback({email:email, audience: audience, expires:expires});
-        },
-        function(msg) {},
-        function(issuer, next) {
-          if (issuer == "fakeroot.com")
-            next(root_kp.publicKey);
-          else
-            next(null);
-        });
-    },
-    "is successful": function(res, err) {
-      assert.notEqual(res.email, null);
-    }
-  }
-}).export(module);
\ No newline at end of file