outer methods take full state