diff --git a/ponsim/ponsim.py b/ponsim/ponsim.py
index 619beb1..219f1c5 100644
--- a/ponsim/ponsim.py
+++ b/ponsim/ponsim.py
@@ -477,13 +477,91 @@
         self.log = structlog.get_logger()
 
     def CreateInterface(self, request):
-        self.log.info("create-interface-request", interface_type = request.WhichOneof("interface_type"), data = request)
+        self.log.info("create-interface-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
         return
 
     def UpdateInterface(self, request):
-        self.log.info("update-interface-request", interface_type = request.WhichOneof("interface_type"), data = request)
+        self.log.info("update-interface-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
         return
 
     def RemoveInterface(self, request):
-        self.log.info("remove-interface-request", interface_type = request.WhichOneof("interface_type"), data = request)
+        self.log.info("remove-interface-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def CreateTcont(self, request, request2):
+        self.log.info("create-tcont-request",
+                      tcont_config_data=request,
+                      traffic_descriptor_profile_config_data=request2)
+        return
+
+    def UpdateTcont(self, request, request2):
+        self.log.info("update-tcont-request",
+                      tcont_config_data=request,
+                      traffic_descriptor_profile_config_data=request2)
+        return
+
+    def RemoveTcont(self, request, request2):
+        self.log.info("remove-tcont-request",
+                      tcont_config_data=request,
+                      traffic_descriptor_profile_config_data=request2)
+        return
+
+    def CreateGemport(self, request):
+        self.log.info("create-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def UpdateGemport(self, request):
+        self.log.info("update-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def RemoveGemport(self, request):
+        self.log.info("remove-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def CreateMulticastGemport(self, request):
+        self.log.info("create-multicast-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def UpdateMulticastGemport(self, request):
+        self.log.info("update-multicast-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def RemoveMulticastGemport(self, request):
+        self.log.info("remove-multicast-gemport-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def CreateMulticastDistributionSet(self, request):
+        self.log.info("create-multicast-distribution-set-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def UpdateMulticastDistributionSet(self, request):
+        self.log.info("update-multicast-distribution-set-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
+        return
+
+    def RemoveMulticastDistributionSet(self, request):
+        self.log.info("remove-multicast-distribution-set-request",
+                      interface_type=request.WhichOneof("interface_type"),
+                      data=request)
         return
diff --git a/ponsim/ponsim_servicer.py b/ponsim/ponsim_servicer.py
index b7a524f..ccfec38 100644
--- a/ponsim/ponsim_servicer.py
+++ b/ponsim/ponsim_servicer.py
@@ -69,3 +69,57 @@
     def RemoveInterface(self, request, context):
         self.x_pon_sim.RemoveInterface(request)
         return Empty()
+
+    def CreateTcont(self, request, context):
+        self.x_pon_sim.CreateTcont(
+            request.tconts_config_data,
+            request.traffic_descriptor_profile_config_data)
+        return Empty()
+
+    def UpdateTcont(self, request, context):
+        self.x_pon_sim.UpdateTcont(
+            request.tconts_config_data,
+            request.traffic_descriptor_profile_config_data)
+        return Empty()
+
+    def RemoveTcont(self, request, context):
+        self.x_pon_sim.RemoveTcont(
+            request.tconts_config_data,
+            request.traffic_descriptor_profile_config_data)
+        return Empty()
+
+    def CreateGemport(self, request, context):
+        self.x_pon_sim.CreateGemport(request)
+        return Empty()
+
+    def UpdateGemport(self, request, context):
+        self.x_pon_sim.UpdateGemport(request)
+        return Empty()
+
+    def RemoveGemport(self, request, context):
+        self.x_pon_sim.RemoveGemport(request)
+        return Empty()
+
+    def CreateMulticastGemport(self, request, context):
+        self.x_pon_sim.CreateMulticastGemport(request)
+        return Empty()
+
+    def UpdateMulticastGemport(self, request, context):
+        self.x_pon_sim.UpdateMulticastGemport(request)
+        return Empty()
+
+    def RemoveMulticastGemport(self, request, context):
+        self.x_pon_sim.RemoveMulticastGemport(request)
+        return Empty()
+
+    def CreateMulticastDistributionSet(self, request, context):
+        self.x_pon_sim.CreateMulticastDistributionSet(request)
+        return Empty()
+
+    def UpdateMulticastDistributionSet(self, request, context):
+        self.x_pon_sim.UpdateMulticastDistributionSet(request)
+        return Empty()
+
+    def RemoveMulticastDistributionSet(self, request, context):
+        self.x_pon_sim.RemoveMulticastDistributionSet(request)
+        return Empty()
