diff --git a/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java b/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java
index 4da9d6b..42183aa 100644
--- a/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java
+++ b/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java
@@ -25,7 +25,7 @@
     CHL_50GHZ(50),          // 50 GHz
     CHL_25GHZ(25),          // 25 GHz
     CHL_12P5GHZ(12.5),      // 12.5 GHz
-    CHL_6P25GHZ(6.5);       // 6.25 GHz
+    CHL_6P25GHZ(6.25);       // 6.25 GHz
 
     private final Frequency frequency;
 
diff --git a/core/api/src/main/java/org/onosproject/net/IndexedLambda.java b/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
index 6b5fa65..84aa370 100644
--- a/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
+++ b/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
@@ -19,7 +19,10 @@
 
 /**
  * Implementation of Lambda simply designated by an index number of wavelength.
+ *
+ * @deprecated in Emu (ONOS 1.4).
  */
+@Deprecated
 public class IndexedLambda implements Lambda {
 
     private final long index;
diff --git a/core/api/src/main/java/org/onosproject/net/OchSignal.java b/core/api/src/main/java/org/onosproject/net/OchSignal.java
index 3adc908..d0dfdf3 100644
--- a/core/api/src/main/java/org/onosproject/net/OchSignal.java
+++ b/core/api/src/main/java/org/onosproject/net/OchSignal.java
@@ -16,10 +16,18 @@
 package org.onosproject.net;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
 import org.onlab.util.Frequency;
 import org.onlab.util.Spectrum;
 
+import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -33,14 +41,13 @@
  */
 public class OchSignal implements Lambda {
 
-    public static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5);
+    public static final Set<Integer> FIXED_GRID_SLOT_GRANULARITIES = ImmutableSet.of(1, 2, 4, 8);
     private static final GridType DEFAULT_OCH_GRIDTYPE = GridType.DWDM;
     private static final ChannelSpacing DEFAULT_CHANNEL_SPACING = ChannelSpacing.CHL_50GHZ;
 
-
     private final GridType gridType;
     private final ChannelSpacing channelSpacing;
-    // Frequency = 193.1 THz + spacingMultiplier * channelSpacing
+    // Nominal central frequency = 193.1 THz + spacingMultiplier * channelSpacing
     private final int spacingMultiplier;
     // Slot width = slotGranularity * 12.5 GHz
     private final int slotGranularity;
@@ -118,9 +125,9 @@
     }
 
     /**
-     * Returns slow width granularity.
+     * Returns slot width granularity.
      *
-     * @return slow width granularity
+     * @return slot width granularity
      */
     public int slotGranularity() {
         return slotGranularity;
@@ -141,7 +148,56 @@
      * @return slot width
      */
     public Frequency slotWidth() {
-        return FLEX_GRID_SLOT.multiply(slotGranularity);
+        return ChannelSpacing.CHL_12P5GHZ.frequency().multiply(slotGranularity);
+    }
+
+    /**
+     * Convert fixed grid OCh signal to sorted set of flex grid slots with 6.25 GHz spacing and 12.5 GHz slot width.
+     *
+     * @param ochSignal fixed grid lambda
+     * @return sorted set of flex grid OCh lambdas
+     */
+    public static SortedSet<OchSignal> toFlexGrid(OchSignal ochSignal) {
+        checkArgument(ochSignal.gridType() != GridType.FLEX);
+        checkArgument(ochSignal.channelSpacing() != ChannelSpacing.CHL_6P25GHZ);
+        checkArgument(FIXED_GRID_SLOT_GRANULARITIES.contains(ochSignal.slotGranularity()));
+
+        int startMultiplier = (int) (1 - ochSignal.slotGranularity() +
+                ochSignal.spacingMultiplier() * ochSignal.channelSpacing().frequency().asHz() /
+                        ChannelSpacing.CHL_6P25GHZ.frequency().asHz());
+
+        Supplier<SortedSet<OchSignal>> supplier = () -> new TreeSet<>(new DefaultOchSignalComparator());
+        return IntStream.range(0, ochSignal.slotGranularity())
+                .mapToObj(i -> new OchSignal(GridType.FLEX, ChannelSpacing.CHL_6P25GHZ, startMultiplier + 2 * i, 1))
+                .collect(Collectors.toCollection(supplier));
+    }
+
+    /**
+     * Convert list of lambdas with flex grid 6.25 GHz spacing and 12.5 GHz width into fixed grid OCh signal.
+     *
+     * @param lambdas list of flex grid lambdas in sorted order
+     * @param spacing desired fixed grid spacing
+     * @return fixed grid lambda
+     */
+    public static OchSignal toFixedGrid(List<OchSignal> lambdas, ChannelSpacing spacing) {
+        // Number of slots of 12.5 GHz that fit into requested spacing
+        int ratio = (int) (spacing.frequency().asHz() / ChannelSpacing.CHL_12P5GHZ.frequency().asHz());
+        checkArgument(lambdas.size() == ratio);
+        lambdas.forEach(x -> checkArgument(x.gridType() == GridType.FLEX));
+        lambdas.forEach(x -> checkArgument(x.channelSpacing() == ChannelSpacing.CHL_6P25GHZ));
+        lambdas.forEach(x -> checkArgument(x.slotGranularity() == 1));
+        // Consecutive lambdas (multiplier increments by 2 because spacing is 6.25 GHz but slot width is 12.5 GHz)
+        IntStream.range(1, lambdas.size())
+                .forEach(i -> checkArgument(
+                        lambdas.get(i).spacingMultiplier() == lambdas.get(i - 1).spacingMultiplier() + 2));
+        // Is center frequency compatible with requested spacing
+        Frequency center = lambdas.get(ratio / 2).centralFrequency().subtract(ChannelSpacing.CHL_6P25GHZ.frequency());
+        checkArgument(Spectrum.CENTER_FREQUENCY.subtract(center).asHz() % spacing.frequency().asHz() == 0);
+
+        // Multiplier sits in middle of given lambdas, then convert from 6.25 to requested spacing
+        int spacingMultiplier = (lambdas.get(ratio / 2).spacingMultiplier() + 1) / (ratio * 2);
+
+        return new OchSignal(GridType.DWDM, spacing, spacingMultiplier, lambdas.size());
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java
index 88a6fe1..bc612cd 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java
@@ -25,6 +25,7 @@
 /**
  * Implementation of indexed lambda criterion.
  */
+@Deprecated
 public class IndexedLambdaCriterion implements Criterion {
 
     private final IndexedLambda lambda;
