add optional callbacks