introduced xran UE context ID
diff --git a/src/main/java/org.onosproject.xran/wrapper/LinkMap.java b/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
index 5e62271..ed7b4f1 100644
--- a/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
+++ b/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
@@ -19,7 +19,6 @@
 import org.onosproject.xran.XranStore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.onosproject.xran.codecs.api.MMEUES1APID;
 import org.onosproject.xran.entities.RnibCell;
 import org.onosproject.xran.entities.RnibLink;
 import org.onosproject.xran.entities.RnibUe;
@@ -63,7 +62,20 @@
         return link;
     }
 
-    public RnibLink get(ECGI src, MMEUES1APID dst) {
+    public RnibLink putNonServingLink(RnibCell cell, Long ueId) {
+        RnibLink link = null;
+        RnibUe ue = ueMap.get(ueId);
+
+        if (ue != null) {
+            link = new RnibLink(cell, ue);
+            xranStore.storeLink(link);
+        } else {
+            log.error("Could not find mapping for CRNTI to UE. Aborting creation of non-serving link");
+        }
+        return link;
+    }
+
+    public RnibLink get(ECGI src, Long dst) {
         if (src != null && dst != null) {
             return xranStore.getLink(src, dst);
         }
@@ -74,17 +86,17 @@
         RnibUe ue = ueMap.get(src, dst);
 
         if (ue != null) {
-            return xranStore.getLink(src, ue.getMmeS1apId());
+            return xranStore.getLink(src, ue.getId());
         }
         return null;
     }
 
-    public CRNTI getCrnti(MMEUES1APID mme) {
-        return ueMap.getCrntUe().inverse().get(mme).getValue();
+    public CRNTI getCrnti(Long ueId) {
+        return ueMap.getCrntUe().inverse().get(ueId).getValue();
     }
 
     public RnibCell getPrimaryCell(RnibUe ue) {
-        List<RnibLink> linksByUeId = xranStore.getLinksByUeId(ue.getMmeS1apId().longValue());
+        List<RnibLink> linksByUeId = xranStore.getLinksByUeId(ue.getId());
         Optional<RnibLink> primary = linksByUeId.stream()
                 .filter(l -> l.getType().equals(RnibLink.Type.SERVING_PRIMARY))
                 .findFirst();
diff --git a/src/main/java/org.onosproject.xran/wrapper/UeMap.java b/src/main/java/org.onosproject.xran/wrapper/UeMap.java
index 1938a79..8b2110d 100644
--- a/src/main/java/org.onosproject.xran/wrapper/UeMap.java
+++ b/src/main/java/org.onosproject.xran/wrapper/UeMap.java
@@ -16,25 +16,18 @@
 
 package org.onosproject.xran.wrapper;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
-import io.netty.channel.ChannelHandlerContext;
-import javafx.util.Pair;
-import org.onosproject.net.HostId;
 import org.onosproject.xran.XranStore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
-import org.onosproject.xran.codecs.api.ENBUES1APID;
 import org.onosproject.xran.codecs.api.MMEUES1APID;
 import org.onosproject.xran.entities.RnibCell;
 import org.onosproject.xran.entities.RnibUe;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
+import org.onosproject.xran.identifiers.EcgiCrntiPair;
 
 public class UeMap {
-    private BiMap<EcgiCrntiPair, MMEUES1APID> crntUe = HashBiMap.create();
+    private BiMap<EcgiCrntiPair, Long> crntUe = HashBiMap.create();
 
     private XranStore xranStore;
 
@@ -42,75 +35,44 @@
         this.xranStore = xranStore;
     }
 
-    public BiMap<EcgiCrntiPair, MMEUES1APID> getCrntUe() {
+    public BiMap<EcgiCrntiPair, Long> getCrntUe() {
         return crntUe;
     }
 
     public void putCrnti(RnibCell cell, RnibUe ue) {
-        CRNTI ranId = ue.getRanId();
+        CRNTI ranId = ue.getCrnti();
         ECGI ecgi = cell.getEcgi();
         if (ranId != null && ecgi != null) {
-            crntUe.put(EcgiCrntiPair.valueOf(cell.getEcgi(),ue.getRanId()), ue.getMmeS1apId());
+            EcgiCrntiPair oldPair = crntUe.inverse().get(ue.getId()),
+                    newPair = EcgiCrntiPair.valueOf(cell.getEcgi(), ue.getCrnti());
+            if (oldPair == null) {
+                crntUe.put(newPair, ue.getId());
+            } else {
+                crntUe.inverse().remove(ue.getId());
+                crntUe.put(newPair, ue.getId());
+            }
         }
     }
 
     public void put(RnibCell cell, RnibUe ue) {
-
-        MMEUES1APID mmeS1apId = ue.getMmeS1apId();
-        if (mmeS1apId != null) {
-            xranStore.storeUe(ue);
-            putCrnti(cell, ue);
-        }
+        xranStore.storeUe(ue);
+        putCrnti(cell, ue);
     }
 
     public RnibUe get(ECGI ecgi, CRNTI crnti) {
-        MMEUES1APID mme = crntUe.get(EcgiCrntiPair.valueOf(ecgi, crnti));
-        if (mme != null) {
-            return xranStore.getUe(mme);
+        Long aLong = crntUe.get(EcgiCrntiPair.valueOf(ecgi, crnti));
+        if (aLong != null) {
+            return xranStore.getUe(aLong);
         }
         return null;
     }
 
-    public RnibUe get(MMEUES1APID mme) {
-        if (mme != null) {
-            return xranStore.getUe(mme);
-        }
-        return null;
+    public RnibUe get(Long ueId) {
+        return xranStore.getUe(ueId);
     }
 
-    public boolean remove(MMEUES1APID id) {
-        crntUe.inverse().remove(id);
-        return xranStore.removeUe(id);
-    }
-
-    public static class EcgiCrntiPair extends Pair<ECGI, CRNTI> {
-
-        /**
-         * Creates a new pair
-         *
-         * @param key   The key for this pair
-         * @param value The value to use for this pair
-         */
-        public EcgiCrntiPair(ECGI key, CRNTI value) {
-            super(key, value);
-        }
-
-        public static EcgiCrntiPair valueOf(ECGI key, CRNTI value) {
-            return new EcgiCrntiPair(key, value);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hashCode(getKey(), getValue());
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (o instanceof EcgiCrntiPair) {
-                return ((EcgiCrntiPair) o).getKey().equals(getKey()) &&
-                        ((EcgiCrntiPair) o).getValue().equals(getValue());
-            }
-            return super.equals(o);
-        }
+    public boolean remove(Long ueId) {
+        crntUe.inverse().remove(ueId);
+        return xranStore.removeUe(ueId);
     }
 }