Big rearranging of classes, splitting of repo into separate files.