diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
index 4af8000..c10b7e8 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
@@ -17,6 +17,7 @@
 
 import static org.slf4j.LoggerFactory.getLogger;
 
+import org.onosproject.incubator.net.config.ConfigOperator;
 import org.onosproject.incubator.net.config.basics.BasicDeviceConfig;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.DefaultAnnotations;
@@ -30,7 +31,7 @@
  * Implementations of merge policies for various sources of device configuration
  * information. This includes applications, provides, and network configurations.
  */
-public final class BasicDeviceOperator {
+public final class BasicDeviceOperator implements ConfigOperator {
 
     protected static final double DEFAULT_COORD = -1.0;
     private static final Logger log = getLogger(BasicDeviceOperator.class);
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index b1390d1..01f85d8 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -37,14 +37,12 @@
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.mastership.MastershipTerm;
 import org.onosproject.mastership.MastershipTermService;
-import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.Device;
 import org.onosproject.net.Device.Type;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
 import org.onosproject.net.device.DefaultDeviceDescription;
 import org.onosproject.net.device.DefaultPortDescription;
 import org.onosproject.net.device.DeviceAdminService;
@@ -334,17 +332,8 @@
             BasicDeviceConfig cfg = networkConfigService.getConfig(deviceId, BasicDeviceConfig.class);
             checkState(cfg == null || cfg.isAllowed(), "Device " + deviceId + " is not allowed");
             log.info("Device {} connected", deviceId);
-            if (cfg != null) {
-                SparseAnnotations finalSparse = processAnnotations(cfg, deviceDescription, deviceId);
-                if (cfg.type() != Type.SWITCH) {
-                    deviceDescription = new DefaultDeviceDescription(deviceDescription,
-                                                                     cfg.type(), finalSparse);
-                } else {
-                    deviceDescription = new DefaultDeviceDescription(deviceDescription,
-                                                                     deviceDescription.type(), finalSparse);
-                }
-            }
-            return deviceDescription;
+
+            return BasicDeviceOperator.combine(cfg, deviceDescription);
         }
 
         @Override
@@ -500,37 +489,6 @@
                                                            deviceId, portStatistics);
             post(event);
         }
-
-        // supplements or replaces deviceDescription annotations with
-        // BasicDeviceConfig annotations
-        private SparseAnnotations processAnnotations(BasicDeviceConfig cfg, DeviceDescription deviceDescription,
-                                                     DeviceId deviceId) {
-            SparseAnnotations originalAnnotations = deviceDescription.annotations();
-            DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
-            if (cfg.driver() != deviceId.toString()) {
-                newBuilder.set(cfg.DRIVER, cfg.driver());
-            }
-            if (cfg.type() != Type.SWITCH) {
-                newBuilder.set(cfg.TYPE, cfg.type().toString());
-            }
-            if (cfg.name() != null) {
-                newBuilder.set(cfg.NAME, cfg.name());
-            }
-            if (cfg.latitude() != -1) {
-                newBuilder.set(cfg.LATITUDE, Double.toString(cfg.latitude()));
-            }
-            if (cfg.longitude() != -1) {
-                newBuilder.set(cfg.LONGITUDE, Double.toString(cfg.longitude()));
-            }
-            if (cfg.rackAddress() != null) {
-                newBuilder.set(cfg.RACK_ADDRESS, cfg.rackAddress());
-            }
-            if (cfg.owner() != null) {
-                newBuilder.set(cfg.OWNER, cfg.owner());
-            }
-            DefaultAnnotations newAnnotations = newBuilder.build();
-            return DefaultAnnotations.union(originalAnnotations, newAnnotations);
-        }
     }
 
     // Applies the specified role to the device; ignores NONE
