First pass at client model