 	/// See https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
 	/// - Parameter soql: Array of SOQL queries
 	/// - Returns: Promise of an array of QueryResults, in the same order as the "soql" parameter
-	open func query(soql: [String]) -> Promise<[QueryResult<SObject>]> {
-		let promises: [Promise<QueryResult<SObject>>] = soql.map { query(soql: $0) }
+	open func query(soql: [String]) -> Promise<[QueryResult<Record>]> {
+		let promises: [Promise<QueryResult<Record>>] = soql.map { query(soql: $0) }
 		return when(fulfilled: promises)
 	}
 	

	/// - Parameter id: ID of the record to retrieve
	/// - Parameter fields: Optional array of field names to retrieve. If nil, all fields will be retrieved
	/// - Returns: Promise of a dictionary keyed by field names (aka "Record")
	open func retrieve(type: String, id: String, fields: [String]? = nil) -> Promise<SObject> {
		let resource = Resource.retrieve(type: type, id: id, fields: fields, version: version)
		return requestor.request(resource: resource, connectedApp: connectedApp).then(on: q) {
			return try self.decoder.decode(SObject.self, from: $0)
		}
	}
	

		return requestor.request(resource: resource, connectedApp: connectedApp).asVoid()
	}
	
	open func delete(record: Record) -> Promise<Void> {
		guard let id = record.id else {
			return Promise(error: ApplicationError.invalidState(message: "Missing record ID"))
		}
		return delete(type: record.type, id: id)
	}
	
	// MARK: - Describe methods
	
	/// 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
