modified abstract class parameters and return types to be references since can't instantiate abstract classes