This class must be abstract