don't saveState all the time - too expensive