             return NopDisposable.instance
         }
     }
-    
-    func rx_onDisconnectRemoveValueWithCompletionBlock() -> Observable<FIRDatabaseReference> {
+    /**
+     Ensure the data t this location is removed when
+     the client is disconnected (due to closing the app, navigating
+     to a new page, or network issues
+     
+     rx_onDisconnectRemoveValue() is especially useful for implementing "presence systems.
+    */
+    func rx_onDisconnectRemoveValue() -> Observable<FIRDatabaseReference> {
         return Observable.create { observer in
             self.onDisconnectRemoveValueWithCompletionBlock({ (error, databaseReference) in
                 if let error = error {

            }
        }
    }
}

extension FIRDatabaseReference {
    func rx_updateChildValues(values: [String : AnyObject]) -> Observable<FIRDatabaseReference> {
        return Observable.create { observer in
            self.updateChildValues(values, withCompletionBlock: { (error, databaseReference) in

            }
        }
    }
    /**
     Listen for data changes at a particular location. This is the primary way to read data from
     the Firebase Database. The observers will be triggered for the initial data and again 
     whenever the data changes. In addition, for FIRDataEventTypeChildAdded,FIRDataEventTypeChildMoved 
     and FIRDataEventTypeChildChanged, your block will be passed the key of the previous node by
     priority order.
     
     @param eventType The type of event to listen for.
    */
    func rx_observeWithSiblingKey(eventType: FIRDataEventType) -> Observable<(FIRDataSnapshot, String?)> {
        return Observable.create { observer in
            let handle = self.observeEventType(eventType, andPreviousSiblingKeyWithBlock: { (snapshot, siblingKey) in
