diff --git a/voltha/adapters/openolt/openolt_device.py b/voltha/adapters/openolt/openolt_device.py
index 596004d..a6ec890 100644
--- a/voltha/adapters/openolt/openolt_device.py
+++ b/voltha/adapters/openolt/openolt_device.py
@@ -814,9 +814,16 @@
             for flow in flows:
                 try:
                     self.flow_mgr.add_flow(flow, is_down_stream)
-                except Exception as e:
-                    self.log.exception('failed-to-install-flow', e=e,
+                except grpc.RpcError as grpc_e:
+                    if grpc_e.code() == grpc.StatusCode.ALREADY_EXISTS:
+                        self.log.warn('flow already exists', e=grpc_e,
                                        flow=flow)
+                    else:
+                        self.log.error('failed to add flow', flow=flow,
+                                       e=grpc_e)
+                except Exception as e:
+                    self.log.error('failed to add flow', flow=flow, e=e)
+
 
     # There has to be a better way to do this
     def ip_hex(self, ip):
diff --git a/voltha/adapters/openolt/openolt_flow_mgr.py b/voltha/adapters/openolt/openolt_flow_mgr.py
index d316ba0..b1a56cf 100644
--- a/voltha/adapters/openolt/openolt_flow_mgr.py
+++ b/voltha/adapters/openolt/openolt_flow_mgr.py
@@ -137,7 +137,8 @@
                 classifier_info['in_port'])
             onu_id = platform.onu_id_from_port_num(
                 classifier_info['in_port'])
-            self.divide_and_add_flow(intf_id, onu_id, classifier_info,
+            self.divide_and_add_flow(intf_id, onu_id,
+                                     flow.priority, classifier_info,
                                      action_info)
         # else:
         #    self.log.info('ignore downstream flow', flow=flow,
@@ -147,11 +148,13 @@
     # FIXME - No need for divide_and_add_flow if
     # both upstream and downstream flows
     # are acted upon (not just upstream flows).
-    def divide_and_add_flow(self, intf_id, onu_id, classifier, action):
+    def divide_and_add_flow(self, intf_id, onu_id, priority, classifier,
+                            action):
         if 'ip_proto' in classifier:
             if classifier['ip_proto'] == 17:
                 self.log.debug('dhcp flow add')
-                self.add_dhcp_trap(intf_id, onu_id, classifier, action)
+                self.add_dhcp_trap(intf_id, onu_id, priority, classifier,
+                                   action)
             elif classifier['ip_proto'] == 2:
                 self.log.debug('igmp flow add ignored')
             else:
@@ -161,16 +164,16 @@
         elif 'eth_type' in classifier:
             if classifier['eth_type'] == EAP_ETH_TYPE:
                 self.log.debug('eapol flow add')
-                self.add_eapol_flow(intf_id, onu_id)
+                self.add_eapol_flow(intf_id, onu_id, priority)
 
         elif 'push_vlan' in action:
-            self.add_data_flow(intf_id, onu_id, classifier, action)
+            self.add_data_flow(intf_id, onu_id, priority, classifier, action)
         else:
             self.log.debug('Invalid-flow-type-to-handle',
                            classifier=classifier,
                            action=action)
 
-    def add_data_flow(self, intf_id, onu_id, uplink_classifier, uplink_action):
+    def add_data_flow(self, intf_id, onu_id, priority, uplink_classifier, uplink_action):
 
         downlink_classifier = dict(uplink_classifier)
         downlink_action = dict(uplink_action)
@@ -186,19 +189,19 @@
         # To-Do right now only one GEM port is supported, so below method
         # will take care of handling all the p bits.
         # We need to revisit when mulitple gem port per p bits is needed.
-        self.add_hsia_flow(intf_id, onu_id, uplink_classifier, uplink_action,
+        self.add_hsia_flow(intf_id, onu_id, priority, uplink_classifier, uplink_action,
                            downlink_classifier, downlink_action,
                            HSIA_FLOW_INDEX)
 
         # Secondary EAP on the subscriber vlan
-
-        if self.is_eap_enabled(intf_id, onu_id):
-            self.add_eapol_flow(intf_id, onu_id,
+        (eap_active, eap_priority) = self.is_eap_enabled(intf_id, onu_id)
+        if eap_active:
+            self.add_eapol_flow(intf_id, onu_id, eap_priority,
                 uplink_eapol_id=EAPOL_UPLINK_SECONDARY_FLOW_INDEX,
                 downlink_eapol_id=EAPOL_DOWNLINK_SECONDARY_FLOW_INDEX,
                 vlan_id=uplink_classifier['vlan_vid'])
 
-    def add_hsia_flow(self, intf_id, onu_id, uplink_classifier, uplink_action,
+    def add_hsia_flow(self, intf_id, onu_id, priority, uplink_classifier, uplink_action,
                       downlink_classifier, downlink_action, hsia_id):
 
         gemport_id = platform.mk_gemport_id(onu_id)
@@ -210,7 +213,7 @@
 
         flow = openolt_pb2.Flow(
             onu_id=onu_id, flow_id=flow_id, flow_type="upstream",
-            access_intf_id=intf_id, gemport_id=gemport_id,
+            access_intf_id=intf_id, gemport_id=gemport_id, priority=priority,
             classifier=self.mk_classifier(uplink_classifier),
             action=self.mk_action(uplink_action))
 
@@ -223,12 +226,13 @@
         flow = openolt_pb2.Flow(
                 onu_id=onu_id, flow_id=flow_id, flow_type="downstream",
                 access_intf_id=intf_id, gemport_id=gemport_id,
+                priority=priority,
                 classifier=self.mk_classifier(downlink_classifier),
                 action=self.mk_action(downlink_action))
 
         self.stub.FlowAdd(flow)
 
-    def add_dhcp_trap(self, intf_id, onu_id, classifier, action):
+    def add_dhcp_trap(self, intf_id, onu_id, priority, classifier, action):
 
         self.log.debug('add dhcp trap', classifier=classifier, action=action)
 
@@ -242,13 +246,13 @@
 
         upstream_flow = openolt_pb2.Flow(
             onu_id=onu_id, flow_id=flow_id, flow_type="upstream",
-            access_intf_id=intf_id, gemport_id=gemport_id,
+            access_intf_id=intf_id, gemport_id=gemport_id, priority=priority,
             classifier=self.mk_classifier(classifier),
             action=self.mk_action(action))
 
         self.stub.FlowAdd(upstream_flow)
 
-    def add_eapol_flow(self, intf_id, onu_id,
+    def add_eapol_flow(self, intf_id, onu_id, priority,
                        uplink_eapol_id=EAPOL_FLOW_INDEX,
                        downlink_eapol_id=EAPOL_DOWNLINK_FLOW_INDEX,
                        vlan_id=DEFAULT_MGMT_VLAN):
@@ -277,18 +281,13 @@
         gemport_id = platform.mk_gemport_id(onu_id)
 
 
-        self.log.debug('add eapol flow',
-            uplink_classifier=uplink_classifier,
-            uplink_action=uplink_action,
-            downlink_classifier=downlink_classifier,
-            downlink_action=downlink_action)
         # Add Upstream EAPOL Flow.
 
         uplink_flow_id = platform.mk_flow_id(intf_id, onu_id, uplink_eapol_id)
 
         upstream_flow = openolt_pb2.Flow(
             onu_id=onu_id, flow_id=uplink_flow_id, flow_type="upstream",
-            access_intf_id=intf_id, gemport_id=gemport_id,
+            access_intf_id=intf_id, gemport_id=gemport_id, priority=priority,
             classifier=self.mk_classifier(uplink_classifier),
             action=self.mk_action(uplink_action))
 
@@ -379,6 +378,6 @@
                                intf_id=intf_id, eap_intf_id=eap_intf_id,
                                eap_onu_id=eap_onu_id)
             if eap_flow and intf_id == eap_intf_id and onu_id == eap_onu_id:
-                return True
+                return (True, flow.priority)
 
-        return False
\ No newline at end of file
+        return (False, 0)
\ No newline at end of file
diff --git a/voltha/adapters/openolt/protos/openolt.proto b/voltha/adapters/openolt/protos/openolt.proto
index 0cb6192..e13cc83 100644
--- a/voltha/adapters/openolt/protos/openolt.proto
+++ b/voltha/adapters/openolt/protos/openolt.proto
@@ -223,6 +223,7 @@
     fixed32 gemport_id = 6;
     Classifier classifier = 7;
     Action action = 8;
+    fixed32 priority = 9;
 }
 
 message SerialNumber {
