diff --git a/callwidget.cpp b/callwidget.cpp
index a3ad48a..929088d 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -781,13 +781,15 @@
 {
     ui->contactMethodComboBox->clear();
     configureSendCRPageButton(nodeIdx);
-    ui->imNameLabel->setText(QString(tr("Conversation with %1", "%1 is the contact name"))
-                             .arg(nodeIdx.data(static_cast<int>(Ring::Role::Name)).toString()));
+    ui->imNameLabel->setText(QString(tr("%1\n%2", "%1 is the contact username, %2 is the contact registered name"))
+                             .arg(nodeIdx.data(static_cast<int>(Ring::Role::Name)).toString())
+                             .arg(nodeIdx.data(static_cast<int>(Person::Role::IdOfLastCMUsed)).value<QString>()));
     auto cmVector = RecentModel::instance().getContactMethods(nodeIdx);
-    ui->contactMethodComboBox->setEnabled(cmVector.size() > 1);
+    ui->contactMethodComboBox->setVisible(cmVector.size() > 1);
     foreach (const ContactMethod* cm, cmVector) {
-        ui->contactMethodComboBox->addItem(cm->uri());
+        ui->contactMethodComboBox->addItem(cm->bestId());
     }
+
     ui->stackedWidget->setCurrentWidget(ui->messagingPage);
     disconnect(imClickedConnection_);
     imClickedConnection_ = connect(ui->listMessageView, &QListView::clicked, [this](const QModelIndex& index) {
@@ -805,14 +807,21 @@
 {
     if (ui->imMessageEdit->text().trimmed().isEmpty())
         return;
-    auto number = ui->contactMethodComboBox->currentText();
-    if (auto cm = PhoneDirectoryModel::instance().getNumber(number)) {
-        QMap<QString, QString> msg;
-        msg["text/plain"] = ui->imMessageEdit->text();
-        cm->sendOfflineTextMessage(msg);
-        ui->imMessageEdit->clear();
+
+    auto idx = RecentModel::instance().selectionModel()->currentIndex();
+    auto cmVec = RecentModel::instance().getContactMethods(idx);
+    if (cmVec.size() > 0) {
+            auto cm = cmVec[0];
+            if(!cm) {
+                qWarning() << "Contact Method not found";
+                return;
+            }
+            QMap<QString, QString> msg;
+            msg["text/plain"] = ui->imMessageEdit->text();
+            cm->sendOfflineTextMessage(msg);
+            ui->imMessageEdit->clear();
     } else {
-        qWarning() << "Contact Method not found for " << number;
+        qWarning() << "No contact method found for messaging";
     }
 }
 
@@ -822,35 +831,45 @@
     on_sendIMButton_clicked();
 }
 
-void
-CallWidget::on_contactMethodComboBox_currentIndexChanged(const QString& number)
+void CallWidget::on_contactMethodComboBox_currentIndexChanged(int index)
 {
-    auto cm = PhoneDirectoryModel::instance().getNumber(number);
-    if (auto txtRecording = cm->textRecording()) {
-        ui->listMessageView->setModel(txtRecording->instantMessagingModel());
-        if (imConnection_)
-            disconnect(imConnection_);
-        imConnection_ = connect(txtRecording,
-                                SIGNAL(messageInserted(QMap<QString,QString>,ContactMethod*,Media::Media::Direction)),
-                                this,
-                                SLOT(slotAccountMessageReceived(QMap<QString,QString>,ContactMethod*,Media::Media::Direction)));
-        auto messagesPresent = txtRecording->instantMessagingModel()->rowCount() > 0;
-        if (messagesPresent) {
-            ui->listMessageView->scrollToBottom();
-            txtRecording->setAllRead();
-        }
-        ui->listMessageView->setVisible(messagesPresent);
-        ui->noMessagesLabel->setVisible(!messagesPresent);
-        if (not messagesPresent) {
-            imVisibleConnection_ = connect(txtRecording->instantMessagingModel(),
-                                           &QAbstractItemModel::rowsInserted,
-                                           [this, txtRecording]() {
-                if (imVisibleConnection_)
-                    disconnect(imVisibleConnection_);
-                auto messagesPresent = txtRecording->instantMessagingModel()->rowCount() > 0;
-                ui->listMessageView->setVisible(messagesPresent);
-                ui->noMessagesLabel->setVisible(!messagesPresent);
-            });
+    auto idx = RecentModel::instance().selectionModel()->currentIndex();
+    auto cmVec = RecentModel::instance().getContactMethods(idx);
+    ContactMethod* cm {};
+
+    if (index < cmVec.size() && index >= 0 ){
+        cm = cmVec[index];
+    } else {
+        qWarning() << "no contact method available";
+    }
+
+    if (cm){
+        if (auto txtRecording = cm->textRecording()) {
+            ui->listMessageView->setModel(txtRecording->instantMessagingModel());
+            if (imConnection_)
+                disconnect(imConnection_);
+            imConnection_ = connect(txtRecording,
+                                    SIGNAL(messageInserted(QMap<QString,QString>,ContactMethod*,Media::Media::Direction)),
+                                    this,
+                                    SLOT(slotAccountMessageReceived(QMap<QString,QString>,ContactMethod*,Media::Media::Direction)));
+            auto messagesPresent = txtRecording->instantMessagingModel()->rowCount() > 0;
+            if (messagesPresent) {
+                ui->listMessageView->scrollToBottom();
+                txtRecording->setAllRead();
+            }
+            ui->listMessageView->setVisible(messagesPresent);
+            ui->noMessagesLabel->setVisible(!messagesPresent);
+            if (not messagesPresent) {
+                imVisibleConnection_ = connect(txtRecording->instantMessagingModel(),
+                                               &QAbstractItemModel::rowsInserted,
+                                               [this, txtRecording]() {
+                    if (imVisibleConnection_)
+                        disconnect(imVisibleConnection_);
+                    auto messagesPresent = txtRecording->instantMessagingModel()->rowCount() > 0;
+                    ui->listMessageView->setVisible(messagesPresent);
+                    ui->noMessagesLabel->setVisible(!messagesPresent);
+                });
+            }
         }
     }
 }
@@ -908,13 +927,6 @@
 }
 
 void
-CallWidget::on_copyCMButton_clicked()
-{
-    auto text = ui->contactMethodComboBox->currentText();
-    QApplication::clipboard()->setText(text);
-}
-
-void
 CallWidget::on_qrButton_toggled(bool checked)
 {
     ui->qrLabel->setVisible(checked);
diff --git a/callwidget.h b/callwidget.h
index 1b63eaa..d16a826 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -73,10 +73,8 @@
     void on_smartList_doubleClicked(const QModelIndex& index);
     void on_sendIMButton_clicked();
     void on_imMessageEdit_returnPressed();
-    void on_contactMethodComboBox_currentIndexChanged(const QString& number);
     void on_ringContactLineEdit_textChanged(const QString& text);
     void on_imBackButton_clicked();
-    void on_copyCMButton_clicked();
     void on_sendContactRequestPageButton_clicked();
     void on_sendCRBackButton_clicked();
     void on_smartList_clicked(const QModelIndex &index);
@@ -96,6 +94,7 @@
     void contactLineEdit_registeredNameFound(Account *account, NameDirectory::LookupStatus status, const QString& address, const QString& name);
     void searchBtnClicked();
     void selectedAccountChanged(const QModelIndex &current, const QModelIndex &previous);
+    void on_contactMethodComboBox_currentIndexChanged(int index);
 
 private:
     Ui::CallWidget* ui;
diff --git a/callwidget.ui b/callwidget.ui
index c65e9cc..cf4dc85 100644
--- a/callwidget.ui
+++ b/callwidget.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1046</width>
+    <width>1128</width>
     <height>724</height>
    </rect>
   </property>
@@ -77,7 +77,7 @@
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="handleWidth">
-        <number>10</number>
+        <number>2</number>
        </property>
        <property name="childrenCollapsible">
         <bool>true</bool>
@@ -477,6 +477,9 @@
                 <verstretch>0</verstretch>
                </sizepolicy>
               </property>
+              <property name="toolTip">
+               <string/>
+              </property>
               <property name="currentIndex">
                <number>0</number>
               </property>
@@ -1047,28 +1050,6 @@
                    </widget>
                   </item>
                   <item>
-                   <widget class="QPushButton" name="sendContactRequestPageButton">
-                    <property name="sizePolicy">
-                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                      <horstretch>0</horstretch>
-                      <verstretch>0</verstretch>
-                     </sizepolicy>
-                    </property>
-                    <property name="minimumSize">
-                     <size>
-                      <width>130</width>
-                      <height>30</height>
-                     </size>
-                    </property>
-                    <property name="styleSheet">
-                     <string notr="true"/>
-                    </property>
-                    <property name="text">
-                     <string>contact request</string>
-                    </property>
-                   </widget>
-                  </item>
-                  <item>
                    <spacer name="horizontalSpacer_7">
                     <property name="orientation">
                      <enum>Qt::Horizontal</enum>
@@ -1083,6 +1064,12 @@
                   </item>
                   <item>
                    <widget class="QLabel" name="imNameLabel">
+                    <property name="minimumSize">
+                     <size>
+                      <width>400</width>
+                      <height>0</height>
+                     </size>
+                    </property>
                     <property name="font">
                      <font>
                       <pointsize>12</pointsize>
@@ -1091,7 +1078,7 @@
                      </font>
                     </property>
                     <property name="text">
-                     <string>Conversation with</string>
+                     <string/>
                     </property>
                     <property name="alignment">
                      <set>Qt::AlignCenter</set>
@@ -1118,16 +1105,16 @@
                    <widget class="QComboBox" name="contactMethodComboBox">
                     <property name="minimumSize">
                      <size>
-                      <width>244</width>
+                      <width>160</width>
                       <height>0</height>
                      </size>
                     </property>
                    </widget>
                   </item>
                   <item>
-                   <widget class="QPushButton" name="copyCMButton">
+                   <widget class="QPushButton" name="sendContactRequestPageButton">
                     <property name="sizePolicy">
-                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
                       <horstretch>0</horstretch>
                       <verstretch>0</verstretch>
                      </sizepolicy>
@@ -1138,24 +1125,18 @@
                       <height>30</height>
                      </size>
                     </property>
-                    <property name="maximumSize">
-                     <size>
-                      <width>30</width>
-                      <height>30</height>
-                     </size>
+                    <property name="toolTip">
+                     <string>Add to contacts</string>
+                    </property>
+                    <property name="styleSheet">
+                     <string notr="true"/>
                     </property>
                     <property name="text">
                      <string/>
                     </property>
                     <property name="icon">
                      <iconset resource="ressources.qrc">
-                      <normaloff>:/images/icons/ic_content_copy_white_24dp.png</normaloff>:/images/icons/ic_content_copy_white_24dp.png</iconset>
-                    </property>
-                    <property name="iconSize">
-                     <size>
-                      <width>18</width>
-                      <height>18</height>
-                     </size>
+                      <normaloff>:/images/icons/ic_person_add_white_24dp.png</normaloff>:/images/icons/ic_person_add_white_24dp.png</iconset>
                     </property>
                    </widget>
                   </item>
@@ -1209,6 +1190,9 @@
                   <property name="horizontalScrollMode">
                    <enum>QAbstractItemView::ScrollPerPixel</enum>
                   </property>
+                  <property name="spacing">
+                   <number>1</number>
+                  </property>
                   <property name="wordWrap">
                    <bool>true</bool>
                   </property>
@@ -1223,7 +1207,7 @@
                    <number>6</number>
                   </property>
                   <property name="topMargin">
-                   <number>6</number>
+                   <number>0</number>
                   </property>
                   <property name="rightMargin">
                    <number>6</number>
@@ -1244,6 +1228,12 @@
                       <pointsize>10</pointsize>
                      </font>
                     </property>
+                    <property name="inputMask">
+                     <string/>
+                    </property>
+                    <property name="placeholderText">
+                     <string>Type your message here</string>
+                    </property>
                    </widget>
                   </item>
                   <item>
diff --git a/stylesheet.css b/stylesheet.css
index 0611ca8..eb30916 100644
--- a/stylesheet.css
+++ b/stylesheet.css
@@ -123,15 +123,13 @@
 }
 
 QListView#listMessageView{
-    background: rgb(242, 242, 242);
+    background: rgb(255, 255, 255);
     border-top: 1px solid rgb(229, 229, 229);
+    border-bottom: 1px solid rgb(229, 229, 229);
 }
 
 QLineEdit#messageEdit, QLineEdit#imMessageEdit{
-    border-color: rgb(0, 192, 212);
-    border-radius: 5px;
-    border-width: 1px;
-    border-style: outset;
+    border: none;
     background-color: rgb(255, 255, 255);
 }
 
@@ -234,19 +232,19 @@
 }
 
 QPushButton#searchBtn, QPushButton#btnComBarVideo,
-QPushButton#sendButton, QPushButton#sendIMButton{
+QPushButton#sendButton, QPushButton#sendIMButton, QPushButton#sendContactRequestPageButton{
    background-color: #3AC0D2;
    border-radius: 15px;
    border:solid 1px;
 }
 
 QPushButton#searchBtn:hover, QPushButton#sendButton:hover,
-QPushButton#sendIMButton:hover, QPushButton#btnComBarVideo:hover{
+QPushButton#sendIMButton:hover, QPushButton#btnComBarVideo:hover, QPushButton#sendContactRequestPageButton:hover{
    background-color: #4dc6d6;
 }
 
 QPushButton#searchBtn:pressed, QPushButton#sendButton:pressed,
-QPushButton#sendIMButton:pressed, QPushButton#btnComBarVideo:pressed{
+QPushButton#sendIMButton:pressed, QPushButton#btnComBarVideo:pressed, QPushButton#sendContactRequestPageButton:pressed{
    background-color: #34acbd;
 }
 
@@ -288,7 +286,7 @@
 }
 
 QWidget#messagingPage, QWidget#contactRequestPage{
-    background: rgb(242, 242, 242);
+    background: rgb(255, 255, 255);
 }
 
 QPushButton#nextButton, QPushButton#playButton, QPushButton#clearHistoryButton, QPushButton#doTransferButton,
