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