John - without seeing your code, we can't determine why it is allowing you to undo and redo only once. You mention that you have saved the current and previous states in two variables. Are these scalar variables? If I were to implement redo and undo functionality, then I might use an array of some kind that would push the states to the front of the array so that when I call undo, the front would be popped up and the variables (or whatever) updated with the new front of the array. The popped off data would be pushed to the front of the redo array so that if I chose to call redo, then it's front would be popped off. There is lots more that you would have to consider - when should the redo array be emptied, when should the undo array be emptied, etc.