diff --git a/helpers/build.js b/helpers/build.js
index 0991638..88656a1 100644
--- a/helpers/build.js
+++ b/helpers/build.js
@@ -106,10 +106,11 @@
             ].filter(_.isString)) : ""
         )
     },
-    headers: function(client) {
+    headers: function(client, options) {
         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) {
             client.tempAuth = undefined
diff --git a/lib/asset.js b/lib/asset.js
index d5f25b2..5d9799a 100644
--- a/lib/asset.js
+++ b/lib/asset.js
@@ -1,7 +1,6 @@
 'use strict'
 
 var Usergrid = require('../usergrid'),
-    validator = require('validator'),
     readChunk = require('read-chunk'),
     fileType = require('file-type'),
     helpers = require('../helpers'),
@@ -18,17 +17,18 @@
     var __binaryData = []
 
     if (args.length === 0) {
-        throw new Error('A UsergridAsset object was initialized using an empty argument')
+        throw new Error('A UsergridAsset object cannot be initialized without passing one or more arguments')
     }
 
-    if (_.isObject(args[0])) {
+    if (_.isPlainObject(args[0])) {
         _.assign(self, args[0])
     } else {
         self.filename = _.isString(args[0]) ? args[0] : undefined
-        self.data = validator.isBase64(args[1]) || Buffer.isBuffer(args[1]) ? args[1] : []
+        self.data = _.first(args.filter(Buffer.isBuffer)) || []
         self.originalLocation = _.first([args[2], args[1]].filter(function(property) {
-            return (_.isString(property) && !validator.isBase64(property))
+            return _.isString(property)
         }))
+
         self.contentType = _.isString(args[3]) ? args[3] : undefined
 
         stream.PassThrough.call(self)
@@ -52,7 +52,7 @@
             if (__contentType) {
                 return __contentType
             } else if (Buffer.isBuffer(self.data)) {
-                __contentType = fileType(self.data).mime
+                __contentType = fileType(self.data) != null ? fileType(self.data).mime : undefined
                 return __contentType
             }
         },
@@ -60,7 +60,7 @@
             if (contentType) {
                 __contentType = contentType
             } else if (Buffer.isBuffer(self.data)) {
-                __contentType = fileType(self.data).mime
+                __contentType = fileType(self.data) != null ? fileType(self.data).mime : undefined
             }
         }
     })
diff --git a/lib/auth.js b/lib/auth.js
index fd8e0fa..2422d30 100644
--- a/lib/auth.js
+++ b/lib/auth.js
@@ -46,6 +46,16 @@
 }
 
 module.exports = UsergridAuth
-module.exports.AUTH_FALLBACK_APP = 'APP'
-module.exports.AUTH_FALLBACK_NONE = 'NONE'
-module.exports.NO_AUTH = 'NO_AUTH'
\ No newline at end of file
+
+Object.defineProperty(module.exports, 'AUTH_FALLBACK_APP', {
+    enumerable: false,
+    get: function() { return "APP" }
+})
+Object.defineProperty(module.exports, 'AUTH_FALLBACK_NONE', {
+    enumerable: false,
+    get: function() { return "NONE" }
+})
+Object.defineProperty(module.exports, 'NO_AUTH', {
+    enumerable: false,
+    get: function() { return "NO_AUTH" }
+})
\ No newline at end of file
diff --git a/lib/client.js b/lib/client.js
index 532c9d9..c337484 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -125,7 +125,17 @@
 }
 
 module.exports = UsergridClient
-module.exports.Connections = {
-    DIRECTION_IN: "IN",
-    DIRECTION_OUT: "OUT"
-}
\ No newline at end of file
+Object.defineProperty(module.exports, 'Connections', {
+    enumerable: false,
+    writable: true,
+    configurable: true
+})
+module.exports.Connections = {}
+Object.defineProperty(module.exports.Connections, 'DIRECTION_IN', {
+    enumerable: false,
+    get: function() { return "IN" }
+})
+Object.defineProperty(module.exports.Connections, 'DIRECTION_OUT', {
+    enumerable: false,
+    get: function() { return "OUT" }
+})
\ No newline at end of file
diff --git a/lib/entity.js b/lib/entity.js
index 4d7a100..fe35d58 100644
--- a/lib/entity.js
+++ b/lib/entity.js
@@ -1,6 +1,8 @@
 'use strict'
 
 var Usergrid = require('../usergrid'),
+    UsergridRequest = require('./request'),
+    UsergridAsset = require('./asset'),
     helpers = require('../helpers'),
     ok = require('objectkit'),
     _ = require('lodash')
@@ -16,16 +18,16 @@
     var args = helpers.args(arguments)
 
     if (args.length === 0) {
-        throw new Error('A UsergridEntity object was initialized using an empty argument')
+        throw new Error('A UsergridEntity object cannot be initialized without passing one or more arguments')
     }
 
-    if (_.isObject(args[0])) {
+    if (_.isPlainObject(args[0])) {
         _.assign(self, args[0])
     } else {
         self.type = _.isString(args[0]) ? args[0] : undefined
         self.name = _.isString(args[1]) ? args[1] : undefined
     }
-    
+
     if (!_.isString(self.type)) {
         throw new Error('"type" (or "collection") parameter is required when initializing a UsergridEntity object')
     }
@@ -134,10 +136,40 @@
         var callback = helpers.cb(args)
         client.POST(this, this.asset, function(error, usergridResponse) {
             updateEntityFromRemote.call(this, usergridResponse)
-            callback(error, usergridResponse, this) 
+            callback(error, usergridResponse, this)
         }.bind(this))
     },
-    downloadAsset: function() {},
+    downloadAsset: function() {
+        var args = helpers.args(arguments)
+        var client = helpers.client.validate(args)
+        var callback = helpers.cb(args)
+        var self = this
+
+        if (ok(self).has('asset.contentType')) {
+            var options = {
+                client: client,
+                entity: self,
+                type: this.type,
+                method: 'GET',
+                encoding: null,
+                headers: {
+                    "Accept": self.asset.contentType || _.first(args.filter(_.isString))
+                }
+            }
+            options.uri = helpers.build.uri(client, options)
+            return new UsergridRequest(options, function(error, usergridResponse) {
+                if (usergridResponse.ok) {
+                    self.attachAsset(new UsergridAsset(new Buffer(usergridResponse.body)))
+                }
+                callback(error, usergridResponse, self)
+            })
+        } else {
+            callback({
+                name: "asset_not_found",
+                description: "The specified entity does not have a valid asset attached"
+            })
+        }
+    },
     connect: function() {
         var args = helpers.args(arguments)
         var client = helpers.client.validate(args)
diff --git a/lib/request.js b/lib/request.js
index 28e549e..3a4b1c3 100644
--- a/lib/request.js
+++ b/lib/request.js
@@ -26,8 +26,9 @@
     var body = ((formData !== undefined) ? undefined : options.body)
 
     var req = request(uri, {
-        headers: helpers.build.headers(client),
+        headers: helpers.build.headers(client, options),
         body: body,
+        encoding: options.encoding || null,
         json: true,
         method: options.method,
         qs: helpers.build.qs(options),
diff --git a/lib/user.js b/lib/user.js
index 0bd36e9..6743575 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -21,7 +21,8 @@
     var self = this
     self.type = "user"
 
-    _.assign(self, UsergridEntity.call(self, obj))
+    _.assign(self, obj, UsergridEntity)
+    UsergridEntity.call(self, self)
 
     helpers.setWritable(self, 'name')
     return self
diff --git a/tests/lib/client.auth.test.js b/tests/lib/client.auth.test.js
index 33ac711..c7f6bad 100644
--- a/tests/lib/client.auth.test.js
+++ b/tests/lib/client.auth.test.js
@@ -242,10 +242,10 @@
         var newClient = new UsergridClient()
         var ttlInMilliseconds = 500000
         var userAuth = new UsergridUserAuth(config.test.username, config.test.password, ttlInMilliseconds)
-        client.authenticateUser(userAuth, function(err, response, token) {
-            response.ok.should.be.true()
+        client.authenticateUser(userAuth, function(err, usergridResponse, token) {
+            usergridResponse.ok.should.be.true()
             client.currentUser.auth.token.should.equal(token)
-            response.body.expires_in.should.equal(ttlInMilliseconds / 1000)
+            usergridResponse.body.expires_in.should.equal(ttlInMilliseconds / 1000)
             done()
         })
     })
diff --git a/tests/lib/client.rest.test.js b/tests/lib/client.rest.test.js
index 7cf7074..e67cfef 100644
--- a/tests/lib/client.rest.test.js
+++ b/tests/lib/client.rest.test.js
@@ -333,7 +333,7 @@
     it('should support updating a set of entities by passing an UsergridQuery object', function(done) {
 
         this.slow(_slow + 1000)
-        this.timeout(_timeout + 6000)
+        this.timeout(_timeout + 10000)
 
         var query = new UsergridQuery(config.test.collection).eq('cuisine', 'pizza').limit(2)
         var body = {
diff --git a/tests/lib/entity.test.js b/tests/lib/entity.test.js
index f4c7c1d..86fc63d 100644
--- a/tests/lib/entity.test.js
+++ b/tests/lib/entity.test.js
@@ -16,7 +16,11 @@
     filename = 'old_man',
     file = __dirname + '/image.jpg',
     testFile = __dirname + '/image_test.jpg',
-    expectedContentLength = 109055    
+    expectedContentLength = 109055,
+    assetEntity = new UsergridEntity({
+        type: config.test.collection,
+        info: "assetTestEntity"
+    })
 
 describe('putProperty()', function() {
     it('should set the value for a given key if the key does not exist', function() {
@@ -348,7 +352,7 @@
 })
 
 describe('attachAsset()', function(done) {
-    
+
     var asset = new UsergridAsset(filename, file),
         entity = new UsergridEntity({
             type: config.test.collection,
@@ -373,11 +377,7 @@
     this.slow(_slow)
     this.timeout(_timeout)
 
-    var asset = new UsergridAsset(filename, file),
-        entity = new UsergridEntity({
-            type: config.test.collection,
-            info: "attachAssetTest"
-        })
+    var asset = new UsergridAsset(filename, file)
     before(function(done) {
         fs.readFile(file, function(err, data) {
             asset.data = data
@@ -385,10 +385,11 @@
         })
     })
 
-    it('should attach a UsergridAsset to the entity', function(done) {
+    it('should upload an image asset to the remote entity', function(done) {
         var client = new UsergridClient(config)
-        entity.attachAsset(asset)
-        entity.uploadAsset(client, function(err, usergridResponse, entity) {
+        assetEntity.attachAsset(asset)
+        assetEntity.uploadAsset(client, function(err, usergridResponse, entity) {
+            assetEntity = entity
             entity.should.have.property('file-metadata')
             entity['file-metadata'].should.have.property('content-length').equal(expectedContentLength)
             entity['file-metadata'].should.have.property('content-type').equal('image/jpeg')
@@ -397,6 +398,24 @@
     })
 })
 
+describe('downloadAsset()', function(done) {
+
+    this.slow(_slow)
+    this.timeout(_timeout)
+
+    it('should download a an image from the remote entity', function(done) {
+        var client = new UsergridClient(config)
+        assetEntity.downloadAsset(client, 'image/jpeg', function(err, usergridResponse, entityWithAsset) {
+            entityWithAsset.should.have.property('asset').which.is.an.instanceof(UsergridAsset)
+            entityWithAsset.asset.should.have.property('contentType').equal(assetEntity['file-metadata']['content-type'])
+            entityWithAsset.asset.should.have.property('contentLength').equal(assetEntity['file-metadata']['content-length'])
+            // clean up the now un-needed asset entity
+            entityWithAsset.remove(client)
+            done()
+        })
+    })
+})
+
 describe('connect()', function() {
 
     this.slow(_slow)
diff --git a/tests/main.test.js b/tests/main.test.js
index 947b807..581411e 100644
--- a/tests/main.test.js
+++ b/tests/main.test.js
@@ -23,43 +23,43 @@
 
 // end module config
 
-describe.skip('Usergrid initialization', function() {
+describe('Usergrid initialization', function() {
     return require('./lib/usergrid.init.test')
 })
 
-describe.skip('Usergrid singleton', function() {
+describe('Usergrid singleton', function() {
     return require('./lib/usergrid.singleton.test')
 })
 
-describe.skip('Usergrid teardown', function() {
+describe('Usergrid teardown', function() {
     return require('./lib/usergrid.teardown.test')
 })
 
-describe.skip('UsergridClient initialization', function() {
+describe('UsergridClient initialization', function() {
     return require('./lib/client.init.test')
 })
 
-describe.skip('UsergridClient REST operations', function() {
+describe('UsergridClient REST operations', function() {
     return require('./lib/client.rest.test')
 })
 
-describe.skip('UsergridClient connections', function() {
+describe('UsergridClient connections', function() {
     return require('./lib/client.connections.test')
 })
 
-describe.skip('UsergridClient authentication', function() {
+describe('UsergridClient authentication', function() {
     return require('./lib/client.auth.test')
 })
 
-describe.skip('UsergridQuery', function() {
+describe('UsergridQuery', function() {
     return require('./lib/query.test')
 })
 
-describe.skip('UsergridResponse', function() {
+describe('UsergridResponse', function() {
     return require('./lib/response.test')
 })
 
-describe.skip('UsergridResponseError', function() {
+describe('UsergridResponseError', function() {
     return require('./lib/responseError.test')
 })
 
@@ -67,10 +67,10 @@
     return require('./lib/entity.test')
 })
 
-describe.skip('UsergridUser', function() {
+describe('UsergridUser', function() {
     return require('./lib/user.test')
 })
 
-describe.skip('UsergridAsset', function() {
+describe('UsergridAsset', function() {
     return require('./lib/asset.test')
 })
\ No newline at end of file
