diff --git a/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java b/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
index 7c97ecd..115412c 100644
--- a/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
+++ b/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
@@ -218,6 +218,34 @@
         }
 
         /**
+         * Adds all specified annotation. Any previous value associated with
+         * the given annotations will be overwritten.
+         *
+         * @param base annotations
+         * @return self
+         */
+        public Builder putAll(Annotations base) {
+            if (base instanceof DefaultAnnotations) {
+                builder.putAll(((DefaultAnnotations) base).map);
+
+            } else if (base instanceof SparseAnnotations) {
+                final SparseAnnotations sparse = (SparseAnnotations) base;
+                for (String key : base.keys()) {
+                    if (sparse.isRemoved(key)) {
+                        remove(key);
+                    } else {
+                        set(key, base.value(key));
+                    }
+                }
+
+            } else {
+                base.keys().forEach(key -> set(key, base.value(key)));
+
+            }
+            return this;
+        }
+
+        /**
          * Adds the specified annotation. Any previous value associated with
          * the given annotation key will be overwritten.
          *
