diff --git a/src/main/java/org.onosproject.xran/entities/RnibCell.java b/src/main/java/org.onosproject.xran/entities/RnibCell.java
index 3179357..ac29eba 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibCell.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibCell.java
@@ -18,9 +18,7 @@
 
 import com.fasterxml.jackson.annotation.*;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.collect.Lists;
 import org.onosproject.net.DeviceId;
-import org.onosproject.store.Timestamp;
 import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.xran.codecs.api.ECGI;
 import org.onosproject.xran.codecs.api.PRBUsage;
@@ -159,7 +157,7 @@
 
     public void modifyRrmConfig(JsonNode rrmConfigNode, List<RnibUe> ueList) throws Exception {
         RRMConfig.Crnti crnti = new RRMConfig.Crnti();
-        ueList.forEach(ue -> crnti.addCRNTI(ue.getRanId()));
+        ueList.forEach(ue -> crnti.addCRNTI(ue.getCrnti()));
 
         {
             JsonNode p_a = rrmConfigNode.path("p_a");
diff --git a/src/main/java/org.onosproject.xran/entities/RnibLink.java b/src/main/java/org.onosproject.xran/entities/RnibLink.java
index 7d2b374..13a0d93 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibLink.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibLink.java
@@ -92,7 +92,7 @@
 
         rrmParameters = new RRMConfig();
         RRMConfig.Crnti crnti = new RRMConfig.Crnti();
-        crnti.addCRNTI(linkId.getUe().getRanId());
+        crnti.addCRNTI(linkId.getUe().getCrnti());
         rrmParameters.setCrnti(crnti);
         rrmParameters.setEcgi(linkId.getEcgi());
     }
diff --git a/src/main/java/org.onosproject.xran/entities/RnibUe.java b/src/main/java/org.onosproject.xran/entities/RnibUe.java
index fb5bb71..3afcb04 100644
--- a/src/main/java/org.onosproject.xran/entities/RnibUe.java
+++ b/src/main/java/org.onosproject.xran/entities/RnibUe.java
@@ -30,8 +30,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.URI;
-import java.net.URISyntaxException;
+import java.util.Objects;
 import java.util.Timer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -42,6 +41,7 @@
  * Created by dimitris on 7/22/17.
  */
 @JsonPropertyOrder({
+        "ID",
         "IMSI",
         "ENBUES1APID",
         "MMEUES1APID",
@@ -58,6 +58,8 @@
     private static final Logger log =
             LoggerFactory.getLogger(RnibUe.class);
 
+    @JsonProperty("ID")
+    private Long id;
     @JsonProperty("IMSI")
     private String imsi;
     @JsonProperty("ENBUES1APID")
@@ -65,7 +67,7 @@
     @JsonProperty("MMEUES1APID")
     private MMEUES1APID mmeS1apId;
     @JsonProperty("CRNTI")
-    private CRNTI ranId;
+    private CRNTI crnti;
     @JsonProperty("State")
     private State state;
     @JsonProperty("Capability")
@@ -80,23 +82,11 @@
         timer = new Timer();
     }
 
-    public static URI uri(RnibUe ue) {
-        MMEUES1APID mmeS1apId = ue.getMmeS1apId();
-        if (mmeS1apId != null) {
-            try {
-                return new URI(SCHEME, mmeS1apId.toString(), null);
-            } catch (URISyntaxException e) {
-                return null;
-            }
-        }
-        return null;
-    }
-
-    public static MMEUES1APID hostIdtoMME(HostId hostId) {
+    public static Long hostIdtoUEId(HostId hostId) {
         String mac = hostId.mac().toString();
         mac = mac.replace(":", "");
         long l = Long.parseLong(mac, 16);
-        return new MMEUES1APID(l);
+        return l;
     }
 
     @JsonIgnore
@@ -132,13 +122,13 @@
     }
 
     @JsonProperty("CRNTI")
-    public CRNTI getRanId() {
-        return ranId;
+    public CRNTI getCrnti() {
+        return crnti;
     }
 
     @JsonProperty("CRNTI")
-    public void setRanId(CRNTI ranId) {
-        this.ranId = ranId;
+    public void setCrnti(CRNTI crnti) {
+        this.crnti = crnti;
     }
 
     @JsonProperty("IMSI")
@@ -154,7 +144,7 @@
     @JsonIgnore
     public HostId getHostId() {
         try {
-            String text = this.mmeS1apId.value.toString(16),
+            String text = Long.toHexString(this.id),
                     res = "";
             int charsLeft = 12 - text.length();
             if (charsLeft > 0) {
@@ -220,17 +210,25 @@
         this.state = state;
     }
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
     @Override
     public String toString() {
         return "RnibUe{" +
-                "imsi='" + imsi + '\'' +
+                "id=" + id +
+                ", imsi='" + imsi + '\'' +
                 ", enbS1apId=" + enbS1apId +
                 ", mmeS1apId=" + mmeS1apId +
-                ", ranId=" + ranId +
+                ", crnti=" + crnti +
                 ", state=" + state +
                 ", capability=" + capability +
                 ", measConfig=" + measConfig +
-                ", timer=" + timer +
                 '}';
     }
 
@@ -238,17 +236,13 @@
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-
         RnibUe rnibUe = (RnibUe) o;
-
-        return mmeS1apId.equals(rnibUe.mmeS1apId) && ranId.equals(rnibUe.ranId);
+        return Objects.equals(id, rnibUe.id);
     }
 
     @Override
     public int hashCode() {
-        int result = mmeS1apId.hashCode();
-        result = 31 * result + ranId.hashCode();
-        return result;
+        return Objects.hash(id);
     }
 
     public enum State {
