this was almost done but i gave up