Lots of stuff added (not really, just don't feel like explaining)