Index: trunk/objectmq/src/omq/client/proxy/Proxymq.java
===================================================================
--- trunk/objectmq/src/omq/client/proxy/Proxymq.java	(revision 9)
+++ trunk/objectmq/src/omq/client/proxy/Proxymq.java	(revision 10)
@@ -9,5 +9,4 @@
 import java.util.Map;
 import java.util.Properties;
-import java.util.Vector;
 
 import omq.Remote;
@@ -159,11 +158,4 @@
 		String corrId = java.util.UUID.randomUUID().toString();
 		String methodName = method.getName();
-		Vector<Object> args = new Vector<Object>();
-
-		if (arguments != null) {
-			for (Object o : arguments) {
-				args.add(o);
-			}
-		}
 
 		// Since we need to know whether the method is async and if it has to
Index: trunk/objectmq/src/omq/common/util/Serializer.java
===================================================================
--- trunk/objectmq/src/omq/common/util/Serializer.java	(revision 9)
+++ trunk/objectmq/src/omq/common/util/Serializer.java	(revision 10)
@@ -11,5 +11,4 @@
  * 
  * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
- * @author Guillermo Guerrero <guillermo.guerrero@estudiants.urv.cat>
  * 
  */
Index: trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java
===================================================================
--- trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 9)
+++ trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 10)
@@ -36,17 +36,21 @@
 		List<Class<?>> types = obj.getParams(method);
 
-		JsonArray jsonArgs = (JsonArray) jsonObj.get("arguments");
+		try {
+			JsonArray jsonArgs = (JsonArray) jsonObj.get("arguments");
 
-		// TODO: if (jsonArgs.size() == types.size())
-		int length = jsonArgs.size();
-		Object[] arguments = new Object[length];
+			// TODO: if (jsonArgs.size() == types.size())
+			int length = jsonArgs.size();
+			Object[] arguments = new Object[length];
 
-		int i = 0;
-		for (JsonElement element : jsonArgs) {
-			arguments[i] = gson.fromJson(element, types.get(i));
-			i++;
+			int i = 0;
+			for (JsonElement element : jsonArgs) {
+				arguments[i] = gson.fromJson(element, types.get(i));
+				i++;
+			}
+
+			return new Request(id, method, arguments);
+		} catch (NullPointerException e) {
+			return new Request(id, method, null);
 		}
-
-		return new Request(id, method, arguments);
 	}
 
Index: trunk/objectmq/src/omq/server/remote/request/InvocationThread.java
===================================================================
--- trunk/objectmq/src/omq/server/remote/request/InvocationThread.java	(revision 9)
+++ trunk/objectmq/src/omq/server/remote/request/InvocationThread.java	(revision 10)
@@ -54,6 +54,6 @@
 				killed = true;
 			} catch (Exception e) {
+				System.out.println("Error a l'Invocation Thread \nException: " + e);
 				e.printStackTrace();
-				System.out.println("Error a l'Invocation Thread \nException: " + e);
 			}
 
Index: trunk/objectmq/src/omq/server/remote/request/RemoteObject.java
===================================================================
--- trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 9)
+++ trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 10)
@@ -126,5 +126,5 @@
 	}
 
-	public Object invokeMethod(String methodName,Object[] arguments) throws Exception {
+	public Object invokeMethod(String methodName, Object[] arguments) throws Exception {
 
 		// Get the specific method identified by methodName and its arguments
@@ -134,13 +134,16 @@
 	}
 
-	private Method loadMethod(String methodName,Object[] args) throws NoSuchMethodException {
+	private Method loadMethod(String methodName, Object[] args) throws NoSuchMethodException {
 		Method m = null;
 
 		// Obtain the class reference
 		Class<?> clazz = this.getClass();
-		Class<?>[] argArray = new Class<?>[args.length];
+		Class<?>[] argArray = null;
 
-		for (int i = 0; i < args.length; i++) {
-			argArray[i] = args[i].getClass();
+		if (args != null) {
+			argArray = new Class<?>[args.length];
+			for (int i = 0; i < args.length; i++) {
+				argArray[i] = args[i].getClass();
+			}
 		}
 
Index: trunk/objectmq/src/omq/ztest/farm/Animal.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/Animal.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/Animal.java	(revision 10)
@@ -0,0 +1,9 @@
+package omq.ztest.farm;
+
+import java.io.Serializable;
+
+public interface Animal extends Serializable {
+	public String getName();
+
+	public void setName(String name);
+}
Index: trunk/objectmq/src/omq/ztest/farm/Cow.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/Cow.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/Cow.java	(revision 10)
@@ -0,0 +1,29 @@
+package omq.ztest.farm;
+
+public class Cow implements Animal {
+	
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String name;
+
+	public Cow() {
+	}
+
+	public Cow(String name) {
+		this.name = name;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}
Index: trunk/objectmq/src/omq/ztest/farm/Farm.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/Farm.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/Farm.java	(revision 10)
@@ -0,0 +1,23 @@
+package omq.ztest.farm;
+
+import omq.Remote;
+import omq.client.annotation.AsyncMethod;
+import omq.client.annotation.RemoteInterface;
+import omq.client.annotation.SyncMethod;
+
+@RemoteInterface
+public interface Farm extends Remote {
+	
+	@AsyncMethod
+	public void setPig(Pig pig);
+	
+	@AsyncMethod
+	public void setCow(Cow cow);
+
+	@SyncMethod(timeout = 1500)
+	public Cow getCow();
+	
+	@SyncMethod(timeout = 1500)
+	public Pig getPig();
+
+}
Index: trunk/objectmq/src/omq/ztest/farm/FarmImpl.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/FarmImpl.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/FarmImpl.java	(revision 10)
@@ -0,0 +1,30 @@
+package omq.ztest.farm;
+
+import omq.server.remote.request.RemoteObject;
+
+public class FarmImpl extends RemoteObject implements Farm {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private Cow cow;
+	private Pig pig;
+
+	public Cow getCow() {
+		return cow;
+	}
+
+	public void setCow(Cow cow) {
+		this.cow = cow;
+	}
+
+	public Pig getPig() {
+		return pig;
+	}
+
+	public void setPig(Pig pig) {
+		this.pig = pig;
+	}
+
+}
Index: trunk/objectmq/src/omq/ztest/farm/FarmTest.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/FarmTest.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/FarmTest.java	(revision 10)
@@ -0,0 +1,90 @@
+package omq.ztest.farm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class FarmTest {
+	private static FarmImpl farm;
+	private static Farm remoteFarm;
+
+	@BeforeClass
+	public static void startServer() throws Exception {
+		Properties env = new Properties();
+		env.setProperty(ParameterQueue.USER_NAME, "guest");
+		env.setProperty(ParameterQueue.USER_PASS, "guest");
+
+		// Get host info of rabbimq (where it is)
+		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
+		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
+
+		// Get info about the queue & the exchange where the RemoteListener will
+		// listen to.
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RPC_QUEUE, "rpc_queue");
+		env.setProperty(ParameterQueue.RPC_ROUTING_KEY, "rpc");
+
+		farm = new FarmImpl();
+
+		Broker.initBroker(env);
+		Broker.bind(Farm.class.getSimpleName(), farm);
+	}
+
+	@BeforeClass
+	public static void startClient() throws Exception {
+		Properties env = new Properties();
+		env.setProperty(ParameterQueue.USER_NAME, "guest");
+		env.setProperty(ParameterQueue.USER_PASS, "guest");
+
+		// Set host info of rabbimq (where it is)
+		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
+		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
+
+		// Set info about where the message will be sent
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RPC_ROUTING_KEY, "rpc");
+
+		// Set info about the queue & the exchange where the ResponseListener
+		// will listen to.
+		env.setProperty(ParameterQueue.RPC_REPLY_QUEUE, "reply_queue");
+		env.setProperty(ParameterQueue.EVENT_REPLY_QUEUE, "event_queue");
+
+		Broker.initBroker(env);
+
+		remoteFarm = (Farm) Broker.lookup(Farm.class.getSimpleName(), Farm.class);
+	}
+
+	@Test
+	public void addCow() throws Exception {
+		String name = "muu";
+
+		Cow cow = new Cow();
+		cow.setName(name);
+
+		remoteFarm.setCow(cow);
+		Thread.sleep(100);
+
+		assertEquals(name, farm.getCow().getName());
+	}
+
+	@Test
+	public void getPig() throws Exception {
+		String name = "oing";
+
+		Pig pig = new Pig();
+		pig.setName(name);
+
+		remoteFarm.setPig(pig);
+		Thread.sleep(100);
+
+		pig = remoteFarm.getPig();
+
+		assertEquals(name, pig.getName());
+	}
+}
Index: trunk/objectmq/src/omq/ztest/farm/Pig.java
===================================================================
--- trunk/objectmq/src/omq/ztest/farm/Pig.java	(revision 10)
+++ trunk/objectmq/src/omq/ztest/farm/Pig.java	(revision 10)
@@ -0,0 +1,27 @@
+package omq.ztest.farm;
+
+public class Pig implements Animal {
+	
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String name;
+
+	public Pig() {
+	}
+
+	public Pig(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}
