diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/PortWaveLengthCommand.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/PortWaveLengthCommand.java
index 568df72..74173e5 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/PortWaveLengthCommand.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/cli/PortWaveLengthCommand.java
@@ -67,7 +67,7 @@
     private static final String CH_25 = "25";
     private static final String CH_50 = "50";
     private static final String CH_100 = "100";
-    public static final long BASE_FREQUENCY = 193100000;   //Working in Mhz
+    private static final long BASE_FREQUENCY = 193100000;   //Working in Mhz
 
     private static final Map<String, ChannelSpacing> CHANNEL_SPACING_MAP = ImmutableMap
             .<String, ChannelSpacing>builder()
@@ -135,7 +135,7 @@
             GridType gridType = ochPort.lambda().gridType();
             ChannelSpacing channelSpacing = ochPort.lambda().channelSpacing();
             int slotGranularity = ochPort.lambda().slotGranularity();
-            int multiplier = getMultplier(wavelength, gridType, channelSpacing, slotGranularity);
+            int multiplier = getMultplier(wavelength, gridType, channelSpacing);
             return new OchSignal(gridType, channelSpacing, multiplier, slotGranularity);
         } else {
             print("Connect point %s is not OChPort", cp);
@@ -144,7 +144,7 @@
 
     }
 
-    private int getMultplier(long wavelength, GridType gridType, ChannelSpacing channelSpacing, int slotGranularity) {
+    private int getMultplier(long wavelength, GridType gridType, ChannelSpacing channelSpacing) {
         long baseFreq;
         switch (gridType) {
             case DWDM:
diff --git a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
index d6812ba..73ea721 100644
--- a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
+++ b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
@@ -27,7 +27,6 @@
 import org.onosproject.net.Direction;
 import org.onosproject.net.ModulationScheme;
 import org.onosproject.net.OchSignal;
-import org.onosproject.net.OchSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.LambdaQuery;
@@ -348,8 +347,6 @@
 
         TrafficSelector selector = DefaultTrafficSelector.builder()
                 .add(Criteria.matchInPort(inPort))
-                .add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID))
-                .add(Criteria.matchLambda(ochSignal))
                 .build();
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                 .add(Instructions.modL0Lambda(ochSignal))
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 3a648c4..f87bb07 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
@@ -70,6 +70,8 @@
     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_SET_FREQ_REQ = "roadmSetFrequencyRequest";
+    private static final String ROADM_SET_FREQ_RESP = "roadmSetFrequencyResponse";
     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";
@@ -118,7 +120,8 @@
                 new CreateShowItemsRequestHandler(),
                 new CreateOpsModeSetRequestHandler(),
                 new SyncTargetPowerRequestHandler(),
-                new SetModulationRequestHandler()
+                new SetModulationRequestHandler(),
+                new SetFrequencyRequestHandler()
         );
     }
 
@@ -346,6 +349,34 @@
         }
     }
 
+    // Handler for setting port frequency
+    private final class SetFrequencyRequestHandler extends RequestHandler {
+
+        private static final String TARGET_FREQ_MSG = "Target frequency is %s.";
+
+        private SetFrequencyRequestHandler() {
+            super(ROADM_SET_FREQ_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 frequency = payload.get(CURR_FREQ).asText();
+            double freqThz = Double.parseDouble(frequency);
+            Frequency freq = Frequency.ofTHz(freqThz);
+            OchSignal ochSignal = RoadmUtil.createOchSignalFromWavelength(freq.asMHz(), deviceService,
+                    deviceId, portNumber);
+            roadmService.createConnection(deviceId, 100, true, 0,
+                    portNumber, portNumber, ochSignal);
+            ObjectNode rootNode = objectNode();
+            rootNode.put(ID, payload.get(ID).asText());
+            rootNode.put(RoadmUtil.VALID, frequency);
+            rootNode.put(RoadmUtil.MESSAGE, String.format(TARGET_FREQ_MSG, frequency));
+            sendMessage(ROADM_SET_FREQ_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";
diff --git a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmUtil.java b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmUtil.java
index a20b400..73a2dba 100644
--- a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmUtil.java
+++ b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmUtil.java
@@ -17,6 +17,17 @@
 
 import org.onlab.util.Frequency;
 import org.onosproject.net.Annotations;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.Port;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.optical.OchPort;
+import org.onosproject.net.optical.device.OchPortHelper;
+
+import java.util.Optional;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
 
@@ -36,6 +47,8 @@
     public static final String OPS_OPT_AUTO = "AUTOMATIC";
     public static final String OPS_OPT_FORCE = "FORCE";
     public static final String OPS_OPT_MANUAL = "MANUAL";
+    private static final long BASE_FREQUENCY = 193100000;   //Working in Mhz
+
 
     private RoadmUtil() {
     }
@@ -104,4 +117,45 @@
     public static String getAnnotation(Annotations annotations, String key) {
         return getAnnotation(annotations, key, NA);
     }
+
+    public static OchSignal createOchSignalFromWavelength(double wavelength, DeviceService deviceService,
+                                                          DeviceId deviceId, PortNumber portNumber) {
+        if (wavelength == 0L) {
+            return null;
+        }
+        Port port = deviceService.getPort(deviceId, portNumber);
+        Optional<OchPort> ochPortOpt = OchPortHelper.asOchPort(port);
+
+        if (ochPortOpt.isPresent()) {
+            OchPort ochPort = ochPortOpt.get();
+            GridType gridType = ochPort.lambda().gridType();
+            ChannelSpacing channelSpacing = ochPort.lambda().channelSpacing();
+            int slotGranularity = ochPort.lambda().slotGranularity();
+            int multiplier = getMultplier(wavelength, gridType, channelSpacing);
+            return new OchSignal(gridType, channelSpacing, multiplier, slotGranularity);
+        } else {
+            return null;
+        }
+
+    }
+
+    private static int getMultplier(double wavelength, GridType gridType, ChannelSpacing channelSpacing) {
+        long baseFreq;
+        switch (gridType) {
+            case DWDM:
+                baseFreq = BASE_FREQUENCY;
+                break;
+            case CWDM:
+            case FLEX:
+            case UNKNOWN:
+            default:
+                baseFreq = 0L;
+                break;
+        }
+        if (wavelength > baseFreq) {
+            return (int) ((wavelength - baseFreq) / (channelSpacing.frequency().asMHz()));
+        } else {
+            return (int) ((baseFreq - wavelength) / (channelSpacing.frequency().asMHz()));
+        }
+    }
 }
\ No newline at end of file
diff --git a/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.html b/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.html
index 26420ca..0385b03 100644
--- a/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.html
+++ b/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.html
@@ -97,7 +97,12 @@
                     <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH'?port.minFreq:""}}</td>
                     <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH'?port.maxFreq:""}}</td>
                     <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH'?port.grid:""}}</td>
-                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH'?port.currFreq:""}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">
+                        <form [formGroup]="freqForm" (ngSubmit)="submitFrequency(devId, port.id)" *ngIf="port.type=='OCH'">
+                            <input type="text" style="width:50px" value="{{port.type=='OCH'?port.currFreq:''}}" formControlName="newFreq" required>
+                            <button type="submit">Submit</button>
+                        </form>
+                    </td>
                     <td [ngClass]="(isDelta() ? 'delta' : '')">
                         <form [formGroup]="modulationForm" (ngSubmit)="submitModulation(devId, port.id)" *ngIf="port.type=='OCH'">
                             <select [(ngModel)]="port.modulation" formControlName="newModulation">
diff --git a/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.ts b/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.ts
index 56bd85c..9af7bf7 100644
--- a/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.ts
+++ b/apps/roadm/web/roadm-gui/projects/roadm-gui-lib/src/lib/port/port.component.ts
@@ -81,9 +81,11 @@
 
     powerForm: FormGroup;
     modulationForm: FormGroup;
+    freqForm: FormGroup;
     SET_POWER_REQ = 'roadmSetTargetPowerRequest';
     SET_POWER_RESP = 'roadmSetTargetPowerResponse';
     SET_MODULATION = 'roadmSetModulationRequest';
+    SET_FREQUENCY = 'roadmSetFrequencyRequest';
 
     restorePrefsConfig; // Function
 
@@ -135,6 +137,9 @@
         this.modulationForm = new FormGroup({
             newModulation: new FormControl(''),
         });
+        this.freqForm = new FormGroup({
+            newFreq: new FormControl(''),
+        });
         this.log.debug('Create Forms');
     }
 
@@ -223,6 +228,15 @@
         });
     }
 
+    submitFrequency(devId, port) {
+        this.log.debug('Set Frequency of port ', port, 'in device ', devId, 'as value ', this.freqForm.value['newFreq']);
+        this.wss.sendEvent(this.SET_FREQUENCY, {
+            'currFreq': this.freqForm.value['newFreq'],
+            'devId': devId,
+            'id': port,
+        });
+    }
+
     powerConfigCb(data) {
         if (!data.valid) {
             const info = 'The power config operation is failed. The reason is: \n' + data.message;
