flashing out general design, allowing subclassing of modules, and general pubsub for inter-module communication