diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java b/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java
index 63eb488a59f7173f87ebd316525e1d21598b44e3..ba508deea88759d1bd11f04623008449e7d13889 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java
+++ b/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java
@@ -1,7 +1,6 @@
 package fr.irit.smac.clumate.amas;
 
 import fr.irit.smac.amak.Agent;
-import fr.irit.smac.amak.messaging.Mailbox;
 import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage;
 import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage;
 import fr.irit.smac.clumate.cluster.Cluster;
@@ -20,11 +19,6 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 	private State state = State.INIT;
 	private State nextState = state;
 
-	//region Mail boxes
-	private final Mailbox<RequestSimilarityMessage> requestSimilarityMessageMailBox = new Mailbox<>();
-	private final Mailbox<EvaluatedScoreMessage> evaluatedScoreMessageMailbox = new Mailbox<>();
-	//endregion
-
 	//region Perception variables
 	private Cluster<T> receivedClusterForRequestSimilarity;
 	private ClusterAgent<T> receivedRequestSimilarityRequester;
@@ -81,14 +75,14 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 	}
 
 	public boolean readyToStop() {
-		return state == State.DORMANT && requestSimilarityMessageMailBox.isEmpty();
+		return state == State.DORMANT && !mailbox.hasMessageOfType(RequestSimilarityMessage.class);
 	}
 
 	@Override
 	protected void onPerceive() {
 		switch (state) {
 			case DORMANT -> {
-				var receivedRequestSimilarityMessage = this.requestSimilarityMessageMailBox.retrieve();
+				var receivedRequestSimilarityMessage = this.mailbox.read(RequestSimilarityMessage.class);
 				if (receivedRequestSimilarityMessage.isPresent()) {
 					receivedClusterForRequestSimilarity = receivedRequestSimilarityMessage.get().getCluster();
 					receivedRequestSimilarityRequester = (ClusterAgent) receivedRequestSimilarityMessage.get().getSender();
@@ -98,8 +92,8 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 				}
 			}
 			case WAITING_FOR_REPLY -> {
-				while (!evaluatedScoreMessageMailbox.isEmpty()) {
-					var evaluatedScoreMessage = this.evaluatedScoreMessageMailbox.retrieve();
+				while (mailbox.hasMessageOfType(EvaluatedScoreMessage.class)) {
+					var evaluatedScoreMessage = this.mailbox.read(EvaluatedScoreMessage.class);
 					if (evaluatedScoreMessage.isPresent()) {
 						similarityScoresReceived.put((ClusterAgent) evaluatedScoreMessage.get().getSender(), evaluatedScoreMessage.get().getSimilarityScore());
 					}
@@ -177,7 +171,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 				for (var agent : clusterAgentsRoughlySimilarOnReady) {
 					if (logger.isLoggable(Level.INFO))
 						logger.info(this + " sends RequestSimilarityMessage to " + agent);
-					agent.requestSimilarityMessageMailBox.send(new RequestSimilarityMessage(this, cluster));
+					agent.mailbox.receive(new RequestSimilarityMessage(this, cluster));
 					requestSimilarityMessageSentAgents.add(agent);
 				}
 
@@ -191,7 +185,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 					var message = new EvaluatedScoreMessage(this, computedSimilarityScoreDuringThisCycle);
 					if (logger.isLoggable(Level.INFO))
 						logger.info(this + " --> " + receivedRequestSimilarityRequester + " " + message);
-					receivedRequestSimilarityRequester.evaluatedScoreMessageMailbox.send(message);
+					receivedRequestSimilarityRequester.mailbox.receive(message);
 					receivedRequestSimilarityRequester = null;
 
 					if (computedSimilarityScoreDuringThisCycle >= getAmas().getMasSettings().fusionThreshold()) {
diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java b/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java
index 914f8245d2b482fd8394662e3411a71a680628c0..06b07263967983d48583951217494518d322f464 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java
+++ b/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java
@@ -17,11 +17,6 @@ public class ClusterEnvironment<T extends DataPoint> extends Environment {
 	@Getter
 	private T lastPolledPendingDataPoint = null;
 
-	@Override
-	public void onInitialEntitiesCreation() {
-		super.onInitialEntitiesCreation();
-	}
-
 	public boolean hasRemainingPendingAdditionDataPoints() {
 		return !pendingAdditionDataPoints.isEmpty();
 	}
diff --git a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy b/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy
new file mode 100644
index 0000000000000000000000000000000000000000..b20a247ffec261780c8f52b1d2022a636a6ba65b
--- /dev/null
+++ b/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy
@@ -0,0 +1,27 @@
+package fr.irit.smac.clumate.amas
+
+import fr.irit.smac.amak.Agent
+import fr.irit.smac.amak.Amas
+import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage
+import fr.irit.smac.clumate.cluster.Cluster
+import fr.irit.smac.clumate.cluster.DataPoint
+import fr.irit.smac.clumate.cluster.DataPointFuser
+import fr.irit.smac.clumate.cluster.SimilarityScoreMethod
+import spock.lang.Specification
+
+class ClusterAgentTest extends Specification {
+	def "When an agent in DORMANT receives a RequestSimilarityMessage, it should reply with a similarity score"() {
+		given:
+		def amas = new ClusterAMAS(new ClusterEnvironment<DataPoint>(), new MASSettings<DataPoint>(Mock(SimilarityScoreMethod), 0.5, EnumSet.noneOf(AMASOption),Mock(DataPointFuser)))
+		def agent = new ClusterAgent(amas, Mock(DataPoint))
+		agent.state = ClusterAgent.State.DORMANT
+		def mock = Mock(ClusterAgent)
+
+		when:
+		agent.mailbox.receive(new RequestSimilarityMessage(mock, Mock(Cluster)))
+		agent.cycle()
+
+		then:
+		agent.state == ClusterAgent.State.ACTIVE
+	}
+}