Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
diff --git a/.gitignore b/.gitignore
index 411d0ed..37366d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,5 @@
 .javacp*
 target
 *.iml
+dependency-reduced-pom.xml
 .idea
diff --git a/features/features.xml b/features/features.xml
index 1c8f985..92bff44 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -6,7 +6,6 @@
     <feature name="onos-thirdparty-base" version="1.0.0"
              description="ONOS 3rd party dependencies">
         <bundle>mvn:com.google.guava/guava/17.0</bundle>
-        <bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
     </feature>
 
     <feature name="onos-thirdparty-web" version="1.0.0"
@@ -55,7 +54,6 @@
             description="ONOS OpenFlow API, Controller &amp; Providers">
         <feature>onos-core</feature>
         <bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
-        <bundle>mvn:com.google.guava/guava/15.0</bundle>
 
         <bundle>mvn:org.onlab.onos/openflow-api/1.0.0-SNAPSHOT</bundle>
         <bundle>mvn:org.onlab.onos/openflow-ctl/1.0.0-SNAPSHOT</bundle>
diff --git a/net/api/src/main/java/org/onlab/onos/event/AbstractEvent.java b/net/api/src/main/java/org/onlab/onos/event/AbstractEvent.java
new file mode 100644
index 0000000..db688e6
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/event/AbstractEvent.java
@@ -0,0 +1,51 @@
+package org.onlab.onos.event;
+
+/**
+ * Base abstraction of an event.
+ */
+public class AbstractEvent<T extends Enum, S extends Object> implements Event<T, S> {
+
+    private final long time;
+    private final T type;
+    private S subject;
+
+    /**
+     * Creates an event of a given type and for the specified subject and the
+     * current time.
+     *
+     * @param type    event type
+     * @param subject event subject
+     */
+    protected AbstractEvent(T type, S subject) {
+        this(type, subject, System.currentTimeMillis());
+    }
+
+    /**
+     * Creates an event of a given type and for the specified subject and time.
+     *
+     * @param type    event type
+     * @param subject event subject
+     * @param time    occurrence time
+     */
+    protected AbstractEvent(T type, S subject, long time) {
+        this.type = type;
+        this.subject = subject;
+        this.time = time;
+    }
+
+    @Override
+    public long time() {
+        return time;
+    }
+
+    @Override
+    public T type() {
+        return type;
+    }
+
+    @Override
+    public S subject() {
+        return subject;
+    }
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/event/Event.java b/net/api/src/main/java/org/onlab/onos/event/Event.java
new file mode 100644
index 0000000..1cd49cd
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/event/Event.java
@@ -0,0 +1,30 @@
+package org.onlab.onos.event;
+
+/**
+ * Abstraction of an event.
+ */
+public interface Event<T extends Enum, S extends Object> {
+
+    /**
+     * Returns the timestamp of when the event occurred, given in milliseconds
+     * since the start of epoch.
+     *
+     * @return timestamp in milliseconds
+     */
+    long time();
+
+    /**
+     * Returns the type of the event.
+     *
+     * @return event type
+     */
+    T type();
+
+    /**
+     * Returns the subject of the event.
+     *
+     * @return subject to which this event pertains
+     */
+    S subject();
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventListener.java b/net/api/src/main/java/org/onlab/onos/event/EventListener.java
new file mode 100644
index 0000000..1e0d7e6
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/event/EventListener.java
@@ -0,0 +1,15 @@
+package org.onlab.onos.event;
+
+/**
+ * Entity capable of receiving events.
+ */
+public interface EventListener<E extends Event> {
+
+    /**
+     * Reacts to the specified event.
+     *
+     * @param event event to be processed
+     */
+    void event(E event);
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/Device.java b/net/api/src/main/java/org/onlab/onos/net/Device.java
new file mode 100644
index 0000000..c649479
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/Device.java
@@ -0,0 +1,14 @@
+package org.onlab.onos.net;
+
+/**
+ * Representation of an network infrastructure device.
+ */
+public class Device {
+
+    // type, e.g. switch, router, firewall, ips, controller
+
+    // id (uri within)
+
+    // ports
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/Host.java b/net/api/src/main/java/org/onlab/onos/net/Host.java
new file mode 100644
index 0000000..15badc5
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/Host.java
@@ -0,0 +1,12 @@
+package org.onlab.onos.net;
+
+/**
+ * Abstraction of an end-station host on the network, essentially a NIC.
+ */
+public class Host {
+
+    // MAC, IP(s), optional VLAN ID
+
+    // Location (current, recent locations?
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/MastershipRole.java b/net/api/src/main/java/org/onlab/onos/net/MastershipRole.java
new file mode 100644
index 0000000..10d53ad
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/MastershipRole.java
@@ -0,0 +1,27 @@
+package org.onlab.onos.net;
+
+/**
+ * Representation of a relationship role of a controller instance to a device
+ * or a region of network environment.
+ */
+public enum MastershipRole {
+
+    /**
+     * Represents a relationship where the controller instance is the master
+     * to a device or a region of network environment.
+     */
+    MASTER,
+
+    /**
+     * Represents a relationship where the controller instance is the standby,
+     * i.e. potential master to a device or a region of network environment.
+     */
+    STANDBY,
+
+    /**
+     * Represents that the controller instance is not eligible to be the master
+     * to a device or a region of network environment.
+     */
+    NONE
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
new file mode 100644
index 0000000..d82ae42
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
@@ -0,0 +1,56 @@
+package org.onlab.onos.net.device;
+
+import org.onlab.onos.event.AbstractEvent;
+import org.onlab.onos.net.Device;
+
+/**
+ * Describes infrastructure device event.
+ */
+public class DeviceEvent extends AbstractEvent<DeviceEvent.Type, Device> {
+
+    /**
+     * Type of device events.
+     */
+    public enum Type {
+        /** Signifies that a new device has been detected. */
+        DEVICE_ADDED,
+
+        /** Signifies that a device has been removed. */
+        DEVICE_REMOVED,
+
+        /** Signifies that a device has been administratively suspended. */
+        DEVICE_SUSPENDED,
+
+        /** Signifies that a device has come online or has gone offline. */
+        DEVICE_AVAILABILITY_CHANGED,
+
+        /**
+         * Signifies that the current controller instance relationship has
+         * changed with respect to a device.
+         */
+        DEVICE_MASTERSHIP_CHANGED
+    }
+
+    /**
+     * Creates an event of a given type and for the specified subject and the
+     * current time.
+     *
+     * @param type    event type
+     * @param subject event subject
+     */
+    public DeviceEvent(Type type, Device subject) {
+        super(type, subject);
+    }
+
+    /**
+     * Creates an event of a given type and for the specified subject and time.
+     *
+     * @param type    event type
+     * @param subject event subject
+     * @param time    occurrence time
+     */
+    public DeviceEvent(Type type, Device subject, long time) {
+        super(type, subject, time);
+    }
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java
new file mode 100644
index 0000000..232fc95
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java
@@ -0,0 +1,7 @@
+package org.onlab.onos.net.device;
+
+/**
+ * Entity capable of receiving device related events.
+ */
+public interface DeviceListener {
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
index 04ca92c..a571a58 100644
--- a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
@@ -1,9 +1,35 @@
 package org.onlab.onos.net.device;
 
-import org.onlab.onos.net.Provider;
+import org.onlab.onos.net.Device;
+import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.net.provider.Provider;
 
 /**
  * Abstraction of a device information provider.
  */
 public interface DeviceProvider extends Provider {
+
+    // TODO: consider how dirty the triggerProbe gets; if it costs too much, let's drop it
+
+    /**
+     * Triggers an asynchronous probe of the specified device, intended to
+     * determine whether the host is present or not. An indirect result of this
+     * should be invocation of
+     * {@link org.onlab.onos.net.device.DeviceProviderService#deviceConnected(DeviceDescription)} )} or
+     * {@link org.onlab.onos.net.device.DeviceProviderService#deviceDisconnected(DeviceDescription)}
+     * at some later point in time.
+     *
+     * @param device device to be probed
+     */
+    void triggerProbe(Device device);
+
+    /**
+     * Notifies the provider of a mastership role change for the specified
+     * device as decided by the core.
+     *
+     * @param device  affected device
+     * @param newRole newly determined mastership role
+     */
+    void roleChanged(Device device, MastershipRole newRole);
+
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderBroker.java
index 926f76e..90d060a 100644
--- a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderBroker.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.device;
 
-import org.onlab.onos.net.ProviderBroker;
+import org.onlab.onos.net.provider.ProviderBroker;
 
 /**
  * Abstraction of a device provider brokerage.
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
index e5ee1f0..930015f 100644
--- a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
@@ -1,6 +1,7 @@
 package org.onlab.onos.net.device;
 
-import org.onlab.onos.net.ProviderService;
+import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.net.provider.ProviderService;
 
 import java.util.List;
 
@@ -16,8 +17,9 @@
      * Signals the core that a device has connected or has been detected somehow.
      *
      * @param deviceDescription information about network device
+     * @return mastership role chosen by the provider service
      */
-    void deviceConnected(DeviceDescription deviceDescription);
+    MastershipRole deviceConnected(DeviceDescription deviceDescription);
 
     /**
      * Signals the core that a device has disconnected or is no longer reachable.
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceService.java b/net/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
new file mode 100644
index 0000000..4048fbb
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
@@ -0,0 +1,52 @@
+package org.onlab.onos.net.device;
+
+import org.onlab.onos.net.Device;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.MastershipRole;
+
+/**
+ * Service for interacting with the inventory of infrastructure devices.
+ */
+public interface DeviceService {
+
+    /**
+     * Returns the current mastership role for the specified device.
+     *
+     * @param deviceId device identifier
+     * @return designated mastership role
+     */
+    MastershipRole getRole(DeviceId deviceId);
+
+    /**
+     * Returns an iterable collection of the currently known infrastructure
+     * devices.
+     *
+     * @return collection of devices
+     */
+    Iterable<Device> getDevices();
+
+    /**
+     * Returns the device with the specified identifier.
+     *
+     * @param deviceId device identifier
+     * @return device or null if one with the given identifier is not known
+     */
+    Device getDevice(DeviceId deviceId);
+
+
+//    List<Port> getPorts(DeviceId deviceId);
+
+    /**
+     * Adds the specified device listener.
+     *
+     * @param listener device listener
+     */
+    void addListener(DeviceListener listener);
+
+    /**
+     * Removes the specified device listener.
+     *
+     * @param listener device listener
+     */
+    void removeListener(DeviceListener listener);
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
index ac46da8..894e245 100644
--- a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
@@ -1,9 +1,12 @@
 package org.onlab.onos.net.flow;
 
-import org.onlab.onos.net.Provider;
+import org.onlab.onos.net.provider.Provider;
 
 /**
  * Abstraction of a flow rule provider.
  */
 public interface FlowRuleProvider extends Provider {
+
+    // TODO: pushFlowRule
+
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderBroker.java
index c3f7602..e2bfd1c 100644
--- a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderBroker.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.flow;
 
-import org.onlab.onos.net.ProviderBroker;
+import org.onlab.onos.net.provider.ProviderBroker;
 
 /**
  * Abstraction for a flow rule provider brokerage.
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
index 9b26d76..4db01e6 100644
--- a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.flow;
 
-import org.onlab.onos.net.ProviderService;
+import org.onlab.onos.net.provider.ProviderService;
 
 /**
  * Service through which flowrule providers can inject flowrule information into
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java b/net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
index 1ad2c65..04c1060 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
@@ -1,9 +1,24 @@
 package org.onlab.onos.net.host;
 
-import org.onlab.onos.net.Provider;
+import org.onlab.onos.net.Host;
+import org.onlab.onos.net.provider.Provider;
 
 /**
  * Provider of information about hosts and their location on the network.
  */
 public interface HostProvider extends Provider {
+
+    // TODO: consider how dirty the triggerProbe gets; if it costs too much, let's drop it
+
+    /**
+     * Triggers an asynchronous probe of the specified host, intended to
+     * determine whether the host is present or not. An indirect result of this
+     * should be invocation of {@link org.onlab.onos.net.host.HostProviderService#hostDetected(HostDescription)} or
+     * {@link org.onlab.onos.net.host.HostProviderService#hostNotDetected(HostDescription)}
+     * at some later point in time.
+     *
+     * @param host host to probe
+     */
+    void triggerProbe(Host host);
+
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/host/HostProviderBroker.java
index 427e54e..c99d436 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/host/HostProviderBroker.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.host;
 
-import org.onlab.onos.net.ProviderBroker;
+import org.onlab.onos.net.provider.ProviderBroker;
 
 /**
  * Abstraction of a host provider brokerage.
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java b/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
index 4d5d470..f91acbc 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
@@ -1,12 +1,25 @@
 package org.onlab.onos.net.host;
 
-import org.onlab.onos.net.ProviderService;
+import org.onlab.onos.net.provider.ProviderService;
 
 /**
  * Means of conveying host information to the core.
  */
 public interface HostProviderService extends ProviderService {
 
+    /**
+     * Notifies the core when a host has been detected on a network along with
+     * information that identifies the hoot location.
+     *
+     * @param hostDescription description of host and its location
+     */
     void hostDetected(HostDescription hostDescription);
 
+    /**
+     * Notifies the core when a host is no longer detected on a network.
+     *
+     * @param hostDescription description of host
+     */
+    void hostNotDetected(HostDescription hostDescription);
+
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
index 57cc45d..a8ade18 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.link;
 
-import org.onlab.onos.net.Provider;
+import org.onlab.onos.net.provider.Provider;
 
 /**
  * Abstraction of an entity providing information about infrastructure links
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderBroker.java
index b0bfb05..fc58f2c 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderBroker.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.link;
 
-import org.onlab.onos.net.ProviderBroker;
+import org.onlab.onos.net.provider.ProviderBroker;
 
 /**
  * Abstraction of an infrastructure link provider brokerage.
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
index 9f523f7..8e1f18f 100644
--- a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.link;
 
-import org.onlab.onos.net.ProviderService;
+import org.onlab.onos.net.provider.ProviderService;
 
 /**
  * Means for injecting link information into the core.
diff --git a/net/api/src/main/java/org/onlab/onos/net/Provider.java b/net/api/src/main/java/org/onlab/onos/net/provider/Provider.java
similarity index 78%
rename from net/api/src/main/java/org/onlab/onos/net/Provider.java
rename to net/api/src/main/java/org/onlab/onos/net/provider/Provider.java
index eda436b..b1f159d 100644
--- a/net/api/src/main/java/org/onlab/onos/net/Provider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/provider/Provider.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.net.provider;
 
 /**
  * Abstraction of a provider of information about network environment.
diff --git a/net/api/src/main/java/org/onlab/onos/net/ProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderBroker.java
similarity index 94%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderBroker.java
rename to net/api/src/main/java/org/onlab/onos/net/provider/ProviderBroker.java
index 63d7189..9c1b231 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderBroker.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.net.provider;
 
 /**
  * Broker used for registering/unregistering information providers with the core.
diff --git a/net/api/src/main/java/org/onlab/onos/net/ProviderId.java b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
similarity index 94%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderId.java
rename to net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
index 53dd739..3681be5 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderId.java
+++ b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.net.provider;
 
 /**
  * Notion of provider identity.
diff --git a/net/api/src/main/java/org/onlab/onos/net/ProviderService.java b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
similarity index 81%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderService.java
rename to net/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
index 8a7d7e9..9afbc4b 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.net.provider;
 
 /**
  * Abstraction of a service through which providers can inject information
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
index 70264dc..7ad8cc0 100644
--- a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.topology;
 
-import org.onlab.onos.net.Provider;
+import org.onlab.onos.net.provider.Provider;
 
 /**
  * Means for injecting topology information into the core.
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderBroker.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderBroker.java
index 9caa817..d3f7e50 100644
--- a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderBroker.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.topology;
 
-import org.onlab.onos.net.ProviderBroker;
+import org.onlab.onos.net.provider.ProviderBroker;
 
 /**
  * Abstraction of a network topology provider brokerage.
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
index bef83ed..b28df4e 100644
--- a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
@@ -1,6 +1,6 @@
 package org.onlab.onos.net.topology;
 
-import org.onlab.onos.net.ProviderService;
+import org.onlab.onos.net.provider.ProviderService;
 
 /**
  * Means for injecting topology information into the core.
diff --git a/net/api/src/main/javadoc/org/onlab/onos/event/package.html b/net/api/src/main/javadoc/org/onlab/onos/event/package.html
new file mode 100644
index 0000000..1591f3d
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/event/package.html
@@ -0,0 +1,3 @@
+<body>
+Local event delivery subsystem interfaces &amp; supporting abstractions.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/device/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/device/package.html
new file mode 100644
index 0000000..521a30a
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/device/package.html
@@ -0,0 +1,3 @@
+<body>
+Infrastructure device model &amp; related services API definitions.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/flow/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/flow/package.html
new file mode 100644
index 0000000..46028d4
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/flow/package.html
@@ -0,0 +1,3 @@
+<body>
+Flow rule model &amp; related services API definitions.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/host/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/host/package.html
new file mode 100644
index 0000000..e076f65
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/host/package.html
@@ -0,0 +1,3 @@
+<body>
+End-station host model &amp; related services API definitions.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/link/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/link/package.html
new file mode 100644
index 0000000..50972e2
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/link/package.html
@@ -0,0 +1,3 @@
+<body>
+Infrastructure link model &amp; related services API definitions.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/package.html
index f03b788..7d2cd0a 100644
--- a/net/api/src/main/javadoc/org/onlab/onos/net/package.html
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/package.html
@@ -1,3 +1,3 @@
 <body>
-ONOS API definitions.
+Network model entities &amp; service API definitions.
 </body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/provider/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/provider/package.html
new file mode 100644
index 0000000..75c9ed4
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/provider/package.html
@@ -0,0 +1,3 @@
+<body>
+Base abstractions related to network entity providers and their brokers.
+</body>
\ No newline at end of file
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/topology/package.html b/net/api/src/main/javadoc/org/onlab/onos/net/topology/package.html
new file mode 100644
index 0000000..7601432
--- /dev/null
+++ b/net/api/src/main/javadoc/org/onlab/onos/net/topology/package.html
@@ -0,0 +1,3 @@
+<body>
+Network topology model &amp; related services API definitions.
+</body>
\ No newline at end of file
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java
index 8015f3f..b5db8ca 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java
@@ -25,9 +25,9 @@
 import java.util.Set;
 import java.util.concurrent.Future;
 
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.util.OrderedCollection;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.util.OrderedCollection;
 
 import org.jboss.netty.channel.Channel;
 import org.projectfloodlight.openflow.protocol.OFActionType;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java
index b3b8ed3..623e824 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java
@@ -2,7 +2,7 @@
 
 import org.projectfloodlight.openflow.protocol.OFVersion;
 
-import net.onrc.onos.of.ctl.registry.IControllerRegistry;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
 
 /**
  * Interface to passed to controller class in order to allow
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java
index 37ac321..53b5904 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java
index 313e074..6f0db4d 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java
index 74d4405..f8b0dd9 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java
index 6ea380c..d314f31 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java
index e157cf2..2dc0c0a 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 public interface IDebugCounter {
     /**
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java
index 81a80b1..da40b0e 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java
@@ -1,10 +1,10 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 
 
 import java.util.List;
 
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter.DebugCounterInfo;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
 
 public interface IDebugCounterService {
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java
index 1775c50..a31e19a 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java
@@ -1,9 +1,9 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 import java.util.Collections;
 import java.util.List;
 
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter.DebugCounterInfo;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
 
 public class NullDebugCounter implements IDebugCounterService {
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java
index 84f090a..4192d96 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.lang.management.ManagementFactory;
 import java.lang.management.RuntimeMXBean;
@@ -31,20 +31,20 @@
 
 import net.onrc.onos.of.ctl.IOFSwitchManager;
 import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.annotations.LogMessageDoc;
-import net.onrc.onos.of.ctl.annotations.LogMessageDocs;
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterType;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.RoleRecvStatus;
-import net.onrc.onos.of.ctl.registry.IControllerRegistry;
-import net.onrc.onos.of.ctl.registry.RegistryException;
-import net.onrc.onos.of.ctl.registry.IControllerRegistry.ControlChangeCallback;
-import net.onrc.onos.of.ctl.util.Dpid;
-import net.onrc.onos.of.ctl.util.DummySwitchForTesting;
-import net.onrc.onos.of.ctl.util.InstanceId;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterType;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.RoleRecvStatus;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
+import org.onlab.onos.of.controller.impl.registry.RegistryException;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry.ControlChangeCallback;
+import org.onlab.onos.of.controller.impl.util.Dpid;
+import org.onlab.onos.of.controller.impl.util.DummySwitchForTesting;
+import org.onlab.onos.of.controller.impl.util.InstanceId;
 import net.onrc.onos.of.ctl.IOFSwitch;
 import net.onrc.onos.of.ctl.IOFSwitch.PortChangeType;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java
index 48856a9..c199487 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Exception is thrown when the handshake fails to complete.
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java
index 2ed3fd2..10a42ca 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java
@@ -15,7 +15,7 @@
 *    under the License.
 **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java
index 3b18a59..be46753 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.io.IOException;
 import java.nio.channels.ClosedChannelException;
@@ -12,11 +12,11 @@
 import net.onrc.onos.of.ctl.IOFSwitch;
 import net.onrc.onos.of.ctl.IOFSwitch.PortChangeEvent;
 import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.annotations.LogMessageDoc;
-import net.onrc.onos.of.ctl.annotations.LogMessageDocs;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.internal.Controller.Counters;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.ChannelState.RoleReplyInfo;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.internal.Controller.Counters;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.ChannelState.RoleReplyInfo;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java
index ff6fbf5..3035103 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 
 import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java
index 86933fc..14a6db5 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.List;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java
index 30f0287..02e3520 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java
@@ -15,7 +15,7 @@
 *    under the License.
 **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.concurrent.ThreadPoolExecutor;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
index 92c673c..53227aa 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when IOFSwitch.startDriverHandshake() is called more than once.
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java
index 1600854..ba792e5 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import org.projectfloodlight.openflow.protocol.OFMessage;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java
index c7d68f3..49fdead 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Base class for exception thrown by switch driver sub-handshake processing.
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java
index d568cc6..72b17dc 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when a switch driver's sub-handshake has not been started but an
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java
index 6091a86..191d1bb 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when a switch driver's sub-handshake state-machine receives an
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java
index e51b60d..d82e917 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * This exception indicates an error or unexpected message during
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java
index 2472f64..5e83348 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java
index 0b67338..21b1709 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java
@@ -1,10 +1,10 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import net.onrc.onos.of.ctl.util.InstanceId;
+import org.onlab.onos.of.controller.impl.util.InstanceId;
 
 /**
  * A registry service that allows ONOS to register controllers and switches in a
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java
index 45d3c83..406a60d 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 public class IdBlock {
     private final long start;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java
index 06f5932..029f028 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 public class RegistryException extends Exception {
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java
index 5544354..dec8424 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import org.projectfloodlight.openflow.util.HexString;
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java
index a8eabce..a00f3dd 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -27,8 +27,8 @@
 
 import net.onrc.onos.of.ctl.IOFSwitch;
 import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
 
 public class DummySwitchForTesting implements IOFSwitch {
 
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java
index fe6ccc0..c7734c0 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.EnumSet;
 import java.util.Set;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java
index fdde82c..319aae8 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java
index 861dec6..4a7892e 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkArgument;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java
index 79f3c9d..a59b244 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java
index 17f9354..866794f 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java
index 629e536..1778d06 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Collection;
 import java.util.LinkedHashSet;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java
index 693a8bf..7b709e9 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java
index f032212..9dce568 100644
--- a/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java
+++ b/of-save/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Collection;
 
diff --git a/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java b/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java
index ea7d884..89d7ab6 100644
--- a/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java
+++ b/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import junit.framework.TestCase;
 import net.onrc.onos.of.ctl.IOFSwitch;
diff --git a/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java b/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java
index 0213cce..2b51140 100644
--- a/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java
+++ b/of-save/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMock;
@@ -20,9 +20,9 @@
 
 import net.onrc.onos.of.ctl.IOFSwitch;
 import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.RoleRecvStatus;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.RoleRecvStatus;
 
 import org.easymock.Capture;
 import org.easymock.CaptureType;
diff --git a/of/api/pom.xml b/of/api/pom.xml
index bff56bd..7e41d76 100644
--- a/of/api/pom.xml
+++ b/of/api/pom.xml
@@ -16,4 +16,42 @@
 
     <description>ONOS OpenFlow controller subsystem API</description>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.projectfloodlight</groupId>
+            <artifactId>openflowj</artifactId>
+            <version>0.3.8-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <exclude>io.netty:netty</exclude>
+                            <exclude>com.google.guava:guava</exclude>
+                            <exclude>org.slf4j:slfj-api</exclude>
+                            <exclude>ch.qos.logback:logback-core</exclude>
+                            <exclude>ch.qos.logback:logback-classic</exclude>
+                            <exclude>com.google.code.findbugs:annotations</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitch.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitch.java
index 8015f3f..afa3703 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitch.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitch.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl;
+package org.onlab.onos.of.controller.impl;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -25,9 +25,9 @@
 import java.util.Set;
 import java.util.concurrent.Future;
 
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.util.OrderedCollection;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.util.OrderedCollection;
 
 import org.jboss.netty.channel.Channel;
 import org.projectfloodlight.openflow.protocol.OFActionType;
@@ -71,7 +71,6 @@
      * Writes to the OFMessage to the output stream.
      *
      * @param m
-     * @param bc
      * @throws IOException
      */
     public void write(OFMessage m) throws IOException;
@@ -80,7 +79,6 @@
      * Writes the list of messages to the output stream.
      *
      * @param msglist
-     * @param bc
      * @throws IOException
      */
     public void write(List<OFMessage> msglist) throws IOException;
@@ -366,7 +364,7 @@
     public boolean portEnabled(int portName);
 
     /**
-     * @param portNumber
+     * @param portName
      * @return Whether a port is enabled per latest port status message
      * (not configured down nor link down nor in spanning tree blocking state)
      */
@@ -508,7 +506,7 @@
     /**
      * Set debug counter service for per-switch counters.
      * Called immediately after instantiation.
-     * @param debugCounters
+     * @param debugCounter
      * @throws CounterException
      */
     public void setDebugCounterService(IDebugCounterService debugCounter)
@@ -520,7 +518,8 @@
      * ready.
      * This method must only be called from the I/O thread
      * @throws IOException
-     * @throws SwitchDriverSubHandshakeAlreadyStarted if the sub-handshake has
+     * @throws org.onlab.onos.of.controller.impl.internal.SwitchDriverSubHandshakeAlreadyStarted
+     * if the sub-handshake has
      * already been started
      */
     public void startDriverHandshake() throws IOException;
@@ -531,7 +530,8 @@
      *
      * This methods must only be called from the I/O thread
      * @return true if the sub-handshake has been completed. False otherwise
-     * @throws SwitchDriverSubHandshakeNotStarted if startDriverHandshake() has
+     * @throws org.onlab.onos.of.controller.impl.internal.SwitchDriverSubHandshakeNotStarted
+     * if startDriverHandshake() has
      * not been called yet.
      */
     public boolean isDriverHandshakeComplete();
@@ -541,9 +541,11 @@
      * sub-handshake. Must not be called after the handshake has been completed
      * This methods must only be called from the I/O thread
      * @param m The message that the driver should process
-     * @throws SwitchDriverSubHandshakeCompleted if isDriverHandshake() returns
+     * @throws org.onlab.onos.of.controller.impl.internal.SwitchDriverSubHandshakeCompleted
+     * if isDriverHandshake() returns
      * false before this method call
-     * @throws SwitchDriverSubHandshakeNotStarted if startDriverHandshake() has
+     * @throws org.onlab.onos.of.controller.impl.internal.SwitchDriverSubHandshakeNotStarted
+     * if startDriverHandshake() has
      * not been called yet.
      */
     public void processDriverHandshakeMessage(OFMessage m);
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
similarity index 88%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
index b3b8ed3..0acb321 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/IOFSwitchManager.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/IOFSwitchManager.java
@@ -1,8 +1,8 @@
-package net.onrc.onos.of.ctl;
+package org.onlab.onos.of.controller.impl;
 
 import org.projectfloodlight.openflow.protocol.OFVersion;
 
-import net.onrc.onos.of.ctl.registry.IControllerRegistry;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
 
 /**
  * Interface to passed to controller class in order to allow
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/Role.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Role.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/Role.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Role.java
index d892161..081ea10 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/Role.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/Role.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl;
+package org.onlab.onos.of.controller.impl;
 
 import org.projectfloodlight.openflow.protocol.OFControllerRole;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageCategory.java
similarity index 92%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageCategory.java
index 37ac321..643c639 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageCategory.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageCategory.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
@@ -30,7 +30,7 @@
     /**
      * The category for the log messages for this class.
      *
-     * @return
+     * @return category
      */
     String value() default "Core";
 }
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDoc.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDoc.java
index 313e074..6f0db4d 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDoc.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDoc.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDocs.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDocs.java
index 74d4405..f8b0dd9 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/annotations/LogMessageDocs.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/annotations/LogMessageDocs.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.annotations;
+package org.onlab.onos.of.controller.impl.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/DebugCounter.java
similarity index 99%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/DebugCounter.java
index 76110b0..f88a43e 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/DebugCounter.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/DebugCounter.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounter.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounter.java
index e157cf2..2dc0c0a 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounter.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounter.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 public interface IDebugCounter {
     /**
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounterService.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounterService.java
index 7f55040..216ee74 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/IDebugCounterService.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/IDebugCounterService.java
@@ -1,10 +1,10 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 
 
 import java.util.List;
 
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter.DebugCounterInfo;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
 
 //CHECKSTYLE:OFF
 public interface IDebugCounterService {
@@ -228,7 +228,8 @@
      * may not be enabled for counting, but if it is registered the method will
      * return true.
      *
-     * @param param
+     * @param moduleName
+     * @param counterHierarchy
      * @return false if moduleCounterHierarchy is not a registered counter
      */
     public boolean containsModuleCounterHierarchy(String moduleName,
@@ -240,7 +241,7 @@
      * a counter enabled for counting, but if it is registered the method will
      * return true.
      *
-     * @param param
+     * @param moduleName
      * @return false if moduleName is not a registered counter
      */
     public boolean containsModuleName(String moduleName);
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/NullDebugCounter.java
similarity index 94%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/NullDebugCounter.java
index 4a88e2e..ae476ea 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/debugcounter/NullDebugCounter.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/debugcounter/NullDebugCounter.java
@@ -1,9 +1,9 @@
-package net.onrc.onos.of.ctl.debugcounter;
+package org.onlab.onos.of.controller.impl.debugcounter;
 
 import java.util.Collections;
 import java.util.List;
 
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter.DebugCounterInfo;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
 
 //CHECKSTYLE:OFF
 public class NullDebugCounter implements IDebugCounterService {
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java
index 84f090a..1f0b36d 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/Controller.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/Controller.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.lang.management.ManagementFactory;
 import java.lang.management.RuntimeMXBean;
@@ -29,24 +29,24 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
 
-import net.onrc.onos.of.ctl.IOFSwitchManager;
-import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.annotations.LogMessageDoc;
-import net.onrc.onos.of.ctl.annotations.LogMessageDocs;
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterType;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.RoleRecvStatus;
-import net.onrc.onos.of.ctl.registry.IControllerRegistry;
-import net.onrc.onos.of.ctl.registry.RegistryException;
-import net.onrc.onos.of.ctl.registry.IControllerRegistry.ControlChangeCallback;
-import net.onrc.onos.of.ctl.util.Dpid;
-import net.onrc.onos.of.ctl.util.DummySwitchForTesting;
-import net.onrc.onos.of.ctl.util.InstanceId;
-import net.onrc.onos.of.ctl.IOFSwitch;
-import net.onrc.onos.of.ctl.IOFSwitch.PortChangeType;
+import org.onlab.onos.of.controller.impl.IOFSwitchManager;
+import org.onlab.onos.of.controller.impl.Role;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterType;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.RoleRecvStatus;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
+import org.onlab.onos.of.controller.impl.registry.RegistryException;
+import org.onlab.onos.of.controller.impl.registry.IControllerRegistry.ControlChangeCallback;
+import org.onlab.onos.of.controller.impl.util.Dpid;
+import org.onlab.onos.of.controller.impl.util.DummySwitchForTesting;
+import org.onlab.onos.of.controller.impl.util.InstanceId;
+import org.onlab.onos.of.controller.impl.IOFSwitch;
+import org.onlab.onos.of.controller.impl.IOFSwitch.PortChangeType;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -242,7 +242,9 @@
     /**
      * Indicates that ports on the given switch have changed. Enqueue a
      * switch update.
-     * @param sw
+     * @param dpid
+     * @param port
+     * @param changeType
      */
     protected void notifyPortChanged(long dpid, OFPortDesc port,
             PortChangeType changeType) {
@@ -479,8 +481,6 @@
 
     /**
      * Tell controller that we're ready to accept switches loop.
-     *
-     * @throws IOException
      */
     @LogMessageDocs({
             @LogMessageDoc(message = "Listening for switch connections on {address}",
@@ -818,7 +818,7 @@
     /**
      * Forward to the driver-manager to get an IOFSwitch instance.
      * @param desc
-     * @return
+     * @return switch instance
      */
     protected IOFSwitch getOFSwitchInstance(OFDescStatsReply desc, OFVersion ofv) {
         if (switchManager == null) {
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java
similarity index 94%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java
index 48856a9..c199487 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutException.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Exception is thrown when the handshake fails to complete.
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java
index 2ed3fd2..10a42ca 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/HandshakeTimeoutHandler.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/HandshakeTimeoutHandler.java
@@ -15,7 +15,7 @@
 *    under the License.
 **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java
similarity index 98%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java
index 764e48f..667a051 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFChannelHandler.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandler.java
@@ -1,5 +1,5 @@
 //CHECKSTYLE:OFF
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.io.IOException;
 import java.nio.channels.ClosedChannelException;
@@ -10,14 +10,14 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.RejectedExecutionException;
 
-import net.onrc.onos.of.ctl.IOFSwitch;
-import net.onrc.onos.of.ctl.IOFSwitch.PortChangeEvent;
-import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.annotations.LogMessageDoc;
-import net.onrc.onos.of.ctl.annotations.LogMessageDocs;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
-import net.onrc.onos.of.ctl.internal.Controller.Counters;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.ChannelState.RoleReplyInfo;
+import org.onlab.onos.of.controller.impl.IOFSwitch;
+import org.onlab.onos.of.controller.impl.IOFSwitch.PortChangeEvent;
+import org.onlab.onos.of.controller.impl.Role;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
+import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.internal.Controller.Counters;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.ChannelState.RoleReplyInfo;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java
index ff6fbf5..3035103 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageDecoder.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageDecoder.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 
 import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java
similarity index 96%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java
index 86933fc..14a6db5 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OFMessageEncoder.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OFMessageEncoder.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.List;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java
index 30f0287..02e3520 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/OpenflowPipelineFactory.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/OpenflowPipelineFactory.java
@@ -15,7 +15,7 @@
 *    under the License.
 **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import java.util.concurrent.ThreadPoolExecutor;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
similarity index 86%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
index 92c673c..53227aa 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeAlreadyStarted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when IOFSwitch.startDriverHandshake() is called more than once.
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeCompleted.java
similarity index 91%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeCompleted.java
index 1600854..ba792e5 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeCompleted.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeCompleted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import org.projectfloodlight.openflow.protocol.OFMessage;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeException.java
similarity index 91%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeException.java
index c7d68f3..49fdead 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Base class for exception thrown by switch driver sub-handshake processing.
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeNotStarted.java
similarity index 88%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeNotStarted.java
index d568cc6..72b17dc 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeNotStarted.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeNotStarted.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when a switch driver's sub-handshake has not been started but an
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeStateException.java
similarity index 88%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeStateException.java
index 6091a86..191d1bb 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchDriverSubHandshakeStateException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchDriverSubHandshakeStateException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * Thrown when a switch driver's sub-handshake state-machine receives an
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchStateException.java
similarity index 96%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchStateException.java
index e51b60d..d82e917 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/internal/SwitchStateException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/internal/SwitchStateException.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 /**
  * This exception indicates an error or unexpected message during
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/ControllerRegistryEntry.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/ControllerRegistryEntry.java
index 2472f64..5e83348 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/ControllerRegistryEntry.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/ControllerRegistryEntry.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IControllerRegistry.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IControllerRegistry.java
index 0b67338..21b1709 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IControllerRegistry.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IControllerRegistry.java
@@ -1,10 +1,10 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import net.onrc.onos.of.ctl.util.InstanceId;
+import org.onlab.onos.of.controller.impl.util.InstanceId;
 
 /**
  * A registry service that allows ONOS to register controllers and switches in a
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IdBlock.java
similarity index 91%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IdBlock.java
index 45d3c83..406a60d 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/IdBlock.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/IdBlock.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 public class IdBlock {
     private final long start;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/RegistryException.java
similarity index 85%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/RegistryException.java
index 06f5932..029f028 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/registry/RegistryException.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/registry/RegistryException.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.registry;
+package org.onlab.onos.of.controller.impl.registry;
 
 public class RegistryException extends Exception {
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/Dpid.java
similarity index 96%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/Dpid.java
index 5544354..dec8424 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/Dpid.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/Dpid.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import org.projectfloodlight.openflow.util.HexString;
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/DummySwitchForTesting.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/DummySwitchForTesting.java
index a8eabce..2d925f8 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/DummySwitchForTesting.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/DummySwitchForTesting.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -25,10 +25,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import net.onrc.onos.of.ctl.IOFSwitch;
-import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService.CounterException;
+import org.onlab.onos.of.controller.impl.IOFSwitch;
+import org.onlab.onos.of.controller.impl.Role;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
 
 public class DummySwitchForTesting implements IOFSwitch {
 
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/EnumBitmaps.java
similarity index 98%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/EnumBitmaps.java
index fe6ccc0..c7734c0 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/EnumBitmaps.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/EnumBitmaps.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.EnumSet;
 import java.util.Set;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/FilterIterator.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/FilterIterator.java
index fdde82c..319aae8 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/FilterIterator.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/FilterIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/InstanceId.java
similarity index 94%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/InstanceId.java
index 861dec6..4a7892e 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/InstanceId.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/InstanceId.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkArgument;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/IterableIterator.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/IterableIterator.java
index 79f3c9d..a59b244 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/IterableIterator.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/IterableIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LRUHashMap.java
similarity index 95%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LRUHashMap.java
index 17f9354..866794f 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LRUHashMap.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LRUHashMap.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LinkedHashSetWrapper.java
similarity index 93%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LinkedHashSetWrapper.java
index 629e536..1778d06 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/LinkedHashSetWrapper.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/LinkedHashSetWrapper.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Collection;
 import java.util.LinkedHashSet;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/MultiIterator.java
similarity index 97%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/MultiIterator.java
index 693a8bf..7b709e9 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/MultiIterator.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/MultiIterator.java
@@ -15,7 +15,7 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/OrderedCollection.java
similarity index 86%
rename from of/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java
rename to of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/OrderedCollection.java
index f032212..9dce568 100644
--- a/of/ctl/src/main/java/net/onrc/onos/of/ctl/util/OrderedCollection.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/controller/impl/util/OrderedCollection.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.util;
+package org.onlab.onos.of.controller.impl.util;
 
 import java.util.Collection;
 
diff --git a/of/ctl/src/main/javadoc/org/onlab/onos/of/controller/impl/package.html b/of/ctl/src/main/javadoc/org/onlab/onos/of/controller/impl/package.html
new file mode 100644
index 0000000..a3eb2c8
--- /dev/null
+++ b/of/ctl/src/main/javadoc/org/onlab/onos/of/controller/impl/package.html
@@ -0,0 +1,3 @@
+<body>
+Implementation of the OpenFlow controller IO subsystem.
+</body>
\ No newline at end of file
diff --git a/of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java b/of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/ControllerTest.java
similarity index 97%
rename from of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java
rename to of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/ControllerTest.java
index ea7d884..5de3647 100644
--- a/of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/ControllerTest.java
+++ b/of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/ControllerTest.java
@@ -15,10 +15,10 @@
  *    under the License.
  **/
 
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import junit.framework.TestCase;
-import net.onrc.onos.of.ctl.IOFSwitch;
+import org.onlab.onos.of.controller.impl.IOFSwitch;
 
 import org.easymock.EasyMock;
 import org.junit.After;
diff --git a/of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java b/of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandlerTest.java
similarity index 98%
rename from of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java
rename to of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandlerTest.java
index 0213cce..f267923 100644
--- a/of/ctl/src/test/java/net/onrc/onos/of/ctl/internal/OFChannelHandlerTest.java
+++ b/of/ctl/src/test/java/org/onlab/onos/of/controller/impl/internal/OFChannelHandlerTest.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.of.ctl.internal;
+package org.onlab.onos.of.controller.impl.internal;
 
 import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMock;
@@ -18,11 +18,11 @@
 import java.util.List;
 import java.util.Set;
 
-import net.onrc.onos.of.ctl.IOFSwitch;
-import net.onrc.onos.of.ctl.Role;
-import net.onrc.onos.of.ctl.debugcounter.DebugCounter;
-import net.onrc.onos.of.ctl.debugcounter.IDebugCounterService;
-import net.onrc.onos.of.ctl.internal.OFChannelHandler.RoleRecvStatus;
+import org.onlab.onos.of.controller.impl.IOFSwitch;
+import org.onlab.onos.of.controller.impl.Role;
+import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter;
+import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
+import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.RoleRecvStatus;
 
 import org.easymock.Capture;
 import org.easymock.CaptureType;
diff --git a/pom.xml b/pom.xml
index 6227d9d..2cf2936 100644
--- a/pom.xml
+++ b/pom.xml
@@ -193,9 +193,7 @@
                     </configuration>
                 </plugin>
 
-
                 <!-- TODO: add jacoco plugin for unit test coverage; for explicit invocation only -->
-
                 <!-- TODO: add findbugs plugin for static code analysis; for explicit invocation only -->
                 <!-- TODO: add sonarqube plugin for code analysis; for explicit invocation only -->
 
@@ -205,6 +203,11 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <version>2.12.1</version>
                 <dependencies>
@@ -245,7 +248,7 @@
                         <group>
                             <title>Network Model &amp; Services</title>
                             <packages>
-                                org.onlab.onos.net:org.onlab.onos.net.*
+                                org.onlab.onos.*
                             </packages>
                         </group>
                         <group>
@@ -258,7 +261,7 @@
                             <title>OpenFlow Providers &amp; Controller
                             </title>
                             <packages>
-                                org.onlab.onos.provider.of:org.onlab.onos.provider.of.*:org.onlab.onos.of.*
+                                org.onlab.onos.net.provider.of:org.onlab.onos.net.provider.of.*:org.onlab.onos.of.*
                             </packages>
                         </group>
                         <group>