trying to think through the functions each class should need