first pass
second pass