diff --git a/src/utils.h b/src/utils.h
index e6ba40f..1c971a6 100755
--- a/src/utils.h
+++ b/src/utils.h
@@ -18,6 +18,7 @@
  */
 
 #import <Foundation/Foundation.h>
+#import "NSString+Extensions.h"
 #import <api/conversation.h>
 #import <api/conversationmodel.h>
 #import <api/account.h>
@@ -28,19 +29,39 @@
 static inline NSString* bestIDForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(conv.participants[0]);
-    if (!contact.registeredName.empty())
-        return @(contact.registeredName.c_str());
+    if (!contact.registeredName.empty()) {
+        contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\n'), contact.registeredName.end());
+        contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\r'), contact.registeredName.end());
+        return [@(contact.registeredName.c_str()) removeEmptyLinesAtBorders];
+    }
     else
-        return @(contact.profileInfo.uri.c_str());
+        return [@(contact.profileInfo.uri.c_str()) removeEmptyLinesAtBorders];
 }
 
 static inline NSString* bestNameForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(conv.participants[0]);
-    if (!contact.profileInfo.alias.empty())
-        return @(contact.profileInfo.alias.c_str());
-    else
+    if (contact.profileInfo.alias.empty()) {
         return bestIDForConversation(conv, model);
+    }
+    auto alias = contact.profileInfo.alias;
+    alias.erase(std::remove(alias.begin(), alias.end(), '\n'), alias.end());
+    alias.erase(std::remove(alias.begin(), alias.end(), '\r'), alias.end());
+    if(alias.length() == 0) {
+        return bestIDForConversation(conv, model);
+    }
+    return @(alias.c_str());
+}
+
+static inline lrc::api::profile::Type profileType(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
+{
+    @try {
+        auto contact = model.owner.contactModel->getContact(conv.participants[0]);
+        return contact.profileInfo.type;
+    }
+    @catch (NSException *exception) {
+        lrc::api::profile::Type::INVALID;
+    }
 }
 
 /**
