almost final. pt1, pt2 ok. pt3 almost