A computer system comprising: at least one processor; and a memory comprising instructions stored thereon that when executed by the at least one processor cause the at least one processor to perform acts comprising: running synchronous application logic on at least one background thread, the application logic running on the at least one background thread and accessing an object; and while running the synchronous application logic on the at least one background thread, maintaining a user interface running unblocked and in a responsive state on at least one user interface thread, the user interface running on the at least one user interface thread and accessing the object, wherein the acts further comprise: sending a user input request from the at least one user interface thread to the object; and forwarding the user input request from the object to a dispatcher for the at least one background thread; in response to receiving the user input request at the dispatcher for the at least one background thread: dispatching the user input request to a working thread of the at least one background thread; applying the application logic running on the working thread to the user input request; sending a work request from the working thread to the object; and forwarding the work request from the object to a dispatcher for the at least one user interface thread; in response to receiving the work request at the dispatcher for the at least one user interface thread, performing the work on the object on the at least one user interface thread; wherein the acts further comprise blocking the at least one background thread while performing the work on the at least one user interface thread; wherein the user interface thread can perform work from the background thread while the background thread is blocked, when the work is dispatched to the dispatcher for the at least one user interface thread to run in a synchronous manner and the work is initiated by the background thread. at least one processor; and a memory comprising instructions stored thereon that when executed by the at least one processor cause the at least one processor to perform acts comprising: running synchronous application logic on at least one background thread, the application logic running on the at least one background thread and accessing an object; and while running the synchronous application logic on the at least one background thread, maintaining a user interface running unblocked and in a responsive state on at least one user interface thread, the user interface running on the at least one user interface thread and accessing the object, running synchronous application logic on at least one background thread, the application logic running on the at least one background thread and accessing an object; and while running the synchronous application logic on the at least one background thread, maintaining a user interface running unblocked and in a responsive state on at least one user interface thread, the user interface running on the at least one user interface thread and accessing the object, wherein the acts further comprise: sending a user input request from the at least one user interface thread to the object; and forwarding the user input request from the object to a dispatcher for the at least one background thread; sending a user input request from the at least one user interface thread to the object; and forwarding the user input request from the object to a dispatcher for the at least one background thread; in response to receiving the user input request at the dispatcher for the at least one background thread: dispatching the user input request to a working thread of the at least one background thread; applying the application logic running on the working thread to the user input request; sending a work request from the working thread to the object; and forwarding the work request from the object to a dispatcher for the at least one user interface thread; in response to receiving the work request at the dispatcher for the at least one user interface thread, performing the work on the object on the at least one user interface thread; dispatching the user input request to a working thread of the at least one background thread; applying the application logic running on the working thread to the user input request; sending a work request from the working thread to the object; and forwarding the work request from the object to a dispatcher for the at least one user interface thread; in response to receiving the work request at the dispatcher for the at least one user interface thread, performing the work on the object on the at least one user interface thread; wherein the acts further comprise blocking the at least one background thread while performing the work on the at least one user interface thread; wherein the user interface thread can perform work from the background thread while the background thread is blocked, when the work is dispatched to the dispatcher for the at least one user interface thread to run in a synchronous manner and the work is initiated by the background thread.