A method for managing parallel resource requests in a portable computing device, comprising: generating a first request from a first client, the first request issued in the context of a first execution thread; forwarding (255, 608) the first request to a resource by a resource proxy, wherein the resource proxy is a local representation of the resource; passing in by the first client a preference that informs the resource that the first client allows asynchronous processing of the first request; wherein the asynchronous processing includes: initiating asynchronous processing of the first request by the resource proxy and subsequent to the initiation, returning (257, 608) control to the first client by the resource proxy; marking the resource as forked to indicate the resource is in an incoherent state, in the sense that a last request to the resource was issued, but is not yet serviced or if serviced, the local representation of the resource is not yet updated; processing (256, 612) the first request in the resource while allowing the first client to continue processing in the first execution thread; signaling (264, 614), by the resource, to the resource proxy, completion of the processing of the first request, the completion of the processing of the first request including marking the resource as joinable so that the resource is no longer marked as forked; in parallel, receiving (268, 618), by the first execution thread or by a second execution thread, in the resource a second request; determining whether the resource is joinable, if the resource is not joinable: the thread of the second request waits for the resource to become joinable, otherwise updating (628, 270) the local representation of the resource to a new state and invoking any registered callbacks by the resource proxy, so that the resource becomes available to service the second request; and processing the second request in the resource. generating a first request from a first client, the first request issued in the context of a first execution thread; forwarding (255, 608) the first request to a resource by a resource proxy, wherein the resource proxy is a local representation of the resource; passing in by the first client a preference that informs the resource that the first client allows asynchronous processing of the first request; wherein the asynchronous processing includes: initiating asynchronous processing of the first request by the resource proxy and subsequent to the initiation, returning (257, 608) control to the first client by the resource proxy; marking the resource as forked to indicate the resource is in an incoherent state, in the sense that a last request to the resource was issued, but is not yet serviced or if serviced, the local representation of the resource is not yet updated; processing (256, 612) the first request in the resource while allowing the first client to continue processing in the first execution thread; signaling (264, 614), by the resource, to the resource proxy, completion of the processing of the first request, the completion of the processing of the first request including marking the resource as joinable so that the resource is no longer marked as forked; in parallel, receiving (268, 618), by the first execution thread or by a second execution thread, in the resource a second request; determining whether the resource is joinable, if the resource is not joinable: the thread of the second request waits for the resource to become joinable, otherwise updating (628, 270) the local representation of the resource to a new state and invoking any registered callbacks by the resource proxy, so that the resource becomes available to service the second request; and processing the second request in the resource. initiating asynchronous processing of the first request by the resource proxy and subsequent to the initiation, returning (257, 608) control to the first client by the resource proxy; marking the resource as forked to indicate the resource is in an incoherent state, in the sense that a last request to the resource was issued, but is not yet serviced or if serviced, the local representation of the resource is not yet updated; processing (256, 612) the first request in the resource while allowing the first client to continue processing in the first execution thread; signaling (264, 614), by the resource, to the resource proxy, completion of the processing of the first request, the completion of the processing of the first request including marking the resource as joinable so that the resource is no longer marked as forked; in parallel, receiving (268, 618), by the first execution thread or by a second execution thread, in the resource a second request; determining whether the resource is joinable, if the resource is not joinable: the thread of the second request waits for the resource to become joinable, otherwise updating (628, 270) the local representation of the resource to a new state and invoking any registered callbacks by the resource proxy, so that the resource becomes available to service the second request; and processing the second request in the resource.