Major Rework, split into multiple classes