diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 96ee5f1..bb5be2e 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -1597,9 +1597,84 @@
 	return new(openolt.Empty), nil
 }
 
-func (o *OltDevice) GetOnuInfo(context context.Context, packet *openolt.Onu) (*openolt.OnuIndication, error) {
-	oltLogger.Error("GetOnuInfo not implemented")
-	return new(openolt.OnuIndication), nil
+func (o *OltDevice) GetOnuInfo(context context.Context, packet *openolt.Onu) (*openolt.OnuInfo, error) {
+	pon, err := o.GetPonById(packet.GetIntfId())
+	if err != nil {
+		log.WithFields(log.Fields{
+			"OnuId":  packet.GetOnuId(),
+			"IntfId": packet.GetIntfId(),
+			"err":    err,
+		}).Error("Can't find PonPort")
+		return nil, err
+	}
+	onu, _ := pon.GetOnuById(packet.GetOnuId())
+	if err != nil {
+		log.WithFields(log.Fields{
+			"OnuId":  packet.GetOnuId(),
+			"IntfId": packet.GetIntfId(),
+			"err":    err,
+		}).Error("Can't find Onu")
+		return nil, err
+	}
+
+	resp := new(openolt.OnuInfo)
+	resp.OnuId = packet.GetOnuId()
+	if onu.OperState.Current() == "up" {
+		resp.Losi = openolt.AlarmState_OFF
+		resp.Lofi = openolt.AlarmState_OFF
+		resp.Loami = openolt.AlarmState_OFF
+	} else if onu.OperState.Current() == "down" {
+		resp.Losi = openolt.AlarmState_ON
+		resp.Lofi = openolt.AlarmState_ON
+		resp.Loami = openolt.AlarmState_ON
+	}
+	if onu.InternalState.Current() == OnuStateEnabled {
+		resp.State = openolt.OnuInfo_ACTIVE
+	} else if onu.InternalState.Current() == OnuStateDisabled {
+		resp.State = openolt.OnuInfo_INACTIVE
+	} else if onu.InternalState.Current() == OnuStateCreated || (onu.InternalState.Current() == OnuStateInitialized) {
+		resp.State = openolt.OnuInfo_NOT_CONFIGURED
+	} else {
+		resp.State = openolt.OnuInfo_UNKNOWN
+	}
+	log.WithFields(log.Fields{
+		"OnuId":    packet.GetOnuId(),
+		"IntfId":   packet.GetIntfId(),
+		"response": resp,
+	}).Info("Response for onu info")
+	return resp, nil
+}
+
+func (o *OltDevice) GetPonInterfaceInfo(context context.Context, packet *openolt.Interface) (*openolt.PonIntfInfo, error) {
+	ponPort, err := o.GetPonById(packet.GetIntfId())
+	if err != nil {
+		log.WithFields(log.Fields{
+			"IntfId": packet.GetIntfId(),
+			"err":    err,
+		}).Error("Can't find PonPort")
+		return nil, err
+	}
+	resp := new(openolt.PonIntfInfo)
+	resp.IntfId = packet.GetIntfId()
+	if ponPort.OperState.Current() == "up" {
+		resp.Los = openolt.AlarmState_OFF
+	} else if ponPort.OperState.Current() == "down" {
+		resp.Los = openolt.AlarmState_ON
+	}
+	if ponPort.InternalState.Current() == "enabled" {
+		resp.State = openolt.PonIntfInfo_ACTIVE_WORKING
+	} else if ponPort.InternalState.Current() == "disabled" {
+		resp.State = openolt.PonIntfInfo_INACTIVE
+	} else if ponPort.InternalState.Current() == "created" {
+		resp.State = openolt.PonIntfInfo_ACTIVE_STANDBY
+	} else {
+		resp.State = openolt.PonIntfInfo_UNKNOWN
+	}
+	log.WithFields(log.Fields{
+		"IntfId":   packet.GetIntfId(),
+		"response": resp,
+	}).Info("Response for pon info")
+	return resp, nil
 }
 
 func (o *OltDevice) GetPonIf(context context.Context, packet *openolt.Interface) (*openolt.IntfIndication, error) {
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index ebe08d6..43987f1 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -1838,23 +1838,34 @@
 		"OnuId":  onu.ID,
 		"OnuSn":  onu.Sn(),
 	}).Debug("Send ONU Re-Discovery")
+	if onu.InternalState.Current() != OnuStateDiscovered {
+		// ONU Re-Discovery
+		if err := onu.InternalState.Event(OnuTxInitialize); err != nil {
+			log.WithFields(log.Fields{
+				"IntfId": onu.PonPortID,
+				"OnuSn":  onu.Sn(),
+				"OnuId":  onu.ID,
+			}).Infof("Failed to transition ONU to %s state: %s", OnuStateInitialized, err.Error())
+		}
 
-	// ONU Re-Discovery
-	if err := onu.InternalState.Event(OnuTxInitialize); err != nil {
-		log.WithFields(log.Fields{
-			"IntfId": onu.PonPortID,
-			"OnuSn":  onu.Sn(),
-			"OnuId":  onu.ID,
-		}).Infof("Failed to transition ONU to %s state: %s", OnuStateInitialized, err.Error())
+		if err := onu.InternalState.Event(OnuTxDiscover); err != nil {
+			log.WithFields(log.Fields{
+				"IntfId": onu.PonPortID,
+				"OnuSn":  onu.Sn(),
+				"OnuId":  onu.ID,
+			}).Infof("Failed to transition ONU to %s state: %s", OnuStateDiscovered, err.Error())
+		}
+	} else {
+		//if onu is already discovered dont change the state ut rather fire the indication again (this case happens if voltha misses the indications)
+		msg := bbsim.Message{
+			Type: bbsim.OnuDiscIndication,
+			Data: bbsim.OnuDiscIndicationMessage{
+				OperState: bbsim.UP,
+			},
+		}
+		onu.Channel <- msg
 	}
 
-	if err := onu.InternalState.Event(OnuTxDiscover); err != nil {
-		log.WithFields(log.Fields{
-			"IntfId": onu.PonPortID,
-			"OnuSn":  onu.Sn(),
-			"OnuId":  onu.ID,
-		}).Infof("Failed to transition ONU to %s state: %s", OnuStateDiscovered, err.Error())
-	}
 }
 
 // deprecated, delegate this to the uniPort
diff --git a/internal/bbsim/devices/onu_test_helpers.go b/internal/bbsim/devices/onu_test_helpers.go
index dc03614..29d7f39 100644
--- a/internal/bbsim/devices/onu_test_helpers.go
+++ b/internal/bbsim/devices/onu_test_helpers.go
@@ -147,6 +147,14 @@
 	return nil, errors.New("unimplemented-in-mock-client")
 }
 
+func (s *mockClient) GetOnuInfo(context context.Context, in *openolt.Onu, opts ...grpc.CallOption) (*openolt.OnuInfo, error) {
+	return nil, errors.New("unimplemented-in-mock-client")
+}
+
+func (s *mockClient) GetPonInterfaceInfo(context context.Context, in *openolt.Interface, opts ...grpc.CallOption) (*openolt.PonIntfInfo, error) {
+	return nil, errors.New("unimplemented-in-mock-client")
+}
+
 // this method creates a fake ONU used in the tests
 func createMockOnu(id uint32, ponPortId uint32) *Onu {
 	o := Onu{
