     ///
     /// - parameter classType: The type of the array that should be returned
     /// - returns: A new Signal emitting an array of decoded objects
-    public func mapToTypeArray<X: Decodable where X == X.DecodedType>(classType: X.Type) -> Signal<[X], ArgonautError> {
+    public func mapToTypeArray<X: Decodable where X == X.DecodedType>(classType: X.Type, rootKey: String? = nil) -> Signal<[X], ArgonautError> {
         return mapError { ArgonautError.Underlying($0) }
             .attemptMap { object in
-                let decoded: Decoded<[X]> = decode(object)
+                let decoded: Decoded<[X]>
+                if let rootKey = rootKey, let object = object as? [String: AnyObject] {
+                    decoded = decode(object, rootKey: rootKey)
+                } else {
+                    decoded = decode(object)
+                }
                 return result(decoded)
             }
     }

    ///
    /// - parameter classType: The type of the object that should be returned
    /// - returns: A new Signal emitting the decoded object
    public func mapToType<X: Decodable where X == X.DecodedType>(classType: X.Type) -> Signal<X, ArgonautError> {
        return mapError { ArgonautError.Underlying($0) }
            .attemptMap { object in
                let decoded: Decoded<X> = decode(object)
                return result(decoded)
            }
    }

    }
    
}
