a stab at supporting a customized progress callback