building superclass for easier extendability