must set upper bound of base