classes moved to packages for clarity