diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
index e277d7e..fc53137 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
@@ -18,6 +18,7 @@
 
 
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceDescription;
@@ -25,7 +26,6 @@
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
 
 import java.io.ByteArrayInputStream;
@@ -33,7 +33,6 @@
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_IF_INFO;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_MAC_ADD_INFO;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_SYS_INFO;
@@ -52,19 +51,20 @@
 
     @Override
     public DeviceDescription discoverDeviceDetails() {
-        DeviceId deviceId = handler().data().deviceId();
+        DeviceId devId = handler().data().deviceId();
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(deviceId).getSession();
+        NetconfSession session = controller.getDevicesMap().get(devId).getSession();
         String sysInfo;
         String chassis;
         try {
             sysInfo = session.get(requestBuilder(REQ_SYS_INFO));
             chassis = session.get(requestBuilder(REQ_MAC_ADD_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve device details for {}", devId);
+            return null;
         }
         DeviceDescription description =
-                JuniperUtils.parseJuniperDescription(deviceId, XmlConfigParser.
+                JuniperUtils.parseJuniperDescription(devId, XmlConfigParser.
                         loadXml(new ByteArrayInputStream(sysInfo.getBytes())), chassis);
         log.debug("Device  description {}", description);
         return description;
@@ -72,13 +72,15 @@
 
     @Override
     public List<PortDescription> discoverPortDetails() {
+        DeviceId devId = handler().data().deviceId();
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
+        NetconfSession session = controller.getDevicesMap().get(devId).getSession();
         String reply;
         try {
             reply = session.get(requestBuilder(REQ_IF_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve ports for device {}", devId);
+            return ImmutableList.of();
         }
         List<PortDescription> descriptions =
                 JuniperUtils.parseJuniperPorts(XmlConfigParser.
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
index 7d771cb..d6a1918 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
@@ -64,7 +64,8 @@
     public static final String REQ_IF_INFO = "<get-interface-information/>";
 
     //helper strings for parsing
-    private static final String LLDP_NBR_INFO = "lldp-neighbors-information";
+    private static final String LLDP_LIST_NBR_INFO = "lldp-neighbors-information";
+    private static final String LLDP_NBR_INFO = "lldp-neighbor-information";
     private static final String SYS_INFO = "system-information";
     private static final String HW_MODEL = "hardware-model";
     private static final String OS_NAME = "os-name";
@@ -230,7 +231,7 @@
                 .set("index", index);
         setIpIfPresent(cfg, annotationsBuilder);
 
-        PortNumber portNumber = portNumberFromName(cfg.getString(IF_LO_INDEX), name);
+        PortNumber portNumber = PortNumber.portNumber(index);
 
         boolean enabled = false;
         if (cfg.getString(IF_LO_STATUS) != null) {
@@ -245,18 +246,6 @@
                 annotationsBuilder.build());
     }
 
-    private static PortNumber portNumberFromName(String ifIndex, String name) {
-        PortNumber portNumber = portNumber(ifIndex);
-        if (name.contains("-")) {
-            String[] splitted = name.split("-");
-            String typeInt = "[" + splitted[0] + "]";
-            String number = splitted[1].replace("/", "");
-            number = "(" + number + ")";
-            portNumber = PortNumber.fromString(typeInt + number);
-        }
-        return portNumber;
-    }
-
     private static void setIpIfPresent(HierarchicalConfiguration cfg,
                                        Builder annotationsBuilder) {
         String ip = cfg.getString(IF_LO_ADD);
@@ -302,7 +291,7 @@
     public static Set<LinkAbstraction> parseJuniperLldp(HierarchicalConfiguration info) {
         Set<LinkAbstraction> neighbour = new HashSet<>();
         List<HierarchicalConfiguration> subtrees =
-                info.configurationsAt(LLDP_NBR_INFO);
+                info.configurationsAt(LLDP_LIST_NBR_INFO);
         for (HierarchicalConfiguration neighborsInfo : subtrees) {
             List<HierarchicalConfiguration> neighbors =
                     neighborsInfo.configurationsAt(LLDP_NBR_INFO);
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
index ba346d5..2b99faa 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
@@ -16,9 +16,8 @@
 
 package org.onosproject.drivers.juniper;
 
-//import com.google.common.base.Optional;
-
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.Device;
@@ -29,7 +28,6 @@
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.link.LinkDescription;
 import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
 import org.slf4j.Logger;
 
@@ -45,7 +43,6 @@
 import static org.onosproject.drivers.juniper.JuniperUtils.requestBuilder;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_LLDP_NBR_INFO;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
 import static org.slf4j.LoggerFactory.getLogger;
 
 
@@ -71,7 +68,8 @@
         try {
             reply = session.get(requestBuilder(REQ_LLDP_NBR_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve ports for device {}", localDeviceId);
+            return ImmutableSet.of();
         }
         log.debug("Reply from device {} : {}", localDeviceId, reply);
         Set<LinkAbstraction> linkAbstractions = parseJuniperLldp(
