1. A method for managing software application states, comprising: selecting a plurality of applications wherein each of the plurality of applications includes a state, and wherein the plurality of applications are accessed collaboratively by a plurality of users; generating a plurality of data contexts based on the selected applications and their respective states for the plurality of users; pushing the plurality of data contexts onto a data stack; and popping the plurality of data contexts from the data stack to reinstate collaborative access by the plurality of users, wherein at least one of the above steps is performed using a program executable by a processor on a computer.