     
     // MARK: - Private
     @available(iOS 9.0, *)
-    private func registeredPreviewingDataFor(previewingContext: UIViewControllerPreviewing)
+    private func onscreenRegisteredPreviewingDataFor(previewingContext: UIViewControllerPreviewing)
         -> RegisteredPreviewingData?
     {
         registeredPreviewingDataList = registeredPreviewingDataList.filter { !$0.isZombie }
         
-        return registeredPreviewingDataList.first { $0.previewingContext === previewingContext }
+        let matchingRegisteredPreviewingData = registeredPreviewingDataList.first { $0.previewingContext === previewingContext }
+        
+        return matchingRegisteredPreviewingData?.isOnscreen == true
+            ? matchingRegisteredPreviewingData
+            : nil
     }
     
     @available(iOS 9.0, *)

        peekState = .waitingForPeekAndPopData
        
        // Invoke callback to force some router to perform transition
        let registeredPreviewingData = registeredPreviewingDataFor(previewingContext: previewingContext)
        registeredPreviewingData?.onPeek(previewingContext, location)
        
        // Check if router requested a transition
        let didTransitionToInProgressState = peekState.transitionToInProgressState()

    var isZombie: Bool {
        return viewController == nil || previewingContext == nil || previewingContext?.sourceView == nil
    }
    
    @available(iOS 9.0, *)
    var isOnscreen: Bool {
        return previewingContext?.sourceView.window != nil && viewController?.view.window != nil
    }
}
