diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index e485e88..4c29e45 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -60,7 +60,6 @@
 import java.lang.String;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.LinkedList;
@@ -487,11 +486,6 @@
     private ParcelFileDescriptor[] mConnectionServiceToInCallStreams;
 
     /**
-     * Abandoned RTT pipes, to be cleaned up when the call is removed
-     */
-    private Collection<ParcelFileDescriptor> mDiscardedRttFds = new LinkedList<>();
-
-    /**
      * True if we're supposed to start this call with RTT, either due to the master switch or due
      * to an extra.
      */
@@ -671,16 +665,33 @@
             mCallerInfo.cachedPhotoIcon = null;
             mCallerInfo.cachedPhoto = null;
         }
-        for (ParcelFileDescriptor fd : mDiscardedRttFds) {
-            if (fd != null) {
-                try {
-                    fd.close();
-                } catch (IOException e) {
-                    // ignore
+
+        Log.addEvent(this, LogUtils.Events.DESTROYED);
+    }
+
+    private void closeRttStreams() {
+        if (mConnectionServiceToInCallStreams != null) {
+            for (ParcelFileDescriptor fd : mConnectionServiceToInCallStreams) {
+                if (fd != null) {
+                    try {
+                        fd.close();
+                    } catch (IOException e) {
+                        // ignore
+                    }
                 }
             }
         }
-        Log.addEvent(this, LogUtils.Events.DESTROYED);
+        if (mInCallToConnectionServiceStreams != null) {
+            for (ParcelFileDescriptor fd : mInCallToConnectionServiceStreams) {
+                if (fd != null) {
+                    try {
+                        fd.close();
+                    } catch (IOException e) {
+                        // ignore
+                    }
+                }
+            }
+        }
     }
 
     /** {@inheritDoc} */
@@ -1308,12 +1319,8 @@
                 && mDidRequestToStartWithRtt && !areRttStreamsInitialized()) {
             // If the phone account got set to an RTT capable one and we haven't set the streams
             // yet, do so now.
-            setRttStreams(true);
+            createRttStreams();
             Log.i(this, "Setting RTT streams after target phone account selected");
-        } else if (!isRttSupported && !isConnectionManagerRttSupported) {
-            // If the phone account got set to RTT-incapable, unset the streams.
-            Log.i(this, "Unsetting RTT streams after target phone account selected");
-            setRttStreams(false);
         }
     }
 
@@ -1418,8 +1425,10 @@
         if (changedProperties != 0) {
             int previousProperties = mConnectionProperties;
             mConnectionProperties = connectionProperties;
-            setRttStreams((mConnectionProperties & Connection.PROPERTY_IS_RTT) ==
-                    Connection.PROPERTY_IS_RTT);
+            if ((mConnectionProperties & Connection.PROPERTY_IS_RTT) ==
+                    Connection.PROPERTY_IS_RTT) {
+                createRttStreams();
+            }
             mWasHighDefAudio = (connectionProperties & Connection.PROPERTY_HIGH_DEF_AUDIO) ==
                     Connection.PROPERTY_HIGH_DEF_AUDIO;
             boolean didRttChange =
@@ -2525,7 +2534,7 @@
     }
 
     public void sendRttRequest() {
-        setRttStreams(true);
+        createRttStreams();
         mConnectionService.startRtt(this, getInCallToCsRttPipeForCs(), getCsToInCallRttPipeForCs());
     }
 
@@ -2534,10 +2543,9 @@
                 && mConnectionServiceToInCallStreams != null;
     }
 
-    public void setRttStreams(boolean shouldBeRtt) {
-        boolean areStreamsInitialized = areRttStreamsInitialized();
-        Log.i(this, "Setting RTT streams to %b, currently %b", shouldBeRtt, areStreamsInitialized);
-        if (shouldBeRtt && !areStreamsInitialized) {
+    public void createRttStreams() {
+        if (!areRttStreamsInitialized()) {
+            Log.i(this, "Initializing RTT streams");
             try {
                 mWasEverRtt = true;
                 mInCallToConnectionServiceStreams = ParcelFileDescriptor.createReliablePipe();
@@ -2545,16 +2553,11 @@
             } catch (IOException e) {
                 Log.e(this, e, "Failed to create pipes for RTT call.");
             }
-        } else if (!shouldBeRtt && areStreamsInitialized) {
-            closeRttPipes();
-            mInCallToConnectionServiceStreams = null;
-            mConnectionServiceToInCallStreams = null;
         }
     }
 
     public void onRttConnectionFailure(int reason) {
         Log.i(this, "Got RTT initiation failure with reason %d", reason);
-        setRttStreams(false);
         for (Listener l : mListeners) {
             l.onRttInitiationFailure(this, reason);
         }
@@ -2581,8 +2584,8 @@
             Log.w(this, "Response ID %d does not match expected %d", id, mPendingRttRequestId);
             return;
         }
-        setRttStreams(accept);
         if (accept) {
+            createRttStreams();
             Log.i(this, "RTT request %d accepted.", id);
             mConnectionService.respondToRttRequest(
                     this, getInCallToCsRttPipeForCs(), getCsToInCallRttPipeForCs());
@@ -2592,18 +2595,6 @@
         }
     }
 
-    public void closeRttPipes() {
-        // Defer closing until the call is destroyed
-        if (mInCallToConnectionServiceStreams != null) {
-            mDiscardedRttFds.add(mInCallToConnectionServiceStreams[0]);
-            mDiscardedRttFds.add(mInCallToConnectionServiceStreams[1]);
-        }
-        if (mConnectionServiceToInCallStreams != null) {
-            mDiscardedRttFds.add(mConnectionServiceToInCallStreams[0]);
-            mDiscardedRttFds.add(mConnectionServiceToInCallStreams[1]);
-        }
-    }
-
     public boolean isRttCall() {
         return (mConnectionProperties & Connection.PROPERTY_IS_RTT) == Connection.PROPERTY_IS_RTT;
     }
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index e83f28b..1f60d27 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -915,12 +915,12 @@
                 call.setIsVoipAudioMode(true);
             }
         }
-        if (isRttSettingOn() ||
+        if (isRttSettingOn() &&
                 extras.getBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT, false)) {
             Log.d(this, "Incoming call requesting RTT, rtt setting is %b", isRttSettingOn());
             if (phoneAccount != null &&
                     phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_RTT)) {
-                call.setRttStreams(true);
+                call.createRttStreams();
             }
             // Even if the phone account doesn't support RTT yet, the connection manager might
             // change that. Set this to check it later.
@@ -1211,7 +1211,7 @@
                 Log.d(this, "Outgoing call requesting RTT, rtt setting is %b", isRttSettingOn());
                 if (accountToUse != null
                         && accountToUse.hasCapabilities(PhoneAccount.CAPABILITY_RTT)) {
-                    call.setRttStreams(true);
+                    call.createRttStreams();
                 }
                 // Even if the phone account doesn't support RTT yet, the connection manager might
                 // change that. Set this to check it later.
@@ -1778,8 +1778,7 @@
 
     private boolean isRttSettingOn() {
         return Settings.System.getInt(mContext.getContentResolver(),
-                Settings.System.RTT_CALLING_MODE, TelecomManager.TTY_MODE_OFF)
-                != TelecomManager.TTY_MODE_OFF;
+                Settings.System.RTT_CALLING_MODE, 0) != 0;
     }
 
     void phoneAccountSelected(Call call, PhoneAccountHandle account, boolean setDefault) {
@@ -1801,7 +1800,7 @@
                         " rtt setting is %b", isRttSettingOn());
                 if (realPhoneAccount != null
                         && realPhoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_RTT)) {
-                    call.setRttStreams(true);
+                    call.createRttStreams();
                 }
                 // Even if the phone account doesn't support RTT yet, the connection manager might
                 // change that. Set this to check it later.
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index 3c0e756..77598c8 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -342,7 +342,10 @@
         android.telecom.Call.Details.PROPERTY_SELF_MANAGED,
 
         Connection.PROPERTY_ASSISTED_DIALING_USED,
-        android.telecom.Call.Details.PROPERTY_ASSISTED_DIALING_USED
+        android.telecom.Call.Details.PROPERTY_ASSISTED_DIALING_USED,
+
+        Connection.PROPERTY_IS_RTT,
+        android.telecom.Call.Details.PROPERTY_RTT
     };
 
     private static int convertConnectionToCallProperties(int connectionProperties) {
