use func instead of interface as callback mechanism