       if typeof @options.loading is 'function'
         @$container.find(@options.navSelector).each(@options.loading)
 
-    _success: ->
-      # ignore any requests that started before we last invalidated
-      return if @_isInvalidatedRequest(@requestAts.shift())
-      @_recache()
+    _success: ($container) ->
+      # ignore any requests for elements that are no longer on the page
+      return unless $.contains(document, $container[0])
       @options.state.loading = false
       @_log "New page loaded!"
       if typeof @options.success is 'function'
-        @$container.find(@options.navSelector).each(@options.success)
+        $container.find(@options.navSelector).each(@options.success)
 
-    _error: ->
-      # ignore any requests that started before we last invalidated
-      return if @_isInvalidatedRequest(@requestAts.shift())
+    _error: ($container) ->
+      # ignore any requests for elements that are no longer on the page
+      return unless $.contains(document, $container[0])
       @options.state.loading = false
       @_log "Error loading new page :("
       if typeof @options.error is 'function'
-        @$container.find(@options.navSelector).each(@options.error)
+        $container.find(@options.navSelector).each(@options.error)
 
     # Pause firing of events on scroll
     pause: ->

      else
        @_loading()

        @requestAts.push +new Date # note when this request started
        $.getScript(@$container.find(@options.navSelector).attr('href'))
          .done(=> @_success())
          .fail(=> @_error())

    _loading: ->
      @options.state.loading = true

  # Define the plugin class
  class InfinitePages
    # Internal id to tracking the elements used for multiple instances
    @_INSTANCE_ID: 0

    # Internal helper to return a unique id for a new instance for the page
    @_nextInstanceId: ->
      @_INSTANCE_ID += 1

    # Default settings
    defaults:
