updated but still a work in progress