diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java
index 5e3a442..856476b 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java
+++ b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java
@@ -26,7 +26,6 @@
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
 import org.onosproject.net.behaviour.PortDiscovery;
 import org.onosproject.net.device.OduCltPortDescription;
 import org.onosproject.net.device.PortDescription;
@@ -53,6 +52,8 @@
     private static final String EMPTY_STRING = "";
     private static final String NAME = "name";
     private static final String ADMIN_STATE = "admin-state";
+    private static final String LINESIDE_NAME = "lineside";
+    private static final String CLIENTSIDE_NAME = "clientside";
 
     private static final ArrayList<String> LINESIDE_PORT_ID = Lists.newArrayList(
             "4", "48");
@@ -85,9 +86,10 @@
         portsConfig.stream().forEach(sub -> {
             String portId = sub.getString(PORT_ID);
             String name = sub.getString(NAME);
-            SparseAnnotations annotations = DefaultAnnotations.builder()
-                    .set(AnnotationKeys.NAME, name).build();
+            DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
+                    .set(AnnotationKeys.NAME, name);
             if (LINESIDE_PORT_ID.contains(portId)) {
+                annotations.set(AnnotationKeys.PORT_NAME, LINESIDE_NAME);
                 String wsportInfoRequest = SPECIFIC_PORT_PATH + portId +
                         SPECIFIC_PORT_CONFIG;
                 ports.add(XmlConfigParser.parseWaveServerCienaOchPorts(
@@ -95,17 +97,17 @@
                         toGbps(Long.parseLong(sub.getString(SPEED).replace(GBPS, EMPTY_STRING)
                                                       .replace(" ", EMPTY_STRING))),
                         XmlConfigParser.loadXml(controller.get(deviceId, wsportInfoRequest, XML)),
-                        annotations));
+                        annotations.build()));
                 //adding corresponding opposite side port
                 ports.add(XmlConfigParser.parseWaveServerCienaOchPorts(
                         sub.getLong(PORT_ID) + 1,
                         toGbps(Long.parseLong(sub.getString(SPEED).replace(GBPS, EMPTY_STRING)
                                                       .replace(" ", EMPTY_STRING))),
                         XmlConfigParser.loadXml(controller.get(deviceId, wsportInfoRequest, XML)),
-                        DefaultAnnotations.builder()
-                                .set(AnnotationKeys.NAME, name.replace(".1", ".2"))
+                        annotations.set(AnnotationKeys.NAME, name.replace(".1", ".2"))
                                 .build()));
             } else if (!portId.equals("5") && !portId.equals("49")) {
+                annotations.set(AnnotationKeys.PORT_NAME, CLIENTSIDE_NAME);
                 //FIXME change when all optical types have two way information methods, see jira tickets
                 final int speed100GbpsinMbps = 100000;
                 CltSignalType cltType = toGbps(Long.parseLong(
@@ -114,7 +116,7 @@
                         CltSignalType.CLT_100GBE : null;
                 ports.add(new OduCltPortDescription(PortNumber.portNumber(sub.getLong(PORT_ID)),
                                                     sub.getString(ADMIN_STATE).equals(ENABLED),
-                                                    cltType, annotations));
+                                                    cltType, annotations.build()));
             }
         });
         return ports;
diff --git a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/DefaultRestSBDevice.java b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/DefaultRestSBDevice.java
index 57da2e5..7ea3dd5 100644
--- a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/DefaultRestSBDevice.java
+++ b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/DefaultRestSBDevice.java
@@ -34,7 +34,7 @@
     private static final String COLON = ":";
     private final IpAddress ip;
     private final int port;
-    private final String name;
+    private final String username;
     private final String password;
     private boolean isActive;
     private String protocol;
@@ -47,7 +47,7 @@
         Preconditions.checkNotNull(protocol, "protocol address cannot be null");
         this.ip = ip;
         this.port = port;
-        this.name = name;
+        this.username = name;
         this.password = StringUtils.isEmpty(password) ? null : password;
         this.isActive = isActive;
         this.protocol = protocol;
@@ -65,8 +65,8 @@
     }
 
     @Override
-    public String name() {
-        return name;
+    public String username() {
+        return username;
     }
 
     @Override
@@ -110,7 +110,7 @@
         return MoreObjects.toStringHelper(this)
                 .add("url", url)
                 .add("protocol", protocol)
-                .add("name", name)
+                .add("username", username)
                 .add("port", port)
                 .add("ip", ip)
                 .toString();
@@ -125,7 +125,7 @@
             return false;
         }
         RestSBDevice device = (RestSBDevice) obj;
-        return this.name.equals(device.name()) && this.ip.equals(device.ip()) &&
+        return this.username.equals(device.username()) && this.ip.equals(device.ip()) &&
                 this.port == device.port();
 
     }
diff --git a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBDevice.java b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBDevice.java
index abef64e..81860f3 100644
--- a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBDevice.java
+++ b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBDevice.java
@@ -38,11 +38,11 @@
     int port();
 
     /**
-     * Returns the name of this device.
+     * Returns the username of this device.
      *
-     * @return name
+     * @return username
      */
-    String name();
+    String username();
 
     /**
      * Returns the password of this device.
diff --git a/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java b/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java
index 0542dec..8adde28 100644
--- a/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java
+++ b/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java
@@ -182,8 +182,9 @@
         try {
             log.debug("Url request {} ", getUrlString(device, request));
             HttpPatch httprequest = new HttpPatch(getUrlString(device, request));
-            if (deviceMap.get(device).password() != null) {
-                String userPassword = deviceMap.get(device).name() + COLON + deviceMap.get(device).password();
+            if (deviceMap.get(device).username() != null) {
+                String pwd = deviceMap.get(device).password() == null ? "" : COLON + deviceMap.get(device).password();
+                String userPassword = deviceMap.get(device).username() + pwd;
                 String base64string = Base64.getEncoder().encodeToString(userPassword.getBytes(StandardCharsets.UTF_8));
                 httprequest.addHeader(AUTHORIZATION_PROPERTY, BASIC_AUTH_PREFIX + base64string);
             }
@@ -232,9 +233,10 @@
     private WebResource getWebResource(DeviceId device, String request) {
         log.debug("Sending request to URL {} ", getUrlString(device, request));
         WebResource webResource = client.resource(getUrlString(device, request));
-        if (deviceMap.containsKey(device) && deviceMap.get(device).password() != null) {
-            client.addFilter(new HTTPBasicAuthFilter(deviceMap.get(device).name(),
-                                                     deviceMap.get(device).password()));
+        if (deviceMap.containsKey(device) && deviceMap.get(device).username() != null) {
+            client.addFilter(new HTTPBasicAuthFilter(deviceMap.get(device).username(),
+                                                     deviceMap.get(device).password() == null ?
+                                                             "" : deviceMap.get(device).password()));
         }
         return webResource;
     }
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 18c376b..55e2fb8 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
@@ -59,7 +59,10 @@
 import java.util.Base64;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
+import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
 import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UPDATED;
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
@@ -102,6 +105,9 @@
     protected static final String ISNOTNULL = "Rest device is not null";
     private static final String UNKNOWN = "unknown";
 
+    private final ExecutorService executor =
+            Executors.newFixedThreadPool(5, groupedThreads("onos/restsbprovider", "device-installer-%d"));
+
     private final ConfigFactory factory =
             new ConfigFactory<ApplicationId, RestProviderConfig>(APP_SUBJECT_FACTORY,
                                                                  RestProviderConfig.class,
@@ -115,6 +121,8 @@
     private final NetworkConfigListener cfgLister = new InternalNetworkConfigListener();
     private ApplicationId appId;
 
+    private Set<DeviceId> addedDevices = new HashSet<>();
+
 
     @Activate
     public void activate() {
@@ -156,9 +164,9 @@
     public boolean isReachable(DeviceId deviceId) {
         RestSBDevice restDevice = controller.getDevice(deviceId);
         if (restDevice == null) {
-            log.warn("BAD REQUEST: the requested device id: " +
-                             deviceId.toString() +
-                             "  is not associated to any REST Device");
+            log.debug("the requested device id: " +
+                              deviceId.toString() +
+                              "  is not associated to any REST Device");
             return false;
         }
         return restDevice.isActive();
@@ -181,6 +189,7 @@
         providerService.deviceConnected(deviceId, deviceDescription);
         nodeId.setActive(true);
         controller.addDevice(nodeId);
+        addedDevices.add(deviceId);
     }
 
     //when do I call it ?
@@ -212,7 +221,7 @@
             log.error("Configuration error {}", e);
         }
         log.debug("REST Devices {}", controller.getDevices());
-        controller.getDevices().keySet().forEach(deviceId -> {
+        addedDevices.forEach(deviceId -> {
             DriverHandler h = driverService.createHandler(deviceId);
             PortDiscovery portConfig = h.behaviour(PortDiscovery.class);
             if (portConfig != null) {
@@ -221,6 +230,8 @@
                 log.warn("No portGetter behaviour for device {}", deviceId);
             }
         });
+        addedDevices.clear();
+
     }
 
     private boolean testDeviceConnection(RestSBDevice device) {
@@ -240,8 +251,9 @@
             } else {
                 urlConn = (HttpURLConnection) url.openConnection();
             }
-            if (device.password() != null) {
-                String userPassword = device.name() + ":" + device.password();
+            if (device.username() != null) {
+                String pwd = device.password() == null ? "" : ":" + device.password();
+                String userPassword = device.username() + pwd;
                 String basicAuth = Base64.getEncoder()
                         .encodeToString(userPassword.getBytes(StandardCharsets.UTF_8));
                 urlConn.setRequestProperty(AUTHORIZATION_PROPERTY, BASIC_AUTH_PREFIX + basicAuth);
@@ -267,7 +279,7 @@
 
         @Override
         public void event(NetworkConfigEvent event) {
-            connectDevices();
+            executor.submit(RestDeviceProvider.this::connectDevices);
         }
 
         @Override
diff --git a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestProviderConfig.java b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestProviderConfig.java
index 3671922..558a158 100644
--- a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestProviderConfig.java
+++ b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestProviderConfig.java
@@ -39,7 +39,7 @@
     private static final String IP = "ip";
     private static final int DEFAULT_HTTP_PORT = 80;
     private static final String PORT = "port";
-    private static final String NAME = "name";
+    private static final String USERNAME = "username";
     private static final String PASSWORD = "password";
     private static final String PROTOCOL = "protocol";
     private static final String URL = "url";
@@ -52,11 +52,11 @@
                 String ip = node.path(IP).asText();
                 IpAddress ipAddr = ip.isEmpty() ? null : IpAddress.valueOf(ip);
                 int port = node.path(PORT).asInt(DEFAULT_HTTP_PORT);
-                String name = node.path(NAME).asText();
+                String username = node.path(USERNAME).asText();
                 String password = node.path(PASSWORD).asText();
                 String protocol = node.path(PROTOCOL).asText();
                 String url = node.path(URL).asText();
-                devicesAddresses.add(new DefaultRestSBDevice(ipAddr, port, name,
+                devicesAddresses.add(new DefaultRestSBDevice(ipAddr, port, username,
                                                              password, protocol,
                                                              url, false));
 
