diff --git a/core/api/src/main/java/org/onlab/onos/net/DefaultHost.java b/core/api/src/main/java/org/onlab/onos/net/DefaultHost.java
index 09829fe..f1ec27e 100644
--- a/core/api/src/main/java/org/onlab/onos/net/DefaultHost.java
+++ b/core/api/src/main/java/org/onlab/onos/net/DefaultHost.java
@@ -10,6 +10,7 @@
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 /**
  * A basic implementation of a Host.
@@ -17,12 +18,12 @@
 public class DefaultHost extends AbstractElement implements Host {
 
     private final MACAddress mac;
-    private final short vlan;
+    private final VLANID vlan;
     private final HostLocation location;
     private final Set<IPAddress> ips;
 
-    public DefaultHost(ProviderId providerId, ElementId id, MACAddress mac,
-            short vlan, HostLocation loc, Set<IPAddress> ips) {
+    public DefaultHost(ProviderId providerId, HostId id, MACAddress mac,
+            VLANID vlan, HostLocation loc, Set<IPAddress> ips) {
         super(providerId, id);
         this.mac = mac;
         this.vlan = vlan;
@@ -51,7 +52,7 @@
     }
 
     @Override
-    public short vlan() {
+    public VLANID vlan() {
         return vlan;
     }
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/Host.java b/core/api/src/main/java/org/onlab/onos/net/Host.java
index 55c13cd..b56c2f9 100644
--- a/core/api/src/main/java/org/onlab/onos/net/Host.java
+++ b/core/api/src/main/java/org/onlab/onos/net/Host.java
@@ -2,6 +2,7 @@
 
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 import java.util.Set;
 
@@ -30,7 +31,7 @@
      *
      * @return VLAN ID value
      */
-    short vlan();
+    VLANID vlan();
 
     /**
      * Returns set of IP addresses currently bound to the host MAC address.
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/DefaultHostDescription.java b/core/api/src/main/java/org/onlab/onos/net/host/DefaultHostDescription.java
index 2acdc75..ea68b53 100644
--- a/core/api/src/main/java/org/onlab/onos/net/host/DefaultHostDescription.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/DefaultHostDescription.java
@@ -8,17 +8,18 @@
 import org.onlab.onos.net.HostLocation;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 import com.google.common.collect.ImmutableSet;
 
 public class DefaultHostDescription implements HostDescription {
 
     private final MACAddress mac;
-    private final short vlan;
+    private final VLANID vlan;
     private final HostLocation location;
     private final Set<IPAddress> ips;
 
-    public DefaultHostDescription(MACAddress mac, short vlan,
+    public DefaultHostDescription(MACAddress mac, VLANID vlan,
             HostLocation loc, Set<IPAddress> ips) {
         this.mac = mac;
         this.vlan = vlan;
@@ -32,7 +33,7 @@
     }
 
     @Override
-    public short vlan() {
+    public VLANID vlan() {
         return vlan;
     }
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java b/core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
index 6b0831c..313a403 100644
--- a/core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
@@ -6,6 +6,7 @@
 import org.onlab.onos.net.HostLocation;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 /**
  * Information describing host and its location.
@@ -24,7 +25,7 @@
      *
      * @return the VLAN ID value
      */
-    short vlan();
+    VLANID vlan();
 
     /**
      * Returns the location of the host on the network edge.
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/HostService.java b/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
index b4f5b1f..1a94471 100644
--- a/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
@@ -6,6 +6,7 @@
 import org.onlab.onos.net.HostId;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 import java.util.Set;
 
@@ -43,7 +44,7 @@
      * @return set of hosts in the given vlan id
      */
     // FIXME: change long to VLanId
-    Set<Host> getHostsByVlan(long vlanId);
+    Set<Host> getHostsByVlan(VLANID vlanId);
 
     /**
      * Returns the set of hosts that have the specified MAC address.
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManager.java
index 0bb291f1..3032ac9 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManager.java
@@ -23,6 +23,7 @@
 import org.onlab.onos.net.provider.AbstractProviderService;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 import org.slf4j.Logger;
 
 import java.util.Set;
@@ -85,7 +86,7 @@
     }
 
     @Override
-    public Set<Host> getHostsByVlan(long vlanId) {
+    public Set<Host> getHostsByVlan(VLANID vlanId) {
         return store.getHosts(vlanId);
     }
 
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostStore.java
index 96dce86..2f9eb29 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostStore.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/host/impl/SimpleHostStore.java
@@ -21,6 +21,7 @@
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
+import org.onlab.packet.VLANID;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableSet;
@@ -149,10 +150,10 @@
      * @param vlanId vlan id
      * @return set of hosts in the vlan
      */
-    Set<Host> getHosts(long vlanId) {
+    Set<Host> getHosts(VLANID vlanId) {
         Set<Host> vlanset = new HashSet<Host>();
         for (Host h : hosts.values()) {
-            if (h.vlan() == vlanId) {
+            if (h.vlan().equals(vlanId)) {
                 vlanset.add(h);
             }
         }
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPAddress.java b/utils/misc/src/main/java/org/onlab/packet/IPAddress.java
index 958b33f..f7b19dc 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPAddress.java
@@ -10,7 +10,7 @@
     //IP Versions
     public enum Version { INET, INET6 };
 
-    //lengths of addresses, in bytes
+    //lengths of address, in bytes
     public static final int INET_LEN = 4;
     public static final int INET6_LEN = 6;
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/VLANID.java b/utils/misc/src/main/java/org/onlab/packet/VLANID.java
new file mode 100644
index 0000000..68774e3
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/packet/VLANID.java
@@ -0,0 +1,41 @@
+package org.onlab.packet;
+
+/**
+ * Representation of a VLAN ID.
+ */
+public class VLANID {
+    // A VLAN ID is 12 bits, short is close
+    private final short value;
+
+    public VLANID(short value) {
+        this.value = value;
+    }
+
+    public short toShort() {
+        return this.value;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (obj instanceof VLANID) {
+            return true;
+        }
+
+        VLANID other = (VLANID) obj;
+        if (this.value == other.value) {
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return this.value;
+    }
+}
+
