Index: branches/supervisor/src/main/java/omq/supervisor/Supervisor.java
===================================================================
--- branches/supervisor/src/main/java/omq/supervisor/Supervisor.java	(revision 92)
+++ branches/supervisor/src/main/java/omq/supervisor/Supervisor.java	(revision 93)
@@ -9,3 +9,5 @@
 	public void spawnObject(OmqSettings settings) throws Exception;
 
+	public void unbindObject(OmqSettings settings) throws Exception;
+
 }
Index: branches/supervisor/src/main/java/omq/supervisor/SupervisorImpl.java
===================================================================
--- branches/supervisor/src/main/java/omq/supervisor/SupervisorImpl.java	(revision 92)
+++ branches/supervisor/src/main/java/omq/supervisor/SupervisorImpl.java	(revision 93)
@@ -44,5 +44,8 @@
 
 		String reference = settings.getReference();
-		objectSettings.put(reference, settings);
+
+		if (!objectSettings.containsKey(reference)) {
+			objectSettings.put(reference, settings);
+		}
 
 		int minObjects = settings.getMinNumberObjects();
@@ -69,4 +72,39 @@
 		}
 
+	}
+
+	@Override
+	public void unbindObject(OmqSettings settings) throws Exception {
+		String reference = settings.getReference();
+
+		int minObjects = settings.getMinNumberObjects();
+
+		Channel channel = getBroker().getNewChannel();
+
+		int numObjects = 0;
+		try {
+			DeclareOk dok = channel.queueDeclarePassive(reference);
+			numObjects = dok.getConsumerCount();
+			channel.close();
+
+			for (RemoteBroker broker : brokers) {
+				if (broker.hasObject(reference) && (numObjects - 1) >= minObjects) {
+					broker.deleteObject(reference);
+				}
+			}
+
+		} catch (Exception io) {
+			// The queue doesn't exist & the channel has been closed
+		}
+
+		for (RemoteBroker broker : brokers) {
+			if (!broker.hasObject(reference) && minObjects >= numObjects) {
+				broker.spawnObject(reference, settings.getClassName(), settings.getProps());
+				numObjects++;
+				if (minObjects >= numObjects) {
+					break;
+				}
+			}
+		}
 	}
 
Index: branches/supervisor/src/main/java/omq/supervisor/SupervisorThread.java
===================================================================
--- branches/supervisor/src/main/java/omq/supervisor/SupervisorThread.java	(revision 92)
+++ branches/supervisor/src/main/java/omq/supervisor/SupervisorThread.java	(revision 93)
@@ -61,4 +61,5 @@
 			// pregunta a tots i qui no té l'objecte li poses
 		} else if (numMessages < minMessages && minObjects > numConsumers) {
+			supervisor.unbindObject(settings);
 			// delete:
 			// pregunta a tots i qui té l'objecte li treus
Index: branches/supervisor/src/test/java/omq/test/supervisor/SleepTest.java
===================================================================
--- branches/supervisor/src/test/java/omq/test/supervisor/SleepTest.java	(revision 92)
+++ branches/supervisor/src/test/java/omq/test/supervisor/SleepTest.java	(revision 93)
@@ -15,5 +15,6 @@
 
 	@BeforeClass
-	public static void Server() throws Exception {System.out.println("hola");
+	public static void Server() throws Exception {
+		System.out.println("hola");
 		Properties env1 = new Properties();
 		env1.setProperty(ParameterQueue.USER_NAME, "guest");
@@ -59,17 +60,17 @@
 		Supervisor supervisor = broker.lookup("supervisor", Supervisor.class);
 
-		OmqSettings settings = new OmqSettings("sleep", SleepImpl.class.getName(), env, 1, 70, 2);
+		OmqSettings settings = new OmqSettings("sleep", SleepImpl.class.getName(), env, 20, 20, 2);
 		supervisor.spawnObject(settings);
 
 		Sleep sleep = broker.lookup("sleep", Sleep.class);
 
-		for (int i = 0; i < 50; i++) {
+		for (int i = 0; i < 10; i++) {
 			sleep.sleep();
 		}
 		Thread.sleep(5000);
-		for (int i = 0; i < 50; i++) {
+		for (int i = 0; i < 20; i++) {
 			sleep.sleep();
 		}
-		
+
 		Thread.sleep(100000);
 	}
