added a whole bunch of features / changes