diff --git a/src/main/java/org.onosproject.xran/identifiers/ContextUpdateHandler.java b/src/main/java/org.onosproject.xran/identifiers/ContextUpdateHandler.java
new file mode 100644
index 0000000..d1fcfcf
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/identifiers/ContextUpdateHandler.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.xran.identifiers;
+
+import org.onosproject.xran.codecs.pdu.HOComplete;
+import org.onosproject.xran.codecs.pdu.UEAdmissionStatus;
+import org.onosproject.xran.codecs.pdu.UEContextUpdate;
+
+/**
+ * Class to handle UE Context Update packet.
+ */
+public class ContextUpdateHandler {
+    private UEContextUpdate contextUpdate;
+    private UEAdmissionStatus admissionStatus;
+    private HOComplete hoComplete;
+
+    /**
+     * Get Context Update.
+     * @return UEContextUpdate
+     */
+    public UEContextUpdate getContextUpdate() {
+        return contextUpdate;
+    }
+
+    /**
+     * Set Context Update.
+     * @param contextUpdate UEContextUpdate
+     * @return boolean to check context update was for admissionStatus packet or HOComplete packet
+     */
+    public boolean setContextUpdate(UEContextUpdate contextUpdate) {
+        this.contextUpdate = contextUpdate;
+
+        return admissionStatus != null || hoComplete != null;
+
+    }
+
+    /**
+     * Get UEAdmissionStatus.
+     * @return UEAdmissionStatus
+     */
+    public UEAdmissionStatus getAdmissionStatus() {
+        return admissionStatus;
+    }
+
+    /**
+     * Set UEAdmissionStatus.
+     * @param admissionStatus UEAdmissionStatus
+     * @return boolean contextUpdate exists or not
+     */
+    public boolean setAdmissionStatus(UEAdmissionStatus admissionStatus) {
+        this.admissionStatus = admissionStatus;
+
+        return contextUpdate != null;
+    }
+
+    /**
+     * Get HOComplete.
+     * @return HOComplete
+     */
+    public HOComplete getHoComplete() {
+        return hoComplete;
+    }
+
+    /**
+     * Set HOComplete.
+     * @param hoComplete HOComplete
+     * @return boolean contextUpdate exists or not
+     */
+    public boolean setHoComplete(HOComplete hoComplete) {
+        this.hoComplete = hoComplete;
+
+        return contextUpdate != null;
+    }
+
+    public void reset() {
+        this.hoComplete = null;
+        this.admissionStatus = null;
+        this.contextUpdate = null;
+    }
+
+    @Override
+    public String toString() {
+        return "ContextUpdateHandler{" +
+                "contextUpdate=" + (contextUpdate != null) +
+                ", admissionStatus=" + (admissionStatus != null) +
+                ", hoComplete=" + (hoComplete != null) +
+                '}';
+    }
+}
