diff --git a/drivers/ciena/src/main/resources/ciena-drivers.xml b/drivers/ciena/src/main/resources/ciena-drivers.xml
index ff65d82..b1334d4 100644
--- a/drivers/ciena/src/main/resources/ciena-drivers.xml
+++ b/drivers/ciena/src/main/resources/ciena-drivers.xml
@@ -15,11 +15,14 @@
   ~ limitations under the License.
   -->
 <drivers>
+    <!-- Waveserver supports flex grid, although this driver only enables 50 GHz fixed grid. -->
     <driver name="restCiena" manufacturer="Ciena" hwVersion="1.0.0" swVersion="1.0.0">
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
         <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
                    impl="org.onosproject.drivers.ciena.CienaWaveserverDeviceDescription"/>
+        <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
+                   impl="org.onosproject.driver.optical.query.CBand50LambdaQuery"/>
     </driver>
 </drivers>
 
diff --git a/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml b/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
index 233560c..620911c 100644
--- a/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
+++ b/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
@@ -15,11 +15,15 @@
   ~ limitations under the License.
   -->
 <drivers>
+    <!-- T100 supports 96 (50 GHz) or 128 (37.5 GHz) C-band channels,
+     although this driver only enables 80 50 GHz channels. -->
     <driver name="fujitsu-netconf" manufacturer="Fujitsu" hwVersion="T100" swVersion="01-01-X">
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
         <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
                    impl="org.onosproject.drivers.fujitsu.FujitsuT100DeviceDescription"/>
+        <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
+                   impl="org.onosproject.driver.optical.query.CBand50LambdaQuery"/>
     </driver>
     <driver name="fujitsu-volt-netconf" manufacturer="Fujitsu" hwVersion="svkOLT" swVersion="v1.0">
         <behaviour api="org.onosproject.net.behaviour.ControllerConfig"
diff --git a/drivers/lumentum/src/main/resources/lumentum-drivers.xml b/drivers/lumentum/src/main/resources/lumentum-drivers.xml
index d8ec9cd..628ee7e 100644
--- a/drivers/lumentum/src/main/resources/lumentum-drivers.xml
+++ b/drivers/lumentum/src/main/resources/lumentum-drivers.xml
@@ -34,7 +34,8 @@
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
         <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
                    impl="org.onosproject.driver.optical.config.ConfigFlowRuleProgrammable"/>
-
+        <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
+                   impl="org.onosproject.driver.optical.query.CBand50LambdaQuery"/>
     </driver>
 </drivers>
 
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand100LambdaQuery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand100LambdaQuery.java
new file mode 100644
index 0000000..5ead68f
--- /dev/null
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand100LambdaQuery.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.driver.optical.query;
+
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+
+import java.util.Set;
+
+/**
+ * C-band DWDM channel plan for 100 GHz fixed grid and centered around 193.1 GHz.
+ *
+ * This supports up to 40 optical channels.
+ */
+public class CBand100LambdaQuery extends CBandLambdaQuery {
+    @Override
+    public Set<OchSignal> queryLambdas(PortNumber port) {
+        channelSpacing = ChannelSpacing.CHL_100GHZ;
+        lambdaCount = 40;
+        slotGranularity = 8;
+
+        return super.queryLambdas(port);
+    }
+}
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand25LambdaQuery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand25LambdaQuery.java
new file mode 100644
index 0000000..171bae3
--- /dev/null
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand25LambdaQuery.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.driver.optical.query;
+
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+
+import java.util.Set;
+
+/**
+ * C-band DWDM channel plan for 25 GHz fixed grid and centered around 193.1 GHz.
+ *
+ * This supports up to 160 optical channels.
+ */
+public class CBand25LambdaQuery extends CBandLambdaQuery {
+    @Override
+    public Set<OchSignal> queryLambdas(PortNumber port) {
+        channelSpacing = ChannelSpacing.CHL_25GHZ;
+        lambdaCount = 160;
+        slotGranularity = 2;
+
+        return super.queryLambdas(port);
+    }
+}
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand50LambdaQuery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand50LambdaQuery.java
new file mode 100644
index 0000000..b412f51
--- /dev/null
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBand50LambdaQuery.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.driver.optical.query;
+
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+
+import java.util.Set;
+
+/**
+ * C-band DWDM channel plan for 50 GHz fixed grid and centered around 193.1 GHz.
+ *
+ * This supports up to 80 optical channels.
+ */
+public class CBand50LambdaQuery extends CBandLambdaQuery {
+    @Override
+    public Set<OchSignal> queryLambdas(PortNumber port) {
+        channelSpacing = ChannelSpacing.CHL_50GHZ;
+        lambdaCount = 80;
+        slotGranularity = 4;
+
+        return super.queryLambdas(port);
+    }
+}
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBandLambdaQuery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBandLambdaQuery.java
new file mode 100644
index 0000000..b5af6f5
--- /dev/null
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/CBandLambdaQuery.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.driver.optical.query;
+
+import com.google.common.collect.ImmutableSet;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.LambdaQuery;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+
+import java.util.Set;
+import java.util.stream.IntStream;
+
+/**
+ * Abstract C-band DWDM plan lambda query, this is a base class NOT meant to be used as driver.
+ *
+ * Instead, use the subclasses to access the fixed grid (25, 50 and 100 GHz) implementations.
+ */
+public abstract class CBandLambdaQuery extends AbstractHandlerBehaviour implements LambdaQuery {
+    protected ChannelSpacing channelSpacing;
+    protected int lambdaCount;
+    protected int slotGranularity;
+
+    @Override
+    public Set<OchSignal> queryLambdas(PortNumber port) {
+        return IntStream.range(0, lambdaCount)
+                .mapToObj(x -> new OchSignal(GridType.DWDM, channelSpacing, x - (lambdaCount / 2), slotGranularity))
+                .collect(ImmutableSet.toImmutableSet());
+    }
+}
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/LincOELambdaQuery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/query/LincOELambdaQuery.java
deleted file mode 100644
index 4a86085..0000000
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/LincOELambdaQuery.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.driver.optical.query;
-
-import org.onosproject.net.ChannelSpacing;
-import org.onosproject.net.GridType;
-import org.onosproject.net.OchSignal;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.behaviour.LambdaQuery;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-
-import com.google.common.collect.ImmutableSet;
-
-import java.util.Set;
-import java.util.stream.IntStream;
-
-/**
- * Lambda query implementation for LINC-OE Optical Emulator switch.
- *
- * The LINC ROADM emulator exposes two types of ports: OCh ports connect to ports in the packet layer,
- * while OMS ports connect to an OMS port on a neighbouring ROADM.
- *
- * LINC exposes OchSignal resources: 80 lambdas of 50 GHz (fixed grid) around ITU-T G.694.1 center frequency 193.1 GHz.
- */
-
-public class LincOELambdaQuery extends AbstractHandlerBehaviour implements LambdaQuery {
-
-    private static final int LAMBDA_COUNT = 80;
-
-    /**
-     * OMS ports expose 80 fixed grid lambdas of 50GHz width,
-     * centered around the ITU-T center frequency 193.1 THz.
-     */
-    private static final Set<OchSignal> OMS_LAMBDAS = IntStream.range(0, LAMBDA_COUNT)
-            .mapToObj(x -> new OchSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, x - (LAMBDA_COUNT / 2), 4))
-            .collect(ImmutableSet.toImmutableSet());
-
-    @Override
-    public Set<OchSignal> queryLambdas(PortNumber port) {
-        DeviceService deviceService = this.handler().get(DeviceService.class);
-
-        Port p = deviceService.getPort(this.data().deviceId(), port);
-
-        // OCh ports don't expose lambda resources
-        if (p == null ||
-            !p.type().equals(Port.Type.OMS)) {
-            return ImmutableSet.of();
-        }
-
-        return OMS_LAMBDAS;
-    }
-}
diff --git a/drivers/optical/src/main/resources/optical-drivers.xml b/drivers/optical/src/main/resources/optical-drivers.xml
index 35563e0..344436e 100644
--- a/drivers/optical/src/main/resources/optical-drivers.xml
+++ b/drivers/optical/src/main/resources/optical-drivers.xml
@@ -21,7 +21,7 @@
         <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
                    impl="org.onosproject.driver.optical.handshaker.OfOpticalSwitchImplLinc13"/>
         <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
-                   impl="org.onosproject.driver.optical.query.LincOELambdaQuery"/>
+                   impl="org.onosproject.driver.optical.query.CBand50LambdaQuery"/>
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
     </driver>
