make drain callback optional