diff --git a/src/constant/JamiQmlUtils.qml b/src/constant/JamiQmlUtils.qml
index a461f1d81451651733ff32507157bb7cd8c00856..fcbed2a001eeda15309eba8c42a618407e569917 100644
--- a/src/constant/JamiQmlUtils.qml
+++ b/src/constant/JamiQmlUtils.qml
@@ -22,6 +22,8 @@ pragma Singleton
 import QtQuick 2.14
 
 Item {
+    property bool callIsFullscreen: false
+
     TextMetrics {
         id: globalTextMetrics
     }
diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml
index 3d61b27b15877036a1c8196e6d7f30e0c2218631..3665569dd96b33255ef47eec1cf25aa6c208349a 100644
--- a/src/mainview/MainView.qml
+++ b/src/mainview/MainView.qml
@@ -201,7 +201,6 @@ Window {
             callStackView.setLinkedWebview(communicationPageMessageWebView)
             callStackView.responsibleAccountId = AccountAdapter.currentAccountId
             callStackView.responsibleConvUid = currentUID
-            callStackView.updateCorrespondingUI()
 
             if (callState === Call.Status.IN_PROGRESS || callState === Call.Status.PAUSED) {
                 UtilsAdapter.setCurrentCall(AccountAdapter.currentAccountId, currentUID)
@@ -210,12 +209,12 @@ Window {
                 else
                     callStackView.showVideoCallPage()
             } else if (callState === Call.Status.INCOMING_RINGING) {
-                callStackView.showIncomingCallPage(AccountAdapter.currentAccountId,
-                                                   currentUID)
+                callStackView.showIncomingCallPage()
             } else {
                 callStackView.showOutgoingCallPage(callState)
             }
             pushCallStackView()
+
         } else if (!inSettingsView) {
             if (currentConvUID !== currentUID) {
                 callStackView.needToCloseInCallConversationAndPotentialWindow()
@@ -250,6 +249,20 @@ Window {
         }
     }
 
+    Connections {
+        target: JamiQmlUtils
+
+        function onCallIsFullscreenChanged() {
+            if (JamiQmlUtils.callIsFullscreen) {
+                UtilsAdapter.setSystemTrayIconVisible(false)
+                mainViewWindow.hide()
+            } else {
+                UtilsAdapter.setSystemTrayIconVisible(true)
+                mainViewWindow.show()
+            }
+        }
+    }
+
     StackLayout {
         id: mainViewStackLayout
 
diff --git a/src/mainview/components/AudioCallPage.qml b/src/mainview/components/AudioCallPage.qml
index 74508ac775c2531faa2cdbe80685388d48703bc8..f87a6bf3c2fc9024add3de4c060faec8617d615c 100644
--- a/src/mainview/components/AudioCallPage.qml
+++ b/src/mainview/components/AudioCallPage.qml
@@ -33,8 +33,6 @@ Rectangle {
 
     property var linkedWebview: null
 
-    signal showFullScreenReqested
-
     function updateUI(accountId, convUid) {
         contactImage.updateImage(convUid)
         bestName = UtilsAdapter.getBestName(accountId, convUid)
diff --git a/src/mainview/components/CallOverlay.qml b/src/mainview/components/CallOverlay.qml
index 7872497bd7d3740e89abb91ab88f900cd7ccd78d..ae0ee8723a70594989b35256e95cc40fccd82893 100644
--- a/src/mainview/components/CallOverlay.qml
+++ b/src/mainview/components/CallOverlay.qml
@@ -172,8 +172,9 @@ Rectangle {
                 Layout.leftMargin: JamiTheme.preferredMarginSize
 
 
-                source: callStackView.isFullscreen ? "qrc:/images/icons/round-close-24px.svg" :
-                                                     "qrc:/images/icons/ic_arrow_back_24px.svg"
+                source: JamiQmlUtils.callIsFullscreen ?
+                            "qrc:/images/icons/round-close-24px.svg" :
+                            "qrc:/images/icons/ic_arrow_back_24px.svg"
 
                 pressedColor: JamiTheme.invertedPressedButtonColor
                 hoveredColor: JamiTheme.invertedHoveredButtonColor
@@ -183,10 +184,10 @@ Rectangle {
 
                 toolTipText: qsTr("Toggle to display side panel")
 
-                visible: mainViewWindow.sidePanelOnly
+                visible: true
 
                 onClicked: {
-                    if (callStackView.isFullscreen) {
+                    if (JamiQmlUtils.callIsFullscreen) {
                         callStackView.toggleFullScreen()
                     } else {
                         mainViewWindow.showWelcomeView()
diff --git a/src/mainview/components/CallStackView.qml b/src/mainview/components/CallStackView.qml
index a93ce709c86fdf6c35186cd2f542d3baa2b9f6ee..2153a5e1e0cb7bc63cea92fd2367457f3af1575b 100644
--- a/src/mainview/components/CallStackView.qml
+++ b/src/mainview/components/CallStackView.qml
@@ -29,8 +29,6 @@ import "../js/callfullscreenwindowcontainercreation.js" as CallFullScreenWindowC
 Rectangle {
     id: callStackViewWindow
 
-    property bool isFullscreen: false
-
     enum StackNumber {
         IncomingPageStack,
         OutgoingPageStack,
@@ -53,33 +51,34 @@ Rectangle {
     property string responsibleAccountId: ""
 
     function needToCloseInCallConversationAndPotentialWindow() {
-        audioCallPage.closeInCallConversation()
-        videoCallPage.closeInCallConversation()
-
         // Close potential window, context menu releated windows.
-        audioCallPage.closeContextMenuAndRelatedWindows()
-
-        CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer()
-        videoCallPage.closeContextMenuAndRelatedWindows()
+        if (callStackMainView.currentItem.stackNumber === CallStackView.AudioPageStack) {
+            audioCallPage.closeInCallConversation()
+            CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer()
+            audioCallPage.closeContextMenuAndRelatedWindows()
+        } else if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) {
+            videoCallPage.closeInCallConversation()
+            CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer()
+            videoCallPage.closeContextMenuAndRelatedWindows()
+        }
     }
 
     function setLinkedWebview(webViewId) {
-        audioCallPage.setLinkedWebview(webViewId)
-        videoCallPage.setLinkedWebview(webViewId)
+        if (callStackMainView.currentItem.stackNumber === CallStackView.AudioPageStack) {
+            audioCallPage.setLinkedWebview(webViewId)
+        } else if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) {
+            videoCallPage.setLinkedWebview(webViewId)
+        }
     }
 
-    function updateCorrespondingUI() {
-        audioCallPage.updateUI(responsibleAccountId, responsibleConvUid)
-        outgoingCallPage.updateUI(responsibleAccountId, responsibleConvUid)
-        incomingCallPage.updateUI(responsibleAccountId, responsibleConvUid)
-        videoCallPage.updateUI(responsibleAccountId, responsibleConvUid)
+    function getItemFromStack(itemNumber) {
+        return callStackMainView.find(function (item) {
+            return item.stackNumber === itemNumber
+        })
     }
 
     function showAudioCallPage() {
-        var itemToFind = callStackMainView.find(function (item) {
-            return item.stackNumber === CallStackView.AudioPageStack
-        })
-
+        var itemToFind = getItemFromStack(CallStackView.AudioPageStack)
         if (!itemToFind) {
             callStackMainView.push(audioCallPage, StackView.Immediate)
         } else {
@@ -89,37 +88,27 @@ Rectangle {
     }
 
     function showOutgoingCallPage() {
-        var itemToFind = callStackMainView.find(function (item) {
-            return item.stackNumber === CallStackView.OutgoingPageStack
-        })
-
+        var itemToFind = getItemFromStack(CallStackView.OutgoingPageStack)
         if (!itemToFind) {
             callStackMainView.push(outgoingCallPage, StackView.Immediate)
         } else {
             callStackMainView.pop(itemToFind, StackView.Immediate)
         }
+        outgoingCallPage.updateUI(responsibleAccountId, responsibleConvUid)
     }
 
     function showIncomingCallPage(accountId, convUid) {
-        var itemToFind = callStackMainView.find(function (item) {
-            return item.stackNumber === CallStackView.IncomingPageStack
-        })
-
+        var itemToFind = getItemFromStack(CallStackView.IncomingPageStack)
         if (!itemToFind) {
             callStackMainView.push(incomingCallPage, StackView.Immediate)
         } else {
             callStackMainView.pop(itemToFind, StackView.Immediate)
         }
-        responsibleAccountId = accountId
-        responsibleConvUid = convUid
-        incomingCallPage.updateUI(accountId, convUid)
+        incomingCallPage.updateUI(responsibleAccountId, responsibleConvUid)
     }
 
     function showVideoCallPage() {
-        var itemToFind = callStackMainView.find(function (item) {
-            return item.stackNumber === CallStackView.VideoPageStack
-        })
-
+        var itemToFind = getItemFromStack(CallStackView.VideoPageStack)
         if (!itemToFind) {
             callStackMainView.push(videoCallPage, StackView.Immediate)
         } else {
@@ -132,8 +121,10 @@ Rectangle {
     }
 
     function toggleFullScreen() {
-        isFullscreen = !isFullscreen
+        JamiQmlUtils.callIsFullscreen = !JamiQmlUtils.callIsFullscreen
         var callPage = callStackMainView.currentItem
+        if (!callPage)
+            return
         CallFullScreenWindowContainerCreation.createvideoCallFullScreenWindowContainerObject()
 
         if (!CallFullScreenWindowContainerCreation.checkIfVisible()) {
@@ -144,9 +135,7 @@ Rectangle {
             CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer()
         }
 
-        if (callStackMainView.find(function (item) {
-            return item.stackNumber === CallStackView.VideoPageStack
-        })) {
+        if (callPage.stackNumber === CallStackView.VideoPageStack) {
             videoCallPage.handleParticipantsInfo(CallAdapter.getConferencesInfos())
         }
     }
@@ -155,15 +144,18 @@ Rectangle {
         target: CallAdapter
 
         function onCallStatusChanged(status, accountId, convUid) {
-            if (responsibleConvUid === convUid && responsibleAccountId === accountId) {
+            if (callStackMainView.currentItem.stackNumber === CallStackView.OutgoingPageStack
+                    && responsibleConvUid === convUid && responsibleAccountId === accountId) {
                 outgoingCallPage.callStatus = status
             }
         }
 
         function onUpdateParticipantsInfos(infos, accountId, callId) {
-            var responsibleCallId = UtilsAdapter.getCallId(responsibleAccountId, responsibleConvUid)
-            if (responsibleCallId === callId) {
-                videoCallPage.handleParticipantsInfo(infos)
+            if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) {
+                var responsibleCallId = UtilsAdapter.getCallId(responsibleAccountId, responsibleConvUid)
+                if (responsibleCallId === callId) {
+                    videoCallPage.handleParticipantsInfo(infos)
+                }
             }
         }
     }
@@ -172,6 +164,8 @@ Rectangle {
         id: audioCallPage
 
         property int stackNumber: CallStackView.AudioPageStack
+
+        visible: callStackMainView.currentItem.stackNumber === stackNumber
     }
 
     OutgoingCallPage {
@@ -179,6 +173,8 @@ Rectangle {
 
         property int stackNumber: CallStackView.OutgoingPageStack
 
+        visible: callStackMainView.currentItem.stackNumber === stackNumber
+
         onCallCancelButtonIsClicked: {
             CallAdapter.hangUpACall(responsibleAccountId, responsibleConvUid)
         }
@@ -189,6 +185,7 @@ Rectangle {
 
         property int stackNumber: CallStackView.VideoPageStack
 
+        visible: callStackMainView.currentItem.stackNumber === stackNumber
     }
 
     IncomingCallPage {
@@ -205,6 +202,8 @@ Rectangle {
         onCallCancelButtonIsClicked: {
             CallAdapter.hangUpACall(responsibleAccountId, responsibleConvUid)
         }
+
+        visible: callStackMainView.currentItem.stackNumber === stackNumber
     }
 
     StackView {
diff --git a/src/mainview/components/CallViewContextMenu.qml b/src/mainview/components/CallViewContextMenu.qml
index 7cff8825a767891e30f240886c2127abe51ed589..5ac838d10c3e4894ce4a8cc14759772cf0950409 100644
--- a/src/mainview/components/CallViewContextMenu.qml
+++ b/src/mainview/components/CallViewContextMenu.qml
@@ -73,24 +73,26 @@ Item {
                                          })
 
         if (isAudioOnly && !isPaused)
-            ContextMenuGenerator.addMenuItem(callStackView.isFullscreen ? JamiStrings.exitFullScreen :
-                                                                          JamiStrings.fullScreen,
-                                             callStackView.isFullscreen ?
-                                                 "qrc:/images/icons/close_fullscreen-24px.svg" :
-                                                 "qrc:/images/icons/open_in_full-24px.svg",
-                                             function (){
-                                                  callStackView.toggleFullScreen()
-                                             })
+            ContextMenuGenerator.addMenuItem(
+                        JamiQmlUtils.callIsFullscreen ? JamiStrings.exitFullScreen :
+                                                         JamiStrings.fullScreen,
+                        JamiQmlUtils.callIsFullscreen ?
+                            "qrc:/images/icons/close_fullscreen-24px.svg" :
+                            "qrc:/images/icons/open_in_full-24px.svg",
+                        function (){
+                             callStackView.toggleFullScreen()
+                        })
 
         if (!isAudioOnly && !isPaused) {
-            ContextMenuGenerator.addMenuItem(callStackView.isFullscreen ? JamiStrings.exitFullScreen :
-                                                                          JamiStrings.fullScreen,
-                                             callStackView.isFullscreen ?
-                                                 "qrc:/images/icons/close_fullscreen-24px.svg" :
-                                                 "qrc:/images/icons/open_in_full-24px.svg",
-                                             function (){
-                                                  callStackView.toggleFullScreen()
-                                             })
+            ContextMenuGenerator.addMenuItem(
+                        JamiQmlUtils.callIsFullscreen ? JamiStrings.exitFullScreen :
+                                                        JamiStrings.fullScreen,
+                        JamiQmlUtils.callIsFullscreen ?
+                            "qrc:/images/icons/close_fullscreen-24px.svg" :
+                            "qrc:/images/icons/open_in_full-24px.svg",
+                        function (){
+                            callStackView.toggleFullScreen()
+                        })
 
             ContextMenuGenerator.addMenuSeparator()
 
diff --git a/src/mainview/components/VideoCallPage.qml b/src/mainview/components/VideoCallPage.qml
index 93a1ebff28d5fafe3acfd5b2d0a3c9ac666acb46..628def4981671d0ee90ba5fba6943a8dc868774a 100644
--- a/src/mainview/components/VideoCallPage.qml
+++ b/src/mainview/components/VideoCallPage.qml
@@ -40,8 +40,6 @@ Rectangle {
 
     property var linkedWebview: null
 
-    signal showFullScreenReqested
-
     function updateUI(accountId, convUid) {
         videoCallOverlay.handleParticipantsInfo(CallAdapter.getConferencesInfos())
 
diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp
index 85a6bd9a959ffb6d304688e55695e57a75558ae5..c0f7e9887c57bfa44d36abb1a06629a592c879bb 100644
--- a/src/utilsadapter.cpp
+++ b/src/utilsadapter.cpp
@@ -22,6 +22,7 @@
 
 #include "utilsadapter.h"
 
+#include "globalsystemtray.h"
 #include "lrcinstance.h"
 #include "utils.h"
 #include "version.h"
@@ -381,3 +382,9 @@ UtilsAdapter::humanFileSize(qint64 fileSize)
 {
     return Utils::humanFileSize(fileSize);
 }
+
+void
+UtilsAdapter::setSystemTrayIconVisible(bool visible)
+{
+    GlobalSystemTray::instance().setVisible(visible);
+}
diff --git a/src/utilsadapter.h b/src/utilsadapter.h
index 9cf95d9062ee03cad5ca9b7744a21aacaf013d3c..764cc4f6dde5166ee76f367741fe38c58fd8c1a6 100644
--- a/src/utilsadapter.h
+++ b/src/utilsadapter.h
@@ -80,6 +80,7 @@ public:
     Q_INVOKABLE QString getExt(const QString& path);
     Q_INVOKABLE bool isImage(const QString& fileExt);
     Q_INVOKABLE QString humanFileSize(qint64 fileSize);
+    Q_INVOKABLE void setSystemTrayIconVisible(bool visible);
 
 private:
     QClipboard* clipboard_;