diff --git a/VERSION b/VERSION
index abd4105..3a4036f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.2.4
+0.2.5
diff --git a/internal/bbsim/devices/messageTypes.go b/internal/bbsim/devices/messageTypes.go
index 8bb1d25..5652520 100644
--- a/internal/bbsim/devices/messageTypes.go
+++ b/internal/bbsim/devices/messageTypes.go
@@ -31,7 +31,8 @@
 	OnuDiscIndication MessageType = 3
 	OnuIndication     MessageType = 4
 	OMCI              MessageType = 5
-	FlowUpdate        MessageType = 6
+	FlowAdd           MessageType = 6
+	FlowRemoved       MessageType = 18
 	StartEAPOL        MessageType = 7
 	StartDHCP         MessageType = 8
 	OnuPacketOut      MessageType = 9
@@ -58,7 +59,7 @@
 		"OnuDiscIndication",
 		"OnuIndication",
 		"OMCI",
-		"FlowUpdate",
+		"FlowAdd",
 		"StartEAPOL",
 		"StartDHCP",
 		"OnuPacketOut",
@@ -69,6 +70,7 @@
 		"IGMPMembershipReportV2",
 		"IGMPLeaveGroup",
 		"IGMPMembershipReportV3",
+		"FlowRemoved",
 	}
 	return names[m]
 }
@@ -138,7 +140,7 @@
 
 const (
 	UP   OperState = iota
-	DOWN           // The device has been discovered, but not yet activated
+	DOWN  // The device has been discovered, but not yet activated
 )
 
 func (m OperState) String() string {
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index a2e3229..700fdeb 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -162,7 +162,7 @@
 			// create ONU devices
 			for j := 0; j < olt.NumOnuPerPon; j++ {
 				delay := time.Duration(olt.Delay*j) * time.Millisecond
-				o := CreateONU(&olt, *p, uint32(j+1), options.BBSim.STag, availableCTag, options.BBSim.EnableAuth, options.BBSim.EnableDhcp, delay, isMock)
+				o := CreateONU(&olt, p, uint32(j+1), options.BBSim.STag, availableCTag, options.BBSim.EnableAuth, options.BBSim.EnableDhcp, delay, isMock)
 				p.Onus = append(p.Onus, o)
 				availableCTag = availableCTag + 1
 			}
@@ -178,7 +178,7 @@
 			// create ONU devices
 			for j := 0; j < olt.NumOnuPerPon; j++ {
 				delay := time.Duration(olt.Delay*j) * time.Millisecond
-				o := CreateONU(&olt, *p, uint32(j+1), availableSTag, options.BBSim.CTag, options.BBSim.EnableAuth, options.BBSim.EnableDhcp, delay, isMock)
+				o := CreateONU(&olt, p, uint32(j+1), availableSTag, options.BBSim.CTag, options.BBSim.EnableAuth, options.BBSim.EnableDhcp, delay, isMock)
 				p.Onus = append(p.Onus, o)
 				availableSTag = availableSTag + 1
 			}
@@ -1046,11 +1046,11 @@
 	if flow.AccessIntfId == -1 {
 		oltLogger.WithFields(log.Fields{
 			"FlowId": flow.FlowId,
-		}).Debugf("This is an OLT flow")
+		}).Debug("Adding OLT flow")
 	} else if flow.FlowType == "multicast" {
 		oltLogger.WithFields(log.Fields{
 			"FlowId": flow.FlowId,
-		}).Debugf("This is a multicast flow")
+		}).Debug("Adding OLT multicast flow")
 	} else {
 		pon, err := o.GetPonById(uint32(flow.AccessIntfId))
 		if err != nil {
@@ -1078,7 +1078,7 @@
 		}
 
 		msg := Message{
-			Type: FlowUpdate,
+			Type: FlowAdd,
 			Data: OnuFlowUpdateMessage{
 				PonPortID: pon.ID,
 				OnuID:     onu.ID,
@@ -1093,10 +1093,11 @@
 
 // FlowRemove request from VOLTHA
 func (o OltDevice) FlowRemove(_ context.Context, flow *openolt.Flow) (*openolt.Empty, error) {
+
 	oltLogger.WithFields(log.Fields{
-		"FlowId":   flow.FlowId,
-		"FlowType": flow.FlowType,
-	}).Tracef("OLT receives FlowRemove")
+		"FlowId":           flow.FlowId,
+		"FlowType":         flow.FlowType,
+	}).Debug("OLT receives FlowRemove")
 
 	if !o.enablePerf { // remove only if flow were stored
 		flowKey := FlowKey{
@@ -1130,6 +1131,36 @@
 		// delete from olt flows
 		delete(o.Flows, flowKey)
 	}
+
+	if flow.AccessIntfId == -1 {
+		oltLogger.WithFields(log.Fields{
+			"FlowId": flow.FlowId,
+		}).Debug("Removing OLT flow")
+	} else if flow.FlowType == "multicast" {
+		oltLogger.WithFields(log.Fields{
+			"FlowId": flow.FlowId,
+		}).Debug("Removing OLT multicast flow")
+	} else {
+
+		onu, err := o.GetOnuByFlowId(flow.FlowId)
+		if err != nil {
+			oltLogger.WithFields(log.Fields{
+				"OnuId":  flow.OnuId,
+				"IntfId": flow.AccessIntfId,
+				"err":    err,
+			}).Error("Can't find Onu")
+			return nil, err
+		}
+
+		msg := Message{
+			Type: FlowRemoved,
+			Data: OnuFlowUpdateMessage{
+				Flow:      flow,
+			},
+		}
+		onu.Channel <- msg
+	}
+
 	return new(openolt.Empty), nil
 }
 
@@ -1141,6 +1172,19 @@
 	return &res, nil
 }
 
+func (o *OltDevice) GetOnuByFlowId(flowId uint32) (*Onu, error) {
+	for _, pon := range o.Pons {
+		for _, onu := range pon.Onus {
+			for _, fId := range onu.FlowIds {
+				if fId == flowId {
+					return onu, nil
+				}
+			}
+		}
+	}
+	return nil, errors.New(fmt.Sprintf("Cannot find Onu by flowId %d", flowId))
+}
+
 func (o OltDevice) GetDeviceInfo(context.Context, *openolt.Empty) (*openolt.DeviceInfo, error) {
 
 	oltLogger.WithFields(log.Fields{
diff --git a/internal/bbsim/devices/olt_test.go b/internal/bbsim/devices/olt_test.go
index bcb6f77..747ddf8 100644
--- a/internal/bbsim/devices/olt_test.go
+++ b/internal/bbsim/devices/olt_test.go
@@ -17,6 +17,7 @@
 package devices
 
 import (
+	"github.com/opencord/voltha-protos/v2/go/openolt"
 	"gotest.tools/assert"
 	"net"
 	"testing"
@@ -36,7 +37,7 @@
 			onuId := uint32(i + j)
 			onu := Onu{
 				ID:        onuId,
-				PonPort:   pon,
+				PonPort:   &pon,
 				PonPortID: pon.ID,
 				HwAddress: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, byte(pon.ID), byte(onuId)},
 			}
@@ -105,3 +106,42 @@
 
 	assert.Equal(t, err.Error(), "cannot-find-onu-by-mac-address-2e:60:70:13:03:03")
 }
+
+func Test_Olt_GetOnuByFlowId(t *testing.T) {
+	numPon := 4
+	numOnu := 4
+
+	olt := createMockOlt(numPon, numOnu)
+
+	// Add the flows to onus (to be found)
+	onu1, _ := olt.FindOnuBySn("BBSM00000303")
+	flow1 := openolt.Flow{
+		FlowId: 64,
+		Classifier: &openolt.Classifier{},
+	}
+	msg1 := OnuFlowUpdateMessage{
+		OnuID:     onu1.ID,
+		PonPortID: onu1.PonPortID,
+		Flow:      &flow1,
+	}
+	onu1.handleFlowAdd(msg1)
+
+	onu2, _ := olt.FindOnuBySn("BBSM00000103")
+	flow2 := openolt.Flow{
+		FlowId: 72,
+		Classifier: &openolt.Classifier{},
+	}
+	msg2 := OnuFlowUpdateMessage{
+		OnuID:     onu2.ID,
+		PonPortID: onu2.PonPortID,
+		Flow:      &flow2,
+	}
+	onu2.handleFlowAdd(msg2)
+
+
+
+	found, err := olt.GetOnuByFlowId(flow1.FlowId)
+
+	assert.Equal(t, err, nil)
+	assert.Equal(t, found.Sn(), onu1.Sn())
+}
\ No newline at end of file
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 78569f5..1acb063 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -26,7 +26,7 @@
 
 	"github.com/cboling/omci"
 	"github.com/google/gopacket/layers"
-	backoff "github.com/jpillora/backoff"
+	"github.com/jpillora/backoff"
 	"github.com/looplab/fsm"
 	"github.com/opencord/bbsim/internal/bbsim/packetHandlers"
 	"github.com/opencord/bbsim/internal/bbsim/responders/dhcp"
@@ -52,7 +52,7 @@
 type Onu struct {
 	ID                  uint32
 	PonPortID           uint32
-	PonPort             PonPort
+	PonPort             *PonPort
 	STag                int
 	CTag                int
 	Auth                bool // automatically start EAPOL if set to true
@@ -71,6 +71,7 @@
 	EapolFlowReceived bool
 	DhcpFlowReceived  bool
 	Flows             []FlowKey
+	FlowIds           []uint32 // keep track of the flows we currently have in the ONU
 
 	OperState    *fsm.FSM
 	SerialNumber *openolt.SerialNumber
@@ -79,10 +80,9 @@
 	GemPortChannels []chan bool  // this channels are used to notify everyone that is interested that a GemPort has been added
 
 	// OMCI params
-	tid        uint16
-	hpTid      uint16
-	seqNumber  uint16
-	HasGemPort bool
+	tid       uint16
+	hpTid     uint16
+	seqNumber uint16
 
 	DoneChannel       chan bool // this channel is used to signal once the onu is complete (when the struct is used by BBR)
 	TrafficSchedulers *tech_profile.TrafficSchedulers
@@ -98,10 +98,10 @@
 	return listener
 }
 
-func CreateONU(olt *OltDevice, pon PonPort, id uint32, sTag int, cTag int, auth bool, dhcp bool, delay time.Duration, isMock bool) *Onu {
+func CreateONU(olt *OltDevice, pon *PonPort, id uint32, sTag int, cTag int, auth bool, dhcp bool, delay time.Duration, isMock bool) *Onu {
 	b := &backoff.Backoff{
 		//These are the defaults
-		Min:    1 * time.Second,
+		Min:    5 * time.Second,
 		Max:    35 * time.Second,
 		Factor: 1.5,
 		Jitter: false,
@@ -401,9 +401,12 @@
 			case OMCI:
 				msg, _ := message.Data.(OmciMessage)
 				o.handleOmciMessage(msg, stream)
-			case FlowUpdate:
+			case FlowAdd:
 				msg, _ := message.Data.(OnuFlowUpdateMessage)
-				o.handleFlowUpdate(msg)
+				o.handleFlowAdd(msg)
+			case FlowRemoved:
+				msg, _ := message.Data.(OnuFlowUpdateMessage)
+				o.handleFlowRemove(msg)
 			case StartEAPOL:
 				o.handleEAPOLStart(stream)
 			case StartDHCP:
@@ -751,7 +754,7 @@
 	o.ID = id
 }
 
-func (o *Onu) handleFlowUpdate(msg OnuFlowUpdateMessage) {
+func (o *Onu) handleFlowAdd(msg OnuFlowUpdateMessage) {
 	onuLogger.WithFields(log.Fields{
 		"DstPort":          msg.Flow.Classifier.DstPort,
 		"EthType":          fmt.Sprintf("%x", msg.Flow.Classifier.EthType),
@@ -768,7 +771,7 @@
 		"SrcPort":          msg.Flow.Classifier.SrcPort,
 		"UniID":            msg.Flow.UniId,
 		"ClassifierOPbits": msg.Flow.Classifier.OPbits,
-	}).Debug("ONU receives Flow")
+	}).Debug("ONU receives FlowAdd")
 
 	if msg.Flow.UniId != 0 {
 		// as of now BBSim only support a single UNI, so ignore everything that is not targeted to it
@@ -780,6 +783,8 @@
 		return
 	}
 
+	o.FlowIds = append(o.FlowIds, msg.Flow.FlowId)
+
 	if msg.Flow.Classifier.EthType == uint32(layers.EthernetTypeEAPOL) && msg.Flow.Classifier.OVid == 4091 {
 		// NOTE storing the PortNO, it's needed when sending PacketIndications
 		o.storePortNumber(uint32(msg.Flow.PortNo))
@@ -860,6 +865,38 @@
 	}
 }
 
+func (o *Onu) handleFlowRemove(msg OnuFlowUpdateMessage) {
+	onuLogger.WithFields(log.Fields{
+		"IntfId":       o.PonPortID,
+		"OnuId":        o.ID,
+		"SerialNumber": o.Sn(),
+		"FlowId":       msg.Flow.FlowId,
+		"FlowType":     msg.Flow.FlowType,
+	}).Debug("ONU receives FlowRemove")
+
+	for idx, flow := range o.FlowIds {
+		// If the gemport is found, delete it from local cache.
+		if flow == msg.Flow.FlowId {
+			o.FlowIds = append(o.FlowIds[:idx], o.FlowIds[idx+1:]...)
+			break
+		}
+	}
+
+	if len(o.FlowIds) == 0 {
+		onuLogger.WithFields(log.Fields{
+			"IntfId":       o.PonPortID,
+			"OnuId":        o.ID,
+			"SerialNumber": o.Sn(),
+		}).Info("Resetting GemPort")
+		o.GemPortAdded = false
+
+		// TODO ideally we should keep track of the flow type (and not only the ID)
+		// so that we can properly set these two flag when the flow is removed
+		o.EapolFlowReceived = false
+		o.DhcpFlowReceived = false
+	}
+}
+
 // HexDecode converts the hex encoding to binary
 func HexDecode(pkt []byte) []byte {
 	p := make([]byte, len(pkt)/2)
@@ -964,12 +1001,12 @@
 		// In the same way we can create a GemPort even without setting up UNIs/TConts/...
 		// but we need the GemPort to trigger the state change
 
-		if !o.HasGemPort {
+		if !o.GemPortAdded {
 			// NOTE this sends a CreateRequestType and BBSim replies with a CreateResponseType
 			// thus we send this request only once
 			gemReq, _ := omcilib.CreateGemPortRequest(o.getNextTid(false))
 			sendOmciMsg(gemReq, o.PonPortID, o.ID, o.SerialNumber, "CreateGemPortRequest", client)
-			o.HasGemPort = true
+			o.GemPortAdded = true
 		} else {
 			if err := o.InternalState.Event("send_eapol_flow"); err != nil {
 				onuLogger.WithFields(log.Fields{
diff --git a/internal/bbsim/devices/onu_flow_test.go b/internal/bbsim/devices/onu_flow_test.go
index 9ab8abb..b01859e 100644
--- a/internal/bbsim/devices/onu_flow_test.go
+++ b/internal/bbsim/devices/onu_flow_test.go
@@ -47,10 +47,28 @@
 	assert.Equal(t, client.FlowAddSpy.Calls[1].PortNo, onu.ID)
 }
 
+// checks that the FlowId is added to the list
+func Test_HandleFlowAddFlowId(t *testing.T) {
+	onu := createMockOnu(1, 1, 900, 900, true, false)
+
+	flow := openolt.Flow{
+		FlowId: 64,
+		Classifier: &openolt.Classifier{},
+	}
+	msg := OnuFlowUpdateMessage{
+		OnuID:     onu.ID,
+		PonPortID: onu.PonPortID,
+		Flow:      &flow,
+	}
+	onu.handleFlowAdd(msg)
+	assert.Equal(t, len(onu.FlowIds), 1)
+	assert.Equal(t, onu.FlowIds[0], uint32(64))
+}
+
 // validates that when an ONU receives an EAPOL flow for UNI 0
 // and the GemPort has already been configured
 // it transition to auth_started state
-func Test_HandleFlowUpdateEapolWithGem(t *testing.T) {
+func Test_HandleFlowAddEapolWithGem(t *testing.T) {
 
 	onu := createMockOnu(1, 1, 900, 900, true, false)
 
@@ -85,13 +103,13 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "auth_started")
 }
 
 // validates that when an ONU receives an EAPOL flow for UNI that is not 0
 // no action is taken (this is independent of GemPort status
-func Test_HandleFlowUpdateEapolWrongUNI(t *testing.T) {
+func Test_HandleFlowAddEapolWrongUNI(t *testing.T) {
 
 	onu := createMockOnu(1, 1, 900, 900, true, false)
 
@@ -126,14 +144,14 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "enabled")
 }
 
 // validates that when an ONU receives an EAPOL flow for UNI 0
 // and the GemPort has not yet been configured
 // it transition to auth_started state
-func Test_HandleFlowUpdateEapolWithoutGem(t *testing.T) {
+func Test_HandleFlowAddEapolWithoutGem(t *testing.T) {
 
 	onu := createMockOnu(1, 1, 900, 900, true, false)
 	onu.GemPortAdded = false
@@ -169,7 +187,7 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 
 	wg := sync.WaitGroup{}
 	wg.Add(1)
@@ -191,7 +209,7 @@
 
 // validates that when an ONU receives an EAPOL flow for UNI 0
 // but the noAuth bit is set no action is taken
-func Test_HandleFlowUpdateEapolNoAuth(t *testing.T) {
+func Test_HandleFlowAddEapolNoAuth(t *testing.T) {
 	onu := createMockOnu(1, 1, 900, 900, false, false)
 
 	onu.InternalState = fsm.NewFSM(
@@ -225,14 +243,14 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "enabled")
 }
 
 // validates that when an ONU receives a DHCP flow for UNI 0 and pbit 0
 // and the GemPort has already been configured
 // it transition to dhcp_started state
-func Test_HandleFlowUpdateDhcp(t *testing.T) {
+func Test_HandleFlowAddDhcp(t *testing.T) {
 	onu := createMockOnu(1, 1, 900, 900, false, true)
 
 	onu.InternalState = fsm.NewFSM(
@@ -268,7 +286,7 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "dhcp_started")
 	assert.Equal(t, onu.DhcpFlowReceived, true)
 }
@@ -276,7 +294,7 @@
 // validates that when an ONU receives a DHCP flow for UNI 0 and pbit 255
 // and the GemPort has already been configured
 // it transition to dhcp_started state
-func Test_HandleFlowUpdateDhcpPBit255(t *testing.T) {
+func Test_HandleFlowAddDhcpPBit255(t *testing.T) {
 	onu := createMockOnu(1, 1, 900, 900, false, true)
 
 	onu.InternalState = fsm.NewFSM(
@@ -312,7 +330,7 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "dhcp_started")
 	assert.Equal(t, onu.DhcpFlowReceived, true)
 }
@@ -320,7 +338,7 @@
 // validates that when an ONU receives a DHCP flow for UNI 0 and pbit not 0 or 255
 // and the GemPort has already been configured
 // it ignores the message
-func Test_HandleFlowUpdateDhcpIgnoreByPbit(t *testing.T) {
+func Test_HandleFlowAddDhcpIgnoreByPbit(t *testing.T) {
 	onu := createMockOnu(1, 1, 900, 900, false, true)
 
 	onu.InternalState = fsm.NewFSM(
@@ -356,14 +374,14 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "eap_response_success_received")
 	assert.Equal(t, onu.DhcpFlowReceived, false)
 }
 
 // validates that when an ONU receives a DHCP flow for UNI 0
 // but the noDchp bit is set no action is taken
-func Test_HandleFlowUpdateDhcpNoDhcp(t *testing.T) {
+func Test_HandleFlowAddDhcpNoDhcp(t *testing.T) {
 	onu := createMockOnu(1, 1, 900, 900, false, false)
 
 	onu.InternalState = fsm.NewFSM(
@@ -398,7 +416,7 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 	assert.Equal(t, onu.InternalState.Current(), "eap_response_success_received")
 	assert.Equal(t, onu.DhcpFlowReceived, false)
 }
@@ -406,9 +424,9 @@
 // validates that when an ONU receives a DHCP flow for UNI 0 and pbit not 0 or 255
 // and the GemPort has not already been configured
 // it transition to dhcp_started state
-func Test_HandleFlowUpdateDhcpWithoutGem(t *testing.T) {
-	// NOTE that this feature is required when we do DHCP with no eapol
-	// as the DHCP flow will be the first one received
+func Test_HandleFlowAddDhcpWithoutGem(t *testing.T) {
+	// NOTE that this feature is required as there is no guarantee that the gemport is the same
+	// one we received with the EAPOL flow
 	onu := createMockOnu(1, 1, 900, 900, false, true)
 
 	onu.GemPortAdded = false
@@ -446,7 +464,7 @@
 		Flow:      &flow,
 	}
 
-	onu.handleFlowUpdate(msg)
+	onu.handleFlowAdd(msg)
 
 	wg := sync.WaitGroup{}
 	wg.Add(1)
@@ -465,3 +483,51 @@
 	}(&wg)
 	wg.Wait()
 }
+
+// checks that we only remove the correct flow
+func Test_HandleFlowRemoveFlowId(t *testing.T) {
+	onu := createMockOnu(1, 1, 900, 900, true, false)
+
+	onu.FlowIds = []uint32{1, 2, 34, 64, 92}
+
+	flow := openolt.Flow{
+		FlowId: 64,
+		Classifier: &openolt.Classifier{},
+	}
+	msg := OnuFlowUpdateMessage{
+		OnuID:     onu.ID,
+		PonPortID: onu.PonPortID,
+		Flow:      &flow,
+	}
+	onu.handleFlowRemove(msg)
+	assert.Equal(t, len(onu.FlowIds), 4)
+	assert.Equal(t, onu.FlowIds[0], uint32(1))
+	assert.Equal(t, onu.FlowIds[1], uint32(2))
+	assert.Equal(t, onu.FlowIds[2], uint32(34))
+	assert.Equal(t, onu.FlowIds[3], uint32(92))
+}
+
+// checks that when the last flow is removed we reset the stored flags in the ONU
+func Test_HandleFlowRemoveFlowId_LastFlow(t *testing.T) {
+	onu := createMockOnu(1, 1, 900, 900, true, false)
+	onu.GemPortAdded = true
+	onu.DhcpFlowReceived = true
+	onu.EapolFlowReceived = true
+
+	onu.FlowIds = []uint32{64}
+
+	flow := openolt.Flow{
+		FlowId: 64,
+		Classifier: &openolt.Classifier{},
+	}
+	msg := OnuFlowUpdateMessage{
+		OnuID:     onu.ID,
+		PonPortID: onu.PonPortID,
+		Flow:      &flow,
+	}
+	onu.handleFlowRemove(msg)
+	assert.Equal(t, len(onu.FlowIds), 0)
+	assert.Equal(t, onu.GemPortAdded, false)
+	assert.Equal(t, onu.DhcpFlowReceived, false)
+	assert.Equal(t, onu.EapolFlowReceived, false)
+}
\ No newline at end of file
diff --git a/internal/bbsim/devices/onu_test.go b/internal/bbsim/devices/onu_test.go
index 35b75e8..a3f1276 100644
--- a/internal/bbsim/devices/onu_test.go
+++ b/internal/bbsim/devices/onu_test.go
@@ -32,7 +32,7 @@
 		Olt: &olt,
 	}
 
-	onu := CreateONU(&olt, pon, 1, 900, 900, true, false, 0, false)
+	onu := CreateONU(&olt, &pon, 1, 900, 900, true, false, 0, false)
 
 	assert.Equal(t, onu.Sn(), "BBSM00000101")
 	assert.Equal(t, onu.STag, 900)
diff --git a/internal/bbsim/devices/onu_test_helpers.go b/internal/bbsim/devices/onu_test_helpers.go
index 5a991d6..b35dff0 100644
--- a/internal/bbsim/devices/onu_test_helpers.go
+++ b/internal/bbsim/devices/onu_test_helpers.go
@@ -131,7 +131,7 @@
 		ID:  1,
 		Olt: &olt,
 	}
-	onu := CreateONU(&olt, pon, 1, 900, 900, false, false, time.Duration(1*time.Millisecond), true)
+	onu := CreateONU(&olt, &pon, 1, 900, 900, false, false, time.Duration(1*time.Millisecond), true)
 	// NOTE we need this in order to create the OnuChannel
 	onu.InternalState.Event("initialize")
 	onu.DiscoveryRetryDelay = 100 * time.Millisecond
diff --git a/internal/bbsim/responders/dhcp/dhcp.go b/internal/bbsim/responders/dhcp/dhcp.go
index 628084b..1ce71d6 100644
--- a/internal/bbsim/responders/dhcp/dhcp.go
+++ b/internal/bbsim/responders/dhcp/dhcp.go
@@ -251,6 +251,14 @@
 		}).Errorf("Can't retrieve GemPortId: %s", err)
 		return err
 	}
+
+	log.WithFields(log.Fields{
+		"OnuId":  msg.OnuId,
+		"IntfId": msg.IntfId,
+		"GemPort": gemid,
+		"Type": "DHCP",
+	}).Trace("sending-pkt")
+
 	data := &openolt.Indication_PktInd{PktInd: &openolt.PacketIndication{
 		IntfType:  "pon",
 		IntfId:    msg.IntfId,
diff --git a/internal/bbsim/responders/eapol/eapol.go b/internal/bbsim/responders/eapol/eapol.go
index e40e3cd..7ee36fc 100644
--- a/internal/bbsim/responders/eapol/eapol.go
+++ b/internal/bbsim/responders/eapol/eapol.go
@@ -47,6 +47,14 @@
 		}).Errorf("Can't retrieve GemPortId: %s", err)
 		return
 	}
+
+	log.WithFields(log.Fields{
+		"OnuId":  msg.OnuId,
+		"IntfId": msg.IntfId,
+		"GemPort": gemid,
+		"Type": "EAPOL",
+	}).Trace("sending-pkt")
+
 	data := &openolt.Indication_PktInd{PktInd: &openolt.PacketIndication{
 		IntfType:  "pon",
 		IntfId:    msg.IntfId,
