diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/OpticalModulationCommand.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/OpticalModulationCommand.java
index 257ea11..625802a 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/OpticalModulationCommand.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/OpticalModulationCommand.java
@@ -59,7 +59,7 @@
     @Completion(OpticalConnectPointCompleter.class)
     private String connectPoint = null;
 
-    @Argument(index = 2, name = "value", description = "example: dp_qpsk, dp_8qam, dp_16qam",
+    @Argument(index = 2, name = "value", description = "example: dp_qpsk, dp_8qam, dp_16qam, dp_16qam_hybrid",
             required = false, multiValued = false)
     private String value = null;
 
@@ -98,9 +98,15 @@
                 long bitRate = 0;
                 if (value.equalsIgnoreCase(ModulationScheme.DP_QPSK.name())) {
                     bitRate = 100;
-                } else {
+                } else if (value.equalsIgnoreCase(ModulationScheme.DP_16QAM.name())) {
                     bitRate = 200;
+                } else if (value.equalsIgnoreCase(ModulationScheme.DP_16QAM_HYBRID.name())) {
+                    bitRate = 300;
+                } else {
+                    print(value + "is not correct setting for modulation");
+                    return;
                 }
+
                 checkNotNull(value);
                 Direction component = Direction.ALL;
                 modulationConfig.setModulationScheme(cp.port(), component, bitRate);
diff --git a/apps/roadm/web/roadm-gui/lib/port/port.component.html b/apps/roadm/web/roadm-gui/lib/port/port.component.html
index 18f8577..ca4cfe9 100644
--- a/apps/roadm/web/roadm-gui/lib/port/port.component.html
+++ b/apps/roadm/web/roadm-gui/lib/port/port.component.html
@@ -111,6 +111,7 @@
                                 <option value="DP_QPSK">DP_QPSK</option>
                                 <option value="DP_16QAM">DP_16QAM</option>
                                 <option value="DP_8QAM">DP_8QAM</option>
+				<option value="DP_16QAM_HYBRID">DP_16QAM_HYBRID</option>
                             </select>
                             <button type="submit">Submit</button>
                         </form>
diff --git a/core/api/src/main/java/org/onosproject/net/ModulationScheme.java b/core/api/src/main/java/org/onosproject/net/ModulationScheme.java
index fe54c44..5001552 100644
--- a/core/api/src/main/java/org/onosproject/net/ModulationScheme.java
+++ b/core/api/src/main/java/org/onosproject/net/ModulationScheme.java
@@ -21,6 +21,7 @@
 
     DP_QPSK,
     DP_8QAM,
-    DP_16QAM
+    DP_16QAM,
+    DP_16QAM_HYBRID
 
 }
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaFlowRuleProgrammable.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaFlowRuleProgrammable.java
index 36690a8..fbfa5d7 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaFlowRuleProgrammable.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaFlowRuleProgrammable.java
@@ -44,9 +44,7 @@
         sb.append(
                     "<components xmlns='http://openconfig.net/yang/platform'>"
                   + "<component>"
-                  + "<config>"
                   + "<name>" + optChannel + "</name>"
-                  + "</config>"
                   + "<optical-channel xmlns='http://openconfig.net/yang/terminal-device'>"
                   + "<config>"
                   + "<frequency>" + (long) freq.asMHz() + "</frequency>"
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaModulationOpenConfig.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaModulationOpenConfig.java
new file mode 100644
index 0000000..db32593
--- /dev/null
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaModulationOpenConfig.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2019-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.
+ *
+ * This work was partially supported by EC H2020 project METRO-HAUL (761727).
+ */
+package org.onosproject.drivers.odtn;
+
+
+import org.onosproject.net.ModulationScheme;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.onosproject.net.PortNumber;
+import org.onosproject.netconf.DatastoreId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Optional;
+
+/*
+ * Driver Implementation of the ModulationConfig via openconfig for ADVA  based terminal devices.
+ */
+public class AdvaModulationOpenConfig<T> extends TerminalDeviceModulationConfig<T> {
+
+    public static Logger log = LoggerFactory.getLogger(AdvaModulationOpenConfig.class);
+
+    /**
+     * Construct a rpc target power message.
+     *
+     * @return RPC payload
+     */
+    @Override
+    public DatastoreId getDataStoreId() {
+        return DatastoreId.RUNNING;
+    }
+
+    /**
+     * Construct a rpc target power message.
+     *
+     * @param name for optical channel name
+     * @return RPC payload
+     */
+    @Override
+    public StringBuilder createModulationFilterRequestRpc(String name) {
+        StringBuilder rpc = new StringBuilder();
+        rpc.append("<name>").append(name).append("</name>");
+        return rpc;
+    }
+
+    /*
+     *
+     * Parse filtering string from port and component.
+     * @param portNumber Port Number
+     * @param component port component (optical-channel)
+     * @param bitRate bitRate in bps
+     * @return filtering string in xml format
+
+     */
+    @Override
+    public String modulationEditConfigRequestRpc(TerminalDeviceModulationConfig modulationConfig, PortNumber portNumber,
+                                                 Object component, long bitRate, String modulation) {
+        if (component != null) {
+            // This is an edit-config operation.
+            String portName = state.ocName(modulationConfig, portNumber); //oc1/0
+            StringBuilder sb = new StringBuilder("<components xmlns=\"http://openconfig.net/yang/platform\">");
+            sb.append("<component>");
+            sb.append("<name>").append(portName).append("</name>");
+            sb.append("<config>");
+            sb.append("<name>").append(portName).append("</name>");
+            sb.append("</config>");
+            sb.append("<optical-channel xmlns=\"http://openconfig.net/yang/terminal-device\">")
+                .append("<config>")
+                .append("<optical-channel-config xmlns=\"http://www.advaoptical.com/openconfig/terminal-device-dev\">")
+                .append("<modulation>")
+                .append(modulation)
+                .append("</modulation>")
+                .append("</optical-channel-config>")
+                .append("</config>")
+                .append("</optical-channel>");
+            sb.append("</component>");
+            sb.append("</components>");
+            return sb.toString();
+        } else {
+            log.error("Cannot process the component {}.", component.getClass());
+            return null;
+        }
+    }
+
+    @Override
+    public void setModulationSchemeProcessor(PortNumber port, Object component, long bitRate) {
+        String modulation = null;
+        String editConfig = null;
+        if (bitRate <= BitRate.GBPS_100.value) {
+            modulation = "dp-qpsk";
+            editConfig = state.modulationEditConfig(state.terminalDevice, port, component, bitRate, modulation);
+            //setting the modulation by calling rpc
+            state.setModulationRpc(port, component, editConfig);
+        } else if (bitRate == BitRate.GBPS_200.value) { // check if bitrate is greater than 100 Gig
+            modulation = "dp-16qam";
+            editConfig = state.modulationEditConfig(state.terminalDevice, port, component, bitRate, modulation);
+            //setting the modulation by calling rpc
+            state.setModulationRpc(port, component, editConfig);
+        } else if (bitRate == BitRate.GBPS_300.value) {
+            modulation = "dp-p-16-16qam-hybrid";
+            editConfig = state.modulationEditConfig(state.terminalDevice, port, component, bitRate, modulation);
+            state.setModulationRpc(port, component, editConfig);
+        }
+    }
+
+    @Override
+    public ModulationScheme modulationSchemeType(String modulationScheme) {
+        /*Used for Internal Testing */
+        //String modulationScheme="DP16QAM";
+        ModulationScheme modulation;
+        if (modulationScheme.equalsIgnoreCase("dp-16qam")) {
+            modulation = ModulationScheme.DP_16QAM;
+        } else if (modulationScheme.equalsIgnoreCase("dp-8-qam")) {
+            modulation = ModulationScheme.DP_8QAM;
+        } else if (modulationScheme.equalsIgnoreCase("dp-p-16-16qam-hybrid")) {
+            modulation = ModulationScheme.DP_16QAM_HYBRID;
+        } else {
+            modulation = ModulationScheme.DP_QPSK;
+        }
+        return modulation;
+    }
+    @Override
+        public Optional<ModulationScheme> getModulation(XMLConfiguration conf) {
+        HierarchicalConfiguration config =
+                        conf.configurationAt("data/components/component/optical-channel/config/optical-channel-config");
+
+                String modulationScheme = String.valueOf(config.getString("modulation"));
+
+        return Optional.of(modulationSchemeType(modulationScheme));
+    }
+
+    /*
+     *
+     * Set the ComponentType to invoke proper methods for different template T.
+     * @param component the component.
+     */
+    void checkState(Object component) {
+        String clsName = component.getClass().getName();
+        switch (clsName) {
+            case "org.onosproject.net.Direction":
+                state = ComponentType.DIRECTION;
+                break;
+            case "org.onosproject.net.OchSignal":
+                state = ComponentType.OCHSIGNAL;
+                break;
+            default:
+                log.error("Cannot parse the component type {}.", clsName);
+                log.error("The component content is {}.", component.toString());
+        }
+
+        state.terminalDevice = this;
+    }
+}
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDeviceDiscovery.java
index a61efe2..1acf404 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDeviceDiscovery.java
@@ -26,6 +26,7 @@
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.OchSignal;
@@ -60,7 +61,7 @@
 
 /**
  * Driver Implementation of the DeviceDescrption discovery for OpenConfig
- * terminal devices.
+ * ADVA FSP3000C platform terminal devices.
  *
  */
 public class AdvaTerminalDeviceDiscovery
@@ -147,7 +148,7 @@
                                             Device.Type.TERMINAL_DEVICE,
                                             "ADVA",
                                             "FSP3000C",
-                                            "3.1",
+                                            "4.5.2",
                                             "",
                                             new ChassisId("1"));
     }
@@ -282,6 +283,7 @@
              annotations.putIfAbsent(PORT_TYPE, OdtnPortType.CLIENT.value());
              annotations.putIfAbsent(ONOS_PORT_INDEX, portNum.toString());
              annotations.putIfAbsent(CONNECTION_ID, connectionId);
+             annotations.putIfAbsent(AnnotationKeys.PORT_NAME, description);
 
              builder.withPortNumber(PortNumber.portNumber(portNum));
              builder.type(Type.PACKET);
@@ -300,6 +302,7 @@
              annotations.putIfAbsent(ONOS_PORT_INDEX, portNum.toString());
              annotations.putIfAbsent(CONNECTION_ID, connectionId);
              annotations.put(OdtnDeviceDescriptionDiscovery.OC_NAME, "optch " + description);
+             annotations.putIfAbsent(AnnotationKeys.PORT_NAME, "optch " + description);
 
              OchSignal signalId = OchSignal.newDwdmSlot(ChannelSpacing.CHL_50GHZ, 1);
              return OchPortHelper.ochPortDescription(
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDevicePowerConfig.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDevicePowerConfig.java
index 17eaf92..2b4db74 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDevicePowerConfig.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/AdvaTerminalDevicePowerConfig.java
@@ -23,7 +23,7 @@
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.PowerConfig;
 import org.slf4j.Logger;
-
+import org.onosproject.netconf.DatastoreId;
 import java.util.Optional;
 
 import static org.slf4j.LoggerFactory.getLogger;
@@ -44,18 +44,24 @@
      */
     @Override
     public Optional<Range<Double>> getTargetPowerRange(PortNumber port, Object component) {
-        double targetMin = -30;
-        double targetMax = 1;
+        double targetMin = -6;
+        double targetMax = 4;
         return Optional.of(Range.open(targetMin, targetMax));
     }
 
     @Override
     public Optional<Range<Double>> getInputPowerRange(PortNumber port, Object component) {
-        double targetMin = -30;
-        double targetMax = 1;
+        double targetMin = -6;
+        double targetMax = 4;
         return Optional.of(Range.open(targetMin, targetMax));
     }
 
+    @Override
+      public DatastoreId getDataStoreId() {
+        return DatastoreId.RUNNING;
+    }
+
+
     /**
      * Construct a rpc target power message.
      *
@@ -69,11 +75,9 @@
         rpc.append("<component>");
         if (power != null) {
             // This is an edit-config operation.
-            rpc.append("<config>")
-                    .append("<name>")
+                    rpc.append("<name>")
                     .append(name)
                     .append("</name>")
-                    .append("</config>")
                     .append("<optical-channel xmlns=\"http://openconfig.net/yang/terminal-device\">")
                     .append("<config>")
                     .append("<target-output-power>")
@@ -88,4 +92,5 @@
         }
         return rpc;
     }
+
 }
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/TerminalDeviceModulationConfig.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/TerminalDeviceModulationConfig.java
index cdc2a9c..7771419 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/TerminalDeviceModulationConfig.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/TerminalDeviceModulationConfig.java
@@ -60,6 +60,7 @@
 
 
     public enum BitRate {
+        GBPS_300(300),       //300 Gbps
         GBPS_200(200),      // 200 Gbps
         GBPS_100(100),        // 100 Gbps
         GBPS_40(40),          // 40 Gbps
diff --git a/drivers/odtn-driver/src/main/resources/odtn-drivers.xml b/drivers/odtn-driver/src/main/resources/odtn-drivers.xml
index f3a4ba8..7f47295 100644
--- a/drivers/odtn-driver/src/main/resources/odtn-drivers.xml
+++ b/drivers/odtn-driver/src/main/resources/odtn-drivers.xml
@@ -246,7 +246,7 @@
     <behaviour api="org.onosproject.net.behaviour.PowerConfig"
 	       impl="org.onosproject.drivers.odtn.AdvaTerminalDevicePowerConfig"/>
     <behaviour api="org.onosproject.net.behaviour.ModulationConfig"
-               impl="org.onosproject.drivers.odtn.CassiniModulationOpenConfig"/>
+               impl="org.onosproject.drivers.odtn.AdvaModulationOpenConfig"/>
     </driver>
 
     <driver name="gnmi-openconfig-terminal-device" manufacturer="OpenConfig" hwVersion="Unknown" swVersion="gNMI">
