diff --git a/core/store/dist/src/main/java/org/onosproject/store/region/impl/DistributedRegionStore.java b/core/store/dist/src/main/java/org/onosproject/store/region/impl/DistributedRegionStore.java
index 6d70376..e00af16 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/region/impl/DistributedRegionStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/region/impl/DistributedRegionStore.java
@@ -26,6 +26,7 @@
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.util.Identifier;
 import org.onosproject.cluster.NodeId;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.region.DefaultRegion;
 import org.onosproject.net.region.Region;
@@ -90,7 +91,7 @@
     protected void activate() {
         Serializer serializer =
                 Serializer.using(Arrays.asList(KryoNamespaces.API),
-                                 Identifier.class);
+                        Identifier.class);
 
         regionsRepo = storageService.<RegionId, Region>consistentMapBuilder()
                 .withSerializer(serializer)
@@ -141,19 +142,19 @@
 
     @Override
     public Region createRegion(RegionId regionId, String name, Region.Type type,
-                               List<Set<NodeId>> masterNodeIds) {
+                               Annotations annots, List<Set<NodeId>> masterNodeIds) {
         return regionsRepo.compute(regionId, (id, region) -> {
             checkArgument(region == null, DUPLICATE_REGION);
-            return new DefaultRegion(regionId, name, type, masterNodeIds);
+            return new DefaultRegion(regionId, name, type, annots, masterNodeIds);
         }).value();
     }
 
     @Override
     public Region updateRegion(RegionId regionId, String name, Region.Type type,
-                               List<Set<NodeId>> masterNodeIds) {
+                               Annotations annots, List<Set<NodeId>> masterNodeIds) {
         return regionsRepo.compute(regionId, (id, region) -> {
             nullIsNotFound(region, NO_REGION);
-            return new DefaultRegion(regionId, name, type, masterNodeIds);
+            return new DefaultRegion(regionId, name, type, annots, masterNodeIds);
         }).value();
     }
 
@@ -165,8 +166,9 @@
 
     @Override
     public void addDevices(RegionId regionId, Collection<DeviceId> deviceIds) {
-        // Devices can only be a member in one region.  Remove the device if it belongs to
-        // a different region than the region for which we are attempting to add it.
+        // Devices can only be a member in one region.  Remove the device if it
+        // belongs to a different region than the region for which we are
+        // attempting to add it.
         for (DeviceId deviceId : deviceIds) {
             Region region = getRegionForDevice(deviceId);
             if ((region != null) && (!regionId.id().equals(region.id().id()))) {
@@ -200,7 +202,7 @@
             } else {
                 return ImmutableSet.<DeviceId>builder()
                         .addAll(Sets.difference(existingDevices,
-                                                ImmutableSet.copyOf(deviceIds)))
+                                ImmutableSet.copyOf(deviceIds)))
                         .build();
             }
         });
@@ -211,7 +213,8 @@
     /**
      * Listener class to map listener events to the region inventory events.
      */
-    private class InternalRegionListener implements MapEventListener<RegionId, Region> {
+    private class InternalRegionListener
+            implements MapEventListener<RegionId, Region> {
         @Override
         public void event(MapEvent<RegionId, Region> event) {
             Region region = null;
@@ -239,13 +242,14 @@
     /**
      * Listener class to map listener events to the region membership events.
      */
-    private class InternalMembershipListener implements MapEventListener<RegionId, Set<DeviceId>> {
+    private class InternalMembershipListener
+            implements MapEventListener<RegionId, Set<DeviceId>> {
         @Override
         public void event(MapEvent<RegionId, Set<DeviceId>> event) {
             if (event.type() != MapEvent.Type.REMOVE) {
                 notifyDelegate(new RegionEvent(REGION_MEMBERSHIP_CHANGED,
-                                               regionsById.get(event.key()),
-                                               event.newValue().value()));
+                        regionsById.get(event.key()),
+                        event.newValue().value()));
             }
         }
     }
