     .merge()
   }
 
-  public func receive(cb: (Client<I>, [String: AnyObject]) -> ()) {
-    receive()
-    .subscribeNext(cb)
-    .addDisposableTo(disposeBag)
-  }
-
   public func receive() -> Observable<(Client<I>, String)> {
     return session.receive()
     .map { (Client(iden: $0), NSString(data: $1, encoding: NSUTF8StringEncoding)) }

    }
  }

  public func incomingConnections(cb: ((Client<I>, [String: AnyObject]?, (Bool) -> ())) -> ()) {
    incomingConnections()
    .subscribeNext(cb)
    .addDisposableTo(disposeBag)
  }

  public func nearbyPeers() -> Observable<[(Client<I>, [String: String]?)]> {
    return session.nearbyPeers().map { $0.map { (Client(iden: $0), $1) } }
  }

  public func nearbyPeers(cb: ([(Client<I>, [String: String]?)]) -> ()) {
    nearbyPeers()
    .subscribeNext(cb)
    .addDisposableTo(disposeBag)
  }

  public func startAdvertising() {

    .map { ($0, String($1!)) }
  }

  public func receive() -> Observable<(Client<I>, String, ResourceState)> {
    return session.receive().map { (Client(iden: $0), $1, $2) }
  }

  public func receive() -> Observable<(Client<I>, String, NSURL)> {
