         try recordingSelectedRegionIfNeeded(db) {
             try reducer.fetchAndReduce(db, requiringWriteAccess: requiresWriteAccess)
         }
-        // fatalError("Contract broken: reducer has no initial value")
     }
     
     func cancel() {
         isCancelled = true
+        writer?.asyncWriteWithoutTransaction { db in
+            db.remove(transactionObserver: self)
+        }
     }
     
     func send(_ value: Reducer.Value) {
         if isCancelled { return }
         if let queue = notificationQueue {
             let onChange = self.onChange
-            queue.async { [weak self] in
-                guard let self = self else { return }
+            queue.async {
                 if self.isCancelled { return }
                 onChange(value)
             }

    private var reducer: Reducer
    private let requiresWriteAccess: Bool
    private let observesSelectedRegion: Bool
    private unowned let writer: DatabaseWriter
    private let notificationQueue: DispatchQueue?
    private let reduceQueue: DispatchQueue
    private let onError: (Error) -> Void

                }
            })
        } else {
            // Concurrent fetch
            fetchedValue = writer.concurrentRead(reducer.fetch)
        }
        
