re-implementation from scratch
example module
implement new uninstall process