 			objc_setAssociatedObject(self, &UIViewController.ClosurePrepareForSegueKey, Box(newValue), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
 		}
 	}
-	
+
 	// Return transition segue.
 	typealias ConfiguratePerformSegue = (UIStoryboardSegue) -> ()
 	

	/// - parameter block: Initialize controller for transition and fire.
	///
	public func then(_ block: TransitionSetupBlock<T>) {
		if destination != nil && destination is T {
			block((destination as! T))
			
			self.push()
		} else if destination != nil {

	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.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.moduleInput as! T)
			}
		}
	}
