diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
index 747ee60..7e98c6f 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
@@ -111,6 +111,7 @@
 
     private MenuItem dialPadBtn = null;
     private boolean restartVideo = false;
+    private boolean restartPreview = false;
     private PowerManager.WakeLock mScreenWakeLock;
     private int mCurrentOrientation = 0;
 
@@ -242,8 +243,13 @@
     @Override
     public void onStart() {
         super.onStart();
-        if (restartVideo) {
-            displayVideoSurface(true);
+        if (restartVideo && restartPreview) {
+            displayVideoSurface(true, !presenter.isPipMode());
+            restartVideo = false;
+            restartPreview = false;
+        }
+        else if (restartVideo) {
+            displayVideoSurface(true, false);
             restartVideo = false;
         }
     }
@@ -254,6 +260,9 @@
         if (binding.videoSurface.getVisibility() == View.VISIBLE) {
             restartVideo = true;
         }
+        if (binding.previewContainer.getVisibility() == View.VISIBLE) {
+            restartPreview = true;
+        }
     }
 
     @Nullable
@@ -449,10 +458,9 @@
     }
 
     @Override
-    public void displayVideoSurface(final boolean display) {
-        binding.videoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
-        binding.previewContainer.setVisibility(mDeviceRuntimeService.hasVideoPermission() && display ? View.VISIBLE : View.GONE);
-
+    public void displayVideoSurface(final boolean displayVideoSurface, final boolean displayPreviewContainer) {
+        binding.videoSurface.setVisibility(displayVideoSurface ? View.VISIBLE : View.GONE);
+        binding.previewContainer.setVisibility(displayPreviewContainer ? View.VISIBLE : View.GONE);
         updateMenu();
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
index 492f98c..da27b6b 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
@@ -262,9 +262,9 @@
     }
 
     @Override
-    public void displayVideoSurface(final boolean display) {
-        binding.videoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
-        binding.previewContainer.setVisibility(mDeviceRuntimeService.hasVideoPermission() && display ? View.VISIBLE : View.GONE);
+    public void displayVideoSurface(final boolean displayVideoSurface, final boolean displayPreviewContainer) {
+        binding.videoSurface.setVisibility(displayVideoSurface ? View.VISIBLE : View.GONE);
+        binding.previewContainer.setVisibility(displayPreviewContainer ? View.VISIBLE : View.GONE);
     }
 
     @Override
@@ -274,9 +274,8 @@
             //mVideoPreview.setZOrderMediaOverlay(true);
             binding.videoSurface.setZOrderMediaOverlay(false);
         } else {
-            binding.videoSurface.setZOrderMediaOverlay(false);
-            //mVideoSurface.setZOrderMediaOverlay(true);
-            //mVideoSurface.setZOrderOnTop(true);
+            binding.videoSurface.setZOrderMediaOverlay(true);
+            binding.videoSurface.setZOrderOnTop(true);
         }
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java
index 6b80fd7..bae5ae7 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java
@@ -53,6 +53,7 @@
     private boolean mOnGoingCall = false;
     private boolean mAudioOnly = true;
     private boolean permissionChanged = false;
+    private boolean pipIsActive = false;
 
     private int videoWidth = -1;
     private int videoHeight = -1;
@@ -298,7 +299,7 @@
             view.updateMenu();
             if (!mAudioOnly) {
                 mHardwareService.setPreviewSettings();
-                view.displayVideoSurface(true);
+                view.displayVideoSurface(true, mDeviceRuntimeService.hasVideoPermission());
                 if(permissionChanged) {
                     mHardwareService.switchInput(mSipCall.getCallId(), permissionChanged);
                     permissionChanged = false;
@@ -339,9 +340,9 @@
         Log.d(TAG, "VIDEO_EVENT: " + event.start + " " + event.callId + " " + event.w + "x" + event.h);
 
         if (event.start) {
-            getView().displayVideoSurface(true);
+            getView().displayVideoSurface(true, !isPipMode() && mDeviceRuntimeService.hasVideoPermission());
         } else if (mSipCall != null && mSipCall.getCallId().equals(event.callId)) {
-            getView().displayVideoSurface(event.started);
+            getView().displayVideoSurface(event.started, event.started && !isPipMode() && mDeviceRuntimeService.hasVideoPermission());
             if (event.started) {
                 videoWidth = event.w;
                 videoHeight = event.h;
@@ -391,12 +392,19 @@
         }
     }
 
+    public boolean isPipMode() {
+        return pipIsActive;
+    }
+
     public void pipModeChanged(boolean pip) {
+        pipIsActive = pip;
         if (pip) {
             getView().displayHangupButton(false);
             getView().displayPreviewSurface(false);
+            getView().displayVideoSurface(true, false);
         } else {
             getView().displayPreviewSurface(true);
+            getView().displayVideoSurface(true, mDeviceRuntimeService.hasVideoPermission());
         }
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java b/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java
index 2b06cf9..4fd3a3f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java
@@ -26,7 +26,7 @@
 
     void displayContactBubble(boolean display);
 
-    void displayVideoSurface(boolean display);
+    void displayVideoSurface(boolean displayVideoSurface, boolean displayPreviewContainer);
 
     void displayPreviewSurface(boolean display);
 
