 	private struct AssociatedKeys {
 		static var ParentCoordinator = "ParentCoordinator"
 	}
-	///	*Must* be set for View Controller acting as Coordinator.rootViewController
-	public var parentCoordinator: Any? {
+
+	public var parentCoordinator: Coordinating? {
 		get {
-			return objc_getAssociatedObject(self, &AssociatedKeys.ParentCoordinator)
+			return objc_getAssociatedObject(self, &AssociatedKeys.ParentCoordinator) as? Coordinating
 		}
 		set {
 			objc_setAssociatedObject(self, &AssociatedKeys.ParentCoordinator, newValue, .OBJC_ASSOCIATION_RETAIN)

	///	etc.
	///
	///	- Parameter completion: An optional `Callback` executed at the end.
	open func start(with completion: @escaping Callback = {_ in}) {}

	/// Tells the coordinator that it is done and that it should 
	///	rewind the view controller state to where it was before `start` was called.
	///	That means either dismiss presented controller or pop pushed ones.
	///
	///	- Parameter completion: An optional `Callback` executed at the end.
	open func stop(with completion: @escaping Callback = {_ in}) {}




	public var coordinatingResponder: UIResponder? {
		return next
	}

	/*
	// sort-of implementation of the custom message/command to put into your Coordinable extension

	func messageTemplate(args: Whatever, sender: Any?) {
		coordinatingResponder?.messageTemplate(args: args, sender: sender)
	}
