diff --git a/src/ConversationVC.h b/src/ConversationVC.h
index c658882..ecc86cc 100644
--- a/src/ConversationVC.h
+++ b/src/ConversationVC.h
@@ -26,8 +26,8 @@
 @interface ConversationVC : NSViewController
 
 -(void) initFrame;
--(void) animateIn;
--(void) animateOut;
+-(void) showWithAnimation:(BOOL)animate;
+-(void) hideWithAnimation:(BOOL)animate;
 
 /**
  * Message contained in messageField TextField.
diff --git a/src/ConversationVC.mm b/src/ConversationVC.mm
index ec1fe40..c42559d 100644
--- a/src/ConversationVC.mm
+++ b/src/ConversationVC.mm
@@ -235,13 +235,18 @@
 
 - (IBAction)backPressed:(id)sender {
     [delegate rightPanelClosed];
-    [self animateOut];
+    [self hideWithAnimation:false];
 }
 
 # pragma mark private IN/OUT animations
 
--(void) animateIn
+-(void) showWithAnimation:(BOOL)animate
 {
+    if (!animate) {
+        [self.view setHidden:NO];
+        return;
+    }
+
     CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
     [self.view setHidden:NO];
 
@@ -256,12 +261,17 @@
     [CATransaction commit];
 }
 
--(void) animateOut
+-(void) hideWithAnimation:(BOOL)animate
 {
     if(self.view.frame.origin.x < 0) {
         return;
     }
 
+    if (!animate) {
+        [self.view setHidden:YES];
+        return;
+    }
+
     CGRect frame = CGRectOffset(self.view.frame, -self.view.frame.size.width, 0);
     [CATransaction begin];
     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
diff --git a/src/CurrentCallVC.h b/src/CurrentCallVC.h
index 8caf624..d59c77f 100644
--- a/src/CurrentCallVC.h
+++ b/src/CurrentCallVC.h
@@ -33,8 +33,8 @@
 }
 
 -(void) initFrame;
--(void) animateIn;
--(void) animateOut;
+-(void) showWithAnimation:(BOOL)animate;
+-(void) hideWithAnimation:(BOOL)animate;
 -(void) setCurrentCall:(const std::string&)callUid
           conversation:(const std::string&)convUid
                account:(const lrc::api::account::Info*)account;
diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm
index 568019a..0993f93 100644
--- a/src/CurrentCallVC.mm
+++ b/src/CurrentCallVC.mm
@@ -271,7 +271,7 @@
         case Status::INVALID:
             [controlsPanel setHidden:YES];
             [outgoingPanel setHidden:NO];
-            [self animateOut];
+            [self hideWithAnimation:false];
             break;
     }
 
@@ -504,55 +504,6 @@
     [self.chatVC takeFocus];
 }
 
--(void) animateIn
-{
-    CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
-    [self.view setHidden:NO];
-
-    [CATransaction begin];
-    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
-    [animation setFromValue:[NSValue valueWithPoint:frame.origin]];
-    [animation setToValue:[NSValue valueWithPoint:self.view.superview.bounds.origin]];
-    [animation setDuration:0.2f];
-    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
-    [CATransaction setCompletionBlock:^{
-        if (accountInfo_ == nil)
-            return;
-
-        auto* callModel = accountInfo_->callModel.get();
-        auto* convModel = accountInfo_->conversationModel.get();
-
-        // when call comes in we want to show the controls/header
-        [self mouseIsMoving:YES];
-
-        [self connectVideoSignals];
-        /* check if text media is already present */
-        if(not callModel->hasCall(callUid_))
-            return;
-
-        [loadingIndicator setAnimates:YES];
-        [self updateCall:YES];
-
-        /* monitor media for messaging text messaging */
-        QObject::disconnect(self.messageConnection);
-        self.messageConnection = QObject::connect(convModel,
-                                                  &lrc::api::ConversationModel::interactionStatusUpdated,
-                                                  [self] (std::string convUid,
-                                                          uint64_t msgId,
-                                                          lrc::api::interaction::Info msg) {
-                                                      if (msg.type == lrc::api::interaction::Type::TEXT) {
-                                                          if(not [[self splitView] isSubviewCollapsed:[[[self splitView] subviews] objectAtIndex: 1]]){
-                                                              return;
-                                                          }
-                                                          [self uncollapseRightView];
-                                                      }
-                                                  });
-    }];
-
-    [self.view.layer addAnimation:animation forKey:animation.keyPath];
-    [CATransaction commit];
-}
-
 -(void) cleanUp
 {
     if(self.splitView.isInFullScreenMode)
@@ -586,12 +537,77 @@
     [advancedPanel setHidden:YES];
 }
 
--(void) animateOut
+-(void) setupCallView
+{
+    if (accountInfo_ == nil)
+        return;
+
+    auto* callModel = accountInfo_->callModel.get();
+    auto* convModel = accountInfo_->conversationModel.get();
+
+    // when call comes in we want to show the controls/header
+    [self mouseIsMoving:YES];
+
+    [self connectVideoSignals];
+    /* check if text media is already present */
+    if(not callModel->hasCall(callUid_))
+        return;
+
+    [loadingIndicator setAnimates:YES];
+    [self updateCall:YES];
+
+    /* monitor media for messaging text messaging */
+    QObject::disconnect(self.messageConnection);
+    self.messageConnection = QObject::connect(convModel,
+                                              &lrc::api::ConversationModel::interactionStatusUpdated,
+                                              [self] (std::string convUid,
+                                                      uint64_t msgId,
+                                                      lrc::api::interaction::Info msg) {
+                                                  if (msg.type == lrc::api::interaction::Type::TEXT) {
+                                                      if(not [[self splitView] isSubviewCollapsed:[[[self splitView] subviews] objectAtIndex: 1]]){
+                                                          return;
+                                                      }
+                                                      [self uncollapseRightView];
+                                                  }
+                                              });
+}
+
+-(void) showWithAnimation:(BOOL)animate
+{
+    if (!animate) {
+        [self.view setHidden:NO];
+        [self setupCallView];
+        return;
+    }
+
+    CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
+    [self.view setHidden:NO];
+
+    [CATransaction begin];
+    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
+    [animation setFromValue:[NSValue valueWithPoint:frame.origin]];
+    [animation setToValue:[NSValue valueWithPoint:self.view.superview.bounds.origin]];
+    [animation setDuration:0.2f];
+    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
+    [CATransaction setCompletionBlock:^{
+        [self setupCallView];
+    }];
+
+    [self.view.layer addAnimation:animation forKey:animation.keyPath];
+    [CATransaction commit];
+}
+
+-(void) hideWithAnimation:(BOOL)animate
 {
     if(self.view.frame.origin.x < 0) {
         return;
     }
 
+    if (!animate) {
+        [self.view setHidden:YES];
+        return;
+    }
+
     CGRect frame = CGRectOffset(self.view.frame, -self.view.frame.size.width, 0);
     [CATransaction begin];
     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm
index a5c4928..f4ebace 100644
--- a/src/RingWindowController.mm
+++ b/src/RingWindowController.mm
@@ -75,7 +75,8 @@
     IBOutlet SmartViewVC* smartViewVC;
 
     CurrentCallVC* currentCallVC;
-    ConversationVC* offlineVC;
+    ConversationVC* conversationVC;
+
     // toolbar menu items
     ChooseAccountVC* chooseAccountVC;
 }
@@ -93,18 +94,18 @@
     lrc_ = std::make_unique<lrc::api::Lrc>();
 
     currentCallVC = [[CurrentCallVC alloc] initWithNibName:@"CurrentCall" bundle:nil];
-    offlineVC = [[ConversationVC alloc] initWithNibName:@"Conversation" bundle:nil delegate:self];
+    conversationVC = [[ConversationVC alloc] initWithNibName:@"Conversation" bundle:nil delegate:self];
     // toolbar items
     chooseAccountVC = [[ChooseAccountVC alloc] initWithNibName:@"ChooseAccount" bundle:nil model:&(lrc_->getAccountModel()) delegate:self];
     [callView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [[currentCallVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
-    [[offlineVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+    [[conversationVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
     [callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil];
-    [callView addSubview:[offlineVC view] positioned:NSWindowAbove relativeTo:nil];
+    [callView addSubview:[conversationVC view] positioned:NSWindowAbove relativeTo:nil];
 
     [currentCallVC initFrame];
-    [offlineVC initFrame];
+    [conversationVC initFrame];
     @try {
         [smartViewVC setConversationModel: [chooseAccountVC selectedAccount].conversationModel.get()];
     }
@@ -139,8 +140,8 @@
                                           conversation:convInfo.uid
                                                account:accInfo];
                          [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
-                         [currentCallVC animateIn];
-                         [offlineVC animateOut];
+                         [currentCallVC showWithAnimation:false];
+                         [conversationVC hideWithAnimation:false];
                      });
 
     QObject::connect(&lrc_->getBehaviorController(),
@@ -157,8 +158,8 @@
                                           conversation:convInfo.uid
                                                account:accInfo];
                          [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
-                         [currentCallVC animateIn];
-                         [offlineVC animateOut];
+                         [currentCallVC showWithAnimation:false];
+                         [conversationVC hideWithAnimation:false];
                      });
 
     QObject::connect(&lrc_->getBehaviorController(),
@@ -166,10 +167,10 @@
                      [self](const std::string& accountId,
                             const lrc::api::conversation::Info& convInfo){
                          auto& accInfo = lrc_->getAccountModel().getAccountInfo(accountId);
-                         [offlineVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
+                         [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
                          [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
-                         [offlineVC animateIn];
-                         [currentCallVC animateOut];
+                         [conversationVC showWithAnimation:false];
+                         [currentCallVC hideWithAnimation:false];
                      });
 }
 
@@ -371,8 +372,8 @@
 {
     // If the selected account has been changed, we close any open panel
     if ([smartViewVC setConversationModel:accInfo.conversationModel.get()]) {
-        [currentCallVC animateOut];
-        [offlineVC animateOut];
+        [currentCallVC hideWithAnimation:false];
+        [conversationVC hideWithAnimation:false];
     }
 
     // Welcome view informations are also updated
@@ -390,8 +391,8 @@
 }
 
 -(void) listTypeChanged {
-    [offlineVC animateOut];
-    [currentCallVC animateOut];
+    [conversationVC hideWithAnimation:false];
+    [currentCallVC hideWithAnimation:false];
 }
 
 #pragma mark - NSToolbarDelegate
