Index: /trunk/objectmq/src/omq/client/proxy/Proxymq.java
===================================================================
--- /trunk/objectmq/src/omq/client/proxy/Proxymq.java	(revision 38)
+++ /trunk/objectmq/src/omq/client/proxy/Proxymq.java	(revision 39)
@@ -237,5 +237,5 @@
 		if (resp.getError() != null) {
 			OmqException error = resp.getError();
-			String name = error.getType();System.out.println("Name: "+name);
+			String name = error.getType();
 			String message = error.getMessage();
 			throw (Exception) Class.forName(name).getConstructor(String.class).newInstance(message);
Index: /trunk/objectmq/src/omq/common/broker/Broker.java
===================================================================
--- /trunk/objectmq/src/omq/common/broker/Broker.java	(revision 38)
+++ /trunk/objectmq/src/omq/common/broker/Broker.java	(revision 39)
@@ -108,5 +108,6 @@
 	}
 
-	public static Remote lookup(String reference, Class<?> contract) throws RemoteException {
+	@SuppressWarnings("unchecked")
+	public static <T extends Remote> T lookup(String reference, Class<T> contract) throws RemoteException {
 		try {
 			Properties environment = Environment.getEnvironment();
@@ -120,7 +121,7 @@
 				Proxymq proxy = new Proxymq(reference, contract, environment);
 				Class<?>[] array = { contract };
-				return (Remote) Proxymq.newProxyInstance(contract.getClassLoader(), array, proxy);
-			}
-			return (Remote) Proxymq.getInstance(reference);
+				return (T) Proxymq.newProxyInstance(contract.getClassLoader(), array, proxy);
+			}
+			return (T) Proxymq.getInstance(reference);
 
 		} catch (Exception e) {
Index: /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java
===================================================================
--- /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 38)
+++ /trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java	(revision 39)
@@ -39,5 +39,5 @@
 
 		try {
-			JsonArray jsonArgs = (JsonArray) jsonObj.get("arguments");
+			JsonArray jsonArgs = (JsonArray) jsonObj.get("params");
 
 			// TODO: if (jsonArgs.size() == types.size())
Index: /trunk/objectmq/src/omq/server/InvocationThread.java
===================================================================
--- /trunk/objectmq/src/omq/server/InvocationThread.java	(revision 38)
+++ /trunk/objectmq/src/omq/server/InvocationThread.java	(revision 39)
@@ -81,5 +81,4 @@
 
 		}
-		System.out.println("Invocation Thread dies!!");
 	}
 
Index: /trunk/objectmq/test/exceptionTest/ClientTest.java
===================================================================
--- /trunk/objectmq/test/exceptionTest/ClientTest.java	(revision 38)
+++ /trunk/objectmq/test/exceptionTest/ClientTest.java	(revision 39)
@@ -3,4 +3,5 @@
 import static org.junit.Assert.assertEquals;
 
+import java.lang.reflect.UndeclaredThrowableException;
 import java.util.Properties;
 
@@ -25,5 +26,5 @@
 		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
 		env.setProperty(ParameterQueue.DURABLE_QUEUES, "false");
-		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
+		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.kryo);
 		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
 
@@ -67,5 +68,6 @@
 	}
 
-	@Test(expected = NoSuchMethodException.class)
+	@Test(expected = UndeclaredThrowableException.class)
+	// This exception will be caused by java.lang.NoSuchMethodException
 	public void getTrailer() throws Exception {
 		client.getTrailer();
Index: /trunk/objectmq/test/exceptionTest/ServerTest.java
===================================================================
--- /trunk/objectmq/test/exceptionTest/ServerTest.java	(revision 38)
+++ /trunk/objectmq/test/exceptionTest/ServerTest.java	(revision 39)
@@ -17,6 +17,6 @@
 		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
 		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
-		env.setProperty(ParameterQueue.DURABLE_QUEUES, "true");
-		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
+		env.setProperty(ParameterQueue.DURABLE_QUEUES, "false");
+		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.kryo);
 		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
 
Index: /trunk/objectmq/test/multiProcessTest/ClientTest.java
===================================================================
--- /trunk/objectmq/test/multiProcessTest/ClientTest.java	(revision 39)
+++ /trunk/objectmq/test/multiProcessTest/ClientTest.java	(revision 39)
@@ -0,0 +1,53 @@
+package multiProcessTest;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+import omq.common.util.Serializer;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ClientTest {
+	// Execute ServerTest.java 2 times before start this test
+	public static Number remoteNumber;
+
+	@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");
+		env.setProperty(ParameterQueue.DURABLE_QUEUES, "false");
+		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
+		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
+
+		// Set info about where the message will be sent
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+
+		// 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);
+		remoteNumber = Broker.lookup("number", Number.class);
+	}
+
+	@Test
+	public void test() {
+		int x = 10;
+		remoteNumber.setNumber(x);
+		int a = remoteNumber.getNumer();
+		assertEquals(a, 0);
+		int b = remoteNumber.getNumer();
+		assertEquals(x, b);
+	}
+
+}
Index: /trunk/objectmq/test/multiProcessTest/Number.java
===================================================================
--- /trunk/objectmq/test/multiProcessTest/Number.java	(revision 39)
+++ /trunk/objectmq/test/multiProcessTest/Number.java	(revision 39)
@@ -0,0 +1,14 @@
+package multiProcessTest;
+
+import omq.Remote;
+import omq.client.annotation.RemoteInterface;
+import omq.client.annotation.SyncMethod;
+
+@RemoteInterface
+public interface Number extends Remote {
+	@SyncMethod(timeout = 1000)
+	public void setNumber(int x);
+
+	@SyncMethod(timeout = 1000)
+	public int getNumer();
+}
Index: /trunk/objectmq/test/multiProcessTest/NumberImpl.java
===================================================================
--- /trunk/objectmq/test/multiProcessTest/NumberImpl.java	(revision 39)
+++ /trunk/objectmq/test/multiProcessTest/NumberImpl.java	(revision 39)
@@ -0,0 +1,32 @@
+package multiProcessTest;
+
+import omq.client.annotation.SyncMethod;
+import omq.server.RemoteObject;
+
+public class NumberImpl extends RemoteObject implements Number {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private int x = 0;
+
+	public NumberImpl() {
+	}
+
+	public NumberImpl(int x) {
+		this.x = x;
+	}
+
+	@Override
+	@SyncMethod
+	public void setNumber(int x) {
+		this.x = x;
+	}
+
+	@Override
+	@SyncMethod(timeout = 1000)
+	public int getNumer() {
+		return x;
+	}
+
+}
Index: /trunk/objectmq/test/multiProcessTest/ServerTest.java
===================================================================
--- /trunk/objectmq/test/multiProcessTest/ServerTest.java	(revision 39)
+++ /trunk/objectmq/test/multiProcessTest/ServerTest.java	(revision 39)
@@ -0,0 +1,29 @@
+package multiProcessTest;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+import omq.common.util.Serializer;
+
+public class ServerTest {
+	public static void main(String[] args) 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");
+		env.setProperty(ParameterQueue.DURABLE_QUEUES, "false");
+		env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
+		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
+
+		// Set info about where the message will be sent
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RETRY_TIME_CONNECTION, "2000");
+
+		Broker.initBroker(env);
+		Broker.bind("number", new NumberImpl());
+	}
+}
