diff --git a/alarm-generator/main.py b/alarm-generator/main.py
index ce0f703..bb3fa69 100644
--- a/alarm-generator/main.py
+++ b/alarm-generator/main.py
@@ -46,7 +46,7 @@
 
 from google.protobuf.empty_pb2 import Empty
 from voltha.protos import third_party
-from voltha.protos import voltha_pb2, common_pb2
+from voltha.protos import voltha_pb2, voltha_pb2_grpc, common_pb2
 
 defs = dict(
     # config=os.environ.get('CONFIG', './cli.yml'),
@@ -90,9 +90,9 @@
     def get_stub(self):
         if self.stub is None:
             self.stub = \
-                voltha_pb2.VolthaGlobalServiceStub(self.get_channel()) \
+                voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel()) \
                     if self.global_request else \
-                    voltha_pb2.VolthaLocalServiceStub(self.get_channel())
+                    voltha_pb2_grpc.VolthaLocalServiceStub(self.get_channel())
         return self.stub
 
     def get_first_olt_device_id(self):
diff --git a/cli/main.py b/cli/main.py
index 6ca318a..fa3b1d4 100755
--- a/cli/main.py
+++ b/cli/main.py
@@ -36,7 +36,7 @@
 from cli.table import print_pb_list_as_table
 from voltha.core.flow_decomposer import *
 from voltha.protos import third_party
-from voltha.protos import voltha_pb2
+from voltha.protos import voltha_pb2, voltha_pb2_grpc, health_pb2_grpc
 from voltha.protos.openflow_13_pb2 import FlowTableUpdate, FlowGroupTableUpdate
 
 _ = third_party
@@ -143,9 +143,9 @@
     def get_stub(self):
         if self.stub is None:
             self.stub = \
-                voltha_pb2.VolthaGlobalServiceStub(self.get_channel()) \
+                voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel()) \
                     if self.global_request else \
-                        voltha_pb2.VolthaLocalServiceStub(self.get_channel())
+                        voltha_pb2_grpc.VolthaLocalServiceStub(self.get_channel())
         return self.stub
 
     # ~~~~~~~~~~~~~~~~~ ACTUAL COMMAND IMPLEMENTATIONS ~~~~~~~~~~~~~~~~~~~~~~~~
@@ -303,7 +303,7 @@
 
     def do_health(self, line):
         """Show connectivity status to Voltha status"""
-        stub = voltha_pb2.HealthServiceStub(self.get_channel())
+        stub = health_pb2_grpc.HealthServiceStub(self.get_channel())
         res = stub.GetHealthStatus(Empty())
         self.poutput(dumps(pb2dict(res), indent=4))
 
diff --git a/cli/xpon.py b/cli/xpon.py
index ea16a4a..438d5d5 100644
--- a/cli/xpon.py
+++ b/cli/xpon.py
@@ -40,7 +40,7 @@
 from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
 
 _ = third_party
-from voltha.protos import voltha_pb2, bbf_fiber_types_pb2, \
+from voltha.protos import voltha_pb2, voltha_pb2_grpc, bbf_fiber_types_pb2, \
     ietf_interfaces_pb2, bbf_fiber_traffic_descriptor_profile_body_pb2
 import sys
 from google.protobuf.json_format import MessageToDict
@@ -103,7 +103,7 @@
         return interface_list
 
     def get_interface_based_on_device(self):
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
         try:
             channel_terminations = stub.GetAllChannelterminationConfig(
                 voltha_pb2.ID(id=self.device_id)).channeltermination_config
@@ -152,7 +152,7 @@
     def do_show(self, line):
         """Show detailed information of each interface based on device ID
         or all interfaces"""
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
         device_id = self.device_id
         if line.strip():
             self.device_id = line.strip()
@@ -292,7 +292,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -447,7 +447,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -628,7 +628,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -816,7 +816,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1007,7 +1007,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1143,7 +1143,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1278,7 +1278,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1420,7 +1420,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1528,7 +1528,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
@@ -1630,7 +1630,7 @@
                                        'bold') + ' is not recognized')
             return
 
-        stub = voltha_pb2.VolthaGlobalServiceStub(self.get_channel())
+        stub = voltha_pb2_grpc.VolthaGlobalServiceStub(self.get_channel())
 
         if line.strip() == "get":
             if self.device_id:
diff --git a/docker/Dockerfile.protoc b/docker/Dockerfile.protoc
index eef6f54..9607ecf 100644
--- a/docker/Dockerfile.protoc
+++ b/docker/Dockerfile.protoc
@@ -31,7 +31,7 @@
 ENV PROTOC_DOWNLOAD_URI=${PROTOC_DOWNLOAD_PREFIX}/v${PROTOC_VERSION}/${PROTOC_TARBALL}
 
 RUN apt-get update -y && apt-get install -y wget build-essential python-dev python-pip
-RUN pip install grpcio-tools==1.3.5
+RUN pip install grpcio-tools==1.16.0
 WORKDIR /build
 RUN wget -q --no-check-certificate ${PROTOC_DOWNLOAD_URI}
 RUN tar --strip-components=1 -zxf ${PROTOC_TARBALL}
diff --git a/netconf/grpc_client/grpc_client.py b/netconf/grpc_client/grpc_client.py
index bcfb972..45d3347 100644
--- a/netconf/grpc_client/grpc_client.py
+++ b/netconf/grpc_client/grpc_client.py
@@ -33,7 +33,7 @@
 
 from common.utils.asleep import asleep
 from netconf.protos import third_party
-from netconf.protos.schema_pb2 import SchemaServiceStub
+from netconf.protos.schema_pb2_grpc import SchemaServiceStub
 from google.protobuf.empty_pb2 import Empty
 from common.utils.consulhelpers import get_endpoint_from_consul
 # from netconf.protos.voltha_pb2 import VolthaLocalServiceStub, \
diff --git a/ofagent/grpc_client.py b/ofagent/grpc_client.py
index ad87387..16be6f0 100644
--- a/ofagent/grpc_client.py
+++ b/ofagent/grpc_client.py
@@ -27,8 +27,9 @@
 from twisted.internet import threads
 from twisted.internet.defer import inlineCallbacks, returnValue, DeferredQueue
 
-from protos.voltha_pb2 import ID, VolthaLocalServiceStub, FlowTableUpdate, MeterModUpdate, \
+from protos.voltha_pb2 import ID, FlowTableUpdate, MeterModUpdate, \
     FlowGroupTableUpdate, PacketOut
+from protos.voltha_pb2_grpc import VolthaLocalServiceStub
 from protos.logical_device_pb2 import LogicalPortId
 from google.protobuf import empty_pb2
 
diff --git a/ponsim/bal_servicer.py b/ponsim/bal_servicer.py
index f036d67..1b7c4d4 100644
--- a/ponsim/bal_servicer.py
+++ b/ponsim/bal_servicer.py
@@ -18,7 +18,8 @@
 from voltha.protos import third_party
 from voltha.protos.ponsim_pb2 import PonSimDeviceInfo
 from google.protobuf.empty_pb2 import Empty
-from voltha.adapters.asfvolt16_olt.protos.bal_pb2 import BalServicer, BalErr
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2_grpc import BalServicer
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2 BalErr
 from voltha.adapters.asfvolt16_olt.protos.bal_errno_pb2 import BAL_ERR_OK
 
 _ = third_party
diff --git a/ponsim/grpc_server.py b/ponsim/grpc_server.py
index 9165433..3185c9e 100644
--- a/ponsim/grpc_server.py
+++ b/ponsim/grpc_server.py
@@ -19,9 +19,9 @@
 from concurrent import futures
 
 from voltha.protos import third_party
-from voltha.protos.ponsim_pb2 import add_PonSimServicer_to_server
-from voltha.protos.ponsim_pb2 import add_XPonSimServicer_to_server
-from voltha.adapters.asfvolt16_olt.protos.bal_pb2 import add_BalServicer_to_server
+from voltha.protos.ponsim_pb2_grpc import add_PonSimServicer_to_server
+from voltha.protos.ponsim_pb2_grpc import add_XPonSimServicer_to_server
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2_grpc import add_BalServicer_to_server
 from ponsim_servicer import FlowUpdateHandler, XPonHandler
 from bal_servicer import BalHandler
 
diff --git a/ponsim/ponsim_servicer.py b/ponsim/ponsim_servicer.py
index ccfec38..6c3243d 100644
--- a/ponsim/ponsim_servicer.py
+++ b/ponsim/ponsim_servicer.py
@@ -16,9 +16,9 @@
 import structlog
 from common.utils.grpc_utils import twisted_async
 from voltha.protos import third_party
-from voltha.protos.ponsim_pb2 import PonSimServicer, PonSimDeviceInfo
+from voltha.protos.ponsim_pb2_grpc import PonSimServicer, XPonSimServicer
+from voltha.protos.ponsim_pb2 import PonSimDeviceInfo
 from google.protobuf.empty_pb2 import Empty
-from voltha.protos.ponsim_pb2 import XPonSimServicer
 
 _ = third_party
 
diff --git a/requirements.txt b/requirements.txt
index a56f479..0f147b9 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,8 +9,8 @@
 docker-py==1.10.6
 fluent-logger==0.6.0
 grpc==0.3.post19
-grpcio==1.3.5
-grpcio-tools==1.3.5
+grpcio==1.16.0
+grpcio-tools==1.16.0
 hash_ring==1.3.1
 hexdump==3.3
 jinja2==2.8
@@ -29,7 +29,7 @@
 pcapy==0.11.1
 pep8==1.7.1
 pep8-naming>=0.3.3
-protobuf==3.3.0
+protobuf==3.6.1
 protobuf-to-dict==0.1.0
 pyflakes==1.6.0
 pylint==1.7.6
diff --git a/tests/itests/voltha/test_dispatcher.py b/tests/itests/voltha/test_dispatcher.py
index 52a417e..f7ade38 100644
--- a/tests/itests/voltha/test_dispatcher.py
+++ b/tests/itests/voltha/test_dispatcher.py
@@ -28,7 +28,7 @@
 from google.protobuf.empty_pb2 import Empty
 import grpc
 from voltha.protos import third_party
-from voltha.protos import voltha_pb2
+from voltha.protos import voltha_pb2, voltha_pb2_grpc
 from voltha.core.flow_decomposer import *
 from voltha.protos.openflow_13_pb2 import FlowTableUpdate
 from voltha.protos import bbf_fiber_base_pb2 as fb
@@ -215,19 +215,19 @@
         sleep(20)  # A small wait for the system to settle down
         voltha_instances = orch.get_all_instances_of_service(vcore_svc_name[orch_env], port_name='grpc')
         self.assertEqual(len(voltha_instances), 3)
-        self.ponsim_voltha_stub_local = voltha_pb2.VolthaLocalServiceStub(
+        self.ponsim_voltha_stub_local = voltha_pb2_grpc.VolthaLocalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[2])))
-        self.ponsim_voltha_stub_global = voltha_pb2.VolthaGlobalServiceStub(
+        self.ponsim_voltha_stub_global = voltha_pb2_grpc.VolthaGlobalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[2])))
 
-        self.simulated_voltha_stub_local = voltha_pb2.VolthaLocalServiceStub(
+        self.simulated_voltha_stub_local = voltha_pb2_grpc.VolthaLocalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[1])))
-        self.simulated_voltha_stub_global = voltha_pb2.VolthaGlobalServiceStub(
+        self.simulated_voltha_stub_global = voltha_pb2_grpc.VolthaGlobalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[1])))
 
-        self.empty_voltha_stub_local = voltha_pb2.VolthaLocalServiceStub(
+        self.empty_voltha_stub_local = voltha_pb2_grpc.VolthaLocalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[0])))
-        self.empty_voltha_stub_global = voltha_pb2.VolthaGlobalServiceStub(
+        self.empty_voltha_stub_global = voltha_pb2_grpc.VolthaGlobalServiceStub(
             self.get_channel(self._get_grpc_address(voltha_instances[0])))
 
         if orch_env == ENV_DOCKER_COMPOSE:
diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_rx_handler.py b/voltha/adapters/asfvolt16_olt/asfvolt16_rx_handler.py
index 2ef2eb6..d646982 100644
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_rx_handler.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_rx_handler.py
@@ -19,7 +19,7 @@
 """
 from twisted.internet import reactor
 from common.utils.grpc_utils import twisted_async
-from voltha.adapters.asfvolt16_olt.protos import bal_indications_pb2
+from voltha.adapters.asfvolt16_olt.protos import bal_indications_pb2, bal_indications_pb2_grpc
 from voltha.adapters.asfvolt16_olt.protos import bal_model_types_pb2, \
     bal_errno_pb2, bal_pb2
 from voltha.adapters.asfvolt16_olt.grpc_server import GrpcServer
@@ -40,7 +40,7 @@
     def start(self):
         self.grpc_server = GrpcServer(self.grpc_server_port, self, self.log)
         self.grpc_server.start(
-            bal_indications_pb2.add_BalIndServicer_to_server, self)
+            bal_indications_pb2_grpc.add_BalIndServicer_to_server, self)
 
     def stop(self):
         self.grpc_server.stop()
diff --git a/voltha/adapters/asfvolt16_olt/bal.py b/voltha/adapters/asfvolt16_olt/bal.py
index 8f86be0..a1a7eef 100644
--- a/voltha/adapters/asfvolt16_olt/bal.py
+++ b/voltha/adapters/asfvolt16_olt/bal.py
@@ -17,8 +17,10 @@
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.internet import reactor
 
-from voltha.adapters.asfvolt16_olt.protos import bal_pb2, \
-    bal_model_types_pb2, bal_model_ids_pb2, bal_indications_pb2, asfvolt_pb2
+from voltha.adapters.asfvolt16_olt.protos import bal_pb2, bal_pb2_grpc, \
+    bal_model_types_pb2, bal_model_ids_pb2, \
+    bal_indications_pb2, bal_indications_pb2_grpc, \
+    asfvolt_pb2, asfvolt_pb2_grpc
 from voltha.adapters.asfvolt16_olt.grpc_client import GrpcClient
 from voltha.adapters.asfvolt16_olt.asfvolt16_ind_handler \
                                        import Asfvolt16IndHandler
@@ -54,9 +56,9 @@
     def connect_olt(self, host_and_port, device_id, is_init=True):
         self.device_id = device_id
         self.grpc_client.connect(host_and_port)
-        self.stub = bal_pb2.BalStub(self.grpc_client.channel)
-        self.ind_stub = bal_indications_pb2.BalGetIndStub(self.grpc_client.channel)
-        self.asfvolt_stub = asfvolt_pb2.AsfvoltStub(self.grpc_client.channel)
+        self.stub = bal_pb2_grpc.BalStub(self.grpc_client.channel)
+        self.ind_stub = bal_indications_pb2_grpc.BalGetIndStub(self.grpc_client.channel)
+        self.asfvolt_stub = asfvolt_pb2_grpc.AsfvoltStub(self.grpc_client.channel)
         self.olt.running = True
 
         # Right now Bi-Directional GRPC support is not there in grpc-c.
diff --git a/voltha/adapters/asfvolt16_olt/sim.py b/voltha/adapters/asfvolt16_olt/sim.py
index 9df3669..84f6e19 100755
--- a/voltha/adapters/asfvolt16_olt/sim.py
+++ b/voltha/adapters/asfvolt16_olt/sim.py
@@ -21,7 +21,8 @@
 from concurrent import futures
 import grpc
 
-from voltha.adapters.asfvolt16_olt.protos.bal_pb2 import BalServicer, add_BalServicer_to_server, BalErr
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2_grpc import BalServicer, add_BalServicer_to_server
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2 import BalErr
 from voltha.adapters.asfvolt16_olt.protos.bal_errno_pb2 import BAL_ERR_OK
 
 log = structlog.get_logger()
diff --git a/voltha/adapters/ponsim_olt/ponsim_olt.py b/voltha/adapters/ponsim_olt/ponsim_olt.py
index 1cf9066..a752644 100644
--- a/voltha/adapters/ponsim_olt/ponsim_olt.py
+++ b/voltha/adapters/ponsim_olt/ponsim_olt.py
@@ -38,7 +38,7 @@
 from voltha.core.logical_device_agent import mac_str_to_tuple
 from voltha.protos import third_party
 from voltha.protos import openflow_13_pb2 as ofp
-from voltha.protos import ponsim_pb2
+from voltha.protos import ponsim_pb2, ponsim_pb2_grpc
 from voltha.protos.common_pb2 import OperStatus, ConnectStatus, AdminState
 from voltha.protos.common_pb2 import OperationResp
 from voltha.protos.device_pb2 import Port, Device, PmConfig, PmConfigs
@@ -131,7 +131,7 @@
 
     def collect_port_metrics(self, channel):
         rtrn_port_metrics = dict()
-        stub = ponsim_pb2.PonSimStub(channel)
+        stub = ponsim_pb2_grpc.PonSimStub(channel)
         stats = stub.GetStats(ponsim_pb2.PonSimMetricsRequest(port=0))
         rtrn_port_metrics['pon'] = self.extract_pon_metrics(stats)
         rtrn_port_metrics['nni'] = self.extract_nni_metrics(stats)
@@ -414,7 +414,7 @@
             self.adapter_agent.update_device(device)
             return
 
-        stub = ponsim_pb2.PonSimStub(self.get_channel())
+        stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
         info = stub.GetDeviceInfo(Empty())
         log.info('got-info', info=info)
 
@@ -544,7 +544,7 @@
             return
 
         try:
-            stub = ponsim_pb2.PonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
             info = stub.GetDeviceInfo(Empty())
             log.info('got-info', info=info)
             # TODO: Verify we are connected to the same device we are
@@ -625,7 +625,7 @@
         """
         This call establishes a GRPC stream to receive frames.
         """
-        stub = ponsim_pb2.PonSimStub(self.get_channel())
+        stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
 
         # Attempt to establish a grpc stream with the remote ponsim service
         self.frames = stub.ReceiveFrames(Empty())
@@ -653,7 +653,7 @@
     # We'll go through the flows and change the output port of flows that we
     # know to be trap flows to the OF CONTROLLER port.
     def update_flow_table(self, flows):
-        stub = ponsim_pb2.PonSimStub(self.get_channel())
+        stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
         self.log.info('pushing-olt-flow-table')
         for flow in flows:
             classifier_info = {}
@@ -702,12 +702,12 @@
     def send_proxied_message(self, proxy_address, msg):
         self.log.debug('sending-proxied-message')
         if isinstance(msg, FlowTable):
-            stub = ponsim_pb2.PonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
             self.log.info('pushing-onu-flow-table', port=msg.port)
             res = stub.UpdateFlowTable(msg)
             self.adapter_agent.receive_proxied_message(proxy_address, res)
         elif isinstance(msg, PonSimMetricsRequest):
-            stub = ponsim_pb2.PonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
             self.log.debug('proxying onu stats request', port=msg.port)
             res = stub.GetStats(msg)
             self.adapter_agent.receive_proxied_message(proxy_address, res)
@@ -730,7 +730,7 @@
 
         if self.ponsim_comm == 'grpc':
             # send over grpc stream
-            stub = ponsim_pb2.PonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
             frame = PonSimFrame(id=self.device_id, payload=str(out_pkt), out_port=out_port)
             stub.SendFrame(frame)
         else:
@@ -839,7 +839,7 @@
         # Set the ofp_port_no and nni_port in case we bypassed the reconcile
         # process if the device was in DISABLED state on voltha restart
         if not self.ofp_port_no and not self.nni_port:
-            stub = ponsim_pb2.PonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.PonSimStub(self.get_channel())
             info = stub.GetDeviceInfo(Empty())
             log.info('got-info', info=info)
             self.ofp_port_no = info.nni_port
@@ -1012,7 +1012,7 @@
                 'forwarding-{}-request-to-olt-for-interface-type'
                     .format(self.xpon_ponsim_olt_itfs[method_name]['log']),
                 interface_type=type(data))
-            stub = ponsim_pb2.XPonSimStub(self.get_channel())
+            stub = ponsim_pb2_grpc.XPonSimStub(self.get_channel())
             _method = getattr(
                 stub, self.xpon_ponsim_olt_itfs[method_name]['method_name'])
             if isinstance(data, TcontsConfigData):
diff --git a/voltha/core/dispatcher.py b/voltha/core/dispatcher.py
index 7b18621..9a3ffd1 100644
--- a/voltha/core/dispatcher.py
+++ b/voltha/core/dispatcher.py
@@ -21,7 +21,7 @@
 """
 import structlog
 from twisted.internet.defer import inlineCallbacks, returnValue
-from voltha.protos.voltha_pb2 import VolthaLocalServiceStub
+from voltha.protos.voltha_pb2_grpc import VolthaLocalServiceStub
 from voltha.registry import registry
 from twisted.internet import reactor
 import grpc
diff --git a/voltha/core/global_handler.py b/voltha/core/global_handler.py
index 27ccd41..a80c6a4 100644
--- a/voltha/core/global_handler.py
+++ b/voltha/core/global_handler.py
@@ -25,11 +25,13 @@
 from voltha.protos.device_pb2 import PmConfigs, Images, \
     ImageDownload, ImageDownloads
 from voltha.protos.common_pb2 import OperationResp
-from voltha.protos.voltha_pb2 import \
+from voltha.protos.voltha_pb2_grpc import \
     add_VolthaGlobalServiceServicer_to_server, VolthaLocalServiceStub, \
-    VolthaGlobalServiceServicer, Voltha, VolthaInstances, VolthaInstance, \
+    VolthaGlobalServiceServicer, VolthaGlobalServiceStub
+from voltha.protos.voltha_pb2 import \
+    Voltha, VolthaInstances, VolthaInstance, \
     LogicalDevice, LogicalPort, Ports, Flows, FlowGroups, Device, SelfTestResponse, \
-    VolthaGlobalServiceStub, Devices, DeviceType, DeviceTypes, DeviceGroup, \
+    Devices, DeviceType, DeviceTypes, DeviceGroup, \
     AlarmFilter, AlarmFilters
 from voltha.registry import registry
 from google.protobuf.empty_pb2 import Empty
diff --git a/voltha/core/local_handler.py b/voltha/core/local_handler.py
index 5f73513..e8552b5 100644
--- a/voltha/core/local_handler.py
+++ b/voltha/core/local_handler.py
@@ -26,8 +26,9 @@
 from voltha.core.config.config_root import ConfigRoot
 from voltha.protos.openflow_13_pb2 import PacketIn, Flows, FlowGroups, \
     ofp_port_status
+from voltha.protos.voltha_pb2_grpc import \
+    add_VolthaLocalServiceServicer_to_server, VolthaLocalServiceServicer
 from voltha.protos.voltha_pb2 import \
-    add_VolthaLocalServiceServicer_to_server, VolthaLocalServiceServicer, \
     VolthaInstance, Adapters, LogicalDevices, LogicalDevice, Ports, \
     LogicalPort, LogicalPorts, Devices, Device, DeviceType, \
     DeviceTypes, DeviceGroups, DeviceGroup, AdminState, OperStatus, ChangeEvent, \
diff --git a/voltha/northbound/grpc/grpc_client.py b/voltha/northbound/grpc/grpc_client.py
index 3c98816..950d3f6 100644
--- a/voltha/northbound/grpc/grpc_client.py
+++ b/voltha/northbound/grpc/grpc_client.py
@@ -18,8 +18,9 @@
 
 import grpc
 
-from voltha.protos import schema_pb2
-from voltha.protos import voltha_pb2
+from voltha.protos import schema_pb2, schema_pb2_grpc
+from voltha.protos import voltha_pb2, voltha_pb2_grpc
+from voltha.protos import health_pb2_grpc
 from google.protobuf.empty_pb2 import Empty
 
 
@@ -28,7 +29,7 @@
     channel = grpc.insecure_channel('localhost:50055')
 
     # Test fetch the schema
-    stub = schema_pb2.SchemaServiceStub(channel)
+    stub = schema_pb2_grpc.SchemaServiceStub(channel)
     res = stub.GetSchema(Empty())
     print '\nSchema:\n'
     for key in res.protos:
@@ -39,12 +40,12 @@
         print '%s -> descriptor of %d bytes' % (key, len(res.descriptors[key]))
 
     # Ping health state as an example
-    stub = voltha_pb2.HealthServiceStub(channel)
+    stub = health_pb2_grpc.HealthServiceStub(channel)
     res = stub.GetHealthStatus(Empty())
     print '\nHealth state:', res.state
 
     # Try another API
-    stub = voltha_pb2.ExampleServiceStub(channel)
+    stub = voltha_pb2_grpc.ExampleServiceStub(channel)
     res = stub.ListAddresses(Empty())
     print '\nExample objects returned:\n', res.addresses
 
diff --git a/voltha/northbound/grpc/grpc_server.py b/voltha/northbound/grpc/grpc_server.py
index 1c746d8..af75f86 100644
--- a/voltha/northbound/grpc/grpc_server.py
+++ b/voltha/northbound/grpc/grpc_server.py
@@ -29,7 +29,7 @@
 
 from common.utils.grpc_utils import twisted_async
 from voltha.core.logical_device_agent import LogicalDeviceAgent
-from voltha.protos import voltha_pb2, schema_pb2
+from voltha.protos import voltha_pb2, voltha_pb2_grpc, schema_pb2, schema_pb2_grpc, health_pb2_grpc
 from google.protobuf.empty_pb2 import Empty
 
 from voltha.registry import IComponent
@@ -37,7 +37,7 @@
 log = get_logger()
 
 
-class SchemaService(schema_pb2.SchemaServiceServicer):
+class SchemaService(schema_pb2_grpc.SchemaServiceServicer):
 
     def __init__(self, thread_pool):
         self.thread_pool = thread_pool
@@ -87,7 +87,7 @@
         return self.schemas
 
 
-class HealthService(voltha_pb2.HealthServiceServicer):
+class HealthService(health_pb2_grpc.HealthServiceServicer):
 
     def __init__(self, thread_pool):
         self.thread_pool = thread_pool
@@ -105,7 +105,7 @@
         return res
 
 '''
-class VolthaLogicalLayer(voltha_pb2.VolthaLogicalLayerServicer):
+class VolthaLogicalLayer(voltha_pb2_grpc.VolthaLogicalLayerServicer):
     # TODO still a mock
 
     def __init__(self, threadpool):
@@ -206,8 +206,8 @@
 
         # add each service unit to the server and also to the list
         for activator_func, service_class in (
-            (schema_pb2.add_SchemaServiceServicer_to_server, SchemaService),
-            (voltha_pb2.add_HealthServiceServicer_to_server, HealthService),
+            (schema_pb2_grpc.add_SchemaServiceServicer_to_server, SchemaService),
+            (health_pb2_grpc.add_HealthServiceServicer_to_server, HealthService),
         ):
             service = service_class(self.thread_pool)
             self.register(activator_func, service)
