diff --git a/core/api/src/main/java/org/onosproject/net/HostId.java b/core/api/src/main/java/org/onosproject/net/HostId.java
index 3e0d2b2..1acab00 100644
--- a/core/api/src/main/java/org/onosproject/net/HostId.java
+++ b/core/api/src/main/java/org/onosproject/net/HostId.java
@@ -79,7 +79,7 @@
         checkArgument(string.length() >= MIN_ID_LENGTH,
                       "Host ID must be at least %s characters", MIN_ID_LENGTH);
         MacAddress mac = MacAddress.valueOf(string.substring(0, MAC_LENGTH));
-        VlanId vlanId = VlanId.vlanId(Short.parseShort(string.substring(MAC_LENGTH + 1)));
+        VlanId vlanId = VlanId.vlanId(string.substring(MAC_LENGTH + 1));
         return new HostId(mac, vlanId);
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
index 2aecabd..7bf3def 100644
--- a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
+++ b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
@@ -83,7 +83,7 @@
         String cp = "16:3A:BD:6E:31:E4/-1/1";
 
         ConnectPoint connectPoint = ConnectPoint.hostConnectPoint(cp);
-        assertEquals("16:3A:BD:6E:31:E4/-1", connectPoint.hostId().toString());
+        assertEquals("16:3A:BD:6E:31:E4/None", connectPoint.hostId().toString());
         assertEquals("1", connectPoint.port().toString());
 
         expectHostParseException("");
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompilerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompilerTest.java
index ec9f3e8..8d8e505 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompilerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompilerTest.java
@@ -49,8 +49,8 @@
 public class HostToHostIntentCompilerTest extends AbstractIntentTest {
     private static final String HOST_ONE_MAC = "00:00:00:00:00:01";
     private static final String HOST_TWO_MAC = "00:00:00:00:00:02";
-    private static final String HOST_ONE_VLAN = "-1";
-    private static final String HOST_TWO_VLAN = "-1";
+    private static final String HOST_ONE_VLAN = "None";
+    private static final String HOST_TWO_VLAN = "None";
     private static final String HOST_ONE = HOST_ONE_MAC + "/" + HOST_ONE_VLAN;
     private static final String HOST_TWO = HOST_TWO_MAC + "/" + HOST_TWO_VLAN;
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/VlanId.java b/utils/misc/src/main/java/org/onlab/packet/VlanId.java
index afda7aa..d1a24f8 100644
--- a/utils/misc/src/main/java/org/onlab/packet/VlanId.java
+++ b/utils/misc/src/main/java/org/onlab/packet/VlanId.java
@@ -18,9 +18,9 @@
 import org.onlab.util.Identifier;
 
 /**
- * Representation of a VLAN ID.
+ * Representation of a VLAN identifier.
  */
-public class VlanId extends Identifier<Short> {
+public final class VlanId extends Identifier<Short> {
     // Based on convention used elsewhere? Check and change if needed
     public static final short UNTAGGED = (short) 0xffff;
 
@@ -32,30 +32,45 @@
     public static final VlanId NONE = VlanId.vlanId(UNTAGGED);
     public static final VlanId ANY = VlanId.vlanId(ANY_VALUE);
 
+    private static final String STRING_NONE = "None";
+    private static final String STRING_NUMERIC_NONE = "-1";
+    private static final String STRING_ANY = "Any";
+
     // A VLAN ID is actually 12 bits of a VLAN tag.
     public static final short MAX_VLAN = 4095;
 
-    protected VlanId() {
+    // Constructor for serialization.
+    private VlanId() {
         super(UNTAGGED);
     }
 
-    protected VlanId(short value) {
+    // Creates a VLAN identifier for the specified VLAN number.
+    private VlanId(short value) {
         super(value);
     }
 
+    /**
+     * Creates a VLAN identifier for untagged VLAN.
+     *
+     * @return VLAN identifier
+     */
     public static VlanId vlanId() {
         return new VlanId(UNTAGGED);
     }
 
+    /**
+     * Creates a VLAN identifier using the supplied VLAN identifier.
+     *
+     * @param value VLAN identifier expressed as short
+     * @return VLAN identifier
+     */
     public static VlanId vlanId(short value) {
         if (value == UNTAGGED) {
             return new VlanId();
         }
-
         if (value == ANY_VALUE) {
             return new VlanId(ANY_VALUE);
         }
-
         if (value > MAX_VLAN) {
             throw new IllegalArgumentException(
                     "value exceeds allowed maximum VLAN ID value (4095)");
@@ -63,6 +78,31 @@
         return new VlanId(value);
     }
 
+    /**
+     * Creates a VLAN identifier Object using the supplied VLAN identifier.
+     *
+     * @param value VLAN identifier expressed as string
+     * @return VLAN identifier
+     */
+    public static VlanId vlanId(String value) {
+        if (value.equals(STRING_NONE) || value.equals(STRING_NUMERIC_NONE)) {
+            return new VlanId();
+        }
+        if (value.equals(STRING_ANY)) {
+            return new VlanId(ANY_VALUE);
+        }
+        try {
+            return new VlanId(Short.parseShort(value));
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    /**
+     * Returns the backing VLAN number.
+     *
+     * @return VLAN number
+     */
     public short toShort() {
         return this.identifier;
     }
@@ -72,6 +112,9 @@
         if (this.identifier == ANY_VALUE) {
             return "Any";
         }
+        if (this.identifier == UNTAGGED) {
+            return "None";
+        }
         return String.valueOf(this.identifier);
     }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/VlanIdTest.java b/utils/misc/src/test/java/org/onlab/packet/VlanIdTest.java
index 9ec8ddd..123ae95 100644
--- a/utils/misc/src/test/java/org/onlab/packet/VlanIdTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/VlanIdTest.java
@@ -26,12 +26,14 @@
     @Test
     public void testEquality() {
 
-        VlanId vlan1 = VlanId.vlanId((short) -1);
-        VlanId vlan2 = VlanId.vlanId((short) 100);
+        VlanId vlan1 = VlanId.vlanId("None");
+        VlanId vlan2 = VlanId.vlanId((short) -1);
         VlanId vlan3 = VlanId.vlanId((short) 100);
+        VlanId vlan4 = VlanId.vlanId((short) 100);
 
         new EqualsTester().addEqualityGroup(VlanId.vlanId(), vlan1)
-        .addEqualityGroup(vlan2, vlan3)
+        .addEqualityGroup(vlan1, vlan2)
+        .addEqualityGroup(vlan3, vlan4)
         .addEqualityGroup(VlanId.vlanId((short) 10));
 
     }
@@ -41,9 +43,12 @@
         // purposefully create UNTAGGED VLAN
         VlanId vlan1 = VlanId.vlanId((short) 10);
         VlanId vlan2 = VlanId.vlanId((short) -1);
+        VlanId vlan3 = VlanId.vlanId("None");
 
         assertEquals("incorrect VLAN value", 10, vlan1.toShort());
-        assertEquals("invalid untagged value", VlanId.UNTAGGED, vlan2.toShort());
+        assertEquals("invalid untagged value", VlanId.UNTAGGED,
+                     vlan2.toShort(), vlan3.toShort());
+
     }
 
     @Test(expected = IllegalArgumentException.class)
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
index 82bff4d..f2fe3e3 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
@@ -390,7 +390,7 @@
                 .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED));
         String location = response.getLocation().getPath();
-        assertThat(location, Matchers.startsWith("/hosts/11:22:33:44:55:66/-1"));
+        assertThat(location, Matchers.startsWith("/hosts/11:22:33:44:55:66/None"));
     }
 }
 
