 									throw new Error "applyUpdates - #{arg1} is not a valid index or outside of range"
 							adjustBuffer(ridActual, inserted)
 
-						adapter.isLoading = false
-
 						if $attr.adapter # so we have an adapter on $scope
-							angular.extend(adapterAttr, adapter)
-							adapter = adapterAttr
+							adapterOnScope = getValueChain($scope, $attr.adapter)
+							if not adapterOnScope
+								setValueChain($scope, $attr.adapter, {})
+								adapterOnScope = getValueChain($scope, $attr.adapter)
+							angular.extend(adapterOnScope, adapter)
+							adapter = adapterOnScope
 
 
 						# update events (are deprecated since v1.1.0)


						viewportScope = viewport.scope() || $rootScope

						if angular.isDefined($attr.topVisible)
							topVisibleItem = (item)->
								viewportScope[$attr.topVisible] = item

						if angular.isDefined($attr.topVisibleElement)
							topVisibleElement = (element)->
								viewportScope[$attr.topVisibleElement] = element

						if angular.isDefined($attr.topVisibleScope)
							topVisibleScope = (scope)->
								viewportScope[$attr.topVisibleScope] = scope

						topVisible = (item) ->
							topVisibleItem(item.scope[itemName]) if topVisibleItem
							topVisibleElement(item.element) if topVisibleElement
							topVisibleScope(item.scope) if topVisibleScope
							datasource.topVisible(item) if datasource.topVisible

						loading = (value) ->
							adapter.isLoading = value
							viewportScope[$attr.isLoading] = value if $attr.isLoading
							datasource.loading(value) if typeof datasource.loading is 'function'

						ridActual = 0

						itemName = match[1]
						datasourceName = match[2]

						getValueChain = (targetScope, target) ->
							return if not targetScope
							chain = target.match(/^([\w]+)\.(.+)$/)
							return targetScope[target] if not chain or chain.length isnt 3
							return getValueChain(targetScope[chain[1]], chain[2])

						setValueChain = (targetScope, target, value, doNotSet) ->
							return if not targetScope or not target
							if not chain = target.match(/^([\w]+)\.(.+)$/)
								return if target.indexOf('.') isnt -1
							if not chain or chain.length isnt 3
								return targetScope[target] = value if !angular.isObject(targetScope[target]) and !doNotSet
								return targetScope[target] = value
							targetScope[chain[1]] = {} if !angular.isObject(targetScope[chain[1]]) and !doNotSet
							return setValueChain(targetScope[chain[1]], chain[2], value, doNotSet)

						datasource = getValueChain($scope, datasourceName)
						isDatasourceValid = () -> angular.isObject(datasource) and typeof datasource.get is 'function'

						if !isDatasourceValid() # then try to inject datasource as service
							datasource = $injector.get(datasourceName)
							if !isDatasourceValid()
								throw new Error "#{datasourceName} is not a valid datasource"

						bufferSize = Math.max(3, +$attr.bufferSize || 10)
						bufferPadding = -> viewport.outerHeight() * Math.max(0.1, +$attr.padding || 0.1) # some extra space to initiate preload

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