Part I: Class design