wrapping everything into a module to export