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 f4fc6df..a1678c5 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 17403b9..012a150 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 29aa0bb..9f4ba89 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.info('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.info('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 1457124..06f707e 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)
