   ###
     @private
 
+    Fetches data at the specified index. If `rangeSize` is greater than 1, this
+    method will also retrieve adjacent items to form a "page" of results.
+
+    @method _requestObjectAt
+    @param {Integer} idx The index to fetch content for
+    @param {Boolean} dontFetch Won't obtain remote data if `true`
+    @return {Object|Null} A placeholder object or null if content is empty
+  ###
+  _requestObjectAt: (idx, dontFetch = !get(@, 'isStreaming')) ->
+    return (get(@, @_pathForIndex(idx)) ? @insertSparseArrayItem(idx)) if dontFetch
+
+    rangeSize = parseInt(get(@, 'rangeSize'), 10) || 1
+
+    start = Math.floor(idx / rangeSize) * rangeSize
+    start = Math.max start, 0
+    placeholders = start + rangeSize
+    placeholders = Math.min(placeholders, get(@, 'length')) if get(@, 'isLength')
+
+    @insertSparseArrayItems([start...placeholders])
+
+    if typeOf(@didRequestRange) is 'function'
+      @_didRequestRange({start: start, length: rangeSize})
+    else
+      @_didRequestIndex(i) for i in [start...rangeSize]
+
+    get(@, @_pathForIndex(idx))
+
+
+  ###
+    @private
+
     Prepare to fetch the total number of available objects from the
     persistence layer.
 

    })
    @

  isExpiredAt: (timestamp) ->
    return false if get(@, 'is_loading')
    !!(get(@, 'is_stale') or get(@, 'last_fetched_at') <= timestamp)


    result = get(@, @_pathForIndex(idx)) ? @insertSparseArrayItem(idx)
    if (result and result.isExpiredAt(get(@, 'expired')) isnt true)
      return result
    @_requestObjectAt(idx, dontFetch)

  ###
    Fetches data regarding the total number of objects in the
