diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 1202d13..7203e24 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -55,6 +55,7 @@
 import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.backup.BackupSettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.core.gateway.SettingsGateway;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.core.instrumentation.SharedPreferencesLogger;
@@ -209,8 +210,12 @@
 
     @Override
     public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
-        startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
-                null, 0);
+        if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+            startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, null, null, 0);
+        } else {
+            startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
+                    null, 0);
+        }
         return true;
     }
 
@@ -629,7 +634,7 @@
         if (titleRes < 0) {
             if (titleText != null) {
                 title = titleText.toString();
-            } else {
+            } else if (!InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
                 // There not much we can do in that case
                 title = "";
             }
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index a5d0715..9ab1a01 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -16,8 +16,15 @@
 
 package com.android.settings.core;
 
+import android.annotation.Nullable;
+import android.annotation.StringRes;
 import android.content.Context;
 import android.os.Bundle;
+import android.support.annotation.XmlRes;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
 
 import com.android.settings.core.instrumentation.Instrumentable;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
@@ -32,6 +39,9 @@
 public abstract class InstrumentedPreferenceFragment extends ObservablePreferenceFragment
         implements Instrumentable {
 
+    private static final String TAG = "InstrumentedPrefFrag";
+    private static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE =
+            "settings_use_preference_screen_title";
     protected MetricsFeatureProvider mMetricsFeatureProvider;
 
     // metrics placeholder value. Only use this for development.
@@ -47,6 +57,17 @@
     }
 
     @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (usePreferenceScreenTitle()) {
+            final int title = getTitle();
+            if (title != -1) {
+                getActivity().setTitle(title);
+            }
+        }
+    }
+
+    @Override
     public void onAttach(Context context) {
         super.onAttach(context);
         mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
@@ -62,6 +83,16 @@
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
     }
 
+    @Override
+    public void addPreferencesFromResource(@XmlRes int preferencesResId) {
+        super.addPreferencesFromResource(preferencesResId);
+        updateActivityTitleWithScreenTitle(getPreferenceScreen());
+    }
+
+    public static boolean usePreferenceScreenTitle() {
+        return FeatureFlagUtils.isEnabled(FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE);
+    }
+
     protected final Context getPrefContext() {
         return getPreferenceManager().getContext();
     }
@@ -69,4 +100,27 @@
     protected final VisibilityLoggerMixin getVisibilityLogger() {
         return mVisibilityLoggerMixin;
     }
+
+    /**
+     * Return the resource id of the title to be used for the fragment. This is for preference
+     * fragments that do not have an explicit preference screen xml, and hence the title need to be
+     * specified separately. Do not use this method if the title is already specified in the
+     * preference screen.
+     */
+    @StringRes
+    protected int getTitle() {
+        return -1;
+    }
+
+    private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) {
+        if (usePreferenceScreenTitle() && screen != null) {
+            final CharSequence title = screen.getTitle();
+            if (!TextUtils.isEmpty(title)) {
+                getActivity().setTitle(title);
+            } else {
+                Log.w(TAG, "Screen title missing for fragment " + this.getClass().getName());
+            }
+        }
+    }
+
 }
