diff --git a/adapters/ponsim_olt/ponsim_olt.py b/adapters/ponsim_olt/ponsim_olt.py
index e47d14d..1806a33 100644
--- a/adapters/ponsim_olt/ponsim_olt.py
+++ b/adapters/ponsim_olt/ponsim_olt.py
@@ -358,12 +358,12 @@
         cap = OFPPF_1GB_FD | OFPPF_FIBER
         return PortCapability(
             port = LogicalPort (
-                id='nni',
+                # id='nni',
                 ofp_port=ofp_port(
-                    port_no=port_no,
+                    # port_no=port_no,
                     hw_addr=mac_str_to_tuple(
-                    '00:00:00:00:00:%02x' % self.ofp_port_no),
-                    name='nni',
+                    '00:00:00:00:00:%02x' % port_no),
+                    # name='nni',
                     config=0,
                     state=OFPPS_LIVE,
                     curr=cap,
@@ -371,8 +371,10 @@
                     peer=cap,
                     curr_speed=OFPPF_1GB_FD,
                     max_speed=OFPPF_1GB_FD
-                )
-            )
+                ),
+                device_id=device.id,
+                device_port_no=port_no
+        )
         )
 
     # TODO - change for core 2.0
@@ -458,34 +460,12 @@
         self.log.info('stopped-receiving-grpc-frames')
 
 
-    # VOLTHA's flow decomposition removes the information about which flows
-    # are trap flows where traffic should be forwarded to the controller.
-    # We'll go through the flows and change the output port of flows that we
-    # know to be trap flows to the OF CONTROLLER port.
+    @inlineCallbacks
     def update_flow_table(self, flows):
-        stub = ponsim_pb2.PonSimStub(self.get_channel())
-        self.log.info('pushing-olt-flow-table')
-        for flow in flows:
-            classifier_info = {}
-            for field in fd.get_ofb_fields(flow):
-                if field.type == fd.ETH_TYPE:
-                    classifier_info['eth_type'] = field.eth_type
-                    self.log.debug('field-type-eth-type',
-                                   eth_type=classifier_info['eth_type'])
-                elif field.type == fd.IP_PROTO:
-                    classifier_info['ip_proto'] = field.ip_proto
-                    self.log.debug('field-type-ip-proto',
-                                   ip_proto=classifier_info['ip_proto'])
-            if ('ip_proto' in classifier_info and (
-                    classifier_info['ip_proto'] == 17 or
-                    classifier_info['ip_proto'] == 2)) or (
-                    'eth_type' in classifier_info and
-                    classifier_info['eth_type'] == 0x888e):
-                for action in fd.get_actions(flow):
-                    if action.type == ofp.OFPAT_OUTPUT:
-                        action.output.port = ofp.OFPP_CONTROLLER
-            self.log.info('out_port', out_port=fd.get_out_port(flow))
+        yield self.get_channel()
+        stub = ponsim_pb2.PonSimStub(self.channel)
 
+        self.log.info('pushing-olt-flow-table')
         stub.UpdateFlowTable(FlowTable(
             port=0,
             flows=flows
