mostly functional pass