diff --git a/internal/pkg/avcfg/onu_uni_tp.go b/internal/pkg/avcfg/onu_uni_tp.go
index d3492a5..0b4a204 100755
--- a/internal/pkg/avcfg/onu_uni_tp.go
+++ b/internal/pkg/avcfg/onu_uni_tp.go
@@ -1059,3 +1059,17 @@
 		delete(onuTP.PAniConfigFsm, k)
 	}
 }
+
+// GetGEMportToAllocIDMappingForONU - function to get the GEM ports and corresponding alloc-id mapping for an ONU
+func (onuTP *OnuUniTechProf) GetGEMportToAllocIDMappingForONU(ctx context.Context, aDeviceID string) map[uint16]uint16 {
+	logger.Debugw(ctx, "getting GEM port to AllocID mapping for the ONU", log.Fields{"device-id": aDeviceID})
+	gemportAllocIdMap := make(map[uint16]uint16)
+	for _, tcontGemList := range onuTP.mapPonAniConfig {
+		for gemPortID := range tcontGemList.mapGemPortParams {
+			gemportAllocIdMap[gemPortID] = tcontGemList.tcontParams.allocID
+
+		}
+	}
+	logger.Debugw(ctx, "Mapping between all the GEM ports to corresponding AllocID", log.Fields{"device-id": aDeviceID, "gemportAllocIDMapping": gemportAllocIdMap})
+	return gemportAllocIdMap
+}
diff --git a/internal/pkg/common/interfaces.go b/internal/pkg/common/interfaces.go
index e761a3d..0465398 100755
--- a/internal/pkg/common/interfaces.go
+++ b/internal/pkg/common/interfaces.go
@@ -192,6 +192,7 @@
 	GetAllBidirectionalGemPortIDsForOnu() []uint16
 	GetNumberOfConfiguredUsGemPorts(ctx context.Context) int
 	SetProfileToDelete(uint8, uint8, bool)
+	GetGEMportToAllocIDMappingForONU(ctx context.Context, aDeviceID string) map[uint16]uint16
 }
 
 // IuniVlanConfigFsm interface to uniVlanConfigFsm
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index bab59ef..3d12954 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -4770,6 +4770,13 @@
 	return resp
 }
 
+// getONUGEMStatsInfo - Get the GEM PM history data of the request ONT device
+func (dh *deviceHandler) getONUGEMStatsInfo(ctx context.Context) *extension.SingleGetValueResponse {
+	resp := dh.pOnuMetricsMgr.GetONUGEMCounters(ctx)
+	logger.Debugw(ctx, "Received response from AlarmManager for Active Alarms for DeviceEntry", log.Fields{"device-id": dh.DeviceID})
+	return resp
+}
+
 func (dh *deviceHandler) GetDeviceDeleteCommChan(ctx context.Context) chan bool {
 	return dh.deviceDeleteCommChan
 }
diff --git a/internal/pkg/core/openonu.go b/internal/pkg/core/openonu.go
index 4d68e8f..75ba35e 100755
--- a/internal/pkg/core/openonu.go
+++ b/internal/pkg/core/openonu.go
@@ -498,6 +498,10 @@
 			resp := handler.getOnuActiveAlarms(ctx)
 			logger.Infow(ctx, "Received response for on demand active alarms request ", log.Fields{"response": resp})
 			return resp, nil
+		case *extension.GetValueRequest_OnuAllocGemStats:
+			resp := handler.getONUGEMStatsInfo(ctx)
+			logger.Infow(ctx, "Received response for on demand active alarms request ", log.Fields{"response": resp})
+			return resp, nil
 		default:
 			return uniprt.PostUniStatusErrResponse(extension.GetValueResponse_UNSUPPORTED), nil
 		}
diff --git a/internal/pkg/pmmgr/onu_metrics_manager.go b/internal/pkg/pmmgr/onu_metrics_manager.go
index 11c6435..b60e5f3 100755
--- a/internal/pkg/pmmgr/onu_metrics_manager.go
+++ b/internal/pkg/pmmgr/onu_metrics_manager.go
@@ -4050,3 +4050,62 @@
 	defer mm.OnuMetricsManagerLock.Unlock()
 	mm.deviceDeletionInProgress = true
 }
+
+// Obtain the ONU GEM counters for the ONU device
+func (mm *OnuMetricsManager) GetONUGEMCounters(ctx context.Context) *extension.SingleGetValueResponse {
+
+	resp := extension.SingleGetValueResponse{
+		Response: &extension.GetValueResponse{
+			Status: extension.GetValueResponse_OK,
+			Response: &extension.GetValueResponse_OnuAllocGemStatsResponse{
+				OnuAllocGemStatsResponse: &extension.GetOnuAllocGemHistoryResponse{},
+			},
+		},
+	}
+
+	if mm.GetdeviceDeletionInProgress() {
+		logger.Infow(ctx, "device already deleted, return", log.Fields{"curr-state": mm.PAdaptFsm.PFsm.Current, "deviceID": mm.deviceID})
+		return nil
+	}
+
+	mm.OnuMetricsManagerLock.RLock()
+	defer mm.OnuMetricsManagerLock.RUnlock()
+
+	gemtoAllocId := mm.pDeviceHandler.GetOnuTP().GetGEMportToAllocIDMappingForONU(ctx, mm.deviceID)
+	allocIDtoGem := make(map[uint16][]uint16)
+	for key, value := range gemtoAllocId {
+		allocIDtoGem[value] = append(allocIDtoGem[value], key)
+	}
+
+	for allocID, gemSlice := range allocIDtoGem {
+		logger.Infow(ctx, "AllocID", log.Fields{"alloc-id": allocID})
+		allocIdGemData := extension.OnuAllocGemHistoryData{
+			OnuAllocIdInfo: &extension.OnuAllocHistoryData{},
+			GemPortInfo:    []*extension.OnuGemPortHistoryData{},
+		}
+		allocIdGemData.OnuAllocIdInfo.AllocId = uint32(allocID)
+
+		// Loop through each element in the slice
+		for _, gem := range gemSlice {
+			logger.Debugw(ctx, "Collecting stats for Gem: ", log.Fields{"GEMID": gem})
+			if metricInfo := mm.collectGemHistoryData(ctx, gem); metricInfo != nil {
+				logger.Infow(ctx, "Metricinfo for GEM", log.Fields{"GEMID": gem, "metricInfo": metricInfo})
+				gemHistoryData := extension.OnuGemPortHistoryData{}
+				gemHistoryData.GemId = uint32(gem)
+				gemHistoryData.TransmittedGEMFrames = uint32(metricInfo.GetMetrics()["transmitted_gem_frames"])
+				gemHistoryData.ReceivedGEMFrames = uint32(metricInfo.GetMetrics()["received_gem_frames"])
+				gemHistoryData.ReceivedPayloadBytes = uint32(metricInfo.GetMetrics()["received_payload_bytes"])
+				gemHistoryData.TransmittedPayloadBytes = uint32(metricInfo.GetMetrics()["transmitted_payload_bytes"])
+				gemHistoryData.EncryptionKeyErrors = uint32(metricInfo.GetMetrics()["encryption_key_errors"])
+				allocIdGemData.GemPortInfo = append(allocIdGemData.GemPortInfo, &gemHistoryData)
+				logger.Debugw(ctx, " allocIdGemData value ", log.Fields{"AllocIDGemData": allocIdGemData})
+
+			}
+		}
+		resp.Response.GetOnuAllocGemStatsResponse().OnuAllocGemHistoryData = append(resp.Response.GetOnuAllocGemStatsResponse().OnuAllocGemHistoryData, &allocIdGemData)
+	}
+
+	logger.Debugw(ctx, "Request to fetch GEM Performance Counters  ", log.Fields{"device-id": mm.deviceID, "response": resp})
+	return &resp
+
+}
