diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
index fe26d72..1d29f13 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
@@ -76,6 +76,10 @@
         Set<Criterion> criteria = rule.selector().criteria();
         List<Instruction> instructions = rule.treatment().immediate();
 
+        log.debug("Lumentum device received criteria {} - treatment {}",
+                criteria,
+                instructions);
+
         // Proper cross connect has criteria for input port, OChSignal and OCh signal type.
         // Instruction is only output to port (rule generated by ROADM app).
         // Instruction includes output port and OChSignal (rule generated by OpticalConnectivityIntent).
@@ -103,11 +107,11 @@
         );
 
         if (criteria.size() == NUM_CRITERIA_INTENT && instructions.size() == NUM_INSTRUCTIONS_INTENT) {
-            log.info("Lumentum device, FlowRule coming from OpticalConnectivityIntentCompiler");
+            log.debug("Lumentum device, FlowRule coming from OpticalConnectivityIntentCompiler");
 
             type = Type.OPTICAL_CONNECTIVITY_INTENT_RULE;
         } else {
-            log.info("Lumentum device, FlowRule coming from ROADM app");
+            log.debug("Lumentum device, FlowRule coming from ROADM app");
 
             type = Type.ROADM_APP_RULE;
         }
@@ -118,6 +122,9 @@
                 .findAny()
                 .orElse(null);
 
+        checkArgument(ochSignal.slotGranularity() == 4 || ochSignal.slotGranularity() == 8,
+        "Lumentum device, only supports 50 GHz and 100 GHz frequency slots");
+
         inputPort = criteria.stream()
                 .filter(c -> c instanceof PortCriterion)
                 .map(c -> ((PortCriterion) c).port())
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
index df656c9..6b8fdf1 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
@@ -57,6 +57,11 @@
 
 /**
  * Device description behaviour for Lumentum ROADM-A Whitebox devices using NETCONF.
+ *
+ * Tested on device Lumentum:ROADM with Twin 1X20 WSS
+ * Software versions:
+ * - dcian_R3.1.2_057
+ * - dcian_R2.1.4_136
  */
 public class LumentumNetconfRoadmDiscovery
         extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
@@ -237,11 +242,14 @@
             Port.Type type = null;
             for (Object o : pcfg.getList(PORT_EXTENSION)) {
                 String s = (String) o;
-                if (s.equals(OPTICAL_INPUT) || s.equals(OPTICAL_OUTPUT)) {
+                if (s.contains(OPTICAL_INPUT) || s.contains(OPTICAL_OUTPUT)) {
                     type = Port.Type.FIBER;
+                    log.debug("Loaded OPTICAL port {}", portNum);
 
-                } else if (s.equals(PORT_ETHERNET) || s.equals(PORT_PLUGGABLE)) {
+                } else if (s.contains(PORT_ETHERNET) || s.contains(PORT_PLUGGABLE)) {
                     type = Port.Type.COPPER;
+                    log.debug("Loaded PACKET port {}", portNum);
+
                 }
             }
 
@@ -250,9 +258,18 @@
             if (type != null) {
                 if (type.equals(Port.Type.COPPER)) {
                     String speedString = pcfg.getString(PORT_SPEED);
+                    log.debug("--- port {} loaded speed {}", portNum, speedString);
                     if (speedString != null) {
-                        speed = Long.parseLong(speedString.substring(speedString.lastIndexOf("speed_") + 6,
-                                speedString.lastIndexOf("Mb")));
+                        if (speedString.contains("Mb")) {
+                            speed = Long.parseLong(speedString.substring(
+                                    speedString.lastIndexOf("speed_") + 6,
+                                    speedString.lastIndexOf("Mb")));
+                        }
+                        if (speedString.contains("Gb")) {
+                            speed = 1000 * Long.parseLong(speedString.substring(
+                                    speedString.lastIndexOf("speed_") + 6,
+                                    speedString.lastIndexOf("Gb")));
+                        }
                     } else {
                         log.error("Lumentum NETCONF - Port speed of Ethernet port not correctly loaded");
                     }
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
index 57cc025..1fe8148 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
@@ -130,6 +130,7 @@
             if (rpcAddConnection(lumFlowRule)) {
                 added.add(lumFlowRule);
                 getConnectionCache().add(did(), lumFlowRule.getConnectionName(), lumFlowRule);
+                log.debug("Adding connection with selector {}", lumFlowRule.selector());
             }
         }
 
@@ -273,6 +274,7 @@
                 .build();
 
         log.debug("Lumentum NETCONF - retrieved FlowRule startFreq {} endFreq {}", startFreq, endFreq);
+        log.debug("Lumentum NETCONF - retrieved FlowRule selector {}", selector);
 
         //Lookup of connection
         //Retrieved rules, cached rules are considered equal if the selector is equal
@@ -287,7 +289,7 @@
 
         if (cacheRule == null) {
             //TODO consider a way to keep "external" FlowRules
-            log.error("Lumentum NETCONF connection not in the cache {}", pair.getRight());
+            log.error("Lumentum NETCONF connection {} not in the cache", pair.getRight());
             rpcDeleteExternalConnection(moduleId, connId);
             return null;
         } else {
@@ -491,7 +493,7 @@
         try {
             return session.editConfig(xcString);
         } catch (NetconfException e) {
-            log.error("Failed to edit the CrossConnect edid-cfg for device {}",
+            log.error("Failed to edit the CrossConnect edit-cfg for device {}",
                       handler().data().deviceId(), e);
             log.debug("Failed configuration {}", xcString);
             return false;
