diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_tp_service_specific_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_tp_service_specific_task.py
index 465f12c..65a0320 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_tp_service_specific_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_tp_service_specific_task.py
@@ -19,10 +19,12 @@
 from pyvoltha.adapters.extensions.omci.omci_me import *
 from pyvoltha.adapters.extensions.omci.tasks.task import Task
 from pyvoltha.adapters.extensions.omci.omci_defs import *
+from pyvoltha.adapters.extensions.omci.omci_entities import *
 from adapters.brcm_openomci_onu.uni_port import *
 from adapters.brcm_openomci_onu.pon_port \
     import BRDCM_DEFAULT_VLAN, TASK_PRIORITY, DEFAULT_TPID, DEFAULT_GEM_PAYLOAD
 
+
 OP = EntityOperations
 RC = ReasonCodes
 
@@ -176,6 +178,9 @@
         self.log.debug('function-entry')
 
         omci_cc = self._onu_device.omci_cc
+        gem_pq_associativity = dict()
+        pq_to_related_port = dict()
+        is_related_ports_configurable = False
 
         try:
             ################################################################################
@@ -263,6 +268,8 @@
 
                 if 'instance_id' in v:
                     related_port = v['attributes']['related_port']
+                    pq_to_related_port[k] = related_port
+
                     if v['instance_id'] & 0b1000000000000000:
                         tcont_me = (related_port & 0xffff0000) >> 16
                         if tcont_me not in self.tcont_me_to_queue_map:
@@ -303,22 +310,22 @@
                     # 0 is highest priority and 0x0fff is lowest.
                     self.tcont_me_to_queue_map[tcont.entity_id].sort()
                     self.uni_port_to_queue_map[self._uni_port.entity_id].sort()
-                    # Get the priority queue associated with p-bit that is
-                    # mapped to the gem port.
-                    # p-bit-7 is highest priority and p-bit-0 is lowest
-                    # Gem port associated with p-bit-7 should be mapped to
-                    # highest priority queue and gem port associated with p-bit-0
-                    # should be mapped to lowest priority queue.
+                    # Get the priority queue by indexing the priority value of the gemport.
                     # The self.tcont_me_to_queue_map and self.uni_port_to_queue_map
                     # have priority queue entities ordered in descending order
                     # of priority
-                    for i, p in enumerate(gem_port.pbit_map):
-                        if p == '1':
-                            ul_prior_q_entity_id = \
-                                self.tcont_me_to_queue_map[tcont.entity_id][i]
-                            dl_prior_q_entity_id = \
-                                self.uni_port_to_queue_map[self._uni_port.entity_id][i]
-                            break
+
+                    ul_prior_q_entity_id = \
+                        self.tcont_me_to_queue_map[tcont.entity_id][gem_port.priority_q]
+                    dl_prior_q_entity_id = \
+                        self.uni_port_to_queue_map[self._uni_port.entity_id][gem_port.priority_q]
+
+                    pq_attributes = dict()
+                    pq_attributes["pq_entity_id"] = ul_prior_q_entity_id
+                    pq_attributes["weight"] = gem_port.weight
+                    pq_attributes["scheduling_policy"] = gem_port.scheduling_policy
+                    pq_attributes["priority_q"] = gem_port.priority_q
+                    gem_pq_associativity[gem_port.entity_id] = pq_attributes
 
                     assert ul_prior_q_entity_id is not None and \
                            dl_prior_q_entity_id is not None
@@ -338,6 +345,41 @@
                     pass
 
             ################################################################################
+            # Update the PriorityQeue Attributes for the PQ Associated with Gemport
+            #
+            # Entityt ID was created prior to this call. This is a set
+            #
+            #
+
+            ont2g = self._onu_device.query_mib(Ont2G.class_id)
+            qos_config_flexibility_ie = ont2g.get(0, {}).get('attributes', {}).\
+                                        get('qos_configuration_flexibility', None)
+            self.log.debug("qos_config_flexibility",
+                            qos_config_flexibility=qos_config_flexibility_ie)
+
+            if qos_config_flexibility_ie & 0b100000:
+                is_related_ports_configurable = True
+
+            for k, v in gem_pq_associativity.items():
+                if v["scheduling_policy"] == "WRR":
+                    self.log.debug("updating-pq-weight")
+                    msg = PriorityQueueFrame(v["pq_entity_id"], weight=v["weight"])
+                    frame = msg.set()
+                    results = yield omci_cc.send(frame)
+                    self.check_status_and_state(results, 'set-priority-queues-weight')
+                elif v["scheduling_policy"] == "StrictPriority" and \
+                        is_related_ports_configurable:
+                    self.log.debug("updating-pq-priority")
+                    related_port = pq_to_related_port[v["pq_entity_id"]]
+                    related_port = related_port & 0xffff0000
+                    related_port = related_port | v['priority_q'] # Set priority
+                    msg = PriorityQueueFrame(v["pq_entity_id"], related_port=related_port)
+                    frame = msg.set()
+                    results = yield omci_cc.send(frame)
+                    self.check_status_and_state(results, 'set-priority-queues-priority')
+
+
+            ################################################################################
             # Update the IEEE 802.1p Mapper Service Profile config
             #
             #  EntityID was created prior to this call. This is a set
