Big changes

See the invidual description :P