diff --git a/voltha/core/xpon_agent.py b/voltha/core/xpon_agent.py
index 2dce5ea..70e2bc0 100644
--- a/voltha/core/xpon_agent.py
+++ b/voltha/core/xpon_agent.py
@@ -508,6 +508,17 @@
                     'xpon-agent-creating-ont-ani-at-onu-device:',
                     onu_device_id=onu_device.id, ont_ani=ont_ani)
                 self.create_interface_in_device(onu_device, ont_ani)
+            tconts = self.core.get_proxy('/').get('/tconts')
+            for tcont in tconts:
+                if self.get_parent_data(tcont).name == data.name:
+                    log.info(
+                        'xpon-agent-creating-tcont-at-olt-device:',
+                        olt_device_id=olt_device.id, tcont=tcont)
+                    self.create_interface_in_device(olt_device, tcont)
+                    log.info(
+                        'xpon-agent-creating-tcont-at-onu-device:',
+                        onu_device_id=onu_device.id, tcont=tcont)
+                    self.create_interface_in_device(onu_device, tcont)
             v_enets = self.core.get_proxy('/').get('/v_enets')
             for v_enet in v_enets:
                 if self.get_parent_data(v_enet).name == data.name:
@@ -519,11 +530,19 @@
                         '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.
-            '''
+                    gemports = self.core.get_proxy('/').get('/gemports')
+                    for gemport in gemports:
+                        if self.get_parent_data(gemport).name == v_enet.name:
+                            log.info(
+                                'xpon-agent-creating-gemport-at-olt-device:',
+                                olt_device_id=olt_device.id, gemport=gemport)
+                            self.create_interface_in_device(olt_device,
+                                                            gemport)
+                            log.info(
+                                'xpon-agent-creating-gemport-at-onu-device:',
+                                onu_device_id=onu_device.id, gemport=gemport)
+                            self.create_interface_in_device(onu_device,
+                                                            gemport)
         except KeyError:
             log.info(
                 'xpon-agent-create-onu-interfaces-no-ont-ani-link-exists')
@@ -543,19 +562,20 @@
         self.remove_interface_in_device(olt_device, data)
         log.info(
             'xpon-agent-removing-channel-pair:',
-            olt_device_id=olt_device.id, data=channel_pair)
+            olt_device_id=olt_device.id, channel_pair=channel_pair)
         self.remove_interface_in_device(olt_device, channel_pair)
         channel_partition = self.get_parent_data(channel_pair)
         if channel_partition is not None:
             log.info(
                 'xpon-agent-removing-channel-partition:',
-                olt_device_id=olt_device.id, data=channel_partition)
+                olt_device_id=olt_device.id,
+                channel_partition=channel_partition)
             self.remove_interface_in_device(olt_device, channel_partition)
         channel_group = self.get_parent_data(channel_partition)
         if channel_group is not None:
             log.info(
                 'xpon-agent-removing-channel-group:',
-                olt_device_id=olt_device.id, data=channel_group)
+                olt_device_id=olt_device.id, channel_group=channel_group)
             self.remove_interface_in_device(olt_device, channel_group)
 
     def remove_onu_interfaces(self, olt_device, data):
@@ -563,14 +583,25 @@
         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:
+                        gemports = self.core.get_proxy('/').get('/gemports')
+                        for gemport in gemports:
+                            if self.get_parent_data(gemport).name == \
+                                v_enet.name:
+                                log.info(
+                                    'xpon-agent-remove-gemport-at-onu-device:',
+                                    onu_device_id=onu_device.id,
+                                    gemport=gemport)
+                                self.remove_interface_in_device(onu_device,
+                                                                gemport)
+                                log.info(
+                                    'xpon-agent-remove-gemport-at-olt-device:',
+                                    olt_device_id=olt_device.id,
+                                    gemport=gemport)
+                                self.remove_interface_in_device(olt_device,
+                                                                gemport)
                         log.info(
                             'xpon-agent-removing-v-enet-at-onu-device:',
                             onu_device_id=onu_device.id, data=v_enet)
@@ -579,6 +610,17 @@
                             'xpon-agent-removing-v-enet-at-olt-device:',
                             olt_device_id=olt_device.id, data=v_enet)
                         self.remove_interface_in_device(olt_device, v_enet)
+                tconts = self.core.get_proxy('/').get('/tconts')
+                for tcont in tconts:
+                    if self.get_parent_data(tcont).name == v_ont_ani.name:
+                        log.info(
+                            'xpon-agent-removing-tcont-at-onu-device:',
+                            onu_device_id=onu_device.id, tcont=tcont)
+                        self.remove_interface_in_device(onu_device, tcont)
+                        log.info(
+                            'xpon-agent-removing-tcont-at-olt-device:',
+                            olt_device_id=olt_device.id, tcont=tcont)
+                        self.remove_interface_in_device(olt_device, tcont)
                 try:
                     ont_ani = self.core.get_proxy('/').get(
                         '/ont_anis/{}'.format(v_ont_ani.name))
diff --git a/voltha/core/xpon_handler.py b/voltha/core/xpon_handler.py
index 674b888..18b6062 100644
--- a/voltha/core/xpon_handler.py
+++ b/voltha/core/xpon_handler.py
@@ -116,8 +116,6 @@
             assert isinstance(request, ChannelgroupConfig)
             assert self.validate_interface(request, context)
             channelgroup = self.get_channel_group_config(request, context)
-            assert channelgroup.name == request.name
-
             request.cg_index = channelgroup.cg_index
             path = '/channel_groups/{}'.format(request.name)
             log.debug('updating-channel-group', name=request.name)
@@ -158,9 +156,6 @@
                 'Channel Group -- \'{}\' is referenced by Channel Pair'\
                 .format(request.name)
             channelgroup = self.get_channel_group_config(request, context)
-            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)
