- Ripped out some logics into separate classes