diff --git a/bridge/whatsappmulti/handlers.go b/bridge/whatsappmulti/handlers.go
index 379699d9..34dce471 100644
--- a/bridge/whatsappmulti/handlers.go
+++ b/bridge/whatsappmulti/handlers.go
@@ -51,10 +51,7 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto.
 	senderJID := messageInfo.Sender
 	channel := messageInfo.Chat
 
-	senderName := b.getSenderName(messageInfo.Sender)
-	if senderName == "" {
-		senderName = "Someone" // don't expose telephone number
-	}
+	senderName := b.getSenderName(messageInfo)
 
 	if msg.GetExtendedTextMessage() == nil && msg.GetConversation() == "" {
 		b.Log.Debugf("message without text content? %#v", msg)
@@ -82,9 +79,6 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto.
 				// mentions comes as telephone numbers and we don't want to expose it to other bridges
 				// replace it with something more meaninful to others
 				mention := b.getSenderNotify(types.NewJID(numberAndSuffix[0], types.DefaultUserServer))
-				if mention == "" {
-					mention = "someone"
-				}
 
 				text = strings.Replace(text, "@"+numberAndSuffix[0], "@"+mention, 1)
 			}
@@ -118,7 +112,7 @@ func (b *Bwhatsapp) handleImageMessage(msg *events.Message) {
 	imsg := msg.Message.GetImageMessage()
 
 	senderJID := msg.Info.Sender
-	senderName := b.getSenderName(senderJID)
+	senderName := b.getSenderName(msg.Info)
 	ci := imsg.GetContextInfo()
 
 	if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -181,7 +175,7 @@ func (b *Bwhatsapp) handleVideoMessage(msg *events.Message) {
 	imsg := msg.Message.GetVideoMessage()
 
 	senderJID := msg.Info.Sender
-	senderName := b.getSenderName(senderJID)
+	senderName := b.getSenderName(msg.Info)
 	ci := imsg.GetContextInfo()
 
 	if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -238,7 +232,7 @@ func (b *Bwhatsapp) handleAudioMessage(msg *events.Message) {
 	imsg := msg.Message.GetAudioMessage()
 
 	senderJID := msg.Info.Sender
-	senderName := b.getSenderName(senderJID)
+	senderName := b.getSenderName(msg.Info)
 	ci := imsg.GetContextInfo()
 
 	if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -295,7 +289,7 @@ func (b *Bwhatsapp) handleDocumentMessage(msg *events.Message) {
 	imsg := msg.Message.GetDocumentMessage()
 
 	senderJID := msg.Info.Sender
-	senderName := b.getSenderName(senderJID)
+	senderName := b.getSenderName(msg.Info)
 	ci := imsg.GetContextInfo()
 
 	if senderJID == (types.JID{}) && ci.Participant != nil {
diff --git a/bridge/whatsappmulti/helpers.go b/bridge/whatsappmulti/helpers.go
index 5b1ec86c..c3c9d018 100644
--- a/bridge/whatsappmulti/helpers.go
+++ b/bridge/whatsappmulti/helpers.go
@@ -18,24 +18,7 @@ type ProfilePicInfo struct {
 	Status int16  `json:"status"`
 }
 
-func (b *Bwhatsapp) getSenderName(senderJid types.JID) string {
-	if sender, exists := b.contacts[senderJid]; exists {
-		if sender.FullName != "" {
-			return sender.FullName
-		}
-		// if user is not in phone contacts
-		// it is the most obvious scenario unless you sync your phone contacts with some remote updated source
-		// users can change it in their WhatsApp settings -> profile -> click on Avatar
-		if sender.PushName != "" {
-			return sender.PushName
-		}
-
-		if sender.FirstName != "" {
-			return sender.FirstName
-		}
-	}
-
-	// try to reload this contact
+func (b *Bwhatsapp) reloadContacts(){
 	if _, err := b.wc.Store.Contacts.GetAllContacts(); err != nil {
 		b.Log.Errorf("error on update of contacts: %v", err)
 	}
@@ -48,32 +31,60 @@ func (b *Bwhatsapp) getSenderName(senderJid types.JID) string {
 	if len(allcontacts) > 0 {
 		b.contacts = allcontacts
 	}
+}
 
-	if sender, exists := b.contacts[senderJid]; exists {
-		if sender.FullName != "" {
-			return sender.FullName
-		}
-		// if user is not in phone contacts
-		// it is the most obvious scenario unless you sync your phone contacts with some remote updated source
-		// users can change it in their WhatsApp settings -> profile -> click on Avatar
-		if sender.PushName != "" {
-			return sender.PushName
-		}
+func (b *Bwhatsapp) getSenderName(info types.MessageInfo) string {
+	// Parse AD JID
+	var senderJid types.JID
+	senderJid.User, senderJid.Server = info.Sender.User, info.Sender.Server
 
-		if sender.FirstName != "" {
-			return sender.FirstName
-		}
+	sender, exists := b.contacts[senderJid]
+
+	if !exists || (sender.FullName == "" && sender.FirstName == "") {
+		b.reloadContacts() // Contacts may need to be reloaded
+		sender, exists = b.contacts[senderJid]
 	}
 
+	if exists && sender.FullName != "" {
+		return sender.FullName
+	}
+	
+	if info.PushName != "" {
+		return info.PushName
+	}
+
+	if exists && sender.FirstName != "" {
+		return sender.FirstName
+	}
+	
 	return "Someone"
 }
 
 func (b *Bwhatsapp) getSenderNotify(senderJid types.JID) string {
-	if sender, exists := b.contacts[senderJid]; exists {
+	sender, exists := b.contacts[senderJid]
+
+	if !exists || (sender.FullName == "" && sender.PushName == "" && sender.FirstName == "") {
+		b.reloadContacts() // Contacts may need to be reloaded
+		sender, exists = b.contacts[senderJid]
+	}
+
+	if !exists {
+		return "someone"
+	}
+	
+	if exists && sender.FullName != "" {
+		return sender.FullName
+	}
+	
+	if exists && sender.PushName != "" {
 		return sender.PushName
 	}
 
-	return ""
+	if exists && sender.FirstName != "" {
+		return sender.FirstName
+	}
+	
+	return "someone"
 }
 
 func (b *Bwhatsapp) GetProfilePicThumb(jid string) (*types.ProfilePictureInfo, error) {