 		return receipt
 	}
 
-	public func submit(resourceAt localURL: URL, to peers: [MCPeerID]) throws -> ResourceRequestReceipt<ResourceRequest> {
+	public func submit(resourceAt localURL: URL, to peers: [MCPeerID]) throws -> ResourceTransferOperation<ResourceRequest> {
 		let request = ResourceRequest()
 		return try submit(request, withResourceAt: localURL, to: peers)
 	}
 }
 
 extension Session {
-	public func addResponder<T: ResourceRequestProtocol>(for resourceRequestType: T.Type, on queue: DispatchQueue, action: @escaping (_ event: ResourceEvent<T>, _ send: @escaping (_ response: T.Response) throws -> Void) -> Void) -> Disposable {
+	public func addResponder<T: ResourceRequestProtocol>(for resourceRequestType: T.Type, on queue: DispatchQueue, action: @escaping (_ event: ResourceTransferEvent<T>, _ send: @escaping (_ response: T.Response) throws -> Void) -> Void) -> Disposable {
 		let disposable = CompositeDisposable()
 
-		let responderQueue = DispatchQueue(label: "com.junpluse.Tuka.Session.ResourceRequestResponderQueue")
-		let responder = RequestResponder<T, MCPeerID>(queue: responderQueue) { request, peer, send in
+		let responseQueue = DispatchQueue(label: "com.junpluse.Tuka.Session.ResourceRequestResponderQueue")
+		let responder = RequestResponder<T, MCPeerID>(queue: responseQueue) { request, peer, send in
 			let sessionEventDisposable = CompositeDisposable()
 
 			let sendAndDispose: (T.Response) throws -> Void = { response in

import Foundation
import MultipeerConnectivity

public final class ResourceRequestReceipt<Request: ResourceRequestProtocol>: RequestReceiptProtocol {
	public typealias Peer = Session.Peer
	public typealias Event = ResourceEvent<Request>

	public let request: Request
	public let peers: [Peer]

}

extension Session {
	public func submit<T: ResourceRequestProtocol>(_ resourceRequest: T, withResourceAt localURL: URL, to peers: [MCPeerID]) throws -> ResourceTransferOperation<T> {
		try send(resourceRequest, to: peers)

		let receipt = ResourceTransferOperation(request: resourceRequest, peers: peers)
		let transferQueue = DispatchQueue(label: "com.junpluse.Tuka.Session.ResourceTransferQueue")

		peers.forEach { peer in
