first cut at domain logic