diff --git a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
index 9aa5c12..cd738cd 100644
--- a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
+++ b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
@@ -39,6 +39,7 @@
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
 import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.net.device.DefaultDeviceDescription;
 import org.onosproject.net.device.DeviceDescription;
@@ -109,7 +110,8 @@
     protected static final String REST = "rest";
     private static final String PROVIDER = "org.onosproject.provider.rest.device";
     private static final String IPADDRESS = "ipaddress";
-    private static final String ISNOTNULL = "Rest device is not null";
+    private static final String DEVICENULL = "Rest device is null";
+    private static final String DRIVERNULL = "Driver is null";
     private static final String UNKNOWN = "unknown";
     private static final int REST_TIMEOUT_SEC = 5;
     private static final int EXECUTOR_THREAD_POOL_SIZE = 8;
@@ -238,7 +240,7 @@
     @Override
     public boolean isReachable(DeviceId deviceId) {
         RestSBDevice restDevice = controller.getDevice(deviceId);
-        return restDevice != null ? restDevice.isActive() : false;
+        return restDevice != null && restDevice.isActive();
     }
 
     private ScheduledFuture scheduleDevicePolling() {
@@ -268,9 +270,8 @@
 
     private DeviceDescription getDesc(RestSBDevice restSBDev) {
         DeviceId deviceId = restSBDev.deviceId();
-        Driver driver = driverService.getDriver(restSBDev.manufacturer().get(),
-                restSBDev.hwVersion().get(),
-                restSBDev.swVersion().get());
+
+        Driver driver = getDriver(restSBDev);
 
         if (restSBDev.isProxy()) {
             if (driver != null && driver.hasBehaviour(DevicesDiscovery.class)) {
@@ -317,15 +318,13 @@
     }
 
     private void deviceAdded(RestSBDevice restSBDev) {
-        checkNotNull(restSBDev, ISNOTNULL);
+        checkNotNull(restSBDev, DEVICENULL);
 
-        Driver driver = driverService.getDriver(restSBDev.manufacturer().get(),
-                                             restSBDev.hwVersion().get(),
-                                             restSBDev.swVersion().get());
+        Driver driver = getDriver(restSBDev);
 
         // Check if the server is controlling a single or multiple devices
         if (restSBDev.isProxy()) {
-            if (driver != null && driver.hasBehaviour(DevicesDiscovery.class)) {
+            if (driver.hasBehaviour(DevicesDiscovery.class)) {
                 DevicesDiscovery devicesDiscovery = devicesDiscovery(restSBDev, driver);
                 Set<DeviceId> deviceIds = devicesDiscovery.deviceIds();
                 restSBDev.setActive(true);
@@ -344,7 +343,7 @@
                     checkAndUpdateDevice(deviceId);
                 });
             } else {
-                log.warn("Driver not found for {}", restSBDev);
+                log.warn("Device is proxy but driver does not have proxy discovery behaviour {}", restSBDev);
             }
         } else {
             DeviceId deviceId = restSBDev.deviceId();
@@ -370,6 +369,21 @@
         }
     }
 
+    private Driver getDriver(RestSBDevice restSBDev) {
+        String driverName = netCfgService.getConfig(restSBDev.deviceId(), BasicDeviceConfig.class).driver();
+
+        Driver driver = driverService.getDriver(driverName);
+
+        if (driver == null) {
+            driver = driverService.getDriver(restSBDev.manufacturer().get(),
+                    restSBDev.hwVersion().get(),
+                    restSBDev.swVersion().get());
+        }
+
+        checkNotNull(driver, DRIVERNULL);
+        return driver;
+    }
+
     private DefaultDeviceDescription mergeAnn(DeviceId devId, DeviceDescription desc) {
         return new DefaultDeviceDescription(
                 desc,
@@ -434,7 +448,7 @@
     }
 
     private void deviceRemoved(DeviceId deviceId) {
-        checkNotNull(deviceId, ISNOTNULL);
+        checkNotNull(deviceId, DEVICENULL);
         log.debug("Device removed called for {}", deviceId);
         providerService.deviceDisconnected(deviceId);
         controller.getProxiedDevices(deviceId).forEach(device -> {
