 	func forSegue<T>(identifier: String, for type: T.Type, completion: @escaping TransitionSetupBlock<T>) {
 		DispatchQueue.main.async {
 			self.performSegue(withIdentifier: identifier, sender: nil) { segue in
-				
 				var destination = segue.destination
 				
-				guard destination is T else { fatalError("Can't bring controller \(String(describing: destination.self)) to type \(type)") }
+				guard destination.moduleInput is T else { fatalError("Can't bring controller \(String(describing: destination.self)) to type \(type)") }
 				
 				if destination is UINavigationController {
 					destination = (segue.destination as! UINavigationController).topViewController ?? segue.destination
 				}
 				
-				completion(destination as! T)
+				completion(destination.moduleInput as! T)
 			}
 		}
 	}

		let destination = self.storyboard?.instantiateViewController(withIdentifier: resterationId)
		
		let promise = TransitionPromise(destination: destination, for: type)
		promise.root = self
		
		// Default transition action.

			objc_setAssociatedObject(self, &UIViewController.ClosurePrepareForSegueKey, Box(newValue), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
		}
	}

	// Return transition segue.
	typealias ConfiguratePerformSegue = (UIStoryboardSegue) -> ()
	
