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,
