diff --git a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
index 8040cea..47af1f1 100644
--- a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
+++ b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
@@ -175,6 +175,7 @@
     private ConcurrentMap<ECGI, SynchronousQueue<String>> hoMap = new ConcurrentHashMap<>();
     private ConcurrentMap<ECGI, SynchronousQueue<String>> rrmcellMap = new ConcurrentHashMap<>();
     private ConcurrentMap<CRNTI, SynchronousQueue<String>> scellAddMap = new ConcurrentHashMap<>();
+    // Map used to keep messages in pairs (HO Complete - CTX Update, Adm Status - CTX Update)
     private ConcurrentMap<EcgiCrntiPair, ContextUpdateHandler> contextUpdateMap = new ConcurrentHashMap<>();
     /* QUEUE */
     private BlockingQueue<Long> ueIdQueue = new LinkedBlockingQueue<>();
@@ -890,7 +891,8 @@
                         v = new ContextUpdateHandler();
                     }
                     if (v.setAdmissionStatus(ueAdmissionStatus)) {
-                        handleContextUpdate(v.getContextUpdate(), ctx, false);
+                        handlePairedPackets(v.getContextUpdate(), ctx, false);
+                        v.reset();
                     }
                     return v;
                 });
@@ -912,7 +914,7 @@
                 }
                 if (v.setContextUpdate(ueContextUpdate)) {
                     HOComplete hoComplete = v.getHoComplete();
-                    handleContextUpdate(ueContextUpdate, ctx, hoComplete != null);
+                    handlePairedPackets(ueContextUpdate, ctx, hoComplete != null);
                     if (hoComplete != null) {
                         try {
                             hoMap.get(hoComplete.getEcgiS()).put("Hand Over Completed");
@@ -923,6 +925,7 @@
                             hoMap.remove(hoComplete.getEcgiS());
                         }
                     }
+                    v.reset();
                 }
                 return v;
             });
@@ -1049,7 +1052,7 @@
                     v = new ContextUpdateHandler();
                 }
                 if (v.setHoComplete(hoComplete)) {
-                    handleContextUpdate(v.getContextUpdate(), ctx, true);
+                    handlePairedPackets(v.getContextUpdate(), ctx, true);
 
                     try {
                         hoMap.get(hoComplete.getEcgiS()).put("Hand Over Completed");
@@ -1059,6 +1062,7 @@
                     } finally {
                         hoMap.remove(hoComplete.getEcgiS());
                     }
+                    v.reset();
                 }
                 return v;
             });
@@ -1342,7 +1346,7 @@
          * @param ctx           channel context for the CELL
          * @param handoff       true if we handle a Hand Off
          */
-        private void handleContextUpdate(UEContextUpdate contextUpdate, ChannelHandlerContext ctx, boolean handoff) {
+        private void handlePairedPackets(UEContextUpdate contextUpdate, ChannelHandlerContext ctx, boolean handoff) {
             RnibUe ue;
             RnibCell cell = xranStore.getCell(contextUpdate.getEcgi());
 
diff --git a/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java b/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
index 4372d8b..d1fcfcf 100644
--- a/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
+++ b/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
@@ -86,6 +86,12 @@
         return contextUpdate != null;
     }
 
+    public void reset() {
+        this.hoComplete = null;
+        this.admissionStatus = null;
+        this.contextUpdate = null;
+    }
+
     @Override
     public String toString() {
         return "ContextUpdateHandler{" +
