 			pending = false
 			{watchers} = Watcher
 
-			tmp = currentWatchersSwitch
-			currentWatchersSwitch = nextWatchersSwitch
-			nextWatchersSwitch = tmp
-
+			# update watchers
 			for watcher in watchers
 				if watcher.node
 					updateWatcher watcher
 
+			# clear nodes
 			for watcher in watchers
 				if watcher.node
 					clearRec watcher.node
+
+			# emit signals
+			while watcher = watchersWithNodesToRemove.pop()
+				nodesToRemove = watcher._nodesToRemove
+				while node = nodesToRemove.pop()
+					emitSignal watcher, 'onRemove', node
+			while watcher = watchersWithNodesToAdd.pop()
+				nodesToAdd = watcher._nodesToAdd
+				while node = nodesToAdd.pop()
+					emitSignal watcher, 'onAdd', node
 			return
 
 		(node) ->
-			thisFlag = CHECK_WATCHERS_CHILDREN | currentWatchersSwitch
 			node._checkWatchers = CHECK_WATCHERS_THIS
 			tmp = node
 			while tmp
-				if tmp._checkWatchers & currentWatchersSwitch
+				if tmp._checkWatchers & CHECK_WATCHERS_CHILDREN
 					break
-				tmp._checkWatchers |= thisFlag
+				tmp._checkWatchers |= CHECK_WATCHERS_CHILDREN
 				tmp = tmp._parent
 
 			unless pending


	checkWatchersDeeply: checkWatchersDeeply = do ->
		pending = false

		i = 0
		CHECK_WATCHERS_THIS = 1 << i++
		CHECK_WATCHERS_CHILDREN = 1 << i++
		CHECK_WATCHERS_ALL = (1 << i++) - 1
		CHECK_WATCHERS_SWITCH_1 = i << i++
		CHECK_WATCHERS_SWITCH_2 = i << i++

		currentWatchersSwitch = CHECK_WATCHERS_SWITCH_1
		nextWatchersSwitch = CHECK_WATCHERS_SWITCH_2

		checkRec = (watcher, watcherUid, node, update) ->
			unless update & CHECK_WATCHERS_THIS

			return

		clearRec = (node) ->
			if node._checkWatchers > 0
				node._checkWatchers = 0
				if node instanceof Tag
					for child in node.children
						clearRec child
