almost complete except validation