 
 			console.log "best candidate is #{closestCandidate}, distance is #{closestDistance}"
 			if closestCandidate? and closestCandidate isnt @id
-				@emitTo(closestCandidate, 'token.add', @token.serialize())
-				@token = null
-				@setSuperNode(false)
+				@emitTo(closestCandidate, 'token.receive', @token.serialize())
+
+				if @isSuperNode
+					@setSuperNode(false)
+				else
+					@token = null
 
 			else
 				@token.candidates = []

			closestChild = null
			closestDistance = Infinity
			
			for child in @getChildren()
				distance = child.position.getDistance(token.targetPosition)
				if distance < closestDistance
					closestDistance = distance


		_onTokenDied: (tokenString) =>
			token = Token.deserialize(tokenString)
			console.log "Received dead token", token.id
			@removeToken(token)


