       }
     }
   }
+}
+
+public final class ManagedObjectContextChangesObserver {
+  public typealias Handler = (ManagedObjectContextChange<NSManagedObject>, ObservedEvent, NSManagedObjectContext) -> Void
 
   let kind: Kind
   let event: ObservedEvent

  let notificationCenter: NotificationCenter
  private let handler: Handler
  private var tokens = [NSObjectProtocol]()

  public init(kind: Kind, event: ObservedEvent, notificationCenter: NotificationCenter = .default, notificationQueue: OperationQueue? = nil, handler: @escaping Handler) {
    self.kind = kind

    removeObservers()
  }

  // MARK: - Private Implementation

  /// Removes all the observers.
  private func removeObservers() {
