diff --git a/browserid/.gitignore b/browserid/.gitignore
index ae9f5955b3f2463d8aa275899dfa93fe2d05c42b..c4c53c804943031be0c755915d85c53e73beca7b 100644
--- a/browserid/.gitignore
+++ b/browserid/.gitignore
@@ -1 +1 @@
-/authdb.sqlite
+/var
diff --git a/browserid/server/app.js b/browserid/app.js
similarity index 79%
rename from browserid/server/app.js
rename to browserid/app.js
index c88200b7ced1bb9436b6ef8c3df6684236cbd621..925529b67f5910da93263a42ea111ea2a5706d5c 100644
--- a/browserid/server/app.js
+++ b/browserid/app.js
@@ -1,15 +1,19 @@
 const        path = require('path'),
               url = require('url'),
-            wsapi = require('./wsapi.js'),
-        httputils = require('./httputils.js'),
-          connect = require('connect'),
-        webfinger = require('./webfinger.js'),
+               fs = require('fs'),
+            wsapi = require('./lib/wsapi.js'),
+        httputils = require('./lib/httputils.js'),
+        webfinger = require('./lib/webfinger.js'),
          sessions = require('cookie-sessions'),
-          secrets = require('./secrets.js');
+          secrets = require('./lib/secrets.js');
+
+// create the var directory if it doesn't exist
+var VAR_DIR = path.join(__dirname, "var");
+try { fs.mkdirSync(VAR_DIR, 0755); } catch(e) { }
 
 const STATIC_DIR = path.join(path.dirname(__dirname), "static");
 
-const COOKIE_SECRET = secrets.hydrateSecret('cookie_secret', __dirname);
+const COOKIE_SECRET = secrets.hydrateSecret('cookie_secret', VAR_DIR);
 
 function handler(request, response, next) {
     // dispatch!
@@ -49,6 +53,8 @@ function handler(request, response, next) {
     }
 };
 
+exports.varDir = VAR_DIR;
+
 exports.setup = function(server) {
     var week = (7 * 24 * 60 * 60 * 1000);
     server.use(sessions({
diff --git a/browserid/server/db.js b/browserid/lib/db.js
similarity index 99%
rename from browserid/server/db.js
rename to browserid/lib/db.js
index 4d362888e67f938fedc6eb608b8d12e761c89e55..145c2c22e2b21de439dd4e76c95c0d13db623490 100644
--- a/browserid/server/db.js
+++ b/browserid/lib/db.js
@@ -3,7 +3,7 @@ const sqlite = require('sqlite'),
 
 var db = new sqlite.Database();
 
-db.open(path.join(path.dirname(__dirname), "authdb.sqlite"), function (error) {
+db.open(path.join(path.dirname(__dirname), "var", "authdb.sqlite"), function (error) {
   if (error) {
     console.log("Couldn't open database: " + error);
     throw error;
diff --git a/browserid/server/email.js b/browserid/lib/email.js
similarity index 100%
rename from browserid/server/email.js
rename to browserid/lib/email.js
diff --git a/browserid/server/httputils.js b/browserid/lib/httputils.js
similarity index 100%
rename from browserid/server/httputils.js
rename to browserid/lib/httputils.js
diff --git a/browserid/server/prove_template.txt b/browserid/lib/prove_template.txt
similarity index 100%
rename from browserid/server/prove_template.txt
rename to browserid/lib/prove_template.txt
diff --git a/browserid/server/secrets.js b/browserid/lib/secrets.js
similarity index 100%
rename from browserid/server/secrets.js
rename to browserid/lib/secrets.js
diff --git a/browserid/server/webfinger.js b/browserid/lib/webfinger.js
similarity index 100%
rename from browserid/server/webfinger.js
rename to browserid/lib/webfinger.js
diff --git a/browserid/server/webfinger_template.xml b/browserid/lib/webfinger_template.xml
similarity index 100%
rename from browserid/server/webfinger_template.xml
rename to browserid/lib/webfinger_template.xml
diff --git a/browserid/server/wsapi.js b/browserid/lib/wsapi.js
similarity index 100%
rename from browserid/server/wsapi.js
rename to browserid/lib/wsapi.js
diff --git a/browserid/server/standalone.js b/browserid/run.js
old mode 100644
new mode 100755
similarity index 66%
rename from browserid/server/standalone.js
rename to browserid/run.js
index dd158d6aa9687a3599aa0d131278dc19b8028289..564a6afc37b1256792b15139ccba1b799a4b1e91
--- a/browserid/server/standalone.js
+++ b/browserid/run.js
@@ -1,7 +1,6 @@
-var   sys = require("sys"),
-     http = require("http"),
-      url = require("url"),
-     path = require("path"),
+#!/usr/bin/env node
+
+var  path = require("path"),
        fs = require("fs"),
   express = require("express");
 
@@ -13,13 +12,13 @@ var handler = require("./app.js");
 var app = express.createServer();
 
 app.use(express.logger({
-    stream: fs.createWriteStream(path.join(__dirname, "server.log"))
+    stream: fs.createWriteStream(path.join(handler.varDir, "server.log"))
 }));
 
 // 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(path.dirname(__dirname), "static")));
+app.use(express.static(path.join(__dirname, "static")));
 
 app.listen(PRIMARY_PORT, PRIMARY_HOST);