diff --git a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
index dea83b0..f0d0183 100644
--- a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
+++ b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
@@ -25,12 +25,13 @@
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.behaviour.protection.ProtectedTransportEndpointState;
-import org.onosproject.net.behaviour.protection.TransportEndpointState;
-import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.ModulationScheme;
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.protection.ProtectedTransportEndpointState;
+import org.onosproject.net.behaviour.protection.TransportEndpointState;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.intent.OpticalPathIntent;
 import org.onosproject.net.optical.OpticalAnnotations;
 import org.onosproject.ui.RequestHandler;
@@ -64,6 +65,8 @@
     private static final String ROADM_PORTS = "roadmPorts";
     private static final String ROADM_SET_TARGET_POWER_REQ = "roadmSetTargetPowerRequest";
     private static final String ROADM_SET_TARGET_POWER_RESP = "roadmSetTargetPowerResponse";
+    private static final String ROADM_SET_MODULATION_REQ = "roadmSetModulationRequest";
+    private static final String ROADM_SET_MODULATION_RESP = "roadmSetModulationResponse";
     private static final String ROADM_SYNC_TARGET_POWER_REQ = "roadmSyncTargetPowerRequest";
     private static final String ROADM_SYNC_TARGET_POWER_RESP = "roadmSyncTargetPowerResp";
     private static final String ROADM_SHOW_ITEMS_REQ = "roadmShowPortItemsRequest";
@@ -82,12 +85,13 @@
     private static final String POWER_RANGE = "powerRange";
     private static final String CURRENT_POWER = "currentPower";
     private static final String TARGET_POWER = "targetPower";
+    private static final String MODULATION = "modulation";
     private static final String HAS_TARGET_POWER = "hasTargetPower";
     private static final String SERVICE_STATE = "serviceState";
 
     private static final String[] COLUMN_IDS = {
             ID, REVERSE_PORT, TYPE, NAME, ENABLED, MIN_FREQ, MAX_FREQ, GRID, POWER_RANGE,
-            CURRENT_POWER, SERVICE_STATE, TARGET_POWER, HAS_TARGET_POWER
+            CURRENT_POWER, SERVICE_STATE, TARGET_POWER, MODULATION, HAS_TARGET_POWER
     };
 
     private RoadmService roadmService;
@@ -108,8 +112,9 @@
                 new SetTargetPowerRequestHandler(),
                 new CreateShowItemsRequestHandler(),
                 new CreateOpsModeSetRequestHandler(),
-                new SyncTargetPowerRequestHandler()
-                );
+                new SyncTargetPowerRequestHandler(),
+                new SetModulationRequestHandler()
+        );
     }
 
     // Handler for sample table requests
@@ -155,6 +160,7 @@
                     .cell(POWER_RANGE, getPowerRange(deviceId, portNum))
                     .cell(CURRENT_POWER, getCurrentPower(deviceId, portNum))
                     .cell(SERVICE_STATE, getPortServiceState(deviceId, portNum))
+                    .cell(MODULATION, getModulation(deviceId, portNum))
                     .cell(TARGET_POWER, getTargetPower(deviceId, portNum))
                     .cell(HAS_TARGET_POWER, roadmService.hasPortTargetPower(deviceId, portNum));
         }
@@ -169,7 +175,7 @@
                 for (TransportEndpointState element : state.pathStates()) {
                     if (element.description().output().connectPoint().port().equals(portNumber)) {
                         return RoadmUtil.defaultString(element.attributes()
-                            .get(OpticalAnnotations.INPUT_PORT_STATUS), RoadmUtil.UNKNOWN);
+                                .get(OpticalAnnotations.INPUT_PORT_STATUS), RoadmUtil.UNKNOWN);
                     }
                 }
             }
@@ -177,6 +183,7 @@
         }
 
         private Frequency minFreq = null, maxFreq = null, channelSpacing = null;
+
         // Gets min frequency, max frequency, channel spacing
         private void getFrequencyLimit(DeviceId deviceId, PortNumber portNumber) {
             Set<OchSignal> signals = roadmService.queryLambdas(deviceId, portNumber);
@@ -219,6 +226,17 @@
             Long targetPower = roadmService.getTargetPortPower(deviceId, portNumber);
             return RoadmUtil.objectToString(targetPower, RoadmUtil.UNKNOWN);
         }
+
+        // Returns modulation as a string, Unknown if modulation is expected but
+        // cannot be found
+        private String getModulation(DeviceId deviceId, PortNumber portNumber) {
+            Port port = deviceService.getPort(deviceId, portNumber);
+            ModulationScheme modulation = null;
+            if (port.type().equals(Port.Type.OCH)) {
+                modulation = roadmService.getModulation(deviceId, portNumber);
+            }
+            return RoadmUtil.objectToString(modulation, RoadmUtil.UNKNOWN);
+        }
     }
 
 
@@ -257,6 +275,7 @@
     private final class SyncTargetPowerRequestHandler extends RequestHandler {
 
         private static final String SYNCED_TARGET_POWER = "Synced target power is %s.";
+
         private SyncTargetPowerRequestHandler() {
             super(ROADM_SYNC_TARGET_POWER_REQ);
         }
@@ -275,6 +294,29 @@
         }
     }
 
+    // Handler for setting port modulation
+    private final class SetModulationRequestHandler extends RequestHandler {
+
+        private static final String TARGET_MODULATION_MSG = "Target modulation is %s.";
+
+        private SetModulationRequestHandler() {
+            super(ROADM_SET_MODULATION_REQ);
+        }
+
+        @Override
+        public void process(ObjectNode payload) {
+            DeviceId deviceId = DeviceId.deviceId(string(payload, RoadmUtil.DEV_ID));
+            PortNumber portNumber = PortNumber.portNumber(payload.get(ID).asLong());
+            String modulation = payload.get(MODULATION).asText();
+            roadmService.setModulation(deviceId, portNumber, modulation);
+            ObjectNode rootNode = objectNode();
+            rootNode.put(ID, payload.get(ID).asText());
+            rootNode.put(RoadmUtil.VALID, modulation);
+            rootNode.put(RoadmUtil.MESSAGE, String.format(TARGET_MODULATION_MSG, modulation));
+            sendMessage(ROADM_SET_MODULATION_RESP, rootNode);
+        }
+    }
+
     // Protection switch operation type and path index
     private static final String OPS_ARRAY_INDEX = "index";
     private static final String OPS_ARRAY_OPERATION = "operation";
@@ -322,18 +364,18 @@
                 String groupName = states.keySet().size() == 1 ? "" : String.format(OPS_GROUP_FMT, ++groupIndex);
                 // Add AUTOMATIC operation.
                 nodes.add(new ObjectNode(JsonNodeFactory.instance)
-                          .put(OPS_ARRAY_INDEX, ACTIVE_UNKNOWN)
-                          .put(OPS_ARRAY_OPERATION, OPS_OPT_AUTO)
-                          .put(OPS_ARRAY_NAME, String.format("%s%s", groupName, OPS_OPT_AUTO)));
+                        .put(OPS_ARRAY_INDEX, ACTIVE_UNKNOWN)
+                        .put(OPS_ARRAY_OPERATION, OPS_OPT_AUTO)
+                        .put(OPS_ARRAY_NAME, String.format("%s%s", groupName, OPS_OPT_AUTO)));
                 // Add FORCE and MANUAL operations for every path.
                 for (String opt : OPS_NON_AUTO_OPTS) {
                     int pathIndex = 0;
                     for (TransportEndpointState state : states.get(identifier).pathStates()) {
                         nodes.add(new ObjectNode(JsonNodeFactory.instance)
-                                  .put(OPS_ARRAY_INDEX, pathIndex++)
-                                  .put(OPS_ARRAY_OPERATION, opt)
-                                  .put(OPS_ARRAY_NAME,
-                                       String.format("%s%s %s", groupName, opt, state.id().id().toUpperCase())));
+                                .put(OPS_ARRAY_INDEX, pathIndex++)
+                                .put(OPS_ARRAY_OPERATION, opt)
+                                .put(OPS_ARRAY_NAME,
+                                        String.format("%s%s %s", groupName, opt, state.id().id().toUpperCase())));
                     }
                 }
             }
