diff --git a/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java b/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
index f3a9fac..3cc0e01 100644
--- a/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
+++ b/src/main/java/org.onosproject.xran/impl/DefaultXranStore.java
@@ -86,7 +86,7 @@
         list.addAll(
                 linkMap.keySet()
                         .stream()
-                        .filter(k -> k.getSourceId().equals(ecgi))
+                        .filter(k -> k.getEcgi().equals(ecgi))
                         .map(v -> linkMap.get(v))
                         .collect(Collectors.toList()));
 
@@ -101,7 +101,7 @@
         list.addAll(
                 linkMap.keySet()
                         .stream()
-                        .filter(k -> k.getSourceId().getEUTRANcellIdentifier().equals(eci))
+                        .filter(k -> k.getEcgi().getEUTRANcellIdentifier().equals(eci))
                         .map(v -> linkMap.get(v))
                         .collect(Collectors.toList()));
 
@@ -116,7 +116,7 @@
         list.addAll(
                 linkMap.keySet()
                         .stream()
-                        .filter(k -> k.getDestinationId().equals(mme))
+                        .filter(k -> k.getMmeues1apid().equals(mme))
                         .map(v -> linkMap.get(v))
                         .collect(Collectors.toList()));
 
@@ -130,8 +130,8 @@
 
         Optional<LinkId> first = linkMap.keySet()
                 .stream()
-                .filter(linkId -> linkId.getSourceId().getEUTRANcellIdentifier().equals(eci))
-                .filter(linkId -> linkId.getDestinationId().equals(mme))
+                .filter(linkId -> linkId.getEcgi().getEUTRANcellIdentifier().equals(eci))
+                .filter(linkId -> linkId.getMmeues1apid().equals(mme))
                 .findFirst();
 
         return first.map(linkId -> linkMap.get(linkId)).orElse(null);
@@ -145,8 +145,17 @@
         if (cell != null && ue != null) {
             RnibLink link = new RnibLink(cell, ue);
 
+            // TODO: check logic for each type
             try {
-                link.setType(RnibLink.Type.valueOf(type));
+                RnibLink.Type linkType = RnibLink.Type.valueOf(type);
+                switch (linkType) {
+                    case NON_SERVING:
+                        break;
+                    case SERVING_PRIMARY:
+                        break;
+                    case SERVING_SECONDARY:
+                        break;
+                }
             } catch (Exception e) {
                 log.error(ExceptionUtils.getFullStackTrace(e));
             }
@@ -177,6 +186,11 @@
     }
 
     @Override
+    public void modifyLinkRrmConf(RnibLink link, JsonNode rrmConf) {
+        link.modifyRrmParameters(rrmConf);
+    }
+
+    @Override
     public List<Object> getNodes() {
         List<Object> list = Lists.newArrayList();
         list.add(cellMap.values());
@@ -233,13 +247,11 @@
     }
 
     @Override
-    public boolean modifyCellRrmConf(RnibCell cell, JsonNode rrmConf) {
-
+    public void modifyCellRrmConf(RnibCell cell, JsonNode rrmConf) {
         List<RnibLink> linkList = getLinksByECGI(cell.getEcgi());
         List<RnibUe> ueList = linkList.stream().map(link -> link.getLinkId().getUe()).collect(Collectors.toList());
 
         cell.modifyRrmConfig(rrmConf, ueList);
-        return false;
     }
 
     @Override
diff --git a/src/main/java/org.onosproject.xran/impl/XranConfig.java b/src/main/java/org.onosproject.xran/impl/XranConfig.java
index be27c89..5f59d4d 100644
--- a/src/main/java/org.onosproject.xran/impl/XranConfig.java
+++ b/src/main/java/org.onosproject.xran/impl/XranConfig.java
@@ -56,6 +56,10 @@
 
     private static final String L2_MEAS_REPORT_INTERVAL = "l2_meas_report_interval_ms";
 
+    private static final String ADMISSION_SUCCESS = "admission_success";
+
+    private static final String BEARER_SUCCESS = "bearer_success";
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     public Map<String, ECGI> activeCellSet() {
@@ -80,6 +84,16 @@
         return cells;
     }
 
+    public boolean admissionFlag() {
+        JsonNode flag = object.get(ADMISSION_SUCCESS);
+        return flag != null && flag.asBoolean();
+    }
+
+    public boolean bearerFlag() {
+        JsonNode flag = object.get(BEARER_SUCCESS);
+        return flag != null && flag.asBoolean();
+    }
+
     public int getXrancPort() {
         return object.get(XRANC_PORT).asInt();
     }
