diff --git a/lib/auth.js b/lib/auth.js
index 06033c2..3a20da3 100644
--- a/lib/auth.js
+++ b/lib/auth.js
@@ -42,4 +42,8 @@
     }
 }
 
-module.exports = UsergridAuth
\ No newline at end of file
+module.exports = UsergridAuth
+module.exports.AuthFallback = {
+    APP: 'APP',
+    NONE: 'NONE'
+}
\ No newline at end of file
diff --git a/lib/client.js b/lib/client.js
index 4f8e927..f15e340 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -5,18 +5,15 @@
     helpers = require('../helpers'),
     UsergridResponse = require('./response'),
     UsergridResponseError = require('./responseError'),
+    UsergridAuth = require('./auth'),
     UsergridAppAuth = require('./appAuth'),
     UsergridUserAuth = require('./userAuth'),
     _ = require('lodash')
 
-var AuthFallback = {
-    APP: 'APP',
-    NONE: 'NONE',
-}
-
+console.log(UsergridAuth.AuthFallback)
 var defaultOptions = {
     baseUrl: 'https://api.usergrid.com',
-    authFallback: AuthFallback.NONE,
+    authFallback: UsergridAuth.AuthFallback.NONE
 }
 
 var UsergridClient = function(options) {
@@ -68,10 +65,6 @@
     DELETE: function() {
         return new UsergridRequest(helpers.build.DELETE(this, Array.prototype.slice.call(arguments)))
     },
-    connections: {
-        DIRECTION_IN: "IN",
-        DIRECTION_OUT: "OUT"
-    },
     connect: function() {
         var Usergrid = require('../usergrid')
         if (this === Usergrid && !Usergrid.isInitialized) {
@@ -164,4 +157,8 @@
     }
 }
 
-module.exports = UsergridClient
\ No newline at end of file
+module.exports = UsergridClient
+module.exports.Connections = {
+    DIRECTION_IN: "IN",
+    DIRECTION_OUT: "OUT"
+}
\ No newline at end of file
diff --git a/lib/request.js b/lib/request.js
index 67a35de..86fd853 100644
--- a/lib/request.js
+++ b/lib/request.js
@@ -5,6 +5,7 @@
     UsergridResponse = require('../lib/response'),
     UsergridQuery = require('../lib/query'),
     util = require('util'),
+    ok = require('objectkit'),
     _ = require('lodash')
 
 var UsergridRequest = function(options) {
@@ -14,11 +15,20 @@
 
     var headers = helpers.userAgent
 
-    if (options.client.appAuth && options.client.appAuth.isValid) {
+    var UsergridAuth = require('../lib/auth')
+
+    if (ok(options).getIfExists('auth.isValid')) {
+        // Checks if an auth param was passed to the request and uses the token if applicable
+        _.assign(headers, {
+            authorization: util.format("Bearer %s", options.auth.token)
+        })
+    } else if (options.client.authFallback === UsergridAuth.AuthFallback.APP && ok(options).getIfExists('client.appAuth.isValid')) {
+        // If auth-fallback is set to APP, this request will make a call using the application token
         _.assign(headers, {
             authorization: util.format("Bearer %s", options.client.appAuth.token)
         })
     }
+
     request(helpers.build.url(options.client, options), {
         headers: headers,
         body: options.body,
diff --git a/lib/user.js b/lib/user.js
index b3d5719..d43a3d2 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -66,7 +66,6 @@
             })
         }
         var client = helpers.client.validate(args)
-        var path
         var revokeAll = _.first(args.filter(_.isBoolean)) || false
         var userId = _.first([self.uuid, self.username, self.email].filter(_.isString))
         var url = util.format("%s%s/revoketoken%s", helpers.build.url(client, {
@@ -94,7 +93,37 @@
         var args = Array.prototype.slice.call(arguments)
         args.unshift(true)
         return this.logout.apply(this, args)
-    }
+    },
+    resetPassword: function() {
+        var self = this
+        var args = _.flatten(Array.prototype.slice.call(arguments), true)
+        var callback = helpers.cb(_.last(args.filter(_.isFunction)))
+        var client = helpers.client.validate(args)
+        var body = {
+            oldpassword: _.isPlainObject(args[0]) ? args[0].oldPassword : _.isString(args[0]) ? args[0] : undefined,
+            newpassword: _.isPlainObject(args[0]) ? args[0].newPassword : _.isString(args[1]) ? args[1] : undefined,
+        }
+        if (!body.oldpassword || !body.newpassword) {
+            throw new Error('"oldPassword" and "newPassword" properties are required when resetting a user password')
+        }
+        var userId = _.first([self.uuid, self.username, self.email].filter(_.isString))
+        var url = util.format("%s%s/password", helpers.build.url(client, {
+            type: 'user'
+        }), userId)
+        request(url, {
+            headers: helpers.userAgent,
+            json: true,
+            method: 'PUT',
+            body: body
+        }, function(error, response) {
+            var UsergridResponse = require('./response'),
+                usergridResponse = new UsergridResponse(response)
+            if (usergridResponse.statusCode >= 400) {
+                error = new UsergridResponseError(response.body)
+            }
+            callback(error || usergridResponse.error, usergridResponse, (usergridResponse.statusCode < 400))
+        })
+    },
 }
 
 util.inherits(UsergridUser, UsergridEntity)
diff --git a/tests/lib/client.connections.test.js b/tests/lib/client.connections.test.js
index c1a8036..6f4c9a9 100644
--- a/tests/lib/client.connections.test.js
+++ b/tests/lib/client.connections.test.js
@@ -48,7 +48,7 @@
 
         client.connect(entity1, relationship, entity2, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -68,7 +68,7 @@
 
         client.connect(entity1, relationship, entity2.uuid, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -88,7 +88,7 @@
 
         client.connect(entity1.type, entity1.uuid, relationship, entity2.uuid, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -108,7 +108,7 @@
 
         client.connect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -132,7 +132,7 @@
 
         client.connect(options, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[options.relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -176,7 +176,7 @@
 
         var relationship = "foos"
 
-        client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+        client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                 "/",
                 config.test.collection,
@@ -196,7 +196,7 @@
 
         var relationship = "foos"
 
-        client.getConnections(client.connections.DIRECTION_IN, entity2, relationship, function(err, usergridResponse) {
+        client.getConnections(UsergridClient.Connections.DIRECTION_IN, entity2, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
                 "/",
                 config.test.collection,
@@ -234,7 +234,7 @@
 
         client.disconnect(entity1, relationship, entity2, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
@@ -249,7 +249,7 @@
 
         client.disconnect(entity1.type, entity1.uuid, relationship, entity2.uuid, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
@@ -264,7 +264,7 @@
 
         client.disconnect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
@@ -283,7 +283,7 @@
 
         client.disconnect(options, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
diff --git a/tests/lib/entity.test.js b/tests/lib/entity.test.js
index 47aa8fb..faee854 100644
--- a/tests/lib/entity.test.js
+++ b/tests/lib/entity.test.js
@@ -414,7 +414,7 @@
 
         entity1.connect(relationship, entity2, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -434,7 +434,7 @@
 
         entity1.connect(relationship, entity2.uuid, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -454,7 +454,7 @@
 
         entity1.connect(relationship, entity2.type, entity2.name, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                     "/",
                     config.test.collection,
@@ -498,7 +498,7 @@
 
         var relationship = "foos"
 
-        entity1.getConnections(client.connections.DIRECTION_OUT, relationship, function(err, usergridResponse) {
+        entity1.getConnections(UsergridClient.Connections.DIRECTION_OUT, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
                 "/",
                 config.test.collection,
@@ -518,7 +518,7 @@
 
         var relationship = "foos"
 
-        entity2.getConnections(client.connections.DIRECTION_IN, relationship, function(err, usergridResponse) {
+        entity2.getConnections(UsergridClient.Connections.DIRECTION_IN, relationship, function(err, usergridResponse) {
             usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
                 "/",
                 config.test.collection,
@@ -556,7 +556,7 @@
 
         entity1.disconnect(relationship, entity2, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
@@ -571,7 +571,7 @@
 
         entity1.disconnect(relationship, entity2.uuid, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
@@ -586,7 +586,7 @@
 
         client.disconnect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
             usergridResponse.statusCode.should.equal(200)
-            client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+            client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
                 usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
                 done()
             })
diff --git a/tests/lib/user.test.js b/tests/lib/user.test.js
index 8a853b6..43151b9 100644
--- a/tests/lib/user.test.js
+++ b/tests/lib/user.test.js
@@ -133,12 +133,53 @@
     it("it should return an error when attempting to log out a user that does not have a valid token", function(done) {
         _user1.logout(function(err, response, success) {
             err.should.containDeep({
-                    name: 'no_valid_token'
-                })
-                // cleanup
-            _user1.remove(function(err, response) {
+                name: 'no_valid_token'
+            })
+            done()
+        })
+    })
+})
+
+describe('resetPassword()', function() {
+
+    this.slow(_slow)
+    this.timeout(_timeout)
+
+    it(util.format("it should reset the password for '%s' by passing parameters", _username1), function(done) {
+        _user1.resetPassword(config.test.password, '2cool4u', function(err, response, success) {
+            response.statusCode.should.equal(200)
+            response.body.action.should.equal("set user password")
+            done()
+        })
+    })
+
+    it(util.format("it should reset the password for '%s' by passing an object", _username1), function(done) {
+        _user1.resetPassword({
+            oldPassword: '2cool4u',
+            newPassword: config.test.password
+        }, function(err, response, success) {
+            response.statusCode.should.equal(200)
+            response.body.action.should.equal("set user password")
+            done()
+        })
+    })
+
+    it(util.format("it should not reset the password for '%s' when passing a bad old password", _username1), function(done) {
+        _user1.resetPassword({
+            oldPassword: 'BADOLDPASSWORD',
+            newPassword: config.test.password
+        }, function(err, response, success) {
+            response.statusCode.should.be.greaterThanOrEqual(400)
+            err.name.should.equal('auth_invalid_username_or_password')
+             _user1.remove(function(err, response) {
                 done()
             })
         })
     })
+
+    it("it should return an error when attempting to reset a password with missing arguments", function() {
+        should(function() {
+            _user1.resetPassword('NEWPASSWORD', function() {})
+        }).throw()
+    })
 })
\ No newline at end of file
