factored out more external modules