diff --git a/core/api/src/main/java/org/onosproject/net/CltSignalType.java b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
new file mode 100644
index 0000000..5a5843e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016 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.net;
+
+/**
+ * Represents ODU (Optical channel Data Unit) client port signal type.
+ *
+ * <p>
+ * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" and
+ * Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0".
+ * </p>
+ */
+public enum CltSignalType {
+    /** bit rate in Mbps. */
+    CLT_1GBE(1_000),
+    CLT_10GBE(10_000),
+    CLT_40GBE(40_000),
+    CLT_100GBE(100_000);
+
+    private final long bitRate;
+
+    CltSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/net/OchPort.java b/core/api/src/main/java/org/onosproject/net/OchPort.java
index 8f1630b..c63b29d 100644
--- a/core/api/src/main/java/org/onosproject/net/OchPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OchPort.java
@@ -44,8 +44,8 @@
      */
     public OchPort(Element element, PortNumber number, boolean isEnabled, OduSignalType signalType,
                    boolean isTunable, OchSignal lambda, Annotations... annotations) {
-        super(element, number, isEnabled, Type.OCH, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+        super(element, number, isEnabled, Type.OCH, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
         this.isTunable = isTunable;
         this.lambda = checkNotNull(lambda);
     }
diff --git a/core/api/src/main/java/org/onosproject/net/OduCltPort.java b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
index 08bb943..56f0002 100644
--- a/core/api/src/main/java/org/onosproject/net/OduCltPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
@@ -28,15 +28,7 @@
 
 public class OduCltPort extends DefaultPort {
 
-    public enum SignalType {
-        CLT_1GBE,
-        CLT_10GBE,
-        CLT_40GBE,
-        CLT_100GBE
-    }
-
-    private final SignalType signalType;
-
+    private final CltSignalType signalType;
 
     /**
      * Creates an ODU client port in the specified network element.
@@ -48,9 +40,9 @@
      * @param annotations       optional key/value annotations
      */
     public OduCltPort(Element element, PortNumber number, boolean isEnabled,
-                      SignalType signalType, Annotations... annotations) {
-        super(element, number, isEnabled, Type.ODUCLT, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+                      CltSignalType signalType, Annotations... annotations) {
+        super(element, number, isEnabled, Type.ODUCLT, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
     }
 
     /**
@@ -58,7 +50,7 @@
      *
      * @return ODU client signal type
      */
-    public SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/OduSignalType.java b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
index 014c893..336d4fc 100644
--- a/core/api/src/main/java/org/onosproject/net/OduSignalType.java
+++ b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
@@ -24,10 +24,25 @@
  * </p>
  */
 public enum OduSignalType {
-    ODU0,
-    ODU1,
-    ODU2,
-    ODU2e,
-    ODU3,
-    ODU4
+    /** bit rate in Mbps. */
+    ODU0(1_250),
+    ODU1(2_500),
+    ODU2(10_000),
+    ODU2e(10_000),
+    ODU3(40_000),
+    ODU4(100_000);
+
+    private final long bitRate;
+
+    OduSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
index eee7de2..3991e64 100644
--- a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
@@ -16,7 +16,7 @@
 package org.onosproject.net.device;
 
 import com.google.common.base.MoreObjects;
-import org.onosproject.net.OduCltPort;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
@@ -26,7 +26,7 @@
  */
 public class OduCltPortDescription extends DefaultPortDescription {
 
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
 
     /**
      * Creates ODU client port description based on the supplied information.
@@ -36,7 +36,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortNumber number, boolean isEnabled, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortNumber number, boolean isEnabled, CltSignalType signalType,
                                  SparseAnnotations... annotations) {
         super(number, isEnabled, Port.Type.ODUCLT, 0, annotations);
         this.signalType = signalType;
@@ -49,7 +49,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortDescription base, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortDescription base, CltSignalType signalType,
                                  SparseAnnotations annotations) {
         super(base, annotations);
         this.signalType = signalType;
@@ -60,7 +60,7 @@
      *
      * @return ODU client signal type
      */
-    public OduCltPort.SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
index 1e515c8..2a412f1 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
@@ -18,8 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.OduCltPort;
 
 import java.util.Collections;
 
@@ -33,7 +33,7 @@
 public class OpticalCircuitIntent extends Intent {
     private final ConnectPoint src;
     private final ConnectPoint dst;
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
     private final boolean isBidirectional;
 
     /**
@@ -49,7 +49,7 @@
      * @param priority priority to use for flows from this intent
      */
     protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst,
-                                   OduCltPort.SignalType signalType, boolean isBidirectional, int priority) {
+                                   CltSignalType signalType, boolean isBidirectional, int priority) {
         super(appId, key, Collections.emptyList(), priority);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
@@ -73,7 +73,7 @@
     public static class Builder extends Intent.Builder {
         private ConnectPoint src;
         private ConnectPoint dst;
-        private OduCltPort.SignalType signalType;
+        private CltSignalType signalType;
         private boolean isBidirectional;
 
         @Override
@@ -119,7 +119,7 @@
          * @param signalType signal type to use for built intent
          * @return this builder
          */
-        public Builder signalType(OduCltPort.SignalType signalType) {
+        public Builder signalType(CltSignalType signalType) {
             this.signalType = signalType;
             return this;
         }
@@ -188,7 +188,7 @@
      *
      * @return ODU signal type
      */
-    public OduCltPort.SignalType getSignalType() {
+    public CltSignalType getSignalType() {
         return signalType;
     }
 
