no autoload, but setup() function