First and second passes written but not tested :^)