     private let _viewWillReappearFromBeneathNavStackSubject = PublishSubject<Bool>()
     private let _viewDidReappearFromBeneathNavStackSubject = PublishSubject<Bool>()
 
+    override func viewWillAppear(viewController vc: UIViewController, animated: Bool) {
+        super.viewWillAppear(viewController: vc, animated: animated)
+        _viewWillAppearSubject.on(.Next(animated))
+    }
+    
+    override func viewDidAppear(viewController vc: UIViewController, animated: Bool) {
+        super.viewDidAppear(viewController: vc, animated: animated)
+        _viewDidAppearSubject.on(.Next(animated))
+    }
+    
+    override func viewWillDisappear(viewController vc: UIViewController, animated: Bool) {
+        super.viewWillDisappear(viewController: vc, animated: animated)
+        _viewWillDisappearSubject.on(.Next(animated))
+    }
+    
+    override func viewDidDisappear(viewController vc: UIViewController, animated: Bool) {
+        super.viewDidDisappear(viewController: vc, animated: animated)
+        _viewDidDisappearSubject.on(.Next(animated))
+    }
+    
     // MARK: - ModalViewLifeCycleProtocol
 
     func viewWillGetPresented(animated: Bool)

        modalDelegate = self
        navDelegate = self
    }

    private let _viewWillGetPresentedSubject = PublishSubject<Bool>()
    private let _viewDidGetPresentedSubject = PublishSubject<Bool>()


class RxViewLifeCycleDemultiplexer: ViewLifeCycleDemultiplexer, ModalViewLifeCycleProtocol, NavigationViewLifeCycleProtocol
{
    var rx_viewWillAppear: Observable<Bool> {
        return _viewWillAppearSubject.asObservable()
    }
    
    var rx_viewDidAppear: Observable<Bool> {
        return _viewDidAppearSubject.asObservable()
    }
    
    var rx_viewWillDisappear: Observable<Bool> {
        return _viewWillDisappearSubject.asObservable()
    }
    
    var rx_viewDidDisappear: Observable<Bool> {
        return _viewDidDisappearSubject.asObservable()
    }
    
    // MARK: - ModalViewLifeCycleProtocol observables

    var rx_viewWillGetPresented: Observable<Bool> {
        return _viewWillGetPresentedSubject.asObservable()
    }
