Revise protocol; use indirection idea for interface