diff --git a/src/CurrentCallVC.h b/src/CurrentCallVC.h
index d59c77f2f1f3e3f0b9f1ea48ad3b575f56424bf0..e1b4108e98065281bc679695fb259f75ea26df89 100644
--- a/src/CurrentCallVC.h
+++ b/src/CurrentCallVC.h
@@ -31,7 +31,6 @@ class Call;
 @interface CurrentCallVC : NSViewController <NSSplitViewDelegate, CallDelegate> {
 
 }
-
 -(void) initFrame;
 -(void) showWithAnimation:(BOOL)animate;
 -(void) hideWithAnimation:(BOOL)animate;
diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm
index 27b447786c75d166795cab4409d40206861a7a6e..279d65c766a8f5b4de0042a5a5081b1ff94994aa 100644
--- a/src/CurrentCallVC.mm
+++ b/src/CurrentCallVC.mm
@@ -387,6 +387,7 @@
                                          &lrc::api::NewCallModel::remotePreviewStarted,
                                          [self](const std::string& callId, Video::Renderer* renderer) {
                                              NSLog(@"Video started!");
+                                             [videoView setLayer:[[CallLayer alloc] init]];
                                              [videoView setShouldAcceptInteractions:YES];
                                              [self mouseIsMoving: NO];
                                              [self connectVideoRenderer:renderer];
@@ -395,6 +396,7 @@
     if (callModel->hasCall(callUid_)) {
         if (auto renderer = callModel->getRenderer(callUid_)) {
             QObject::disconnect(self.videoStarted);
+             [videoView setLayer:[[CallLayer alloc] init]];
             [self connectVideoRenderer: renderer];
         }
     }
@@ -465,6 +467,8 @@
     videoHolder.stopped = QObject::connect(renderer,
                      &Video::Renderer::stopped,
                      [=]() {
+                         [videoView setLayer:[CALayer layer]];
+                         [videoView.layer setBackgroundColor:[[NSColor blackColor] CGColor]];
                          [self mouseIsMoving: YES];
                          [videoView setShouldAcceptInteractions:NO];
                          QObject::disconnect(videoHolder.frameUpdated);
@@ -559,7 +563,8 @@
     QObject::disconnect(previewHolder.started);
     QObject::disconnect(self.messageConnection);
     [previewView.layer setContents:nil];
-    [(CallLayer*)videoView.layer setVideoRunning:NO];
+    [videoView setLayer:[CALayer layer]];
+    [videoView.layer setBackgroundColor:[[NSColor blackColor] CGColor]];
 
     [_brokerPopoverVC performClose:self];
     [self.addToContactPopover performClose:self];
diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm
index 260c9335b176dadb1007b915292e79ee02133c43..ffd3f32168955402bbec3fdaba82ca95b85350b9 100644
--- a/src/RingWindowController.mm
+++ b/src/RingWindowController.mm
@@ -56,6 +56,14 @@
 #import "utils.h"
 #import "RingWizardWC.h"
 #import "AccountSettingsVC.h"
+#import "views/CallLayer.h"
+
+typedef NS_ENUM(NSInteger, ViewState) {
+    SHOW_WELCOME_SCREEN = 0,
+    SHOW_CONVERSATION_SCREEN,
+    SHOW_CALL_SCREEN,
+    SHOW_SETTINGS_SCREEN,
+};
 
 @interface RingWindowController () <MigrateRingAccountsDelegate, NSToolbarDelegate>
 
@@ -104,6 +112,58 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
     return self;
 }
 
+-(void)changeViewTo:(ViewState) state  {
+    switch (state) {
+        case SHOW_WELCOME_SCREEN:
+            [self accountSettingsShouldOpen: NO];
+            [conversationVC hideWithAnimation:false];
+            [currentCallVC hideWithAnimation:false];
+            [currentCallVC.view removeFromSuperview];
+            [welcomeContainer setHidden: NO];
+            [smartViewVC.view setHidden: NO];
+            [settingsVC hide];
+            break;
+        case SHOW_CONVERSATION_SCREEN:
+            [self accountSettingsShouldOpen: NO];
+            [conversationVC showWithAnimation:false];
+            [currentCallVC hideWithAnimation:false];
+            [currentCallVC.view removeFromSuperview];
+            [welcomeContainer setHidden: YES];
+            [smartViewVC.view setHidden: NO];
+            [settingsVC hide];
+            break;
+        case SHOW_CALL_SCREEN:
+            [self accountSettingsShouldOpen: NO];
+            if (![currentCallVC.view superview]) {
+            [callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil];
+            [currentCallVC initFrame];
+            [currentCallVC showWithAnimation:false];
+            [conversationVC hideWithAnimation:false];
+            [welcomeContainer setHidden: YES];
+            [smartViewVC.view setHidden: NO];
+            [settingsVC hide];
+            }
+            [currentCallVC showWithAnimation:false];
+            break;
+        case SHOW_SETTINGS_SCREEN:
+            @try {
+                [self accountSettingsShouldOpen: YES];
+            }
+            @catch (NSException *ex) {
+                return;
+            }
+            [welcomeContainer setHidden: YES];
+            [currentCallVC hideWithAnimation:false];
+            [currentCallVC.view removeFromSuperview];
+            [conversationVC hideWithAnimation:false];
+            [smartViewVC.view setHidden: YES];
+            [settingsVC show];
+            break;
+        default:
+            break;
+    }
+}
+
 - (void)windowDidLoad {
     [super windowDidLoad];
     [self.window setMovableByWindowBackground:YES];
@@ -120,11 +180,9 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
     [[conversationVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [[settingsVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
-    [callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil];
     [callView addSubview:[conversationVC view] positioned:NSWindowAbove relativeTo:nil];
     [self.window.contentView addSubview:[settingsVC view] positioned:NSWindowAbove relativeTo:nil];
 
-    [currentCallVC initFrame];
     [conversationVC initFrame];
     [settingsVC initFrame];
     @try {
@@ -173,10 +231,8 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
                                           conversation:convInfo.uid
                                                account:accInfo];
                          [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
-                         [currentCallVC showWithAnimation:false];
-                         [conversationVC hideWithAnimation:false];
-                         [self accountSettingsShouldOpen: NO];
-                         [welcomeContainer setHidden: YES];
+                         [self changeViewTo:SHOW_CALL_SCREEN];
+
                      });
 
     QObject::connect(self.behaviorController,
@@ -193,10 +249,7 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
                                           conversation:convInfo.uid
                                                account:accInfo];
                          [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
-                         [currentCallVC showWithAnimation:false];
-                         [conversationVC hideWithAnimation:false];
-                         [self accountSettingsShouldOpen: NO];
-                         [welcomeContainer setHidden: YES];
+                         [self changeViewTo:SHOW_CALL_SCREEN];
                      });
 
     QObject::connect(self.behaviorController,
@@ -206,10 +259,7 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
                          auto& accInfo = self.accountModel->getAccountInfo(accountId);
                          [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
                          [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
-                         [conversationVC showWithAnimation:false];
-                         [currentCallVC hideWithAnimation:false];
-                         [self accountSettingsShouldOpen: NO];
-                         [welcomeContainer setHidden: YES];
+                         [self changeViewTo:SHOW_CONVERSATION_SCREEN];
                      });
 }
 
@@ -420,25 +470,17 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
 - (void) selectAccount:(const lrc::api::account::Info&)accInfo currentRemoved:(BOOL) removed
 {
     // If the selected account has been changed, we close any open panel
-    if ([smartViewVC setConversationModel:accInfo.conversationModel.get()]) {
-        [currentCallVC hideWithAnimation:false];
-        [conversationVC hideWithAnimation:false];
-    }
-
+    [smartViewVC setConversationModel:accInfo.conversationModel.get()];
     // Welcome view informations are also updated
     [self updateRingID];
     [settingsVC setSelectedAccount:accInfo.id];
-    if (removed) {
-        [self accountSettingsShouldOpen: NO];
-    }
+    [self changeViewTo: ([settingsVC.view isHidden] || removed)  ?  SHOW_WELCOME_SCREEN : SHOW_SETTINGS_SCREEN];
 }
 
 -(void)allAccountsDeleted
 {
     [smartViewVC clearConversationModel];
-    [currentCallVC hideWithAnimation:false];
-    [conversationVC hideWithAnimation:false];
-    [self accountSettingsShouldOpen: NO];
+    [self changeViewTo:SHOW_WELCOME_SCREEN];
     [self updateRingID];
 }
 
@@ -454,10 +496,7 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
 }
 
 -(void) listTypeChanged {
-    [conversationVC hideWithAnimation:false];
-    [currentCallVC hideWithAnimation:false];
-    [self accountSettingsShouldOpen: NO];
-    [welcomeContainer setHidden: NO];
+    [self changeViewTo:SHOW_WELCOME_SCREEN];
 }
 
 #pragma mark - NSToolbarDelegate
@@ -493,38 +532,20 @@ NSString* const kOpenAccountToolBarItemIdentifier    = @"OpenAccountToolBarItemI
 
 - (IBAction)openAccountSettings:(NSButton *)sender
 {
-    if(![settingsVC.view isHidden]) {
-        [self accountSettingsShouldOpen: NO];
-        return;
-    }
-    [self accountSettingsShouldOpen: YES];
+    [self changeViewTo: [settingsVC.view isHidden] ?  SHOW_SETTINGS_SCREEN : SHOW_WELCOME_SCREEN];
 }
 
 - (void) createNewAccount {
-    [self accountSettingsShouldOpen: NO];
-    [currentCallVC hideWithAnimation:false];
-    [conversationVC hideWithAnimation:false];
+    [self changeViewTo:SHOW_WELCOME_SCREEN];
     wizard = [[RingWizardWC alloc] initWithNibName:@"RingWizard" bundle: nil accountmodel: self.accountModel];
     [wizard showChooseWithCancelButton: YES andAdvanced: YES];
     [self.window beginSheet:wizard.window completionHandler:nil];
 }
 
 -(void) accountSettingsShouldOpen: (BOOL) open {
-    [smartViewVC.view setHidden:open];
-    [welcomeContainer setHidden: open];
+
     if (open) {
-        @try {
-            [settingsVC setSelectedAccount: [chooseAccountVC selectedAccount].id];
-        }
-        @catch (NSException *ex) {
-            NSLog(@"Caught exception %@: %@", [ex name], [ex reason]);
-            return;
-        }
-        [currentCallVC hideWithAnimation:false];
-        [conversationVC hideWithAnimation:false];
-        [settingsVC show];
-    } else {
-        [settingsVC hide];
+        [settingsVC setSelectedAccount: [chooseAccountVC selectedAccount].id];
     }
     NSToolbar *toolbar = self.window.toolbar;
     NSArray *settings = [toolbar items];
diff --git a/src/views/CallView.mm b/src/views/CallView.mm
index e120a010ccd6c54468949b2bca102819297bc019..b9a3ffd6043ddc115dd7a2adcbca76bbedc021a5 100644
--- a/src/views/CallView.mm
+++ b/src/views/CallView.mm
@@ -51,6 +51,8 @@
     {
         [self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
         [self setWantsLayer:YES];
+        [self setLayer:[CALayer layer]];
+        [self.layer setBackgroundColor:[[NSColor blackColor] CGColor]];
     }
 
     [self.window setAcceptsMouseMovedEvents:YES];
@@ -66,12 +68,6 @@
     return self;
 }
 
-- (CALayer *)makeBackingLayer
-{
-    return (CALayer*) [[CallLayer alloc] init];
-}
-
-
 #pragma mark - Destination Operations
 
 - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender