 										if result.length == 0
 											bof = true
 											console.log "prepended: requested #{bufferSize} records starting from #{first-bufferSize} recieved: bof"
-											finalize()
+											finalize(scrolling)
 											return
 										clipBottom()
 										for i in [result.length-1..0]
 											lastScope = insert first--, result[i], true
 										console.log "prepended: requested #{bufferSize} received #{result.length} buffer size #{buffer.length} first #{first} next #{next}"
-										finalize()
-										lastScope.$watch 'adjustBuffer', ->
-											adjustBuffer()
+										finalize(scrolling)
+										dereg = lastScope.$watch 'adjustBuffer', ->
+											adjustBuffer(scrolling)
+											dereg()
 
 						viewport.bind 'resize', ->
 							if !$rootScope.$$phase && !isLoading
-								adjustBuffer()
+								adjustBuffer(false)
 								$scope.$apply()
 
 						viewport.bind 'scroll', ->
 							if !$rootScope.$$phase && !isLoading
-								adjustBuffer()
+								adjustBuffer(true)
 								$scope.$apply()
 
 						$scope.$watch datasource.revision,

								topPadding = createPadding(padding(repeaterType), element, 'top')
								bottomPadding = createPadding(padding(repeaterType), element, 'bottom')

								scrollHeight = (elem)->
									elem[0].scrollHeight || elem[0].document.documentElement.scrollHeight

								tempScope.$destroy()

								handler =

								((wrapper)->
									if locator wrapper.scope
										removeFromBuffer temp.length-1-i, temp.length-i
										next--
								) wrapper for wrapper,i in temp
							else
								if 0 <= locator-first-1 < buffer.length
									removeFromBuffer locator-first-1, locator-first
									next--

							item.scope.$index = first + i for item,i in buffer
							adjustBuffer(false)

		])