                           finalize()
                           return
                         for item in result
-                          append item
+                          insert item, false
                         next += result.length
                         console.log "appended: #{result.length} buffer size #{buffer.length} first #{first} next #{next}"
                         finalize()

                      (result) ->
                        clipBottom()
                        for item in result.reverse()
                          prepend item
                        first = start
                        console.log "prepended #{result.length} buffer size #{buffer.length} first #{first} next #{next}"
                        finalize()

                  enqueueFetch(true) if reloadRequested || shouldLoadBottom()
                  enqueueFetch(false) if shouldLoadTop()

                insert = (item, top) ->
                  itemScope = $scope.$new()
                  itemScope[itemName] = item
                  wrapper =
                    scope: itemScope
                  padding =
                    if top
                      topPadding
                    else
                      bottomPadding
                  linker itemScope,
                  (clone) ->
                    wrapper.element = clone
                    if top
                      topPadding.after clone
                      buffer.unshift wrapper
                    else
                      bottomPadding.before clone
                      buffer.push wrapper
                  # using watch is the only way I found to gather the 'real' height of the thing - the height after the item
                  # template was processed and values inserted.
                  itemScope.$watch "whatever",
                  ->
                    padding.height(Math.max(0,padding.height() - wrapper.element.outerHeight(true)))

                finalize = ->
                  pending.shift()
