diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifierId.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifierId.java
index b789abe..df180eb 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifierId.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifierId.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.vtnrsc;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.MoreObjects;
 
 import java.util.UUID;
@@ -33,6 +35,7 @@
      * @param flowClassifierId flow classifier id.
      */
     private FlowClassifierId(final UUID flowClassifierId) {
+        checkNotNull(flowClassifierId, "Flow classifier id can not be null");
         this.flowClassifierId = flowClassifierId;
     }
 
@@ -42,7 +45,7 @@
      * @param flowClassifierId flow classifier id
      * @return new flow classifier id
      */
-    public static FlowClassifierId flowClassifierId(final UUID flowClassifierId) {
+    public static FlowClassifierId of(final UUID flowClassifierId) {
         return new FlowClassifierId(flowClassifierId);
     }
 
@@ -52,7 +55,7 @@
      * @param flowClassifierId flow classifier id
      * @return new flow classifier id
      */
-    public static FlowClassifierId flowClassifierId(final String flowClassifierId) {
+    public static FlowClassifierId of(final String flowClassifierId) {
         return new FlowClassifierId(UUID.fromString(flowClassifierId));
     }
 
diff --git a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierIdTest.java b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierIdTest.java
index b2fed34..4f52183 100644
--- a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierIdTest.java
+++ b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierIdTest.java
@@ -32,11 +32,11 @@
 public class FlowClassifierIdTest {
 
     final FlowClassifierId flowClassifierId1 = FlowClassifierId
-            .flowClassifierId("78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae");
+            .of("78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae");
     final FlowClassifierId sameAsFlowClassifierId1 = FlowClassifierId
-            .flowClassifierId("78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae");
+            .of("78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae");
     final FlowClassifierId flowClassifierId2 = FlowClassifierId
-            .flowClassifierId("dace4513-24fc-4fae-af4b-321c5e2eb3d1");
+            .of("dace4513-24fc-4fae-af4b-321c5e2eb3d1");
 
     /**
      * Checks that the FlowClassifierId class is immutable.
@@ -61,7 +61,7 @@
     @Test
     public void testConstruction() {
         final String flowClassifierIdValue = "dace4513-24fc-4fae-af4b-321c5e2eb3d1";
-        final FlowClassifierId flowClassifierId = FlowClassifierId.flowClassifierId(flowClassifierIdValue);
+        final FlowClassifierId flowClassifierId = FlowClassifierId.of(flowClassifierIdValue);
         assertThat(flowClassifierId, is(notNullValue()));
         assertThat(flowClassifierId.value(), is(UUID.fromString(flowClassifierIdValue)));
     }
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
index f0a31a9..b5b8252 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
@@ -82,11 +82,11 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response getFlowClassifier(@PathParam("flow_id") String id) {
 
-        if (!service.hasFlowClassifier(FlowClassifierId.flowClassifierId(UUID.fromString(id)))) {
+        if (!service.hasFlowClassifier(FlowClassifierId.of(UUID.fromString(id)))) {
             return Response.status(NOT_FOUND).entity(FLOW_CLASSIFIER_NOT_FOUND).build();
         }
         FlowClassifier flowClassifier = nullIsNotFound(
-                service.getFlowClassifier(FlowClassifierId.flowClassifierId(UUID.fromString(id))),
+                service.getFlowClassifier(FlowClassifierId.of(UUID.fromString(id))),
                 FLOW_CLASSIFIER_NOT_FOUND);
 
         ObjectNode result = new ObjectMapper().createObjectNode();
@@ -182,7 +182,7 @@
     @DELETE
     public Response deleteFlowClassifier(@PathParam("flow_id") String id) throws IOException {
         try {
-            FlowClassifierId flowClassifierId = FlowClassifierId.flowClassifierId(UUID.fromString(id));
+            FlowClassifierId flowClassifierId = FlowClassifierId.of(UUID.fromString(id));
             service.removeFlowClassifier(flowClassifierId);
             return Response.status(201).entity("SUCCESS").build();
         } catch (Exception e) {
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 7460d2e..4c17633 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
@@ -62,7 +62,7 @@
 
         String flowClassifierId = nullIsIllegal(json.get(FLOW_CLASSIFIER_ID),
                 FLOW_CLASSIFIER_ID + MISSING_MEMBER_MESSAGE).asText();
-        resultBuilder.setFlowClassifierId(FlowClassifierId.flowClassifierId(UUID.fromString(flowClassifierId)));
+        resultBuilder.setFlowClassifierId(FlowClassifierId.of(UUID.fromString(flowClassifierId)));
 
         String tenantId = nullIsIllegal(json.get(TENANT_ID), TENANT_ID + MISSING_MEMBER_MESSAGE).asText();
         resultBuilder.setTenantId(TenantId.tenantId(tenantId));
@@ -131,4 +131,4 @@
                 .put("DST_PORT", flowClassifier.dstPort().toString());
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/PortChainCodec.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/PortChainCodec.java
index 28da5cd..77706b5 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/PortChainCodec.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/web/PortChainCodec.java
@@ -83,7 +83,7 @@
         arrayNode = (ArrayNode) json.path(FLOW_CLASSIFIERS);
         if (arrayNode != null) {
             List<FlowClassifierId> list = Lists.newArrayList();
-            arrayNode.forEach(i -> list.add(FlowClassifierId.flowClassifierId(UUID.fromString(i.asText()))));
+            arrayNode.forEach(i -> list.add(FlowClassifierId.of(UUID.fromString(i.asText()))));
             resultBuilder.setFlowClassifiers(list);
         }
 
