diff --git a/pyvoltha/adapters/extensions/omci/omci_entities.py b/pyvoltha/adapters/extensions/omci/omci_entities.py
index e6b5ea0..3df13e1 100644
--- a/pyvoltha/adapters/extensions/omci/omci_entities.py
+++ b/pyvoltha/adapters/extensions/omci/omci_entities.py
@@ -31,6 +31,7 @@
 import six
 from six.moves import range
 
+RECONCILE_LOW_PRIORITY=1000
 
 class EntityClassAttribute(object):
 
@@ -143,6 +144,7 @@
     mandatory_operations = set()
     optional_operations = set()
     notifications = set()
+    reconcile_sort_order = RECONCILE_LOW_PRIORITY
     alarms = dict()       # Alarm Number -> Alarm Name
     hidden = False        # If true, this attribute is not reported by a MIB upload.
                           # This attribute is needed to be able to properly perform
@@ -373,6 +375,7 @@
 
 class MacBridgeServiceProfile(EntityClass):
     class_id = 45
+    reconcile_sort_order = 2
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ByteField("spanning_tree_ind", None), {AA.R, AA.W, AA.SBC},
@@ -400,6 +403,7 @@
 
 class MacBridgePortConfigurationData(EntityClass):
     class_id = 47
+    reconcile_sort_order = 4
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ShortField("bridge_id_pointer", None), {AA.R, AA.W, AA.SBC}),
@@ -474,6 +478,7 @@
 
 class Ieee8021pMapperServiceProfile(EntityClass):
     class_id = 130
+    reconcile_sort_order = 3
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ShortField("tp_pointer", None), {AA.R, AA.W, AA.SBC}),
@@ -761,6 +766,7 @@
 
 class Tcont(EntityClass):
     class_id = 262
+    reconcile_sort_order = 5
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R}),
         ECA(ShortField("alloc_id", None), {AA.R, AA.W}),
@@ -826,6 +832,7 @@
 
 class GemInterworkingTp(EntityClass):
     class_id = 266
+    reconcile_sort_order = 7
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ShortField("gem_port_network_ctp_pointer", None),
@@ -850,6 +857,7 @@
 
 class GemPortNetworkCtp(EntityClass):
     class_id = 268
+    reconcile_sort_order = 6
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ShortField("port_id", None), {AA.R, AA.W, AA.SBC}),
@@ -878,6 +886,7 @@
 
 class GalEthernetProfile(EntityClass):
     class_id = 272
+    reconcile_sort_order = 1
     attributes = [
         ECA(ShortField("managed_entity_id", None), {AA.R, AA.SBC}),
         ECA(ShortField("max_gem_payload_size", None), {AA.R, AA.W, AA.SBC}),
diff --git a/pyvoltha/adapters/extensions/omci/tasks/mib_reconcile_task.py b/pyvoltha/adapters/extensions/omci/tasks/mib_reconcile_task.py
index f377863..875440a 100644
--- a/pyvoltha/adapters/extensions/omci/tasks/mib_reconcile_task.py
+++ b/pyvoltha/adapters/extensions/omci/tasks/mib_reconcile_task.py
@@ -23,6 +23,7 @@
 from pyvoltha.adapters.extensions.omci.omci_me import OntDataFrame
 from pyvoltha.adapters.extensions.omci.omci_frame import OmciFrame, OmciDelete, OmciCreate, OmciSet
 from pyvoltha.adapters.extensions.omci.omci_fields import OmciTableField
+from pyvoltha.adapters.extensions.omci.omci_entities import RECONCILE_LOW_PRIORITY
 from pyvoltha.adapters.extensions.omci.database.mib_db_api import ATTRIBUTES_KEY
 
 OP = EntityOperations
@@ -202,6 +203,7 @@
         # First the undecodables and onu-created (treated the same)
         undecodable = self._undecodable(onu, me_map)
         onu_created = self._onu_created(onu, me_map)
+        self.log.debug("sorted-class-list", onu_created=onu_created)
 
         if len(undecodable) or len(onu_created):
             results = yield self.fix_onu_only_save_to_db(undecodable, onu_created, onu_db)
@@ -212,6 +214,7 @@
         # Last the OLT created values, resend these to the ONU
 
         olt_created = self._olt_created(onu, me_map)
+        self.log.debug("sorted-class-list", olt_created=olt_created)
         if len(olt_created):
             results = yield self.fix_onu_only_remove_from_onu(olt_created)
             successes += results[0]
@@ -347,6 +350,7 @@
         # from OpenOMCI database
         undecodable = self._undecodable(olt, me_map)
         onu_created = self._onu_created(olt, me_map)
+        self.log.debug("sorted-class-list", onu_created=onu_created)
 
         if len(undecodable) or len(onu_created):
             good, bad = self.fix_olt_only_remove_from_db(undecodable, onu_created)
@@ -357,6 +361,7 @@
         # Last the OLT created
 
         olt_created = self._olt_created(olt, me_map)
+        self.log.debug("sorted-class-list", olt_created=olt_created)
         if len(olt_created):
             results = yield self.fix_olt_only_create_on_onu(olt_created, me_map)
             successes += results[0]
@@ -743,12 +748,12 @@
         return [(cid, eid) for cid, eid in cid_eid_list if cid not in me_map]
 
     def _onu_created(self, cid_eid_list, me_map):
-        return [(cid, eid) for cid, eid in cid_eid_list if cid in me_map and
+        return [(cid, eid) for cid, eid in sorted(cid_eid_list, key=self.entitysorter) if cid in me_map and
                 (OP.Create not in me_map[cid].mandatory_operations and
                  OP.Create not in me_map[cid].optional_operations)]
 
     def _olt_created(self, cid_eid_list, me_map):
-        return [(cid, eid) for cid, eid in cid_eid_list if cid in me_map and
+        return [(cid, eid) for cid, eid in sorted(cid_eid_list, key=self.entitysorter) if cid in me_map and
                 (OP.Create in me_map[cid].mandatory_operations or
                  OP.Create in me_map[cid].optional_operations)]
 
@@ -759,3 +764,11 @@
             new_mds_value = 1
 
         return new_mds_value
+
+    def entitysorter(self, key):
+        me_map = self._device.me_map
+        try:
+            clsid = key[0]
+            return me_map[clsid].reconcile_sort_order
+        except KeyError:
+            return RECONCILE_LOW_PRIORITY
