 							eventListener.$destroy()
 							viewport.unbind 'resize', resizeHandler
 							viewport.unbind 'scroll', scrollHandler
-							viewport.parent().unbind 'mousewheel', wheelHandler
 
 						eventListener.$on "update.items", (event, locator, newItem)->
 							if angular.isFunction locator

									# if not, increment scrollTop
									viewport.scrollTop(viewport.scrollTop() + wrapper.element.outerHeight(true))

						adjustBuffer = (rid, scrolling, newItems, finalize)->
							doAdjustment = ->
								log "top {actual=#{adapter.topDataPos()} visible from=#{topVisiblePos()} bottom {visible through=#{bottomVisiblePos()} actual=#{adapter.bottomDataPos()}}"
								if shouldLoadBottom()
									enqueueFetch(rid, true, scrolling)
								else
									enqueueFetch(rid, false, scrolling) if shouldLoadTop()
								finalize(rid) if finalize
								if pending.length == 0
									topHeight = 0
									for item in buffer
										itemTop = item.element.offset().top
										newRow = rowTop isnt itemTop
										rowTop = itemTop
										itemHeight = item.element.outerHeight(true) if newRow
										if (adapter.topDataPos() + topHeight + itemHeight < topVisiblePos())
											if newRow
												topHeight += itemHeight
										else
											topVisible(item) if newRow
											break
							if newItems
								$timeout ->
									rows = []


						viewport.bind 'scroll', scrollHandler

						$scope.$watch datasource.revision,
							-> reload()

