 	private func swizzled_viewWillAppear(animated: Bool) {
 		self.appearState = .WillAppear
 
+		if isBeingPresented() && parentViewController == nil, let presentingViewController = self.presentingViewController, presentationController = presentationController where !presentationController.shouldRemovePresentersView() {
+			presentingViewControllerForCurrentCoverageCallbacks = presentingViewController
+
+			presentingViewController.traverseViewControllerSubtreeFromHereIncludingPresentedViewControllers(false) { viewController in
+				guard viewController.appearState == .DidAppear else {
+					return
+				}
+
+				viewController.viewWillBeCoveredByViewController(self, animated: animated)
+			}
+		}
+
 		// TODO invalidate decoration insets when moving to a window instead of when appearing
 		decorationInsetsAnimation = nil
 		invalidateDecorationInsetsWithAnimation(nil)

	private func swizzled_viewWillDisappear(animated: Bool) {
		self.appearState = .WillDisappear

		swizzled_viewWillDisappear(animated)
	}


	private func swizzled_viewDidDisappear(animated: Bool) {
		self.appearState = .DidDisappear

		if isBeingDismissed() && parentViewController == nil, let presentingViewController = presentingViewControllerForCurrentCoverageCallbacks {
			presentingViewController.traverseViewControllerSubtreeFromHereIncludingPresentedViewControllers(false) { viewController in
				guard viewController.appearState == .DidAppear else {
					return
				}

				viewController.viewWasUncoveredByViewController(self, animated: animated)
			}
		}

		presentingViewControllerForCurrentCoverageCallbacks = nil

		swizzled_viewDidDisappear(animated)
	}

