diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java b/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java
index 8e40fd2..66aa8b7 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java
@@ -17,14 +17,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import org.onlab.util.Spectrum;
-import org.onosproject.net.ChannelSpacing;
-import org.onosproject.net.DefaultOchSignalComparator;
 import org.onosproject.net.Device;
-import org.onosproject.net.GridType;
-import org.onosproject.net.OchSignal;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.behaviour.LambdaQuery;
 import org.onosproject.openflow.controller.OpenFlowOpticalSwitch;
 import org.onosproject.openflow.controller.PortDescPropertyType;
 import org.onosproject.openflow.controller.driver.AbstractOpenFlowSwitch;
@@ -48,10 +41,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
-import java.util.SortedSet;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
 
 /**
  * Driver for Calient S160 Optical Circuit Switch. Untested on Calient S320 but probably works ok.
@@ -59,12 +49,9 @@
  * Driver implements custom handshaker, and rewrites flow stats as expected by the device. Port stats are currently
  * not supported.
  *
- * The device consists of OMS ports only, and each port exposes lambda resources covering the whole
- * usable optical spectrum (U to O band, see {@link Spectrum} for spectrum definitions).
+ * The device consists of OMS ports only.
  */
-public class CalientFiberSwitchHandshaker
-        extends AbstractOpenFlowSwitch
-        implements OpenFlowOpticalSwitch, LambdaQuery {
+public class CalientFiberSwitchHandshaker extends AbstractOpenFlowSwitch implements OpenFlowOpticalSwitch {
 
     private final AtomicBoolean driverHandshakeComplete = new AtomicBoolean(false);
     private List<OFCalientPortDescStatsEntry> fiberPorts = new ArrayList<>();
@@ -198,20 +185,4 @@
 
         super.sendMsg(newMsg);
     }
-
-    @Override
-    public SortedSet<OchSignal> queryLambdas(PortNumber port) {
-        // S160 data sheet
-        // Wavelength range: 1260 - 1630 nm
-        long startSpacingMultiplier = Spectrum.U_BAND_MIN.subtract(Spectrum.CENTER_FREQUENCY).asHz() /
-                ChannelSpacing.CHL_12P5GHZ.frequency().asHz();
-        long stopSpacingMultiplier = Spectrum.O_BAND_MAX.subtract(Spectrum.CENTER_FREQUENCY).asHz() /
-                ChannelSpacing.CHL_12P5GHZ.frequency().asHz();
-
-        // Only consider odd values for the multiplier (for easy mapping to fixed grid)
-        return IntStream.rangeClosed((int) startSpacingMultiplier, (int) stopSpacingMultiplier)
-                .filter(i -> i % 2 == 1)
-                .mapToObj(i -> new OchSignal(GridType.FLEX, ChannelSpacing.CHL_6P25GHZ, i, 1))
-                .collect(Collectors.toCollection(DefaultOchSignalComparator::newOchSignalTreeSet));
-    }
 }
