flowruleprovider builds flowmods
diff --git a/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java b/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
index 079ba54..db8cce0 100644
--- a/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
+++ b/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
@@ -11,12 +11,12 @@
 import org.onlab.onos.net.device.DeviceService;
 import org.onlab.onos.net.host.HostService;
 import org.onlab.onos.net.link.LinkService;
-import org.onlab.onos.net.path.PathService;
+import org.onlab.onos.net.topology.PathService;
 import org.onlab.onos.net.topology.Topology;
 import org.onlab.onos.net.topology.TopologyGraph;
 import org.onlab.onos.net.topology.TopologyService;
 import org.onlab.onos.net.topology.TopologyVertex;
-import org.onlab.packet.IPAddress;
+import org.onlab.packet.IpAddress;
 import org.onlab.rest.BaseResource;
 
 import javax.ws.rs.GET;
@@ -74,8 +74,8 @@
         // Merge the exterior and interior vertexes and inject host links as
         // the exterior edges.
         for (Host host : hostService.getHosts()) {
-            Set<IPAddress> ipAddresses = host.ipAddresses();
-            IPAddress ipAddress = ipAddresses.isEmpty() ? null : ipAddresses.iterator().next();
+            Set<IpAddress> ipAddresses = host.ipAddresses();
+            IpAddress ipAddress = ipAddresses.isEmpty() ? null : ipAddresses.iterator().next();
             String label = ipAddress != null ? ipAddress.toString() : host.mac().toString();
             vertexesNode.add(json(mapper, host.id(), 3, label, true));
             edgesNode.add(json(mapper, 1, host.location(), new ConnectPoint(host.id(), portNumber(-1))));
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 f1ec27e..ed26e14 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
@@ -8,27 +8,27 @@
 import java.util.Set;
 
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 /**
  * A basic implementation of a Host.
  */
 public class DefaultHost extends AbstractElement implements Host {
 
-    private final MACAddress mac;
-    private final VLANID vlan;
+    private final MacAddress mac;
+    private final VlanId vlan;
     private final HostLocation location;
-    private final Set<IPAddress> ips;
+    private final Set<IpAddress> ips;
 
-    public DefaultHost(ProviderId providerId, HostId id, MACAddress mac,
-            VLANID 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;
         this.location = loc;
-        this.ips = new HashSet<IPAddress>(ips);
+        this.ips = new HashSet<IpAddress>(ips);
     }
 
     @Override
@@ -37,12 +37,12 @@
     }
 
     @Override
-    public MACAddress mac() {
+    public MacAddress mac() {
         return mac;
     }
 
     @Override
-    public Set<IPAddress> ipAddresses() {
+    public Set<IpAddress> ipAddresses() {
         return Collections.unmodifiableSet(ips);
     }
 
@@ -52,7 +52,7 @@
     }
 
     @Override
-    public VLANID 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 b56c2f9..9d08591 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
@@ -1,8 +1,8 @@
 package org.onlab.onos.net;
 
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import java.util.Set;
 
@@ -24,21 +24,21 @@
      *
      * @return mac address
      */
-    MACAddress mac();
+    MacAddress mac();
 
     /**
      * Returns the VLAN ID tied to this host.
      *
      * @return VLAN ID value
      */
-    VLANID vlan();
+    VlanId vlan();
 
     /**
      * Returns set of IP addresses currently bound to the host MAC address.
      *
      * @return set of IP addresses; empty if no IP address is bound
      */
-    Set<IPAddress> ipAddresses();
+    Set<IpAddress> ipAddresses();
 
     /**
      * Returns the most recent host location where the host attaches to the
diff --git a/core/api/src/main/java/org/onlab/onos/net/HostId.java b/core/api/src/main/java/org/onlab/onos/net/HostId.java
index c6ba53f..1768f24 100644
--- a/core/api/src/main/java/org/onlab/onos/net/HostId.java
+++ b/core/api/src/main/java/org/onlab/onos/net/HostId.java
@@ -1,7 +1,7 @@
 package org.onlab.onos.net;
 
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import java.net.URI;
 
@@ -42,7 +42,7 @@
      * @param vlanId vlan identifier
      * @return host identifier
      */
-    public static HostId hostId(MACAddress mac, VLANID vlanId) {
+    public static HostId hostId(MacAddress mac, VlanId vlanId) {
         // FIXME: use more efficient means of encoding
         return hostId("nic" + ":" + mac + "-" + vlanId);
     }
@@ -53,8 +53,8 @@
      * @param mac mac address
      * @return host identifier
      */
-    public static HostId hostId(MACAddress mac) {
-        return hostId(mac, VLANID.vlanId(VLANID.UNTAGGED));
+    public static HostId hostId(MacAddress mac) {
+        return hostId(mac, VlanId.vlanId(VlanId.UNTAGGED));
     }
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
index 41fcd74..9cae5f9 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
@@ -2,9 +2,9 @@
 
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.flow.criteria.Criterion.Type;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 /**
  * Factory class to create various traffic selection criteria.
@@ -34,7 +34,7 @@
      * @param macValue MAC address value or wildcard mask
      * @return match criterion
      */
-    public static Criterion matchEthSrc(MACAddress mac) {
+    public static Criterion matchEthSrc(MacAddress mac) {
         return new EthCriterion(mac, Type.ETH_SRC);
     }
 
@@ -45,7 +45,7 @@
      * @param macValue MAC address value or wildcard mask
      * @return match criterion
      */
-    public static Criterion matchEthDst(MACAddress mac) {
+    public static Criterion matchEthDst(MacAddress mac) {
         return new EthCriterion(mac, Type.ETH_DST);
     }
 
@@ -65,7 +65,7 @@
      * @param vlanId vlan id value
      * @return match criterion
      */
-    public static Criterion matchVlanId(VLANID vlanId) {
+    public static Criterion matchVlanId(VlanId vlanId) {
         return new VlanIdCriterion(vlanId);
     }
 
@@ -95,7 +95,7 @@
      * @param ip ip src value
      * @return match criterion
      */
-    public static Criterion matchIPSrc(IPAddress ip) {
+    public static Criterion matchIPSrc(IpAddress ip) {
         return new IPCriterion(ip, Type.IPV4_SRC);
     }
 
@@ -105,7 +105,7 @@
      * @param ip ip src value
      * @return match criterion
      */
-    public static Criterion matchIPDst(IPAddress ip) {
+    public static Criterion matchIPDst(IpAddress ip) {
         return new IPCriterion(ip, Type.IPV4_DST);
     }
 
@@ -133,10 +133,10 @@
 
 
     public static final class EthCriterion implements Criterion {
-        private final MACAddress mac;
+        private final MacAddress mac;
         private final Type type;
 
-        public EthCriterion(MACAddress mac, Type type) {
+        public EthCriterion(MacAddress mac, Type type) {
             this.mac = mac;
             this.type = type;
         }
@@ -146,7 +146,7 @@
             return this.type;
         }
 
-        public MACAddress mac() {
+        public MacAddress mac() {
             return this.mac;
         }
     }
@@ -173,10 +173,10 @@
 
     public static final class IPCriterion implements Criterion {
 
-        private final IPAddress ip;
+        private final IpAddress ip;
         private final Type type;
 
-        public IPCriterion(IPAddress ip, Type type) {
+        public IPCriterion(IpAddress ip, Type type) {
             this.ip = ip;
             this.type = type;
         }
@@ -186,7 +186,7 @@
             return this.type;
         }
 
-        public IPAddress ip() {
+        public IpAddress ip() {
             return this.ip;
         }
 
@@ -237,9 +237,9 @@
     public static final class VlanIdCriterion implements Criterion {
 
 
-        private final VLANID vlanId;
+        private final VlanId vlanId;
 
-        public VlanIdCriterion(VLANID vlanId) {
+        public VlanIdCriterion(VlanId vlanId) {
             this.vlanId = vlanId;
         }
 
@@ -248,7 +248,7 @@
             return Type.VLAN_VID;
         }
 
-        public VLANID vlanId() {
+        public VlanId vlanId() {
             return vlanId;
         }
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
index 894942c..439db77 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
@@ -7,9 +7,10 @@
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
 import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.L3SubType;
 import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+
 /**
  * Factory class for creating various traffic treatment instructions.
  */
@@ -44,7 +45,7 @@
      * @param addr the mac address to modify to.
      * @return a l2 modification
      */
-    public static L2ModificationInstruction modL2Src(MACAddress addr) {
+    public static L2ModificationInstruction modL2Src(MacAddress addr) {
         checkNotNull(addr, "Src l2 address cannot be null");
         return new ModEtherInstruction(L2SubType.L2_SRC, addr);
     }
@@ -54,7 +55,7 @@
      * @param addr the mac address to modify to.
      * @return a L2 modification
      */
-    public static L2ModificationInstruction modL2Dst(MACAddress addr) {
+    public static L2ModificationInstruction modL2Dst(MacAddress addr) {
         checkNotNull(addr, "Dst l2 address cannot be null");
         return new L2ModificationInstruction.ModEtherInstruction(L2SubType.L2_DST, addr);
     }
@@ -64,7 +65,7 @@
      * @param vlanId the vlan id to modify to.
      * @return a L2 modification
      */
-    public static L2ModificationInstruction modVlanId(VLANID vlanId) {
+    public static L2ModificationInstruction modVlanId(VlanId vlanId) {
         checkNotNull(vlanId, "VLAN id cannot be null");
         return new L2ModificationInstruction.ModVlanIdInstruction(vlanId);
     }
@@ -84,7 +85,7 @@
      * @param addr the ip address to modify to.
      * @return a L3 modification
      */
-    public static L3ModificationInstruction modL3Src(IPAddress addr) {
+    public static L3ModificationInstruction modL3Src(IpAddress addr) {
         checkNotNull(addr, "Src l3 address cannot be null");
         return new ModIPInstruction(L3SubType.L3_SRC, addr);
     }
@@ -94,7 +95,7 @@
      * @param addr the ip address to modify to.
      * @return a L3 modification
      */
-    public static L3ModificationInstruction modL3Dst(IPAddress addr) {
+    public static L3ModificationInstruction modL3Dst(IpAddress addr) {
         checkNotNull(addr, "Dst l3 address cannot be null");
         return new ModIPInstruction(L3SubType.L3_DST, addr);
     }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
index 9019efb..78eaaa9 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
@@ -1,7 +1,7 @@
 package org.onlab.onos.net.flow.instructions;
 
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 /**
  * Abstraction of a single traffic treatment step.
@@ -50,9 +50,10 @@
     public static final class ModEtherInstruction extends L2ModificationInstruction {
 
         private final L2SubType subtype;
-        private final MACAddress mac;
+        private final MacAddress mac;
 
-        public ModEtherInstruction(L2SubType subType, MACAddress addr) {
+        public ModEtherInstruction(L2SubType subType, MacAddress addr) {
+
             this.subtype = subType;
             this.mac = addr;
         }
@@ -62,7 +63,7 @@
             return this.subtype;
         }
 
-        public MACAddress mac() {
+        public MacAddress mac() {
             return this.mac;
         }
 
@@ -73,9 +74,9 @@
      */
     public static final class ModVlanIdInstruction extends L2ModificationInstruction {
 
-        public final VLANID vlanId;
+        public final VlanId vlanId;
 
-        public ModVlanIdInstruction(VLANID vlanId) {
+        public ModVlanIdInstruction(VlanId vlanId) {
             this.vlanId = vlanId;
         }
 
@@ -84,7 +85,7 @@
             return L2SubType.VLAN_ID;
         }
 
-        public VLANID vlanId() {
+        public VlanId vlanId() {
             return this.vlanId;
         }
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java
index c5cb7a6..cf25f10 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.flow.instructions;
 
-import org.onlab.packet.IPAddress;
+import org.onlab.packet.IpAddress;
 
 /**
  * Abstraction of a single traffic treatment step.
@@ -42,9 +42,10 @@
     public static final class ModIPInstruction extends L3ModificationInstruction {
 
         private final L3SubType subtype;
-        private final IPAddress ip;
+        private final IpAddress ip;
 
-        public ModIPInstruction(L3SubType subType, IPAddress addr) {
+        public ModIPInstruction(L3SubType subType, IpAddress addr) {
+
             this.subtype = subType;
             this.ip = addr;
         }
@@ -54,7 +55,7 @@
             return this.subtype;
         }
 
-        public IPAddress ip() {
+        public IpAddress ip() {
             return this.ip;
         }
 
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 a06a92e..68795bd 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
@@ -6,42 +6,42 @@
 import java.util.Set;
 
 import org.onlab.onos.net.HostLocation;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+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 VLANID vlan;
+    private final MacAddress mac;
+    private final VlanId vlan;
     private final HostLocation location;
-    private final Set<IPAddress> ips;
+    private final Set<IpAddress> ips;
 
-    public DefaultHostDescription(MACAddress mac, VLANID vlan,
+    public DefaultHostDescription(MacAddress mac, VlanId vlan,
             HostLocation loc) {
         this.mac = mac;
         this.vlan = vlan;
         this.location = loc;
-        this.ips = new HashSet<IPAddress>();
+        this.ips = new HashSet<IpAddress>();
     }
 
-    public DefaultHostDescription(MACAddress mac, VLANID vlan,
-            HostLocation loc, Set<IPAddress> ips) {
+    public DefaultHostDescription(MacAddress mac, VlanId vlan,
+            HostLocation loc, Set<IpAddress> ips) {
         this.mac = mac;
         this.vlan = vlan;
         this.location = loc;
-        this.ips = new HashSet<IPAddress>(ips);
+        this.ips = new HashSet<IpAddress>(ips);
     }
 
     @Override
-    public MACAddress hwAddress() {
+    public MacAddress hwAddress() {
         return mac;
     }
 
     @Override
-    public VLANID vlan() {
+    public VlanId vlan() {
         return vlan;
     }
 
@@ -51,7 +51,7 @@
     }
 
     @Override
-    public Set<IPAddress> ipAddresses() {
+    public Set<IpAddress> ipAddresses() {
         return ImmutableSet.copyOf(ips);
     }
 
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 313a403..5917bef 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
@@ -4,9 +4,9 @@
 
 import org.onlab.onos.net.Description;
 import org.onlab.onos.net.HostLocation;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 /**
  * Information describing host and its location.
@@ -18,14 +18,14 @@
      *
      * @return the MAC address of this host
      */
-    MACAddress hwAddress();
+    MacAddress hwAddress();
 
     /**
      * Returns the VLAN associated with this host.
      *
      * @return the VLAN ID value
      */
-    VLANID vlan();
+    VlanId vlan();
 
     /**
      * Returns the location of the host on the network edge.
@@ -39,6 +39,6 @@
      *
      * @return a set of IP addresses.
      */
-    Set<IPAddress> ipAddresses();
+    Set<IpAddress> ipAddresses();
 
 }
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 1a94471..357fb61 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
@@ -4,9 +4,9 @@
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Host;
 import org.onlab.onos.net.HostId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import java.util.Set;
 
@@ -44,7 +44,7 @@
      * @return set of hosts in the given vlan id
      */
     // FIXME: change long to VLanId
-    Set<Host> getHostsByVlan(VLANID vlanId);
+    Set<Host> getHostsByVlan(VlanId vlanId);
 
     /**
      * Returns the set of hosts that have the specified MAC address.
@@ -52,7 +52,7 @@
      * @param mac mac address
      * @return set of hosts with the given mac
      */
-    Set<Host> getHostsByMac(MACAddress mac);
+    Set<Host> getHostsByMac(MacAddress mac);
 
     /**
      * Returns the set of hosts that have the specified IP address.
@@ -60,7 +60,7 @@
      * @param ip ip address
      * @return set of hosts with the given IP
      */
-    Set<Host> getHostsByIp(IPAddress ip);
+    Set<Host> getHostsByIp(IpAddress ip);
 
     /**
      * Returns the set of hosts whose most recent location is the specified
diff --git a/core/api/src/main/java/org/onlab/onos/net/path/PathService.java b/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
similarity index 92%
rename from core/api/src/main/java/org/onlab/onos/net/path/PathService.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
index efbd484..f1b4542 100644
--- a/core/api/src/main/java/org/onlab/onos/net/path/PathService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
@@ -1,8 +1,7 @@
-package org.onlab.onos.net.path;
+package org.onlab.onos.net.topology;
 
 import org.onlab.onos.net.ElementId;
 import org.onlab.onos.net.Path;
-import org.onlab.onos.net.topology.LinkWeight;
 
 import java.util.Set;
 
diff --git a/core/api/src/test/java/org/onlab/onos/net/HostIdTest.java b/core/api/src/test/java/org/onlab/onos/net/HostIdTest.java
index d79f616..712f6b2 100644
--- a/core/api/src/test/java/org/onlab/onos/net/HostIdTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/HostIdTest.java
@@ -3,8 +3,8 @@
 import com.google.common.testing.EqualsTester;
 
 import org.junit.Test;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import static org.onlab.onos.net.HostId.hostId;
 
@@ -13,10 +13,10 @@
  */
 public class HostIdTest extends ElementIdTest {
 
-    private static final MACAddress MAC1 = MACAddress.valueOf("00:11:00:00:00:01");
-    private static final MACAddress MAC2 = MACAddress.valueOf("00:22:00:00:00:02");
-    private static final VLANID VLAN1 = VLANID.vlanId((short) 11);
-    private static final VLANID VLAN2 = VLANID.vlanId((short) 22);
+    private static final MacAddress MAC1 = MacAddress.valueOf("00:11:00:00:00:01");
+    private static final MacAddress MAC2 = MacAddress.valueOf("00:22:00:00:00:02");
+    private static final VlanId VLAN1 = VlanId.vlanId((short) 11);
+    private static final VlanId VLAN2 = VlanId.vlanId((short) 22);
 
     @Override
     @Test
diff --git a/core/api/src/test/java/org/onlab/onos/net/TestDeviceParams.java b/core/api/src/test/java/org/onlab/onos/net/TestDeviceParams.java
index 930cb3b..afaf23e 100644
--- a/core/api/src/test/java/org/onlab/onos/net/TestDeviceParams.java
+++ b/core/api/src/test/java/org/onlab/onos/net/TestDeviceParams.java
@@ -5,9 +5,9 @@
 import java.util.Set;
 
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import com.google.common.collect.Sets;
 
@@ -20,13 +20,13 @@
     protected static final ProviderId PID = new ProviderId("foo");
     protected static final DeviceId DID1 = deviceId("of:foo");
     protected static final DeviceId DID2 = deviceId("of:bar");
-    protected static final MACAddress MAC1 = MACAddress.valueOf("00:11:00:00:00:01");
-    protected static final MACAddress MAC2 = MACAddress.valueOf("00:22:00:00:00:02");
-    protected static final VLANID VLAN1 = VLANID.vlanId((short) 11);
-    protected static final VLANID VLAN2 = VLANID.vlanId((short) 22);
-    protected static final IPAddress IP1 = IPAddress.valueOf("10.0.0.1");
-    protected static final IPAddress IP2 = IPAddress.valueOf("10.0.0.2");
-    protected static final IPAddress IP3 = IPAddress.valueOf("10.0.0.3");
+    protected static final MacAddress MAC1 = MacAddress.valueOf("00:11:00:00:00:01");
+    protected static final MacAddress MAC2 = MacAddress.valueOf("00:22:00:00:00:02");
+    protected static final VlanId VLAN1 = VlanId.vlanId((short) 11);
+    protected static final VlanId VLAN2 = VlanId.vlanId((short) 22);
+    protected static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
+    protected static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
+    protected static final IpAddress IP3 = IpAddress.valueOf("10.0.0.3");
 
     protected static final PortNumber P1 = PortNumber.portNumber(100);
     protected static final PortNumber P2 = PortNumber.portNumber(200);
@@ -34,7 +34,7 @@
     protected static final HostId HID2 = HostId.hostId(MAC2, VLAN2);
     protected static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
     protected static final HostLocation LOC2 = new HostLocation(DID2, P2, 123L);
-    protected static final Set<IPAddress> IPSET1 = Sets.newHashSet(IP1, IP2);
-    protected static final Set<IPAddress> IPSET2 = Sets.newHashSet(IP1, IP3);
+    protected static final Set<IpAddress> IPSET1 = Sets.newHashSet(IP1, IP2);
+    protected static final Set<IpAddress> IPSET2 = Sets.newHashSet(IP1, IP3);
 
 }
diff --git a/core/api/src/test/java/org/onlab/onos/net/host/DefualtHostDecriptionTest.java b/core/api/src/test/java/org/onlab/onos/net/host/DefualtHostDecriptionTest.java
index 5ef9bf8..6ce39f5 100644
--- a/core/api/src/test/java/org/onlab/onos/net/host/DefualtHostDecriptionTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/host/DefualtHostDecriptionTest.java
@@ -9,9 +9,9 @@
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.HostLocation;
 import org.onlab.onos.net.PortNumber;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import com.google.common.collect.Sets;
 
@@ -20,16 +20,16 @@
  */
 public class DefualtHostDecriptionTest {
 
-    private static final MACAddress MAC = MACAddress.valueOf("00:00:11:00:00:01");
-    private static final VLANID VLAN = VLANID.vlanId((short) 10);
+    private static final MacAddress MAC = MacAddress.valueOf("00:00:11:00:00:01");
+    private static final VlanId VLAN = VlanId.vlanId((short) 10);
     private static final HostLocation LOC = new HostLocation(
                 DeviceId.deviceId("of:foo"),
                 PortNumber.portNumber(100),
                 123L
             );
-    private static final Set<IPAddress> IPS = Sets.newHashSet(
-                IPAddress.valueOf("10.0.0.1"),
-                IPAddress.valueOf("10.0.0.2")
+    private static final Set<IpAddress> IPS = Sets.newHashSet(
+                IpAddress.valueOf("10.0.0.1"),
+                IpAddress.valueOf("10.0.0.2")
             );
 
     @Test
diff --git a/core/api/src/test/java/org/onlab/onos/net/host/HostEventTest.java b/core/api/src/test/java/org/onlab/onos/net/host/HostEventTest.java
index 633928e..a0d6848 100644
--- a/core/api/src/test/java/org/onlab/onos/net/host/HostEventTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/host/HostEventTest.java
@@ -11,25 +11,25 @@
 import org.onlab.onos.net.HostLocation;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import com.google.common.collect.Sets;
 
 public class HostEventTest extends AbstractEventTest {
 
     private Host createHost() {
-        MACAddress mac = MACAddress.valueOf("00:00:11:00:00:01");
-        VLANID vlan = VLANID.vlanId((short) 10);
+        MacAddress mac = MacAddress.valueOf("00:00:11:00:00:01");
+        VlanId vlan = VlanId.vlanId((short) 10);
         HostLocation loc = new HostLocation(
                     DeviceId.deviceId("of:foo"),
                     PortNumber.portNumber(100),
                     123L
                 );
-        Set<IPAddress> ipset = Sets.newHashSet(
-                    IPAddress.valueOf("10.0.0.1"),
-                    IPAddress.valueOf("10.0.0.2")
+        Set<IpAddress> ipset = Sets.newHashSet(
+                    IpAddress.valueOf("10.0.0.1"),
+                    IpAddress.valueOf("10.0.0.2")
                 );
         HostId hid = HostId.hostId(mac, vlan);
 
diff --git a/core/api/src/test/java/org/onlab/onos/net/host/HostServiceAdapter.java b/core/api/src/test/java/org/onlab/onos/net/host/HostServiceAdapter.java
index 54a630e..a8ec8bd 100644
--- a/core/api/src/test/java/org/onlab/onos/net/host/HostServiceAdapter.java
+++ b/core/api/src/test/java/org/onlab/onos/net/host/HostServiceAdapter.java
@@ -4,9 +4,9 @@
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Host;
 import org.onlab.onos.net.HostId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import java.util.Set;
 
@@ -30,17 +30,17 @@
     }
 
     @Override
-    public Set<Host> getHostsByVlan(VLANID vlanId) {
+    public Set<Host> getHostsByVlan(VlanId vlanId) {
         return null;
     }
 
     @Override
-    public Set<Host> getHostsByMac(MACAddress mac) {
+    public Set<Host> getHostsByMac(MacAddress mac) {
         return null;
     }
 
     @Override
-    public Set<Host> getHostsByIp(IPAddress ip) {
+    public Set<Host> getHostsByIp(IpAddress ip) {
         return null;
     }
 
diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/ClusterIdTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/ClusterIdTest.java
new file mode 100644
index 0000000..39dc6a5
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/topology/ClusterIdTest.java
@@ -0,0 +1,26 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.topology.ClusterId.clusterId;
+
+/**
+ * Test of the cluster ID.
+ */
+public class ClusterIdTest {
+
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(clusterId(1), clusterId(1))
+                .addEqualityGroup(clusterId(3), clusterId(3)).testEquals();
+    }
+
+    @Test
+    public void basics() {
+        assertEquals("incorrect index", 123, clusterId(123).index());
+    }
+
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyClusterTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyClusterTest.java
new file mode 100644
index 0000000..f4c5df6
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyClusterTest.java
@@ -0,0 +1,38 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.topology.ClusterId.clusterId;
+
+/**
+ * Test of the default topology cluster implementation.
+ */
+public class DefaultTopologyClusterTest {
+
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(cluster(3, 2, 1, "of:1"), cluster(3, 2, 1, "of:1"))
+                .addEqualityGroup(cluster(3, 2, 1, "of:2"), cluster(3, 2, 1, "of:2"))
+                .addEqualityGroup(cluster(0, 2, 1, "of:1"), cluster(0, 2, 1, "of:1"))
+                .addEqualityGroup(cluster(3, 3, 1, "of:1"), cluster(3, 3, 1, "of:1"))
+                .testEquals();
+    }
+
+    @Test
+    public void basics() {
+        TopologyCluster cluster = cluster(6, 5, 4, "of:111");
+        assertEquals("incorrect id", clusterId(6), cluster.id());
+        assertEquals("incorrect id", 5, cluster.deviceCount());
+        assertEquals("incorrect id", 4, cluster.linkCount());
+        assertEquals("incorrect id", deviceId("of:111"), cluster.root());
+
+    }
+
+    private TopologyCluster cluster(int id, int dc, int lc, String root) {
+        return new DefaultTopologyCluster(clusterId(id), dc, lc, deviceId(root));
+    }
+}
\ No newline at end of file
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 07e1e31..43e06f5 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
@@ -22,9 +22,9 @@
 import org.onlab.onos.net.host.HostService;
 import org.onlab.onos.net.provider.AbstractProviderRegistry;
 import org.onlab.onos.net.provider.AbstractProviderService;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 import org.slf4j.Logger;
 
 import java.util.Set;
@@ -87,18 +87,18 @@
     }
 
     @Override
-    public Set<Host> getHostsByVlan(VLANID vlanId) {
+    public Set<Host> getHostsByVlan(VlanId vlanId) {
         return store.getHosts(vlanId);
     }
 
     @Override
-    public Set<Host> getHostsByMac(MACAddress mac) {
+    public Set<Host> getHostsByMac(MacAddress mac) {
         checkNotNull(mac, "MAC address cannot be null");
         return store.getHosts(mac);
     }
 
     @Override
-    public Set<Host> getHostsByIp(IPAddress ip) {
+    public Set<Host> getHostsByIp(IpAddress ip) {
         checkNotNull(ip, "IP address cannot be null");
         return store.getHosts(ip);
     }
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 b7fc5ae..91c02d8 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
@@ -19,9 +19,9 @@
 import org.onlab.onos.net.host.HostDescription;
 import org.onlab.onos.net.host.HostEvent;
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+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;
@@ -153,7 +153,7 @@
      * @param vlanId vlan id
      * @return set of hosts in the vlan
      */
-    Set<Host> getHosts(VLANID vlanId) {
+    Set<Host> getHosts(VlanId vlanId) {
         Set<Host> vlanset = new HashSet<Host>();
         for (Host h : hosts.values()) {
             if (h.vlan().equals(vlanId)) {
@@ -169,7 +169,7 @@
      * @param mac mac address
      * @return set of hosts with the given mac
      */
-    Set<Host> getHosts(MACAddress mac) {
+    Set<Host> getHosts(MacAddress mac) {
         Set<Host> macset = new HashSet<>();
         for (Host h : hosts.values()) {
             if (h.mac().equals(mac)) {
@@ -185,7 +185,7 @@
      * @param ip ip address
      * @return set of hosts with the given IP
      */
-    Set<Host> getHosts(IPAddress ip) {
+    Set<Host> getHosts(IpAddress ip) {
         Set<Host> ipset = new HashSet<>();
         for (Host h : hosts.values()) {
             if (h.ipAddresses().contains(ip)) {
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/path/SimplePathManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/topology/impl/SimplePathManager.java
similarity index 98%
rename from core/trivial/src/main/java/org/onlab/onos/net/trivial/path/SimplePathManager.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/topology/impl/SimplePathManager.java
index a0ab2e7..f495057 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/path/SimplePathManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/topology/impl/SimplePathManager.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net.trivial.path;
+package org.onlab.onos.net.trivial.topology.impl;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -21,7 +21,7 @@
 import org.onlab.onos.net.Path;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.host.HostService;
-import org.onlab.onos.net.path.PathService;
+import org.onlab.onos.net.topology.PathService;
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.onos.net.topology.LinkWeight;
 import org.onlab.onos.net.topology.Topology;
diff --git a/core/trivial/src/test/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManagerTest.java b/core/trivial/src/test/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManagerTest.java
index 0524f0f..b1b825e 100644
--- a/core/trivial/src/test/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManagerTest.java
+++ b/core/trivial/src/test/java/org/onlab/onos/net/trivial/host/impl/SimpleHostManagerTest.java
@@ -28,9 +28,9 @@
 import org.onlab.onos.net.host.HostProviderService;
 import org.onlab.onos.net.provider.AbstractProvider;
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -44,17 +44,17 @@
 
     private static final ProviderId PID = new ProviderId("foo");
 
-    private static final VLANID VLAN1 = VLANID.vlanId((short) 1);
-    private static final VLANID VLAN2 = VLANID.vlanId((short) 2);
-    private static final MACAddress MAC1 = MACAddress.valueOf("00:00:11:00:00:01");
-    private static final MACAddress MAC2 = MACAddress.valueOf("00:00:22:00:00:02");
+    private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
+    private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
+    private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01");
+    private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
     private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
     private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
 
-    private static final IPAddress IP1 = IPAddress.valueOf("10.0.0.1");
-    private static final IPAddress IP2 = IPAddress.valueOf("10.0.0.2");
-    private static final Set<IPAddress> IPSET1 = Sets.newHashSet(IP1);
-    private static final Set<IPAddress> IPSET2 = Sets.newHashSet(IP2);
+    private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
+    private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
+    private static final Set<IpAddress> IPSET1 = Sets.newHashSet(IP1);
+    private static final Set<IpAddress> IPSET2 = Sets.newHashSet(IP2);
 
     private static final DeviceId DID1 = DeviceId.deviceId("of:001");
     private static final DeviceId DID2 = DeviceId.deviceId("of:002");
@@ -96,8 +96,8 @@
         mgr.eventDispatcher = null;
     }
 
-    private void detect(HostId hid, MACAddress mac, VLANID vlan,
-            HostLocation loc, Set<IPAddress> ips) {
+    private void detect(HostId hid, MacAddress mac, VlanId vlan,
+            HostLocation loc, Set<IpAddress> ips) {
         HostDescription descr = new DefaultHostDescription(mac, vlan, loc, ips);
         providerService.hostDetected(hid, descr);
         assertNotNull("host should be found", mgr.getHost(hid));
diff --git a/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
index 1b67099..db6590a 100644
--- a/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -207,11 +207,11 @@
                 mBuilder.setExact(MatchField.ETH_TYPE, EthType.of(ethType.ethType()));
             case IPV4_DST:
                 ip = (IPCriterion) c;
-                mBuilder.setExact(MatchField.IPV4_DST, IPv4Address.of(ip.ip().toString()));
+                mBuilder.setExact(MatchField.IPV4_DST, IPv4Address.of(ip.ip().toInt()));
                 break;
             case IPV4_SRC:
                 ip = (IPCriterion) c;
-                mBuilder.setExact(MatchField.IPV4_SRC, IPv4Address.of(ip.ip().toString()));
+                mBuilder.setExact(MatchField.IPV4_SRC, IPv4Address.of(ip.ip().toInt()));
                 break;
             case IP_PROTO:
                 IPProtocolCriterion p = (IPProtocolCriterion) c;
diff --git a/providers/of/host/src/main/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProvider.java b/providers/of/host/src/main/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProvider.java
index 8ec8fb1..396852d 100644
--- a/providers/of/host/src/main/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProvider.java
+++ b/providers/of/host/src/main/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProvider.java
@@ -31,8 +31,8 @@
 import org.onlab.onos.of.controller.PacketListener;
 import org.onlab.packet.ARP;
 import org.onlab.packet.Ethernet;
-import org.onlab.packet.IPAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.VlanId;
 import org.slf4j.Logger;
 
 /**
@@ -94,7 +94,7 @@
 
             // Potentially a new or moved host
             if (eth.getEtherType() == Ethernet.TYPE_ARP) {
-                VLANID vlan = VLANID.vlanId(eth.getVlanID());
+                VlanId vlan = VlanId.vlanId(eth.getVlanID());
                 ConnectPoint heardOn = new ConnectPoint(deviceId(Dpid.uri(pktCtx.dpid())),
                         portNumber(pktCtx.inPort()));
 
@@ -110,7 +110,7 @@
 
                 HostId hid = HostId.hostId(eth.getSourceMAC(), vlan);
                 ARP arp = (ARP) eth.getPayload();
-                Set<IPAddress> ips = newHashSet(IPAddress.valueOf(arp.getSenderProtocolAddress()));
+                Set<IpAddress> ips = newHashSet(IpAddress.valueOf(arp.getSenderProtocolAddress()));
                 HostDescription hdescr =
                         new DefaultHostDescription(eth.getSourceMAC(), vlan, hloc, ips);
                 providerService.hostDetected(hid, hdescr);
diff --git a/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java b/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
index fbc086c..4138111 100644
--- a/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
+++ b/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
@@ -19,8 +19,8 @@
 import org.onlab.onos.of.controller.PacketListener;
 import org.onlab.packet.ARP;
 import org.onlab.packet.Ethernet;
-import org.onlab.packet.MACAddress;
-import org.onlab.packet.VLANID;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.types.OFPort;
 
@@ -35,9 +35,9 @@
     private static final Dpid DPID2 = new Dpid(200);
     private static final Dpid DPID3 = new Dpid(300);
 
-    private static final VLANID VLAN = VLANID.vlanId();
-    private static final MACAddress MAC = MACAddress.valueOf("00:00:11:00:00:01");
-    private static final MACAddress BCMAC = MACAddress.valueOf("ff:ff:ff:ff:ff:ff");
+    private static final VlanId VLAN = VlanId.vlanId();
+    private static final MacAddress MAC = MacAddress.valueOf("00:00:11:00:00:01");
+    private static final MacAddress BCMAC = MacAddress.valueOf("ff:ff:ff:ff:ff:ff");
     private static final byte[] IP = new byte[]{10, 0, 0, 1};
 
     private OpenFlowHostProvider provider = new OpenFlowHostProvider();
diff --git a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
index ee6d0c2..7587a54 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
@@ -60,8 +60,8 @@
         Ethernet.etherTypeClassMap.put(Ethernet.TYPE_LLDP, LLDP.class);
     }
 
-    protected MACAddress destinationMACAddress;
-    protected MACAddress sourceMACAddress;
+    protected MacAddress destinationMACAddress;
+    protected MacAddress sourceMACAddress;
     protected byte priorityCode;
     protected short vlanID;
     protected short etherType;
@@ -89,7 +89,7 @@
      *
      * @return the destination MAC
      */
-    public MACAddress getDestinationMAC() {
+    public MacAddress getDestinationMAC() {
         return this.destinationMACAddress;
     }
 
@@ -100,7 +100,7 @@
      * @return the Ethernet frame
      */
     public Ethernet setDestinationMACAddress(final byte[] destMac) {
-        this.destinationMACAddress = MACAddress.valueOf(destMac);
+        this.destinationMACAddress = MacAddress.valueOf(destMac);
         return this;
     }
 
@@ -111,7 +111,7 @@
      * @return the Ethernet frame
      */
     public Ethernet setDestinationMACAddress(final String destMac) {
-        this.destinationMACAddress = MACAddress.valueOf(destMac);
+        this.destinationMACAddress = MacAddress.valueOf(destMac);
         return this;
     }
 
@@ -129,7 +129,7 @@
      *
      * @return the source MACAddress
      */
-    public MACAddress getSourceMAC() {
+    public MacAddress getSourceMAC() {
         return this.sourceMACAddress;
     }
 
@@ -140,7 +140,7 @@
      * @return the Ethernet frame
      */
     public Ethernet setSourceMACAddress(final byte[] sourceMac) {
-        this.sourceMACAddress = MACAddress.valueOf(sourceMac);
+        this.sourceMACAddress = MacAddress.valueOf(sourceMac);
         return this;
     }
 
@@ -151,7 +151,7 @@
      * @return the Ethernet frame
      */
     public Ethernet setSourceMACAddress(final String sourceMac) {
-        this.sourceMACAddress = MACAddress.valueOf(sourceMac);
+        this.sourceMACAddress = MacAddress.valueOf(sourceMac);
         return this;
     }
 
@@ -288,18 +288,18 @@
         }
         final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
         if (this.destinationMACAddress == null) {
-            this.destinationMACAddress = MACAddress.valueOf(new byte[6]);
+            this.destinationMACAddress = MacAddress.valueOf(new byte[6]);
         }
-        final byte[] dstAddr = new byte[MACAddress.MAC_ADDRESS_LENGTH];
+        final byte[] dstAddr = new byte[MacAddress.MAC_ADDRESS_LENGTH];
         bb.get(dstAddr);
-        this.destinationMACAddress = MACAddress.valueOf(dstAddr);
+        this.destinationMACAddress = MacAddress.valueOf(dstAddr);
 
         if (this.sourceMACAddress == null) {
-            this.sourceMACAddress = MACAddress.valueOf(new byte[6]);
+            this.sourceMACAddress = MacAddress.valueOf(new byte[6]);
         }
-        final byte[] srcAddr = new byte[MACAddress.MAC_ADDRESS_LENGTH];
+        final byte[] srcAddr = new byte[MacAddress.MAC_ADDRESS_LENGTH];
         bb.get(srcAddr);
-        this.sourceMACAddress = MACAddress.valueOf(srcAddr);
+        this.sourceMACAddress = MacAddress.valueOf(srcAddr);
 
         short ethType = bb.getShort();
         if (ethType == (short) 0x8100) {
@@ -361,7 +361,7 @@
      * @return The macAddress as a byte array
      */
     public static byte[] toMACAddress(final String macAddress) {
-        return MACAddress.valueOf(macAddress).toBytes();
+        return MacAddress.valueOf(macAddress).toBytes();
     }
 
     /**
@@ -372,7 +372,7 @@
      * @return a long containing the mac address bytes
      */
     public static long toLong(final byte[] macAddress) {
-        return MACAddress.valueOf(macAddress).toLong();
+        return MacAddress.valueOf(macAddress).toLong();
     }
 
     /**
@@ -382,7 +382,7 @@
      * @return the bytes of the mac address
      */
     public static byte[] toByteArray(final long macAddress) {
-        return MACAddress.valueOf(macAddress).toBytes();
+        return MacAddress.valueOf(macAddress).toBytes();
     }
 
     /*
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPAddress.java b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
similarity index 86%
rename from utils/misc/src/main/java/org/onlab/packet/IPAddress.java
rename to utils/misc/src/main/java/org/onlab/packet/IpAddress.java
index 1131ca4..c664a3a 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
@@ -5,7 +5,7 @@
 /**
  * A class representing an IPv4 address.
  */
-public class IPAddress {
+public class IpAddress {
 
     //IP Versions
     public enum Version { INET, INET6 };
@@ -18,7 +18,7 @@
     //does it make more sense to have a integral address?
     protected byte[] octets;
 
-    protected IPAddress(Version ver, byte[] octets) {
+    protected IpAddress(Version ver, byte[] octets) {
         this.version = ver;
         this.octets = Arrays.copyOf(octets, INET_LEN);
     }
@@ -29,8 +29,8 @@
      * @param address a byte array
      * @return an IP address
      */
-    public static IPAddress valueOf(byte [] address) {
-        return new IPAddress(Version.INET, address);
+    public static IpAddress valueOf(byte [] address) {
+        return new IpAddress(Version.INET, address);
     }
 
     /**
@@ -39,13 +39,13 @@
      * @param address an integer representing an IP value
      * @return an IP address
      */
-    public static IPAddress valueOf(int address) {
+    public static IpAddress valueOf(int address) {
         byte [] bytes = new byte [INET_LEN];
         for (int i = 0; i < INET_LEN; i++) {
             bytes[i] = (byte) ((address >> (INET_LEN - (i + 1)) * 8) & 0xff);
         }
 
-        return new IPAddress(Version.INET, bytes);
+        return new IpAddress(Version.INET, bytes);
     }
 
     /**
@@ -55,7 +55,7 @@
      * @param address a string representing an IP address, e.g. "10.0.0.1"
      * @return an IP address
      */
-    public static IPAddress valueOf(String address) {
+    public static IpAddress valueOf(String address) {
         final String [] parts = address.split("\\.");
         if (parts.length != INET_LEN) {
             throw new IllegalArgumentException("Malformed IP address string; "
@@ -65,7 +65,7 @@
         for (int i = 0; i < INET_LEN; i++) {
             bytes[i] = Byte.parseByte(parts[i], 10);
         }
-        return new IPAddress(Version.INET, bytes);
+        return new IpAddress(Version.INET, bytes);
     }
 
     /**
@@ -119,8 +119,8 @@
     @Override
     public boolean equals(Object obj) {
 
-        if (obj instanceof IPAddress) {
-            IPAddress other = (IPAddress) obj;
+        if (obj instanceof IpAddress) {
+            IpAddress other = (IpAddress) obj;
 
             if (this.version.equals(other.version)
                     && (Arrays.equals(this.octets, other.octets))) {
diff --git a/utils/misc/src/main/java/org/onlab/packet/MACAddress.java b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java
similarity index 86%
rename from utils/misc/src/main/java/org/onlab/packet/MACAddress.java
rename to utils/misc/src/main/java/org/onlab/packet/MacAddress.java
index c913e1d..33764bb 100644
--- a/utils/misc/src/main/java/org/onlab/packet/MACAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java
@@ -21,12 +21,12 @@
  * The class representing MAC address.
  *
  */
-public class MACAddress {
+public class MacAddress {
     public static final int MAC_ADDRESS_LENGTH = 6;
-    private byte[] address = new byte[MACAddress.MAC_ADDRESS_LENGTH];
+    private byte[] address = new byte[MacAddress.MAC_ADDRESS_LENGTH];
 
-    public MACAddress(final byte[] address) {
-        this.address = Arrays.copyOf(address, MACAddress.MAC_ADDRESS_LENGTH);
+    public MacAddress(final byte[] address) {
+        this.address = Arrays.copyOf(address, MacAddress.MAC_ADDRESS_LENGTH);
     }
 
     /**
@@ -40,21 +40,21 @@
      * @throws IllegalArgumentException
      *             if the string cannot be parsed as a MAC address.
      */
-    public static MACAddress valueOf(final String address) {
+    public static MacAddress valueOf(final String address) {
         final String[] elements = address.split(":");
-        if (elements.length != MACAddress.MAC_ADDRESS_LENGTH) {
+        if (elements.length != MacAddress.MAC_ADDRESS_LENGTH) {
             throw new IllegalArgumentException(
                     "Specified MAC Address must contain 12 hex digits"
                             + " separated pairwise by :'s.");
         }
 
-        final byte[] addressInBytes = new byte[MACAddress.MAC_ADDRESS_LENGTH];
-        for (int i = 0; i < MACAddress.MAC_ADDRESS_LENGTH; i++) {
+        final byte[] addressInBytes = new byte[MacAddress.MAC_ADDRESS_LENGTH];
+        for (int i = 0; i < MacAddress.MAC_ADDRESS_LENGTH; i++) {
             final String element = elements[i];
             addressInBytes[i] = (byte) Integer.parseInt(element, 16);
         }
 
-        return new MACAddress(addressInBytes);
+        return new MacAddress(addressInBytes);
     }
 
     /**
@@ -68,13 +68,13 @@
      * @throws IllegalArgumentException
      *             if the byte array cannot be parsed as a MAC address.
      */
-    public static MACAddress valueOf(final byte[] address) {
-        if (address.length != MACAddress.MAC_ADDRESS_LENGTH) {
+    public static MacAddress valueOf(final byte[] address) {
+        if (address.length != MacAddress.MAC_ADDRESS_LENGTH) {
             throw new IllegalArgumentException("the length is not "
-                    + MACAddress.MAC_ADDRESS_LENGTH);
+                    + MacAddress.MAC_ADDRESS_LENGTH);
         }
 
-        return new MACAddress(address);
+        return new MacAddress(address);
     }
 
     /**
@@ -90,13 +90,13 @@
      * @throws IllegalArgumentException
      *             if the long value cannot be parsed as a MAC address.
      */
-    public static MACAddress valueOf(final long address) {
+    public static MacAddress valueOf(final long address) {
         final byte[] addressInBytes = new byte[] {
                 (byte) (address >> 40 & 0xff), (byte) (address >> 32 & 0xff),
                 (byte) (address >> 24 & 0xff), (byte) (address >> 16 & 0xff),
                 (byte) (address >> 8 & 0xff), (byte) (address >> 0 & 0xff) };
 
-        return new MACAddress(addressInBytes);
+        return new MacAddress(addressInBytes);
     }
 
     /**
@@ -165,11 +165,11 @@
             return true;
         }
 
-        if (!(o instanceof MACAddress)) {
+        if (!(o instanceof MacAddress)) {
             return false;
         }
 
-        final MACAddress other = (MACAddress) o;
+        final MacAddress other = (MacAddress) o;
         return Arrays.equals(this.address, other.address);
     }
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/VLANID.java b/utils/misc/src/main/java/org/onlab/packet/VlanId.java
similarity index 77%
rename from utils/misc/src/main/java/org/onlab/packet/VLANID.java
rename to utils/misc/src/main/java/org/onlab/packet/VlanId.java
index fa59a82..60daec7 100644
--- a/utils/misc/src/main/java/org/onlab/packet/VLANID.java
+++ b/utils/misc/src/main/java/org/onlab/packet/VlanId.java
@@ -4,7 +4,7 @@
  * Representation of a VLAN ID.
  */
 // FIXME: This will end-up looking like a constant; we should name it 'VlanId', 'IpAddress', 'MacAddress'.
-public class VLANID {
+public class VlanId {
 
     private final short value;
     // Based on convention used elsewhere? Check and change if needed
@@ -12,28 +12,28 @@
     // A VLAN ID is actually 12 bits of a VLAN tag.
     public static final short MAX_VLAN = 4095;
 
-    protected VLANID() {
+    protected VlanId() {
         this.value = UNTAGGED;
     }
 
-    protected VLANID(short value) {
+    protected VlanId(short value) {
         this.value = value;
     }
 
-    public static VLANID vlanId() {
-        return new VLANID(UNTAGGED);
+    public static VlanId vlanId() {
+        return new VlanId(UNTAGGED);
     }
 
-    public static VLANID vlanId(short value) {
+    public static VlanId vlanId(short value) {
         if (value == UNTAGGED) {
-            return new VLANID();
+            return new VlanId();
         }
 
         if (value > MAX_VLAN) {
             throw new IllegalArgumentException(
                     "value exceeds allowed maximum VLAN ID value (4095)");
         }
-        return new VLANID(value);
+        return new VlanId(value);
     }
 
     public short toShort() {
@@ -46,9 +46,9 @@
             return true;
         }
 
-        if (obj instanceof VLANID) {
+        if (obj instanceof VlanId) {
 
-            VLANID other = (VLANID) obj;
+            VlanId other = (VlanId) obj;
 
              if (this.value == other.value) {
                 return true;
diff --git a/utils/misc/src/test/java/org/onlab/packet/IPAddressTest.java b/utils/misc/src/test/java/org/onlab/packet/IPAddressTest.java
index 35c8271..a0757cd 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IPAddressTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IPAddressTest.java
@@ -5,7 +5,7 @@
 import java.util.Arrays;
 
 import org.junit.Test;
-import org.onlab.packet.IPAddress.Version;
+import org.onlab.packet.IpAddress.Version;
 
 import com.google.common.testing.EqualsTester;
 
@@ -19,11 +19,11 @@
 
     @Test
     public void testEquality() {
-        IPAddress ip1 = IPAddress.valueOf(BYTES1);
-        IPAddress ip2 = IPAddress.valueOf(BYTES2);
-        IPAddress ip3 = IPAddress.valueOf(INTVAL1);
-        IPAddress ip4 = IPAddress.valueOf(INTVAL2);
-        IPAddress ip5 = IPAddress.valueOf(STRVAL);
+        IpAddress ip1 = IpAddress.valueOf(BYTES1);
+        IpAddress ip2 = IpAddress.valueOf(BYTES2);
+        IpAddress ip3 = IpAddress.valueOf(INTVAL1);
+        IpAddress ip4 = IpAddress.valueOf(INTVAL2);
+        IpAddress ip5 = IpAddress.valueOf(STRVAL);
 
         new EqualsTester().addEqualityGroup(ip1, ip3)
         .addEqualityGroup(ip2, ip5)
@@ -33,7 +33,7 @@
 
     @Test
     public void basics() {
-        IPAddress ip4 = IPAddress.valueOf(BYTES1);
+        IpAddress ip4 = IpAddress.valueOf(BYTES1);
         assertEquals("incorrect IP Version", Version.INET, ip4.version());
         assertEquals("faulty toOctets()", Arrays.equals(
                 new byte [] {0x0, 0x0, 0x0, 0xa}, ip4.toOctets()), true);
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 88fb9c8..17d888c 100644
--- a/utils/misc/src/test/java/org/onlab/packet/VLANIDTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/VLANIDTest.java
@@ -11,28 +11,28 @@
     @Test
     public void testEquality() {
 
-        VLANID vlan1 = VLANID.vlanId((short) -1);
-        VLANID vlan2 = VLANID.vlanId((short) 100);
-        VLANID vlan3 = VLANID.vlanId((short) 100);
+        VlanId vlan1 = VlanId.vlanId((short) -1);
+        VlanId vlan2 = VlanId.vlanId((short) 100);
+        VlanId vlan3 = VlanId.vlanId((short) 100);
 
-        new EqualsTester().addEqualityGroup(VLANID.vlanId(), vlan1)
+        new EqualsTester().addEqualityGroup(VlanId.vlanId(), vlan1)
         .addEqualityGroup(vlan2, vlan3)
-        .addEqualityGroup(VLANID.vlanId((short) 10));
+        .addEqualityGroup(VlanId.vlanId((short) 10));
 
     }
 
     @Test
     public void basics() {
         // purposefully create UNTAGGED VLAN
-        VLANID vlan1 = VLANID.vlanId((short) 10);
-        VLANID vlan2 = VLANID.vlanId((short) -1);
+        VlanId vlan1 = VlanId.vlanId((short) 10);
+        VlanId vlan2 = VlanId.vlanId((short) -1);
 
         assertEquals("incorrect VLAN value", 10, vlan1.toShort());
-        assertEquals("invalid untagged value", VLANID.UNTAGGED, vlan2.toShort());
+        assertEquals("invalid untagged value", VlanId.UNTAGGED, vlan2.toShort());
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void testIllicitVLAN() {
-        VLANID.vlanId((short) 5000);
+        VlanId.vlanId((short) 5000);
     }
 }