diff --git a/server/handlers/subscription_handler.coffee b/server/handlers/subscription_handler.coffee
index a37f600f1..a01421404 100644
--- a/server/handlers/subscription_handler.coffee
+++ b/server/handlers/subscription_handler.coffee
@@ -433,9 +433,9 @@ class SubscriptionHandler extends Handler
       productName = "#{user.get('country')}_basic_subscription"
 
     Product.findOne({name: productName}).exec (err, product) =>
-      return @sendDatabaseError(res, err) if err
-      return @sendNotFoundError(res, 'basic_subscription product not found') if not product
-
+      return done({res: 'Database error.', code: 500}) if err
+      return done({res: 'basic_subscription product not found.', code: 404}) if not product
+      
       if increment
         purchased = _.clone(user.get('purchased'))
         purchased ?= {}
diff --git a/server/routes/index.coffee b/server/routes/index.coffee
index 08a8552cb..5e9bff30f 100644
--- a/server/routes/index.coffee
+++ b/server/routes/index.coffee
@@ -1,7 +1,7 @@
 mw = require '../middleware'
 
 module.exports.setup = (app) ->
-
+  
   passport = require('passport')
   app.post('/auth/login', passport.authenticate('local'), mw.auth.afterLogin)
   app.post('/auth/login-facebook', mw.auth.loginByFacebook, mw.auth.afterLogin)
@@ -14,6 +14,8 @@ module.exports.setup = (app) ->
   app.get('/auth/unsubscribe', mw.auth.unsubscribe)
   app.get('/auth/whoami', mw.auth.whoAmI)
 
+  app.all('/db/*', mw.auth.checkHasUser())
+  
   Achievement = require '../models/Achievement'
   app.get('/db/achievement', mw.achievements.fetchByRelated, mw.rest.get(Achievement))
   app.post('/db/achievement', mw.auth.checkHasPermission(['admin', 'artisan']), mw.rest.post(Achievement))
@@ -28,7 +30,7 @@ module.exports.setup = (app) ->
 
   Article = require '../models/Article'
   app.get('/db/article', mw.rest.get(Article))
-  app.post('/db/article', mw.auth.checkHasPermission(['admin', 'artisan']), mw.rest.post(Article))
+  app.post('/db/article', mw.auth.checkLoggedIn(), mw.auth.checkHasPermission(['admin', 'artisan']), mw.rest.post(Article))
   app.get('/db/article/names', mw.named.names(Article))
   app.post('/db/article/names', mw.named.names(Article))
   app.get('/db/article/:handle', mw.rest.getByHandle(Article))
@@ -65,7 +67,7 @@ module.exports.setup = (app) ->
   app.get('/db/classroom/:handle', mw.auth.checkLoggedIn()) # TODO: Finish migrating route, adding now so 401 is returned
 
   CodeLog = require ('../models/CodeLog')
-  app.post('/db/codelogs', mw.auth.checkHasUser(), mw.codelogs.post)
+  app.post('/db/codelogs', mw.codelogs.post)
   app.get('/db/codelogs', mw.auth.checkHasPermission(['admin']), mw.rest.get(CodeLog))
 
   Course = require '../models/Course'
@@ -86,7 +88,7 @@ module.exports.setup = (app) ->
   app.post('/db/user/:userID/request-verify-email', mw.users.sendVerificationEmail)
   app.post('/db/user/:userID/verify/:verificationCode', mw.users.verifyEmailAddress) # TODO: Finalize URL scheme
   
-  app.get('/db/level/:handle/session', mw.auth.checkHasUser(), mw.levels.upsertSession)
+  app.get('/db/level/:handle/session', mw.levels.upsertSession)
   
   app.get('/db/prepaid', mw.auth.checkLoggedIn(), mw.prepaids.fetchByCreator)
   app.post('/db/prepaid', mw.auth.checkHasPermission(['admin']), mw.prepaids.post)
diff --git a/spec/helpers/helper.js b/spec/helpers/helper.js
index a0135dafb..09be41fa3 100644
--- a/spec/helpers/helper.js
+++ b/spec/helpers/helper.js
@@ -76,6 +76,18 @@ beforeEach(function(done) {
         cb(err);
       });
     },
+    function(cb) {
+      // Initialize products
+      var utils = require('../server/utils');
+      request = require('../server/request');
+      utils.initUser()
+        .then(function (user) {
+          return utils.loginUser(user, {request: request})
+        })
+        .then(function () {
+          cb()
+        });
+    },    
     function(cb) {
       // Initialize products
       request = require('../server/request');
diff --git a/spec/server/functional/article.spec.coffee b/spec/server/functional/article.spec.coffee
index 3d634dedc..5a5fb1c4a 100644
--- a/spec/server/functional/article.spec.coffee
+++ b/spec/server/functional/article.spec.coffee
@@ -17,7 +17,7 @@ describe 'GET /db/article', ->
     yield utils.loginUser(@admin)
     yield request.postAsync(getURL('/db/article'), { json: articleData1 })
     yield request.postAsync(getURL('/db/article'), { json: articleData2 })
-    yield utils.logout()
+    yield utils.becomeAnonymous()
     done()
       
       
@@ -194,7 +194,7 @@ describe 'POST /db/article', ->
     
   it 'does not allow anonymous users to create Articles', utils.wrap (done) ->
     yield utils.clearModels([Article])
-    yield utils.logout()
+    yield utils.becomeAnonymous()
     [res, body] = yield request.postAsync({uri: getURL('/db/article'), json: articleData })
     expect(res.statusCode).toBe(401)
     done()
@@ -451,7 +451,7 @@ describe 'POST /db/article/:handle/new-version', ->
 
 
   it 'does not work for anonymous users', utils.wrap (done) ->
-    yield utils.logout()
+    yield utils.becomeAnonymous()
     yield postNewVersion({ name: 'Article name', body: 'New body' }, 401)
     articles = yield Article.find()
     expect(articles.length).toBe(1)
@@ -580,7 +580,7 @@ describe 'GET and POST /db/article/:handle/names', ->
     yield utils.loginUser(admin)
     [res, article1] = yield request.postAsync(getURL('/db/article'), { json: articleData1 })
     [res, article2] = yield request.postAsync(getURL('/db/article'), { json: articleData2 })
-    yield utils.logout()
+    yield utils.becomeAnonymous()
     [res, body] = yield request.getAsync { uri: getURL('/db/article/names?ids='+[article1._id, article2._id].join(',')), json: true }
     expect(body.length).toBe(2)
     expect(body[0].name).toBe('Article 1')
@@ -679,4 +679,4 @@ describe 'DELETE /db/article/:handle/watchers', ->
     article = yield Article.findById(article._id)
     ids = (id.toString() for id in article.get('watchers'))
     expect(_.contains(ids, user.id)).toBe(false)
-    done()
\ No newline at end of file
+    done()
diff --git a/spec/server/functional/clan.spec.coffee b/spec/server/functional/clan.spec.coffee
index d4c4149b2..5a1f06c11 100644
--- a/spec/server/functional/clan.spec.coffee
+++ b/spec/server/functional/clan.spec.coffee
@@ -1,9 +1,9 @@
 config = require '../../../server_config'
 require '../common'
-utils = require '../../../app/core/utils' # Must come after require /common
 Clan = require '../../../server/models/Clan'
 User = require '../../../server/models/User'
 request = require '../request'
+utils = require '../utils'
 
 describe 'Clans', ->
   clanURL = getURL('/db/clan')
@@ -53,7 +53,7 @@ describe 'Clans', ->
           done()
 
     it 'Anonymous create clan 401', (done) ->
-      logoutUser ->
+      utils.logout().then ->
         requestBody =
           type: 'public'
           name: createClanName 'myclan'
@@ -152,7 +152,7 @@ describe 'Clans', ->
       loginNewUser (user1) ->
         createClan user1, 'public', null, (clan1) ->
           createClan user1, 'public', null, (clan2) ->
-            logoutUser ->
+            utils.becomeAnonymous().then ->
               request.get {uri: "#{clanURL}/-/public" }, (err, res, body) ->
                 expect(err).toBeNull()
                 expect(res.statusCode).toBe(200)
@@ -498,7 +498,7 @@ describe 'Clans', ->
         user1.save (err) ->
           expect(err).toBeNull()
           createClan user1, 'private', 'my private clan', (clan1) ->
-            logoutUser ->
+            utils.becomeAnonymous().then ->
               request.get {uri: "#{clanURL}/#{clan1.id}" }, (err, res, body) ->
                 expect(err).toBeNull()
                 expect(res.statusCode).toBe(200)
diff --git a/spec/server/functional/courses.spec.coffee b/spec/server/functional/courses.spec.coffee
index ee963be6c..f56264334 100644
--- a/spec/server/functional/courses.spec.coffee
+++ b/spec/server/functional/courses.spec.coffee
@@ -23,6 +23,7 @@ describe 'GET /db/course', ->
     yield utils.clearModels([Course, User])
     yield new Course({ name: 'Course 1' }).save()
     yield new Course({ name: 'Course 2' }).save()
+    yield utils.becomeAnonymous()
     done()
 
 
@@ -36,6 +37,7 @@ describe 'GET /db/course/:handle', ->
   beforeEach utils.wrap (done) ->
     yield utils.clearModels([Course, User])
     @course = yield new Course({ name: 'Some Name' }).save()
+    yield utils.becomeAnonymous()
     done()
 
 
diff --git a/spec/server/functional/prepaid.spec.coffee b/spec/server/functional/prepaid.spec.coffee
index 4baacae41..9aaf1fc6d 100644
--- a/spec/server/functional/prepaid.spec.coffee
+++ b/spec/server/functional/prepaid.spec.coffee
@@ -544,7 +544,7 @@ describe '/db/prepaid', ->
       logoutUser () ->
         fetchPrepaid joeCode, (err, res) ->
           expect(err).toBeNull()
-          expect(res.statusCode).toEqual(403)
+          expect(res.statusCode).toEqual(401)
           done()
 
     it 'User can fetch a prepaid code', (done) ->
diff --git a/spec/server/functional/user.spec.coffee b/spec/server/functional/user.spec.coffee
index ea3bf026e..9926251f1 100644
--- a/spec/server/functional/user.spec.coffee
+++ b/spec/server/functional/user.spec.coffee
@@ -39,7 +39,7 @@ describe 'POST /db/user', ->
 
   it 'serves the user through /db/user/id', (done) ->
     unittest.getNormalJoe (user) ->
-      request.post getURL('/auth/logout'), ->
+      utils.becomeAnonymous().then ->
         url = getURL(urlUser+'/'+user._id)
         request.get url, (err, res, body) ->
           expect(res.statusCode).toBe(200)