flowruleprovider builds flowmods
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));