updated to allow handlers to call each other through an internal channel