Sketching SB & NB API.
Modified onos-of-api pom to subsume openflowj loxi-generated stuff.
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..449fcbe 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.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..a2016a1 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.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..40ffc3e 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.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..1ec0314 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.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..d3ffc5f 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.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..2799788 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.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..59ddcc2 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.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..66db967 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.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..c66054f 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.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..2ef8955 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.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..8822bbf 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.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..f1b12e3 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.provider.ProviderService;
 
 /**
  * Means for injecting link information into the core.
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..a9ec00f 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.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..159d3ff 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.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..0841700 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.provider.ProviderService;
 
 /**
  * Means for injecting topology 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/provider/Provider.java
similarity index 80%
rename from net/api/src/main/java/org/onlab/onos/net/Provider.java
rename to net/api/src/main/java/org/onlab/onos/provider/Provider.java
index eda436b..8fb047f 100644
--- a/net/api/src/main/java/org/onlab/onos/net/Provider.java
+++ b/net/api/src/main/java/org/onlab/onos/provider/Provider.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.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/provider/ProviderBroker.java
similarity index 95%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderBroker.java
rename to net/api/src/main/java/org/onlab/onos/provider/ProviderBroker.java
index 63d7189..20a612e 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderBroker.java
+++ b/net/api/src/main/java/org/onlab/onos/provider/ProviderBroker.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.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/provider/ProviderId.java
similarity index 95%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderId.java
rename to net/api/src/main/java/org/onlab/onos/provider/ProviderId.java
index 53dd739..a5a297e 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderId.java
+++ b/net/api/src/main/java/org/onlab/onos/provider/ProviderId.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.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/provider/ProviderService.java
similarity index 83%
rename from net/api/src/main/java/org/onlab/onos/net/ProviderService.java
rename to net/api/src/main/java/org/onlab/onos/provider/ProviderService.java
index 8a7d7e9..fcfc7ad 100644
--- a/net/api/src/main/java/org/onlab/onos/net/ProviderService.java
+++ b/net/api/src/main/java/org/onlab/onos/provider/ProviderService.java
@@ -1,4 +1,4 @@
-package org.onlab.onos.net;
+package org.onlab.onos.provider;
 
 /**
  * Abstraction of a service through which providers can inject information
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/pom.xml b/pom.xml
index 6227d9d..5283db4 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>