add minimal state change functionality with persistence