first cut: service layer