re-structured into submodules and let assign be available