allow optional callbacks