introduce StateContainer