diff --git a/lib/db/mysql.js b/lib/db/mysql.js
index 3657ff36e8f97bb9032d3516324f313b69523565..78749dac678532a13d1f2976ea278a888c41be41 100644
--- a/lib/db/mysql.js
+++ b/lib/db/mysql.js
@@ -118,9 +118,6 @@ exports.open = function(cfg, cb) {
     if (options[param] === undefined) delete options[param];
   });
 
-  // create the client
-  client = mysql.createClient(options);
-
   // let's figure out the database name
   var database = cfg.database;
   if (!database) database = "browserid";
@@ -129,15 +126,28 @@ exports.open = function(cfg, cb) {
   // that we should drop the database on close, do it
   if (database !== 'browserid' && cfg.drop_on_close) drop_on_close = database;
 
+  // create the client
+  function doConnect() {
+    logger.debug("connecting to database");
+    options.database = database;
+    client = mysql.createClient(options);
+    client.ping(function(err) {
+      logger.debug("connection to database " + (err ? ("fails: " + err) : "established"));
+      cb(err);
+    });
+  }
+
   // now create the databse
   if (cfg.create_schema) {
-    client.query("CREATE DATABASE IF NOT EXISTS " + database, function(err) {
+    logger.debug("creating database and tables if required");
+    var createClient = mysql.createClient(options);
+    createClient.query("CREATE DATABASE IF NOT EXISTS " + database, function(err) {
       if (err) {
         logUnexpectedError(err);
         cb(err);
         return;
       }
-      client.useDatabase(database, function(err) {
+      createClient.useDatabase(database, function(err) {
         if (err) {
           logUnexpectedError(err);
           cb(err);
@@ -147,7 +157,7 @@ exports.open = function(cfg, cb) {
         // now create tables
         function createNextTable(i) {
           if (i < schemas.length) {
-            client.query(schemas[i], function(err) {
+            createClient.query(schemas[i], function(err) {
               if (err) {
                 logUnexpectedError(err);
                 cb(err);
@@ -156,13 +166,22 @@ exports.open = function(cfg, cb) {
               }
             });
           } else {
-            cb();
+            createClient.end(function(err) {
+              if (err) {
+                logUnexpectedError(err);
+                cb(err);
+              } else {
+                doConnect();
+              }
+            });
           }
         }
         createNextTable(0);
       });
     });
-  };
+  } else {
+    doConnect();
+  }
 };
 
 exports.close = function(cb) {
diff --git a/resources/static/dialog/css/m.css b/resources/static/dialog/css/m.css
index 416ad1d2536465d9a71a7455c558475629977eb4..3c5ad50a1940818c89f61b4f5302d756563f8ae4 100644
--- a/resources/static/dialog/css/m.css
+++ b/resources/static/dialog/css/m.css
@@ -107,6 +107,12 @@
     font-size: 14px;
   }
 
+  label[for=remember] {
+    display: block;
+    font-size: 15px;
+    margin: 13px;
+  }
+
   #content, .form_section, .pickemail .inputs, .vertical {
     height: auto;
     overflow: visible;
diff --git a/tests/lib/start-stop.js b/tests/lib/start-stop.js
index 6bb240e36090c76702f36c228982dd50b5383706..632b29d6256ec0190f55a975ac759a87d63956ec 100644
--- a/tests/lib/start-stop.js
+++ b/tests/lib/start-stop.js
@@ -71,7 +71,7 @@ function setupProc(proc) {
     if (process.env['LOG_TO_CONSOLE']) console.log(x.toString());
     var tokenRegex = new RegExp('token=([A-Za-z0-9]+)$', 'm');
 
-    if (!sentReady && /^browserid.*127\.0\.0\.1:10002/.test(x)) {
+    if (!sentReady && /^browserid.*127\.0\.0\.1:10002/m.test(x)) {
       exports.browserid.emit('ready');
       sentReady = true;
     } else if (m = tokenRegex.exec(x)) {