Lots of changes. Been a while since the last commit