diff --git a/java/com/android/dialer/logging/video_tech.proto b/java/com/android/dialer/logging/video_tech.proto
new file mode 100644
index 0000000..b5cd351
--- /dev/null
+++ b/java/com/android/dialer/logging/video_tech.proto
@@ -0,0 +1,19 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+
+
+message VideoTech {
+  enum Type {
+    NONE = 0;
+
+    IMS_VIDEO_TECH = 1;
+    LIGHTBRINGER_VIDEO_TECH = 2;
+    RCS_VIDEO_SHARE = 3;
+  }
+}
\ No newline at end of file
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java b/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
index a596728..0ed81da 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
@@ -52,6 +52,10 @@
       simulatorPreviewCamera.stopCamera();
       simulatorPreviewCamera = null;
     }
+    if (previewCameraId == null && simulatorRemoteVideo != null) {
+      simulatorRemoteVideo.stopVideo();
+      simulatorRemoteVideo = null;
+    }
   }
 
   @Override
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 178a404..b82b6c9 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -200,9 +200,9 @@
   protected void onStop() {
     Trace.beginSection("InCallActivity.onStop");
     LogUtil.i("InCallActivity.onStop", "");
+    isVisible = false;
     super.onStop();
     common.onStop();
-    isVisible = false;
     Trace.endSection();
   }
 
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 4f31dad..82a29ee 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -153,9 +153,10 @@
   // Times when a second call is received but AnswerAndRelease button is not shown
   // since it's not supported.
   private int secondCallWithoutAnswerAndReleasedButtonTimes = 0;
-  private VideoTech videoTech;
+  private VideoTech videoTech = new EmptyVideoTech();
 
-  private boolean isImsReachable;
+  private com.android.dialer.logging.VideoTech.Type selectedAvailableVideoTechType =
+      com.android.dialer.logging.VideoTech.Type.NONE;
 
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -451,10 +452,15 @@
   private void update() {
     Trace.beginSection("DialerCall.update");
     int oldState = getState();
-    // Clear any cache here that could potentially change on update.
-    videoTech = null;
     // We want to potentially register a video call callback here.
     updateFromTelecomCall();
+    // Only store the first video tech type found to be available during the life of the call.
+    if (selectedAvailableVideoTechType == com.android.dialer.logging.VideoTech.Type.NONE) {
+      // Update the video tech.
+      videoTech = mVideoTechManager.findBestAvailableVideoTech();
+      videoTech.becomePrimary();
+      selectedAvailableVideoTechType = videoTech.getVideoTechType();
+    }
     if (oldState != getState() && getState() == DialerCall.State.DISCONNECTED) {
       for (DialerCallListener listener : mListeners) {
         listener.onDialerCallDisconnect();
@@ -1156,9 +1162,6 @@
   }
 
   public VideoTech getVideoTech() {
-    if (videoTech == null) {
-      videoTech = mVideoTechManager.getVideoTech();
-    }
     return videoTech;
   }
 
@@ -1333,12 +1336,8 @@
     mVideoTechManager.dispatchRemovedFromCallList();
   }
 
-  public boolean isImsReachable() {
-    return isImsReachable;
-  }
-
-  private void setImsReachable(boolean imsReachable) {
-    isImsReachable = imsReachable;
+  public com.android.dialer.logging.VideoTech.Type getSelectedAvailableVideoTechType() {
+    return selectedAvailableVideoTechType;
   }
 
   /**
@@ -1535,7 +1534,6 @@
     private final Context context;
     private final EmptyVideoTech emptyVideoTech = new EmptyVideoTech();
     private final List<VideoTech> videoTechs;
-    private VideoTech savedTech;
 
     VideoTechManager(DialerCall call) {
       this.context = call.mContext;
@@ -1547,10 +1545,7 @@
       // Insert order here determines the priority of that video tech option
       videoTechs = new ArrayList<>();
 
-      ImsVideoTech imsVideoTech =
-          new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall);
-      call.setImsReachable(imsVideoTech.isAvailable(context));
-      videoTechs.add(imsVideoTech);
+      videoTechs.add(new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall));
 
       VideoTech rcsVideoTech =
           EnrichedCallComponent.get(call.mContext)
@@ -1571,17 +1566,10 @@
               phoneNumber));
     }
 
-    VideoTech getVideoTech() {
-      if (savedTech != null) {
-        return savedTech;
-      }
-
+    VideoTech findBestAvailableVideoTech() {
       for (VideoTech tech : videoTechs) {
         if (tech.isAvailable(context)) {
-          // Remember the first VideoTech that becomes available and always use it
-          savedTech = tech;
-          savedTech.becomePrimary();
-          return savedTech;
+          return tech;
         }
       }
 
diff --git a/java/com/android/incallui/videotech/VideoTech.java b/java/com/android/incallui/videotech/VideoTech.java
index 410c357..71087cb 100644
--- a/java/com/android/incallui/videotech/VideoTech.java
+++ b/java/com/android/incallui/videotech/VideoTech.java
@@ -85,6 +85,8 @@
    */
   void becomePrimary();
 
+  com.android.dialer.logging.VideoTech.Type getVideoTechType();
+
   /** Listener for video call events. */
   interface VideoTechListener {
 
diff --git a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
index f156a14..2e34a6a 100644
--- a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
+++ b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
@@ -107,4 +107,9 @@
 
   @Override
   public void becomePrimary() {}
+
+  @Override
+  public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+    return com.android.dialer.logging.VideoTech.Type.NONE;
+  }
 }
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 0ef07d6..0310a90 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -327,6 +327,11 @@
         DialerImpression.Type.UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_IMS);
   }
 
+  @Override
+  public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+    return com.android.dialer.logging.VideoTech.Type.IMS_VIDEO_TECH;
+  }
+
   private boolean canPause() {
     return call.getDetails().can(Details.CAPABILITY_CAN_PAUSE_VIDEO);
   }
diff --git a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
index 1ddf371..9adc53b 100644
--- a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
+++ b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
@@ -195,4 +195,9 @@
   public void onLightbringerStateChanged() {
     listener.onVideoTechStateChanged();
   }
+
+  @Override
+  public com.android.dialer.logging.VideoTech.Type getVideoTechType() {
+    return com.android.dialer.logging.VideoTech.Type.LIGHTBRINGER_VIDEO_TECH;
+  }
 }
