 	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)
 	}
 

	private func swizzled_viewDidAppear(animated: Bool) {
		self.appearState = .DidAppear

		swizzled_viewDidAppear(animated)
	}


	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)
