diff --git a/internal/common/omci/mib_test.go b/internal/common/omci/mib_test.go
index a55eeeb..f569bce 100644
--- a/internal/common/omci/mib_test.go
+++ b/internal/common/omci/mib_test.go
@@ -77,13 +77,14 @@
 		want mibExpected
 	}{
 		{"mibUploadNext-0", createTestMibUploadNextArgs(t, 1, 0),
-			mibExpected{messageType: omci.MibUploadNextResponseType, entityID: 0, transactionId: 1, entityClass: me.OnuDataClassID, attributes: map[string]interface{}{"MibDataSync": MDS}}},
+
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 1, entityID: 0, entityClass: me.OnuDataClassID, attributes: map[string]interface{}{"MibDataSync": MDS}}},
 		{"mibUploadNext-1", createTestMibUploadNextArgs(t, 2, 1),
-			mibExpected{messageType: omci.MibUploadNextResponseType, entityID: 0, transactionId: 2, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"Type": uint8(47), "NumberOfPorts": uint8(4)}}},
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 2, entityID: 257, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"Type": uint8(47), "NumberOfPorts": uint8(4)}}},
 		{"mibUploadNext-4", createTestMibUploadNextArgs(t, 3, 4),
-			mibExpected{messageType: omci.MibUploadNextResponseType, entityID: 0, transactionId: 3, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"PowerShedOverride": uint32(0)}}},
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 3, entityID: 257, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"PowerShedOverride": uint32(0)}}},
 		{"mibUploadNext-10", createTestMibUploadNextArgs(t, 4, 10),
-			mibExpected{messageType: omci.MibUploadNextResponseType, entityID: 258, transactionId: 4, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"SensedType": uint8(47)}}},
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 4, entityID: 258, entityClass: me.PhysicalPathTerminationPointEthernetUniClassID, attributes: map[string]interface{}{"SensedType": uint8(47)}}},
 	}
 
 	for _, tt := range tests {
@@ -111,5 +112,60 @@
 			}
 		})
 	}
+}
 
+type pqueueExpected struct {
+	entityId    uint16
+	relatedPort uint32
+}
+
+func TestGeneratePriorityQueueMe(t *testing.T) {
+
+	tests := []struct {
+		name     string
+		sequence uint16
+		want     pqueueExpected
+	}{
+		{"generate-pq-downstream-1", 26,
+			pqueueExpected{entityId: 1, relatedPort: 16842752}},
+		{"generate-pq-downstream-2", 30,
+			pqueueExpected{entityId: 2, relatedPort: 16842753}},
+		{"generate-pq-downstream-3", 58,
+			pqueueExpected{entityId: 9, relatedPort: 16842760}},
+		{"generate-pq-upstream-1", 28,
+			pqueueExpected{entityId: 32769, relatedPort: 2147549184}},
+		{"generate-pq-upstream-2", 32,
+			pqueueExpected{entityId: 32770, relatedPort: 2147549185}},
+		{"generate-pq-upstream-3", 60,
+			pqueueExpected{entityId: 32777, relatedPort: 2147614720}},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			reportedMe, meErr := GeneratePriorityQueueMe(tt.sequence)
+			if meErr.GetError() != nil {
+				t.Fatal(meErr.Error())
+			}
+
+			assert.Equal(t, reportedMe.GetEntityID(), tt.want.entityId)
+
+			relatedPort, _ := reportedMe.GetAttribute("RelatedPort")
+			assert.Equal(t, relatedPort, tt.want.relatedPort)
+		})
+	}
+
+	// test that the related ports are unique
+	allRelatedPorts := make(map[uint32]struct{})
+	for v := 26; v <= 281; v++ {
+		reportedMe, meErr := GeneratePriorityQueueMe(uint16(v))
+		if meErr.GetError() != nil {
+			t.Fatal(meErr.Error())
+		}
+		relatedPort, _ := reportedMe.GetAttribute("RelatedPort")
+		allRelatedPorts[relatedPort.(uint32)] = struct{}{}
+	}
+
+	// we report 128 queues total, but each of them is comprised of 2 messages
+	// that's why the 256 iterations
+	assert.Equal(t, len(allRelatedPorts), 128)
 }
