     /// Maps data received from the signal into an object (on the default Background thread) which
     /// implements the Mappable protocol and returns the result back on the MainScheduler.
     /// If the conversion fails, the signal errors.
-    public func mapObject<T: Mappable>(type: T.Type) -> Observable<T> {
+    public func mapObject<T: Mappable>(type: T.Type, withKeyPath keyPath: String = "") -> Observable<T> {
         return observeOn(SerialDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
             .flatMap { response -> Observable<T> in
-                return Observable.just(try response.mapObject())
+                return Observable.just(try response.mapObject(withKeyPath: keyPath))
             }
             .observeOn(MainScheduler.instance)
     }

    /// Maps data received from the signal into an object (on the default Background thread) which
    /// implements the Mappable protocol and returns the result back on the MainScheduler.
    /// If the conversion fails, the nil is returned instead of error signal.
    public func mapObjectOptional<T: Mappable>(type: T.Type) -> Observable<T?> {
        return observeOn(SerialDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
            .flatMap { response -> Observable<T?> in
                do {
                    let object: T = try response.mapObject()
                    return Observable.just(object)
                } catch {
                    return Observable.just(nil)

    /// Maps data received from the signal into an array of objects (on the default Background thread)
    /// which implement the Mappable protocol and returns the result back on the MainScheduler
    /// If the conversion fails, the signal errors.
    public func mapArray<T: Mappable>(type: T.Type, withKeyPath keyPath: String = "") -> Observable<[T]> {
        return observeOn(SerialDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
            .flatMap { response -> Observable<[T]> in
                return Observable.just(try response.mapArray(withKeyPath: keyPath))
            }
            .observeOn(MainScheduler.instance)
    }
