Point 2 finalized, point 3 almost done, missing fail when not valid, point 4 to do