Index: /trunk/objectmq/src/omq/common/broker/Broker.java
===================================================================
--- /trunk/objectmq/src/omq/common/broker/Broker.java	(revision 28)
+++ /trunk/objectmq/src/omq/common/broker/Broker.java	(revision 29)
@@ -101,5 +101,5 @@
 	}
 
-	private static void initClient(Properties environment) throws Exception {
+	private static synchronized void initClient(Properties environment) throws Exception {
 		if (ResponseListener.isVoid()) {
 			ResponseListener.init(environment);
Index: /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java
===================================================================
--- /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 28)
+++ /trunk/objectmq/src/omq/server/remote/request/RemoteObject.java	(revision 29)
@@ -71,5 +71,5 @@
 
 		// Get num threads to use
-		int numThreads = 4;// Integer.parseInt(env.getProperty(ParameterQueue.NUM_THREADS));
+		int numThreads = Integer.parseInt(env.getProperty(ParameterQueue.NUM_THREADS, "1"));
 		remoteWrapper = new RemoteWrapper(this, numThreads);
 
Index: /trunk/objectmq/src/omq/server/remote/request/RemoteWrapper.java
===================================================================
--- /trunk/objectmq/src/omq/server/remote/request/RemoteWrapper.java	(revision 28)
+++ /trunk/objectmq/src/omq/server/remote/request/RemoteWrapper.java	(revision 29)
@@ -24,4 +24,7 @@
 		invocationList = new ArrayList<InvocationThread>();
 		deliveryQueue = new LinkedBlockingDeque<QueueingConsumer.Delivery>();
+
+		System.out.println("RemoteWrapper -> Object: " + obj.getRef() + ", numthreads listening = " + numThreads);
+
 		for (int i = 0; i < numThreads; i++) {
 			InvocationThread thread = new InvocationThread(obj, deliveryQueue);
Index: /trunk/objectmq/test/test2/Car.java
===================================================================
--- /trunk/objectmq/test/test2/Car.java	(revision 28)
+++ /trunk/objectmq/test/test2/Car.java	(revision 29)
@@ -7,4 +7,5 @@
 import omq.client.annotation.RemoteInterface;
 import omq.client.annotation.SyncMethod;
+import omq.exception.RemoteException;
 
 @RemoteInterface
@@ -28,3 +29,9 @@
 	public List<Rim> getRims();
 
+	@AsyncMethod
+	public void setMobile(String mobile) throws RemoteException;
+
+	@SyncMethod
+	public String getMobile();
+
 }
Index: /trunk/objectmq/test/test2/CarImpl.java
===================================================================
--- /trunk/objectmq/test/test2/CarImpl.java	(revision 28)
+++ /trunk/objectmq/test/test2/CarImpl.java	(revision 29)
@@ -3,4 +3,6 @@
 import java.util.List;
 
+import omq.common.broker.Broker;
+import omq.exception.RemoteException;
 import omq.server.remote.request.RemoteObject;
 
@@ -14,4 +16,5 @@
 	private int hp;
 	private List<Rim> rims;
+	private Mobile mobile;
 
 	@Override
@@ -27,23 +30,31 @@
 	@Override
 	public void setHP(int hp) {
-	
+		this.hp = hp;
 	}
 
 	@Override
 	public int getHP() {
-		// TODO Auto-generated method stub
-		return 0;
+		return hp;
 	}
 
 	@Override
 	public void setRims(List<Rim> rims) {
-		// TODO Auto-generated method stub
-
+		this.rims = rims;
 	}
 
 	@Override
 	public List<Rim> getRims() {
-		// TODO Auto-generated method stub
-		return null;
+		return rims;
 	}
+
+	@Override
+	public void setMobile(String mobile) throws RemoteException {
+		this.mobile = (Mobile) Broker.lookup(mobile, Mobile.class);
+	}
+
+	@Override
+	public String getMobile() {
+		return mobile.getRef();
+	}
+
 }
Index: /trunk/objectmq/test/test2/CarThread.java
===================================================================
--- /trunk/objectmq/test/test2/CarThread.java	(revision 29)
+++ /trunk/objectmq/test/test2/CarThread.java	(revision 29)
@@ -0,0 +1,51 @@
+package test2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import omq.common.broker.Broker;
+
+public class CarThread extends Thread {
+	private String name;
+	private String tfn;
+	private Object lock;
+
+	public CarThread(String name, String tfn, Object lock) {
+		this.name = name;
+		this.tfn = tfn;
+		this.lock = lock;
+	}
+
+	@Override
+	public void run() {
+		try {
+			Car car = (Car) Broker.lookup(name, Car.class);
+			car.setHP(1001);
+			car.setPlate("California 125");
+			List<Rim> rims = new ArrayList<Rim>();
+			rims.add(new Rim("asdf", 17));
+			rims.add(new Rim("qwer", 21));
+			car.setRims(rims);
+
+			Thread.sleep(1000);
+			
+			System.out.println("HP -> " + car.getHP());
+			System.out.println("Plate -> " + car.getPlate());
+			for (Rim r : car.getRims()) {
+				System.out.println("Rim -> " + r.getModel() + ", " + r.getInch());
+			}
+
+			Mobile mobile = (Mobile) Broker.lookup(tfn, Mobile.class);
+			synchronized (lock) {
+				lock.wait(2000);
+				List<String> messages = mobile.getMessages();
+				for (String m : messages) {
+					System.out.println("Message -> " + m);
+				}
+			}
+
+		} catch (Exception e) {
+
+		}
+	}
+}
Index: /trunk/objectmq/test/test2/ClientTest.java
===================================================================
--- /trunk/objectmq/test/test2/ClientTest.java	(revision 29)
+++ /trunk/objectmq/test/test2/ClientTest.java	(revision 29)
@@ -0,0 +1,41 @@
+package test2;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+
+public class ClientTest {
+
+	public static void main(String[] args) 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.SERIALIZERNAME,
+		// "omq.common.util.Serializers.GsonImp");
+		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);
+
+		String car = "audi";
+		String tfn = "aifon";
+		Object lock = new Object();
+		CarThread t1 = new CarThread(car, tfn, lock);
+		MobileThread t2 = new MobileThread(tfn, lock);
+
+		t1.start();
+		t2.start();
+		
+	}
+}
Index: /trunk/objectmq/test/test2/Mobile.java
===================================================================
--- /trunk/objectmq/test/test2/Mobile.java	(revision 29)
+++ /trunk/objectmq/test/test2/Mobile.java	(revision 29)
@@ -0,0 +1,19 @@
+package test2;
+
+import java.util.List;
+
+import omq.Remote;
+import omq.client.annotation.AsyncMethod;
+import omq.client.annotation.RemoteInterface;
+import omq.client.annotation.SyncMethod;
+
+@RemoteInterface
+public interface Mobile extends Remote {
+	@AsyncMethod
+	public void sendMessage(String message);
+	
+	@SyncMethod
+	public List<String> getMessages();
+	
+	
+}
Index: /trunk/objectmq/test/test2/MobileImpl.java
===================================================================
--- /trunk/objectmq/test/test2/MobileImpl.java	(revision 29)
+++ /trunk/objectmq/test/test2/MobileImpl.java	(revision 29)
@@ -0,0 +1,26 @@
+package test2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import omq.server.remote.request.RemoteObject;
+
+public class MobileImpl extends RemoteObject implements Mobile {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private List<String> messages = new ArrayList<String>();
+
+	@Override
+	public synchronized void sendMessage(String message) {
+		System.out.println("Message received " + this.getRef() + " -> " + message);
+		messages.add(message);
+	}
+
+	@Override
+	public List<String> getMessages() {
+		return messages;
+	}
+
+}
Index: /trunk/objectmq/test/test2/MobileThread.java
===================================================================
--- /trunk/objectmq/test/test2/MobileThread.java	(revision 29)
+++ /trunk/objectmq/test/test2/MobileThread.java	(revision 29)
@@ -0,0 +1,28 @@
+package test2;
+
+import omq.common.broker.Broker;
+
+public class MobileThread extends Thread {
+	private String name;
+	private Object lock;
+
+	public MobileThread(String name, Object lock) {
+		this.name = name;
+		this.lock = lock;
+	}
+
+	@Override
+	public void run() {
+		try {
+			Mobile mobile = (Mobile) Broker.lookup(name, Mobile.class);
+			synchronized (lock) {
+				mobile.sendMessage("Hello this is Sergi");
+				mobile.sendMessage("and this is a test");
+				Thread.sleep(1000);
+				lock.notify();
+			}
+		} catch (Exception e) {
+
+		}
+	}
+}
Index: /trunk/objectmq/test/test2/ServerTest.java
===================================================================
--- /trunk/objectmq/test/test2/ServerTest.java	(revision 29)
+++ /trunk/objectmq/test/test2/ServerTest.java	(revision 29)
@@ -0,0 +1,36 @@
+package test2;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+
+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.SERIALIZERNAME,
+		// "omq.common.util.Serializers.GsonImp");
+		env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
+		env.setProperty(ParameterQueue.NUM_THREADS, "4");
+
+		// Set info about where the message will be sent
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RETRY_TIME_CONNECTION, "2000");
+
+		String car = "audi";
+		String tfn = "aifon";
+
+		Broker.initBroker(env);
+		Broker.bind(car, new CarImpl());
+		Broker.bind(tfn, new MobileImpl());
+
+		System.out.println("Server started");
+	}
+}
