abstract function fixed