Better logic for updating characters