basic functionality and visuals are all done