   class Resource
     @path: null
 
-    @_process_args: (conditions, fields, options={}, cb) ->
+    @_process_args: (conditions, fields, find_options={}, cb) ->
       if _(conditions).isFunction()
         cb = conditions
         conditions = {}
         fields = null
-        options = {}
+        find_options = {}
       else if _(fields).isFunction()
         cb = fields
         fields = null
-        options = {}
-      else if _(options).isFunction()
-        cb = options
-        options = {}
-      [conditions, fields, options, cb]
+        find_options = {}
+      else if _(find_options).isFunction()
+        cb = find_options
+        find_options = {}
+      [conditions, fields, find_options, cb]
 
     @_uri_to_class: (uri) ->
       klasses = _(clever).filter (val, key) -> val.path? # Filter out properties that aren't resources (e.g. api_path)

        uri: "#{clever.url_base}#{@constructor.path}/#{@_properties.id}/properties"
        json: obj
        ca: certs
      _(opts).extend(headers: additional_options.headers) if additional_options.headers
      apply_auth clever.auth, opts
      if _(obj).isFunction()
        cb = obj

      return q if not cb
      q.exec cb

    @findOne: (conditions, fields, find_options, cb) ->
      [conditions, fields, find_options, cb] = @_process_args conditions, fields, find_options, cb
      _(find_options).extend {limit: 1}
      if not cb
        q = @find conditions, fields, find_options
        q.post 'exec', (results, cb_post) -> cb_post null, results[0]
        q
      else
        @find conditions, fields, find_options, (err, docs) -> cb err, docs?[0]

    @findById: (id, fields, find_options, cb) ->
      throw new Error 'must specify an ID for findById' unless _(id).isString()
      conditions = id: id
      [conditions, fields, find_options, cb] = @_process_args conditions, fields, find_options, cb
      @findOne conditions, fields, find_options, cb

    constructor: (@_properties, @_uri, @_links) -> @_unsaved_values = {}

