 			exisitingLayers[sub.name] = sub
 		
 		# proper switch with history support
-		@switchInstant newView
+		newView.x = @getPoint(newView).x
+		newView.y = @getPoint(newView).y
+		@add newView if @subLayers.indexOf(newView) is -1
+		@saveCurrentToHistory 'magicMove'
+		@current = newView
+		@current.bringToFront()
 		
 		# fancy animations with magic move
 		for sub in traverseSubLayers newView


			# Animate the current view
			_.extend @current, outgoing.start
			outgoingAnimationObject = 
				layer: @current
				properties: {}
			outgoingAnimationObject.delay = outgoing.delay

		previous = @history[0]
		if previous.view?

			if previous.incomingAnimation is 'magicMove'
				return @magicMove previous.view
			else
				backIn = previous.outgoingAnimation.reverse()
				moveOut = previous.incomingAnimation.reverse()

				# Switch which animation that should carry the delay, if any
				moveOutDelay = moveOut.options.delay
				moveOut.options.delay = backIn.options.delay
				backIn.options.delay = moveOutDelay

				backIn.start()
				moveOut.start()

				@current = previous.view
				@history.shift()
				moveOut.on Events.AnimationEnd, =>
					@current.bringToFront()

	applyAnimation: (newView, incoming, animationOptions, outgoing = {}) ->
		unless newView is @current
