diff --git a/examples/api-proxy/app.js b/examples/api-proxy/app.js
index feed0ac..76b3401 100644
--- a/examples/api-proxy/app.js
+++ b/examples/api-proxy/app.js
@@ -6,7 +6,8 @@
 
 Usergrid.init()
 
-console.log(Usergrid.appAuth)
+// Usergrid.setAppAuth(id, secret)
+// console.log(Usergrid.appAuth)
 Usergrid.authenticateApp(function(err, usergridResponse) {
     if (usergridResponse.ok) {
         console.log('app is now authenticated')
@@ -19,7 +20,7 @@
     })
 })
 
-app.listen(process.env.port || 9000)
+// app.listen(process.env.port || 9000)
 
 /*
 
diff --git a/lib/appAuth.js b/lib/appAuth.js
index d1a32ef..740002e 100644
--- a/lib/appAuth.js
+++ b/lib/appAuth.js
@@ -19,15 +19,18 @@
     util = require('util'),
     _ = require('lodash')
 
-var UsergridAppAuth = function(options) {
+var UsergridAppAuth = function() {
     var self = this
     var args = _.flattenDeep(helpers.args(arguments))
     if (_.isPlainObject(args[0])) {
-        options = args[0]
+        self.clientId = args[0].clientId
+        self.clientSecret = args[0].clientSecret
+        self.tokenTtl = args[0].tokenTtl
+    } else {
+        self.clientId = args[0]
+        self.clientSecret = args[1]
+        self.tokenTtl = args[2]
     }
-    self.clientId = options.clientId || args[0]
-    self.clientSecret = options.clientSecret || args[1]
-    self.tokenTtl = options.tokenTtl || args[2]
     UsergridAuth.call(self)
     _.assign(self, UsergridAuth)
     return self
diff --git a/lib/client.js b/lib/client.js
index dadf4b8..f022793 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -46,6 +46,18 @@
         throw new Error('"orgId" and "appId" parameters are required when instantiating UsergridClient')
     }
 
+    Object.defineProperty(self, 'test', {
+        enumerable: false
+    })
+
+    Object.defineProperty(self, 'clientId', {
+        enumerable: false
+    })
+
+    Object.defineProperty(self, 'clientSecret', {
+        enumerable: false
+    })
+
     Object.defineProperty(self, 'appAuth', {
         get: function() {
             return __appAuth
@@ -59,10 +71,10 @@
         }
     })
 
-    Object.defineProperty(self, 'test', {
-        enumerable: false
-    })
-
+    // if client ID and secret are defined on initialization, initialize appAuth
+    if (self.clientId && self.clientSecret) {
+        self.setAppAuth(self.clientId, self.clientSecret)
+    }
     return self
 }
 
@@ -88,13 +100,16 @@
     getConnections: function() {        
         return new UsergridRequest(helpers.build.getConnections(this, helpers.args(arguments)))
     },
-    setAppAuth: function(options) {
-        this.appAuth = (_.isString(options)) ? helpers.args(arguments) : options
+    setAppAuth: function() {
+        this.appAuth = new UsergridAppAuth(helpers.args(arguments))
     },
     authenticateApp: function(options) {
         var self = this
         var callback = helpers.cb(helpers.args(arguments))
-        var auth = (options instanceof UsergridAppAuth) ? options : self.appAuth || new UsergridAppAuth(options)
+        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
+        }))
 
         if (!(auth instanceof UsergridAppAuth)) {
             throw new Error('App auth context was not defined when attempting to call .authenticateApp()')
diff --git a/usergrid.js b/usergrid.js
index 765378f..cc6ba27 100644
--- a/usergrid.js
+++ b/usergrid.js
@@ -14,17 +14,20 @@
 
 'use strict'
 
+var _ = require('lodash')
+
 var Usergrid = {
     isInitialized: false,
     isSharedInstance: true,
     initSharedInstance: function(options) {
         var self = this
         if (self.isInitialized) {
+            console.log('Usergrid shared instance is already initialized')
             return self
         }
         var UsergridClient = require('./lib/client')
-        Object.setPrototypeOf(Usergrid, new UsergridClient(options))
-        UsergridClient.call(self)
+        Object.setPrototypeOf(self, new UsergridClient(options))
+        _.assign(self, new UsergridClient(options))
         self.isInitialized = true
         self.isSharedInstance = true
     }
