heavy refactoring and documentation. Use argumentify instead dist.