 	- Parameter coordinator: The coordinator implementation to start.
 	- Parameter completion: An optional `Callback` passed to the coordinator's `stop()` method.
 	*/
-	public func stopChild<U>(with identifier: Identifier, type: U.Type, completion: @escaping Callback = {_ in}) where U: UIResponder {
+	public func stopChild<U>(with identifier: String, type: U.Type, completion: @escaping Callback = {_ in}) {
 		guard let c = childCoordinators[identifier] as? Coordinator<U> else { return }
 		stopChild(coordinator: c, completion: completion)
+	}
+}
+
+//	Inject parentCoordinator property into all UIViewControllers
+extension UIViewController {
+	private struct AssociatedKeys {
+		static var ParentCoordinator = "ParentCoordinator"
+	}
+	///	*Must* be set for View Controller acting as Coordinator.rootViewController
+	open var parentCoordinator: Coordinator<Any>? {
+		get {
+			//	DANGER: this returns Any! so if you call this and
+			//	object is not really there, your app will crash
+			return objc_getAssociatedObject(self, &AssociatedKeys.ParentCoordinator) as? Coordinator<Any>
+		}
+		set {
+			objc_setAssociatedObject(self, &AssociatedKeys.ParentCoordinator, newValue, .OBJC_ASSOCIATION_RETAIN)
+		}
 	}
 }
 

	}





	/// Default identifier is the class name of the Coordinator subclass
	public static var identifier: Identifier {
		return String(describing: self)
	}

	open var identifier: Identifier {
		return type(of: self).identifier
	}

	/// Parent Coordinator
	open var parentCoordinator: Coordinator<Any>?
	///	A dictionary of child Coordinators, where key is Coordinator's identifier property
	open var childCoordinators: [Identifier: Any] = [:]





import UIKit

/**
Coordinators are a design pattern that encourages decoupling view controllers
such that they know as little as possible about how they are presented.
