diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
index 83bd44f..185e094 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
@@ -24,13 +24,13 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.onosproject.grpc.Device.DeviceProviderMsg;
-import org.onosproject.grpc.Device.DeviceProviderServiceMsg;
-import org.onosproject.grpc.Device.IsReachableRequest;
-import org.onosproject.grpc.Device.RoleChanged;
-import org.onosproject.grpc.Device.TriggerProbe;
-import org.onosproject.grpc.DeviceProviderRegistryRpcGrpc;
-import org.onosproject.grpc.DeviceProviderRegistryRpcGrpc.DeviceProviderRegistryRpcStub;
+import org.onosproject.grpc.net.device.DeviceProviderRegistryRpcGrpc;
+import org.onosproject.grpc.net.device.DeviceProviderRegistryRpcGrpc.DeviceProviderRegistryRpcStub;
+import org.onosproject.grpc.net.device.DeviceService.DeviceProviderMsg;
+import org.onosproject.grpc.net.device.DeviceService.DeviceProviderServiceMsg;
+import org.onosproject.grpc.net.device.DeviceService.IsReachableRequest;
+import org.onosproject.grpc.net.device.DeviceService.RoleChanged;
+import org.onosproject.grpc.net.device.DeviceService.TriggerProbe;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.device.DeviceDescription;
@@ -112,7 +112,7 @@
         checkValidity();
 
         DeviceProviderServiceMsg.Builder builder = DeviceProviderServiceMsg.newBuilder();
-        List<org.onosproject.grpc.Port.PortDescription> portDescs =
+        List<org.onosproject.grpc.net.Port.PortDescription> portDescs =
                 portDescriptions.stream()
                     .map(GrpcDeviceUtils::translate)
                     .collect(toList());
@@ -160,7 +160,7 @@
         checkValidity();
 
         DeviceProviderServiceMsg.Builder builder = DeviceProviderServiceMsg.newBuilder();
-        List<org.onosproject.grpc.Port.PortStatistics> portStats =
+        List<org.onosproject.grpc.net.Port.PortStatistics> portStats =
                 portStatistics.stream()
                     .map(GrpcDeviceUtils::translate)
                     .collect(toList());
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcDeviceUtils.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcDeviceUtils.java
index 0633ce0..647acf7b24 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcDeviceUtils.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcDeviceUtils.java
@@ -20,8 +20,8 @@
 import java.util.Map;
 
 import org.onlab.packet.ChassisId;
-import org.onosproject.grpc.Device.DeviceType;
-import org.onosproject.grpc.Port.PortType;
+import org.onosproject.grpc.net.Device.DeviceType;
+import org.onosproject.grpc.net.Port.PortType;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.Device;
@@ -55,7 +55,7 @@
      * @param role mastership role in gRPC enum
      * @return equivalent in ONOS enum
      */
-    public static MastershipRole translate(org.onosproject.grpc.Device.MastershipRole role) {
+    public static MastershipRole translate(org.onosproject.grpc.net.Device.MastershipRole role) {
         switch (role) {
         case NONE:
             return MastershipRole.NONE;
@@ -77,15 +77,15 @@
      * @param newRole ONOS' mastership role
      * @return equivalent in gRPC message enum
      */
-    public static org.onosproject.grpc.Device.MastershipRole translate(MastershipRole newRole) {
+    public static org.onosproject.grpc.net.Device.MastershipRole translate(MastershipRole newRole) {
         switch (newRole) {
         case MASTER:
-            return org.onosproject.grpc.Device.MastershipRole.MASTER;
+            return org.onosproject.grpc.net.Device.MastershipRole.MASTER;
         case STANDBY:
-            return org.onosproject.grpc.Device.MastershipRole.STANDBY;
+            return org.onosproject.grpc.net.Device.MastershipRole.STANDBY;
         case NONE:
         default:
-            return org.onosproject.grpc.Device.MastershipRole.NONE;
+            return org.onosproject.grpc.net.Device.MastershipRole.NONE;
         }
     }
 
@@ -96,7 +96,7 @@
      * @param deviceDescription gRPC message
      * @return {@link DeviceDescription}
      */
-    public static DeviceDescription translate(org.onosproject.grpc.Device.DeviceDescription deviceDescription) {
+    public static DeviceDescription translate(org.onosproject.grpc.net.Device.DeviceDescription deviceDescription) {
         URI uri = URI.create(deviceDescription.getDeviceUri());
         Device.Type type = translate(deviceDescription.getType());
         String manufacturer = deviceDescription.getManufacturer();
@@ -116,9 +116,9 @@
      * @param deviceDescription {@link DeviceDescription}
      * @return gRPC DeviceDescription message
      */
-    public static org.onosproject.grpc.Device.DeviceDescription translate(DeviceDescription deviceDescription) {
+    public static org.onosproject.grpc.net.Device.DeviceDescription translate(DeviceDescription deviceDescription) {
 
-        return org.onosproject.grpc.Device.DeviceDescription.newBuilder()
+        return org.onosproject.grpc.net.Device.DeviceDescription.newBuilder()
             .setDeviceUri(deviceDescription.deviceUri().toString())
             .setType(translate(deviceDescription.type()))
             .setManufacturer(deviceDescription.manufacturer())
@@ -137,7 +137,7 @@
      * @param type      gRPC message
      * @return  {@link Device.Type}
      */
-    public static Device.Type translate(org.onosproject.grpc.Device.DeviceType type) {
+    public static Device.Type translate(org.onosproject.grpc.net.Device.DeviceType type) {
         switch (type) {
         case BALANCER:
             return Device.Type.BALANCER;
@@ -224,7 +224,7 @@
      * @param portDescription gRPC message
      * @return {@link PortDescription}
      */
-    public static PortDescription translate(org.onosproject.grpc.Port.PortDescription portDescription) {
+    public static PortDescription translate(org.onosproject.grpc.net.Port.PortDescription portDescription) {
         PortNumber number = PortNumber.fromString(portDescription.getPortNumber());
         boolean isEnabled = portDescription.getIsEnabled();
         Port.Type type = translate(portDescription.getType());
@@ -240,9 +240,9 @@
      * @param portDescription {@link PortDescription}
      * @return gRPC PortDescription message
      */
-    public static org.onosproject.grpc.Port.PortDescription translate(PortDescription portDescription) {
+    public static org.onosproject.grpc.net.Port.PortDescription translate(PortDescription portDescription) {
         // TODO How to deal with more specific Port...
-        return org.onosproject.grpc.Port.PortDescription.newBuilder()
+        return org.onosproject.grpc.net.Port.PortDescription.newBuilder()
                 .setPortNumber(portDescription.portNumber().toString())
                 .setIsEnabled(portDescription.isEnabled())
                 .setType(translate(portDescription.type()))
@@ -316,7 +316,7 @@
      * @param portStatistics gRPC PortStatistics message
      * @return {@link PortStatistics}
      */
-    public static PortStatistics translate(org.onosproject.grpc.Port.PortStatistics portStatistics) {
+    public static PortStatistics translate(org.onosproject.grpc.net.Port.PortStatistics portStatistics) {
         // TODO implement adding missing fields
         return DefaultPortStatistics.builder()
                 .setPort(portStatistics.getPort())
@@ -331,9 +331,9 @@
      * @param portStatistics {@link PortStatistics}
      * @return gRPC PortStatistics message
      */
-    public static org.onosproject.grpc.Port.PortStatistics translate(PortStatistics portStatistics) {
+    public static org.onosproject.grpc.net.Port.PortStatistics translate(PortStatistics portStatistics) {
         // TODO implement adding missing fields
-        return org.onosproject.grpc.Port.PortStatistics.newBuilder()
+        return org.onosproject.grpc.net.Port.PortStatistics.newBuilder()
                 .setPort(portStatistics.port())
                 .setPacketsReceived(portStatistics.packetsReceived())
                 .setPacketsSent(portStatistics.packetsSent())
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
index f14b4ef..a36b21e 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
@@ -36,19 +36,19 @@
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.grpc.Device.DeviceConnected;
-import org.onosproject.grpc.Device.DeviceDisconnected;
-import org.onosproject.grpc.Device.DeviceProviderMsg;
-import org.onosproject.grpc.Device.DeviceProviderServiceMsg;
-import org.onosproject.grpc.Device.IsReachableResponse;
-import org.onosproject.grpc.Device.PortStatusChanged;
-import org.onosproject.grpc.Device.ReceivedRoleReply;
-import org.onosproject.grpc.Device.RegisterProvider;
-import org.onosproject.grpc.Device.UpdatePortStatistics;
-import org.onosproject.grpc.Device.UpdatePorts;
-import org.onosproject.grpc.DeviceProviderRegistryRpcGrpc;
-import org.onosproject.grpc.DeviceProviderRegistryRpcGrpc.DeviceProviderRegistryRpc;
-import org.onosproject.grpc.LinkProviderServiceRpcGrpc;
+import org.onosproject.grpc.net.device.DeviceProviderRegistryRpcGrpc;
+import org.onosproject.grpc.net.device.DeviceProviderRegistryRpcGrpc.DeviceProviderRegistryRpc;
+import org.onosproject.grpc.net.device.DeviceService.DeviceConnected;
+import org.onosproject.grpc.net.device.DeviceService.DeviceDisconnected;
+import org.onosproject.grpc.net.device.DeviceService.DeviceProviderMsg;
+import org.onosproject.grpc.net.device.DeviceService.DeviceProviderServiceMsg;
+import org.onosproject.grpc.net.device.DeviceService.IsReachableResponse;
+import org.onosproject.grpc.net.device.DeviceService.PortStatusChanged;
+import org.onosproject.grpc.net.device.DeviceService.ReceivedRoleReply;
+import org.onosproject.grpc.net.device.DeviceService.RegisterProvider;
+import org.onosproject.grpc.net.device.DeviceService.UpdatePortStatistics;
+import org.onosproject.grpc.net.device.DeviceService.UpdatePorts;
+import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.PortNumber;
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
index 912a1be..4dd4a0a 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
@@ -21,12 +21,12 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.onosproject.grpc.Link.LinkDetectedMsg;
-import org.onosproject.grpc.Link.LinkType;
-import org.onosproject.grpc.Link.LinkVanishedMsg;
-import org.onosproject.grpc.Link.Void;
-import org.onosproject.grpc.LinkProviderServiceRpcGrpc;
-import org.onosproject.grpc.LinkProviderServiceRpcGrpc.LinkProviderServiceRpcFutureStub;
+import org.onosproject.grpc.net.Link.LinkType;
+import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc;
+import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc.LinkProviderServiceRpcFutureStub;
+import org.onosproject.grpc.net.link.LinkService.LinkDetectedMsg;
+import org.onosproject.grpc.net.link.LinkService.LinkVanishedMsg;
+import org.onosproject.grpc.net.link.LinkService.Void;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link.Type;
@@ -237,7 +237,7 @@
     /**
      * Translates ONOS object to gRPC message.
      *
-     * @param type {@link Link.Type}
+     * @param type {@link org.onosproject.net.Link.Type Link.Type}
      * @return gRPC LinkType
      */
     private LinkType translate(Type type) {
@@ -267,8 +267,8 @@
      * @param cp {@link ConnectPoint}
      * @return gRPC ConnectPoint
      */
-    private org.onosproject.grpc.Link.ConnectPoint translate(ConnectPoint cp) {
-        return org.onosproject.grpc.Link.ConnectPoint.newBuilder()
+    private org.onosproject.grpc.net.Link.ConnectPoint translate(ConnectPoint cp) {
+        return org.onosproject.grpc.net.Link.ConnectPoint.newBuilder()
                 .setDeviceId(cp.deviceId().toString())
                 .setPortNumber(cp.port().toString())
                 .build();
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
index bf35ed2..1878426 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
@@ -19,12 +19,12 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.net.DeviceId.deviceId;
 
-import org.onosproject.grpc.Link.LinkDetectedMsg;
-import org.onosproject.grpc.Link.LinkType;
-import org.onosproject.grpc.Link.LinkVanishedMsg;
-import org.onosproject.grpc.Link.Void;
-import org.onosproject.grpc.Link.ConnectPoint.ElementIdCase;
-import org.onosproject.grpc.LinkProviderServiceRpcGrpc.LinkProviderServiceRpc;
+import org.onosproject.grpc.net.Link.ConnectPoint.ElementIdCase;
+import org.onosproject.grpc.net.Link.LinkType;
+import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc.LinkProviderServiceRpc;
+import org.onosproject.grpc.net.link.LinkService.LinkDetectedMsg;
+import org.onosproject.grpc.net.link.LinkService.LinkVanishedMsg;
+import org.onosproject.grpc.net.link.LinkService.Void;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
@@ -136,7 +136,7 @@
      * @param connectPoint gRPC message.
      * @return {@link ConnectPoint}
      */
-    private ConnectPoint translate(org.onosproject.grpc.Link.ConnectPoint connectPoint) {
+    private ConnectPoint translate(org.onosproject.grpc.net.Link.ConnectPoint connectPoint) {
         checkArgument(connectPoint.getElementIdCase() == ElementIdCase.DEVICE_ID,
                       "Only DeviceId supported.");
         return new ConnectPoint(deviceId(connectPoint.getDeviceId()),
@@ -149,7 +149,7 @@
      * @param linkDescription gRPC message
      * @return {@link LinkDescription}
      */
-    private LinkDescription translate(org.onosproject.grpc.Link.LinkDescription linkDescription) {
+    private LinkDescription translate(org.onosproject.grpc.net.Link.LinkDescription linkDescription) {
         ConnectPoint src = translate(linkDescription.getSrc());
         ConnectPoint dst = translate(linkDescription.getDst());
         Link.Type type = translate(linkDescription.getType());
@@ -161,7 +161,7 @@
      * Translates gRPC message to corresponding ONOS object.
      *
      * @param type gRPC message enum
-     * @return {@link Type}
+     * @return {@link org.onosproject.net.Link.Type Link.Type}
      */
     private Link.Type translate(LinkType type) {
         switch (type) {
