angular implementation - first pass