WIP unify call() and register() codepath