Add all the features

All the work I've been doing for the last little while.