abstract function init