do the processes P* timing out call the C1 gen_server that was just sent a cast? is it possible that C1 takes a while to update its state? did you try to fwd the "update state" process (via cast) to another gen_server on receipt of the cast? - as a test, to verify?