Index: trunk/src/main/java/omq/client/proxy/MultiProxymq.java
===================================================================
--- trunk/src/main/java/omq/client/proxy/MultiProxymq.java	(revision 70)
+++ trunk/src/main/java/omq/client/proxy/MultiProxymq.java	(revision 70)
@@ -0,0 +1,60 @@
+package omq.client.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+import com.rabbitmq.client.AMQP.BasicProperties;
+
+import omq.common.broker.Broker;
+import omq.common.message.Request;
+import omq.common.util.ParameterQueue;
+import omq.common.util.Serializer;
+
+/**
+ * TODO Aquesta classe s'eliminarà tant bon punt es faci un proxymq més
+ * intel·ligent
+ * 
+ * @author sergi
+ * 
+ */
+public class MultiProxymq implements InvocationHandler {
+	private static final String multi = "multi#";
+
+	private String uid;
+	private Broker broker;
+	private Serializer serializer;
+	private String replyQueueName;
+	private String exchange;
+	private static final String routingkey = "";
+	private transient String serializerType;
+
+	public MultiProxymq(String uid, Class<?> clazz, Broker broker) throws Exception {
+		this.uid = uid;
+		this.broker = broker;
+		serializer = broker.getSerializer();
+
+		Properties env = broker.getEnvironment();
+		replyQueueName = env.getProperty(ParameterQueue.RPC_REPLY_QUEUE);
+		exchange = multi + env.getProperty(ParameterQueue.RPC_EXCHANGE);
+		serializerType = env.getProperty(ParameterQueue.SERIALIZER_NAME, Serializer.JAVA);
+	}
+
+	@Override
+	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+		String methodName = method.getName();
+		String corrId = java.util.UUID.randomUUID().toString();
+		boolean multi = true;
+
+		Request request = Request.newAsyncRequest(corrId, methodName, args, multi);
+
+		// Add the correlation ID and create a replyTo property
+		BasicProperties props = new BasicProperties.Builder().appId(uid).correlationId(corrId).replyTo(replyQueueName).type(serializerType).build();
+
+		byte[] bytesRequest = serializer.serialize(serializerType, request);
+		broker.getChannel().basicPublish(exchange, routingkey, props, bytesRequest);
+
+		return null;
+	}
+
+}
Index: trunk/src/main/java/omq/client/proxy/Proxymq.java
===================================================================
--- trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 66)
+++ trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 70)
@@ -5,5 +5,4 @@
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
 import java.util.Collection;
 import java.util.HashMap;
@@ -50,4 +49,7 @@
 
 	private String uid;
+	private transient String exchange;
+	private transient String multiExchange;
+	private transient String replyQueueName;
 	private transient String serializerType;
 	private transient Broker broker;
@@ -96,4 +98,7 @@
 		// this.channel = Broker.getChannel();
 		env = broker.getEnvironment();
+		exchange = env.getProperty(ParameterQueue.RPC_EXCHANGE);
+		multiExchange = multi + exchange;
+		replyQueueName = env.getProperty(ParameterQueue.RPC_REPLY_QUEUE);
 
 		// set the serializer type
@@ -134,5 +139,5 @@
 		if (request.isAsync()) {
 			logger.debug("Publish async request -> " + request.getId());
-			publishAsyncRequest(request);
+			publishMessage(request, replyQueueName);
 		} else {
 			logger.debug("Publish sync request -> " + request.getId());
@@ -151,8 +156,8 @@
 
 		if (request.isMulti()) {
-			exchange = multi + env.getProperty(ParameterQueue.RPC_EXCHANGE);
+			exchange = multiExchange;
 			routingkey = "";
 		} else {
-			exchange = env.getProperty(ParameterQueue.RPC_EXCHANGE);
+			exchange = this.exchange;
 			routingkey = uid;
 		}
@@ -166,10 +171,4 @@
 	}
 
-	private void publishAsyncRequest(Request request) throws Exception {
-		// Get the environment properties
-		String replyQueueName = env.getProperty(ParameterQueue.RPC_REPLY_QUEUE);
-		publishMessage(request, replyQueueName);
-	}
-
 	private Object publishSyncRequest(Request request, Class<?> type) throws Exception {
 		String corrId = request.getId();
@@ -177,7 +176,4 @@
 		int retries = request.getRetries();
 		long timeout = request.getTimeout();
-
-		// Get the environment properties
-		String replyQueueName = env.getProperty(ParameterQueue.RPC_REPLY_QUEUE);
 
 		// Publish the message
@@ -296,24 +292,4 @@
 
 	/**
-	 * Returns an instance of a proxy class for the specified interfaces that
-	 * dispatches method invocations to the specified invocation handler. * @param
-	 * loader
-	 * 
-	 * @param loader
-	 *            the class loader to define the proxy class
-	 * 
-	 * @param interfaces
-	 *            the list of interfaces for the proxy class to implement
-	 * @param proxy
-	 *            the invocation handler to dispatch method invocations to
-	 * @return a proxy instance with the specified invocation handler of a proxy
-	 *         class that is defined by the specified class loader and that
-	 *         implements the specified interfaces
-	 */
-	public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, Proxymq proxy) {
-		return Proxy.newProxyInstance(loader, interfaces, proxy);
-	}
-
-	/**
 	 * Gets the Map used internally to retreive the response of the server
 	 * 
