Index: /trunk/objectmq/src/omq/client/annotation/AsyncMethod.java
===================================================================
--- /trunk/objectmq/src/omq/client/annotation/AsyncMethod.java	(revision 15)
+++ /trunk/objectmq/src/omq/client/annotation/AsyncMethod.java	(revision 16)
@@ -16,4 +16,3 @@
 @Target(ElementType.METHOD)
 public @interface AsyncMethod {
-	String generateEvent() default "";
 }
Index: /trunk/objectmq/src/omq/common/event/Event.java
===================================================================
--- /trunk/objectmq/src/omq/common/event/Event.java	(revision 15)
+++ /trunk/objectmq/src/omq/common/event/Event.java	(revision 16)
@@ -17,4 +17,12 @@
 	private String corrId;
 	private String topic;
+
+	public Event() {
+	}
+
+	public Event(String corrId, String topic) {
+		this.corrId = corrId;
+		this.topic = topic;
+	}
 
 	public Event(String corrId) {
Index: /trunk/objectmq/src/omq/common/event/EventDispatcher.java
===================================================================
--- /trunk/objectmq/src/omq/common/event/EventDispatcher.java	(revision 15)
+++ /trunk/objectmq/src/omq/common/event/EventDispatcher.java	(revision 16)
@@ -110,4 +110,15 @@
 
 	public int addListener(EventListener e) throws Exception {
+		// Map<String, ArrayList<EventListener<Event>>> mListeners =
+		// listeners.get(e.getTopic());
+		// if(mListeners == null){
+		// mListeners = new HashMap<String, ArrayList<EventListener<Event>>>();
+		//
+		// String queueName = env.getProperty(ParameterQueue.EVENT_REPLY_QUEUE);
+		// String reference = e.getTopic();
+		// channel.exchangeDeclare(reference, "fanout");
+		// channel.queueBind(queueName, reference, "");
+		// }
+
 		Vector<EventListener> vListeners = listeners.get(e.getTopic());
 		if (vListeners == null) {
Index: /trunk/objectmq/src/omq/common/event/EventListener.java
===================================================================
--- /trunk/objectmq/src/omq/common/event/EventListener.java	(revision 15)
+++ /trunk/objectmq/src/omq/common/event/EventListener.java	(revision 16)
@@ -8,5 +8,5 @@
  * 
  */
-public abstract class EventListener {
+public abstract class EventListener<E extends Event> {
 	private String topic;
 
@@ -31,5 +31,5 @@
 	 * @param event
 	 */
-	public abstract void notifyEvent(Event event);
+	public abstract void notifyEvent(E event);
 
 	public void setTopic(String topic) {
Index: /trunk/objectmq/src/omq/common/event/EventWrapper.java
===================================================================
--- /trunk/objectmq/src/omq/common/event/EventWrapper.java	(revision 16)
+++ /trunk/objectmq/src/omq/common/event/EventWrapper.java	(revision 16)
@@ -0,0 +1,33 @@
+package omq.common.event;
+
+public class EventWrapper {
+	private String type;
+	private Event event;
+
+	public EventWrapper() {
+	}
+
+	//TODO change to simpleName
+	public EventWrapper(Event event) {
+		this.event = event;
+		type = event.getClass().getCanonicalName();
+		// type = event.getClass().getSimpleName();
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Event getEvent() {
+		return event;
+	}
+
+	public void setEvent(Event event) {
+		this.event = event;
+	}
+
+}
Index: /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java
===================================================================
--- /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 15)
+++ /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 16)
@@ -73,10 +73,23 @@
 
 	@Override
-	public Event deserializeEvent(byte[] unZippedBytes) throws SerializerException {
-		// TODO deserializeEvent class<?> ¿?
-		return null;
+	public Event deserializeEvent(byte[] bytes) throws SerializerException {
+		try {
+			String json = new String(bytes);
+System.out.println(json);
+			JsonParser parser = new JsonParser();
+			JsonObject jsonObj = parser.parse(json).getAsJsonObject();
+
+			String type = jsonObj.get("type").getAsString();
+
+			JsonElement jsonElement = jsonObj.get("event");
+			Event event;
+
+			event = (Event) gson.fromJson(jsonElement, Class.forName(type));
+
+			return event;
+		} catch (Exception e) {
+			throw new SerializerException("Deserialize event", e.getCause());
+		}
 	}
-	
-	
 
 }
Index: /trunk/objectmq/src/omq/common/util/Serializers/KryoImp.java
===================================================================
--- /trunk/objectmq/src/omq/common/util/Serializers/KryoImp.java	(revision 15)
+++ /trunk/objectmq/src/omq/common/util/Serializers/KryoImp.java	(revision 16)
@@ -8,4 +8,5 @@
 
 import omq.common.event.Event;
+import omq.common.event.EventWrapper;
 import omq.common.message.Request;
 import omq.common.message.Response;
@@ -54,5 +55,6 @@
 	@Override
 	public Event deserializeEvent(byte[] bytes) throws SerializerException {
-		return (Event) deserializeObject(bytes, Event.class);
+		EventWrapper wrapper = (EventWrapper) deserializeObject(bytes, EventWrapper.class);
+		return wrapper.getEvent();
 	}
 
Index: /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java
===================================================================
--- /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 15)
+++ /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 16)
@@ -14,4 +14,5 @@
 import omq.common.event.Event;
 import omq.common.event.EventListener;
+import omq.common.event.EventWrapper;
 import omq.common.util.ParameterQueue;
 import omq.common.util.Serializer;
@@ -123,6 +124,7 @@
 	public void notifyEvent(Event event) throws IOException, SerializerException {
 		event.setTopic(UID);
+		EventWrapper wrapper = new EventWrapper(event);
 		channel.exchangeDeclare(UID, "fanout");
-		channel.basicPublish(UID, "", null, Serializer.serialize(event));
+		channel.basicPublish(UID, "", null, Serializer.serialize(wrapper));
 	}
 
Index: /trunk/objectmq/src/omq/ztest/calculator/Calculator.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/Calculator.java	(revision 15)
+++ /trunk/objectmq/src/omq/ztest/calculator/Calculator.java	(revision 16)
@@ -1,3 +1,5 @@
 package omq.ztest.calculator;
+
+import java.io.IOException;
 
 import omq.Remote;
@@ -5,4 +7,5 @@
 import omq.client.annotation.RemoteInterface;
 import omq.client.annotation.SyncMethod;
+import omq.exception.SerializerException;
 
 @RemoteInterface
@@ -15,5 +18,5 @@
 	
 	@AsyncMethod
-	public void divideByZero();
+	public void divideByZero() throws IOException, SerializerException;
 
 }
Index: /trunk/objectmq/src/omq/ztest/calculator/CalculatorImpl.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/CalculatorImpl.java	(revision 15)
+++ /trunk/objectmq/src/omq/ztest/calculator/CalculatorImpl.java	(revision 16)
@@ -1,4 +1,7 @@
 package omq.ztest.calculator;
 
+import java.io.IOException;
+
+import omq.exception.SerializerException;
 import omq.server.remote.request.RemoteObject;
 
@@ -28,6 +31,7 @@
 	}
 
-	public void divideByZero() {
-		
+	public void divideByZero() throws IOException, SerializerException {
+		ZeroEvent ze = new ZeroEvent("my zero event");
+		notifyEvent(ze);
 	}
 
Index: /trunk/objectmq/src/omq/ztest/calculator/CalculatorTest.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/CalculatorTest.java	(revision 15)
+++ /trunk/objectmq/src/omq/ztest/calculator/CalculatorTest.java	(revision 16)
@@ -24,5 +24,6 @@
 		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
 		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
-		env.setProperty(ParameterQueue.SERIALIZERNAME, "omq.common.util.Serializers.KryoImp");
+//		env.setProperty(ParameterQueue.SERIALIZERNAME, "omq.common.util.Serializers.KryoImp");
+		env.setProperty(ParameterQueue.SERIALIZERNAME, "omq.common.util.Serializers.GsonImp");
 		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
 
@@ -70,3 +71,14 @@
 		Thread.sleep(200);
 	}
+
+	@Test
+	public void notifyEvent() throws Exception {
+		ZeroListener zL = new ZeroListener();
+
+		remoteCalc.addListener(zL);
+
+		remoteCalc.divideByZero();
+
+		Thread.sleep(200);
+	}
 }
Index: /trunk/objectmq/src/omq/ztest/calculator/ServerTest.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/ServerTest.java	(revision 15)
+++ /trunk/objectmq/src/omq/ztest/calculator/ServerTest.java	(revision 16)
@@ -18,5 +18,7 @@
 		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
 		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
-		env.setProperty(ParameterQueue.SERIALIZERNAME, "omq.common.util.Serializers.KryoImp");
+		// env.setProperty(ParameterQueue.SERIALIZERNAME,
+		// "omq.common.util.Serializers.KryoImp");
+		env.setProperty(ParameterQueue.SERIALIZERNAME, "omq.common.util.Serializers.GsonImp");
 		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
 
Index: /trunk/objectmq/src/omq/ztest/calculator/ZeroEvent.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/ZeroEvent.java	(revision 15)
+++ /trunk/objectmq/src/omq/ztest/calculator/ZeroEvent.java	(revision 16)
@@ -9,7 +9,14 @@
 	private static final long serialVersionUID = 1L;
 
+	public ZeroEvent() {
+	}
+
 	public ZeroEvent(String corrId) {
 		super(corrId);
 	}
 
+	public String getZeroMessage() {
+		return "divition by 0";
+	}
+
 }
Index: /trunk/objectmq/src/omq/ztest/calculator/ZeroListener.java
===================================================================
--- /trunk/objectmq/src/omq/ztest/calculator/ZeroListener.java	(revision 16)
+++ /trunk/objectmq/src/omq/ztest/calculator/ZeroListener.java	(revision 16)
@@ -0,0 +1,12 @@
+package omq.ztest.calculator;
+
+import omq.common.event.EventListener;
+
+public class ZeroListener extends EventListener<ZeroEvent> {
+
+	@Override
+	public void notifyEvent(ZeroEvent event) {
+		System.out.println(event.getZeroMessage());
+	}
+
+}
