diff --git a/apps/onos-app-dhcp/src/main/java/org/onosproject/dhcp/cli/DHCPSetStaticMapping.java b/apps/onos-app-dhcp/src/main/java/org/onosproject/dhcp/cli/DHCPSetStaticMapping.java
new file mode 100644
index 0000000..3f2ad29
--- /dev/null
+++ b/apps/onos-app-dhcp/src/main/java/org/onosproject/dhcp/cli/DHCPSetStaticMapping.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014 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.dhcp.cli;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.MacAddress;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.dhcp.DHCPService;
+
+/**
+ * Registers a static MAC Address to IP Mapping with the DHCP Server.
+ */
+@Command(scope = "onos", name = "dhcp-set-static-mapping",
+        description = "Registers a static MAC Address to IP Mapping with the DHCP Server")
+public class DHCPSetStaticMapping extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "macAddr",
+            description = "MAC Address of the client",
+            required = true, multiValued = false)
+    String macAddr = null;
+
+    @Argument(index = 1, name = "ipAddr",
+            description = "IP Address requested for static mapping",
+            required = true, multiValued = false)
+    String ipAddr = null;
+
+    private static final String DHCP_SUCCESS = "Static Mapping Successfully Added.";
+    private static final String DHCP_FAILURE = "Static Mapping Failed. The IP maybe unavailable.";
+    @Override
+    protected void execute() {
+        DHCPService dhcpService = AbstractShellCommand.get(DHCPService.class);
+
+        try {
+            MacAddress macID = MacAddress.valueOf(macAddr);
+            Ip4Address ipAddress = Ip4Address.valueOf(ipAddr);
+            if (dhcpService.setStaticMapping(macID, ipAddress)) {
+                print(DHCP_SUCCESS);
+            } else {
+                print(DHCP_FAILURE);
+            }
+
+        } catch (IllegalArgumentException e) {
+            print(e.getMessage());
+        }
+    }
+}
