diff --git a/internal/common/omci/get.go b/internal/common/omci/get.go
index 67a65ff..384fc0b 100644
--- a/internal/common/omci/get.go
+++ b/internal/common/omci/get.go
@@ -101,7 +101,7 @@
 		omciLogger.WithFields(log.Fields{
 			"Err":  err,
 			"TxID": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
-		}).Error("cannot-Serialize-Onu2gResponse")
+		}).Error("cannot-Serialize-GetResponse")
 		return nil, err
 	}
 
@@ -369,21 +369,6 @@
 		return nil
 	}
 
-	// L2 PM counters MEs exceed max allowed OMCI payload size.
-	// So the request/responses are always multipart.
-	// First identify the attributes that are not requested in the current GET request.
-	// Then filter out those attributes from the responses in the current GET response.
-	unwantedAttributeMask := ^attributeMask
-	var i uint16
-	for i = 1; i <= 16; i++ { // 1 and 16 because they are allowed valid min and max index keys in AttributeValueMap.
-		// We leave out 0 because that is ManagedEntity and that is a default IE in the map
-		if (1<<(16-i))&unwantedAttributeMask > 0 {
-			if err := managedEntity.DeleteAttributeByIndex(uint(i)); err != nil {
-				omciLogger.Errorf("error deleting attribute at index=%v, err=%v", i, err)
-			}
-		}
-	}
-
 	return &omci.GetResponse{
 		MeBasePacket: omci.MeBasePacket{
 			EntityClass:    me.EthernetFramePerformanceMonitoringHistoryDataUpstreamClassID,
@@ -424,21 +409,6 @@
 		return nil
 	}
 
-	// L2 PM counters MEs exceed max allowed OMCI payload size.
-	// So the request/responses are always multipart.
-	// First identify the attributes that are not requested in the current GET request.
-	// Then filter out those attributes from the responses in the current GET response.
-	unwantedAttributeMask := ^attributeMask
-	var i uint16
-	for i = 1; i <= 16; i++ { // 1 and 16 because they are allowed valid min and max index keys in AttributeValueMap.
-		// We leave out 0 because that is ManagedEntity and that is a default IE in the map
-		if (1<<(16-i))&unwantedAttributeMask > 0 {
-			if err := managedEntity.DeleteAttributeByIndex(uint(i)); err != nil {
-				omciLogger.Errorf("error deleting attribute at index=%v, err=%v", i, err)
-			}
-		}
-	}
-
 	return &omci.GetResponse{
 		MeBasePacket: omci.MeBasePacket{
 			EntityClass:    me.EthernetFramePerformanceMonitoringHistoryDataDownstreamClassID,
@@ -479,21 +449,6 @@
 		return nil
 	}
 
-	// L2 PM counters MEs exceed max allowed OMCI payload size.
-	// So the request/responses are always multipart.
-	// First identify the attributes that are not requested in the current GET request.
-	// Then filter out those attributes from the responses in the current GET response.
-	unwantedAttributeMask := ^attributeMask
-	var i uint16
-	for i = 1; i <= 16; i++ { // 1 and 16 because they are allowed valid min and max index keys in AttributeValueMap.
-		// We leave out 0 because that is ManagedEntity and that is a default IE in the map
-		if (1<<(16-i))&unwantedAttributeMask > 0 {
-			if err := managedEntity.DeleteAttributeByIndex(uint(i)); err != nil {
-				omciLogger.Errorf("error deleting attribute at index=%v, err=%v", i, err)
-			}
-		}
-	}
-
 	return &omci.GetResponse{
 		MeBasePacket: omci.MeBasePacket{
 			EntityClass:    me.EthernetPerformanceMonitoringHistoryDataClassID,
@@ -559,21 +514,6 @@
 		return nil
 	}
 
-	// L2 PM counters MEs exceed max allowed OMCI payload size.
-	// So the request/responses are always multipart.
-	// First identify the attributes that are not requested in the current GET request.
-	// Then filter out those attributes from the responses in the current GET response.
-	unwantedAttributeMask := ^attributeMask
-	var i uint16
-	for i = 1; i <= 7; i++ { // 1 and 7 because they are allowed valid min and max index keys in AttributeValueMap.
-		// We leave out 0 because that is ManagedEntity and that is a default IE in the map
-		if (1<<(7-i))&unwantedAttributeMask > 0 {
-			if err := managedEntity.DeleteAttributeByIndex(uint(i)); err != nil {
-				omciLogger.Errorf("error deleting attribute at index=%v, err=%v", i, err)
-			}
-		}
-	}
-
 	return &omci.GetResponse{
 		MeBasePacket: omci.MeBasePacket{
 			EntityClass:    me.GemPortNetworkCtpPerformanceMonitoringHistoryDataClassID,
diff --git a/internal/common/omci/get_test.go b/internal/common/omci/get_test.go
index d995bba..0d9663f 100644
--- a/internal/common/omci/get_test.go
+++ b/internal/common/omci/get_test.go
@@ -92,11 +92,30 @@
 			getArgs{createOnuDataResponse(32768, 10, 129), 2},
 			getWant{2, map[string]interface{}{"MibDataSync": uint8(129)}},
 		},
+		{"getGemPortNetworkCtpPerformanceMonitoringHistoryDataResponse",
+			getArgs{createGemPortNetworkCtpPerformanceMonitoringHistoryData(32768, 10), 2},
+			getWant{2, map[string]interface{}{"ManagedEntityId": uint16(10)}},
+		},
+		{"getEthernetFramePerformanceMonitoringHistoryDataUpstreamResponse",
+			getArgs{createEthernetFramePerformanceMonitoringHistoryDataUpstreamResponse(32768, 10), 2},
+			getWant{2, map[string]interface{}{"ManagedEntityId": uint16(10)}},
+		},
+		{"getEthernetFramePerformanceMonitoringHistoryDataDownstreamResponse",
+			getArgs{createEthernetFramePerformanceMonitoringHistoryDataDownstreamResponse(32768, 10), 2},
+			getWant{2, map[string]interface{}{"ManagedEntityId": uint16(10)}},
+		},
+		{"getEthernetPerformanceMonitoringHistoryDataResponse",
+			getArgs{createEthernetPerformanceMonitoringHistoryDataResponse(32768, 10), 2},
+			getWant{2, map[string]interface{}{"ManagedEntityId": uint16(10)}},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 
-			data, _ := Serialize(omci.GetResponseType, tt.args.generatedPkt, tt.args.transactionId)
+			data, err := Serialize(omci.GetResponseType, tt.args.generatedPkt, tt.args.transactionId)
+			if err != nil {
+				t.Fatal("cannot-serial-omci-packet", err)
+			}
 
 			// emulate the openonu-go behavior:
 			// omci_cc.receiveMessage process the message (creates a gopacket and extracts the OMCI layer) and invokes a callback
