Index: trunk/src/main/java/omq/client/proxy/Proxymq.java
===================================================================
--- trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 57)
+++ trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 58)
@@ -2,16 +2,13 @@
 
 import java.io.IOException;
+import java.lang.reflect.Array;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-
-import org.apache.log4j.Logger;
 
 import omq.Remote;
@@ -34,4 +31,6 @@
 import omq.exception.TimeoutException;
 
+import org.apache.log4j.Logger;
+
 import com.rabbitmq.client.AMQP.BasicProperties;
 
@@ -190,5 +189,10 @@
 			try {
 				publishMessage(request, replyQueueName);
-				return getResult(corrId, timeout, type);
+				if (request.isMulti()) {
+					return getResults(corrId, 2, timeout, type);
+				} else {
+					return getResult(corrId, timeout, type);
+				}
+
 			} catch (TimeoutException te) {
 				logger.error(te);
@@ -203,7 +207,9 @@
 		String methodName = method.getName();
 		boolean multi = false;
+		int wait = 0;
 
 		if (method.getAnnotation(MultiMethod.class) != null) {
 			multi = true;
+			wait = method.getAnnotation(MultiMethod.class).waitNum();
 		}
 
@@ -219,5 +225,5 @@
 				timeout = sync.timeout();
 			}
-			return Request.newSyncRequest(corrId, methodName, arguments, retries, timeout, multi);
+			return Request.newSyncRequest(corrId, methodName, arguments, retries, timeout, multi, wait);
 		} else {
 			return Request.newAsyncRequest(corrId, methodName, arguments, multi);
@@ -229,10 +235,10 @@
 
 		// Wait for the results.
-		long localTimeout = 0;
+		long localTimeout = timeout;
 		long start = System.currentTimeMillis();
 		synchronized (results) {
 			// Due to we are using notifyAll(), we need to control the real time
 			while (!results.containsKey(corrId) && (timeout - localTimeout) >= 0) {
-				results.wait(timeout);
+				results.wait(localTimeout);
 				localTimeout = System.currentTimeMillis() - start;
 			}
@@ -258,8 +264,9 @@
 	}
 
-	@SuppressWarnings("unused")
 	private Object getResults(String corrId, int wait, long timeout, Class<?> type) throws Exception {
 		Response resp = null;
-		List<Object> list = new ArrayList<Object>();
+		Class<?> actualType = type.getComponentType();
+
+		Object array = Array.newInstance(actualType, wait);
 
 		int i = 0;
@@ -279,7 +286,7 @@
 				}
 				// Remove the corrId to receive new replies
-				resp = serializer.deserializeResponse(results.remove(corrId), type);
-				list.add(resp.getResult());
-
+				resp = serializer.deserializeResponse(results.remove(corrId), actualType);
+				System.out.println("/n/n/n/n/nResult type: "+resp.getResult()+" /n/n/n/n/n");
+				Array.set(array, i, resp.getResult());
 			}
 			i++;
@@ -289,5 +296,5 @@
 		}
 
-		return list;
+		return array;
 	}
 
Index: trunk/src/main/java/omq/common/message/Request.java
===================================================================
--- trunk/src/main/java/omq/common/message/Request.java	(revision 57)
+++ trunk/src/main/java/omq/common/message/Request.java	(revision 58)
@@ -16,4 +16,5 @@
 
 	private transient boolean multi;
+	private transient int wait;
 	private transient long timeout;
 	private transient int retries;
@@ -47,8 +48,9 @@
 	}
 
-	public static Request newSyncRequest(String id, String method, Object[] params, int retries, long timeout, boolean multi) {
+	public static Request newSyncRequest(String id, String method, Object[] params, int retries, long timeout, boolean multi, int wait) {
 		Request req = new Request(id, method, false, params, multi);
 		req.setRetries(retries);
 		req.setTimeout(timeout);
+		req.setWait(wait);
 		return req;
 	}
@@ -113,3 +115,11 @@
 		this.multi = multi;
 	}
+
+	public int getWait() {
+		return wait;
+	}
+
+	public void setWait(int wait) {
+		this.wait = wait;
+	}
 }
Index: trunk/src/main/java/omq/server/RemoteObject.java
===================================================================
--- trunk/src/main/java/omq/server/RemoteObject.java	(revision 57)
+++ trunk/src/main/java/omq/server/RemoteObject.java	(revision 58)
@@ -39,4 +39,5 @@
 
 	private String UID;
+	private String multiQueue;
 	private Properties env;
 	private transient Broker broker;
@@ -66,4 +67,5 @@
 		this.broker = broker;
 		UID = reference;
+		multiQueue = UID + System.currentTimeMillis();
 		env = broker.getEnvironment();
 		serializer = broker.getSerializer();
@@ -225,6 +227,4 @@
 		// Multi info
 		String multiExchange = multi + exchange;
-		//TODO: change this
-		String multiQueue = UID + System.currentTimeMillis();
 
 		boolean durable = Boolean.parseBoolean(env.getProperty(ParameterQueue.DURABLE_QUEUES, "false"));
