diff --git a/.gitignore b/.gitignore
index 3c3629e..c727bb7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
 node_modules
+.idea
+.DS_Store
diff --git a/README.md b/README.md
index 55637e6..9e0f2f8 100644
--- a/README.md
+++ b/README.md
@@ -313,16 +313,16 @@
 })
 ```
 
-### authFallback
+### authMode
 
-Auth-fallback defines what the client should do when a user token is not present. By default, `Usergrid.authFallback` is set to `UsergridAuth.AUTH_FALLBACK_NONE`, whereby when a token is *not* present, an API call will be performed unauthenticated. If instead `Usergrid.authFallback` is set to `UsergridAuth.AUTH_FALLBACK_APP`, the API call will instead be performed using client credentials, _if_ they're available (i.e. `authenticateApp()` was performed at some point). 
+Auth-mode defines what the client should do when a user token is not present. By default, `Usergrid.authMode` is set to `UsergridAuth.AUTH_MODE_NONE`, whereby when a token is *not* present, an API call will be performed unauthenticated. If instead `Usergrid.authMode` is set to `UsergridAuth.AUTH_MODE_APP`, the API call will instead be performed using client credentials, _if_ they're available (i.e. `authenticateApp()` was performed at some point). 
 
 ### usingAuth()
 
 At times it is desireable to have complete, granular control over the authentication context of an API call. To facilitate this, the passthrough function `.usingAuth()` allows you to pre-define the auth context of the next API call.
 
 ```js
-// assume Usergrid.authFallback = UsergridAuth.AUTH_FALLBACK_NONE
+// assume Usergrid.authMode = UsergridAuth.AUTH_MODE_NONE
     
 Usergrid.usingAuth(Usergrid.appAuth).POST('roles/guest/permissions', {
     permission: "get,post,put,delete:/**"
diff --git a/config.sample.json b/config.sample.json
index a15a6a5..4e6cfa9 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -1,6 +1,6 @@
 {
     "appId": "yourAppId",
-    "authFallback": "NONE",
+    "authMode": "NONE",
     "baseUrl": "https://api.usergrid.com",
     "clientId": "yourClientId",
     "clientSecret": "yourClientSecret",
diff --git a/examples/api-proxy/config/usergrid.example.json b/examples/api-proxy/config/usergrid.example.json
index 5d13860..36baab8 100644
--- a/examples/api-proxy/config/usergrid.example.json
+++ b/examples/api-proxy/config/usergrid.example.json
@@ -1,7 +1,7 @@
 {
     "appId": "sandbox",
     "orgId": "brandon.apigee",
-    "authFallback": "NONE",
+    "authMode": "NONE",
     "baseUrl": "https://api.usergrid.com",
     "clientId": "YXA6GXSAACS2EeOYd20aP4G6Lw",
     "clientSecret": "YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw"
diff --git a/helpers/build.js b/helpers/build.js
index 3697fee..ca5ed43 100644
--- a/helpers/build.js
+++ b/helpers/build.js
@@ -23,12 +23,11 @@
     UsergridAsset = require('../lib/asset'),
     util = require('util'),
     version = require('../package.json').version,
-    ok = require('objectkit'),
     _ = require('lodash')
 
 var assignPrefabOptions = function(args) {
     // if a preformatted options argument passed, assign it to options
-    if (_.isObject(args[0]) && !_.isFunction(args[0]) && ok(this).has("method")) {
+    if (_.isObject(args[0]) && !_.isFunction(args[0]) && _.has(this,"method")) {
         _.assign(this, args[0])
     }
     return this
@@ -45,7 +44,7 @@
 }
 
 var setAsset = function(args) {
-    this.asset = _.first([this.asset, ok(this).getIfExists('entity.asset'), args[1], args[0]].filter(function(property) {
+    this.asset = _.first([this.asset, _.get(this,'entity.asset'), args[1], args[0]].filter(function(property) {
         return (property instanceof UsergridAsset)
     }))
     return this
@@ -56,12 +55,12 @@
         this.uuidOrName,
         this.uuid,
         this.name,
-        ok(this).getIfExists('entity.uuid'),
-        ok(this).getIfExists('body.uuid'),
-        ok(this).getIfExists('entity.name'),
-        ok(this).getIfExists('body.name'),
-        ok(args).getIfExists('2'),
-        ok(args).getIfExists('1')
+        _.get(this,'entity.uuid'),
+        _.get(this,'body.uuid'),
+        _.get(this,'entity.name'),
+        _.get(this,'body.name'),
+        _.get(args,'2'),
+        _.get(args,'1')
     ].filter(_.isString))
     return this
 }
@@ -69,10 +68,10 @@
 var setPathOrType = function(args) {
     var pathOrType = _.first([
         this.type,
-        ok(args).getIfExists('0._type'),
-        ok(this).getIfExists('entity.type'),
-        ok(this).getIfExists('body.type'),
-        ok(this).getIfExists('body.0.type'),
+        _.get(args,'0._type'),
+        _.get(this,'entity.type'),
+        _.get(this,'body.type'),
+        _.get(this,'body.0.type'),
         _.isArray(args) ? args[0] : undefined
     ].filter(_.isString))
     this[(/\//.test(pathOrType)) ? 'path' : 'type'] = pathOrType
@@ -114,8 +113,8 @@
                 options.uuidOrName,
                 options.uuid,
                 options.name,
-                ok(options).getIfExists('entity.uuid'),
-                ok(options).getIfExists('entity.name'),
+                _.get(options,'entity.uuid'),
+                _.get(options,'entity.name'),
                 ""
             ].filter(_.isString)) : ""
         )
@@ -124,28 +123,31 @@
         var headers = {
             'User-Agent': util.format("usergrid-nodejs/v%s", version)
         }
+
         _.assign(headers, options.headers)
+
         var token
-        if (ok(client).getIfExists('tempAuth') === UsergridAuth.NO_AUTH) {
+        var clientTempAuth = _.get(client,"tempAuth")
+        if( !_.isUndefined(clientTempAuth) ) {
+            if( clientTempAuth !== UsergridAuth.NO_AUTH && clientTempAuth.isValid ) {
+                token = client.tempAuth.token;
+            }
             client.tempAuth = undefined
         } else {
-            if (ok(client).getIfExists('tempAuth.isValid')) {
-                // if ad-hoc authentication was set in the client, get the token and destroy the auth
-                token = client.tempAuth.token
-                client.tempAuth = undefined
-            } else if (ok(client).getIfExists('currentUser.auth.isValid')) {
-                // defaults to using the current user's token
-                token = client.currentUser.auth.token
-            } else if (ok(client).getIfExists('authFallback') === UsergridAuth.AUTH_FALLBACK_APP && ok(client).getIfExists('appAuth.isValid')) {
-                // if auth-fallback is set to APP request will make a call using the application token
-                token = client.appAuth.token
-            }
-            if (token) {
-                _.assign(headers, {
-                    authorization: util.format("Bearer %s", token)
-                })
+            var clientAuthMode = _.get(client,"authMode");
+            if( _.get(client,"currentUser.auth.isValid") && clientAuthMode === UsergridAuth.AUTH_MODE_USER ) {
+                token = client.currentUser.auth.token;
+            } else if( _.get(client,"appAuth.isValid") && clientAuthMode === UsergridAuth.AUTH_MODE_APP ) {
+                token = client.appAuth.token;
             }
         }
+
+        if (token) {
+            _.assign(headers, {
+                authorization: util.format("Bearer %s", token)
+            })
+        }
+
         return headers
     },
     userLoginBody: function(options) {
@@ -457,16 +459,16 @@
         } : options.qs
     },
     formData: function(options) {
-        if (ok(options).getIfExists('asset.data')) {
+        if (_.get(options,'asset.data')) {
             var formData = {}
             formData.file = {
                 value: options.asset.data,
                 options: {
-                    filename: ok(options).getIfExists('asset.filename') || UsergridAsset.DEFAULT_FILE_NAME,
-                    contentType: ok(options).getIfExists('asset.contentType') || 'application/octet-stream'
+                    filename: _.get(options,'asset.filename') || UsergridAsset.DEFAULT_FILE_NAME,
+                    contentType: _.get(options,'asset.contentType') || 'application/octet-stream'
                 }
             } 
-            if (ok(options).has('asset.name')) {
+            if (_.has(options,'asset.name')) {
                 formData.name = options.asset.name
             }
             return formData
diff --git a/helpers/cb.js b/helpers/cb.js
index 109ef27..e26076d 100644
--- a/helpers/cb.js
+++ b/helpers/cb.js
@@ -14,11 +14,11 @@
 
 'use strict'
 
-var ok = require('objectkit'),
-    _ = require('lodash')
+var _ = require('lodash')
 
 module.exports = function() {
-    var args = _.flattenDeep(Array.prototype.slice.call(arguments))
+    var args = _.flattenDeep(Array.prototype.slice.call(arguments)).reverse()
     var emptyFunc = function() {}
-    return _.first(_.flattenDeep([args.reverse(), ok(args).getIfExists('0.callback'), emptyFunc]).filter(_.isFunction))
+    return _.first(_.flattenDeep([args, _.get(args,'0.callback'), emptyFunc]).filter(_.isFunction))
+
 }
\ No newline at end of file
diff --git a/helpers/mutability.js b/helpers/mutability.js
index b948d2b..0ad058b 100644
--- a/helpers/mutability.js
+++ b/helpers/mutability.js
@@ -14,8 +14,7 @@
 
 'use strict'
 
-var ok = require('objectkit'),
-    _ = require('lodash')
+var _ = require('lodash')
 
 module.exports = {
     setReadOnly: function(obj, key) {
@@ -27,7 +26,7 @@
             return Object.freeze(obj[key])
         } else if (_.isPlainObject(obj) && key === undefined) {
             return Object.freeze(obj)
-        } else if (ok(obj).has(key)) {
+        } else if (_.has(obj,key)) {
             return Object.defineProperty(obj, key, {
                 writable: false
             })
@@ -45,7 +44,7 @@
             return _.clone(obj[key])
         } else if (_.isPlainObject(obj) && key === undefined) {
             return _.clone(obj)
-        } else if (ok(obj).has(key)) {
+        } else if (_.has(obj,key)) {
             return Object.defineProperty(obj, key, {
                 writable: true
             })
diff --git a/lib/asset.js b/lib/asset.js
index 681db0c..a054075 100644
--- a/lib/asset.js
+++ b/lib/asset.js
@@ -14,13 +14,10 @@
 
 'use strict'
 
-var Usergrid = require('../usergrid'),
-    readChunk = require('read-chunk'),
-    fileType = require('file-type'),
+var fileType = require('file-type'),
     helpers = require('../helpers'),
     stream = require('stream'),
     util = require('util'),
-    ok = require('objectkit'),
     _ = require('lodash')
 
 var UsergridAsset = function() {
diff --git a/lib/auth.js b/lib/auth.js
index d3872d8..06ef684 100644
--- a/lib/auth.js
+++ b/lib/auth.js
@@ -61,11 +61,15 @@
 
 module.exports = UsergridAuth
 
-Object.defineProperty(module.exports, 'AUTH_FALLBACK_APP', {
+Object.defineProperty(module.exports, 'AUTH_MODE_APP', {
     enumerable: false,
     get: function() { return "APP" }
 })
-Object.defineProperty(module.exports, 'AUTH_FALLBACK_NONE', {
+Object.defineProperty(module.exports, 'AUTH_MODE_USER', {
+    enumerable: false,
+    get: function() { return "USER" }
+})
+Object.defineProperty(module.exports, 'AUTH_MODE_NONE', {
     enumerable: false,
     get: function() { return "NONE" }
 })
diff --git a/lib/client.js b/lib/client.js
index f022793..84d6fdf 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -16,16 +16,13 @@
 
 var helpers = require('../helpers'),
     UsergridRequest = require('./request'),
-    UsergridResponse = require('./response'),
-    UsergridResponseError = require('./responseError'),
     UsergridAuth = require('./auth'),
     UsergridAppAuth = require('./appAuth'),
-    UsergridUserAuth = require('./userAuth'),
     _ = require('lodash')
 
 var defaultOptions = {
     baseUrl: 'https://api.usergrid.com',
-    authFallback: UsergridAuth.AUTH_FALLBACK_NONE
+    authMode: UsergridAuth.AUTH_MODE_NONE
 }
 
 var UsergridClient = function(options) {
@@ -65,7 +62,9 @@
         set: function(options) {
             if (options instanceof UsergridAppAuth) {
                 __appAuth = options
-            } else if (typeof options !== "undefined") {
+            } else if( _.isUndefined(options) ) {
+                __appAuth = undefined
+            } else {
                 __appAuth = new UsergridAppAuth(options)
             }
         }
@@ -106,7 +105,7 @@
     authenticateApp: function(options) {
         var self = this
         var callback = helpers.cb(helpers.args(arguments))
-        console.log(self.appAuth)//, self.appAuth, new UsergridAppAuth(options), new UsergridAppAuth(self.clientId, self.clientSecret))
+        // console.log(self.appAuth)//, self.appAuth, new UsergridAppAuth(options), new UsergridAppAuth(self.clientId, self.clientSecret))
         var auth = _.first([options, self.appAuth, new UsergridAppAuth(options), new UsergridAppAuth(self.clientId, self.clientSecret)].filter(function(p) {
             return p instanceof UsergridAppAuth
         }))
diff --git a/lib/entity.js b/lib/entity.js
index eda1086..ef83770 100644
--- a/lib/entity.js
+++ b/lib/entity.js
@@ -14,11 +14,9 @@
 
 'use strict'
 
-var Usergrid = require('../usergrid'),
-    UsergridRequest = require('./request'),
+var UsergridRequest = require('./request'),
     UsergridAsset = require('./asset'),
     helpers = require('../helpers'),
-    ok = require('objectkit'),
     _ = require('lodash')
 
 function updateEntityFromRemote(usergridResponse) {
@@ -35,11 +33,16 @@
         throw new Error('A UsergridEntity object cannot be initialized without passing one or more arguments')
     }
 
-    if (_.isPlainObject(args[0])) {
-        _.assign(self, args[0])
+    var firstArg = args[0]
+    if (_.isPlainObject(firstArg) || firstArg instanceof UsergridEntity ) {
+        _.assign(self, args[0]);
     } else {
-        self.type = _.isString(args[0]) ? args[0] : undefined
-        self.name = _.isString(args[1]) ? args[1] : undefined
+        if( !self.type ) {
+            self.type = _.isString(args[0]) ? args[0] : undefined;
+        }
+        if( !self.name ) {
+            self.name = _.isString(args[1]) ? args[1] : undefined;
+        }
     }
 
     if (!_.isString(self.type)) {
@@ -60,7 +63,7 @@
 
     Object.defineProperty(self, 'hasAsset', {
         get: function() {
-            return ok(self).has(['file', 'file-metadata'])
+            return _.has(self,'file-metadata')
         }
     })
 
@@ -159,7 +162,7 @@
         var callback = helpers.cb(args)
         var self = this
 
-        if (ok(self).has('asset.contentType')) {
+        if (_.has(self,'asset.contentType')) {
             var options = {
                 client: client,
                 entity: self,
diff --git a/lib/request.js b/lib/request.js
index 70bb851..ba3d573 100644
--- a/lib/request.js
+++ b/lib/request.js
@@ -17,9 +17,6 @@
 var request = require('request'),
     helpers = require('../helpers'),
     UsergridResponse = require('../lib/response'),
-    UsergridQuery = require('../lib/query'),
-    UsergridAsset = require('../lib/asset'),
-    ok = require('objectkit'),
     _ = require('lodash')
 
 var UsergridRequest = function(options) {
diff --git a/lib/response.js b/lib/response.js
index b2f6fd4..9be05e0 100644
--- a/lib/response.js
+++ b/lib/response.js
@@ -14,8 +14,7 @@
 
 'use strict'
 
-var ok = require('objectkit'),
-    UsergridQuery = require('./query'),
+var UsergridQuery = require('./query'),
     UsergridResponseError = require('./responseError'),
     helpers = require('../helpers'),
     _ = require('lodash')
@@ -32,7 +31,7 @@
         
         _.assign(self, response)
 
-        if (ok(response.body).has('entities')) {
+        if (_.has(response,'body.entities')) {
             var entities = response.body.entities.map(function(en) {
                 var entity = new UsergridEntity(en)
                 if (entity.isUser) {
@@ -48,14 +47,14 @@
             self.first = _.first(entities) || undefined
             self.entity = self.first
             self.last = _.last(entities) || undefined   
-            if (ok(self).getIfExists('metadata.path') === '/users') {
+            if (_.get(self,'metadata.path') === '/users') {
                 self.user = self.first
                 self.users = self.entities
             }
 
             Object.defineProperty(self, 'hasNextPage', {
                 get: function() {
-                    return ok(self).has('metadata.cursor')
+                    return _.has(self,'metadata.cursor')
                 }
             })
 
diff --git a/lib/responseError.js b/lib/responseError.js
index 38df35c..4471bbd 100644
--- a/lib/responseError.js
+++ b/lib/responseError.js
@@ -14,10 +14,10 @@
 
 'use strict'
 
-var ok = require('objectkit')
+var _ = require('lodash')
 
 var UsergridResponseError = function(responseErrorObject) {
-    if (ok(responseErrorObject).has('error') === false) {
+    if (_.get(responseErrorObject,'error') === false) {
         return
     }
     this.name = responseErrorObject.error
diff --git a/lib/user.js b/lib/user.js
index e9e6d15..fee89a1 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -19,15 +19,13 @@
     UsergridUserAuth = require('./userAuth'),
     UsergridRequest = require('./request'),
     UsergridClient = require('../lib/client'),
-    UsergridResponseError = require('./responseError'),
     helpers = require('../helpers'),
-    ok = require('objectkit'),
     util = require('util'),
     _ = require('lodash')
 
 var UsergridUser = function(obj) {
 
-    if (!ok(obj).has('email') && !ok(obj).has('username')) {
+    if (!_.has(obj,'email') && !_.has(obj,'username')) {
         // This is not a user entity
         throw new Error('"email" or "username" property is required when initializing a UsergridUser object')
     }
diff --git a/package.json b/package.json
index a07c150..a292f36 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,6 @@
     "lodash": "~4.0",
     "lodash-inflection": "latest",
     "lodash-uuid": "latest",
-    "objectkit": "latest",
     "read-chunk": "^1.0.1",
     "request": "latest",
     "url-join": "latest",
diff --git a/tests/lib/asset.test.js b/tests/lib/asset.test.js
index a25c494..2220d07 100644
--- a/tests/lib/asset.test.js
+++ b/tests/lib/asset.test.js
@@ -1,7 +1,6 @@
 'use strict'
 
 var should = require('should'),
-    urljoin = require('url-join'),
     config = require('../../helpers').config,
     UsergridEntity = require('../../lib/entity'),
     UsergridAsset = require('../../lib/asset'),
diff --git a/tests/lib/client.auth.test.js b/tests/lib/client.auth.test.js
index ad33987..ab9f0d0 100644
--- a/tests/lib/client.auth.test.js
+++ b/tests/lib/client.auth.test.js
@@ -2,12 +2,9 @@
 
 var should = require('should'),
     chance = new require('chance').Chance(),
-    urljoin = require('url-join'),
     util = require('util'),
     config = require('../../helpers').config,
     UsergridClient = require('../../lib/client'),
-    UsergridEntity = require('../../lib/entity'),
-    UsergridQuery = require('../../lib/query'),
     UsergridAuth = require('../../lib/auth'),
     UsergridAppAuth = require('../../lib/appAuth'),
     UsergridUserAuth = require('../../lib/userAuth'),
@@ -18,7 +15,7 @@
     _slow = 500,
     _timeout = 4000
 
-describe('authFallback', function() {
+describe('authMode', function() {
 
     this.slow(_slow)
     this.timeout(_timeout)
@@ -38,8 +35,8 @@
         })
     })
 
-    it('should fall back to using no authentication when currentUser is not authenticated and authFallback is set to NONE', function(done) {
-        client.authFallback = UsergridAuth.AUTH_FALLBACK_NONE
+    it('should fall back to using no authentication when currentUser is not authenticated and authMode is set to NONE', function(done) {
+        client.authMode = UsergridAuth.AUTH_MODE_NONE
         client.GET('users', function(error, usergridResponse) {
             should(client.currentUser).be.undefined()
             usergridResponse.request.headers.should.not.have.property('authorization')
@@ -49,8 +46,8 @@
         })
     })
 
-    it('should fall back to using the app token when currentUser is not authenticated and authFallback is set to APP', function(done) {
-        client.authFallback = UsergridAuth.AUTH_FALLBACK_APP
+    it('should fall back to using the app token when currentUser is not authenticated and authMode is set to APP', function(done) {
+        client.authMode = UsergridAuth.AUTH_MODE_APP
         client.GET('users', function(error, usergridResponse, user) {
             should(client.currentUser).be.undefined()
             usergridResponse.request.headers.should.have.property('authorization').equal(util.format('Bearer %s', token))
@@ -62,7 +59,7 @@
 
     after(function(done) {
         // re-add sandbox permissions
-        client.authFallback = UsergridAuth.AUTH_FALLBACK_NONE
+        client.authMode = UsergridAuth.AUTH_MODE_NONE
         client.usingAuth(client.appAuth).POST('roles/guest/permissions', {
             permission: "get,post,put,delete:/**"
         }, function(error, usergridResponse) {
@@ -136,10 +133,8 @@
 
     it('should not set client.appAuth when authenticating with a bad clientId and clientSecret in an object', function(done) {
         var failClient = new UsergridClient()
-        failClient.authenticateApp({
-            clientId: 'BADCLIENTID',
-            clientSecret: 'BADCLIENTSECRET'
-        }, function(e, r, token) {
+        failClient.appAuth = undefined
+        failClient.authenticateApp(new UsergridAppAuth('BADCLIENTID', 'BADCLIENTSECRET'), function(e, r, token) {
             e.should.containDeep({
                 name: 'invalid_grant',
                 description: 'invalid username or password'
@@ -152,10 +147,8 @@
 
     it('should not set client.appAuth when authenticating with a bad UsergridAppAuth instance (using an object)', function(done) {
         var failClient = new UsergridClient()
-        failClient.authenticateApp(new UsergridAppAuth({
-            clientId: 'BADCLIENTID',
-            clientSecret: 'BADCLIENTSECRET'
-        }), function(e, r, token) {
+        failClient.appAuth = undefined
+        failClient.authenticateApp(new UsergridAppAuth('BADCLIENTID', 'BADCLIENTSECRET'), function(e, r, token) {
             e.should.containDeep({
                 name: 'invalid_grant',
                 description: 'invalid username or password'
@@ -169,6 +162,7 @@
 
     it('should not set client.appAuth when authenticating with a bad UsergridAppAuth instance (using arguments)', function(done) {
         var failClient = new UsergridClient()
+        failClient.appAuth = undefined
         failClient.authenticateApp(new UsergridAppAuth('BADCLIENTID', 'BADCLIENTSECRET'), function(e, r, token) {
             e.should.containDeep({
                 name: 'invalid_grant',
diff --git a/tests/lib/client.connections.test.js b/tests/lib/client.connections.test.js
index a3b03e4..98dcc68 100644
--- a/tests/lib/client.connections.test.js
+++ b/tests/lib/client.connections.test.js
@@ -6,8 +6,6 @@
     UsergridClient = require('../../lib/client'),
     UsergridEntity = require('../../lib/entity'),
     UsergridQuery = require('../../lib/query'),
-    UsergridAuth = require('../../lib/auth'),
-    UsergridAppAuth = require('../../lib/appAuth'),
     _ = require('lodash')
 
 var _uuid,
@@ -48,7 +46,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -68,7 +66,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -88,7 +86,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -108,7 +106,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -132,7 +130,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[options.relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     options.relationship,
@@ -176,7 +174,7 @@
 
         client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                "/",
+                "",
                 config.test.collection,
                 entity1.uuid,
                 relationship,
@@ -196,7 +194,7 @@
 
         client.getConnections(UsergridClient.Connections.DIRECTION_IN, entity2, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
-                "/",
+                "",
                 config.test.collection,
                 entity2.uuid,
                 "connecting",
diff --git a/tests/lib/client.init.test.js b/tests/lib/client.init.test.js
index 827863f..f1572d4 100644
--- a/tests/lib/client.init.test.js
+++ b/tests/lib/client.init.test.js
@@ -4,10 +4,6 @@
     urljoin = require('url-join'),
     config = require('../../helpers').config,
     UsergridClient = require('../../lib/client'),
-    UsergridEntity = require('../../lib/entity'),
-    UsergridQuery = require('../../lib/query'),
-    UsergridAuth = require('../../lib/auth'),
-    UsergridAppAuth = require('../../lib/appAuth'),
     _ = require('lodash')
 
 describe('initialization', function() {
diff --git a/tests/lib/client.rest.test.js b/tests/lib/client.rest.test.js
index e67cfef..8636198 100644
--- a/tests/lib/client.rest.test.js
+++ b/tests/lib/client.rest.test.js
@@ -1,14 +1,11 @@
 'use strict'
 
 var should = require('should'),
-    urljoin = require('url-join'),
     config = require('../../helpers').config,
     chance = new require('chance').Chance(),
     UsergridClient = require('../../lib/client'),
     UsergridEntity = require('../../lib/entity'),
     UsergridQuery = require('../../lib/query'),
-    UsergridAuth = require('../../lib/auth'),
-    UsergridAppAuth = require('../../lib/appAuth'),
     _ = require('lodash')
 
 var _uuid,
diff --git a/tests/lib/entity.test.js b/tests/lib/entity.test.js
index 86fc63d..c5018c8 100644
--- a/tests/lib/entity.test.js
+++ b/tests/lib/entity.test.js
@@ -450,7 +450,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -470,7 +470,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -490,7 +490,7 @@
             usergridResponse.ok.should.be.true()
             client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                    "/",
+                    "",
                     config.test.collection,
                     entity1.uuid,
                     relationship,
@@ -534,7 +534,7 @@
 
         entity1.getConnections(client, UsergridClient.Connections.DIRECTION_OUT, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
-                "/",
+                "",
                 config.test.collection,
                 entity1.uuid,
                 relationship,
@@ -554,7 +554,7 @@
 
         entity2.getConnections(client, UsergridClient.Connections.DIRECTION_IN, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
-                "/",
+                "",
                 config.test.collection,
                 entity2.uuid,
                 "connecting",
diff --git a/tests/lib/query.test.js b/tests/lib/query.test.js
index 65f9c1a..adbfab2 100644
--- a/tests/lib/query.test.js
+++ b/tests/lib/query.test.js
@@ -35,7 +35,7 @@
 describe('_ql', function() {
     it('should equal \'select *\' if query or sort are empty or underfined', function() {
         var query = new UsergridQuery('cats')
-        query.should.have.property('_ql').equal('select * ')
+        query.should.have.property('_ql').equal('select *')
     })
 
     it('should support complex builder pattern syntax (chained constructor methods)', function() {
diff --git a/tests/lib/response.test.js b/tests/lib/response.test.js
index cb680c5..f507559 100644
--- a/tests/lib/response.test.js
+++ b/tests/lib/response.test.js
@@ -6,7 +6,6 @@
     UsergridEntity = require('../../lib/entity'),
     UsergridUser = require('../../lib/user'),
     UsergridQuery = require('../../lib/query'),
-    UsergridResponse = require('../../lib/response'),
     UsergridResponseError = require('../../lib/responseError'),
     _ = require('lodash')
 
diff --git a/tests/lib/responseError.test.js b/tests/lib/responseError.test.js
index 6e0c3c9..f746279 100644
--- a/tests/lib/responseError.test.js
+++ b/tests/lib/responseError.test.js
@@ -30,7 +30,7 @@
 
     it('response.error should be a UsergridResponseError object with name, description, and exception keys', function() {
         _response.ok.should.be.false()
-        _response.error.should.be.an.instanceof(UsergridResponseError).with.keys(['name', 'description', 'exception'])
+        _response.error.should.be.an.instanceof(UsergridResponseError).with.properties(['name', 'description', 'exception'])
     })
 })
 
diff --git a/tests/lib/user.test.js b/tests/lib/user.test.js
index 8d96e71..28bb2c3 100644
--- a/tests/lib/user.test.js
+++ b/tests/lib/user.test.js
@@ -3,7 +3,6 @@
 var should = require('should'),
     util = require('util'),
     chance = new require('chance').Chance(),
-    urljoin = require('url-join'),
     config = require('../../helpers').config,
     UsergridClient = require('../../lib/client'),
     UsergridUser = require('../../lib/user'),
