diff --git a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/FlowClassifierInstallerImpl.java b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/FlowClassifierInstallerImpl.java
index dbae14c..ec12553 100644
--- a/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/FlowClassifierInstallerImpl.java
+++ b/apps/vtn/sfcmgr/src/main/java/org/onosproject/sfc/installer/impl/FlowClassifierInstallerImpl.java
@@ -223,19 +223,19 @@
                 // Send the packet to controller
                 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
                 treatment.setOutput(PortNumber.CONTROLLER);
-                sendServiceFunctionClassifier(selector, treatment, deviceId, type);
+                sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
             } else if (deviceId.equals(deviceIdfromPortPair)) {
                 // classifier and source device are in the same OVS. So directly send packet to first port pair
                 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort,
                                                                           nshSpiId, flowClassifier, true);
                 // Build forwarding objective and send to OVS.
-                sendServiceFunctionClassifier(selector, treatment, deviceId, type);
+                sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
             } else {
                 // classifier and source device are not in the same OVS. Send packet on vlan Tunnel
                 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort,
                                                                           nshSpiId, flowClassifier, false);
                 // Build forwarding objective and send to OVS.
-                sendServiceFunctionClassifier(selector, treatment, deviceId, type);
+                sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
 
                 // At the other device get the packet from vlan and send to first port pair
                 TrafficSelector.Builder selectorDst = DefaultTrafficSelector.builder();
@@ -244,7 +244,8 @@
                 TrafficTreatment.Builder treatmentDst = DefaultTrafficTreatment.builder();
                 Host hostDst = hostService.getHost(HostId.hostId(srcMacAddress));
                 treatmentDst.setOutput(hostDst.location().port());
-                sendServiceFunctionClassifier(selectorDst, treatmentDst, deviceIdfromPortPair, type);
+                sendServiceFunctionClassifier(selectorDst, treatmentDst, deviceIdfromPortPair, type,
+                                              flowClassifier.priority());
             }
         }
         return host.location();
@@ -383,14 +384,15 @@
      * @param treatment traffic treatment
      * @param deviceId device id
      * @param type operation type
+     * @param priority priority of classifier
      */
     public void sendServiceFunctionClassifier(TrafficSelector.Builder selector, TrafficTreatment.Builder treatment,
-                                              DeviceId deviceId, Objective.Operation type) {
+                                              DeviceId deviceId, Objective.Operation type, int priority) {
         log.info("Sending flow to service function classifier. Selector {}, Treatment {}",
                  selector.toString(), treatment.toString());
         ForwardingObjective.Builder objective = DefaultForwardingObjective.builder().withTreatment(treatment.build())
                 .withSelector(selector.build()).fromApp(appId).makePermanent().withFlag(Flag.VERSATILE)
-                .withPriority(FLOW_CLASSIFIER_PRIORITY);
+                .withPriority(priority);
 
         if (type.equals(Objective.Operation.ADD)) {
             log.debug("flowClassifierRules-->ADD");
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
index fc360d8..4f3a5a0 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
@@ -34,6 +34,7 @@
     private final String description;
     private final String etherType;
     private final String protocol;
+    private final int priority;
     private final int minSrcPortRange;
     private final int maxSrcPortRange;
     private final int minDstPortRange;
@@ -47,6 +48,7 @@
     private static final String TENANT_ID_NOT_NULL = "Tenant id can not be null.";
     private static final String NAME_NOT_NULL = "Name can not be null.";
     private static final String ETHER_TYPE_NOT_NULL = "Ether Type can not be null.";
+    private static final int DEFAULT_CLASSIFIER_PRIORITY = 0xFFFF;
 
     /**
      * Constructor to create default flow classifier.
@@ -57,6 +59,7 @@
      * @param description           flow classifier description
      * @param etherType             etherType
      * @param protocol              IP protocol
+     * @param priority              priority for classification
      * @param minSrcPortRange       Minimum Source port range
      * @param maxSrcPortRange       Maximum Source port range
      * @param minDstPortRange       Minimum destination port range
@@ -67,15 +70,17 @@
      * @param dstPort               destination VirtualPort
      */
     private DefaultFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name,
-            String description, String etherType, String protocol, int minSrcPortRange, int maxSrcPortRange,
-            int minDstPortRange, int maxDstPortRange, IpPrefix srcIpPrefix, IpPrefix dstIpPrefix,
-            VirtualPortId srcPort, VirtualPortId dstPort) {
+                                  String description, String etherType, String protocol, int priority,
+                                  int minSrcPortRange, int maxSrcPortRange, int minDstPortRange, int maxDstPortRange,
+                                  IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, VirtualPortId srcPort,
+                                  VirtualPortId dstPort) {
         this.flowClassifierId = flowClassifierId;
         this.tenantId = tenantId;
         this.name = name;
         this.description = description;
         this.etherType = etherType;
         this.protocol = protocol;
+        this.priority = priority;
         this.minSrcPortRange = minSrcPortRange;
         this.maxSrcPortRange = maxSrcPortRange;
         this.minDstPortRange = minDstPortRange;
@@ -117,6 +122,11 @@
     }
 
     @Override
+    public int priority() {
+        return priority;
+    }
+
+    @Override
     public int minSrcPortRange() {
         return minSrcPortRange;
     }
@@ -169,6 +179,8 @@
         private String etherType;
         private String protocol;
         private boolean isProtocolSet = false;
+        private int priority;
+        private boolean isPrioritySet = false;
         private int minSrcPortRange;
         private boolean isMinSrcPortRangeSet = false;
         private int maxSrcPortRange;
@@ -195,6 +207,7 @@
             checkNotNull(etherType, ETHER_TYPE_NOT_NULL);
             String description = null;
             String protocol = null;
+            int priority = DEFAULT_CLASSIFIER_PRIORITY;
             int minSrcPortRange = NULL_PORT;
             int maxSrcPortRange = NULL_PORT;
             int minDstPortRange = NULL_PORT;
@@ -210,6 +223,9 @@
             if (isProtocolSet) {
                 protocol = this.protocol;
             }
+            if (isPrioritySet) {
+                priority = this.priority;
+            }
             if (isMinSrcPortRangeSet) {
                 minSrcPortRange = this.minSrcPortRange;
             }
@@ -236,8 +252,8 @@
             }
 
             return new DefaultFlowClassifier(flowClassifierId, tenantId, name, description, etherType, protocol,
-                    minSrcPortRange, maxSrcPortRange, minDstPortRange, maxDstPortRange, srcIpPrefix, dstIpPrefix,
-                    srcPort, dstPort);
+                                             priority, minSrcPortRange, maxSrcPortRange, minDstPortRange,
+                                             maxDstPortRange, srcIpPrefix, dstIpPrefix, srcPort, dstPort);
         }
 
         @Override
@@ -279,6 +295,13 @@
         }
 
         @Override
+        public Builder setPriority(int priority) {
+            this.priority = priority;
+            this.isPrioritySet = true;
+            return this;
+        }
+
+        @Override
         public Builder setMinSrcPortRange(int minSrcPortRange) {
             this.minSrcPortRange = minSrcPortRange;
             this.isMinSrcPortRangeSet = true;
@@ -354,6 +377,7 @@
                     && Objects.equals(this.description, other.description)
                     && Objects.equals(this.etherType, other.etherType)
                     && Objects.equals(this.protocol, other.protocol)
+                    && Objects.equals(this.priority, other.priority)
                     && Objects.equals(this.minSrcPortRange, other.minSrcPortRange)
                     && Objects.equals(this.maxSrcPortRange, other.maxSrcPortRange)
                     && Objects.equals(this.minDstPortRange, other.minDstPortRange)
@@ -375,6 +399,7 @@
                 && Objects.equals(this.description, flowClassifier.description())
                 && Objects.equals(this.etherType, flowClassifier.etherType())
                 && Objects.equals(this.protocol, flowClassifier.protocol())
+                && Objects.equals(this.priority, flowClassifier.priority())
                 && Objects.equals(this.minSrcPortRange, flowClassifier.minSrcPortRange())
                 && Objects.equals(this.maxSrcPortRange, flowClassifier.maxSrcPortRange())
                 && Objects.equals(this.minDstPortRange, flowClassifier.minDstPortRange())
@@ -394,6 +419,7 @@
                 .add("Description", description)
                 .add("String", etherType)
                 .add("Protocol", protocol)
+                .add("Priority", priority)
                 .add("MinSrcPortRange", minSrcPortRange)
                 .add("MaxSrcPortRange", maxSrcPortRange)
                 .add("MinDstPortRange", minDstPortRange)
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
index 26bf718..8903253 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
@@ -68,6 +68,13 @@
     String protocol();
 
     /**
+     * Returns priority.
+     *
+     * @return priority
+     */
+    int priority();
+
+    /**
      * Returns minimum source port range.
      *
      * @return minimum source port range
@@ -193,6 +200,14 @@
         Builder setProtocol(String protocol);
 
         /**
+         * Sets priority.
+         *
+         * @param priority priority
+         * @return builder object by setting priority
+         */
+        Builder setPriority(int priority);
+
+        /**
          * Set minimum source port range.
          *
          * @param minRange minimum source port range
diff --git a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
index d312e80..fea2326 100644
--- a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
+++ b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
@@ -46,6 +46,7 @@
         final String description = "FlowClassifier1";
         final String ethType = "IPv4";
         final String protocol = "tcp";
+        final int priority = 65535;
         final int minSrcPortRange = 5;
         final int maxSrcPortRange = 10;
         final int minDstPortRange = 5;
@@ -60,22 +61,25 @@
         DefaultFlowClassifier.Builder flowClassifierBuilder = new DefaultFlowClassifier.Builder();
         final FlowClassifier flowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
                 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
-                .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
-                .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
-                .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+                .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
+                .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
+                .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
+                .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
 
         flowClassifierBuilder = new DefaultFlowClassifier.Builder();
         final FlowClassifier sameAsFlowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
                 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
-                .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
-                .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
-                .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+                .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
+                .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
+                .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
+                .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
 
         // Create different classifier object.
         final String name2 = "FlowClassifier2";
         final String description2 = "FlowClassifier2";
         final String ethType2 = "IPv6";
         final String protocol2 = "udp";
+        final int priority2 = 50000;
         final int minSrcPortRange2 = 5;
         final int maxSrcPortRange2 = 10;
         final int minDstPortRange2 = 5;
@@ -92,7 +96,8 @@
                 .setTenantId(tenantId2).setName(name2).setDescription(description2).setEtherType(ethType2)
                 .setProtocol(protocol2).setMinSrcPortRange(minSrcPortRange2).setMaxSrcPortRange(maxSrcPortRange2)
                 .setMinDstPortRange(minDstPortRange2).setMaxDstPortRange(maxDstPortRange2).setSrcIpPrefix(srcIpPrefix2)
-                .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2).build();
+                .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2)
+                .setPriority(priority2).build();
 
         new EqualsTester().addEqualityGroup(flowClassifier1, sameAsFlowClassifier1).addEqualityGroup(flowClassifier2)
                 .testEquals();
@@ -107,6 +112,7 @@
         final String description = "FlowClassifier";
         final String ethType = "IPv4";
         final String protocol = "tcp";
+        final int priority = 30000;
         final int minSrcPortRange = 5;
         final int maxSrcPortRange = 10;
         final int minDstPortRange = 5;
@@ -123,7 +129,8 @@
                 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
                 .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
                 .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
-                .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+                .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort)
+                .setPriority(priority).build();
 
         assertThat(flowClassifierId, is(flowClassifier.flowClassifierId()));
         assertThat(tenantId, is(flowClassifier.tenantId()));
@@ -131,6 +138,7 @@
         assertThat(description, is(flowClassifier.description()));
         assertThat(ethType, is(flowClassifier.etherType()));
         assertThat(protocol, is(flowClassifier.protocol()));
+        assertThat(priority, is(flowClassifier.priority()));
         assertThat(minSrcPortRange, is(flowClassifier.minSrcPortRange()));
         assertThat(maxSrcPortRange, is(flowClassifier.maxSrcPortRange()));
         assertThat(minDstPortRange, is(flowClassifier.minDstPortRange()));
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 412cefe..94e02db 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
@@ -40,6 +40,7 @@
     private static final String DESCRIPTION = "description";
     private static final String ETHER_TYPE = "ethertype";
     private static final String PROTOCOL = "protocol";
+    private static final String PRIORITY = "priority";
     private static final String MIN_SRC_PORT_RANGE = "source_port_range_min";
     private static final String MAX_SRC_PORT_RANGE = "source_port_range_max";
     private static final String MIN_DST_PORT_RANGE = "destination_port_range_min";
@@ -79,6 +80,9 @@
             resultBuilder.setProtocol(protocol);
         }
 
+        int priority = (json.get(PRIORITY)).asInt();
+        resultBuilder.setPriority(priority);
+
         int minSrcPortRange = (json.get(MIN_SRC_PORT_RANGE)).asInt();
         resultBuilder.setMinSrcPortRange(minSrcPortRange);
 
@@ -123,6 +127,7 @@
                 .put(DESCRIPTION, flowClassifier.description())
                 .put(ETHER_TYPE, flowClassifier.etherType())
                 .put(PROTOCOL, flowClassifier.protocol())
+                .put(PRIORITY, flowClassifier.priority())
                 .put(MIN_SRC_PORT_RANGE, flowClassifier.minSrcPortRange())
                 .put(MAX_SRC_PORT_RANGE, flowClassifier.maxSrcPortRange())
                 .put(MIN_DST_PORT_RANGE, flowClassifier.minDstPortRange())
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java
index 673e088..b21a80f 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java
@@ -65,8 +65,9 @@
     VirtualPortId dstPortId1 = VirtualPortId.portId("aef3478a-4a56-2a6e-cd3a-9dee4e2ec345");
 
     final MockFlowClassifier flowClassifier1 = new MockFlowClassifier(flowClassifierId1, tenantId1, "flowClassifier1",
-                                                                      "Mock flow classifier", "IPv4", "IP", 1001, 1500,
-                                                                      5001, 6000, IpPrefix.valueOf("1.1.1.1/16"),
+                                                                      "Mock flow classifier", "IPv4", "IP", 10000,
+                                                                      1001, 1500, 5001, 6000,
+                                                                      IpPrefix.valueOf("1.1.1.1/16"),
                                                                       IpPrefix.valueOf("22.12.34.45/16"),
                                                                       srcPortId1, dstPortId1);
 
@@ -81,6 +82,7 @@
         private final String description;
         private final String etherType;
         private final String protocol;
+        private final int priority;
         private final int minSrcPortRange;
         private final int maxSrcPortRange;
         private final int minDstPortRange;
@@ -91,15 +93,17 @@
         private final VirtualPortId dstPort;
 
         public MockFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name,
-                                  String description, String etherType, String protocol, int minSrcPortRange,
-                                  int maxSrcPortRange, int minDstPortRange, int maxDstPortRange, IpPrefix srcIpPrefix,
-                                  IpPrefix dstIpPrefix, VirtualPortId srcPort, VirtualPortId dstPort) {
+                                  String description, String etherType, String protocol, int priority,
+                                  int minSrcPortRange, int maxSrcPortRange, int minDstPortRange, int maxDstPortRange,
+                                  IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, VirtualPortId srcPort,
+                                  VirtualPortId dstPort) {
             this.flowClassifierId = flowClassifierId;
             this.tenantId = tenantId;
             this.name = name;
             this.description = description;
             this.etherType = etherType;
             this.protocol = protocol;
+            this.priority = priority;
             this.minSrcPortRange = minSrcPortRange;
             this.maxSrcPortRange = maxSrcPortRange;
             this.minDstPortRange = minDstPortRange;
@@ -142,6 +146,11 @@
         }
 
         @Override
+        public int priority() {
+            return priority;
+        }
+
+        @Override
         public int minSrcPortRange() {
             return minSrcPortRange;
         }
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/web/FlowClassifierCodecTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/web/FlowClassifierCodecTest.java
index 6daec8a..ea28613 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/web/FlowClassifierCodecTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/web/FlowClassifierCodecTest.java
@@ -89,6 +89,7 @@
         assertThat(flowClassifier.tenantId().toString(), is(tenantId.toString()));
         assertThat(flowClassifier.description(), is("flow classifier"));
         assertThat(flowClassifier.protocol(), is("tcp"));
+        assertThat(flowClassifier.priority(), is(65535));
         assertThat(flowClassifier.minSrcPortRange(), is(22));
         assertThat(flowClassifier.maxSrcPortRange(), is(4000));
         assertThat(flowClassifier.minDstPortRange(), is(80));
diff --git a/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/resources/post-FlowClassifier.json b/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/resources/post-FlowClassifier.json
index 6e72e8f..5ed095d 100644
--- a/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/resources/post-FlowClassifier.json
+++ b/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/resources/post-FlowClassifier.json
@@ -5,6 +5,7 @@
     "description": "flow classifier",
     "ethertype": "IPv4",
     "protocol": "tcp",
+    "priority": 10000,
     "source_port_range_min": 22, "source_port_range_max": 4000,
     "destination_port_range_min": 80, "destination_port_range_max": 80,
     "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16",
diff --git a/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/web/flowClassifier.json b/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/web/flowClassifier.json
index 0fc0b74..3fd5ac9 100644
--- a/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/web/flowClassifier.json
+++ b/apps/vtn/vtnweb/src/test/resources/org/onosproject/vtnweb/web/flowClassifier.json
@@ -5,6 +5,7 @@
     "description": "flow classifier",
     "ethertype": "IPv4",
     "protocol": "tcp",
+    "priority": 65535,
     "source_port_range_min": 22, "source_port_range_max": 4000,
     "destination_port_range_min": 80, "destination_port_range_max": 80,
     "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16"
