turn into a self configuring module with tests