splitting modules. adding more documentation