partially replace client, target, origin with HookContext