diff --git a/script/couch.js b/script/couch.js
index 3deb441..122db75 100644
--- a/script/couch.js
+++ b/script/couch.js
@@ -36,7 +36,7 @@
 
   // Deletes the database on the server
   this.deleteDb = function() {
-    this.last_req = this.request("DELETE", this.uri);
+    this.last_req = this.request("DELETE", this.uri + "?sync=true");
     if (this.last_req.status == 404) {
       return false;
     }
@@ -356,6 +356,12 @@
   return JSON.parse(CouchDB.last_req.responseText).version;
 };
 
+CouchDB.reloadConfig = function() {
+  CouchDB.last_req = CouchDB.request("POST", "/_config/_reload");
+  CouchDB.maybeThrowError(CouchDB.last_req);
+  return JSON.parse(CouchDB.last_req.responseText);
+};
+
 CouchDB.replicate = function(source, target, rep_options) {
   rep_options = rep_options || {};
   var headers = rep_options.headers || {};
diff --git a/script/couch_test_runner.js b/script/couch_test_runner.js
index 7f435bf..efc4dc2 100644
--- a/script/couch_test_runner.js
+++ b/script/couch_test_runner.js
@@ -417,40 +417,35 @@
   }
 }
 
-function waitForRestart() {
-  var waiting = true;
-  // Wait for the server to go down but don't
-  // wait too long because we might miss the
-  // the unavailable period.
-  var count = 25;
-  while (waiting && count > 0) {
-    count--;
-    try {
-      CouchDB.request("GET", "/");
-    } catch(e) {
-      waiting = false;
-    }
-  }
-  // Wait for it to come back up
-  waiting = true;
-  while (waiting) {
-    try {
-      CouchDB.request("GET", "/");
-      waiting = false;
-    } catch(e) {
-      // the request will fail until restart completes
-    }
-  }
+function getCurrentToken() {
+  var xhr = CouchDB.request("GET", "/_restart/token");
+  return JSON.parse(xhr.responseText).token;
 };
 
+
 function restartServer() {
-  var xhr;
-  try {
-    CouchDB.request("POST", "/_restart");
-  } catch(e) {
-    // this request may sometimes fail
+  var token = getCurrentToken();
+  var token_changed = false;
+  var tDelta = 5000;
+  var t0 = new Date();
+  var t1;
+
+  CouchDB.request("POST", "/_restart");
+
+  do {
+    try {
+      if(token != getCurrentToken()) {
+        token_changed = true;
+      }
+    } catch (e) {
+      // Ignore errors while the server restarts
+    }
+    t1 = new Date();
+  } while(((t1 - t0) <= tDelta) && !token_changed);
+
+  if(!token_changed) {
+    throw("Server restart failed");
   }
-  waitForRestart();
 }
 
 // legacy functions for CouchDB < 1.2.0
diff --git a/script/futon.browse.js b/script/futon.browse.js
index 241164c..df4e3d8 100644
--- a/script/futon.browse.js
+++ b/script/futon.browse.js
@@ -93,7 +93,7 @@
                   $("#databases tbody.content tr:eq(" + idx + ")")
                     .find("td.size").text($.futon.formatSize(info.disk_size)).end()
                     .find("td.count").text(info.doc_count).end()
-                    .find("td.seq").text(info.update_seq);
+                    .find("td.seq").text(info.update_seq.split("-")[0]);
                 },
                 error : function() {}
               });
@@ -131,7 +131,7 @@
       var urlParts = location.search.substr(1).split("/");
       var dbName = decodeURIComponent(urlParts.shift())
 
-      var dbNameRegExp = new RegExp("[^a-z0-9\_\$\(\)\+\/\-]", "g");
+      var dbNameRegExp = new RegExp("[^a-z0-9.\_\$\(\)\+\/\-]", "g");
       dbName = dbName.replace(dbNameRegExp, "");
 
       $.futon.storage.declareWithPrefix(dbName + ".", {
diff --git a/script/test/erlang_views.js b/script/test/erlang_views.js
index 7eddab4..c6bc5d7 100644
--- a/script/test/erlang_views.js
+++ b/script/test/erlang_views.js
@@ -44,7 +44,10 @@
       // check simple reduction - another doc with same key.
       var doc = {_id: "2", integer: 1, string: "str2"};
       T(db.save(doc).ok);
-      rfun = "fun(Keys, Values, ReReduce) -> length(Values) end.";
+      rfun = 'fun' +
+              ' (_, Values, false) -> length(Values); ' +
+              ' (_, Values, true) -> lists:sum(Values) ' +
+              ' end.';
       results = db.query(mfun, rfun, null, null, "erlang");
       T(results.rows[0].value == 2);
 
diff --git a/script/test/oauth.js b/script/test/oauth.js
index 9199cd0..8b4e694 100644
--- a/script/test/oauth.js
+++ b/script/test/oauth.js
@@ -23,12 +23,14 @@
   var dbA = new CouchDB("test_suite_db_a", {"X-Couch-Full-Commit":"false"});
   var dbB = new CouchDB("test_suite_db_b", {"X-Couch-Full-Commit":"false"});
   var dbC = new CouchDB("test_suite_db_c", {"X-Couch-Full-Commit":"false"});
+  var dbD = new CouchDB("test_suite_users", {"X-Couch-Full-Commit":"false"});
   dbA.deleteDb();
   dbA.createDb();
   dbB.deleteDb();
   dbB.createDb();
   dbC.deleteDb();
   dbC.createDb();
+  dbD.deleteDb();
 
   // Simple secret key generator
   function generateSecret(length) {
@@ -125,7 +127,6 @@
         "X-Couch-Full-Commit":"false",
         "Authorization": adminBasicAuthHeaderValue()
       });
-      usersDb.deleteDb();
         
       // Create a user
       var jasonUserDoc = CouchDB.prepareUserDoc({
diff --git a/script/test/proxyauth.js b/script/test/proxyauth.js
index 016cec5..1677a66 100644
--- a/script/test/proxyauth.js
+++ b/script/test/proxyauth.js
@@ -19,7 +19,9 @@
   var db = new CouchDB("test_suite_db", {"X-Couch-Full-Commit":"false"});
   
   if (debug) debugger;
-  
+ 
+  usersDb.deleteDb();
+
   // Simple secret key generator
   function generateSecret(length) {
     var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@@ -33,7 +35,6 @@
   var secret = generateSecret(64);
   
   function TestFun() {
-    usersDb.deleteDb();
     db.deleteDb();
     db.createDb();
     
@@ -126,4 +127,4 @@
     TestFun
   );
   
-};
\ No newline at end of file
+};
diff --git a/script/test/replication.js b/script/test/replication.js
index fd60dd4..7e4ecc1 100644
--- a/script/test/replication.js
+++ b/script/test/replication.js
@@ -1359,17 +1359,24 @@
   TEquals(true, repResult.ok);
   TEquals('string', typeof repResult._local_id);
 
-  var xhr = CouchDB.request("GET", "/_active_tasks");
-  var tasks = JSON.parse(xhr.responseText);
-
   TEquals(true, sourceDb.compact().ok);
   while (sourceDb.info().compact_running) {};
 
   TEquals(true, sourceDb.save(makeDocs(30, 31)[0]).ok);
   xhr = CouchDB.request("GET", "/_active_tasks");
 
-  var tasksAfter = JSON.parse(xhr.responseText);
-  TEquals(tasks.length, tasksAfter.length);
+  var xhr = CouchDB.request("GET", "/_active_tasks");
+  var tasks = JSON.parse(xhr.responseText);
+
+  var found_task = false;
+  for(var i = 0; i < tasks.length; i++) {
+    if(tasks[i].replication_id == repResult._local_id) {
+      found_task = true;
+      break;
+    }
+  }
+  TEquals(true, found_task);
+
   waitForSeq(sourceDb, targetDb);
   T(sourceDb.open("30") !== null);
 
@@ -1695,6 +1702,9 @@
   TEquals(true, repResult.ok);
   TEquals('string', typeof repResult._local_id);
 
+  // Race conditions are awesome
+  wait(500);
+
   xhr = CouchDB.request("GET", "/_active_tasks");
   tasks = JSON.parse(xhr.responseText);
 
diff --git a/script/test/security_validation.js b/script/test/security_validation.js
index 862924a..14e5d04 100644
--- a/script/test/security_validation.js
+++ b/script/test/security_validation.js
@@ -115,6 +115,8 @@
         {"WWW-Authenticate": "X-Couch-Test-Auth Jan Lehnardt:apple"}
       );
       // Attempt to save the design as a non-admin (in replication scenario)
+      designDoc.foo = "bar";
+      designDoc._rev = "2-642e20f96624a0aae6025b4dba0c6fb2";
       try {
         user2Db.save(designDoc, {new_edits : false});
         T(false && "Can't get here. Should have thrown an error on design doc");
diff --git a/script/test/show_documents.js b/script/test/show_documents.js
index d4c8ac4..618925f 100644
--- a/script/test/show_documents.js
+++ b/script/test/show_documents.js
@@ -409,7 +409,7 @@
 
       function() {
         T(db.setDbProperty("_security", {foo: true}).ok);
-        T(db.save(doc).ok);
+        T(db.save({_id:"testdoc",foo:1}).ok);
 
         xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/secObj");
         var resp = JSON.parse(xhr.responseText);
diff --git a/script/test/users_db_security.js b/script/test/users_db_security.js
index 2a2bb9d..f2ca8bc 100644
--- a/script/test/users_db_security.js
+++ b/script/test/users_db_security.js
@@ -79,7 +79,6 @@
 
   var testFun = function()
   {
-    usersDb.deleteDb();
 
     // _users db
     // a doc with a field 'password' should be hashed to 'derived_key'
diff --git a/script/test/view_compaction.js b/script/test/view_compaction.js
index 151ce93..35d6276 100644
--- a/script/test/view_compaction.js
+++ b/script/test/view_compaction.js
@@ -27,7 +27,7 @@
         map: "function(doc) { emit(doc._id, doc.value) }"
       },
       view2: {
-        map: "function(doc) { emit(doc._id, doc.value); }",
+        map: "function(doc) { if (typeof(doc.integer) === 'number') {emit(doc._id, doc.integer);} }",
         reduce: "function(keys, values, rereduce) { return sum(values); }"
       }
     }
@@ -38,13 +38,13 @@
   db.bulkSave(docs);
 
   var resp = db.view('foo/view1', {});
-  T(resp.rows.length === 10000);
+  TEquals(10000, resp.rows.length);
 
   resp = db.view('foo/view2', {});
-  T(resp.rows.length === 1);
+  TEquals(1, resp.rows.length);
 
   resp = db.designInfo("_design/foo");
-  T(resp.view_index.update_seq === 10001);
+  TEquals(10001, resp.view_index.update_seq);
 
 
   // update docs
@@ -55,13 +55,13 @@
 
 
   resp = db.view('foo/view1', {});
-  T(resp.rows.length === 10000);
+  TEquals(10000, resp.rows.length);
 
   resp = db.view('foo/view2', {});
-  T(resp.rows.length === 1);
+  TEquals(1, resp.rows.length);
 
   resp = db.designInfo("_design/foo");
-  T(resp.view_index.update_seq === 20001);
+  TEquals(20001, resp.view_index.update_seq);
 
 
   // update docs again...
@@ -72,13 +72,13 @@
 
 
   resp = db.view('foo/view1', {});
-  T(resp.rows.length === 10000);
+  TEquals(10000, resp.rows.length);
 
   resp = db.view('foo/view2', {});
-  T(resp.rows.length === 1);
+  TEquals(1, resp.rows.length);
 
   resp = db.designInfo("_design/foo");
-  T(resp.view_index.update_seq === 30001);
+  TEquals(30001, resp.view_index.update_seq);
 
   var disk_size_before_compact = resp.view_index.disk_size;
   var data_size_before_compact = resp.view_index.data_size;
@@ -97,13 +97,13 @@
 
 
   resp = db.view('foo/view1', {});
-  T(resp.rows.length === 10000);
+  TEquals(10000, resp.rows.length);
 
   resp = db.view('foo/view2', {});
-  T(resp.rows.length === 1);
+  TEquals(1, resp.rows.length);
 
   resp = db.designInfo("_design/foo");
-  T(resp.view_index.update_seq === 30001);
+  TEquals(30001, resp.view_index.update_seq);
   T(resp.view_index.disk_size < disk_size_before_compact);
   TEquals("number", typeof resp.view_index.data_size, "data size is a number");
   T(resp.view_index.data_size < resp.view_index.disk_size, "data size < file size");
diff --git a/script/test/view_include_docs.js b/script/test/view_include_docs.js
index 944c910..dab79b8 100644
--- a/script/test/view_include_docs.js
+++ b/script/test/view_include_docs.js
@@ -33,7 +33,7 @@
         map: "function(doc) {if(doc.link_id) { var value = {'_id':doc.link_id}; if (doc.link_rev) {value._rev = doc.link_rev}; emit(doc._id, value);}};"
       },
       summate: {
-        map:"function (doc) {emit(doc.integer, doc.integer)};",
+        map:"function (doc) { if (typeof doc.integer === 'number') {emit(doc.integer, doc.integer)};}",
         reduce:"function (keys, values) { return sum(values); };"
       }
     }
diff --git a/script/test/view_update_seq.js b/script/test/view_update_seq.js
index 69b8c42..df92b11 100644
--- a/script/test/view_update_seq.js
+++ b/script/test/view_update_seq.js
@@ -31,7 +31,7 @@
         map: "function(doc) { emit(doc.integer, doc.string) }"
       },
       summate: {
-        map:"function (doc) {emit(doc.integer, doc.integer)};",
+        map:"function (doc) { if (typeof doc.integer === 'number') { emit(doc.integer, doc.integer)}; }",
         reduce:"function (keys, values) { return sum(values); };"
       }
     }
@@ -68,12 +68,12 @@
   T(resp.rows.length == 1);
   T(resp.update_seq == 101);
 
-  db.save({"id":"0"});
+  db.save({"id":"0", "integer": 1});
   resp = db.view('test/all_docs', {limit: 1,stale: "ok", update_seq:true});
   T(resp.rows.length == 1);
   T(resp.update_seq == 101);
 
-  db.save({"id":"00"});
+  db.save({"id":"00", "integer": 2});
   resp = db.view('test/all_docs',
     {limit: 1, stale: "update_after", update_seq: true});
   T(resp.rows.length == 1);
@@ -100,7 +100,7 @@
   resp = db.view('test/all_docs',{update_seq:true},["0","1"]);
   T(resp.update_seq == 103);
 
-  resp = db.view('test/summate',{group:true, update_seq:true},["0","1"]);
-  T(resp.update_seq == 103);
+  resp = db.view('test/summate',{group:true, update_seq:true},[0,1]);
+  TEquals(103, resp.update_seq);
 
 };
