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:
