Reworked singleton client to remove instance tracking
diff --git a/helpers/callbackCheck.js b/helpers/callbackCheck.js
new file mode 100644
index 0000000..2562ee0
--- /dev/null
+++ b/helpers/callbackCheck.js
@@ -0,0 +1,3 @@
+module.exports = function(callback) {
+    return (typeof callback === 'function') ? callback : function() {};
+}
\ No newline at end of file
diff --git a/helpers/index.js b/helpers/index.js
index b28336b..491ad4d 100644
--- a/helpers/index.js
+++ b/helpers/index.js
@@ -1,6 +1,8 @@
 var mutability = require('./mutability')
+var cb = require('./callbackCheck')
 
 module.exports = {
     setImmutable: mutability.setImmutable,
-    setMutable: mutability.setMutable
+    setMutable: mutability.setMutable,
+    cb: cb
 }
\ No newline at end of file
diff --git a/helpers/mutability.js b/helpers/mutability.js
index 5c56dd4..d70cb51 100644
--- a/helpers/mutability.js
+++ b/helpers/mutability.js
@@ -1,9 +1,9 @@
-function setImmutable(obj, property) {
-    return Object.defineProperty(obj, property, { configurable: false, writable: false });
+function setImmutable(obj, key) {
+    return Object.defineProperty(obj, key, { configurable: false, writable: false });
 }
 
-function setMutable(obj, property) {
-    return Object.defineProperty(obj, property, { configurable: true, writable: true });
+function setMutable(obj, key) {
+    return Object.defineProperty(obj, key, { configurable: true, writable: true });
 }
 
 module.exports = {
diff --git a/lib/client.js b/lib/client.js
new file mode 100644
index 0000000..626b4be
--- /dev/null
+++ b/lib/client.js
@@ -0,0 +1,24 @@
+'use strict'
+
+var UsergridRequest = require('./request'),
+    ok = require('objectkit'),
+    helpers = require('../helpers')
+
+var UsergridClient = function(orgId, appId) {
+    var self = this
+    if (ok(orgId).exists() && ok(appId).exists()) {
+        self.orgId = orgId
+        self.appId = appId
+        console.log(self.orgId, self.appId)
+        return self;
+    } else {
+        throw new Error('orgId and appId must be passed during initialization')
+    }
+}
+
+UsergridClient.prototype.GET = function(uri, options, callback) {
+    return new UsergridRequest('GET', uri, options, callback)
+}
+
+// Exports
+module.exports = UsergridClient
\ No newline at end of file
diff --git a/lib/request.js b/lib/request.js
index c77ef98..d1ea651 100644
--- a/lib/request.js
+++ b/lib/request.js
@@ -6,7 +6,7 @@
 
 var UsergridRequest = function(method, uri, options, callback) {
     
-    if (typeof uri === 'undefined' && ok(options).check('uri') === ok.false) {
+    if (typeof uri === 'undefined' && ok(options).check(['uri', 'url']) === ok.false) {
         throw new Error('undefined is not a valid uri or options object.')
     }
 
diff --git a/usergrid.js b/usergrid.js
index 1ca1b52..0bb6835 100644
--- a/usergrid.js
+++ b/usergrid.js
@@ -1,12 +1,25 @@
 'use strict'
-var extend = require('extend'),
-    request = require('request'),
-    UsergridRequest = require('./lib/request')
 
-var Usergrid = function() {}
+var UsergridClient = require('./lib/client'),
+    // ok = require('objectkit'),
+    helpers = require('./helpers'),
+    util = require("util")
 
-Usergrid.GET = function(uri, options, callback) {
-    return new UsergridRequest('GET', uri, options, callback)
+var Usergrid = function() {
+    var self = this
+    if (self) {
+        return self
+    } else {
+        throw new Error('Usergrid shared instance has not been initialized')
+    }
 }
 
-module.exports = Usergrid
\ No newline at end of file
+util.inherits(Usergrid, UsergridClient);
+
+Usergrid.prototype.initialize = function(orgId, appId, callback) {
+    var self = this
+    self = new UsergridClient(orgId, appId)
+}
+
+// Exports
+module.exports = new Usergrid
\ No newline at end of file