diff --git a/src/java/com/android/internal/telephony/Connection.java b/src/java/com/android/internal/telephony/Connection.java
index e0b5bb8..35a0f01 100644
--- a/src/java/com/android/internal/telephony/Connection.java
+++ b/src/java/com/android/internal/telephony/Connection.java
@@ -186,6 +186,7 @@
     private Bundle mExtras;
     private int mPhoneType;
     private boolean mAnsweringDisconnectsActiveCall;
+    private boolean mAllowAddCallDuringVideoCall;
 
     protected Connection(int phoneType) {
         mPhoneType = phoneType;
@@ -758,11 +759,12 @@
      * listeners.
      */
     public void setConnectionExtras(Bundle extras) {
-        if(extras != null) {
+        if (extras != null) {
             mExtras = new Bundle(extras);
         } else {
             mExtras = null;
         }
+
         for (Listener l : mListeners) {
             l.onExtrasChanged(mExtras);
         }
@@ -773,7 +775,7 @@
      * @return the connection extras.
      */
     public Bundle getConnectionExtras() {
-        return mExtras;
+        return mExtras == null ? null : new Bundle(mExtras);
     }
 
     /**
@@ -796,6 +798,14 @@
         mAnsweringDisconnectsActiveCall = answeringDisconnectsActiveCall;
     }
 
+    public boolean shouldAllowAddCallDuringVideoCall() {
+        return mAllowAddCallDuringVideoCall;
+    }
+
+    public void setAllowAddCallDuringVideoCall(boolean allowAddCallDuringVideoCall) {
+        mAllowAddCallDuringVideoCall = allowAddCallDuringVideoCall;
+    }
+
     /**
      * Sets the call substate for the current connection and reports the changes to all listeners.
      * Valid call substates are defined in {@link android.telecom.Connection}.
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 8f96305..deeb5e5 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -137,6 +137,7 @@
                                 shouldDisconnectActiveCallOnAnswer(activeCall, imsCall);
                         conn.setActiveCallDisconnectedOnAnswer(answeringWillDisconnect);
                     }
+                    conn.setAllowAddCallDuringVideoCall(mAllowAddCallDuringVideoCall);
                     addConnection(conn);
 
                     setVideoCallProvider(conn, imsCall);
@@ -240,6 +241,12 @@
      */
     private boolean mDropVideoCallWhenAnsweringAudioCall = false;
 
+    /**
+     * Carrier configuration option which determines whether adding a call during a video call
+     * should be allowed.
+     */
+    private boolean mAllowAddCallDuringVideoCall = true;
+
     //***** Events
 
 
@@ -483,6 +490,9 @@
         mDropVideoCallWhenAnsweringAudioCall =
                 carrierConfig.getBoolean(
                         CarrierConfigManager.KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL);
+        mAllowAddCallDuringVideoCall =
+                carrierConfig.getBoolean(
+                        CarrierConfigManager.KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL);
     }
 
     private void handleEcmTimer(int action) {
@@ -557,6 +567,7 @@
             mEventLog.writeOnImsCallStart(imsCall.getSession(), callees[0]);
 
             setVideoCallProvider(conn, imsCall);
+            conn.setAllowAddCallDuringVideoCall(mAllowAddCallDuringVideoCall);
         } catch (ImsException e) {
             loge("dialInternal : " + e);
             conn.setDisconnectCause(DisconnectCause.ERROR_UNSPECIFIED);
