diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
index 0e6f5a6..5edab7c 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
@@ -291,24 +291,24 @@
         MultiPointToSinglePointIntent intent6 = intentBuilder(
                 routeEntry6.prefix(), "00:00:00:00:00:01",  SW1_ETH1);
 
-        // Set up the bgpRoutes field in Router class and routeIntents fields
+        // Set up the ribTable field in Router class and routeIntents fields
         // in IntentSynchronizer class
-        InvertedRadixTree<RouteEntry> bgpRoutes =
+        InvertedRadixTree<RouteEntry> ribTable =
                 new ConcurrentInvertedRadixTree<>(
                 new DefaultByteArrayNodeFactory());
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry1.prefix()),
-                routeEntry1);
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry3.prefix()),
-                routeEntry3);
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry4Update.prefix()),
-                routeEntry4Update);
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry5.prefix()),
-                routeEntry5);
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry6.prefix()),
-                routeEntry6);
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry7.prefix()),
-                routeEntry7);
-        TestUtils.setField(router, "bgpRoutes", bgpRoutes);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry1.prefix()),
+                     routeEntry1);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry3.prefix()),
+                     routeEntry3);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry4Update.prefix()),
+                     routeEntry4Update);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry5.prefix()),
+                     routeEntry5);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry6.prefix()),
+                     routeEntry6);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry7.prefix()),
+                     routeEntry7);
+        TestUtils.setField(router, "ribTable", ribTable);
 
         ConcurrentHashMap<Ip4Prefix, MultiPointToSinglePointIntent>
         routeIntents =  new ConcurrentHashMap<>();
diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/RouterAsyncArpTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/RouterAsyncArpTest.java
index c220d62..4d3ad90 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/RouterAsyncArpTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/RouterAsyncArpTest.java
@@ -268,9 +268,9 @@
         // Construct the existing MultiPointToSinglePointIntent intent
         MultiPointToSinglePointIntent intent = staticIntentBuilder();
 
-        // Set up the bgpRoutes field of Router class with existing route, and
+        // Set up the ribTable field of Router class with existing route, and
         // routeIntents field with the corresponding existing intent
-        setBgpRoutesField(routeEntry);
+        setRibTableField(routeEntry);
         setRouteIntentsField(routeEntry, intent);
 
         // Start to construct a new route entry and new intent
@@ -359,9 +359,9 @@
         // Construct the existing MultiPointToSinglePointIntent intent
         MultiPointToSinglePointIntent intent = staticIntentBuilder();
 
-        // Set up the bgpRoutes field of Router class with existing route, and
+        // Set up the ribTable field of Router class with existing route, and
         // routeIntents field with the corresponding existing intent
-        setBgpRoutesField(routeEntry);
+        setRibTableField(routeEntry);
         setRouteIntentsField(routeEntry, intent);
 
         // Set up expectation
@@ -412,19 +412,19 @@
     }
 
     /**
-     * Sets bgpRoutesField in Router class.
+     * Sets ribTable Field in Router class.
      *
      * @throws TestUtilsException
      */
-    private void setBgpRoutesField(RouteEntry routeEntry)
+    private void setRibTableField(RouteEntry routeEntry)
             throws TestUtilsException {
 
-        InvertedRadixTree<RouteEntry> bgpRoutes =
+        InvertedRadixTree<RouteEntry> ribTable =
                 new ConcurrentInvertedRadixTree<>(
                 new DefaultByteArrayNodeFactory());
-        bgpRoutes.put(RouteEntry.createBinaryString(routeEntry.prefix()),
-                routeEntry);
-        TestUtils.setField(router, "bgpRoutes", bgpRoutes);
+        ribTable.put(RouteEntry.createBinaryString(routeEntry.prefix()),
+                     routeEntry);
+        TestUtils.setField(router, "ribTable", ribTable);
     }
 
     /**
