diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainDeviceMapWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainDeviceMapWebResource.java
new file mode 100644
index 0000000..b391ae4
--- /dev/null
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainDeviceMapWebResource.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2014-2015 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.vtnweb.resources;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsNotFound;
+
+import java.util.Set;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.rest.AbstractWebResource;
+import org.onosproject.vtnrsc.LoadBalanceId;
+import org.onosproject.vtnrsc.PortChain;
+import org.onosproject.vtnrsc.PortChainId;
+import org.onosproject.vtnrsc.portchain.PortChainService;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Query and program port chain.
+ */
+
+@Path("portChainDeviceMap")
+public class PortChainDeviceMapWebResource extends AbstractWebResource {
+
+    public static final String PORT_CHAIN_NOT_FOUND = "Port chain not found";
+    public static final String PORT_CHAIN_ID_EXIST = "Port chain exists";
+    public static final String PORT_CHAIN_ID_NOT_EXIST = "Port chain does not exist with identifier";
+
+    private static final String NAME = "name";
+    private static final String ID = "id";
+    private static final String CLASSIFIERS = "classifiers";
+    private static final String FORWARDERS = "forwarders";
+    private static final String LOADBALANCEID = "loadBalanceId";
+
+    /**
+     * Get details of a specified port chain id.
+     *
+     * @param id port chain id
+     * @return 200 OK, 404 if given identifier does not exist
+     */
+    @GET
+    @Path("{chain_id}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response getPortChainDeviceMap(@PathParam("chain_id") String id) {
+
+        PortChain portChain = nullIsNotFound(get(PortChainService.class).getPortChain(PortChainId.of(id)),
+                                             PORT_CHAIN_NOT_FOUND);
+        ObjectNode result = mapper().createObjectNode();
+        result.set("portChainDeviceMap", encode(portChain, this));
+
+        return ok(result.toString()).build();
+    }
+
+    private ObjectNode encode(PortChain portChain, CodecContext context) {
+        checkNotNull(portChain, "portChain cannot be null");
+        ObjectNode result = context.mapper().createObjectNode();
+        result.put(ID, portChain.portChainId().toString())
+        .put(NAME, portChain.name());
+
+        Set<LoadBalanceId> loadBalanceIds = portChain.getLoadBalancePathMapKeys();
+        for (LoadBalanceId id : loadBalanceIds) {
+            result.put(LOADBALANCEID, id.toString())
+            .put(CLASSIFIERS, portChain.getSfcClassifiers(id).toString())
+            .put(FORWARDERS, portChain.getSfcForwarders(id).toString());
+        }
+        return result;
+    }
+}
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainSfMapWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainSfMapWebResource.java
new file mode 100644
index 0000000..b644786
--- /dev/null
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainSfMapWebResource.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2016-present 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.vtnweb.resources;
+
+import static org.onlab.util.Tools.nullIsNotFound;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.onosproject.rest.AbstractWebResource;
+import org.onosproject.vtnrsc.PortChainId;
+import org.onosproject.vtnrsc.ServiceFunctionGroup;
+import org.onosproject.vtnrsc.portchainsfmap.PortChainSfMapService;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Query service function and load details by port chain.
+ */
+
+@Path("portChainSfMap")
+public class PortChainSfMapWebResource extends AbstractWebResource {
+
+    public static final String PORT_CHAIN_NOT_FOUND = "Port chain not found";
+    public static final String PORT_CHAIN_ID_EXIST = "Port chain exists";
+    public static final String PORT_CHAIN_ID_NOT_EXIST = "Port chain does not exist with identifier";
+
+    /**
+     * Get service function details of a specified port chain id.
+     *
+     * @param id port chain id
+     * @return 200 OK, 404 if given identifier does not exist
+     */
+    @GET
+    @Path("{chainId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response getPortChainSfMap(@PathParam("chainId") String id) {
+
+        Iterable<ServiceFunctionGroup> serviceFunctionGroups = nullIsNotFound(get(PortChainSfMapService.class)
+                .getServiceFunctions(PortChainId.of(id)),
+                                                                              PORT_CHAIN_NOT_FOUND);
+        ObjectNode result = mapper().createObjectNode();
+        ArrayNode portChainSfMap = result.putArray("portChainSfMap");
+        if (serviceFunctionGroups != null) {
+            for (final ServiceFunctionGroup serviceFunctionGroup : serviceFunctionGroups) {
+                portChainSfMap.add(codec(ServiceFunctionGroup.class).encode(serviceFunctionGroup, this));
+            }
+        }
+        return ok(result.toString()).build();
+    }
+}
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
index f22f6df..142be79 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
@@ -35,7 +35,9 @@
                           PortPairWebResource.class,
                           FloatingIpWebResource.class,
                           RouterWebResource.class,
-                          ClassifierWebResource.class);
+                          ClassifierWebResource.class,
+                          PortChainSfMapWebResource.class,
+                          PortChainDeviceMapWebResource.class);
     }
 }
 
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/FlowClassifierCodec.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/FlowClassifierCodec.java
index 94e02db..e4d4b93 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/FlowClassifierCodec.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/FlowClassifierCodec.java
@@ -80,8 +80,10 @@
             resultBuilder.setProtocol(protocol);
         }
 
-        int priority = (json.get(PRIORITY)).asInt();
-        resultBuilder.setPriority(priority);
+        if (json.get(PRIORITY) != null && !(json.get(PRIORITY)).asText().equals("null")) {
+            int priority = (json.get(PRIORITY)).asInt();
+            resultBuilder.setPriority(priority);
+        }
 
         int minSrcPortRange = (json.get(MIN_SRC_PORT_RANGE)).asInt();
         resultBuilder.setMinSrcPortRange(minSrcPortRange);
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/ServiceFunctionCodec.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/ServiceFunctionCodec.java
new file mode 100644
index 0000000..f847b10
--- /dev/null
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/ServiceFunctionCodec.java
@@ -0,0 +1,44 @@
+/*
+ * 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.vtnweb.web;
+
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.ServiceFunctionGroup;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Service function JSON codec.
+ */
+public final class ServiceFunctionCodec extends JsonCodec<ServiceFunctionGroup> {
+
+    private static final String NAME = "name";
+    private static final String DESCRIPTION = "description";
+    private static final String PORT_PAIR_LOAD = "port_pair_load";
+    @Override
+    public ObjectNode encode(ServiceFunctionGroup serviceFunction, CodecContext context) {
+        checkNotNull(serviceFunction, "service cannot be null");
+        ObjectNode result = context.mapper().createObjectNode()
+                .put(NAME, serviceFunction.name())
+                .put(DESCRIPTION, serviceFunction.description())
+                .put(PORT_PAIR_LOAD, serviceFunction.portPairLoadMap().toString());
+        return result;
+    }
+}
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/VtnCodecRegistrator.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/VtnCodecRegistrator.java
index 3330c25..84ac4a8 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/VtnCodecRegistrator.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/VtnCodecRegistrator.java
@@ -25,6 +25,7 @@
 import org.onosproject.vtnrsc.PortChain;
 import org.onosproject.vtnrsc.PortPair;
 import org.onosproject.vtnrsc.PortPairGroup;
+import org.onosproject.vtnrsc.ServiceFunctionGroup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +46,7 @@
         codecService.registerCodec(PortPairGroup.class, new PortPairGroupCodec());
         codecService.registerCodec(FlowClassifier.class, new FlowClassifierCodec());
         codecService.registerCodec(PortChain.class, new PortChainCodec());
-
+        codecService.registerCodec(ServiceFunctionGroup.class, new ServiceFunctionCodec());
         log.info("Started");
     }
 
