initial exercise, with weird refactoring
wow inheritance!