cb should receive same arguments as return value