diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java
index e514188..36eb087 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java
+++ b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java
@@ -42,6 +42,7 @@
     public Collection<FlowEntry> getFlowEntries() {
         DeviceId deviceId = handler().data().deviceId();
         log.debug("getting flow entries for device {}", deviceId);
+        //TODO: implement getFlowEntries
         log.debug("getFlowEntries not supported for device {}", deviceId);
         return Collections.EMPTY_LIST;
     }
@@ -60,11 +61,9 @@
     @Override
     public Collection<FlowRule> removeFlowRules(Collection<FlowRule> rules) {
         log.debug("removing flow rules: {}", rules);
-        Collection<FlowRule> removed = rules.stream()
-                .map(r -> createCrossConnectFlowRule(r))
-                .filter(xc -> removeCrossConnect(xc))
-                .collect(Collectors.toList());
-        return removed;
+        //TODO: implement remove rule
+        log.debug("ignoring remove rule request");
+        return rules;
     }
 
     private CrossConnectFlowRule createCrossConnectFlowRule(FlowRule r) {
@@ -100,8 +99,7 @@
         // only handling lineside rule
         if (xc.isAddRule()) {
             PortNumber outPort = xc.addDrop();
-            OchSignal signal = OchSignal.newDwdmSlot(xc.ochSignal().channelSpacing(),
-                                                     -CienaRestDevice.getMultiplierOffset());
+            OchSignal signal = OchSignal.newDwdmSlot(xc.ochSignal().channelSpacing(), 0);
             return install(outPort, signal);
         }
         return false;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java
index 7627959..ebe362f 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java
+++ b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java
@@ -40,7 +40,6 @@
     private static final String ENABLED = "enabled";
     private static final String DISABLED = "disabled";
     private static final Frequency BASE_FREQUENCY = Frequency.ofGHz(193_950);
-    private static final int MULTIPLIER_OFFSET = 80;
 
     //URIs
     private static final String PORT_URI = "ws-ptps/ptps/%s";
@@ -74,10 +73,10 @@
 
     }
 
-    private String genFrequencyChangeRequest(long wavelength) {
+    private String genFrequencyChangeRequest(long frequency) {
         String request = "{\n" +
                 "\"ciena-ws-ptp-modem:frequency\": {\n" +
-                "\"value\": " + Long.toString(wavelength) + "\n" +
+                "\"value\": " + Long.toString(frequency) + "\n" +
                 "}\n" +
                 "}";
         log.debug("request:\n{}", request);
@@ -123,7 +122,7 @@
 
     public final boolean changeChannel(OchSignal signal, PortNumber outPort) {
         String uri = genUri(CHANNEL_URI, outPort);
-        int channel = signal.spacingMultiplier() + MULTIPLIER_OFFSET;
+        int channel = signal.spacingMultiplier();
         log.debug("channel is {} for port {} on device {}", channel, outPort.name(), deviceId);
         String request = genChannelChangeRequest(channel);
         return putNoReply(uri, request);
@@ -135,10 +134,6 @@
         return Double.valueOf(frequency).longValue();
     }
 
-    public static int getMultiplierOffset() {
-        return MULTIPLIER_OFFSET;
-    }
-
     private int put(String uri, String request) {
         InputStream payload = new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8));
         int response = controller.put(deviceId, uri, payload, MediaType.valueOf(MediaType.APPLICATION_JSON));
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java
new file mode 100644
index 0000000..0698287
--- /dev/null
+++ b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.drivers.ciena;
+
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.LambdaQuery;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+
+
+import com.google.common.collect.ImmutableSet;
+
+import java.util.Set;
+import java.util.stream.IntStream;
+
+/**
+ * Ciena WaveServer Lambda query.
+ * 88 50GHz flex grid channels with 12.5 slot width, starting from 0 to 87.
+ */
+public class CienaWaveServerLambdaQuery extends AbstractHandlerBehaviour implements LambdaQuery {
+
+    @Override
+    public Set<OchSignal> queryLambdas(PortNumber port) {
+        //88 channels of 50 GHz with 12.5 GHz slothWidth
+        int slots = (int) (ChannelSpacing.CHL_50GHZ.frequency().asHz() /
+                ChannelSpacing.CHL_12P5GHZ.frequency().asHz());
+        int channels = 88;
+        //total lambdas are equal to: channels * slots
+        return IntStream.rangeClosed(0, channels * slots)
+                .mapToObj(x -> OchSignal.newFlexGridSlot(2 * x))
+                .collect(ImmutableSet.toImmutableSet());
+    }
+
+}
+
+
