diff --git a/voltha/adapters/adtran_olt/adtran_olt.py b/voltha/adapters/adtran_olt/adtran_olt.py
index 67ac4f2..e44a15b 100644
--- a/voltha/adapters/adtran_olt/adtran_olt.py
+++ b/voltha/adapters/adtran_olt/adtran_olt.py
@@ -423,3 +423,39 @@
         :return: None
         """
         raise NotImplementedError()
+
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
diff --git a/voltha/adapters/broadcom_onu/broadcom_onu.py b/voltha/adapters/broadcom_onu/broadcom_onu.py
index 968fc42..bef5adf 100644
--- a/voltha/adapters/broadcom_onu/broadcom_onu.py
+++ b/voltha/adapters/broadcom_onu/broadcom_onu.py
@@ -179,9 +179,6 @@
             if handler is not None:
                 handler.event_messages.put(msg)
 
-    def suppress_alarm(self, filter):
-        raise NotImplementedError()
-
     def create_interface(self, device, data):
         log.info('create-interface', device_id=device.id)
         if device.proxy_address.channel_id in self.devices_handlers:
@@ -206,6 +203,45 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def suppress_alarm(self, filter):
+        raise NotImplementedError()
+
     def unsuppress_alarm(self, filter):
         raise NotImplementedError()
 
diff --git a/voltha/adapters/dpoe_onu/dpoe_onu.py b/voltha/adapters/dpoe_onu/dpoe_onu.py
index 09e7f6e..2bf9397 100644
--- a/voltha/adapters/dpoe_onu/dpoe_onu.py
+++ b/voltha/adapters/dpoe_onu/dpoe_onu.py
@@ -437,6 +437,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     def suppress_alarm(self, filter):
         raise NotImplementedError()
 
diff --git a/voltha/adapters/iadapter.py b/voltha/adapters/iadapter.py
index 686a636..88e7c37 100644
--- a/voltha/adapters/iadapter.py
+++ b/voltha/adapters/iadapter.py
@@ -188,6 +188,41 @@
     def receive_onu_detect_state(self, proxy_address, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
 
 """
 OLT Adapter base class
diff --git a/voltha/adapters/interface.py b/voltha/adapters/interface.py
index c2431fb..f8c6f28 100644
--- a/voltha/adapters/interface.py
+++ b/voltha/adapters/interface.py
@@ -305,18 +305,27 @@
         """
         API to create various interfaces (only some PON interfaces as of now)
         in the devices
+        :param device: device id
+        :data: interface data object
+        :return: None
         """
 
     def update_interface(device, data):
         """
         API to update various interfaces (only some PON interfaces as of now)
         in the devices
+        :param device: device id
+        :data: interface data object
+        :return: None
         """
 
     def remove_interface(device, data):
         """
         API to delete various interfaces (only some PON interfaces as of now)
         in the devices
+        :param device: device id
+        :data: interface data object
+        :return: None
         """
 
     def receive_onu_detect_state(proxy_address, state):
@@ -327,6 +336,109 @@
         :return: None
         """
 
+
+    def create_tcont(device, tcont_data, traffic_descriptor_data):
+        """
+        API to create tcont object in the devices
+        :param device: device id
+        :tcont_data: tcont data object
+        :traffic_descriptor_data: traffic descriptor data object
+        :return: None
+        """
+
+    def update_tcont(device, tcont_data, traffic_descriptor_data):
+        """
+        API to update tcont object in the devices
+        :param device: device id
+        :tcont_data: tcont data object
+        :traffic_descriptor_data: traffic descriptor data object
+        :return: None
+        """
+
+    def remove_tcont(device, tcont_data, traffic_descriptor_data):
+        """
+        API to delete tcont object in the devices
+        :param device: device id
+        :tcont_data: tcont data object
+        :traffic_descriptor_data: traffic descriptor data object
+        :return: None
+        """
+
+    def create_gemport(device, data):
+        """
+        API to create gemport object in the devices
+        :param device: device id
+        :data: gemport data object
+        :return: None
+        """
+
+    def update_gemport(device, data):
+        """
+        API to update gemport object in the devices
+        :param device: device id
+        :data: gemport data object
+        :return: None
+        """
+
+    def remove_gemport(device, data):
+        """
+        API to delete gemport object in the devices
+        :param device: device id
+        :data: gemport data object
+        :return: None
+        """
+
+    def create_multicast_gemport(device, data):
+        """
+        API to create multicast gemport object in the devices
+        :param device: device id
+        :data: multicast gemport data object
+        :return: None
+        """
+
+    def update_multicast_gemport(device, data):
+        """
+        API to update  multicast gemport object in the devices
+        :param device: device id
+        :data: multicast gemport data object
+        :return: None
+        """
+
+    def remove_multicast_gemport(device, data):
+        """
+        API to delete multicast gemport object in the devices
+        :param device: device id
+        :data: multicast gemport data object
+        :return: None
+        """
+
+    def create_multicast_distribution_set(device, data):
+        """
+        API to create multicast distribution rule to specify
+        the multicast VLANs that ride on the multicast gemport
+        :param device: device id
+        :data: multicast distribution data object
+        :return: None
+        """
+
+    def update_multicast_distribution_set(device, data):
+        """
+        API to update multicast distribution rule to specify
+        the multicast VLANs that ride on the multicast gemport
+        :param device: device id
+        :data: multicast distribution data object
+        :return: None
+        """
+
+    def remove_multicast_distribution_set(device, data):
+        """
+        API to delete multicast distribution rule to specify
+        the multicast VLANs that ride on the multicast gemport
+        :param device: device id
+        :data: multicast distribution data object
+        :return: None
+        """
+
 class IAdapterAgent(Interface):
     """
     This object is passed in to the __init__ function of each adapter,
diff --git a/voltha/adapters/maple_olt/maple_olt.py b/voltha/adapters/maple_olt/maple_olt.py
index 03f7961..896b04f 100644
--- a/voltha/adapters/maple_olt/maple_olt.py
+++ b/voltha/adapters/maple_olt/maple_olt.py
@@ -521,6 +521,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     def suppress_alarm(self, filter):
         raise NotImplementedError()
 
diff --git a/voltha/adapters/microsemi_olt/microsemi_olt.py b/voltha/adapters/microsemi_olt/microsemi_olt.py
index a04a712..cf30317 100644
--- a/voltha/adapters/microsemi_olt/microsemi_olt.py
+++ b/voltha/adapters/microsemi_olt/microsemi_olt.py
@@ -169,6 +169,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     def send_proxied_message(self, proxy_address, msg):
         device = self.adaptor_agent.get_device(proxy_address.device_id)
         _, _, comm = self.olts[device.mac_address]
diff --git a/voltha/adapters/pmcs_onu/pmcs_onu.py b/voltha/adapters/pmcs_onu/pmcs_onu.py
index aedbb99..0af00d9 100644
--- a/voltha/adapters/pmcs_onu/pmcs_onu.py
+++ b/voltha/adapters/pmcs_onu/pmcs_onu.py
@@ -184,6 +184,42 @@
     def receive_inter_adapter_message(self, msg):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     def suppress_alarm(self, filter):
         raise NotImplementedError()
 
diff --git a/voltha/adapters/ponsim_olt/ponsim_olt.py b/voltha/adapters/ponsim_olt/ponsim_olt.py
index aca7fc2..1e5d042 100644
--- a/voltha/adapters/ponsim_olt/ponsim_olt.py
+++ b/voltha/adapters/ponsim_olt/ponsim_olt.py
@@ -17,6 +17,7 @@
 """
 Fully simulated OLT/ONU adapter.
 """
+import sys
 from uuid import uuid4
 
 import arrow
@@ -49,10 +50,18 @@
 from voltha.registry import registry
 
 from voltha.protos.bbf_fiber_base_pb2 import \
-    ChannelgroupConfig, ChannelpartitionConfig, ChannelpairConfig, ChannelterminationConfig, \
-    OntaniConfig, VOntaniConfig, VEnetConfig
+    ChannelgroupConfig, ChannelpartitionConfig, ChannelpairConfig,\
+    ChannelterminationConfig, OntaniConfig, VOntaniConfig, VEnetConfig
+from voltha.protos.bbf_fiber_traffic_descriptor_profile_body_pb2 import \
+    TrafficDescriptorProfileData
+from voltha.protos.bbf_fiber_tcont_body_pb2 import TcontsConfigData
+from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
+from voltha.protos.bbf_fiber_multicast_gemport_body_pb2 import \
+    MulticastGemportsConfigData
+from voltha.protos.bbf_fiber_multicast_distribution_set_body_pb2 import \
+    MulticastDistributionSetData
 
-from voltha.protos.ponsim_pb2 import InterfaceConfig
+from voltha.protos.ponsim_pb2 import InterfaceConfig, TcontInterfaceConfig
 
 _ = third_party
 log = structlog.get_logger()
@@ -208,7 +217,109 @@
         log.info('remove-interface', device_id=device.id)
         self.devices_handlers[device.id].remove_interface(data)
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        log.info('create-tcont', device_id=device.id)
+        self.devices_handlers[device.id].create_tcont(tcont_data,
+                                                      traffic_descriptor_data)
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        log.info('update-tcont', device_id=device.id)
+        self.devices_handlers[device.id].update_tcont(tcont_data,
+                                                      traffic_descriptor_data)
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        log.info('remove-tcont', device_id=device.id)
+        self.devices_handlers[device.id].remove_tcont(tcont_data,
+                                                      traffic_descriptor_data)
+
+    def create_gemport(self, device, data):
+        log.info('create-gemport', device_id=device.id)
+        self.devices_handlers[device.id].create_gemport(data)
+
+    def update_gemport(self, device, data):
+        log.info('update-gemport', device_id=device.id)
+        self.devices_handlers[device.id].update_gemport(data)
+
+    def remove_gemport(self, device, data):
+        log.info('remove-gemport', device_id=device.id)
+        self.devices_handlers[device.id].remove_gemport(data)
+
+    def create_multicast_gemport(self, device, data):
+        log.info('create-multicast-gemport', device_id=device.id)
+        self.devices_handlers[device.id].create_multicast_gemport(data)
+
+    def update_multicast_gemport(self, device, data):
+        log.info('update-multicast-gemport', device_id=device.id)
+        self.devices_handlers[device.id].update_multicast_gemport(data)
+
+    def remove_multicast_gemport(self, device, data):
+        log.info('remove-multicast-gemport', device_id=device.id)
+        self.devices_handlers[device.id].remove_multicast_gemport(data)
+
+    def create_multicast_distribution_set(self, device, data):
+        log.info('create-multicast-distribution-set', device_id=device.id)
+        self.devices_handlers[device.id].create_multicast_distribution_set(
+            data)
+
+    def update_multicast_distribution_set(self, device, data):
+        log.info('update-multicast-distribution-set', device_id=device.id)
+        self.devices_handlers[device.id].update_multicast_distribution_set(
+            data)
+
+    def remove_multicast_distribution_set(self, device, data):
+        log.info('remove-multicast-distribution-set', device_id=device.id)
+        self.devices_handlers[device.id].remove_multicast_distribution_set(
+            data)
+
 class PonSimOltHandler(object):
+    xpon_ponsim_olt_itfs = {
+        'create_interface': {
+            'method_name': 'CreateInterface',
+            'log': 'create-interface'},
+        'update_interface': {
+            'method_name': 'UpdateInterface',
+            'log': 'update-interface'},
+        'remove_interface': {
+            'method_name': 'RemoveInterface',
+            'log': 'remove-interface'},
+        'create_tcont': {
+            'method_name': 'CreateTcont',
+            'log': 'create-tconts-config-data'},
+        'update_tcont': {
+            'method_name': 'UpdateTcont',
+            'log': 'update-tconts-config-data'},
+        'remove_tcont': {
+            'method_name': 'RemoveTcont',
+            'log': 'remove-tconts-config-data'},
+        'create_gemport': {
+            'method_name': 'CreateGemport',
+            'log': 'create-gemports-config-data'},
+        'update_gemport': {
+            'method_name': 'UpdateGemport',
+            'log': 'update-gemports-config-data'},
+        'remove_gemport': {
+            'method_name': 'RemoveGemport',
+            'log': 'remove-gemports-config-data'},
+        'create_multicast_gemport': {
+            'method_name': 'CreateMulticastGemport',
+            'log': 'create-multicast-gemports-config-data'},
+        'update_multicast_gemport': {
+            'method_name': 'UpdateMulticastGemport',
+            'log': 'update-multicast-gemports-config-data'},
+        'remove_multicast_gemport': {
+            'method_name': 'RemoveMulticastGemport',
+            'log': 'remove-multicast-gemports-config-data'},
+        'create_multicast_distribution_set': {
+            'method_name': 'CreateMulticastDistributionSet',
+            'log': 'create-multicast-distribution-set-data'},
+        'update_multicast_distribution_set': {
+            'method_name': 'UpdateMulticastDistributionSet',
+            'log': 'update-multicast-distribution-set-data'},
+        'remove_multicast_distribution_set': {
+            'method_name': 'RemoveMulticastDistributionSet',
+            'log': 'remove-multicast-distribution-set-data'},
+                            }
+
     def __init__(self, adapter, device_id):
         self.adapter = adapter
         self.adapter_agent = adapter.adapter_agent
@@ -724,30 +835,100 @@
             interfaceConfig.vont_ani_config.CopyFrom(data)
         elif isinstance(data, VEnetConfig):
             interfaceConfig.venet_config.CopyFrom(data)
+        elif isinstance(data, TrafficDescriptorProfileData):
+            interfaceConfig.traffic_descriptor_profile_config_data.CopyFrom(
+                data)
+        elif isinstance(data, TcontsConfigData):
+            interfaceConfig.tconts_config_data.CopyFrom(data)
+        elif isinstance(data, GemportsConfigData):
+            interfaceConfig.gemports_config_data.CopyFrom(data)
+        elif isinstance(data, MulticastGemportsConfigData):
+            interfaceConfig.multicast_gemports_config_data.CopyFrom(data)
+        elif isinstance(data, MulticastDistributionSetData):
+            interfaceConfig.multicast_distribution_set_data.CopyFrom(data)
         else:
             return None
         return interfaceConfig
 
-    def create_interface(self, data):
+    def xpon_ponsim_olt_interface(self, method_name, data, data2=None):
         interfaceConfig = self.get_interface_config(data)
         if interfaceConfig is not None:
-            self.log.info('forwarding-create-interface-request-to-olt-for-interface-type', interface_type=type(data))
+            self.log.info(
+                '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.CreateInterface(interfaceConfig)
+            _method = getattr(
+                stub, self.xpon_ponsim_olt_itfs[method_name]['method_name'])
+            if isinstance(data, TcontsConfigData):
+                tcont_config = TcontInterfaceConfig()
+                tcont_config.tconts_config_data.CopyFrom(data)
+                tcont_config.traffic_descriptor_profile_config_data.CopyFrom(
+                    data2)
+                _method(tcont_config)
+            else:
+                _method(interfaceConfig)
             self.log.info('success')
 
+    def create_interface(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
     def update_interface(self, data):
-        interfaceConfig = self.get_interface_config(data)
-        if interfaceConfig is not None:
-            self.log.info('forwarding-update-interface-request-to-olt-for-interface-type', interface_type=type(data))
-            stub = ponsim_pb2.XPonSimStub(self.get_channel())
-            stub.UpdateInterface(interfaceConfig)
-            self.log.info('success')
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
 
     def remove_interface(self, data):
-        interfaceConfig = self.get_interface_config(data)
-        if interfaceConfig is not None:
-            self.log.info('forwarding-remove-interface-request-to-olt-for-interface-type', interface_type=type(data))
-            stub = ponsim_pb2.XPonSimStub(self.get_channel())
-            stub.RemoveInterface(interfaceConfig)
-            self.log.info('success')
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def create_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data);
+
+    def update_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data);
+
+    def remove_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data);
+
+    def create_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def update_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def remove_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def create_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def update_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def remove_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def create_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def update_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
+
+    def remove_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_olt_interface(_method_name, data);
diff --git a/voltha/adapters/ponsim_onu/ponsim_onu.py b/voltha/adapters/ponsim_onu/ponsim_onu.py
index 9d7175a..5467aad 100644
--- a/voltha/adapters/ponsim_onu/ponsim_onu.py
+++ b/voltha/adapters/ponsim_onu/ponsim_onu.py
@@ -18,6 +18,7 @@
 Fully simulated OLT/ONU adapter.
 """
 
+import sys
 import structlog
 from twisted.internet.defer import DeferredQueue, inlineCallbacks
 from common.utils.asleep import asleep
@@ -35,10 +36,50 @@
 from voltha.protos.ponsim_pb2 import InterfaceConfig
 from voltha.protos.bbf_fiber_base_pb2 import OntaniConfig, VOntaniConfig, \
     VEnetConfig
+from voltha.protos.bbf_fiber_traffic_descriptor_profile_body_pb2 import \
+    TrafficDescriptorProfileData
+from voltha.protos.bbf_fiber_tcont_body_pb2 import TcontsConfigData
+from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
+from voltha.protos.bbf_fiber_multicast_gemport_body_pb2 import \
+    MulticastGemportsConfigData
+from voltha.protos.bbf_fiber_multicast_distribution_set_body_pb2 import \
+    MulticastDistributionSetData
 
 _ = third_party
 log = structlog.get_logger()
 
+xpon_ponsim_onu_itfs = {
+    'create_interface': {
+        'log': 'create-interface'},
+    'update_interface': {
+        'log': 'update-interface'},
+    'remove_interface': {
+        'log': 'remove-interface'},
+    'create_tcont': {
+        'log': 'create-tconts-config-data'},
+    'update_tcont': {
+        'log': 'update-tconts-config-data'},
+    'remove_tcont': {
+        'log': 'remove-tconts-config-data'},
+    'create_gemport': {
+        'log': 'create-gemports-config-data'},
+    'update_gemport': {
+        'log': 'update-gemports-config-data'},
+    'remove_gemport': {
+        'log': 'remove-gemports-config-data'},
+    'create_multicast_gemport': {
+        'log': 'create-multicast-gemports-config-data'},
+    'update_multicast_gemport': {
+        'log': 'update-multicast-gemports-config-data'},
+    'remove_multicast_gemport': {
+        'log': 'remove-multicast-gemports-config-data'},
+    'create_multicast_distribution_set': {
+        'log': 'create-multicast-distribution-set-data'},
+    'update_multicast_distribution_set': {
+        'log': 'update-multicast-distribution-set-data'},
+    'remove_multicast_distribution_set': {
+        'log': 'remove-multicast-distribution-set-data'},
+                        }
 
 class PonSimOnuAdapter(OnuAdapter):
     def __init__(self, adapter_agent, config):
@@ -53,26 +94,81 @@
                                                device_type='ponsim_onu',
                                                vendor_id='PSMO')
 
-    def create_interface(self, device, data):
-        log.info('create-interface', device_id=device.id)
+    def xpon_ponsim_onu_adapter_interface(self, method_name, device, data,
+                                          data2=None):
+        log.info('{}'.format(xpon_ponsim_onu_itfs[method_name]['log']),
+                 device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
-                handler.create_interface(data)
+                _method = getattr(handler, method_name)
+                if isinstance(data, TcontsConfigData):
+                    _method(data, data2)
+                else:
+                    _method(data)
+
+    def create_interface(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
 
     def update_interface(self, device, data):
-        log.info('update-interface', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.update_interface(data)
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
 
     def remove_interface(self, device, data):
-        log.info('remove-interface', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.remove_interface(data)
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, tcont_data,
+                                              traffic_descriptor_data)
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, tcont_data,
+                                              traffic_descriptor_data)
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, tcont_data,
+                                              traffic_descriptor_data)
+
+    def create_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def update_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def remove_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def create_multicast_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def update_multicast_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def remove_multicast_gemport(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def create_multicast_distribution_set(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def update_multicast_distribution_set(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
+
+    def remove_multicast_distribution_set(self, device, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_adapter_interface(_method_name, device, data)
 
 class PonSimOnuHandler(object):
     def __init__(self, adapter, device_id):
@@ -382,27 +478,89 @@
             interfaceConfig.vont_ani_config.CopyFrom(data)
         elif isinstance(data, VEnetConfig):
             interfaceConfig.venet_config.CopyFrom(data)
+        elif isinstance(data, TrafficDescriptorProfileData):
+            interfaceConfig.traffic_descriptor_profile_config_data.CopyFrom(
+                data)
+        elif isinstance(data, TcontsConfigData):
+            interfaceConfig.tconts_config_data.CopyFrom(data)
+        elif isinstance(data, GemportsConfigData):
+            interfaceConfig.gemports_config_data.CopyFrom(data)
+        elif isinstance(data, MulticastGemportsConfigData):
+            interfaceConfig.multicast_gemports_config_data.CopyFrom(data)
+        elif isinstance(data, MulticastDistributionSetData):
+            interfaceConfig.multicast_distribution_set_data.CopyFrom(data)
         else:
             return None
         return interfaceConfig
 
-    def create_interface(self, data):
+    def xpon_ponsim_onu_interface (self, method_name, data, data2=None):
         interfaceConfig = self.get_interface_config(data)
         if interfaceConfig is not None:
-            self.log.info(
-                'forwarding-create-interface-request-to-onu-for-intfc-type',
-                interface_type=type(data))
+            self.log.info('forwarding-{}-request-to-onu-for-interface-type'
+                          .format(xpon_ponsim_onu_itfs[method_name]['log']),
+                          interface_type=type(data))
+            if data2 is not None:
+                self.log.info(interface_type=type(data2))
+
+    def create_interface(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
 
     def update_interface(self, data):
-        interfaceConfig = self.get_interface_config(data)
-        if interfaceConfig is not None:
-            self.log.info(
-                'forwarding-update-interface-request-to-onu-for-intfc-type',
-                interface_type=type(data))
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
 
     def remove_interface(self, data):
-        interfaceConfig = self.get_interface_config(data)
-        if interfaceConfig is not None:
-            self.log.info(
-                'forwarding-remove-interface-request-to-onu-for-intfc-type',
-                interface_type=type(data))
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def create_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data)
+
+    def update_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data)
+
+    def remove_tcont(self, tcont_data, traffic_descriptor_data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, tcont_data,
+                                      traffic_descriptor_data)
+
+    def create_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def update_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def remove_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def create_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def update_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def remove_multicast_gemport(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def create_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def update_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
+
+    def remove_multicast_distribution_set(self, data):
+       _method_name = sys._getframe().f_code.co_name
+       self.xpon_ponsim_onu_interface(_method_name, data)
diff --git a/voltha/adapters/simulated_olt/simulated_olt.py b/voltha/adapters/simulated_olt/simulated_olt.py
index 0b6eb94..5e3aa97 100644
--- a/voltha/adapters/simulated_olt/simulated_olt.py
+++ b/voltha/adapters/simulated_olt/simulated_olt.py
@@ -902,6 +902,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     # ~~~~~~~~~~~~~~~~~~~~ Embedded test Klein rest server ~~~~~~~~~~~~~~~~~~~~
 
     def get_test_control_site(self):
diff --git a/voltha/adapters/simulated_onu/simulated_onu.py b/voltha/adapters/simulated_onu/simulated_onu.py
index c61ba8a..9cc0e87 100644
--- a/voltha/adapters/simulated_onu/simulated_onu.py
+++ b/voltha/adapters/simulated_onu/simulated_onu.py
@@ -414,6 +414,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     def suppress_alarm(self, filter):
         raise NotImplementedError()
 
diff --git a/voltha/adapters/tibit_olt/tibit_olt.py b/voltha/adapters/tibit_olt/tibit_olt.py
index da3269e..c2067b5 100644
--- a/voltha/adapters/tibit_olt/tibit_olt.py
+++ b/voltha/adapters/tibit_olt/tibit_olt.py
@@ -1498,3 +1498,39 @@
 
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
+
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
diff --git a/voltha/adapters/tibit_onu/tibit_onu.py b/voltha/adapters/tibit_onu/tibit_onu.py
index 137f572..5c52f18 100644
--- a/voltha/adapters/tibit_onu/tibit_onu.py
+++ b/voltha/adapters/tibit_onu/tibit_onu.py
@@ -670,6 +670,42 @@
     def receive_onu_detect_state(self, device_id, state):
         raise NotImplementedError()
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        raise NotImplementedError()
+
+    def create_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_gemport(self, device, data):
+        raise NotImplementedError()
+
+    def create_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def update_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
+    def remove_multicast_distribution_set(self, device, data):
+        raise NotImplementedError()
+
     @inlineCallbacks
     def _message_exchange(self, device):
 
diff --git a/voltha/core/adapter_agent.py b/voltha/core/adapter_agent.py
index 4c0b36c..c404de9 100644
--- a/voltha/core/adapter_agent.py
+++ b/voltha/core/adapter_agent.py
@@ -209,15 +209,53 @@
     # def update_pm_collection(self, device, pm_collection_config):
     #    return self.adapter.update_pm_collection(device, pm_collection_config)
 
-    def create_interface (self, device, data):
-        return self.adapter.create_interface (device, data)
+    def create_interface(self, device, data):
+        return self.adapter.create_interface(device, data)
 
-    def update_interface (self, device, data):
-        return self.adapter.update_interface (device, data)
+    def update_interface(self, device, data):
+        return self.adapter.update_interface(device, data)
 
     def remove_interface(self, device, data):
         return self.adapter.remove_interface(device, data)
 
+    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
+        return self.adapter.create_tcont(device, tcont_data,
+                                         traffic_descriptor_data)
+
+    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
+        return self.adapter.update_tcont(device, tcont_data,
+                                         traffic_descriptor_data)
+
+    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
+        return self.adapter.remove_tcont(device, tcont_data,
+                                         traffic_descriptor_data)
+
+    def create_gemport(self, device, data):
+        return self.adapter.create_gemport(device, data)
+
+    def update_gemport(self, device, data):
+        return self.adapter.update_gemport(device, data)
+
+    def remove_gemport(self, device, data):
+        return self.adapter.remove_gemport(device, data)
+
+    def create_multicast_gemport(self, device, data):
+        return self.adapter.create_multicast_gemport(device, data)
+
+    def update_multicast_gemport(self, device, data):
+        return self.adapter.update_multicast_gemport(device, data)
+
+    def remove_multicast_gemport(self, device, data):
+        return self.adapter.remove_multicast_gemport(device, data)
+
+    def create_multicast_distribution_set(self, device, data):
+        return self.adapter.create_multicast_distribution_set(device, data)
+
+    def update_multicast_distribution_set(self, device, data):
+        return self.adapter.update_multicast_distribution_set(device, data)
+
+    def remove_multicast_distribution_set(self, device, data):
+        return self.adapter.remove_multicast_distribution_set(device, data)
 
     # ~~~~~~~~~~~~~~~~~~~ Adapter-Facing Service ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/voltha/core/core.py b/voltha/core/core.py
index 7ddb5b8..ab8b157 100644
--- a/voltha/core/core.py
+++ b/voltha/core/core.py
@@ -36,8 +36,13 @@
 from voltha.registry import IComponent
 from xpon_agent import XponAgent
 from xpon_handler import XponHandler
-from voltha.protos.bbf_fiber_base_pb2 import ChannelgroupConfig, ChannelpartitionConfig, \
-    ChannelpairConfig, OntaniConfig, VOntaniConfig, VEnetConfig
+from voltha.protos.bbf_fiber_base_pb2 import ChannelgroupConfig, \
+    ChannelpartitionConfig, ChannelpairConfig, OntaniConfig, VOntaniConfig, \
+    VEnetConfig
+from voltha.protos.bbf_fiber_traffic_descriptor_profile_body_pb2 import \
+    TrafficDescriptorProfileData
+from voltha.protos.bbf_fiber_tcont_body_pb2 import TcontsConfigData
+from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
 
 log = structlog.get_logger()
 
@@ -159,7 +164,8 @@
             self._handle_add_logical_device(data)
         elif isinstance(data, (ChannelgroupConfig, ChannelpartitionConfig,
                                ChannelpairConfig, OntaniConfig, VOntaniConfig,
-                               VEnetConfig)):
+                               VEnetConfig, TrafficDescriptorProfileData,
+                               TcontsConfigData, GemportsConfigData)):
             self.xpon_agent.create_interface(data)
         elif isinstance(data, AlarmFilter):
             self._handle_add_alarm_filter(data)
@@ -173,8 +179,9 @@
         elif isinstance(data, LogicalDevice):
             self._handle_remove_logical_device(data)
         elif isinstance(data, (ChannelgroupConfig, ChannelpartitionConfig,
-                                ChannelpairConfig, OntaniConfig, VOntaniConfig,
-                                VEnetConfig)):
+                               ChannelpairConfig, OntaniConfig, VOntaniConfig,
+                               VEnetConfig, TrafficDescriptorProfileData,
+                               TcontsConfigData, GemportsConfigData)):
             self.xpon_agent.remove_interface(data)
         elif isinstance(data, AlarmFilter):
             self._handle_remove_alarm_filter(data)
diff --git a/voltha/core/local_handler.py b/voltha/core/local_handler.py
index a172e51..77d5204 100644
--- a/voltha/core/local_handler.py
+++ b/voltha/core/local_handler.py
@@ -900,51 +900,57 @@
 
     @twisted_async
     def GetAllTrafficDescriptorProfileData(self, request, context):
-        return AllTrafficDescriptorProfileData()
+        return self.core.xpon_handler.get_all_traffic_descriptor_profile_data(
+            request, context)
 
     @twisted_async
     def CreateTrafficDescriptorProfileData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.create_traffic_descriptor_profile(
+            request, context)
 
     @twisted_async
     def UpdateTrafficDescriptorProfileData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.update_traffic_descriptor_profile(
+            request, context)
 
     @twisted_async
     def DeleteTrafficDescriptorProfileData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.delete_traffic_descriptor_profile(
+            request, context)
 
     @twisted_async
     def GetAllTcontsConfigData(self, request, context):
-        return AllTcontsConfigData()
+        return self.core.xpon_handler.get_all_tconts_config_data(
+            request, context)
 
     @twisted_async
     def CreateTcontsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.create_tcont(request, context)
 
     @twisted_async
     def UpdateTcontsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.update_tcont(request, context)
 
     @twisted_async
     def DeleteTcontsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.delete_tcont(request, context)
 
     @twisted_async
     def GetAllGemportsConfigData(self, request, context):
-        return AllGemportsConfigData()
+        return self.core.xpon_handler.get_all_gemports_config_data(
+            request, context)
 
     @twisted_async
     def CreateGemportsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.create_gem_port(request, context)
 
     @twisted_async
     def UpdateGemportsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.update_gem_port(request, context)
 
     @twisted_async
     def DeleteGemportsConfigData(self, request, context):
-        return Empty()
+        return self.core.xpon_handler.delete_gem_port(request, context)
 
     @twisted_async
     def GetAllMulticastGemportsConfigData(self, request, context):
diff --git a/voltha/core/xpon_agent.py b/voltha/core/xpon_agent.py
index 3f8d94b..2dce5ea 100644
--- a/voltha/core/xpon_agent.py
+++ b/voltha/core/xpon_agent.py
@@ -21,7 +21,13 @@
 from voltha.core.config.config_proxy import CallbackType
 from voltha.protos.bbf_fiber_base_pb2 import ChannelgroupConfig, \
     ChannelpartitionConfig, ChannelpairConfig, ChannelterminationConfig, \
-    OntaniConfig, VOntaniConfig, VEnetConfig
+    OntaniConfig, VOntaniConfig, VEnetConfig, \
+    AllTrafficDescriptorProfileData, AllTcontsConfigData, AllGemportsConfigData
+from voltha.protos.bbf_fiber_traffic_descriptor_profile_body_pb2 import \
+    TrafficDescriptorProfileData
+from voltha.protos.bbf_fiber_tcont_body_pb2 import TcontsConfigData
+from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
+
 from voltha.protos.device_pb2 import Device
 from voltha.protos.common_pb2 import AdminState
 
@@ -29,103 +35,102 @@
 
 class XponAgent(object):
 
-    interface_stack = {ChannelgroupConfig: {
-                           'path': '/channel_groups/{}',
-                               'path_keys': ['name'],
-                           'parent': None, 'parent_path': None,
-                               'parent_path_keys': [None],
-                            'child': ChannelpartitionConfig,
-                                'child_path': ['/channel_partitions'],
-                            'olt_link': None, 'olt_link_path': None,
-                                'olt_link_path_keys': [None],
-                                'olt_device_id': 'from_child',
-                            'onu_link': None, 'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'na'},
-                       ChannelpartitionConfig: {
-                           'path': '/channel_partitions/{}',
-                               'path_keys': ['name'],
-                           'parent': ChannelgroupConfig,
-                               'parent_path': '/channel_groups/{}',
-                               'parent_path_keys': ['data.channelgroup_ref'],
-                            'child': ChannelpairConfig,
-                                'child_path': ['/channel_pairs'],
-                            'olt_link': None, 'olt_link_path': None,
-                                'olt_link_path_keys': [None],
-                                'olt_device_id': 'from_child',
-                            'onu_link': None, 'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'na'},
-                       ChannelpairConfig: {
-                           'path': '/channel_pairs/{}', 'path_keys': ['name'],
-                           'parent': ChannelpartitionConfig,
-                               'parent_path': '/channel_partitions/{}',
-                               'parent_path_keys':\
-                                   ['data.channelpartition_ref'],
-                            'child': ChannelterminationConfig,
-                                'child_path':\
-                                    ['/devices', 'channel_terminations'],
-                            'olt_link': None, 'olt_link_path': None,
-                                'olt_link_path_keys': [None],
-                                'olt_device_id': 'from_child',
-                            'onu_link': None,
-                                'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'na'},
-                       ChannelterminationConfig: {
-                           'path': '/devices/{}/channel_terminations/{}',
-                               'path_keys': ['id', 'name'],
-                           'parent': ChannelpairConfig,
-                               'parent_path': '/channel_pairs/{}',
-                               'parent_path_keys':\
-                                   ['data.channelpair_ref'],
-                            'child': None, 'child_path': [None],
-                            'olt_link': None, 'olt_link_path': None,
-                                'olt_link_path_keys': [None],
-                                'olt_device_id': 'self',
-                            'onu_link': None, 'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'na'},
-                       VOntaniConfig: {
-                           'path': '/v_ont_anis/{}', 'path_keys': ['name'],
-                           'parent': ChannelpartitionConfig,
-                               'parent_path': '/channel_partitions/{}',
-                               'parent_path_keys': ['data.parent_ref'],
-                            'child': VEnetConfig, 'child_path': ['/v_enets'],
-                            'olt_link': ChannelpairConfig,
-                                'olt_link_path': '/channel_pairs/{}',
-                                'olt_link_path_keys':\
-                                    ['data.preferred_chanpair'],
-                                'olt_device_id': 'from_link',
-                            'onu_link': None, 'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'self'},
-                       OntaniConfig: {
-                           'path': '/ont_anis/{}', 'path_keys': ['name'],
-                           'parent': None, 'parent_path': None,
-                               'parent_path_keys': [None],
-                            'child': None, 'child_path': [None],
-                            'olt_link': VOntaniConfig,
-                                'olt_link_path': '/v_ont_anis/{}',
-                                'olt_link_path_keys': ['name'],
-                                'olt_device_id' : 'from_link',
-                            'onu_link': VOntaniConfig,
-                                'onu_link_path': '/v_ont_anis/{}',
-                                'onu_link_path_keys': ['name'],
-                                'onu_device_id': 'from_link'},
-                       VEnetConfig: {
-                           'path': '/v_enets/{}', 'path_keys': ['name'],
-                           'parent': VOntaniConfig,
-                               'parent_path': '/v_ont_anis/{}',
-                               'parent_path_keys': ['data.v_ontani_ref'],
-                            'child': None, 'child_path': [None],
-                            'olt_link': None, 'olt_link_path': None,
-                                'olt_link_path_keys': [None],
-                                'olt_device_id': 'from_parent',
-                            'onu_link': None, 'onu_link_path': None,
-                                'onu_link_path_keys': [None],
-                                'onu_device_id': 'from_parent'}
-                      }
+    interface_stack = {
+        ChannelgroupConfig: {
+            'path': '/channel_groups/{}', 'path_keys': ['name'],
+            'parent': None, 'parent_path': None, 'parent_path_keys': [None],
+            'child': {
+                1: {'config': ChannelpartitionConfig,
+                    'child_path': ['/channel_partitions']}},
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_child',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'na'},
+        ChannelpartitionConfig: {
+            'path': '/channel_partitions/{}', 'path_keys': ['name'],
+            'parent': ChannelgroupConfig, 'parent_path': '/channel_groups/{}',
+                'parent_path_keys': ['data.channelgroup_ref'],
+            'child': {
+                1: {'config': ChannelpairConfig,
+                    'child_path': ['/channel_pairs']}},
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_child',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'na'},
+        ChannelpairConfig: {
+            'path': '/channel_pairs/{}', 'path_keys': ['name'],
+            'parent': ChannelpartitionConfig,
+                'parent_path': '/channel_partitions/{}',
+                'parent_path_keys': ['data.channelpartition_ref'],
+            'child': {
+                1: {'config': ChannelterminationConfig,
+                    'child_path': ['/devices', 'channel_terminations']}},
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_child',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'na'},
+        ChannelterminationConfig: {
+            'path': '/devices/{}/channel_terminations/{}',
+                'path_keys': ['id', 'name'],
+            'parent': ChannelpairConfig, 'parent_path': '/channel_pairs/{}',
+                'parent_path_keys': ['data.channelpair_ref'],
+            'child': None, 'child_path': [None],
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'self',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'na'},
+        VOntaniConfig: {
+            'path': '/v_ont_anis/{}', 'path_keys': ['name'],
+            'parent': ChannelpartitionConfig,
+                'parent_path': '/channel_partitions/{}',
+                'parent_path_keys': ['data.parent_ref'],
+            'child': {
+                1: {'config': VEnetConfig, 'child_path': ['/v_enets']},
+                2: {'config': TcontsConfigData, 'child_path': ['/tconts']}},
+            'olt_link': ChannelpairConfig,
+                'olt_link_path': '/channel_pairs/{}',
+                'olt_link_path_keys': ['data.preferred_chanpair'],
+                'olt_device_id': 'from_link',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'self'},
+        OntaniConfig: {
+            'path': '/ont_anis/{}', 'path_keys': ['name'],
+            'parent': None, 'parent_path': None, 'parent_path_keys': [None],
+            'child': None, 'child_path': [None],
+            'olt_link': VOntaniConfig, 'olt_link_path': '/v_ont_anis/{}',
+                'olt_link_path_keys': ['name'], 'olt_device_id' : 'from_link',
+            'onu_link': VOntaniConfig, 'onu_link_path': '/v_ont_anis/{}',
+                'onu_link_path_keys': ['name'], 'onu_device_id': 'from_link'},
+        VEnetConfig: {
+            'path': '/v_enets/{}', 'path_keys': ['name'],
+            'parent': VOntaniConfig, 'parent_path': '/v_ont_anis/{}',
+                'parent_path_keys': ['data.v_ontani_ref'],
+            'child': {
+                1: {'config': GemportsConfigData,
+                    'child_path': ['/gemports']}},
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_parent',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'from_parent'},
+        TcontsConfigData: {
+            'path': '/tconts/{}', 'path_keys': ['name'],
+            'parent': VOntaniConfig, 'parent_path': '/v_ont_anis/{}',
+                'parent_path_keys': ['interface_reference'],
+            'child': None, 'child_path': [None],
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_parent',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'from_parent'},
+        GemportsConfigData: {
+            'path': '/gemports/{}', 'path_keys': ['name'],
+            'parent': VEnetConfig, 'parent_path': '/v_enets/{}',
+                'parent_path_keys': ['itf_ref'],
+            'child': None, 'child_path': [None],
+            'olt_link': None, 'olt_link_path': None,
+                'olt_link_path_keys': [None], 'olt_device_id': 'from_parent',
+            'onu_link': None, 'onu_link_path': None,
+                'onu_link_path_keys': [None], 'onu_device_id': 'from_parent'}
+                       }
 
     def __init__(self, core):
         self.core = core
@@ -210,18 +215,18 @@
 
     def get_child_data(self, data):
         interface_node = self.interface_stack[type(data)]
-        if len(interface_node['child_path']) > 1:
+        if len(interface_node['child'][1]['child_path']) > 1:
             top_children = self.core.get_proxy('/').get('{}'.format(
-                interface_node['child_path'][0]))
+                interface_node['child'][1]['child_path'][0]))
             for top_child in top_children:
                 child = self._get_child_data_by_path(data, '{}/{}/{}'.format(
-                    interface_node['child_path'][0], top_child.id,
-                    interface_node['child_path'][1]))
+                    interface_node['child'][1]['child_path'][0], top_child.id,
+                    interface_node['child'][1]['child_path'][1]))
                 if child is not None:
                     return child
         else:
             child = self._get_child_data_by_path(data, '{}'.format(
-                interface_node['child_path'][0]))
+                interface_node['child'][1]['child_path'][0]))
         if child is None:
             log.info('xpon-agent-warning-interface-cannot-get-child',
                      data=data)
@@ -295,26 +300,92 @@
 
     def create_interface_in_device(self, device, data):
         adapter_agent = self.get_device_adapter_agent(device)
-        adapter_agent.create_interface(device=device, data=data)
+        if (isinstance(data, TcontsConfigData)):
+            # Adapter interfaces for TCONT always need traffic-descriptor
+            traffic_descriptor_data = self.core.get_proxy('/').get(
+                '/traffic_descriptor_profiles/{}'.
+                format(data.traffic_descriptor_profile_ref))
+            adapter_agent.create_tcont(
+                device=device, tcont_data=data,
+                traffic_descriptor_data=traffic_descriptor_data)
+        elif (isinstance(data, TrafficDescriptorProfileData)):
+            # Do nothing for now
+            log.info(
+                'create-interface-in-device-traffic-descriptor-do-nothing',
+                device=device, data=data)
+        elif (isinstance(data, GemportsConfigData)):
+            adapter_agent.create_gemport(device=device, data=data)
+        elif (isinstance(data, (ChannelgroupConfig, ChannelpartitionConfig,
+                                ChannelpairConfig, ChannelterminationConfig,
+                                OntaniConfig, VOntaniConfig, VEnetConfig))):
+            adapter_agent.create_interface(device=device, data=data)
+        else:
+            # Not handled yet
+            log.info('create-interface-in-device: Not handling',
+                     device=device, data=data)
 
     def update_interface_in_device(self, device, data):
         adapter_agent = self.get_device_adapter_agent(device)
-        adapter_agent.update_interface(device=device, data=data)
+        if (isinstance(data, TcontsConfigData)):
+            # Adapter interfaces for TCONT always need traffic-descriptor
+            traffic_descriptor_data = self.core.get_proxy('/').get(
+                '/traffic_descriptor_profiles/{}'.
+                format(data.traffic_descriptor_profile_ref))
+            adapter_agent.update_tcont(
+                device=device, tcont_data=data,
+                traffic_descriptor_data=traffic_descriptor_data)
+        elif (isinstance(data, TrafficDescriptorProfileData)):
+            # Do nothing for now
+            log.info(
+                'update-interface-in-device-traffic-descriptor-do-nothing',
+                device=device, data=data)
+        elif (isinstance(data, GemportsConfigData)):
+            adapter_agent.update_gemport(device=device, data=data)
+        elif (isinstance(data, (ChannelgroupConfig, ChannelpartitionConfig,
+                                ChannelpairConfig, ChannelterminationConfig,
+                                OntaniConfig, VOntaniConfig, VEnetConfig))):
+            adapter_agent.update_interface(device=device, data=data)
+        else:
+            # Not handled yet
+            log.info('create-interface-in-device: Not handling',
+                     device=device, data=data)
 
     def remove_interface_in_device(self, device, data):
         adapter_agent = self.get_device_adapter_agent(device)
-        adapter_agent.remove_interface(device=device, data=data)
+        if (isinstance(data, TcontsConfigData)):
+            # Adapter interfaces for TCONT always need traffic-descriptor
+            traffic_descriptor_data = self.core.get_proxy('/').get(
+                '/traffic_descriptor_profiles/{}'.
+                format(data.traffic_descriptor_profile_ref))
+            adapter_agent.remove_tcont(
+                device=device, tcont_data=data,
+                traffic_descriptor_data=traffic_descriptor_data)
+        elif (isinstance(data, TrafficDescriptorProfileData)):
+            # Do nothing for now
+            log.info(
+                'remove-interface-in-device-traffic-descriptor-do-nothing',
+                device=device, data=data)
+        elif (isinstance(data, GemportsConfigData)):
+            adapter_agent.remove_gemport(device=device, data=data)
+        elif (isinstance(data, (ChannelgroupConfig, ChannelpartitionConfig,
+                                ChannelpairConfig, ChannelterminationConfig,
+                                OntaniConfig, VOntaniConfig, VEnetConfig))):
+            adapter_agent.remove_interface(device=device, data=data)
+        else:
+            # Not handled yet
+            log.info('remove-interface-in-device: Not handling',
+                     device=device, data=data)
 
     def create_interface(self, data, device_id=None):
+        if not self.is_valid_interface(data):
+            log.info('xpon-agent-create-interface-invalid-interface-type',
+                     type=type(data).__name__)
+            return
         if device_id is None:
             olt_device = self.get_device(data, 'olt')
         else:
             olt_device = self.core.get_proxy('/').get('/devices/{}'.
                                                       format(device_id))
-        if not self.is_valid_interface(data):
-            log.info('xpon-agent-create-interface-invalid-interface-type',
-                     type=type(data).__name__)
-            return
         device_id = None if olt_device is None else olt_device.id
         self.register_interface(device_id=device_id,
                                 path=self.get_interface_path(data))
@@ -358,15 +429,15 @@
                 self.update_interface_in_device(onu_device, data)
 
     def remove_interface(self, data, device_id=None):
+        if not self.is_valid_interface(data):
+            log.info('xpon-agent-remove-interface-invalid-interface-type',
+                     type=type(data).__name__)
+            return
         if device_id is None:
             olt_device = self.get_device(data, 'olt')
         else:
             olt_device = self.core.get_proxy('/').get('/devices/{}'.
                                                       format(device_id))
-        if not self.is_valid_interface(data):
-            log.info('xpon-agent-remove-interface-invalid-interface-type',
-                     type=type(data).__name__)
-            return
         if olt_device is not None:
             log.info('xpon-agent-remove-interface:',
                      olt_device_id=olt_device.id, data=data)
@@ -448,6 +519,11 @@
                         'xpon-agent-creating-v-enet-at-onu-device:',
                         onu_device_id=onu_device.id, v_enet=v_enet)
                     self.create_interface_in_device(onu_device, v_enet)
+            '''
+            @TODO: Add creation of Traffic Descriptor Profile, TCont, and
+                   Gemport. Creation of all interfaces must be remodeled
+                   utilizing interface stack's parent-child relationship.
+            '''
         except KeyError:
             log.info(
                 'xpon-agent-create-onu-interfaces-no-ont-ani-link-exists')
@@ -487,6 +563,11 @@
         for v_ont_ani in v_ont_anis:
             if self.get_link_data(v_ont_ani, 'olt').name == data.name:
                 onu_device = self.get_device(v_ont_ani, 'onu')
+                '''
+                @TODO: Add remove of Traffic Descriptor Profile, TCont, and
+                       Gemport. Remove of all interfaces must be remodeled
+                       utilizing interface stack's parent-child relationship.
+                '''
                 v_enets = self.core.get_proxy('/').get('/v_enets')
                 for v_enet in v_enets:
                     if self.get_parent_data(v_enet).name == v_ont_ani.name:
diff --git a/voltha/core/xpon_handler.py b/voltha/core/xpon_handler.py
index 17408e9..674b888 100644
--- a/voltha/core/xpon_handler.py
+++ b/voltha/core/xpon_handler.py
@@ -27,7 +27,12 @@
     AllChannelpartitionConfig, ChannelpartitionConfig, \
     AllChannelterminationConfig, ChannelterminationConfig, \
     AllOntaniConfig, OntaniConfig, AllVOntaniConfig , VOntaniConfig, \
-    AllVEnetConfig, VEnetConfig
+    AllVEnetConfig, VEnetConfig, AllTrafficDescriptorProfileData, \
+    AllTcontsConfigData, AllGemportsConfigData
+from voltha.protos.bbf_fiber_traffic_descriptor_profile_body_pb2 import \
+    TrafficDescriptorProfileData
+from voltha.protos.bbf_fiber_tcont_body_pb2 import TcontsConfigData
+from voltha.protos.bbf_fiber_gemport_body_pb2 import GemportsConfigData
 
 from voltha.protos.device_pb2 import Device
 from voltha.protos.common_pb2 import AdminState
@@ -138,34 +143,33 @@
             return Empty()
 
         try:
-            assert isinstance(request, ChannelgroupConfig)
-            known_channel_group_ref = dict(
-                (dt.data.channelgroup_ref, dt) for dt in self.root.get(
-                    '/channel_partitions'))
-            known_channel_group_ref_1 = dict(
-                (dt.data.channelgroup_ref, dt) for dt in self.root.get(
-                    '/channel_pairs'))
-            reference = "channel partition"
-            assert request.name not in known_channel_group_ref
-            reference = "channel pair"
-            assert request.name not in known_channel_group_ref_1
+            assert isinstance(request, ChannelgroupConfig), \
+                'Instance is not of Channel Group'
+            channelgroup_ref_by_channelpartition = next(
+                (cpart for cpart in self.root.get('/channel_partitions')
+                 if cpart.data.channelgroup_ref == request.name), None)
+            assert channelgroup_ref_by_channelpartition is None, \
+                'Channel Group -- \'{}\' is referenced by Channel Partition'\
+                .format(request.name)
+            channelgroup_ref_by_channelpair = next(
+                (cpair for cpair in self.root.get('/channel_pairs')
+                 if cpair.data.channelgroup_ref == request.name), None)
+            assert channelgroup_ref_by_channelpair is None, \
+                'Channel Group -- \'{}\' is referenced by Channel Pair'\
+                .format(request.name)
             channelgroup = self.get_channel_group_config(request, context)
-            assert channelgroup.name == request.name
-
+            assert channelgroup.name == request.name, \
+                'Unable to find specified Channel Group -- \'{}\''\
+                .format(request.name)
             path = '/channel_groups/{}'.format(request.name)
             log.debug('removing-channel-group', name=request.name)
             self.root.remove(path)
-	    self.cg_pool.release(channelgroup.cg_index)
-
+            self.cg_pool.release(channelgroup.cg_index)
             return Empty()
-
-        except AssertionError:
-            context.set_details(
-                'The channel group -- \'{}\' is referenced by {}'.format(
-                    request.name, reference))
+        except AssertionError, e:
+            context.set_details(e.message)
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
-
         except KeyError:
             context.set_details(
                 'channel group \'{}\' not found'.format(request.name))
@@ -233,30 +237,28 @@
             return Empty()
 
         try:
-            assert isinstance(request, ChannelpartitionConfig)
-            known_channel_partition_ref = dict(
-                (dt.data.channelpartition_ref, dt) for dt in self.root.get(
-                    '/channel_pairs'))
-            known_channel_partition_ref_1 = dict(
-                (dt.data.parent_ref, dt) for dt in self.root.get(
-                    '/v_ont_anis'))
-            reference = "channel pair"
-            assert request.name not in known_channel_partition_ref
-            reference = "vontani"
-            assert request.name not in known_channel_partition_ref_1
+            assert isinstance(request, ChannelpartitionConfig), \
+                'Instance is not of Channel Partition'
+            channelpartition_ref_by_channelpair = next(
+                (cpair for cpair in self.root.get('/channel_pairs')
+                 if cpair.data.channelpartition_ref == request.name), None)
+            assert channelpartition_ref_by_channelpair is None, \
+                'Channel Partition -- \'{}\' is referenced by Channel Pair'\
+                .format(request.name)
+            channelpartition_ref_by_vontani = next(
+                (vont_ani for vont_ani in self.root.get('/v_ont_anis')
+                 if vont_ani.data.parent_ref == request.name), None)
+            assert channelpartition_ref_by_vontani is None, \
+                'Channel Partition -- \'{}\' is referenced by VOntAni'\
+                .format(request.name)
             path = '/channel_partitions/{}'.format(request.name)
             log.debug('removing-channel-partition', name=request.name)
             self.root.remove(path)
-
             return Empty()
-
-        except AssertionError:
-            context.set_details(
-                'The channel partition -- \'{}\' is referenced by {}'.format(
-                    request.name, reference))
+        except AssertionError, e:
+            context.set_details(e.message)
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
-
         except KeyError:
             context.set_details(
                 'channel partition \'{}\' not found'.format(request.name))
@@ -324,27 +326,26 @@
             return Empty()
 
         try:
-            assert isinstance(request, ChannelpairConfig)
+            assert isinstance(request, ChannelpairConfig), \
+                'Instance is not of Channel Pair'
             device_items = self.root.get('/devices')
             for device_item in device_items:
-                known_channel_pair_ref = dict(
-                    (dt.data.channelpair_ref, dt) for dt in self.root.get(
+                channelpair_ref_by_channeltermination = next(
+                    (cterm for cterm in self.root.get(
                         '/devices/{}/channel_terminations'.format(
-                            device_item.id)))
-                assert request.name not in known_channel_pair_ref
+                            device_item.id))
+                     if cterm.data.channelpair_ref == request.name), None)
+                assert channelpair_ref_by_channeltermination is None, \
+                    'Channel Pair -- \'{}\' referenced by Channel Termination'\
+                    .format(request.name)
             path = '/channel_pairs/{}'.format(request.name)
             log.debug('removing-channel-pair', name=request.name)
             self.root.remove(path)
-
             return Empty()
-
-        except AssertionError:
-            context.set_details(
-                'The ch pair -- \'{}\' is referenced by ch termination'.
-                format(request.name))
+        except AssertionError, e:
+            context.set_details(e.message)
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
-
         except KeyError:
             context.set_details(
                 'channel pair \'{}\' not found'.format(request.name))
@@ -627,26 +628,29 @@
                 'Malformed name \'{}\''.format(request.name))
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
-
         try:
-            assert isinstance(request, VOntaniConfig)
-            known_v_ont_ani_ref = dict(
-                (dt.data.v_ontani_ref, dt) for dt in self.root.get('/v_enets'))
-            assert request.name not in known_v_ont_ani_ref
-
+            assert isinstance(request, VOntaniConfig), \
+                'Instance is not of vont ani'
+            vontani_ref_by_venet = next(
+                (venet for venet in self.root.get('/v_enets')
+                 if venet.data.v_ontani_ref == request.name), None)
+            assert vontani_ref_by_venet is None, \
+                'VOntAni -- \'{}\' is referenced by VEnet'.format(
+                    request.name)
+            vontani_ref_by_tcont = next(
+                (tcont for tcont in self.root.get('/tconts')
+                 if tcont.interface_reference == request.name), None)
+            assert vontani_ref_by_tcont is None, \
+                'VOntAni -- \'{}\' is referenced by TCont'.format(
+                    request.name)
             path = '/v_ont_anis/{}'.format(request.name)
             log.debug('removing-vont-ani', name=request.name)
             self.root.remove(path)
-
             return Empty()
-
-        except AssertionError:
-            context.set_details(
-                'The vont ani -- \'{}\' is referenced by venet'.format(
-                    request.name))
+        except AssertionError, e:
+            context.set_details(e.message)
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
-
         except KeyError:
             context.set_details(
                 'vontani \'{}\' not found'.format(request.name))
@@ -718,18 +722,24 @@
             return Empty()
 
         try:
-            assert isinstance(request, VEnetConfig)
+            assert isinstance(request, VEnetConfig), \
+                'Instance is not of VEnet'
             #assert device.admin_state == AdminState.DISABLED, \
                 #'Device to delete cannot be ' \
                 #'in admin state \'{}\''.format(device.admin_state)
+            v_enet_ref_by_gemport = next(
+                (gemport for gemport in self.root.get('/gemports')
+                 if gemport.itf_ref == request.name), None)
+            assert v_enet_ref_by_gemport is None, \
+                'The VEnet -- \'{}\' is referenced by Gemport'.format(
+                    request.name)
             path = '/v_enets/{}'.format(request.name)
             log.debug('removing-venet', name=request.name)
             self.root.remove(path)
             return Empty()
 
-        except AssertionError:
-            context.set_details(
-                'Instance is not of venet')
+        except AssertionError, e:
+            context.set_details(e.message)
             context.set_code(StatusCode.INVALID_ARGUMENT)
             return Empty()
 
@@ -739,6 +749,257 @@
             context.set_code(StatusCode.NOT_FOUND)
             return Empty()
 
+    def get_all_traffic_descriptor_profile_data(self, request, context):
+        log.info('grpc-request', request=request)
+        items = self.root.get('/traffic_descriptor_profiles')
+        return AllTrafficDescriptorProfileData(
+            traffic_descriptor_profiles=items)
+
+    def create_traffic_descriptor_profile(self, request, context):
+        log.info('grpc-request', request=request)
+        try:
+            assert isinstance(request, TrafficDescriptorProfileData)
+            assert self.validate_interface(request, context)
+            log.debug('creating-traffic-descriptor-profile', name=request.name)
+            self.root.add('/traffic_descriptor_profiles', request)
+            return Empty()
+        except AssertionError, e:
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'Cannot create traffic descriptor profile \'{}\''.format(
+                    request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+        except ValueError:
+            context.set_details(
+                'Duplicated traffic descriptor profile \'{}\' \
+                cannot be created'.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+
+    def update_traffic_descriptor_profile(self, request, context):
+        log.info('grpc-request', request=request)
+
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return TrafficDescriptorProfileData()
+
+        try:
+            assert isinstance(request, TrafficDescriptorProfileData)
+            assert self.validate_interface(request, context)
+
+            path = '/traffic_descriptor_profiles/{}'.format(request.name)
+            log.debug('updating-traffic-descriptor-profile',
+                      name=request.name)
+            self.root.update(path, request, strict=True)
+            return Empty()
+
+        except AssertionError, e:
+            return Empty()
+
+        except KeyError:
+            context.set_details(
+                'traffic descriptor profile \'{}\' not found'.format(
+                    request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
+    def delete_traffic_descriptor_profile(self, request, context):
+        log.info('grpc-request', request=request)
+
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+
+        try:
+            assert isinstance(request, TrafficDescriptorProfileData), \
+                'Instance is not of Traffic Descriptor Profile Data'
+            tdp_ref_by_tcont = next(
+                (tcont for tcont in self.root.get('/tconts') if
+                 tcont.traffic_descriptor_profile_ref == request.name), None)
+            assert tdp_ref_by_tcont is None, \
+                'The Traffic Descriptor Profile -- \'{}\' is referenced \
+                by TCont'.format(request.name)
+            path = '/traffic_descriptor_profiles/{}'.format(request.name)
+            log.debug('removing-traffic-descriptor-profile',
+                      name=request.name)
+            self.root.remove(path)
+            return Empty()
+        except AssertionError, e:
+            context.set_details(e.message)
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'traffic descriptor profile \'{}\' not found'.format(
+                    request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
+    def get_all_tconts_config_data(self, request, context):
+        log.info('grpc-request', request=request)
+        items = self.root.get('/tconts')
+        return AllTcontsConfigData(tconts_config=items)
+
+    def create_tcont(self, request, context):
+        log.info('grpc-request', request=request)
+        try:
+            assert isinstance(request, TcontsConfigData)
+            assert self.validate_interface(request, context)
+            '''
+            @TODO: Allocation of Alloc-ID
+            '''
+            log.debug('creating-tcont', name=request.name)
+            self.root.add('/tconts', request)
+            return Empty()
+        except AssertionError, e:
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'Cannot create tcont \'{}\''.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+        except ValueError:
+            context.set_details(
+                'Duplicated tcont \'{}\' cannot be created'.format(
+                    request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+
+    def update_tcont(self, request, context):
+        log.info('grpc-request', request=request)
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return TcontsConfigData()
+        try:
+            assert isinstance(request, TcontsConfigData)
+            assert self.validate_interface(request, context)
+
+            path = '/tconts/{}'.format(request.name)
+            log.debug('updating-tcont', name=request.name)
+            self.root.update(path, request, strict=True)
+            return Empty()
+        except AssertionError, e:
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'tcont \'{}\' not found'.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
+    def delete_tcont(self, request, context):
+        log.info('grpc-request', request=request)
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+        try:
+            assert isinstance(request, TcontsConfigData), \
+                'Instance is not of TCont'
+            tcont_ref_by_gemport = next(
+                (gemport for gemport in self.root.get('/gemports')
+                 if gemport.tcont_ref == request.name), None)
+            assert tcont_ref_by_gemport is None, \
+                'The Tcont -- \'{}\' is referenced by GemPort'.format(
+                    request.name)
+            path = '/tconts/{}'.format(request.name)
+            log.debug('removing-tcont', name=request.name)
+            self.root.remove(path)
+            return Empty()
+        except AssertionError, e:
+            context.set_details(e.message)
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'tcont \'{}\' not found'.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
+    def get_all_gemports_config_data(self, request, context):
+        log.info('grpc-request', request=request)
+        items = self.root.get('/gemports')
+        return AllGemportsConfigData(gemports_config=items)
+
+    def create_gem_port(self, request, context):
+        log.info('grpc-request', request=request)
+        try:
+            assert isinstance(request, GemportsConfigData)
+            assert self.validate_interface(request, context)
+            '''
+            @TODO: Allocation of Gemport-ID
+            '''
+            log.debug('creating-gemport', name=request.name)
+            self.root.add('/gemports', request)
+            return Empty()
+        except AssertionError, e:
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'Cannot create gemport \'{}\''.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+        except ValueError:
+            context.set_details(
+                'Duplicated gemport \'{}\' cannot be created'.format(
+                    request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+
+    def update_gem_port(self, request, context):
+        log.info('grpc-request', request=request)
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return GemportsConfigData()
+        try:
+            assert isinstance(request, GemportsConfigData)
+            assert self.validate_interface(request, context)
+
+            path = '/gemports/{}'.format(request.name)
+            log.debug('updating-gemport', name=request.name)
+            self.root.update(path, request, strict=True)
+            return Empty()
+        except AssertionError, e:
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'gemport \'{}\' not found'.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
+    def delete_gem_port(self, request, context):
+        log.info('grpc-request', request=request)
+        if '/' in request.name:
+            context.set_details(
+                'Malformed name \'{}\''.format(request.name))
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+        try:
+            assert isinstance(request, GemportsConfigData)
+            path = '/gemports/{}'.format(request.name)
+            log.debug('removing-gemport', name=request.name)
+            self.root.remove(path)
+            return Empty()
+        except AssertionError:
+            context.set_details('Instance is not of gemport')
+            context.set_code(StatusCode.INVALID_ARGUMENT)
+            return Empty()
+        except KeyError:
+            context.set_details(
+                'gemport \'{}\' not found'.format(request.name))
+            context.set_code(StatusCode.NOT_FOUND)
+            return Empty()
+
     def validate_interface(self, request, context):
         try:
             if(isinstance(request, ChannelgroupConfig)):
@@ -886,9 +1147,63 @@
                     assert self.get_ref_data(
                         request, context, "v_ont_anis",
                         venet.data.v_ontani_ref), \
-                        'Reference to ont ani -- \'{}\' not found'\
+                        'Reference to vont ani -- \'{}\' not found'\
                         .format(venet.data.v_ontani_ref)
                 return True
+            elif(isinstance(request, TrafficDescriptorProfileData)):
+                assert isinstance(request, TrafficDescriptorProfileData)
+                traffic_descriptor = request
+                assert traffic_descriptor.name != '', \
+                    'Traffic Descriptor Profile name is mandatory'
+                assert traffic_descriptor.fixed_bandwidth != '', \
+                    'Fixed bandwidth of Traffic Descriptor is mandatory'
+                assert traffic_descriptor.assured_bandwidth != '', \
+                    'Assured bandwidth of Traffic Descriptor is mandatory'
+                assert traffic_descriptor.maximum_bandwidth != '', \
+                    'Maximum bandwidth of Traffic Descriptor is mandatory'
+                assert 0 <= traffic_descriptor.priority <= 8, \
+                    'Traffic Descriptor Profile priority for or scheduling \
+                    traffic on a TCont must be in range of [1, 8]'
+                return True
+            elif(isinstance(request, TcontsConfigData)):
+                assert isinstance(request, TcontsConfigData)
+                tcont = request
+                assert tcont.name != '', 'TCont name is mandatory'
+                assert tcont.interface_reference != '', \
+                    'TCont must reference a vont ani interface'
+                assert tcont.traffic_descriptor_profile_ref != '', \
+                    'TCont must reference an existing traffic descriptor \
+                    profile'
+                assert self.get_ref_data(
+                    request, context, "v_ont_anis",
+                    tcont.interface_reference), \
+                    'Reference to vont ani interface -- \'{}\' not found'\
+                    .format(tcont.interface_reference)
+                assert self.get_ref_data(
+                    request, context, "traffic_descriptor_profiles",
+                    tcont.traffic_descriptor_profile_ref), \
+                    'Reference to traffic descriptor profile -- \'{}\' \
+                    not found'.format(tcont.traffic_descriptor_profile_ref)
+                return True
+            elif(isinstance(request, GemportsConfigData)):
+                assert isinstance(request, GemportsConfigData)
+                gemport = request
+                assert gemport.name != '', 'Gemport name is mandatory'
+                assert gemport.itf_ref != '', \
+                    'Gemport must reference an existing VEnet interface'
+                assert self.get_ref_data(
+                    request, context, "v_enets", gemport.itf_ref), \
+                    'Reference to VEnet interface -- \'{}\' not found'\
+                    .format(gemport.itf_ref)
+                assert 0 <= gemport.traffic_class <= 7, \
+                    'Traffic class value for Gemport \
+                    must be in range of [0, 7]'
+                if gemport.tcont_ref:
+                    assert self.get_ref_data(
+                        request, context, "tconts", gemport.tcont_ref), \
+                        'Reference to tcont -- \'{}\' not found'\
+                        .format(gemport.tcont_ref)
+                return True
             else:
                 return False
         except AssertionError, e:
diff --git a/voltha/protos/ponsim.proto b/voltha/protos/ponsim.proto
index 3ea7767..4915dab 100644
--- a/voltha/protos/ponsim.proto
+++ b/voltha/protos/ponsim.proto
@@ -5,6 +5,11 @@
 import "google/protobuf/empty.proto";
 import "openflow_13.proto";
 import "bbf_fiber_base.proto";
+import "bbf_fiber_gemport_body.proto";
+import "bbf_fiber_multicast_distribution_set_body.proto";
+import "bbf_fiber_multicast_gemport_body.proto";
+import "bbf_fiber_tcont_body.proto";
+import "bbf_fiber_traffic_descriptor_profile_body.proto";
 
 message PonSimDeviceInfo {
     int32 nni_port = 1;
@@ -31,18 +36,30 @@
     repeated PonSimPortMetrics metrics = 2;
 }
 
-message InterfaceConfig
-{
-     oneof interface_type
-     {
-        bbf_fiber.ChannelgroupConfig        channel_group_config         = 1;
-        bbf_fiber.ChannelpartitionConfig    channel_partition_config     = 2;
-        bbf_fiber.ChannelpairConfig         channel_pair_config          = 3;
-        bbf_fiber.ChannelterminationConfig  channel_termination_config   = 4;
-        bbf_fiber.OntaniConfig              ont_ani_config               = 5;
-        bbf_fiber.VOntaniConfig             vont_ani_config              = 6;
-        bbf_fiber.VEnetConfig               venet_config                 = 7;
-     }
+message TcontInterfaceConfig {
+    bbf_fiber.TrafficDescriptorProfileData
+        traffic_descriptor_profile_config_data = 1;
+    bbf_fiber.TcontsConfigData tconts_config_data = 2;
+}
+
+message InterfaceConfig {
+    oneof interface_type {
+        bbf_fiber.ChannelgroupConfig channel_group_config = 1;
+        bbf_fiber.ChannelpartitionConfig channel_partition_config = 2;
+        bbf_fiber.ChannelpairConfig channel_pair_config = 3;
+        bbf_fiber.ChannelterminationConfig channel_termination_config = 4;
+        bbf_fiber.OntaniConfig ont_ani_config = 5;
+        bbf_fiber.VOntaniConfig vont_ani_config = 6;
+        bbf_fiber.VEnetConfig venet_config = 7;
+        bbf_fiber.TrafficDescriptorProfileData
+            traffic_descriptor_profile_config_data = 8;
+        bbf_fiber.TcontsConfigData tconts_config_data = 9;
+        bbf_fiber.GemportsConfigData gemports_config_data = 10;
+        bbf_fiber.MulticastGemportsConfigData
+            multicast_gemports_config_data = 11;
+        bbf_fiber.MulticastDistributionSetData
+            multicast_distribution_set_data = 12;
+    }
 }
 
 service PonSim {
@@ -58,8 +75,8 @@
 
 }
 
-service XPonSim
-{
+service XPonSim {
+
     rpc CreateInterface(InterfaceConfig)
         returns(google.protobuf.Empty) {}
 
@@ -68,4 +85,40 @@
 
     rpc RemoveInterface(InterfaceConfig)
         returns(google.protobuf.Empty) {}
+
+    rpc CreateTcont(TcontInterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc UpdateTcont(TcontInterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc RemoveTcont(TcontInterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc CreateGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc UpdateGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc RemoveGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc CreateMulticastGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc UpdateMulticastGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc RemoveMulticastGemport(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc CreateMulticastDistributionSet(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc UpdateMulticastDistributionSet(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
+
+    rpc RemoveMulticastDistributionSet(InterfaceConfig)
+        returns(google.protobuf.Empty) {}
 }
