 
     private func onValueSet(newValue: T, transaction: ReadTransaction?) {
         for (_, observer) in observers {
-            observer(newValue, transaction)
+            observer.thread.dispatchSynchronously {
+                observer.callback(newValue, transaction)
+            }
         }
     }
 }

        disposeBag.dispose()
    }

    public func didChange(thread: CallbackThread = .CallingThread, callback: (T, ReadTransaction?) -> Void) -> Disposable {

        let token = nextObserverToken
        observers[token] = callback//TODO Account for thread
        nextObserverToken += 1

        return BasicDisposable { [weak self] in


    // MARK: Private properties

    private var observers: [UInt64: (thread: CallbackThread, callback: Callback)]
    private var nextObserverToken = UInt64(0)

    // MARK: Object lifecycle
