formatting sucks but most of the features are there for assignment