Currently the synchronization mechanisms are all over the place, streamline them a bit more (possibly limit them to usage of channels and increase the responsibilities for the "state handler" coroutine which already saves the state and drop all mutex usage)