use threaded callbacks on Input