don't mutate hidden state