separating classes for maintainability and readability