 		return request(requestBuilder: builder, jsonDeserializer: deserializer)
 	}
 	
-	/// Asynchronously retrieves metadata information about a Salesforce object and its fields.
+	/// Asynchronously retrieves metadata about a Salesforce object and its fields.
 	/// See: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_describe.htm
 	/// - Parameter type: Object name
 	/// - Returns: Promise<ObjectDescription>

			return try Router.limits(authData: authData, version: self.version).asURLRequest()
		}
		let deserializer = {
			(response: [String: [String: Int]]) throws -> [Limit] in
			var limits = [Limit]()
			for (name, value) in response {
				try limits.append(Limit(name: name, json: value))

    /// - Parameter devicetoken: the device token returned from a successful UIApplication.shared.registerForRemoteNotification() invocation.
    /// - Returns: Promise of Any Type; result will either be success, or failure message
    open func registerForSalesforceNotifications(devicetoken: String) -> Promise<Any> {
		let headers = ["Content-Type" : "application/json"]
		let params = ["ConnectionToken" : devicetoken, "ServiceType" : "Apple" ]
		return custom(method: .post, path: "/services/data/v\(version)/sobjects/MobilePushServiceDevice", parameters: params, headers: headers)
    }
	
	fileprivate func request<T,U>(requestBuilder: @escaping (AuthData) throws -> URLRequest, jsonDeserializer: @escaping (U) throws -> T) -> Promise<T> {
		
