more fixing needed but pretty good overall