require files only if necessary
more optimization