diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java
index bcd2120d8..e7b8c01bc 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java
@@ -1,10 +1,18 @@
 package com.iluwatar.eda.advanced;
 
+import com.iluwatar.eda.advanced.events.Event;
+import com.iluwatar.eda.advanced.events.UserCreatedEvent;
+import com.iluwatar.eda.advanced.events.UserUpdatedEvent;
+import com.iluwatar.eda.advanced.handler.UserCreatedEventHandler;
+import com.iluwatar.eda.advanced.handler.UserUpdatedEventHandler;
+
 public class App {
 
     public static void main(String[] args) {
         EventDispatcher dispatcher = new EventDispatcher();
-        dispatcher.registerChannel(Event.class, new Handler());
-        dispatcher.dispatch(new Event());
+        dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler());
+        dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler());
+        dispatcher.dispatch(new UserCreatedEvent());
+        dispatcher.dispatch(new UserUpdatedEvent());
     }
 }
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java
deleted file mode 100644
index a977010c6..000000000
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.iluwatar.eda.advanced;
-
-
-public interface Channel<E extends Message> {
-    public void dispatch(E message);
-}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java
deleted file mode 100644
index f72b79150..000000000
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.iluwatar.eda.advanced;
-
-public interface DynamicRouter<E extends Message> {
-    public void registerChannel(Class<? extends E> contentType, Channel<? extends E> channel);
-    public void dispatch(E content);
-}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java
index def8920c1..468160b45 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java
@@ -1,18 +1,23 @@
 package com.iluwatar.eda.advanced;
 
+import com.iluwatar.eda.advanced.events.Event;
+import com.iluwatar.eda.advanced.framework.Channel;
+import com.iluwatar.eda.advanced.framework.DynamicRouter;
+
 import java.util.HashMap;
 import java.util.Map;
 
 public class EventDispatcher implements DynamicRouter<Event> {
-    private Map<Class<? extends Event>, Handler> handlers;
+
+    private Map<Class<? extends Event>, Channel> handlers;
 
     public EventDispatcher() {
-        handlers = new HashMap<Class<? extends Event>, Handler>();
+        handlers = new HashMap<Class<? extends Event>, Channel>();
     }
 
     public void registerChannel(Class<? extends Event> contentType,
-                                Channel<? extends Event> channel) {
-        handlers.put(contentType, (Handler)channel);
+                                Channel channel) {
+        handlers.put(contentType, channel);
     }
 
     public void dispatch(Event content) {
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java
deleted file mode 100644
index 68631b207..000000000
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.iluwatar.eda.advanced;
-
-public class Handler implements Channel<Event> {
-    public void dispatch(Event message) {
-        System.out.println(message.getClass());
-    }
-}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java
similarity index 56%
rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java
rename to event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java
index 8ad48c704..64b51ea84 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java
@@ -1,4 +1,6 @@
-package com.iluwatar.eda.advanced;
+package com.iluwatar.eda.advanced.events;
+
+import com.iluwatar.eda.advanced.framework.Message;
 
 public class Event implements Message {
     public Class<? extends Message> getType() {
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java
new file mode 100644
index 000000000..75dc776de
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java
@@ -0,0 +1,9 @@
+package com.iluwatar.eda.advanced.events;
+
+import com.iluwatar.eda.advanced.events.Event;
+
+/**
+ * @author cfarrugia
+ */
+public class UserCreatedEvent extends Event {
+}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java
new file mode 100644
index 000000000..df1c0af43
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java
@@ -0,0 +1,6 @@
+package com.iluwatar.eda.advanced.events;
+
+import com.iluwatar.eda.advanced.events.Event;
+
+public class UserUpdatedEvent extends Event {
+}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java
new file mode 100644
index 000000000..20a1cceaa
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java
@@ -0,0 +1,8 @@
+package com.iluwatar.eda.advanced.framework;
+
+
+import com.iluwatar.eda.advanced.events.Event;
+
+public interface Channel<E extends Event> {
+    void dispatch(E message);
+}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java
new file mode 100644
index 000000000..2ae7291f9
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java
@@ -0,0 +1,6 @@
+package com.iluwatar.eda.advanced.framework;
+
+public interface DynamicRouter<E extends Message> {
+    void registerChannel(Class<? extends E> contentType, Channel channel);
+    void dispatch(E content);
+}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java
similarity index 63%
rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java
rename to event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java
index 00d335191..6243dda97 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java
@@ -1,4 +1,4 @@
-package com.iluwatar.eda.advanced;
+package com.iluwatar.eda.advanced.framework;
 
 
 public interface Message {
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java
new file mode 100644
index 000000000..caacd5583
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java
@@ -0,0 +1,15 @@
+package com.iluwatar.eda.advanced.handler;
+
+import com.iluwatar.eda.advanced.events.Event;
+import com.iluwatar.eda.advanced.events.UserCreatedEvent;
+import com.iluwatar.eda.advanced.framework.Channel;
+
+/**
+ * @author cfarrugia
+ */
+public class UserCreatedEventHandler implements Channel<UserCreatedEvent> {
+
+    public void dispatch(UserCreatedEvent message) {
+        System.out.println("User Created!");
+    }
+}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java
new file mode 100644
index 000000000..dada6fafc
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java
@@ -0,0 +1,12 @@
+package com.iluwatar.eda.advanced.handler;
+
+import com.iluwatar.eda.advanced.events.Event;
+import com.iluwatar.eda.advanced.events.UserUpdatedEvent;
+import com.iluwatar.eda.advanced.framework.Channel;
+
+public class UserUpdatedEventHandler implements Channel<UserUpdatedEvent> {
+
+    public void dispatch(UserUpdatedEvent message) {
+        System.out.println("User Updated!");
+    }
+}