           # all organization owners are included in the list of collaborators.
           # Otherwise, only users with access to the repository are returned in the collaborators list.
           @getCollaborators = () ->
-            _request 'GET', "#{@repoPath}/collaborators"
-
-          @isCollaborator = (username) ->
-            _request 'GET', "#{@repoPath}/collaborators/#{username}"
+            _request 'GET', "#{@repoPath}/collaborators", null
+
+          @isCollaborator = (username=null) ->
+            throw 'BUG: username is required' if not username
+            _request 'GET', "#{@repoPath}/collaborators/#{username}", null, {isBoolean:true}
 
 
       # Gist API

      # -------
      @getZen = () ->
        # Send `data` to `null` and the `raw` flag to `true`
        _request 'GET', '/zen', null, true

      # Get all users
      # -------

          headers: headers

          processData: false # Don't convert to QueryString
          data: !options.raw and data and JSON.stringify(data) or data
          dataType: 'json' unless options.raw

        # If the request is a boolean yes/no question GitHub will indicate
        # via the HTTP Status of 204 (No Content) or 404 instead of a 200.
        # Also, jQuery will never call `xhr.resolve` so we need to use a
        # different promise later on.
        if options.isBoolean
          booleanPromise = new jQuery.Deferred()
          ajaxConfig.statusCode =
            # a Boolean 'yes'
            204: () => booleanPromise.resolve(true)
            # a Boolean 'no'
            404: () => booleanPromise.resolve(false)

        xhr = jQuery.ajax(ajaxConfig)

        xhr.always =>
          # Fire listeners when the request completes or fails
          rateLimit = parseFloat(xhr.getResponseHeader 'X-RateLimit-Limit')
          rateLimitRemaining = parseFloat(xhr.getResponseHeader 'X-RateLimit-Remaining')

          for listener in _listeners
            listener(rateLimitRemaining, rateLimit, method, path, data, options)

        promise = if options.isBoolean
          # If the request fails for something other than 404
          # then reject the promise.
          # 404 means 'false'
          xhr.fail (err) -> booleanPromise.reject(err) if err.status != 404

          # Set the promise returned to be the boolean promise
          # instead of `xhr` (see above on the `isBoolean` option)
          booleanPromise

        else

          # Return the result and Base64 encode it if `options.isBase64` flag is set.
          xhr.then (data, textStatus, jqXHR) ->
            ret = new jQuery.Deferred()
            # Convert the response to a Base64 encoded string
            if 'GET' == method and options.isBase64
              # Convert raw data to binary chopping off the higher-order bytes in each char.
              # Useful for Base64 encoding.
              converted = ''
              for i in [0..data.length]
                converted += String.fromCharCode(data.charCodeAt(i) & 0xff)
              converted

              ret.resolve(converted, textStatus, jqXHR)
            else
              ret.resolve(data, textStatus, jqXHR)

          # Parse the error if one occurs
          .then null, (xhr, msg, desc) ->
            if xhr.getResponseHeader('Content-Type') != 'application/json; charset=utf-8'
              return {error: xhr.responseText, status: xhr.status, _xhr: xhr}

            json = JSON.parse xhr.responseText
            return {error: json, status: xhr.status, _xhr: xhr}

        # Return the promise
        return promise.promise()

      # Add a listener that fires when the `rateLimitRemaining` changes as a result of
      # communicating with github.
