added more optional callbacks