use an interface for client, not a concrete implementation