diff --git a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
index b2b5281..23d1047 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
@@ -45,19 +45,17 @@
     }
 
     /**
-     * Adds the specified driver to the provider.
+     * Adds the specified driver to the provider. If a driver with the same
+     * does not exist yet, the specified one will be added. Otherwise, the
+     * existing driver will be merged with the new one and the result will be
+     * registered.
      *
      * @param driver driver to be provided
+     * @return registered driver
      */
-    public void addDriver(Driver driver) {
-        Driver ddc = drivers.get(driver.name());
-        if (ddc == null) {
-            // If we don't have the driver yet, just use the new one.
-            drivers.put(driver.name(), driver);
-        } else {
-            // Otherwise merge the existing driver with the new one and rebind.
-            drivers.put(driver.name(), ddc.merge(driver));
-        }
+    public Driver addDriver(Driver driver) {
+        return drivers.compute(driver.name(), (name, oldDriver) ->
+                oldDriver == null ? driver : oldDriver.merge(driver));
     }
 
     /**
diff --git a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
index c793ca4..72492db 100644
--- a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
+++ b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
@@ -89,10 +89,10 @@
     @Override
     public void registerProvider(DriverProvider provider) {
         provider.getDrivers().forEach(driver -> {
-            addDrivers(provider.getDrivers());
+            Driver d = addDriver(driver);
             driverByKey.put(key(driver.manufacturer(),
                                 driver.hwVersion(),
-                                driver.swVersion()), driver);
+                                driver.swVersion()), d);
         });
         providers.add(provider);
     }
@@ -100,7 +100,7 @@
     @Override
     public void unregisterProvider(DriverProvider provider) {
         provider.getDrivers().forEach(driver -> {
-            removeDrivers(provider.getDrivers());
+            removeDriver(driver);
             driverByKey.remove(key(driver.manufacturer(),
                                    driver.hwVersion(),
                                    driver.swVersion()));
@@ -111,7 +111,6 @@
     @Override
     public Set<Driver> getDrivers() {
         checkPermission(DRIVER_READ);
-
         ImmutableSet.Builder<Driver> builder = ImmutableSet.builder();
         drivers.values().forEach(builder::add);
         return builder.build();
@@ -120,7 +119,6 @@
     @Override
     public Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour) {
         checkPermission(DRIVER_READ);
-
         return drivers.values().stream()
                 .filter(d -> d.hasBehaviour(withBehaviour))
                 .collect(Collectors.toSet());
@@ -129,7 +127,6 @@
     @Override
     public Driver getDriver(String driverName) {
         checkPermission(DRIVER_READ);
-
         return nullIsNotFound(drivers.get(driverName), NO_DRIVER);
     }
 
@@ -182,7 +179,6 @@
     @Override
     public DriverHandler createHandler(DeviceId deviceId, String... credentials) {
         checkPermission(DRIVER_WRITE);
-
         Driver driver = getDriver(deviceId);
         return new DefaultDriverHandler(new DefaultDriverData(driver, deviceId));
     }
