diff --git a/helpers/build.js b/helpers/build.js
index b83fc86..fb8e3cc 100644
--- a/helpers/build.js
+++ b/helpers/build.js
@@ -26,21 +26,25 @@
             'User-Agent': util.format("usergrid-nodejs/v%s", version)
         }
         var token
-        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.destroy()
-        } else if (ok(client).getIfExists('authFallback') === UsergridAuth.AuthFallback.APP && ok(client).getIfExists('appAuth.isValid')) {
-            // if auth-fallback is set to APP, this request will make a call using the application token
-            token = client.appAuth.token
-        } else if (ok(client).getIfExists('currentUser.auth.isValid')) {
-            // defaults to using the current user's token
-            token = client.currentUser.auth.token
-        }
-        if (token) {
-            _.assign(headers, {
-                authorization: util.format("Bearer %s", token)
-            })
+        if (ok(client).getIfExists('tempAuth') === UsergridAuth.NO_AUTH) {
+            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.destroy()
+            } 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.AuthFallback.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)
+                })
+            }
         }
         return headers
     },
diff --git a/lib/auth.js b/lib/auth.js
index 672637b..91b7f1e 100644
--- a/lib/auth.js
+++ b/lib/auth.js
@@ -49,4 +49,5 @@
 module.exports.AuthFallback = {
     APP: 'APP',
     NONE: 'NONE'
-}
\ No newline at end of file
+}
+module.exports.NO_AUTH = 'NO_AUTH'
\ No newline at end of file
diff --git a/lib/client.js b/lib/client.js
index a6fb920..83796fe 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -121,6 +121,8 @@
     usingAuth: function(auth) {
         if (auth instanceof UsergridAuth) {
             this.tempAuth = auth
+        } else if (helpers.args(arguments).length === 0 || auth === UsergridAuth.NO_AUTH) {
+            this.tempAuth = UsergridAuth.NO_AUTH
         }
         return this
     }
diff --git a/tests/lib/client.auth.test.js b/tests/lib/client.auth.test.js
index 7797323..bc053b5 100644
--- a/tests/lib/client.auth.test.js
+++ b/tests/lib/client.auth.test.js
@@ -239,29 +239,56 @@
     this.slow(_slow + 500)
     this.timeout(_timeout)
 
-    var client = new UsergridClient()
+    var client = new UsergridClient(),
+        authFromToken
 
-    it('should authenticate using an ad-hoc token', function(done) {
-        
+    before(function(done) {
         client.authenticateUser({
             username: config.test.username,
             password: config.test.password
-        }, function(err, response, token) {
-            var authFromToken = new UsergridAuth(token)
-            authFromToken.isValid.should.be.true()
-            authFromToken.should.have.property('token')
-            client.usingAuth(authFromToken).GET({
-                path: '/users/me'
-            }, function(error, usergridResponse) {
-                usergridResponse.ok.should.be.true()
-                usergridResponse.should.have.property('user').which.is.an.instanceof(UsergridUser)
-                usergridResponse.user.should.have.property('uuid').which.is.a.uuid()
-                done()
-            })
+        }, function(error, response, token) {
+            authFromToken = new UsergridAuth(token)
+            done()
         })
     })
 
-    it('client.tempAuth should be invalid after making a request ad-hoc authentication', function() {
+    it('should authenticate using an ad-hoc token', function(done) {
+        authFromToken.isValid.should.be.true()
+        authFromToken.should.have.property('token')
+        client.usingAuth(authFromToken).GET({
+            path: '/users/me'
+        }, function(error, usergridResponse) {
+            usergridResponse.ok.should.be.true()
+            usergridResponse.should.have.property('user').which.is.an.instanceof(UsergridUser)
+            usergridResponse.user.should.have.property('uuid').which.is.a.uuid()
+            done()
+        })
+    })
+
+    it('client.tempAuth should be invalid after making a request ad-hoc authentication', function(done) {
         client.tempAuth.isValid.should.be.false()
+        done()
+    })
+
+    it('should send an unauthenticated request when UsergridAuth.NO_AUTH is passed to .usingAuth()', function(done) {
+        client.usingAuth(UsergridAuth.NO_AUTH).GET({
+            path: '/users/me'
+        }, function(error, usergridResponse) {
+            usergridResponse.ok.should.be.false()
+            usergridResponse.request.headers.should.not.have.property('authentication')
+            usergridResponse.should.not.have.property('user')
+            done()
+        })
+    })
+
+    it('should send an unauthenticated request when no arguments are passed to .usingAuth()', function(done) {
+        client.usingAuth().GET({
+            path: '/users/me'
+        }, function(error, usergridResponse) {
+            usergridResponse.ok.should.be.false()
+            usergridResponse.request.headers.should.not.have.property('authentication')
+            usergridResponse.should.not.have.property('user')
+            done()
+        })
     })
 })
\ No newline at end of file
