updated and cleaned up some of the code