use composition instead of inheritance