diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/NeighbourMessageContext.java b/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/NeighbourMessageContext.java
index 307a783..f498f17 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/NeighbourMessageContext.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/NeighbourMessageContext.java
@@ -24,8 +24,6 @@
 import org.onosproject.incubator.net.intf.Interface;
 import org.onosproject.net.ConnectPoint;
 
-import static com.google.common.base.Preconditions.checkState;
-
 /**
  * Context of an incoming neighbor message (e.g. ARP, NDP).
  *
@@ -34,156 +32,91 @@
  * response to the incoming message.</p>
  */
 @Beta
-public class NeighbourMessageContext {
-
-    private final NeighbourProtocol protocol;
-    private final NeighbourMessageType type;
-
-    private final IpAddress target;
-    private final IpAddress sender;
-
-    private final Ethernet eth;
-    private final ConnectPoint inPort;
-
-    private final NeighbourMessageActions actions;
-
-    /**
-     * Creates a new neighbour message context.
-     *
-     * @param actions actions
-     * @param eth ethernet frame
-     * @param inPort incoming port
-     * @param protocol message protocol
-     * @param type message type
-     * @param target target IP address
-     * @param sender sender IP address
-     */
-    public NeighbourMessageContext(NeighbourMessageActions actions,
-                                   Ethernet eth, ConnectPoint inPort,
-                                   NeighbourProtocol protocol, NeighbourMessageType type,
-                                   IpAddress target, IpAddress sender) {
-        this.actions = actions;
-        this.eth = eth;
-        this.inPort = inPort;
-        this.protocol = protocol;
-        this.type = type;
-        this.target = target;
-        this.sender = sender;
-    }
-
+public interface NeighbourMessageContext {
     /**
      * Gets the port where the packet came in to the network.
      *
      * @return connect point
      */
-    public ConnectPoint inPort() {
-        return inPort;
-    }
+    ConnectPoint inPort();
 
     /**
      * Gets the full parsed representation of the packet.
      *
      * @return ethernet header
      */
-    public Ethernet packet() {
-        return eth;
-    }
+    Ethernet packet();
 
     /**
      * Gets the protocol of the packet.
      *
      * @return protocol
      */
-    public NeighbourProtocol protocol() {
-        return protocol;
-    }
+    NeighbourProtocol protocol();
 
     /**
      * Gets the message type of the packet.
      *
      * @return message type
      */
-    public NeighbourMessageType type() {
-        return type;
-    }
+    NeighbourMessageType type();
 
     /**
      * Gets the vlan of the packet, if any.
      *
      * @return vlan
      */
-    public VlanId vlan() {
-        return VlanId.vlanId(eth.getVlanID());
-    }
+    VlanId vlan();
 
     /**
      * Gets the source MAC address of the message.
      *
      * @return source MAC address
      */
-    public MacAddress srcMac() {
-        return MacAddress.valueOf(eth.getSourceMACAddress());
-    }
+    MacAddress srcMac();
 
     /**
      * Gets the target IP address of the message.
      *
      * @return target IP address
      */
-    public IpAddress target() {
-        return target;
-    }
+    IpAddress target();
 
     /**
      * Gets the source IP address of the message.
      *
      * @return source IP address
      */
-    public IpAddress sender() {
-        return sender;
-    }
+    IpAddress sender();
 
     /**
      * Proxies the message to a given output port.
      *
      * @param outPort output port
      */
-    public void proxy(ConnectPoint outPort) {
-        actions.proxy(this, outPort);
-    }
+    void proxy(ConnectPoint outPort);
 
     /**
      * Proxies the message to a given interface.
      *
      * @param outIntf output interface
      */
-    public void proxy(Interface outIntf) {
-        actions.proxy(this, outIntf);
-    }
+    void proxy(Interface outIntf);
 
     /**
      * Replies to the request message with a given MAC address.
      *
      * @param targetMac target MAC address
      */
-    public void reply(MacAddress targetMac) {
-        checkState(type == NeighbourMessageType.REQUEST, "can only reply to requests");
-
-        actions.reply(this, targetMac);
-    }
+    void reply(MacAddress targetMac);
 
     /**
      * Floods the incoming message out all ports except the input port.
      */
-    public void flood() {
-        actions.flood(this);
-    }
+    void flood();
 
     /**
      * Drops the incoming message.
      */
-    public void drop() {
-        actions.drop(this);
-    }
-
+    void drop();
 }
