diff --git a/src/main/java/org.onosproject.xran/wrapper/LinkMap.java b/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
index 033f132..5e62271 100644
--- a/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
+++ b/src/main/java/org.onosproject.xran/wrapper/LinkMap.java
@@ -16,8 +16,6 @@
 
 package org.onosproject.xran.wrapper;
 
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
 import org.onosproject.xran.XranStore;
 import org.onosproject.xran.codecs.api.CRNTI;
 import org.onosproject.xran.codecs.api.ECGI;
@@ -25,7 +23,6 @@
 import org.onosproject.xran.entities.RnibCell;
 import org.onosproject.xran.entities.RnibLink;
 import org.onosproject.xran.entities.RnibUe;
-import org.onosproject.xran.identifiers.LinkId;
 import org.slf4j.Logger;
 
 import java.util.List;
@@ -35,26 +32,29 @@
 
 public class LinkMap {
     private static final Logger log = getLogger(LinkMap.class);
-    private final XranStore xranStore;
-    private BiMap<CRNTI, MMEUES1APID> crntiMme = HashBiMap.create();
 
-    public LinkMap(XranStore xranStore) {
+    private final XranStore xranStore;
+
+    private UeMap ueMap;
+
+    public LinkMap(XranStore xranStore, UeMap ueMap) {
         this.xranStore = xranStore;
+        this.ueMap = ueMap;
     }
 
     public void putPrimaryLink(RnibCell cell, RnibUe ue) {
         RnibLink link = new RnibLink(cell, ue);
         link.setType(RnibLink.Type.SERVING_PRIMARY);
         xranStore.storeLink(link);
-        crntiMme.put(ue.getRanId(), ue.getMmeS1apId());
+
+        ueMap.putCrnti(cell, ue);
     }
 
     public RnibLink putNonServingLink(RnibCell cell, CRNTI crnti) {
         RnibLink link = null;
-        MMEUES1APID mmeues1APID = crntiMme.get(crnti);
+        RnibUe ue = ueMap.get(cell.getEcgi(), crnti);
 
-        if (mmeues1APID != null) {
-            RnibUe ue = xranStore.getUe(mmeues1APID);
+        if (ue != null) {
             link = new RnibLink(cell, ue);
             xranStore.storeLink(link);
         } else {
@@ -71,41 +71,16 @@
     }
 
     public RnibLink get(ECGI src, CRNTI dst) {
-        MMEUES1APID mmeues1APID = crntiMme.get(dst);
+        RnibUe ue = ueMap.get(src, dst);
 
-        if (mmeues1APID != null) {
-            return xranStore.getLink(src, mmeues1APID);
+        if (ue != null) {
+            return xranStore.getLink(src, ue.getMmeS1apId());
         }
         return null;
     }
 
     public CRNTI getCrnti(MMEUES1APID mme) {
-        return crntiMme.inverse().get(mme);
-    }
-
-    public boolean remove(ECGI src, MMEUES1APID dst) {
-        RnibLink link = xranStore.getLink(src, dst);
-
-        if (link != null) {
-            LinkId linkId = link.getLinkId();
-            if (linkId != null) {
-                return xranStore.removeLink(linkId);
-            }
-        }
-        return false;
-    }
-
-    public boolean remove(ECGI src, CRNTI dst) {
-        MMEUES1APID mmeues1APID = crntiMme.get(dst);
-
-        RnibLink link = xranStore.getLink(src, mmeues1APID);
-        if (link != null) {
-            LinkId linkId = link.getLinkId();
-            if (linkId != null) {
-                return xranStore.removeLink(linkId);
-            }
-        }
-        return false;
+        return ueMap.getCrntUe().inverse().get(mme).getValue();
     }
 
     public RnibCell getPrimaryCell(RnibUe ue) {
diff --git a/src/main/java/org.onosproject.xran/wrapper/UeMap.java b/src/main/java/org.onosproject.xran/wrapper/UeMap.java
index a42ecbd..1938a79 100644
--- a/src/main/java/org.onosproject.xran/wrapper/UeMap.java
+++ b/src/main/java/org.onosproject.xran/wrapper/UeMap.java
@@ -16,21 +16,25 @@
 
 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;
 
 public class UeMap {
-    private BiMap<CRNTI, MMEUES1APID> crntUe = HashBiMap.create();
+    private BiMap<EcgiCrntiPair, MMEUES1APID> crntUe = HashBiMap.create();
 
     private XranStore xranStore;
 
@@ -38,21 +42,29 @@
         this.xranStore = xranStore;
     }
 
-    public void put(RnibUe ue) {
+    public BiMap<EcgiCrntiPair, MMEUES1APID> getCrntUe() {
+        return crntUe;
+    }
+
+    public void putCrnti(RnibCell cell, RnibUe ue) {
+        CRNTI ranId = ue.getRanId();
+        ECGI ecgi = cell.getEcgi();
+        if (ranId != null && ecgi != null) {
+            crntUe.put(EcgiCrntiPair.valueOf(cell.getEcgi(),ue.getRanId()), ue.getMmeS1apId());
+        }
+    }
+
+    public void put(RnibCell cell, RnibUe ue) {
 
         MMEUES1APID mmeS1apId = ue.getMmeS1apId();
         if (mmeS1apId != null) {
             xranStore.storeUe(ue);
-        }
-
-        CRNTI ranId = ue.getRanId();
-        if (ranId != null) {
-            crntUe.put(ranId, ue.getMmeS1apId());
+            putCrnti(cell, ue);
         }
     }
 
-    public RnibUe get(CRNTI id) {
-        MMEUES1APID mme = crntUe.get(id);
+    public RnibUe get(ECGI ecgi, CRNTI crnti) {
+        MMEUES1APID mme = crntUe.get(EcgiCrntiPair.valueOf(ecgi, crnti));
         if (mme != null) {
             return xranStore.getUe(mme);
         }
@@ -70,4 +82,35 @@
         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);
+        }
+    }
 }
