more flexible autoloader