diff --git a/neo/admin/app.py b/neo/admin/app.py
index 6b98e9dd1729f4b64b6b34ac60a372350ecf73d2..36d844f28fdead8b9ff8a3d7fe757f7d4d9657b4 100644
--- a/neo/admin/app.py
+++ b/neo/admin/app.py
@@ -40,8 +40,8 @@ class Dispatcher:
     def register(self, msg_id, conn, kw=None):
         self.message_table[msg_id] = conn, kw
 
-    def retrieve(self, msg_id):
-        return self.message_table.pop(msg_id, None)
+    def pop(self, msg_id):
+        return self.message_table.pop(msg_id)
 
     def registered(self, msg_id):
         return self.message_table.has_key(msg_id)
diff --git a/neo/admin/handler.py b/neo/admin/handler.py
index c97fef7216e527749c671c94e9ab16ba8da18464..fc23f5816c4df9a8688662e47c94614c828617dd 100644
--- a/neo/admin/handler.py
+++ b/neo/admin/handler.py
@@ -167,37 +167,38 @@ class MasterBaseEventHandler(EventHandler):
 class MasterRequestEventHandler(MasterBaseEventHandler):
     """ This class handle all answer from primary master node"""
 
+    def __answerNeoCTL(self, msg_id, packet):
+        client_conn, kw = self.app.dispatcher.pop(msg_id)
+        # XXX: Notify method is not intended for this use. This must be
+        # fixed !
+        client_conn.notify(packet, kw['msg_id'])
+
     def handleAnswerClusterState(self, conn, packet, state):
         logging.info("handleAnswerClusterState for a conn")
         self.app.cluster_state = state
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
-        client_conn.notify(protocol.answerClusterState(state), kw['msg_id'])
+        self.__answerNeoCTL(packet.getId(),
+                            protocol.answerClusterState(state))
 
     def handleAnswerNewNodes(self, conn, packet, uuid_list):
         logging.info("handleAnswerNewNodes for a conn")
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
-        client_conn.notify(protocol.answerNewNodes(uuid_list), kw['msg_id'])
+        self.__answerNeoCTL(packet.getId(),
+                            protocol.answerNewNodes(uuid_list))
 
     def handleAnswerPartitionTable(self, conn, packet, ptid, row_list):
         logging.info("handleAnswerPartitionTable for a conn")
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
+        client_conn, kw = self.app.dispatcher.pop(packet.getId())
         # sent client the partition table
         self.app.sendPartitionTable(client_conn, **kw)
 
     def handleAnswerNodeState(self, conn, packet, uuid, state):
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
-        p = protocol.answerNodeState(uuid, state)
-        client_conn.notify(p, kw['msg_id'])
+        self.__answerNeoCTL(packet.getId(),
+                            protocol.answerNodeState(uuid, state))
 
     def handleNoError(self, conn, packet, msg):
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
-        p = protocol.noError(msg)
-        client_conn.notify(p, kw['msg_id'])
+        self.__answerNeoCTL(packet.getId(), protocol.noError(msg))
 
     def handleProtocolError(self, conn, packet, msg):
-        client_conn, kw = self.app.dispatcher.retrieve(packet.getId())
-        p = protocol.protocolError(msg)
-        client_conn.notify(p, kw['msg_id'])
+        self.__answerNeoCTL(packet.getId(), protocol.protocolError(msg))
 
 
 class MasterMonitoringEventHandler(MasterBaseEventHandler):