     }
 }
 
-// MARK: Observer
+// MARK: - Observer
 
 private final class Observer {
     fileprivate let equals: (AnyObject) -> Bool
-    public weak var owner: AnyObject?
-    public var handler: (() -> Void)?
+    weak var owner: AnyObject?
+    var handler: (() -> Void)?
 
-    public init<T>(owner: T, handler: @escaping () -> Void) where T: AnyObject, T: Equatable {
+    init<T>(owner: T, handler: @escaping () -> Void) where T: AnyObject, T: Equatable {
         self.owner = owner
         self.handler = handler
         self.equals = { [weak owner] otherOwner in

    }

    static func ==<T>(lhs: T, rhs: Observer) -> Bool where T: AnyObject, T: Equatable {
        return rhs.equals(lhs)
    }

    static func ==<T>(lhs: Observer, rhs: T) -> Bool where T: AnyObject, T: Equatable {
        return lhs.equals(rhs)
    }

    static func ==<T>(lhs: T?, rhs: Observer) -> Bool where T: AnyObject, T: Equatable {

        return observers.isEmpty
    }

    // MARK: - Notify API

    /// A boolean value to determine whether the notifications should be sent.
    /// This flag is checked before firing any notification calls to the registered
