basic class layout, this is not final, feel free to make changes.