diff --git a/callwidget.cpp b/callwidget.cpp
index b28df8a..f001bda 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -204,6 +204,11 @@
             ui->btnInvites->setChecked(false);
         });
 
+    connect(ui->messageView, &MessageWebView::conversationRemoved,
+        [this] {
+            backToWelcomePage();
+        });
+
     // set first view to welcome view
     ui->stackedWidget->setCurrentWidget(ui->welcomePage);
     ui->btnConversations->setChecked(true);
@@ -581,20 +586,27 @@
 
 void CallWidget::slotAcceptInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
-    LRCInstance::getCurrentConversationModel()->makePermanent(convUid.toStdString());
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
+    LRCInstance::getCurrentConversationModel()->makePermanent(convUid);
+    ui->messageView->setInvitation(false);
 }
 
 void CallWidget::slotBlockInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
-    LRCInstance::getCurrentConversationModel()->removeConversation(convUid.toStdString(), true);
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
+    if (!convUid.empty() && convUid == LRCInstance::getSelectedConvUid()) {
+        backToWelcomePage();
+    }
+    LRCInstance::getCurrentConversationModel()->removeConversation(convUid, true);
 }
 
 void CallWidget::slotIgnoreInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
-    LRCInstance::getCurrentConversationModel()->removeConversation(convUid.toStdString(), false);
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
+    if (!convUid.empty() && convUid == LRCInstance::getSelectedConvUid()) {
+        backToWelcomePage();
+    }
+    LRCInstance::getCurrentConversationModel()->removeConversation(convUid, false);
 }
 
 void CallWidget::slotCustomContextMenuRequested(const QPoint& pos)
@@ -607,8 +619,20 @@
     try {
         auto accountList = LRCInstance::accountModel().getAccountList();
         setSelectedAccount(accountList.at(index));
+        auto& contactModel = LRCInstance::getCurrentAccountInfo().contactModel;
+        disconnect(contactAddedConnection_);
+        contactAddedConnection_ = connect(contactModel.get(), &lrc::api::ContactModel::contactAdded,
+            [this, &contactModel](const std::string & contactId) {
+                auto convModel = LRCInstance::getCurrentConversationModel();
+                auto currentConversation = Utils::getConversationFromUid(selectedConvUid(),
+                    *convModel);
+                if (contactId == contactModel.get()->getContact((*currentConversation).participants.at(0)).profileInfo.uri) {
+                    ui->messageView->clear();
+                    ui->messageView->printHistory(*convModel, currentConversation->interactions);
+                }
+            });
     } catch (...) {
-        qWarning() << "exception changing account";
+        qWarning() << "CallWidget::slotAccountChanged exception";
     }
 }
 
@@ -851,7 +875,7 @@
     auto currentConversation = Utils::getConversationFromUid(selectedConvUid(),
                                                              *convModel);
     ui->messageView->clear();
-    ui->messageView->printHistory(*convModel, currentConversation->interactions);
+    ui->messageView->printHistory(*convModel, currentConversation->interactions, true);
 
     // Contact Avatars
     auto accInfo = &LRCInstance::getCurrentAccountInfo();
@@ -927,6 +951,7 @@
 CallWidget::on_sendContactRequestButton_clicked()
 {
     LRCInstance::getCurrentConversationModel()->makePermanent(selectedConvUid());
+    ui->sendContactRequestButton->hide();
 }
 
 void
diff --git a/callwidget.h b/callwidget.h
index e955dad..a785154 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -165,4 +165,6 @@
     QMetaObject::Connection selectedCallChanged_;
     QMetaObject::Connection smartlistSelectionConnection_;
     QMetaObject::Connection interactionRemovedConnection_;
+    QMetaObject::Connection contactAddedConnection_;
+
 };
diff --git a/messagewebview.cpp b/messagewebview.cpp
index 2a9dfa2..73af56d 100644
--- a/messagewebview.cpp
+++ b/messagewebview.cpp
@@ -196,11 +196,12 @@
 void
 MessageWebView::printHistory(lrc::api::ConversationModel& conversationModel,
                              const std::map<uint64_t,
-                             lrc::api::interaction::Info> interactions)
+                             lrc::api::interaction::Info> interactions,
+                             bool fadeIn)
 {
     auto interactionsStr = interactionsToJsonArrayObject(conversationModel, interactions).toUtf8();
-    QString s = QString::fromLatin1("printHistory(%1);")
-        .arg(interactionsStr.constData());
+    QString s = QString::fromLatin1("printHistory(%1,%2);")
+        .arg(interactionsStr.constData()).arg(fadeIn);
     page()->runJavaScript(s, QWebEngineScript::MainWorld);
 }
 
@@ -358,6 +359,7 @@
     try {
         auto convUid = LRCInstance::getSelectedConvUid();
         LRCInstance::getCurrentConversationModel()->makePermanent(convUid);
+        qobject_cast<MessageWebView*>(this->parent())->setInvitation(false);
     } catch (...) {
         qDebug() << "JS bridging - exception during acceptInvitation";
     }
@@ -370,6 +372,10 @@
     try {
         auto convUid = LRCInstance::getSelectedConvUid();
         LRCInstance::getCurrentConversationModel()->removeConversation(convUid, false);
+        if (auto messageView = qobject_cast<MessageWebView*>(this->parent())) {
+            messageView->setInvitation(false);
+            emit messageView->conversationRemoved();
+        }
     } catch (...) {
         qDebug() << "JS bridging - exception during refuseInvitation";
     }
@@ -382,6 +388,10 @@
     try {
         auto convUid = LRCInstance::getSelectedConvUid();
         LRCInstance::getCurrentConversationModel()->removeConversation(convUid, true);
+        if (auto messageView = qobject_cast<MessageWebView*>(this->parent())) {
+            messageView->setInvitation(false);
+            emit messageView->conversationRemoved();
+        }
     } catch (...) {
         qDebug() << "JS bridging - exception during blockConversation";
     }
diff --git a/messagewebview.h b/messagewebview.h
index 5c65ac6..aa83318 100644
--- a/messagewebview.h
+++ b/messagewebview.h
@@ -67,12 +67,18 @@
     void removeInteraction(uint64_t interactionId);
     void printHistory(lrc::api::ConversationModel& conversationModel,
                       const std::map<uint64_t,
-                      lrc::api::interaction::Info> interactions);
+                      lrc::api::interaction::Info> interactions,
+                      bool fadeIn = false);
     void setSenderImage(const std::string& sender,
                         const std::string& senderImage);
-    void setInvitation(bool show, const std::string& contactUri, const std::string& contactId);
+    void setInvitation(bool show,
+                       const std::string& contactUri = "",
+                       const std::string& contactId = "");
     void hideMessages();
 
+signals:
+    void conversationRemoved();
+
 private slots:
     void slotLoadFinished();
 
diff --git a/web/chatview.js b/web/chatview.js
index 2e7d9c8..8a29488 100644
--- a/web/chatview.js
+++ b/web/chatview.js
@@ -1479,9 +1479,11 @@
  * @param messages_array should contain history to be printed
  */
 /* exported printHistory */
-function printHistory(messages_array)
+function printHistory(messages_array, fadein = false)
 {
-    hideBody()
+    if (fadein) {
+        hideBody()
+    }
 
     historyBuffer = messages_array
     historyBufferIndex = 0
@@ -1490,7 +1492,9 @@
     printHistoryPart(messages, 0)
     isInitialLoading = false
 
-    document.body.classList.remove('fade');
+    if (fadein) {
+        document.body.classList.remove('fade');
+    }
 }
 
 /**
