 		Device.onPointerRelease do ->
 			onItem = (item) ->
 				data = item._impl
-				if data.capturePointer & RELEASE
+				{capturePointer} = data
+				if capturePointer & RELEASE
 					emitSignal item._pointer, 'onRelease', event
-				if data.capturePointer & PRESS
+				if capturePointer & PRESS
 					index = itemsToRelease.indexOf item
 					if index >= 0
 						itemsToRelease[index] = null
-				if data.capturePointer & CLICK
+				if capturePointer & CLICK
 					if utils.has(pressedItems, item)
 						emitSignal item.pointer, 'onClick', event
-				if event._stopPropagation
-					return STOP_PROPAGATION
-				return getEventStatus()
+				if capturePointer & (RELEASE | CLICK)
+					if event._stopPropagation
+						return STOP_PROPAGATION
+					return getEventStatus()
+				0
 
 			(e) ->
 				event._stopPropagation = false
 				event._checkSiblings = false
 
-				captureItems CLICK, impl.window, e._x, e._y, onItem
+				captureItems RELEASE | CLICK, impl.window, e._x, e._y, onItem
 
 				unless event._stopPropagation
 					for item in itemsToRelease by -1


			onItem = (item) ->
				data = item._impl
				if data.capturePointer & MOVE
					data.pointerMoveFlag = flag
				if data.capturePointer & (ENTER | EXIT) and not data.pointerHover
					data.pointerHover = true
					hoverItems.push item
					emitSignal item.pointer, 'onEnter', event

				if data.capturePointer & MOVE
					emitSignal item._pointer, 'onMove', event
				if event._stopPropagation
					return STOP_PROPAGATION
				return getEventStatus()

			(e) ->
				event._stopPropagation = false
				event._checkSiblings = false
				flag = (flag % 2) + 1

				captureItems MOVE, impl.window, e._x, e._y, onItem

				for item in itemsToMove
					if event._stopPropagation

				if item._impl.capturePointer & WHEEL
					if (pointer = item._pointer) and not signal.isEmpty(pointer.onWheel)
						emitSignal pointer, 'onWheel', event
						if event._stopPropagation
							return STOP_PROPAGATION
						return getEventStatus()
				0

			(e) ->
				event._checkSiblings = false
