diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index e1d9115..e367281 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -128,7 +128,7 @@
                 return abortTransaction(tx);
             }
 
-            if (!appendValues(discreteTxStore, continuousTxStore, parentId, entry.getValue())) {
+            if (!register(discreteTxStore, continuousTxStore, parentId, entry.getValue())) {
                 return abortTransaction(tx);
             }
         }
@@ -191,7 +191,7 @@
                 return abortTransaction(tx);
             }
 
-            if (!removeValues(discreteTxStore, continuousTxStore, entry.getKey(), entry.getValue())) {
+            if (!unregister(discreteTxStore, continuousTxStore, entry.getKey(), entry.getValue())) {
                 log.warn("Failed to unregister {}: Failed to remove {} values.",
                         entry.getKey(), entry.getValue().size());
                 log.debug("Failed to unregister {}: Failed to remove values: {}",
@@ -343,9 +343,9 @@
      * @return true if the operation succeeds, false otherwise.
      */
     // computational complexity: O(n) where n is the number of the specified value
-    private boolean appendValues(TransactionalDiscreteResourceStore discreteTxStore,
-                                 TransactionalContinuousResourceStore continuousTxStore,
-                                 DiscreteResourceId key, List<Resource> values) {
+    private boolean register(TransactionalDiscreteResourceStore discreteTxStore,
+                             TransactionalContinuousResourceStore continuousTxStore,
+                             DiscreteResourceId key, List<Resource> values) {
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
@@ -360,14 +360,14 @@
 
         // short-circuit decision avoiding unnecessary distributed map operations
         if (continuousValues.isEmpty()) {
-            return discreteTxStore.appendValues(key, discreteValues);
+            return discreteTxStore.register(key, discreteValues);
         }
         if (discreteValues.isEmpty()) {
-            return continuousTxStore.appendValues(key, continuousValues);
+            return continuousTxStore.register(key, continuousValues);
         }
 
-        return discreteTxStore.appendValues(key, discreteValues)
-                && continuousTxStore.appendValues(key, continuousValues);
+        return discreteTxStore.register(key, discreteValues)
+                && continuousTxStore.register(key, continuousValues);
     }
 
     /**
@@ -380,9 +380,9 @@
      * @param values            values to be removed
      * @return true if the operation succeeds, false otherwise
      */
-    private boolean removeValues(TransactionalDiscreteResourceStore discreteTxStore,
-                                 TransactionalContinuousResourceStore continuousTxStore,
-                                 DiscreteResourceId key, List<Resource> values) {
+    private boolean unregister(TransactionalDiscreteResourceStore discreteTxStore,
+                               TransactionalContinuousResourceStore continuousTxStore,
+                               DiscreteResourceId key, List<Resource> values) {
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
@@ -397,14 +397,14 @@
 
         // short-circuit decision avoiding unnecessary distributed map operations
         if (continuousValues.isEmpty()) {
-            return discreteTxStore.removeValues(key, discreteValues);
+            return discreteTxStore.unregister(key, discreteValues);
         }
         if (discreteValues.isEmpty()) {
-            return continuousTxStore.removeValues(key, continuousValues);
+            return continuousTxStore.unregister(key, continuousValues);
         }
 
-        return discreteTxStore.removeValues(key, discreteValues)
-                && continuousTxStore.removeValues(key, continuousValues);
+        return discreteTxStore.unregister(key, discreteValues)
+                && continuousTxStore.unregister(key, continuousValues);
     }
 
     // internal use only
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
index 882c67d..0813f15 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
@@ -66,7 +66,7 @@
                 .findFirst();
     }
 
-    boolean appendValues(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean register(DiscreteResourceId key, List<ContinuousResource> values) {
         Set<ContinuousResource> requested = new LinkedHashSet<>(values);
         Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
@@ -94,7 +94,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean removeValues(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean unregister(DiscreteResourceId key, List<ContinuousResource> values) {
         Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, new LinkedHashSet<>());
         if (oldValues == null) {
             log.trace("No-Op removing values. key {} did not exist", key);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
index 8275ac6..72841fb 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
@@ -62,7 +62,7 @@
         }
     }
 
-    boolean appendValues(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean register(DiscreteResourceId key, List<DiscreteResource> values) {
         Set<DiscreteResource> requested = new LinkedHashSet<>(values);
         Set<DiscreteResource> oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
@@ -81,7 +81,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean removeValues(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean unregister(DiscreteResourceId key, List<DiscreteResource> values) {
         Set<DiscreteResource> oldValues = childMap.putIfAbsent(key, new LinkedHashSet<>());
         if (oldValues == null) {
             log.trace("No-Op removing values. key {} did not exist", key);
