diff --git a/apps/kafka-integration/core/pom.xml b/apps/kafka-integration/core/pom.xml
index 2974fa6..683e9c7 100644
--- a/apps/kafka-integration/core/pom.xml
+++ b/apps/kafka-integration/core/pom.xml
@@ -66,7 +66,7 @@
 
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-incubator-protobuf</artifactId>
+            <artifactId>onos-incubator-protobuf-models</artifactId>
             <version>${project.version}</version>
         </dependency>
 
diff --git a/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/DeviceEventConverter.java b/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/DeviceEventConverter.java
index 40c6561..696467b 100644
--- a/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/DeviceEventConverter.java
+++ b/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/DeviceEventConverter.java
@@ -18,12 +18,12 @@
 import com.google.protobuf.GeneratedMessageV3;
 
 import org.onosproject.event.Event;
-import org.onosproject.grpc.net.Device.DeviceCore;
-import org.onosproject.grpc.net.Device.DeviceType;
-import org.onosproject.grpc.net.DeviceEvent.DeviceEventType;
-import org.onosproject.grpc.net.DeviceEvent.DeviceNotification;
-import org.onosproject.grpc.net.Port.PortCore;
-import org.onosproject.grpc.net.Port.PortType;
+import org.onosproject.grpc.net.models.DeviceProtoOuterClass.DeviceProto;
+import org.onosproject.grpc.net.models.DeviceEnums.DeviceType;
+import org.onosproject.grpc.net.models.DeviceEnums.DeviceEventType;
+import org.onosproject.grpc.net.models.DeviceEventProto.DeviceNotification;
+import org.onosproject.grpc.net.models.PortEnums.PortType;
+import org.onosproject.grpc.net.models.PortProtoOuterClass;
 import org.onosproject.net.device.DeviceEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,7 +42,7 @@
 
         if (!deviceEventTypeSupported(deviceEvent)) {
             log.error("Unsupported Onos Device Event {}. There is no matching"
-                    + "proto Device Event type", deviceEvent.type().toString());
+                              + "proto Device Event type", deviceEvent.type().toString());
             return null;
         }
 
@@ -70,8 +70,8 @@
         DeviceNotification.Builder notificationBuilder =
                 DeviceNotification.newBuilder();
 
-        DeviceCore deviceCore =
-                DeviceCore.newBuilder()
+        DeviceProto deviceCore =
+                DeviceProto.newBuilder()
                         .setChassisId(deviceEvent.subject().chassisId().id()
                                               .toString())
                         .setDeviceId(deviceEvent.subject().id().toString())
@@ -83,10 +83,10 @@
                                          .valueOf(deviceEvent.subject().type().name()))
                         .build();
 
-        PortCore portCore = null;
+        PortProtoOuterClass.PortProto portProto = null;
         if (deviceEvent.port() != null) {
-            portCore =
-                    PortCore.newBuilder()
+            portProto =
+                    PortProtoOuterClass.PortProto.newBuilder()
                             .setIsEnabled(deviceEvent.port().isEnabled())
                             .setPortNumber(deviceEvent.port().number()
                                                    .toString())
@@ -95,7 +95,7 @@
                                              .valueOf(deviceEvent.port().type().name()))
                             .build();
 
-            notificationBuilder.setPort(portCore);
+            notificationBuilder.setPort(portProto);
         }
 
         notificationBuilder.setDeviceEventType(getProtoType(deviceEvent))
diff --git a/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/LinkEventConverter.java b/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/LinkEventConverter.java
index fe18f42..c8d4bca 100644
--- a/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/LinkEventConverter.java
+++ b/apps/kafka-integration/core/src/main/java/org/onosproject/kafkaintegration/converter/LinkEventConverter.java
@@ -16,12 +16,12 @@
 package org.onosproject.kafkaintegration.converter;
 
 import org.onosproject.event.Event;
-import org.onosproject.grpc.net.Link.ConnectPoint;
-import org.onosproject.grpc.net.Link.LinkCore;
-import org.onosproject.grpc.net.Link.LinkState;
-import org.onosproject.grpc.net.Link.LinkType;
-import org.onosproject.grpc.net.LinkEvent.LinkEventType;
-import org.onosproject.grpc.net.LinkEvent.LinkNotification;
+import org.onosproject.grpc.net.models.ConnectPointProto.ConnectPoint;
+import org.onosproject.grpc.net.models.LinkProtoOuterClass.LinkProto;
+import org.onosproject.grpc.net.models.LinkEnums.LinkState;
+import org.onosproject.grpc.net.models.LinkEnums.LinkType;
+import org.onosproject.grpc.net.models.LinkEnums.LinkEventType;
+import org.onosproject.grpc.net.models.LinkEventProto.LinkNotification;
 import org.onosproject.net.link.LinkEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,7 +42,7 @@
 
         if (!linkEventTypeSupported(linkEvent)) {
             log.error("Unsupported Onos Event {}. There is no matching "
-                    + "proto Event type", linkEvent.type().toString());
+                              + "proto Event type", linkEvent.type().toString());
             return null;
         }
 
@@ -62,20 +62,20 @@
     private LinkNotification buildDeviceProtoMessage(LinkEvent linkEvent) {
         LinkNotification notification = LinkNotification.newBuilder()
                 .setLinkEventType(getProtoType(linkEvent))
-                .setLink(LinkCore.newBuilder()
-                        .setState(LinkState
-                                .valueOf(linkEvent.subject().state().name()))
-                        .setType(LinkType.valueOf(linkEvent.subject().type().name()))
-                        .setDst(ConnectPoint.newBuilder()
-                                .setDeviceId(linkEvent.subject().dst()
-                                        .deviceId().toString())
-                                .setPortNumber(linkEvent.subject().dst().port()
-                                        .toString()))
-                        .setSrc(ConnectPoint.newBuilder()
-                                .setDeviceId(linkEvent.subject().src()
-                                        .deviceId().toString())
-                                .setPortNumber(linkEvent.subject().src().port()
-                                        .toString())))
+                .setLink(LinkProto.newBuilder()
+                                 .setState(LinkState
+                                                   .valueOf(linkEvent.subject().state().name()))
+                                 .setType(LinkType.valueOf(linkEvent.subject().type().name()))
+                                 .setDst(ConnectPoint.newBuilder()
+                                                 .setDeviceId(linkEvent.subject().dst()
+                                                                      .deviceId().toString())
+                                                 .setPortNumber(linkEvent.subject().dst().port()
+                                                                        .toString()))
+                                 .setSrc(ConnectPoint.newBuilder()
+                                                 .setDeviceId(linkEvent.subject().src()
+                                                                      .deviceId().toString())
+                                                 .setPortNumber(linkEvent.subject().src().port()
+                                                                        .toString())))
                 .build();
 
         return notification;
diff --git a/bucklets/grpc.bucklet b/bucklets/grpc.bucklet
index 276586e..6afcea7 100644
--- a/bucklets/grpc.bucklet
+++ b/bucklets/grpc.bucklet
@@ -52,7 +52,7 @@
 
 def fetch_grpc_plugin_binary(
         grpc_plugin_version = GRPC_PLUGIN_VERSION
-):
+    ):
     file_name = "protoc-gen-grpc-java-%s-%s.exe" % (grpc_plugin_version, get_system_arch())
     if file_name not in GRPC_JAVA_SHA1S:
         raise Exception('Cannot download %s, architecture not supported' % file_name)
@@ -79,10 +79,10 @@
     name = None,
     deps = [],
     #NOTE: if targeting a directory also built with maven this path MUST end in
-        # /proto because maven plugin interprets imports relative to the proto
-        # directory and BUCK interprets imports relative to the last directory
-        # listed in the first listed proto_path which contains the specified
-        # file
+    # /proto because maven plugin interprets imports relative to the proto
+    # directory and BUCK interprets imports relative to the last directory
+    # listed in the first listed proto_path which contains the specified
+    # file
     proto_paths = [],
     proto_match_patterns = [ "**/proto/**/*.proto" ],
     protoc_version = PROTOC_VERSION,
@@ -112,7 +112,7 @@
               + '$SRCS',
     )
 
-    osgi_jar_with_tests(
+    osgi_jar(
         name = name,
         srcs = [ ':' + protoc ],
         deps = deps + [ ':' + protoc ],
diff --git a/features/features.xml b/features/features.xml
index 9d89834..c9937d2 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -32,6 +32,8 @@
         <bundle>mvn:io.netty/netty-codec/4.1.8.Final</bundle>
         <bundle>mvn:io.netty/netty-transport-native-epoll/4.1.8.Final</bundle>
         <bundle>mvn:io.netty/netty-resolver/4.1.8.Final</bundle>
+        <bundle>mvn:io.netty/netty-codec-http2/4.1.8.Final</bundle>
+        <bundle>mvn:io.netty/netty-codec-http/4.1.8.Final</bundle>
         <bundle>mvn:commons-pool/commons-pool/1.6</bundle>
         <bundle>mvn:org.apache.commons/commons-math3/3.6.1</bundle>
 
diff --git a/incubator/protobuf/BUCK b/incubator/protobuf/BUCK
deleted file mode 100644
index 3422455..0000000
--- a/incubator/protobuf/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    ':onos-incubator-grpc',
-    '//lib:protobuf-java-3.2.0',
-]
-
-GRPC_DEPS = [
-    '//lib:GRPC_1.3',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:guava'
-]
-
-grpc_jar(
-    name = 'onos-incubator-grpc',
-    deps = GRPC_DEPS,
-    proto_paths = ["$ONOS_ROOT/incubator/protobuf/src/main/proto"]
-)
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    visibility = ['PUBLIC'],
-)
-
-
diff --git a/incubator/protobuf/models/BUCK b/incubator/protobuf/models/BUCK
new file mode 100644
index 0000000..6bfac3d
--- /dev/null
+++ b/incubator/protobuf/models/BUCK
@@ -0,0 +1,30 @@
+
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    ':onos-incubator-protobuf-models-proto',
+    '//lib:protobuf-java-3.2.0',
+    '//lib:GRPC_1.3'
+]
+
+GRPC_DEPS = [
+    '//lib:GRPC_1.3',
+    '//lib:protobuf-java-3.2.0',
+    '//lib:guava'
+]
+
+BUNDLES = [
+    ':onos-incubator-protobuf-models',
+    ':onos-incubator-protobuf-models-proto',
+    '//lib:protobuf-java-3.2.0',
+]
+
+grpc_jar(
+    name = 'onos-incubator-protobuf-models-proto',
+    deps = GRPC_DEPS,
+    proto_paths = ["$ONOS_ROOT/incubator/protobuf/models/src/main/proto"]
+)
+
+osgi_jar_with_tests(
+    deps = COMPILE_DEPS,
+    visibility = ['PUBLIC'],
+)
diff --git a/incubator/protobuf/models/pom.xml b/incubator/protobuf/models/pom.xml
new file mode 100644
index 0000000..81521dd
--- /dev/null
+++ b/incubator/protobuf/models/pom.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>onos-incubator-protobuf</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.11.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-incubator-protobuf-models</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>ONOS Protobuf object models and translators</description>
+    <url>http://onosproject.org</url>
+
+    <properties>
+        <onos.app.name>org.onosproject.incubator.protobuf.models</onos.app.name>
+        <onos.app.title>ONOS Protocol Buffers models and translators</onos.app.title>
+    </properties>
+
+    <build>
+
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.karaf.tooling</groupId>
+                    <artifactId>karaf-maven-plugin</artifactId>
+                    <version>3.0.8</version>
+                    <extensions>true</extensions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+
+        <plugins>
+            <!-- TODO This is included to suppress the generation of javadocs for
+                this package. There is a problem when we try to package the
+                auto-generated code's javadoc into a jar. -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                    <sourcepath>${basedir}/src/main/java/</sourcepath>
+                    <excludePackageNames>org.onosproject.incubator.rpc.grpc</excludePackageNames>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>org.onosproject.grpc.net,org.onosproject.incubator.protobuf.models.utils</Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-maven-plugin</artifactId>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java
new file mode 100644
index 0000000..ff29b27
--- /dev/null
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.incubator.protobuf.models;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.onlab.packet.ChassisId;
+import org.onosproject.grpc.net.models.DeviceDescriptionProto;
+import org.onosproject.grpc.net.models.DeviceEnums;
+import org.onosproject.grpc.net.models.PortDescriptionProto;
+import org.onosproject.grpc.net.models.PortEnums.PortType;
+import org.onosproject.grpc.net.models.DeviceEnums.DeviceType;
+import org.onosproject.grpc.net.models.PortStatisticsProto;
+import org.onosproject.net.Annotations;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.Device;
+import org.onosproject.net.MastershipRole;
+import org.onosproject.net.Port;
+import org.onosproject.net.Port.Type;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.device.DefaultDeviceDescription;
+import org.onosproject.net.device.DefaultPortDescription;
+import org.onosproject.net.device.DefaultPortStatistics;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.device.PortStatistics;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * gRPC message conversion related utilities.
+ */
+@Beta
+public final class ProtobufUtils {
+
+    private static final Logger log = LoggerFactory.getLogger(ProtobufUtils.class);
+
+    /**
+     * Translates gRPC enum MastershipRole to ONOS enum.
+     *
+     * @param role mastership role in gRPC enum
+     * @return equivalent in ONOS enum
+     */
+    public static MastershipRole translate(DeviceEnums.MastershipRole role) {
+        switch (role) {
+            case NONE:
+                return MastershipRole.NONE;
+            case MASTER:
+                return MastershipRole.MASTER;
+            case STANDBY:
+                return MastershipRole.STANDBY;
+            case UNRECOGNIZED:
+                log.warn("Unrecognized MastershipRole gRPC message: {}", role);
+                return MastershipRole.NONE;
+            default:
+                return MastershipRole.NONE;
+        }
+    }
+
+    /**
+     * Translates ONOS enum MastershipRole to gRPC enum.
+     *
+     * @param newRole ONOS' mastership role
+     * @return equivalent in gRPC message enum
+     */
+    public static DeviceEnums.MastershipRole translate(MastershipRole newRole) {
+        switch (newRole) {
+            case MASTER:
+                return DeviceEnums.MastershipRole.MASTER;
+            case STANDBY:
+                return DeviceEnums.MastershipRole.STANDBY;
+            case NONE:
+            default:
+                return DeviceEnums.MastershipRole.NONE;
+        }
+    }
+
+
+    /**
+     * Translates gRPC DeviceDescription to {@link DeviceDescription}.
+     *
+     * @param deviceDescription gRPC message
+     * @return {@link DeviceDescription}
+     */
+    public static DeviceDescription translate(
+            DeviceDescriptionProto.DeviceDescription deviceDescription) {
+        URI uri = URI.create(deviceDescription.getDeviceUri());
+        Device.Type type = translate(deviceDescription.getType());
+        String manufacturer = deviceDescription.getManufacturer();
+        String hwVersion = deviceDescription.getHwVersion();
+        String swVersion = deviceDescription.getSwVersion();
+        String serialNumber = deviceDescription.getSerialNumber();
+        ChassisId chassis = new ChassisId(deviceDescription.getChassisId());
+        boolean defaultAvailable = deviceDescription.getIsDefaultAvailable();
+        return new DefaultDeviceDescription(uri, type, manufacturer,
+                                            hwVersion, swVersion, serialNumber,
+                                            chassis,
+                                            defaultAvailable,
+                                            asAnnotations(deviceDescription.getAnnotationsMap()));
+    }
+
+    /**
+     * Translates {@link DeviceDescription} to gRPC DeviceDescription message.
+     *
+     * @param deviceDescription {@link DeviceDescription}
+     * @return gRPC DeviceDescription message
+     */
+    public static DeviceDescriptionProto.DeviceDescription translate(
+            DeviceDescription deviceDescription) {
+
+        return DeviceDescriptionProto.DeviceDescription.newBuilder()
+                .setDeviceUri(deviceDescription.deviceUri().toString())
+                .setType(translate(deviceDescription.type()))
+                .setManufacturer(deviceDescription.manufacturer())
+                .setHwVersion(deviceDescription.hwVersion())
+                .setSwVersion(deviceDescription.swVersion())
+                .setSerialNumber(deviceDescription.serialNumber())
+                .setChassisId(deviceDescription.chassisId().toString())
+                .setIsDefaultAvailable(deviceDescription.isDefaultAvailable())
+                .putAllAnnotations(asMap(deviceDescription.annotations()))
+                .build();
+    }
+
+
+    /**
+     * Translates gRPC DeviceType to {@link Device.Type}.
+     *
+     * @param type      gRPC message
+     * @return  {@link Device.Type}
+     */
+    public static Device.Type translate(DeviceType type) {
+        switch (type) {
+            case BALANCER:
+                return Device.Type.BALANCER;
+            case CONTROLLER:
+                return Device.Type.CONTROLLER;
+            case FIBER_SWITCH:
+                return Device.Type.FIBER_SWITCH;
+            case FIREWALL:
+                return Device.Type.FIREWALL;
+            case IDS:
+                return Device.Type.IDS;
+            case IPS:
+                return Device.Type.IPS;
+            case MICROWAVE:
+                return Device.Type.MICROWAVE;
+            case OTHER:
+                return Device.Type.OTHER;
+            case OTN:
+                return Device.Type.OTN;
+            case ROADM:
+                return Device.Type.ROADM;
+            case ROADM_OTN:
+                return Device.Type.ROADM_OTN;
+            case ROUTER:
+                return Device.Type.ROUTER;
+            case SWITCH:
+                return Device.Type.SWITCH;
+            case VIRTUAL:
+                return Device.Type.VIRTUAL;
+
+            case UNRECOGNIZED:
+            default:
+                log.warn("Unexpected DeviceType: {}", type);
+                return Device.Type.OTHER;
+        }
+    }
+
+    /**
+     * Translates {@link Type} to gRPC DeviceType.
+     *
+     * @param type {@link Type}
+     * @return  gRPC message
+     */
+    public static DeviceType translate(Device.Type type) {
+        switch (type) {
+            case BALANCER:
+                return DeviceType.BALANCER;
+            case CONTROLLER:
+                return DeviceType.CONTROLLER;
+            case FIBER_SWITCH:
+                return DeviceType.FIBER_SWITCH;
+            case FIREWALL:
+                return DeviceType.FIREWALL;
+            case IDS:
+                return DeviceType.IDS;
+            case IPS:
+                return DeviceType.IPS;
+            case MICROWAVE:
+                return DeviceType.MICROWAVE;
+            case OTHER:
+                return DeviceType.OTHER;
+            case OTN:
+                return DeviceType.OTN;
+            case ROADM:
+                return DeviceType.ROADM;
+            case ROADM_OTN:
+                return DeviceType.ROADM_OTN;
+            case ROUTER:
+                return DeviceType.ROUTER;
+            case SWITCH:
+                return DeviceType.SWITCH;
+            case VIRTUAL:
+                return DeviceType.VIRTUAL;
+
+            default:
+                log.warn("Unexpected Device.Type: {}", type);
+                return DeviceType.OTHER;
+        }
+    }
+
+    /**
+     * Translates gRPC PortDescription message to {@link PortDescription}.
+     *
+     * @param portDescription gRPC message
+     * @return {@link PortDescription}
+     */
+    public static PortDescription translate(PortDescriptionProto.PortDescription portDescription) {
+        PortNumber number = PortNumber.fromString(portDescription.getPortNumber());
+        boolean isEnabled = portDescription.getIsEnabled();
+        Port.Type type = translate(portDescription.getType());
+        long portSpeed = portDescription.getPortSpeed();
+        SparseAnnotations annotations = asAnnotations(portDescription.getAnnotationsMap());
+        return new DefaultPortDescription(number, isEnabled, type, portSpeed, annotations);
+    }
+
+    /**
+     * Translates {@link PortDescription} to gRPC PortDescription message.
+     *
+     * @param portDescription {@link PortDescription}
+     * @return gRPC PortDescription message
+     */
+    public static PortDescriptionProto.PortDescription translate(PortDescription portDescription) {
+        return PortDescriptionProto.PortDescription.newBuilder()
+                .setPortNumber(portDescription.portNumber().toString())
+                .setIsEnabled(portDescription.isEnabled())
+                .setType(translate(portDescription.type()))
+                .setPortSpeed(portDescription.portSpeed())
+                .putAllAnnotations(asMap(portDescription.annotations()))
+                .build();
+    }
+
+    /**
+     * Translates gRPC PortType to {@link Port.Type}.
+     *
+     * @param type      gRPC message
+     * @return  {@link Port.Type}
+     */
+    public static Port.Type translate(org.onosproject.grpc.net.models.PortEnums.PortType type) {
+        switch (type) {
+            case COPPER:
+                return Type.COPPER;
+            case FIBER:
+                return Type.FIBER;
+            case OCH:
+                return Type.OCH;
+            case ODUCLT:
+                return Type.ODUCLT;
+            case OMS:
+                return Type.OMS;
+            case PACKET:
+                return Type.PACKET;
+            case VIRTUAL:
+                return Type.VIRTUAL;
+
+            case UNRECOGNIZED:
+            default:
+                log.warn("Unexpected PortType: {}", type);
+                return Type.COPPER;
+        }
+    }
+
+    /**
+     * Translates {@link Port.Type} to gRPC PortType.
+     *
+     * @param type      {@link org.onosproject.net.Port.Type}
+     * @return  gRPC message
+     */
+    public static PortType translate(Port.Type type) {
+        switch (type) {
+            case COPPER:
+                return PortType.COPPER;
+            case FIBER:
+                return PortType.FIBER;
+            case OCH:
+                return PortType.OCH;
+            case ODUCLT:
+                return PortType.ODUCLT;
+            case OMS:
+                return PortType.OMS;
+            case PACKET:
+                return PortType.PACKET;
+            case VIRTUAL:
+                return PortType.VIRTUAL;
+
+            default:
+                log.warn("Unexpected Port.Type: {}", type);
+                return PortType.COPPER;
+        }
+    }
+
+    /**
+     * Translates gRPC PortStatistics message to {@link PortStatistics}.
+     *
+     * @param portStatistics gRPC PortStatistics message
+     * @return {@link PortStatistics}
+     */
+    public static PortStatistics translate(PortStatisticsProto.PortStatistics portStatistics) {
+        // TODO implement adding missing fields
+        return DefaultPortStatistics.builder()
+                .setPort(portStatistics.getPort())
+                .setPacketsReceived(portStatistics.getPacketsReceived())
+                .setPacketsSent(portStatistics.getPacketsSent())
+                .build();
+    }
+
+    /**
+     * Translates {@link PortStatistics} to gRPC PortStatistics message.
+     *
+     * @param portStatistics {@link PortStatistics}
+     * @return gRPC PortStatistics message
+     */
+    public static PortStatisticsProto.PortStatistics translate(PortStatistics portStatistics) {
+        // TODO implement adding missing fields
+        return PortStatisticsProto.PortStatistics.newBuilder()
+                .setPort(portStatistics.port())
+                .setPacketsReceived(portStatistics.packetsReceived())
+                .setPacketsSent(portStatistics.packetsSent())
+                .build();
+    }
+
+    // may be this can be moved to Annotation itself or AnnotationsUtils
+    /**
+     * Converts Annotations to Map of Strings.
+     *
+     * @param annotations {@link Annotations}
+     * @return Map of annotation key and values
+     */
+    public static Map<String, String> asMap(Annotations annotations) {
+        if (annotations instanceof DefaultAnnotations) {
+            return ((DefaultAnnotations) annotations).asMap();
+        }
+        Map<String, String> map = new HashMap<>();
+        annotations.keys()
+                .forEach(k -> map.put(k, annotations.value(k)));
+
+        return map;
+    }
+
+    // may be this can be moved to Annotation itself or AnnotationsUtils
+    /**
+     * Converts Map of Strings to {@link SparseAnnotations}.
+     *
+     * @param annotations Map of annotation key and values
+     * @return {@link SparseAnnotations}
+     */
+    public static SparseAnnotations asAnnotations(Map<String, String> annotations) {
+        DefaultAnnotations.Builder builder = DefaultAnnotations.builder();
+        annotations.entrySet().forEach(e -> {
+            if (e.getValue() != null) {
+                builder.set(e.getKey(), e.getValue());
+            } else {
+                builder.remove(e.getKey());
+            }
+        });
+        return builder.build();
+    }
+
+    // Utility class not intended for instantiation.
+    private ProtobufUtils() {}
+}
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/package-info.java
similarity index 85%
rename from incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
rename to incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/package-info.java
index aa17131..ee6eb33 100644
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,4 +16,4 @@
 /**
  * Utilities to handle ProtoBuf version of ONOS network models.
  */
-package org.onosproject.incubator.protobuf.net;
+package org.onosproject.incubator.protobuf.models;
diff --git a/incubator/protobuf/models/src/main/proto/ConnectPointProto.proto b/incubator/protobuf/models/src/main/proto/ConnectPointProto.proto
new file mode 100644
index 0000000..ecc1362
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/ConnectPointProto.proto
@@ -0,0 +1,15 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package ConnectPoint;
+
+message ConnectPoint {
+    oneof element_id {
+        // DeviceID as String DeviceId#toString
+        string device_id = 1;
+
+        // TODO add support to other element_id if required
+    }
+    // PortNumber as String PortNumber#toString
+    string port_number = 2;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto
new file mode 100644
index 0000000..b620bfa
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Device;
+
+import "DeviceEnums.proto";
+
+message DeviceDescription {
+    string device_Uri = 1;
+    Device.DeviceType type = 2;
+    string manufacturer = 3;
+    string hw_version = 4;
+    string sw_version = 5;
+    string serial_number = 6;
+    string chassis_id = 7;
+    map<string, string> annotations = 8;
+    bool is_default_available = 9;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceEnums.proto b/incubator/protobuf/models/src/main/proto/DeviceEnums.proto
new file mode 100644
index 0000000..7fb1f08
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/DeviceEnums.proto
@@ -0,0 +1,39 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Device;
+
+enum MastershipRole {
+    NONE = 0;
+    MASTER = 1;
+    STANDBY = 2;
+}
+
+enum DeviceType {
+    OTHER = 0;
+    SWITCH = 1;
+    ROUTER = 2;
+    ROADM = 3;
+    OTN = 4;
+    ROADM_OTN = 5;
+    FIREWALL = 6;
+    BALANCER = 7;
+    IPS = 8;
+    IDS = 9;
+    CONTROLLER = 10;
+    VIRTUAL = 11;
+    FIBER_SWITCH = 12;
+    MICROWAVE = 13;
+}
+
+enum DeviceEventType {
+    DEVICE_ADDED = 0;
+    DEVICE_UPDATED = 1;
+    DEVICE_REMOVED = 2;
+    DEVICE_SUSPENDED = 3;
+    DEVICE_AVAILABILITY_CHANGED = 4;
+    PORT_ADDED = 5;
+    PORT_UPDATED = 6;
+    PORT_REMOVED = 7;
+    PORT_STATS_UPDATED = 8;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto b/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto
new file mode 100644
index 0000000..9cbbf60
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+
+import "DeviceProto.proto";
+import "DeviceEnums.proto";
+import "PortProto.proto";
+
+package Device;
+
+// Corresponds to org.onosproject.net.device.DeviceEvent.
+message DeviceNotification {
+    Device.DeviceProto device = 1;
+    Device.DeviceEventType deviceEventType = 2;
+    Port.PortProto port = 3;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceProto.proto b/incubator/protobuf/models/src/main/proto/DeviceProto.proto
new file mode 100644
index 0000000..f4a81d1
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/DeviceProto.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Device;
+
+import "DeviceEnums.proto";
+
+// Corresponds to org.onosproject.net.Device.
+message DeviceProto {
+    string deviceId = 1;
+    Device.DeviceType type = 2;
+    string manufacturer = 3;
+    string hw_version = 4;
+    string sw_version = 5;
+    string serial_number = 6;
+    string chassis_id = 7;
+    map<string, string> annotations = 8;
+}
diff --git a/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto
new file mode 100644
index 0000000..16fe534
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto
@@ -0,0 +1,14 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Link;
+
+import "ConnectPointProto.proto";
+import "LinkEnums.proto";
+
+message LinkDescription {
+    ConnectPoint.ConnectPoint src = 1;
+    ConnectPoint.ConnectPoint dst = 2;
+    Link.LinkType type = 3;
+    map<string, string> annotations = 4;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkEnums.proto b/incubator/protobuf/models/src/main/proto/LinkEnums.proto
new file mode 100644
index 0000000..fa5f5ac
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/LinkEnums.proto
@@ -0,0 +1,40 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Link;
+
+enum LinkType {
+    // Signifies that this is a direct single-segment link.
+    DIRECT = 0;
+
+    // Signifies that this link is potentially comprised from multiple
+    // underlying segments or hops, and as such should be used to tag
+    // links traversing optical paths, tunnels or intervening 'dark'
+    // switches.
+    INDIRECT = 1;
+
+    // Signifies that this link is an edge, i.e. host link.
+    EDGE = 2;
+
+    // Signifies that this link represents a logical link backed by
+    // some form of a tunnel, e.g., GRE, MPLS, ODUk, OCH.
+    TUNNEL = 3;
+
+    // Signifies that this link is realized by fiber (either single channel or WDM).
+    OPTICAL = 4;
+
+    // Signifies that this link is a virtual link or a pseudo-wire.
+    VIRTUAL = 5;
+}
+
+enum LinkState {
+    ACTIVE = 0;
+    INACTIVE = 1;
+}
+
+// Link Event Types
+enum LinkEventType {
+    LINK_ADDED = 0;
+    LINK_UPDATED = 1;
+    LINK_REMOVED = 2;
+}
diff --git a/incubator/protobuf/models/src/main/proto/LinkEventProto.proto b/incubator/protobuf/models/src/main/proto/LinkEventProto.proto
new file mode 100644
index 0000000..be1ee41
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/LinkEventProto.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Link;
+
+import "LinkProto.proto";
+import "LinkEnums.proto";
+
+// Corresponds to org.onosproject.net.link.LinkEvent.
+message LinkNotification {
+    Link.LinkEventType linkEventType = 2;
+    Link.LinkProto link = 3;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkProto.proto b/incubator/protobuf/models/src/main/proto/LinkProto.proto
new file mode 100644
index 0000000..2355618
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/LinkProto.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Link;
+
+import "LinkEnums.proto";
+import "ConnectPointProto.proto";
+
+// Corresponds to org.onosproject.net.Link.
+message LinkProto {
+    Link.LinkState state = 1;
+    ConnectPoint.ConnectPoint src = 2;
+    ConnectPoint.ConnectPoint dst = 3;
+    Link.LinkType type = 4;
+    map<string, string> annotations = 5;
+}
+
+
diff --git a/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto
new file mode 100644
index 0000000..065ef67
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto
@@ -0,0 +1,15 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Port;
+
+import "PortEnums.proto";
+
+message PortDescription {
+    // PortNumber as String PortNumber#toString
+    string port_number = 1;
+    bool is_enabled = 2;
+    Port.PortType type = 3;
+    int64 port_speed = 4;
+    map<string, string> annotations = 8;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/PortEnums.proto b/incubator/protobuf/models/src/main/proto/PortEnums.proto
new file mode 100644
index 0000000..b05efc4
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/PortEnums.proto
@@ -0,0 +1,23 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Port;
+
+enum PortType {
+    // Signifies copper-based connectivity.
+    COPPER = 0;
+    // Signifies optical fiber-based connectivity.
+    FIBER = 1;
+    // Signifies optical fiber-based packet port.
+    PACKET = 2;
+    // Signifies optical fiber-based optical tributary port (called T-port).
+    //The signal from the client side will be formed into a ITU G.709 (OTN) frame.
+    ODUCLT = 3;
+    // Signifies optical fiber-based Line-side port (called L-port).
+    OCH = 4;
+    // Signifies optical fiber-based WDM port (called W-port).
+    //Optical Multiplexing Section (See ITU G.709).
+    OMS = 5;
+    // Signifies virtual port.
+    VIRTUAL = 6;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/PortProto.proto b/incubator/protobuf/models/src/main/proto/PortProto.proto
new file mode 100644
index 0000000..309e50b
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/PortProto.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Port;
+
+import "PortEnums.proto";
+
+// Corresponds to org.onosproject.net.Port.
+message PortProto {
+    string port_number = 1;
+    bool is_enabled = 2;
+    Port.PortType type = 3;
+    int64 port_speed = 4;
+    map<string, string> annotations = 5;
+}
+
diff --git a/incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto b/incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto
new file mode 100644
index 0000000..964d47c
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package Port;
+
+message PortStatistics {
+    int32 port = 1;
+    int64 packets_received = 2;
+    int64 packets_sent = 3;
+    int64 bytes_received = 4;
+    int64 bytes_sent = 5;
+    int64 packets_rx_dropped = 6;
+    int64 packets_tx_dropped = 7;
+    int64 packets_rx_errors = 8;
+    int64 packets_tx_errors = 9;
+    int64 duration_sec = 10;
+    int64 duration_nano = 11;
+    bool is_zero = 12;
+    // TODO add all other fields
+}
diff --git a/incubator/protobuf/pom.xml b/incubator/protobuf/pom.xml
index 25f36bd..48c9984 100644
--- a/incubator/protobuf/pom.xml
+++ b/incubator/protobuf/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2017-present Open Networking Laboratory
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -17,16 +17,16 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>onos-incubator-protobuf-dependencies</artifactId>
+        <artifactId>onos-incubator-grpc-dependencies</artifactId>
         <groupId>org.onosproject</groupId>
         <version>1.11.0-SNAPSHOT</version>
-        <relativePath>../protobuf-dependencies/pom.xml</relativePath>
+        <relativePath>../grpc-dependencies/pom.xml</relativePath>
     </parent>
 
     <artifactId>onos-incubator-protobuf</artifactId>
-    <packaging>bundle</packaging>
+    <packaging>pom</packaging>
 
-    <description>ONOS ProtoBuf models</description>
+    <description>ONOS ProtoBuf and gRPC functionality root</description>
     <url>http://onosproject.org</url>
 
     <properties>
@@ -56,69 +56,9 @@
 
     </dependencies>
 
-    <build>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.karaf.tooling</groupId>
-                    <artifactId>karaf-maven-plugin</artifactId>
-                    <version>3.0.8</version>
-                    <extensions>true</extensions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-
-        <plugins>
-            <!-- TODO This is included to suppress the generation of javadocs for
-                this package. There is a problem when we try to package the
-                auto-generated code's javadoc into a jar. -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <sourcepath>${basedir}/src/main/java/</sourcepath>
-                    <excludePackageNames>org.onosproject.incubator.rpc.grpc</excludePackageNames>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>org.onosproject.grpc.net,org.onosproject.incubator.protobuf.net</Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.xolstice.maven.plugins</groupId>
-                <artifactId>protobuf-maven-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-maven-plugin</artifactId>
-            </plugin>
-
-        </plugins>
-    </build>
+    <modules>
+        <module>models</module>
+        <module>services</module>
+    </modules>
 
 </project>
diff --git a/incubator/protobuf/services/nb/BUCK b/incubator/protobuf/services/nb/BUCK
new file mode 100644
index 0000000..4d9c789
--- /dev/null
+++ b/incubator/protobuf/services/nb/BUCK
@@ -0,0 +1,54 @@
+
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    ':onos-incubator-protobuf-services-nb-proto',
+    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
+    '//incubator/protobuf/models:onos-incubator-protobuf-models',
+    '//lib:protobuf-java-3.2.0',
+    '//lib:GRPC_1.3'
+]
+
+GRPC_DEPS = [
+    '//lib:GRPC_1.3',
+    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
+    '//lib:protobuf-java-3.2.0',
+    '//lib:guava'
+]
+
+BUNDLES = [
+    '//incubator/protobuf/models:onos-incubator-protobuf-models',
+    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
+    ':onos-incubator-protobuf-services-nb',
+    ':onos-incubator-protobuf-services-nb-proto',
+    '//lib:protobuf-java-3.2.0',
+    '//lib:guava',
+    '//lib:grpc-core-1.3.0',
+    '//lib:grpc-protobuf-1.3.0',
+    '//lib:grpc-stub-1.3.0',
+    '//lib:grpc-netty-1.3.0',
+    '//lib:grpc-auth-1.3.0',
+    '//lib:grpc-context-1.3.0',
+    '//lib:google-truth-0.28',
+    '//core/api:onos-api',
+    '//lib:netty-transport',
+    '//lib:netty-buffer',
+    '//lib:netty-resolver',
+    '//lib:netty-common',
+    '//lib:netty-codec',
+    '//lib:netty-handler',
+    '//lib:netty-codec-http2',
+    '//lib:netty-codec-http',
+    "//lib:google-instrumentation-0.3.0",
+]
+
+grpc_jar(
+    name = 'onos-incubator-protobuf-services-nb-proto',
+    deps = GRPC_DEPS,
+    proto_paths = ["$ONOS_ROOT/incubator/protobuf/services/nb/src/main/proto",
+        "$ONOS_ROOT/incubator/protobuf/models/src/main/proto"]
+)
+
+osgi_jar_with_tests(
+    deps = COMPILE_DEPS,
+    visibility = ['PUBLIC'],
+)
\ No newline at end of file
diff --git a/incubator/protobuf/services/nb/pom.xml b/incubator/protobuf/services/nb/pom.xml
new file mode 100644
index 0000000..5e658e8
--- /dev/null
+++ b/incubator/protobuf/services/nb/pom.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>onos-incubator-protobuf-services</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.11.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-incubator-protobuf-services-nb</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>ONOS northbound gRPC services</description>
+    <url>http://onosproject.org</url>
+
+    <properties>
+        <onos.app.name>org.onosproject.incubator.protobuf.services.nb</onos.app.name>
+        <onos.app.title>ONOS gRPC Northbound Services</onos.app.title>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-protobuf-models</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.karaf.tooling</groupId>
+                    <artifactId>karaf-maven-plugin</artifactId>
+                    <version>3.0.8</version>
+                    <extensions>true</extensions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+
+        <plugins>
+            <!-- TODO This is included to suppress the generation of javadocs for
+                this package. There is a problem when we try to package the
+                auto-generated code's javadoc into a jar. -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                    <sourcepath>${basedir}/src/main/java/</sourcepath>
+                    <excludePackageNames>org.onosproject.incubator.rpc.grpc</excludePackageNames>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>org.onosproject.grpc.net,org.onosproject.incubator.protobuf.services.nb</Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-maven-plugin</artifactId>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/DeleteMe.java
similarity index 63%
copy from incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
copy to incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/DeleteMe.java
index aa17131..69f61c4 100644
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
+++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/DeleteMe.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -13,7 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+package org.onosproject.incubator.protobuf.services.nb;
+
 /**
- * Utilities to handle ProtoBuf version of ONOS network models.
+ * Delete this file.  It is just a placeholder for structure.
  */
-package org.onosproject.incubator.protobuf.net;
+public class DeleteMe {
+    public DeleteMe() {
+        throw new RuntimeException("This is not a class that should be instantiated.");
+    }
+}
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/package-info.java
similarity index 77%
copy from incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
copy to incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/package-info.java
index aa17131..f3b12c8 100644
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/package-info.java
+++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/incubator/protobuf/services/nb/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 /**
- * Utilities to handle ProtoBuf version of ONOS network models.
+ * gRPC server implementations for northbound services.
  */
-package org.onosproject.incubator.protobuf.net;
+package org.onosproject.incubator.protobuf.services.nb;
diff --git a/incubator/protobuf/services/nb/src/main/proto/PlaceHolderToDelete.proto b/incubator/protobuf/services/nb/src/main/proto/PlaceHolderToDelete.proto
new file mode 100644
index 0000000..d1207dd
--- /dev/null
+++ b/incubator/protobuf/services/nb/src/main/proto/PlaceHolderToDelete.proto
@@ -0,0 +1,6 @@
+syntax="proto3";
+option java_package = "org.onosproject.grpc.net.services.nb";
+
+message ToDelete{
+
+}
\ No newline at end of file
diff --git a/incubator/protobuf/services/pom.xml b/incubator/protobuf/services/pom.xml
new file mode 100644
index 0000000..cd83218
--- /dev/null
+++ b/incubator/protobuf/services/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>onos-incubator-protobuf</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.11.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-incubator-protobuf-services</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>nb</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-protobuf-models</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-api</artifactId>
+            <version>1.11.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-osgi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+    <description>ONOS ProtoBuf service models and implementations</description>
+    <url>http://onosproject.org</url>
+
+</project>
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/ProtobufUtils.java b/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/ProtobufUtils.java
deleted file mode 100644
index 30410d6..0000000
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/ProtobufUtils.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.incubator.protobuf.net;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.onlab.packet.ChassisId;
-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;
-import org.onosproject.net.MastershipRole;
-import org.onosproject.net.Port;
-import org.onosproject.net.Port.Type;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.DefaultPortStatistics;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.device.PortStatistics;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-
-
-/**
- * gRPC message conversion related utilities.
- */
-@Beta
-public final class ProtobufUtils {
-
-    private static final Logger log = LoggerFactory.getLogger(ProtobufUtils.class);
-
-    /**
-     * Translates gRPC enum MastershipRole to ONOS enum.
-     *
-     * @param role mastership role in gRPC enum
-     * @return equivalent in ONOS enum
-     */
-    public static MastershipRole translate(org.onosproject.grpc.net.Device.MastershipRole role) {
-        switch (role) {
-        case NONE:
-            return MastershipRole.NONE;
-        case MASTER:
-            return MastershipRole.MASTER;
-        case STANDBY:
-            return MastershipRole.STANDBY;
-        case UNRECOGNIZED:
-            log.warn("Unrecognized MastershipRole gRPC message: {}", role);
-            return MastershipRole.NONE;
-        default:
-            return MastershipRole.NONE;
-        }
-    }
-
-    /**
-     * Translates ONOS enum MastershipRole to gRPC enum.
-     *
-     * @param newRole ONOS' mastership role
-     * @return equivalent in gRPC message enum
-     */
-    public static org.onosproject.grpc.net.Device.MastershipRole translate(MastershipRole newRole) {
-        switch (newRole) {
-        case MASTER:
-            return org.onosproject.grpc.net.Device.MastershipRole.MASTER;
-        case STANDBY:
-            return org.onosproject.grpc.net.Device.MastershipRole.STANDBY;
-        case NONE:
-        default:
-            return org.onosproject.grpc.net.Device.MastershipRole.NONE;
-        }
-    }
-
-
-    /**
-     * Translates gRPC DeviceDescription to {@link DeviceDescription}.
-     *
-     * @param deviceDescription gRPC message
-     * @return {@link 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();
-        String hwVersion = deviceDescription.getHwVersion();
-        String swVersion = deviceDescription.getSwVersion();
-        String serialNumber = deviceDescription.getSerialNumber();
-        ChassisId chassis = new ChassisId(deviceDescription.getChassisId());
-        boolean defaultAvailable = deviceDescription.getIsDefaultAvailable();
-        return new DefaultDeviceDescription(uri, type, manufacturer,
-                                            hwVersion, swVersion, serialNumber,
-                                            chassis,
-                                            defaultAvailable,
-                                            asAnnotations(deviceDescription.getAnnotationsMap()));
-    }
-
-    /**
-     * Translates {@link DeviceDescription} to gRPC DeviceDescription message.
-     *
-     * @param deviceDescription {@link DeviceDescription}
-     * @return gRPC DeviceDescription message
-     */
-    public static org.onosproject.grpc.net.Device.DeviceDescription translate(DeviceDescription deviceDescription) {
-
-        return org.onosproject.grpc.net.Device.DeviceDescription.newBuilder()
-            .setDeviceUri(deviceDescription.deviceUri().toString())
-            .setType(translate(deviceDescription.type()))
-            .setManufacturer(deviceDescription.manufacturer())
-            .setHwVersion(deviceDescription.hwVersion())
-            .setSwVersion(deviceDescription.swVersion())
-            .setSerialNumber(deviceDescription.serialNumber())
-            .setChassisId(deviceDescription.chassisId().toString())
-            .setIsDefaultAvailable(deviceDescription.isDefaultAvailable())
-            .putAllAnnotations(asMap(deviceDescription.annotations()))
-            .build();
-    }
-
-
-    /**
-     * Translates gRPC DeviceType to {@link Device.Type}.
-     *
-     * @param type      gRPC message
-     * @return  {@link Device.Type}
-     */
-    public static Device.Type translate(org.onosproject.grpc.net.Device.DeviceType type) {
-        switch (type) {
-        case BALANCER:
-            return Device.Type.BALANCER;
-        case CONTROLLER:
-            return Device.Type.CONTROLLER;
-        case FIBER_SWITCH:
-            return Device.Type.FIBER_SWITCH;
-        case FIREWALL:
-            return Device.Type.FIREWALL;
-        case IDS:
-            return Device.Type.IDS;
-        case IPS:
-            return Device.Type.IPS;
-        case MICROWAVE:
-            return Device.Type.MICROWAVE;
-        case OTHER:
-            return Device.Type.OTHER;
-        case OTN:
-            return Device.Type.OTN;
-        case ROADM:
-            return Device.Type.ROADM;
-        case ROADM_OTN:
-            return Device.Type.ROADM_OTN;
-        case ROUTER:
-            return Device.Type.ROUTER;
-        case SWITCH:
-            return Device.Type.SWITCH;
-        case VIRTUAL:
-            return Device.Type.VIRTUAL;
-
-        case UNRECOGNIZED:
-        default:
-            log.warn("Unexpected DeviceType: {}", type);
-            return Device.Type.OTHER;
-        }
-    }
-
-    /**
-     * Translates {@link Type} to gRPC DeviceType.
-     *
-     * @param type {@link Type}
-     * @return  gRPC message
-     */
-    public static DeviceType translate(Device.Type type) {
-        switch (type) {
-        case BALANCER:
-            return DeviceType.BALANCER;
-        case CONTROLLER:
-            return DeviceType.CONTROLLER;
-        case FIBER_SWITCH:
-            return DeviceType.FIBER_SWITCH;
-        case FIREWALL:
-            return DeviceType.FIREWALL;
-        case IDS:
-            return DeviceType.IDS;
-        case IPS:
-            return DeviceType.IPS;
-        case MICROWAVE:
-            return DeviceType.MICROWAVE;
-        case OTHER:
-            return DeviceType.OTHER;
-        case OTN:
-            return DeviceType.OTN;
-        case ROADM:
-            return DeviceType.ROADM;
-        case ROADM_OTN:
-            return DeviceType.ROADM_OTN;
-        case ROUTER:
-            return DeviceType.ROUTER;
-        case SWITCH:
-            return DeviceType.SWITCH;
-        case VIRTUAL:
-            return DeviceType.VIRTUAL;
-
-        default:
-            log.warn("Unexpected Device.Type: {}", type);
-            return DeviceType.OTHER;
-        }
-    }
-
-    /**
-     * Translates gRPC PortDescription message to {@link PortDescription}.
-     *
-     * @param portDescription gRPC message
-     * @return {@link 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());
-        long portSpeed = portDescription.getPortSpeed();
-        SparseAnnotations annotations = asAnnotations(portDescription.getAnnotationsMap());
-        // TODO How to deal with more specific Port...
-        return new DefaultPortDescription(number, isEnabled, type, portSpeed, annotations);
-    }
-
-    /**
-     * Translates {@link PortDescription} to gRPC PortDescription message.
-     *
-     * @param portDescription {@link PortDescription}
-     * @return gRPC PortDescription message
-     */
-    public static org.onosproject.grpc.net.Port.PortDescription translate(PortDescription portDescription) {
-        return org.onosproject.grpc.net.Port.PortDescription.newBuilder()
-                .setPortNumber(portDescription.portNumber().toString())
-                .setIsEnabled(portDescription.isEnabled())
-                .setType(translate(portDescription.type()))
-                .setPortSpeed(portDescription.portSpeed())
-                .putAllAnnotations(asMap(portDescription.annotations()))
-                .build();
-    }
-
-    /**
-     * Translates gRPC PortType to {@link Port.Type}.
-     *
-     * @param type      gRPC message
-     * @return  {@link Port.Type}
-     */
-    public static Port.Type translate(PortType type) {
-        switch (type) {
-        case COPPER:
-            return Type.COPPER;
-        case FIBER:
-            return Type.FIBER;
-        case OCH:
-            return Type.OCH;
-        case ODUCLT:
-            return Type.ODUCLT;
-        case OMS:
-            return Type.OMS;
-        case PACKET:
-            return Type.PACKET;
-        case VIRTUAL:
-            return Type.VIRTUAL;
-
-        case UNRECOGNIZED:
-        default:
-            log.warn("Unexpected PortType: {}", type);
-            return Type.COPPER;
-        }
-    }
-
-    /**
-     * Translates {@link Port.Type} to gRPC PortType.
-     *
-     * @param type      {@link Port.Type}
-     * @return  gRPC message
-     */
-    public static PortType translate(Port.Type type) {
-        switch (type) {
-        case COPPER:
-            return PortType.COPPER;
-        case FIBER:
-            return PortType.FIBER;
-        case OCH:
-            return PortType.OCH;
-        case ODUCLT:
-            return PortType.ODUCLT;
-        case OMS:
-            return PortType.OMS;
-        case PACKET:
-            return PortType.PACKET;
-        case VIRTUAL:
-            return PortType.VIRTUAL;
-
-        default:
-            log.warn("Unexpected Port.Type: {}", type);
-            return PortType.COPPER;
-        }
-    }
-
-    /**
-     * Translates gRPC PortStatistics message to {@link PortStatistics}.
-     *
-     * @param portStatistics gRPC PortStatistics message
-     * @return {@link PortStatistics}
-     */
-    public static PortStatistics translate(org.onosproject.grpc.net.Port.PortStatistics portStatistics) {
-        // TODO implement adding missing fields
-        return DefaultPortStatistics.builder()
-                .setPort(portStatistics.getPort())
-                .setPacketsReceived(portStatistics.getPacketsReceived())
-                .setPacketsSent(portStatistics.getPacketsSent())
-                .build();
-    }
-
-    /**
-     * Translates {@link PortStatistics} to gRPC PortStatistics message.
-     *
-     * @param portStatistics {@link PortStatistics}
-     * @return gRPC PortStatistics message
-     */
-    public static org.onosproject.grpc.net.Port.PortStatistics translate(PortStatistics portStatistics) {
-        // TODO implement adding missing fields
-        return org.onosproject.grpc.net.Port.PortStatistics.newBuilder()
-                .setPort(portStatistics.port())
-                .setPacketsReceived(portStatistics.packetsReceived())
-                .setPacketsSent(portStatistics.packetsSent())
-                .build();
-    }
-
-    // may be this can be moved to Annotation itself or AnnotationsUtils
-    /**
-     * Converts Annotations to Map of Strings.
-     *
-     * @param annotations {@link Annotations}
-     * @return Map of annotation key and values
-     */
-    public static Map<String, String> asMap(Annotations annotations) {
-        if (annotations instanceof DefaultAnnotations) {
-            return ((DefaultAnnotations) annotations).asMap();
-        }
-        Map<String, String> map = new HashMap<>();
-        annotations.keys()
-            .forEach(k -> map.put(k, annotations.value(k)));
-
-        return map;
-    }
-
-    // may be this can be moved to Annotation itself or AnnotationsUtils
-    /**
-     * Converts Map of Strings to {@link SparseAnnotations}.
-     *
-     * @param annotations Map of annotation key and values
-     * @return {@link SparseAnnotations}
-     */
-    public static SparseAnnotations asAnnotations(Map<String, String> annotations) {
-        DefaultAnnotations.Builder builder = DefaultAnnotations.builder();
-        annotations.entrySet().forEach(e -> {
-                if (e.getValue() != null) {
-                    builder.set(e.getKey(), e.getValue());
-                } else {
-                    builder.remove(e.getKey());
-                }
-            });
-        return builder.build();
-    }
-
-    // Utility class not intended for instantiation.
-    private ProtobufUtils() {}
-}
diff --git a/incubator/protobuf/src/main/proto/models/Device.proto b/incubator/protobuf/src/main/proto/models/Device.proto
deleted file mode 100644
index 75cf0f5..0000000
--- a/incubator/protobuf/src/main/proto/models/Device.proto
+++ /dev/null
@@ -1,51 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net";
-
-package Device;
-
-message DeviceDescription {
-  string device_Uri = 1;
-  DeviceType type = 2;
-  string manufacturer = 3;
-  string hw_version = 4;
-  string sw_version = 5;
-  string serial_number = 6;
-  string chassis_id = 7;
-  map<string, string> annotations = 8;
-  bool is_default_available = 9;
-}
-
-enum MastershipRole {
-  NONE = 0;
-  MASTER = 1;
-  STANDBY = 2;
-}
-
-enum DeviceType {
-  OTHER = 0;
-  SWITCH = 1;
-  ROUTER = 2;
-  ROADM = 3;
-  OTN = 4;
-  ROADM_OTN = 5;
-  FIREWALL = 6;
-  BALANCER = 7;
-  IPS = 8;
-  IDS = 9;
-  CONTROLLER = 10;
-  VIRTUAL = 11;
-  FIBER_SWITCH = 12;
-  MICROWAVE = 13;
-}
-
-// Corresponds to org.onosproject.net.Device.
-message DeviceCore {
-  string deviceId = 1;
-  DeviceType type = 2;
-  string manufacturer = 3;
-  string hw_version = 4;
-  string sw_version = 5;
-  string serial_number = 6;
-  string chassis_id = 7;
-  map<string, string> annotations = 8;
-}
diff --git a/incubator/protobuf/src/main/proto/models/DeviceEvent.proto b/incubator/protobuf/src/main/proto/models/DeviceEvent.proto
deleted file mode 100644
index f834aa1..0000000
--- a/incubator/protobuf/src/main/proto/models/DeviceEvent.proto
+++ /dev/null
@@ -1,28 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net";
-
-
-import "models/Device.proto";
-import "models/Port.proto";
-
-package DeviceEvent;
-
-// Corresponds to org.onosproject.net.device.DeviceEvent.
-message DeviceNotification {
-    Device.DeviceCore device = 1;
-    DeviceEventType deviceEventType = 2;
-    Port.PortCore port = 3;
-}
-
-enum DeviceEventType {
-    DEVICE_ADDED = 0;
-    DEVICE_UPDATED = 1;
-    DEVICE_REMOVED = 2;
-    DEVICE_SUSPENDED = 3;
-    DEVICE_AVAILABILITY_CHANGED = 4;
-    PORT_ADDED = 5;
-    PORT_UPDATED = 6;
-    PORT_REMOVED = 7;
-    PORT_STATS_UPDATED = 8;
-}
-
diff --git a/incubator/protobuf/src/main/proto/models/Link.proto b/incubator/protobuf/src/main/proto/models/Link.proto
deleted file mode 100644
index a1ae8ff..0000000
--- a/incubator/protobuf/src/main/proto/models/Link.proto
+++ /dev/null
@@ -1,60 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net";
-
-package Link;
-
-enum LinkType {
-  // Signifies that this is a direct single-segment link.
-  DIRECT = 0;
-
-  // Signifies that this link is potentially comprised from multiple
-  // underlying segments or hops, and as such should be used to tag
-  // links traversing optical paths, tunnels or intervening 'dark'
-  // switches.
-  INDIRECT = 1;
-
-  // Signifies that this link is an edge, i.e. host link.
-  EDGE = 2;
-
-  // Signifies that this link represents a logical link backed by
-  // some form of a tunnel, e.g., GRE, MPLS, ODUk, OCH.
-  TUNNEL = 3;
-
-  // Signifies that this link is realized by fiber (either single channel or WDM).
-  OPTICAL = 4;
-
-  // Signifies that this link is a virtual link or a pseudo-wire.
-  VIRTUAL = 5;
-}
-
-message ConnectPoint {
-  oneof element_id {
-    // DeviceID as String DeviceId#toString
-    string device_id = 1;
-
-    // TODO add support to other element_id if required
-  }
-  // PortNumber as String PortNumber#toString
-  string port_number = 2;
-}
-
-enum LinkState {
-    ACTIVE = 0;
-    INACTIVE = 1;
-}
-
-// Corresponds to org.onosproject.net.Link.
-message LinkCore {
-  LinkState state = 1;
-  ConnectPoint src = 2;
-  ConnectPoint dst = 3;
-  LinkType type = 4;
-  map<string, string> annotations = 5;
-}
-
-message LinkDescription {
-  ConnectPoint src = 1;
-  ConnectPoint dst = 2;
-  LinkType type = 3;
-  map<string, string> annotations = 4;
-}
diff --git a/incubator/protobuf/src/main/proto/models/LinkEvent.proto b/incubator/protobuf/src/main/proto/models/LinkEvent.proto
deleted file mode 100644
index fcd13fb..0000000
--- a/incubator/protobuf/src/main/proto/models/LinkEvent.proto
+++ /dev/null
@@ -1,19 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net";
-
-package LinkEvent;
-
-import "models/Link.proto";
-
-// Corresponds to org.onosproject.net.link.LinkEvent.
-message LinkNotification {
-    LinkEventType linkEventType = 2;
-    Link.LinkCore link = 3;
-}
-
-// Link Event Types
-enum LinkEventType {
-    LINK_ADDED = 0;
-    LINK_UPDATED = 1;
-    LINK_REMOVED = 2;
-}
diff --git a/incubator/protobuf/src/main/proto/models/Port.proto b/incubator/protobuf/src/main/proto/models/Port.proto
deleted file mode 100644
index a3fd34d..0000000
--- a/incubator/protobuf/src/main/proto/models/Port.proto
+++ /dev/null
@@ -1,48 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net";
-
-package Port;
-
-enum PortType {
-  // Signifies copper-based connectivity.
-  COPPER = 0;
-  // Signifies optical fiber-based connectivity.
-  FIBER = 1;
-  // Signifies optical fiber-based packet port.
-  PACKET = 2;
-  // Signifies optical fiber-based optical tributary port (called T-port).
-  //The signal from the client side will be formed into a ITU G.709 (OTN) frame.
-  ODUCLT = 3;
-  // Signifies optical fiber-based Line-side port (called L-port).
-  OCH = 4;
-  // Signifies optical fiber-based WDM port (called W-port).
-  //Optical Multiplexing Section (See ITU G.709).
-  OMS = 5;
-  // Signifies virtual port.
-  VIRTUAL = 6;
-}
-
-message PortDescription {
-  // PortNumber as String PortNumber#toString
-  string port_number = 1;
-  bool is_enabled = 2;
-  PortType type = 3;
-  int64 port_speed = 4;
-  map<string, string> annotations = 8;
-}
-
-// Corresponds to org.onosproject.net.Port.
-message PortCore {
-  string port_number = 1;
-  bool is_enabled = 2;
-  PortType type = 3;
-  int64 port_speed = 4;
-  map<string, string> annotations = 5;
-}
-
-message PortStatistics {
-  int32 port = 1;
-  int64 packets_received = 2;
-  int64 packets_sent = 3;
-  // TODO add all other fields
-}
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 bd133ad..4f41835 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
@@ -17,7 +17,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.stream.Collectors.toList;
-import static org.onosproject.incubator.protobuf.net.ProtobufUtils.translate;
+import static org.onosproject.incubator.protobuf.models.ProtobufUtils.translate;
 import static org.onosproject.net.DeviceId.deviceId;
 
 import java.util.Collection;
@@ -31,7 +31,7 @@
 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.incubator.protobuf.net.ProtobufUtils;
+import org.onosproject.incubator.protobuf.models.ProtobufUtils;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.device.DeviceDescription;
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 2604d09..2f5be39 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
@@ -18,7 +18,7 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.concurrent.Executors.newScheduledThreadPool;
 import static java.util.stream.Collectors.toList;
-import static org.onosproject.incubator.protobuf.net.ProtobufUtils.translate;
+import static org.onosproject.incubator.protobuf.models.ProtobufUtils.translate;
 import static org.onosproject.net.DeviceId.deviceId;
 
 import java.io.IOException;
@@ -50,7 +50,7 @@
 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.incubator.protobuf.net.ProtobufUtils;
+import org.onosproject.incubator.protobuf.models.ProtobufUtils;
 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 0a8918e..78f9f37 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
@@ -15,7 +15,7 @@
  */
 package org.onosproject.incubator.rpc.grpc;
 
-import static org.onosproject.incubator.protobuf.net.ProtobufUtils.asMap;
+import static org.onosproject.incubator.protobuf.models.ProtobufUtils.asMap;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
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 26210f6..69f9cfd 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
@@ -31,7 +31,7 @@
 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.incubator.protobuf.net.ProtobufUtils;
+import org.onosproject.incubator.protobuf.models.ProtobufUtils;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
diff --git a/lib/BUCK b/lib/BUCK
index 41d76be..69f5dff 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Wed, 14 Jun 2017 22:44:38 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Fri, 23 Jun 2017 05:52:13 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 pass_thru_pom(
@@ -130,6 +130,22 @@
     ':grpc-stub-1.3.0',
     ':grpc-netty-1.3.0',
     ':grpc-auth-1.3.0',
+    ':grpc-context-1.3.0',
+    ':google-truth-0.28',
+  ],
+)
+
+osgi_feature_group(
+  name = 'GRPC_TEST_1.3',
+  visibility = ['PUBLIC'],
+  exported_deps = [
+    ':grpc-testing-1.3.0',
+    ':grpc-testing-proto-1.3.0',
+    ':google-code-findbugs-3.0.0',
+    ':google-errorprone-2.0.19',
+    ':google-instrumentation-0.3.0',
+    ':junit-dep',
+    ':objenesis',
   ],
 )
 
@@ -315,10 +331,10 @@
 
 remote_jar (
   name = 'gson',
-  out = 'gson-2.6.2.jar',
-  url = 'mvn:com.google.code.gson:gson:jar:2.6.2',
-  sha1 = 'f1bc476cc167b18e66c297df599b2377131a8947',
-  maven_coords = 'com.google.code.gson:gson:2.6.2',
+  out = 'gson-2.7.jar',
+  url = 'mvn:com.google.code.gson:gson:jar:2.7',
+  sha1 = '751f548c85fa49f330cecbb1875893f971b33c4e',
+  maven_coords = 'com.google.code.gson:gson:2.7',
   visibility = [ 'PUBLIC' ],
 )
 
@@ -683,6 +699,15 @@
 )
 
 remote_jar (
+  name = 'junit-dep',
+  out = 'junit-4.10.jar',
+  url = 'mvn:junit:junit:jar:4.10',
+  sha1 = 'e4f1766ce7404a08f45d859fb9c226fc9e41a861',
+  maven_coords = 'junit:junit:jar:NON-OSGI:4.10',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
   name = 'kryo',
   out = 'kryo-4.0.0.jar',
   url = 'mvn:com.esotericsoftware:kryo:jar:4.0.0',
@@ -836,6 +861,24 @@
 )
 
 remote_jar (
+  name = 'netty-codec-http2',
+  out = 'netty-codec-http2-4.1.8.Final.jar',
+  url = 'mvn:io.netty:netty-codec-http2:jar:4.1.8.Final',
+  sha1 = '105a99ee5767463370ccc3d2e16800bd99f5648e',
+  maven_coords = 'io.netty:netty-codec-http2:4.1.8.Final',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'netty-codec-http',
+  out = 'netty-codec-http-4.1.8.Final.jar',
+  url = 'mvn:io.netty:netty-codec-http:jar:4.1.8.Final',
+  sha1 = '1e88617c4a6c88da7e86fdbbd9494d22a250c879',
+  maven_coords = 'io.netty:netty-codec-http:4.1.8.Final',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
   name = 'catalyst-concurrent',
   out = 'catalyst-concurrent-1.2.1.jar',
   url = 'mvn:io.atomix.catalyst:catalyst-concurrent:jar:1.2.1',
@@ -1337,3 +1380,66 @@
   visibility = [ 'PUBLIC' ],
 )
 
+remote_jar (
+  name = 'grpc-testing-1.3.0',
+  out = 'grpc-testing-1.3.0.jar',
+  url = 'mvn:io.grpc:grpc-testing:jar:1.3.0',
+  sha1 = '2828c4bbab639470b9a017f521426490ba919803',
+  maven_coords = 'io.grpc:grpc-testing:jar:NON-OSGI:1.3.0',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'grpc-testing-proto-1.3.0',
+  out = 'grpc-testing-proto-1.3.0.jar',
+  url = 'mvn:io.grpc:grpc-testing-proto:jar:1.3.0',
+  sha1 = '6e707eb79bb892abd22dae80d5799156e614393d',
+  maven_coords = 'io.grpc:grpc-testing-proto:jar:NON-OSGI:1.3.0',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'grpc-context-1.3.0',
+  out = 'grpc-context-1.3.0.jar',
+  url = 'mvn:io.grpc:grpc-context:jar:1.3.0',
+  sha1 = '2a924ad1897dd1b768e1859943e2d0408789150a',
+  maven_coords = 'io.grpc:grpc-context:jar:NON-OSGI:1.3.0',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'google-truth-0.28',
+  out = 'truth-0.28.jar',
+  url = 'mvn:com.google.truth:truth:jar:0.28',
+  sha1 = '0a388c7877c845ff4b8e19689dda5ac9d34622c4',
+  maven_coords = 'com.google.truth:truth:jar:NON-OSGI:0.28',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'google-code-findbugs-3.0.0',
+  out = 'jsr305-3.0.0.jar',
+  url = 'mvn:com.google.code.findbugs:jsr305:jar:3.0.0',
+  sha1 = '5871fb60dc68d67da54a663c3fd636a10a532948',
+  maven_coords = 'com.google.code.findbugs:jsr305:jar:NON-OSGI:3.0.0',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'google-errorprone-2.0.19',
+  out = 'error_prone_annotations-2.0.19.jar',
+  url = 'mvn:com.google.errorprone:error_prone_annotations:jar:2.0.19',
+  sha1 = 'c3754a0bdd545b00ddc26884f9e7624f8b6a14de',
+  maven_coords = 'com.google.errorprone:error_prone_annotations:jar:NON-OSGI:2.0.19',
+  visibility = [ 'PUBLIC' ],
+)
+
+remote_jar (
+  name = 'google-instrumentation-0.3.0',
+  out = 'instrumentation-api-0.3.0.jar',
+  url = 'mvn:com.google.instrumentation:instrumentation-api:jar:0.3.0',
+  sha1 = 'a2e145e7a7567c6372738f5c5a6f3ba6407ac354',
+  maven_coords = 'com.google.instrumentation:instrumentation-api:jar:NON-OSGI:0.3.0',
+  visibility = [ 'PUBLIC' ],
+)
+
diff --git a/lib/deps.json b/lib/deps.json
index fdc04e7..f3f3e62 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -93,7 +93,18 @@
       "grpc-protobuf-1.3.0",
       "grpc-stub-1.3.0",
       "grpc-netty-1.3.0",
-      "grpc-auth-1.3.0"
+      "grpc-auth-1.3.0",
+      "grpc-context-1.3.0",
+      "google-truth-0.28"
+    ],
+    "GRPC_TEST_1.3": [
+      "grpc-testing-1.3.0",
+      "grpc-testing-proto-1.3.0",
+      "google-code-findbugs-3.0.0",
+      "google-errorprone-2.0.19",
+      "google-instrumentation-0.3.0",
+      "junit-dep",
+      "objenesis"
     ]
   },
 
@@ -159,6 +170,7 @@
     "jsch": "mvn:com.jcraft:jsch:0.1.53",
     "jsr305": "mvn:com.google.code.findbugs:jsr305:3.0.1",
     "junit": "mvn:junit:junit:4.12",
+    "junit-dep": "mvn:junit:junit:4.10",
     "kryo": "mvn:com.esotericsoftware:kryo:4.0.0",
     "mapdb": "mvn:org.mapdb:mapdb:1.0.9",
     "metrics-core": "mvn:io.dropwizard.metrics:metrics-core:3.2.2",
@@ -176,6 +188,8 @@
     "netty-transport": "mvn:io.netty:netty-transport:4.1.8.Final",
     "netty-transport-native-epoll": "mvn:io.netty:netty-transport-native-epoll:4.1.8.Final",
     "netty-resolver": "mvn:io.netty:netty-resolver:4.1.8.Final",
+    "netty-codec-http2": "mvn:io.netty:netty-codec-http2:4.1.8.Final",
+    "netty-codec-http": "mvn:io.netty:netty-codec-http:4.1.8.Final",
     "catalyst-concurrent": "mvn:io.atomix.catalyst:catalyst-concurrent:1.2.1",
     "catalyst-netty": "mvn:io.atomix.catalyst:catalyst-netty:1.2.1",
     "catalyst-transport": "mvn:io.atomix.catalyst:catalyst-transport:1.2.1",
@@ -235,6 +249,14 @@
     "grpc-netty-1.3.0": "mvn:io.grpc:grpc-netty:1.3.0",
     "grpc-auth-1.3.0": "mvn:io.grpc:grpc-auth:1.3.0",
     "protobuf-java-3.3.0": "mvn:com.google.protobuf:protobuf-java:3.3.0",
-    "protobuf-java-3.2.0": "mvn:com.google.protobuf:protobuf-java:3.2.0"
+    "protobuf-java-3.2.0": "mvn:com.google.protobuf:protobuf-java:3.2.0",
+    "grpc-testing-1.3.0": "mvn:io.grpc:grpc-testing:1.3.0",
+    "grpc-testing-proto-1.3.0": "mvn:io.grpc:grpc-testing-proto:1.3.0",
+    "grpc-context-1.3.0": "mvn:io.grpc:grpc-context:1.3.0",
+    "google-truth-0.28": "mvn:com.google.truth:truth:0.28",
+    "google-code-findbugs-3.0.0": "mvn:com.google.code.findbugs:jsr305:3.0.0",
+    "google-errorprone-2.0.19": "mvn:com.google.errorprone:error_prone_annotations:2.0.19",
+    "google-instrumentation-0.3.0": "mvn:com.google.instrumentation:instrumentation-api:0.3.0",
+    "gson": "mvn:com.google.code.gson:gson:2.7"
   }
 }
diff --git a/modules.defs b/modules.defs
index d52b2e4..ec14130 100644
--- a/modules.defs
+++ b/modules.defs
@@ -9,7 +9,6 @@
 API = [
     '//core/api:onos-api',
     '//incubator/api:onos-incubator-api',
-    '//incubator/protobuf:onos-incubator-grpc',
 ]
 
 CORE = UTILS + API + [
@@ -81,6 +80,9 @@
 
     '//web/api:onos-rest',
     '//web/gui:onos-gui',
+
+    '//incubator/protobuf/models:onos-incubator-protobuf-models',
+    '//incubator/protobuf/services/nb:onos-incubator-protobuf-services-nb',
 ]
 
 ONOS_DRIVERS = [
