Index: /objectmq/src/omq/client/remote/response/ResponseListener.java
===================================================================
--- /objectmq/src/omq/client/remote/response/ResponseListener.java	(revision 5)
+++ /objectmq/src/omq/client/remote/response/ResponseListener.java	(revision 6)
@@ -11,5 +11,4 @@
 import omq.common.util.Serializer;
 import omq.exception.SerializerException;
-
 
 import com.rabbitmq.client.ConsumerCancelledException;
@@ -124,4 +123,8 @@
 	}
 
+	public static boolean isVoid() {
+		return rListener == null;
+	}
+
 	/**
 	 * Method to retrieve the unique ResponseListener
Index: /objectmq/src/omq/common/broker/Broker.java
===================================================================
--- /objectmq/src/omq/common/broker/Broker.java	(revision 5)
+++ /objectmq/src/omq/common/broker/Broker.java	(revision 6)
@@ -5,17 +5,25 @@
 import omq.Remote;
 import omq.client.proxy.Proxymq;
+import omq.client.remote.response.ResponseListener;
+import omq.common.event.EventDispatcher;
+import omq.common.event.EventTrigger;
 import omq.common.remote.OmqConnectionFactory;
 import omq.exception.RemoteException;
 import omq.server.remote.request.RemoteObject;
 
+import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
 
 public class Broker {
 	private static Connection connection;
+	private static Channel channel;
 	private static Properties environment;
 
 	public static void initBroker(Properties env) throws Exception {
-		if (environment != null) {
+		if (environment == null) {
+			environment = env;
 			connection = OmqConnectionFactory.getConnection(env);
+			channel = connection.createChannel();
+			EventTrigger.initEventTrigger(environment);
 		}
 	}
@@ -26,8 +34,18 @@
 	}
 
+	public static Channel getChannel() throws Exception {
+		return channel;
+	}
+
 	public static Remote lookup(String reference, Class<?> contract) throws RemoteException {
 		try {
-			if (Proxymq.containsProxy(reference)) {
-				Proxymq proxy = new Proxymq(reference, contract, null);
+			if (ResponseListener.isVoid()) {
+				ResponseListener.init(environment);
+			}
+			if (EventDispatcher.isVoid()) {
+				EventDispatcher.init(environment);
+			}
+			if (!Proxymq.containsProxy(reference)) {
+				Proxymq proxy = new Proxymq(reference, contract, environment);
 				Class<?>[] array = { contract };
 				return (Remote) Proxymq.newProxyInstance(contract.getClassLoader(), array, proxy);
@@ -40,7 +58,6 @@
 	}
 
-	public static void bind(String reference, Remote obj) throws RemoteException {
+	public static void bind(String reference, RemoteObject remote) throws RemoteException {
 		try {
-			RemoteObject remote = (RemoteObject) obj;
 			remote.start(reference, environment);
 		} catch (Exception e) {
Index: /objectmq/src/omq/common/event/EventDispatcher.java
===================================================================
--- /objectmq/src/omq/common/event/EventDispatcher.java	(revision 5)
+++ /objectmq/src/omq/common/event/EventDispatcher.java	(revision 6)
@@ -165,3 +165,7 @@
 	}
 
+	public static boolean isVoid() {
+		return dispatcher == null;
+	}
+
 }
Index: /objectmq/src/omq/common/message/request/AsyncRequest.java
===================================================================
--- /objectmq/src/omq/common/message/request/AsyncRequest.java	(revision 5)
+++ /objectmq/src/omq/common/message/request/AsyncRequest.java	(revision 6)
@@ -6,10 +6,9 @@
 
 import omq.Remote;
+import omq.common.broker.Broker;
 import omq.common.event.Event;
 import omq.common.message.response.Response;
 import omq.common.util.ParameterQueue;
 import omq.common.util.Serializer;
-import omq.server.remote.request.RequestListener;
-
 
 import com.rabbitmq.client.AMQP.BasicProperties;
@@ -30,5 +29,5 @@
 	private String topic;
 
-	public AsyncRequest() { 
+	public AsyncRequest() {
 		super();
 	}
@@ -67,5 +66,5 @@
 		// published to everybody interested in.
 		if (topic != null) {
-			Channel channel = RequestListener.getRequestListener().getChannel();
+			Channel channel = Broker.getChannel();
 			channel.exchangeDeclare(topic, "fanout");
 
@@ -73,5 +72,4 @@
 
 			channel.basicPublish(topic, "", null, Serializer.serialize(event));
-			channel.close();
 		}
 	}
@@ -81,5 +79,5 @@
 		// Get the environment properties
 		String exchange = env.getProperty(ParameterQueue.RPC_EXCHANGE);
-		String routingkey = env.getProperty(ParameterQueue.RPC_ROUTING_KEY);
+		String routingkey = this.uid;
 
 		// Add the correlation ID and create a replyTo property
Index: /objectmq/src/omq/common/message/request/SyncRequest.java
===================================================================
--- /objectmq/src/omq/common/message/request/SyncRequest.java	(revision 5)
+++ /objectmq/src/omq/common/message/request/SyncRequest.java	(revision 6)
@@ -6,4 +6,5 @@
 
 import omq.Remote;
+import omq.common.broker.Broker;
 import omq.common.message.response.Response;
 import omq.common.util.ParameterQueue;
@@ -11,6 +12,4 @@
 import omq.exception.RetryException;
 import omq.exception.TimeoutException;
-import omq.server.remote.request.RequestListener;
-
 
 import com.rabbitmq.client.AMQP.BasicProperties;
@@ -30,10 +29,9 @@
 	private long timeout;
 	private int retries;
-	
-	
+
 	public SyncRequest() {
 		super();
 	}
-	
+
 	/**
 	 * This is the constructor of a synchronous request
@@ -62,11 +60,9 @@
 
 		// Send the response to the proxy
-		Channel channel = RequestListener.getRequestListener().getChannel();
+		Channel channel = Broker.getChannel();
 
 		BasicProperties replyProps = new BasicProperties.Builder().correlationId(props.getCorrelationId()).build();
 
 		channel.basicPublish("", props.getReplyTo(), replyProps, Serializer.serialize(resp));
-
-		channel.close();
 	}
 
@@ -91,5 +87,5 @@
 		String exchange = env.getProperty(ParameterQueue.RPC_EXCHANGE);
 		String replyQueueName = env.getProperty(ParameterQueue.RPC_REPLY_QUEUE);
-		String routingkey = env.getProperty(ParameterQueue.RPC_ROUTING_KEY);
+		String routingkey = this.uid;
 
 		// Add the correlation ID and create a replyTo property
@@ -122,8 +118,8 @@
 		}
 
-		return resp.getResp(env);
+		// TODO why I need env?
+		return resp.getResp();
 	}
 
-	
 	public long getTimeout() {
 		return timeout;
@@ -141,4 +137,4 @@
 		this.retries = retries;
 	}
-	
+
 }
Index: jectmq/src/omq/common/message/response/CollectionResponse.java
===================================================================
--- /objectmq/src/omq/common/message/response/CollectionResponse.java	(revision 5)
+++ 	(revision )
@@ -1,61 +1,0 @@
-package omq.common.message.response;
-
-import java.util.Collection;
-import java.util.Properties;
-
-/**
- * 
- * @author Sergi Toda <sergi.toda@estudiants.urv.cat> 
- *
- */
-public class CollectionResponse extends Response {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	private String collectionType;
-	private Collection<Response> collection;
-
-	public CollectionResponse() {
-		super();
-	}
-
-	public CollectionResponse(String proxyUID, String collectionType, Collection<Response> collection) {
-		super(proxyUID);
-		this.collectionType = collectionType;
-		this.collection = collection;
-	}
-
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	@Override
-	public Object getResp(Properties env) throws Exception {
-		Collection tmp = (Collection) Class.forName(collectionType).newInstance();
-		for (Response resp : collection) {
-			tmp.add(resp.getResp(env));
-		}
-		return tmp;
-	}
-
-	@Override
-	public Object getResp() throws Exception {
-		return collection;
-	}
-
-	public String getCollectionType() {
-		return collectionType;
-	}
-
-	public void setCollectionType(String collectionType) {
-		this.collectionType = collectionType;
-	}
-
-	public Collection<Response> getCollection() {
-		return collection;
-	}
-
-	public void setCollection(Collection<Response> collection) {
-		this.collection = collection;
-	}		
-	
-}
Index: jectmq/src/omq/common/message/response/DefaultResponse.java
===================================================================
--- /objectmq/src/omq/common/message/response/DefaultResponse.java	(revision 5)
+++ 	(revision )
@@ -1,44 +1,0 @@
-package omq.common.message.response;
-
-import java.util.Properties;
-
-/**
- * 
- * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
- * 
- */
-public class DefaultResponse extends Response {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Object obj;
-
-	public DefaultResponse() {
-		super();
-	}
-
-	public DefaultResponse(String proxyUID, Object obj) {
-		super(proxyUID);
-		this.obj = obj;
-	}
-
-	@Override
-	public Object getResp(Properties env) throws Exception {
-		return obj;
-	}
-
-	@Override
-	public Object getResp() throws Exception {
-		return obj;
-	}
-
-	public Object getObj() {
-		return obj;
-	}
-
-	public void setObj(Object obj) {
-		this.obj = obj;
-	}
-}
Index: jectmq/src/omq/common/message/response/ExceptionResponse.java
===================================================================
--- /objectmq/src/omq/common/message/response/ExceptionResponse.java	(revision 5)
+++ 	(revision )
@@ -1,47 +1,0 @@
-package omq.common.message.response;
-
-import java.util.Properties;
-
-/**
- * This class it's used to wrap exceptions.
- * 
- * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
- * 
- */
-public class ExceptionResponse extends Response {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Throwable exception;
-
-	public ExceptionResponse() {
-		super();
-	}
-
-	public ExceptionResponse(String proxyUID, Throwable exception) {
-		super(proxyUID);
-		this.exception = exception;
-	}
-
-	/**
-	 * Throws a replica of an exception generated in the server side.
-	 */
-	@Override
-	public Object getResp(Properties env) throws Exception {
-		throw new Exception(exception);
-	}
-
-	@Override
-	public Object getResp() throws Exception {
-		return exception;
-	}
-
-	public Throwable getException() {
-		return exception;
-	}
-
-	public void setException(Throwable exception) {
-		this.exception = exception;
-	}
-}
Index: jectmq/src/omq/common/message/response/ProxyResponse.java
===================================================================
--- /objectmq/src/omq/common/message/response/ProxyResponse.java	(revision 5)
+++ 	(revision )
@@ -1,63 +1,0 @@
-package omq.common.message.response;
-
-import java.util.Properties;
-
-import omq.client.proxy.Proxymq;
-
-
-/**
- * 
- * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
- * 
- */
-public class ProxyResponse extends Response {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private String reference;
-	private String remoteInterface;
-
-	public ProxyResponse() {
-		super();
-	}
-
-	public ProxyResponse(String proxyUID, String reference, String remoteInterface) {
-		super(proxyUID);
-		this.reference = reference;
-		this.remoteInterface = remoteInterface;
-	}
-
-	@Override
-	public Object getResp(Properties env) throws Exception {
-		if (!Proxymq.containsProxy(reference)) {
-			Class<?> clazz = Class.forName(remoteInterface);
-			Proxymq evoProxy = new Proxymq(reference, clazz, env);
-			Class<?>[] array = { clazz };
-			return Proxymq.newProxyInstance(clazz.getClassLoader(), array, evoProxy);
-		}
-		return Proxymq.getInstance(reference);
-	}
-
-	@Override
-	public Object getResp() throws Exception {
-		return reference;
-	}
-
-	public String getReference() {
-		return reference;
-	}
-
-	public void setReference(String reference) {
-		this.reference = reference;
-	}
-
-	public String getRemoteInterface() {
-		return remoteInterface;
-	}
-
-	public void setRemoteInterface(String remoteInterface) {
-		this.remoteInterface = remoteInterface;
-	}
-
-}
Index: /objectmq/src/omq/common/message/response/Response.java
===================================================================
--- /objectmq/src/omq/common/message/response/Response.java	(revision 5)
+++ /objectmq/src/omq/common/message/response/Response.java	(revision 6)
@@ -11,5 +11,5 @@
  * 
  */
-public abstract class Response implements Serializable {
+public class Response implements Serializable {
 	/**
 	 * 
@@ -17,15 +17,14 @@
 	private static final long serialVersionUID = 1L;
 
-	protected String proxyUID;
+	private String proxyUID;
+	private Object obj;
 
-	public Response() { }
-
-	public Response(String proxyUID) {
-		this.proxyUID = proxyUID;
+	public Response() {
 	}
 
-	public abstract Object getResp(Properties env) throws Exception;
-
-	public abstract Object getResp() throws Exception;
+	public Response(String proxyUID, Object obj) {
+		this.proxyUID = proxyUID;
+		this.obj = obj;
+	}
 
 	public String getProxyUID() {
@@ -37,3 +36,10 @@
 	}
 
+	public Object getResp() {
+		return obj;
+	}
+
+	public void setObj(Object obj) {
+		this.obj = obj;
+	}
 }
Index: /objectmq/src/omq/common/util/Serializer.java
===================================================================
--- /objectmq/src/omq/common/util/Serializer.java	(revision 5)
+++ /objectmq/src/omq/common/util/Serializer.java	(revision 6)
@@ -1,11 +1,6 @@
 package omq.common.util;
 
-import omq.common.util.Serializers.GsonImp;
 import omq.common.util.Serializers.ISerializer;
-import omq.common.util.Serializers.JavaImp;
-import omq.common.util.Serializers.JsonImp;
 import omq.common.util.Serializers.KryoImp;
-import omq.common.util.Serializers.XmlImp;
-import omq.common.util.Serializers.YamlImp;
 import omq.exception.SerializerException;
 
@@ -21,10 +16,10 @@
 	public static ISerializer getInstance() {
 		if (serializer == null) {
-			serializer = new JavaImp();//Working
-			//serializer = new KryoImp();//Working
-			//serializer = new YamlImp();//Working
-			//serializer = new JsonImp();
-			//serializer = new GsonImp();
-			//serializer = new XmlImp();//Working
+			// serializer = new JavaImp();//Working
+			serializer = new KryoImp();// Working
+			// serializer = new YamlImp();//Working
+			// serializer = new JsonImp();
+			// serializer = new GsonImp();
+			// serializer = new XmlImp();//Working
 		}
 		return serializer;
Index: /objectmq/src/omq/common/util/Serializers/GsonImp.java
===================================================================
--- /objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 5)
+++ /objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 6)
@@ -1,19 +1,11 @@
 package omq.common.util.Serializers;
 
-import omq.common.message.request.AsyncRequest;
-import omq.common.message.request.SyncRequest;
-import omq.common.message.response.CollectionResponse;
-import omq.common.message.response.DefaultResponse;
-import omq.common.message.response.ExceptionResponse;
-import omq.common.message.response.ProxyResponse;
-import omq.common.message.response.Response;
 import omq.exception.SerializerException;
 
 import com.google.gson.Gson;
 
-
 public class GsonImp implements ISerializer {
 	private final Gson gson = new Gson();
-	
+
 	@Override
 	public byte[] serialize(Object obj) throws SerializerException {
@@ -21,47 +13,49 @@
 		return output.getBytes();
 	}
-	
+
 	@Override
 	public byte[] serialize(Object obj, Class<?> clazz) throws SerializerException {
 		return serialize(obj);
-	}	
+	}
 
-	private Object tryDeserialize(byte[] bytes, Class<?> clazz) throws Exception{
+	private Object tryDeserialize(byte[] bytes, Class<?> clazz) throws Exception {
 		String input = new String(bytes);
 		Object object = gson.fromJson(input, clazz);
 		return object;
 	}
-	
+
 	@Override
 	public Object deserialize(byte[] bytes) throws SerializerException {
-		try {
-			return tryDeserialize(bytes, SyncRequest.class);
-		} catch (Exception e) {
-			try {
-				return tryDeserialize(bytes, AsyncRequest.class);
-			} catch (Exception e1) {				
-				try {
-					return tryDeserialize(bytes, CollectionResponse.class);					
-				} catch (Exception e2) {
-					try {
-						return tryDeserialize(bytes, DefaultResponse.class);					
-					} catch (Exception e3) {						
-						try {
-							return tryDeserialize(bytes, ExceptionResponse.class);					
-						} catch (Exception e4) {							
-							try {
-								return tryDeserialize(bytes, ProxyResponse.class);					
-							} catch (Exception e5) {								
-								try {
-									return tryDeserialize(bytes, Response.class);					
-								} catch (Exception e6) {
-									throw new SerializerException("Deserialize -> " + e6.getMessage(), e6);
-								}								
-							}							
-						}						
-					}
-				}				
-			} 
-		}		
+		// try {
+		// return tryDeserialize(bytes, SyncRequest.class);
+		// } catch (Exception e) {
+		// try {
+		// return tryDeserialize(bytes, AsyncRequest.class);
+		// } catch (Exception e1) {
+		// try {
+		// return tryDeserialize(bytes, CollectionResponse.class);
+		// } catch (Exception e2) {
+		// try {
+		// return tryDeserialize(bytes, DefaultResponse.class);
+		// } catch (Exception e3) {
+		// try {
+		// return tryDeserialize(bytes, ExceptionResponse.class);
+		// } catch (Exception e4) {
+		// try {
+		// return tryDeserialize(bytes, ProxyResponse.class);
+		// } catch (Exception e5) {
+		// try {
+		// return tryDeserialize(bytes, Response.class);
+		// } catch (Exception e6) {
+		// throw new SerializerException("Deserialize -> " + e6.getMessage(),
+		// e6);
+		// }
+		// }
+		// }
+		// }
+		// }
+		// }
+		// }
+		return null;
 	}
 
Index: /objectmq/src/omq/common/util/Serializers/JsonImp.java
===================================================================
--- /objectmq/src/omq/common/util/Serializers/JsonImp.java	(revision 5)
+++ /objectmq/src/omq/common/util/Serializers/JsonImp.java	(revision 6)
@@ -1,11 +1,4 @@
 package omq.common.util.Serializers;
 
-import omq.common.message.request.AsyncRequest;
-import omq.common.message.request.SyncRequest;
-import omq.common.message.response.CollectionResponse;
-import omq.common.message.response.DefaultResponse;
-import omq.common.message.response.ExceptionResponse;
-import omq.common.message.response.ProxyResponse;
-import omq.common.message.response.Response;
 import omq.exception.SerializerException;
 
@@ -20,5 +13,5 @@
 public class JsonImp implements ISerializer {
 	private final ObjectMapper mapper = new ObjectMapper();
-	
+
 	@Override
 	public byte[] serialize(Object obj) throws SerializerException {
@@ -30,48 +23,48 @@
 		}
 	}
-	
+
 	@Override
 	public byte[] serialize(Object obj, Class<?> clazz) throws SerializerException {
 		return serialize(obj);
-	}	
-	
-	
-	private Object tryDeserialize(byte[] bytes, Class<?> clazz) throws Exception{
+	}
+
+	private Object tryDeserialize(byte[] bytes, Class<?> clazz) throws Exception {
 		Object object = mapper.readValue(bytes, clazz);
 		return object;
 	}
-	
 
 	@Override
 	public Object deserialize(byte[] bytes) throws SerializerException {
-		try {
-			return tryDeserialize(bytes, SyncRequest.class);
-		} catch (Exception e) {
-			try {
-				return tryDeserialize(bytes, AsyncRequest.class);
-			} catch (Exception e1) {				
-				try {
-					return tryDeserialize(bytes, CollectionResponse.class);					
-				} catch (Exception e2) {
-					try {
-						return tryDeserialize(bytes, DefaultResponse.class);					
-					} catch (Exception e3) {						
-						try {
-							return tryDeserialize(bytes, ExceptionResponse.class);					
-						} catch (Exception e4) {							
-							try {
-								return tryDeserialize(bytes, ProxyResponse.class);					
-							} catch (Exception e5) {								
-								try {
-									return tryDeserialize(bytes, Response.class);					
-								} catch (Exception e6) {
-									throw new SerializerException("Deserialize -> " + e6.getMessage(), e6);
-								}								
-							}							
-						}						
-					}
-				}				
-			} 
-		}
+		// try {
+		// return tryDeserialize(bytes, SyncRequest.class);
+		// } catch (Exception e) {
+		// try {
+		// return tryDeserialize(bytes, AsyncRequest.class);
+		// } catch (Exception e1) {
+		// try {
+		// return tryDeserialize(bytes, CollectionResponse.class);
+		// } catch (Exception e2) {
+		// try {
+		// return tryDeserialize(bytes, DefaultResponse.class);
+		// } catch (Exception e3) {
+		// try {
+		// return tryDeserialize(bytes, ExceptionResponse.class);
+		// } catch (Exception e4) {
+		// try {
+		// return tryDeserialize(bytes, ProxyResponse.class);
+		// } catch (Exception e5) {
+		// try {
+		// return tryDeserialize(bytes, Response.class);
+		// } catch (Exception e6) {
+		// throw new SerializerException("Deserialize -> " + e6.getMessage(),
+		// e6);
+		// }
+		// }
+		// }
+		// }
+		// }
+		// }
+		// }
+		return null;
 	}
 
Index: /objectmq/src/omq/server/remote/request/RemoteObject.java
===================================================================
--- /objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 5)
+++ /objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 6)
@@ -14,6 +14,4 @@
 import omq.common.event.EventListener;
 import omq.common.event.EventTrigger;
-import omq.common.message.response.DefaultResponse;
-import omq.common.message.response.ExceptionResponse;
 import omq.common.message.response.Response;
 import omq.common.util.ParameterQueue;
@@ -37,9 +35,9 @@
 
 	private String UID;
-	private RemoteWrapper remoteWrapper;
-	private Connection connection;
-	private Channel channel;
-	private QueueingConsumer consumer;
-	private boolean killed = false;
+	private transient RemoteWrapper remoteWrapper;
+	private transient Connection connection;
+	private transient Channel channel;
+	private transient QueueingConsumer consumer;
+	private transient boolean killed = false;
 
 	private static final Map<String, Class<?>> primitiveClasses = new HashMap<String, Class<?>>();
@@ -59,5 +57,5 @@
 
 		// Get num threads to use
-		int numThreads = Integer.parseInt(env.getProperty(ParameterQueue.NUM_THREADS));
+		int numThreads = 4;//Integer.parseInt(env.getProperty(ParameterQueue.NUM_THREADS));
 		remoteWrapper = new RemoteWrapper(this, numThreads);
 
@@ -90,6 +88,7 @@
 	public void run() {
 		while (!killed) {
-			try {
+			try {System.out.println("Consuming ...");
 				Delivery delivery = consumer.nextDelivery();
+				System.out.println("Consuming a delivery");
 				remoteWrapper.notifyDelivery(delivery);
 			} catch (InterruptedException i) {
@@ -135,7 +134,7 @@
 		try {
 			Object result = method.invoke(this, arguments);
-			return new DefaultResponse(this.getRef(), result);
+			return new Response(this.getRef(), result);
 		} catch (InvocationTargetException e) {
-			return new ExceptionResponse(this.getRef(), e.getTargetException());
+			return new Response(this.getRef(), e.getTargetException());
 		}
 	}
Index: /objectmq/src/omq/ztest/Serializers/Car.java
===================================================================
--- /objectmq/src/omq/ztest/Serializers/Car.java	(revision 6)
+++ /objectmq/src/omq/ztest/Serializers/Car.java	(revision 6)
@@ -0,0 +1,158 @@
+package omq.ztest.Serializers;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
+ * @author Guillermo Guerrero <guillermo.guerrero@estudiants.urv.cat>
+ * 
+ */
+public class Car implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	enum Trademark {
+		MERCEDES, BMW, AUDI, OPEL, FORD
+	}
+
+	private int wheels, doors, places;	
+	private transient Trademark tradeMark;	
+	private String model, color;	
+	private boolean haveTrunk;
+	private float accelerationTime;
+	private long hp;
+
+	
+	public Car() {
+		super();
+		
+		model = "";
+		color = "";
+	}
+		
+	public Car(int wheels, int doors, int places, Trademark tradeMark, String model, String color, boolean haveTrunk,
+			float accelerationTime, long hp) {
+		super();
+		this.wheels = wheels;
+		this.doors = doors;
+		this.places = places;
+		this.tradeMark = tradeMark;
+		this.model = model;
+		this.color = color;
+		this.haveTrunk = haveTrunk;
+		this.accelerationTime = accelerationTime;
+		this.hp = hp;
+	}
+
+	public int getWheels() {
+		return wheels;
+	}
+
+	public void setWheels(int wheels) {
+		this.wheels = wheels;
+	}
+
+	public int getDoors() {
+		return doors;
+	}
+
+	public void setDoors(int doors) {
+		this.doors = doors;
+	}
+
+	public int getPlaces() {
+		return places;
+	}
+
+	public void setPlaces(int places) {
+		this.places = places;
+	}
+
+	public Trademark getTradeMark() {
+		return tradeMark;
+	}
+
+	public void setTradeMark(Trademark tradeMark) {
+		this.tradeMark = tradeMark;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+
+	public boolean isHaveTrunk() {
+		return haveTrunk;
+	}
+
+	public void setHaveTrunk(boolean haveTrunk) {
+		this.haveTrunk = haveTrunk;
+	}
+
+	public float getAccelerationTime() {
+		return accelerationTime;
+	}
+
+	public void setAccelerationTime(float accelerationTime) {
+		this.accelerationTime = accelerationTime;
+	}
+
+	public long getHp() {
+		return hp;
+	}
+
+	public void setHp(long hp) {
+		this.hp = hp;
+	}
+
+	public boolean equals(Car obj) {		
+		if(this.wheels != obj.wheels){
+			return false;
+		}
+		
+		if(this.doors != obj.doors){
+			return false;
+		}
+		
+		if(this.places != obj.places){
+			return false;
+		}
+		
+		if(this.tradeMark != obj.tradeMark){
+			return false;
+		}
+		
+		if(this.model.compareTo(obj.model) != 0){
+			return false;
+		}
+		
+		if(this.color.compareTo(obj.color) != 0){
+			return false;
+		}
+		
+		if(this.haveTrunk != obj.haveTrunk){
+			return false;
+		}
+		
+		if(this.accelerationTime != obj.accelerationTime){
+			return false;
+		}
+		
+		if(this.hp != obj.hp){
+			return false;
+		}
+		
+		return true;
+	}
+}
Index: /objectmq/src/omq/ztest/Serializers/Test.java
===================================================================
--- /objectmq/src/omq/ztest/Serializers/Test.java	(revision 6)
+++ /objectmq/src/omq/ztest/Serializers/Test.java	(revision 6)
@@ -0,0 +1,98 @@
+package omq.ztest.Serializers;
+
+import omq.common.util.Serializers.GsonImp;
+import omq.common.util.Serializers.ISerializer;
+import omq.common.util.Serializers.JavaImp;
+import omq.common.util.Serializers.JsonImp;
+import omq.common.util.Serializers.KryoImp;
+import omq.common.util.Serializers.XmlImp;
+import omq.common.util.Serializers.YamlImp;
+import omq.exception.SerializerException;
+import omq.ztest.Serializers.Car.Trademark;
+
+/**
+ * 
+ * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
+ * @author Guillermo Guerrero <guillermo.guerrero@estudiants.urv.cat>
+ * 
+ */
+public class Test {
+
+	private static void trySerializer(Object obj, Class<?> clazz, ISerializer serializer) {
+		try {		
+			long start = System.nanoTime();
+
+			byte[] bArray;
+			if (clazz == null) {
+				bArray = serializer.serialize(obj);
+			} else {
+				bArray = serializer.serialize(obj, clazz);
+			}
+
+			long end = System.nanoTime();
+			long total = end - start;
+
+			System.out.println("=============================================");
+			System.out.println("Test -> " + serializer.getClass().getName());
+			System.out.println("Serialize Size:" + bArray.length + "|Time: " + total + "ns");
+
+			start = System.nanoTime();
+
+			Object obj2;
+			if (clazz == null) {
+				obj2 = serializer.deserialize(bArray);
+			} else {
+				obj2 = serializer.deserialize(bArray, clazz);
+			}
+			end = System.nanoTime();
+			total = end - start;
+
+			System.out.println("Compare --> " + (((Car) obj).equals((Car) obj2)));
+			System.out.println("Deserialize Size:" + bArray.length + "|Time: " + total + "ns");
+			System.out.println("=============================================");
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		} 
+	}
+
+	private static void tryAllSerializers(Object obj, Class<?> clazz) {
+		System.out.println();
+		System.out.println();
+		System.out.println();
+		System.out.println("=============================================");
+		System.out.println("===============TEST==========================");
+		System.out.println("=============================================");
+		System.out.println(clazz + " --- " + obj);
+		System.out.println("=============================================");
+
+		System.out.println();
+		
+		if(clazz != null){
+			trySerializer(obj, clazz, new GsonImp());
+			trySerializer(obj, clazz, new JsonImp());
+		}
+		
+		trySerializer(obj, clazz, new JavaImp());		
+		trySerializer(obj, clazz, new KryoImp());
+		trySerializer(obj, clazz, new XmlImp());
+		trySerializer(obj, clazz, new YamlImp());
+	}
+
+	/**
+	 * @param args
+	 * @throws SerializerException
+	 */
+	public static void main(String[] args) {
+
+		Car c1 = new Car();
+		Car c2 = new Car(4, 5, 5, Trademark.OPEL, "Astra gtc Diesel", "Blue", true, (float) 4.5, 120);
+		
+		tryAllSerializers(c1, null);
+		tryAllSerializers(c1, Car.class);
+		
+		tryAllSerializers(c2, null);
+		tryAllSerializers(c2, Car.class);
+	}
+
+}
