diff --git a/core/core_server.go b/core/core_server.go
index 50a2224..ce55024 100644
--- a/core/core_server.go
+++ b/core/core_server.go
@@ -214,7 +214,7 @@
 }
 
 func (s *Server) updateOnuIntState (intfid uint32, onuid uint32, state device.DeviceState) error {
-	onu, err := s.GetOnuByID(onuid)	//TODO: IntfID should be included ?
+	onu, err := s.GetOnuByID(onuid, intfid)
 	if err != nil {
 		return err
 	}
@@ -458,7 +458,7 @@
 				continue
 			}
 
-			onu, err := s.GetOnuByID(onuid)
+			onu, err := s.GetOnuByID(onuid, intfid)
 			if err != nil {
 				logger.Error("Failed to GetOnuByID:%d", onuid)
 				continue
@@ -496,10 +496,11 @@
 				continue
 			}
 			onuid := nnipkt.Info.onuid
-			onu, _ := s.GetOnuByID(onuid)
+			intfid := nnipkt.Info.intfid
+			onu, _ := s.GetOnuByID(onuid, intfid)
 
 			utils.LoggerWithOnu(onu).Info("Received packet from NNI in grpc Server.")
-			intfid := nnipkt.Info.intfid
+
 			pkt := nnipkt.Pkt
 			data = &openolt.Indication_PktInd{PktInd: &openolt.PacketIndication{IntfType: "nni", IntfId: intfid, Pkt: pkt.Data()}}
 			if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
@@ -517,7 +518,7 @@
 
 func (s *Server) onuPacketOut(intfid uint32, onuid uint32, rawpkt gopacket.Packet) error {
 	layerEth := rawpkt.Layer(layers.LayerTypeEthernet)
-	onu, _ := s.GetOnuByID(onuid)
+	onu, _ := s.GetOnuByID(onuid, intfid)
 
 	if layerEth != nil {
 		pkt, _ := layerEth.(*layers.Ethernet)
@@ -599,7 +600,7 @@
 	if err != nil {
 		logger.Warn("Failed to getGemPortID from OMCI lib: %s", err)
 	}
-	onu, err := s.GetOnuByID(onuid)
+	onu, err := s.GetOnuByID(onuid, intfid)
 	if err != nil {
 		logger.Error("Failed to getGemPortID: %s", err)
 		return 0, err
@@ -621,16 +622,14 @@
 	return nil, err
 }
 
-func (s *Server) GetOnuByID(onuid uint32) (*device.Onu, error) {
-	return getOnuByID(s.Onumap, onuid)
+func (s *Server) GetOnuByID(onuid uint32, intfid uint32) (*device.Onu, error) {
+	return getOnuByID(s.Onumap, onuid, intfid)
 }
 
-func getOnuByID(onumap map[uint32][]*device.Onu, onuid uint32) (*device.Onu, error) {
-	for _, onus := range onumap {
-		for _, onu := range onus {
-			if onu.OnuID == onuid {
-				return onu, nil
-			}
+func getOnuByID(onumap map[uint32][]*device.Onu, onuid uint32, intfid uint32) (*device.Onu, error) {
+	for _, onu := range onumap[intfid] {
+		if onu.OnuID == onuid {
+			return onu, nil
 		}
 	}
 	err := errors.New("No matched OnuID is found ")
diff --git a/core/grpc_service.go b/core/grpc_service.go
index 7a66fc0..bc92483 100644
--- a/core/grpc_service.go
+++ b/core/grpc_service.go
@@ -120,7 +120,7 @@
 }
 
 func (s *Server) OnuPacketOut(c context.Context, packet *openolt.OnuPacket) (*openolt.Empty, error) {
-	onu, _ := s.GetOnuByID(packet.OnuId)
+	onu, _ := s.GetOnuByID(packet.OnuId, packet.IntfId)
 	utils.LoggerWithOnu(onu).Debugf("OLT %d receives OnuPacketOut () to IF-ID:%d ONU-ID %d.", s.Olt.ID, packet.IntfId, packet.OnuId)
 	onuid := packet.OnuId
 	intfid := packet.IntfId
@@ -143,7 +143,7 @@
 
 func (s *Server) FlowAdd(c context.Context, flow *openolt.Flow) (*openolt.Empty, error) {
 	logger.Debug("OLT %d receives FlowAdd() IntfID:%d OnuID:%d EType:%x GemPortID:%d", s.Olt.ID, flow.AccessIntfId, flow.OnuId, flow.Classifier.EthType, flow.GemportId)
-	onu, err := s.GetOnuByID(uint32(flow.OnuId))
+	onu, err := s.GetOnuByID(uint32(flow.OnuId), uint32(flow.AccessIntfId))
 
 	if err == nil {
 		intfid := onu.IntfID
@@ -167,7 +167,7 @@
 }
 
 func (s *Server) FlowRemove(c context.Context, flow *openolt.Flow) (*openolt.Empty, error) {
-	onu, _ := s.GetOnuByID(uint32(flow.OnuId))
+	onu, _ := s.GetOnuByID(uint32(flow.OnuId), uint32(flow.AccessIntfId))
 
 	utils.LoggerWithOnu(onu).WithFields(log.Fields{
 		"olt":   s.Olt.ID,
