all implemented first pass