diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java b/apps/routing/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
index c303bdf..e0e70f9 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
@@ -159,7 +159,7 @@
                 if (h == null) {
                     context.drop();
                 } else {
-                    context.proxy(h.location());
+                    context.forward(h.location());
                 }
                 break;
             default:
@@ -182,7 +182,7 @@
                     .stream()
                     .filter(intf -> intf.vlan().equals(context.vlan()))
                     .map(intf -> intf.connectPoint())
-                    .forEach(context::proxy);
+                    .forEach(context::forward);
         }
     }
 
diff --git a/apps/vpls/src/main/java/org/onosproject/vpls/VplsNeighbourHandler.java b/apps/vpls/src/main/java/org/onosproject/vpls/VplsNeighbourHandler.java
index 9f3ea06..dad993b 100644
--- a/apps/vpls/src/main/java/org/onosproject/vpls/VplsNeighbourHandler.java
+++ b/apps/vpls/src/main/java/org/onosproject/vpls/VplsNeighbourHandler.java
@@ -127,14 +127,14 @@
                     interfaceService.getInterfacesByVlan(context.vlan())
                             .stream()
                             .map(Interface::connectPoint)
-                            .forEach(context::proxy);
+                            .forEach(context::forward);
                     break;
                 case REPLY:
                     hostService.getHostsByMac(context.dstMac())
                             .stream()
                             .filter(host -> host.vlan().equals(context.vlan()))
                             .map(Host::location)
-                            .forEach(context::proxy);
+                            .forEach(context::forward);
                     break;
 
                 default:
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/DefaultNeighbourMessageHandler.java b/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/DefaultNeighbourMessageHandler.java
index 86fb848..cb4814a 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/DefaultNeighbourMessageHandler.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/neighbour/DefaultNeighbourMessageHandler.java
@@ -39,7 +39,7 @@
             if (h == null) {
                 context.flood();
             } else {
-                context.proxy(h.location());
+                context.forward(h.location());
             }
             break;
         case REQUEST:
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 0c609ae..620bbad 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
@@ -100,18 +100,22 @@
     IpAddress sender();
 
     /**
-     * Proxies the message to a given output port.
+     * Forwards the message to a given output port.
      *
      * @param outPort output port
      */
-    void proxy(ConnectPoint outPort);
+    void forward(ConnectPoint outPort);
 
     /**
-     * Proxies the message to a given interface.
-     *
+     * Forwards the message to a given interface.
+     * <p>
+     * The message will be modified to fit the parameters of the outgoing
+     * interface. For example, if the interface has a VLAN configured, the
+     * outgoing packet will have that VLAN tag added.
+     * </p>
      * @param outIntf output interface
      */
-    void proxy(Interface outIntf);
+    void forward(Interface outIntf);
 
     /**
      * Replies to the request message with a given MAC address.
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java b/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
index 4241a34..2c28bfd 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/neighbour/impl/DefaultNeighbourMessageContext.java
@@ -124,12 +124,12 @@
     }
 
     @Override
-    public void proxy(ConnectPoint outPort) {
+    public void forward(ConnectPoint outPort) {
         actions.forward(this, outPort);
     }
 
     @Override
-    public void proxy(Interface outIntf) {
+    public void forward(Interface outIntf) {
         actions.forward(this, outIntf);
     }
 
