Probably too mcuh for one commit. Many major changes.