diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
index bcaf476..5fa3baf 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -18,6 +18,9 @@
 import com.google.common.collect.Lists;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.Ip6Address;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.TrafficTreatment;
@@ -27,6 +30,7 @@
 import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
+import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
@@ -246,9 +250,14 @@
         L0ModificationInstruction l0m = (L0ModificationInstruction) i;
         switch (l0m.subtype()) {
             case LAMBDA:
-                ModLambdaInstruction ml = (ModLambdaInstruction) i;
-                return factory().actions().circuit(factory().oxms().ochSigidBasic(
-                        new CircuitSignalID((byte) 1, (byte) 2, ml.lambda(), (short) 1)));
+                return buildModLambdaInstruction((ModLambdaInstruction) i);
+            case OCH:
+                try {
+                    return buildModOchSignalInstruction((ModOchSignalInstruction) i);
+                } catch (UnsupportedGridTypeException | UnsupportedChannelSpacingException e) {
+                    log.warn(e.getMessage());
+                    break;
+                }
             default:
                 log.warn("Unimplemented action type {}.", l0m.subtype());
                 break;
@@ -256,6 +265,64 @@
         return null;
     }
 
+    private OFAction buildModLambdaInstruction(ModLambdaInstruction instruction) {
+        return factory().actions().circuit(factory().oxms().ochSigidBasic(
+                new CircuitSignalID((byte) 1, (byte) 2, instruction.lambda(), (short) 1)));
+    }
+
+    private OFAction buildModOchSignalInstruction(ModOchSignalInstruction instruction) {
+        OchSignal signal = instruction.lambda();
+        byte gridType = convertGridType(signal.gridType());
+        byte channelSpacing = convertChannelSpacing(signal.channelSpacing());
+
+        return factory().actions().circuit(factory().oxms().ochSigidBasic(
+                new CircuitSignalID(gridType, channelSpacing,
+                        (short) signal.spacingMultiplier(), (short) signal.slotGranularity())
+        ));
+    }
+
+    private byte convertGridType(GridType type) {
+        // See ONF "Optical Transport Protocol Extensions Version 1.0"
+        // for the following values
+        switch (type) {
+            case DWDM:
+                // OFPGRIDT_DWDM of enum ofp_grid_type
+                return 1;
+            case CWDM:
+                // OFPGRIDT_CWDM of enum ofp_grid_type
+                return 2;
+            case FLEX:
+                // OFPGRIDT_FLEX of enum ofp_grid_type
+                return 3;
+            default:
+                throw new UnsupportedGridTypeException(type);
+        }
+    }
+
+    private byte convertChannelSpacing(ChannelSpacing spacing) {
+        // See ONF "Optical Transport Protocol Extensions Version 1.0"
+        // for the following values
+        switch (spacing) {
+            case CHL_100GHZ:
+                // OFPCS_100GHZ of enum ofp_chl_spacing
+                return 1;
+            case CHL_50GHZ:
+                // OFPCS_50GHZ of enum ofp_chl_spacing
+                return 2;
+            case CHL_25GHZ:
+                // OFPCS_25GHZ of enum ofp_chl_spacing
+                return 3;
+            case CHL_12P5GHZ:
+                // OFPCS_12P5GHZ of enum ofp_chl_spacing
+                return 4;
+            case CHL_6P25GHZ:
+                // OFPCS_6P25GHZ of enum ofp_chl_spacing
+                return 5;
+            default:
+                throw new UnsupportedChannelSpacingException(spacing);
+        }
+    }
+
     private OFAction buildL2Modification(Instruction i) {
         L2ModificationInstruction l2m = (L2ModificationInstruction) i;
         ModEtherInstruction eth;
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedChannelSpacingException.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedChannelSpacingException.java
new file mode 100644
index 0000000..dac6894
--- /dev/null
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedChannelSpacingException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2015 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.provider.of.flow.impl;
+
+import org.onosproject.net.ChannelSpacing;
+
+/**
+ * Thrown to indicate that unsupported channel spacing is referred.
+ */
+public class UnsupportedChannelSpacingException extends RuntimeException {
+
+    /**
+     * Creates an instance with the specified unsupported channel spacing.
+     *
+     * @param unsupported unsupported channel spacing
+     */
+    public UnsupportedChannelSpacingException(ChannelSpacing unsupported) {
+        super("ChannelSpacing " + unsupported + " is not supported");
+    }
+}
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedGridTypeException.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedGridTypeException.java
new file mode 100644
index 0000000..b02883d
--- /dev/null
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/UnsupportedGridTypeException.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2015 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.provider.of.flow.impl;
+
+import org.onosproject.net.GridType;
+
+/**
+ * Thrown to indicate that unsupported gird type is referred.
+ */
+public class UnsupportedGridTypeException extends RuntimeException {
+
+    /**
+     * Creates an instance with the specified unsupported grid type.
+     *
+     * @param unsupported unsupported grid type
+     */
+    public UnsupportedGridTypeException(GridType unsupported) {
+        super("GridType " + unsupported + " is not supported");
+    }
+}
