changed module layout, added event publisher and subscriber DSL