diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index 89a4641..488e117 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -16,29 +16,30 @@
 
 package com.android.settings;
 
-import static android.provider.Settings.Secure.TTS_USE_DEFAULTS;
-import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
-import static android.provider.Settings.Secure.TTS_DEFAULT_LANG;
 import static android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY;
-import static android.provider.Settings.Secure.TTS_DEFAULT_VARIANT;
+import static android.provider.Settings.Secure.TTS_DEFAULT_LANG;
+import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
 import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
+import static android.provider.Settings.Secure.TTS_DEFAULT_VARIANT;
 import static android.provider.Settings.Secure.TTS_ENABLED_PLUGINS;
+import static android.provider.Settings.Secure.TTS_USE_DEFAULTS;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.Bundle;
+import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
-import android.preference.CheckBoxPreference;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.speech.tts.TextToSpeech;
@@ -49,7 +50,7 @@
 import java.util.Locale;
 import java.util.StringTokenizer;
 
-public class TextToSpeechSettings extends PreferenceActivity implements
+public class TextToSpeechSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
         TextToSpeech.OnInitListener {
 
@@ -90,8 +91,6 @@
     private String             mDefaultEng = "";
     private int                mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
 
-    // Array of strings used to demonstrate TTS in the different languages.
-    private String[] mDemoStrings;
     // Index of the current string to use for the demo.
     private int      mDemoStringIndex = 0;
 
@@ -109,16 +108,14 @@
     private static final int GET_SAMPLE_TEXT = 1983;
 
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
+    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         addPreferencesFromResource(R.xml.tts_settings);
 
-        addEngineSpecificSettings();
+        final Activity activity = getActivity();
+        addEngineSpecificSettings(activity);
 
-        mDemoStrings = getResources().getStringArray(R.array.tts_demo_strings);
-
-        setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
+        activity.setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
 
         mEnableDemo = false;
         mTtsStarted = false;
@@ -128,12 +125,12 @@
         mDefaultCountry = currentLocale.getISO3Country();
         mDefaultLocVariant = currentLocale.getVariant();
 
-        mTts = new TextToSpeech(this, this);
+        mTts = new TextToSpeech(activity, this);
     }
 
 
     @Override
-    protected void onStart() {
+    public void onStart() {
         super.onStart();
         if (mTtsStarted){
             // whenever we return to this screen, we don't know the state of the
@@ -147,7 +144,7 @@
 
 
     @Override
-    protected void onDestroy() {
+    public void onDestroy() {
         super.onDestroy();
         if (mTts != null) {
             mTts.shutdown();
@@ -155,7 +152,7 @@
     }
 
     @Override
-    protected void onPause() {
+    public void onPause() {
         super.onPause();
         if ((mDefaultRatePref != null) && (mDefaultRatePref.getDialog() != null)) {
             mDefaultRatePref.getDialog().dismiss();
@@ -168,9 +165,7 @@
         }
     }
 
-
-
-    private void addEngineSpecificSettings() {
+    private void addEngineSpecificSettings(Context context) {
         PreferenceGroup enginesCategory = (PreferenceGroup) findPreference("tts_engines_section");
         Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");
         ResolveInfo[] enginesArray = new ResolveInfo[0];
@@ -180,14 +175,14 @@
             String prefKey = "";
             final String pluginPackageName = enginesArray[i].activityInfo.packageName;
             if (!enginesArray[i].activityInfo.packageName.equals(SYSTEM_TTS)) {
-                CheckBoxPreference chkbxPref = new CheckBoxPreference(this);
+                CheckBoxPreference chkbxPref = new CheckBoxPreference(context);
                 prefKey = KEY_PLUGIN_ENABLED_PREFIX + pluginPackageName;
                 chkbxPref.setKey(prefKey);
                 chkbxPref.setTitle(enginesArray[i].loadLabel(pm));
                 enginesCategory.addPreference(chkbxPref);
             }
             if (pluginHasSettings(pluginPackageName)) {
-                Preference pref = new Preference(this);
+                Preference pref = new Preference(context);
                 prefKey = KEY_PLUGIN_SETTINGS_PREFIX + pluginPackageName;
                 pref.setKey(prefKey);
                 pref.setTitle(enginesArray[i].loadLabel(pm));
@@ -360,7 +355,7 @@
                 mDefaultLocVariant = new String();
             }
             mTts.setLanguage(new Locale(mDefaultLanguage, mDefaultCountry, mDefaultLocVariant));
-            mTts.setSpeechRate((float)(mDefaultRate/100.0f));
+            mTts.setSpeechRate(mDefaultRate/100.0f);
             initDefaultSettings();
             initClickers();
             updateWidgetState();
@@ -378,7 +373,8 @@
     /**
      * Called when voice data integrity check returns
      */
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
             if (data == null){
                 // The CHECK_TTS_DATA activity for the plugin did not run properly;
@@ -402,7 +398,7 @@
             }
             if (available.size() > 0){
                 if (mTts == null) {
-                    mTts = new TextToSpeech(this, this);
+                    mTts = new TextToSpeech(getActivity(), this);
                 }
                 ListPreference ttsLanguagePref =
                         (ListPreference) findPreference("tts_default_lang");
@@ -478,7 +474,7 @@
             updateWidgetState();
         } else if (requestCode == GET_SAMPLE_TEXT) {
             if (resultCode == TextToSpeech.LANG_AVAILABLE) {
-                String sample = getString(R.string.tts_demo);
+                String sample = getActivity().getString(R.string.tts_demo);
                 if ((data != null) && (data.getStringExtra("sampleText") != null)) {
                     sample = data.getStringExtra("sampleText");
                 }
@@ -492,7 +488,6 @@
         }
     }
 
-
     public boolean onPreferenceChange(Preference preference, Object objValue) {
         if (KEY_TTS_USE_DEFAULT.equals(preference.getKey())) {
             // "Use Defaults"
@@ -507,7 +502,7 @@
                 Settings.Secure.putInt(getContentResolver(),
                         TTS_DEFAULT_RATE, mDefaultRate);
                 if (mTts != null) {
-                    mTts.setSpeechRate((float)(mDefaultRate/100.0f));
+                    mTts.setSpeechRate(mDefaultRate/100.0f);
                 }
                 Log.i(TAG, "TTS default rate is " + mDefaultRate);
             } catch (NumberFormatException e) {
@@ -575,10 +570,11 @@
             if (!chkPref.getKey().equals(KEY_TTS_USE_DEFAULT)){
                 if (chkPref.isChecked()) {
                     chkPref.setChecked(false);
-                    AlertDialog d = (new AlertDialog.Builder(this))
+                    AlertDialog d = (new AlertDialog.Builder(getActivity()))
                             .setTitle(android.R.string.dialog_alert_title)
                             .setIcon(android.R.drawable.ic_dialog_alert)
-                            .setMessage(getString(R.string.tts_engine_security_warning,
+                            .setMessage(
+                                    getActivity().getString(R.string.tts_engine_security_warning,
                                     chkPref.getTitle()))
                             .setCancelable(true)
                             .setPositiveButton(android.R.string.ok,
