Split into client, service & shared interface