decoupling usage from state