refactored - renamed classes - to make it easier to read