diff --git a/tests/Android.mk b/tests/Android.mk
index b14ca93..7bd3b00 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -5,7 +5,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, java)
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
+LOCAL_STATIC_JAVA_LIBRARIES := mockito-target android-support-v4
 LOCAL_JAVA_LIBRARIES := android.test.runner
 LOCAL_PACKAGE_NAME := AndroidSupportTests
 
diff --git a/v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV1Test.java b/tests/java/android/support/v4/speech/tts/TTSImplementationV1Test.java
similarity index 97%
rename from v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV1Test.java
rename to tests/java/android/support/v4/speech/tts/TTSImplementationV1Test.java
index 840ae14..f006042 100644
--- a/v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV1Test.java
+++ b/tests/java/android/support/v4/speech/tts/TTSImplementationV1Test.java
@@ -14,14 +14,14 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.UtteranceProgressListener;
-import android.support.v8.speech.tts.TextToSpeechClient.ConnectionCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.EngineStatus;
-import android.support.v8.speech.tts.TextToSpeechClient.RequestCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.UtteranceId;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.EngineStatus;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.UtteranceId;
 import android.test.InstrumentationTestCase;
 
 import org.mockito.ArgumentCaptor;
@@ -439,4 +439,3 @@
     }
 
 }
-
diff --git a/v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV2Test.java b/tests/java/android/support/v4/speech/tts/TTSImplementationV2Test.java
similarity index 97%
rename from v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV2Test.java
rename to tests/java/android/support/v4/speech/tts/TTSImplementationV2Test.java
index bcb2555..26e8dfd 100644
--- a/v8/tts/tests/java/android/support/v8/speech/tts/TTSImplementationV2Test.java
+++ b/tests/java/android/support/v4/speech/tts/TTSImplementationV2Test.java
@@ -14,14 +14,14 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.os.Bundle;
 import android.speech.tts.TextToSpeech;
-import android.support.v8.speech.tts.TextToSpeechClient.ConnectionCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.RequestCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.UtteranceId;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.UtteranceId;
 import android.test.InstrumentationTestCase;
 
 import org.mockito.ArgumentCaptor;
diff --git a/v4/Android.mk b/v4/Android.mk
index 526a1c6..148fd9d 100644
--- a/v4/Android.mk
+++ b/v4/Android.mk
@@ -14,11 +14,21 @@
 
 LOCAL_PATH := $(call my-dir)
 
+# A helper sub-library that makes direct use of Donut APIs.
+include $(CLEAR_VARS)
+LOCAL_MODULE := android-support-v4-donut
+LOCAL_SDK_VERSION := 4
+LOCAL_SRC_FILES := $(call all-java-files-under, donut)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# -----------------------------------------------------------------------
+
 # A helper sub-library that makes direct use of Eclair APIs.
 include $(CLEAR_VARS)
 LOCAL_MODULE := android-support-v4-eclair
 LOCAL_SDK_VERSION := 5
 LOCAL_SRC_FILES := $(call all-java-files-under, eclair)
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4-donut
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 # -----------------------------------------------------------------------
diff --git a/v8/tts/src/android/support/v8/speech/tts/TTSImplementationV2.java b/v4/api20/android/support/v4/speech/tts/TTSImplementationV2.java
similarity index 95%
rename from v8/tts/src/android/support/v8/speech/tts/TTSImplementationV2.java
rename to v4/api20/android/support/v4/speech/tts/TTSImplementationV2.java
index 2608fa6..e7f9b6e 100644
--- a/v8/tts/src/android/support/v8/speech/tts/TTSImplementationV2.java
+++ b/v4/api20/android/support/v4/speech/tts/TTSImplementationV2.java
@@ -14,14 +14,14 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.net.Uri;
-import android.support.v8.speech.tts.TextToSpeechClient.ConnectionCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.EngineStatus;
-import android.support.v8.speech.tts.TextToSpeechClient.RequestCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.UtteranceId;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.EngineStatus;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.UtteranceId;
 import android.util.Log;
 
 import java.io.File;
@@ -29,7 +29,7 @@
 
 /** Simple bridge to the actual TTS V2 implementation. */
 class TTSImplementationV2 implements ITextToSpeechClient {
-    private static final String TAG = "android.support.v8.speech.tts";
+    private static final String TAG = "android.support.v4.speech.tts";
 
     interface TextToSpeechClientConstructor {
         public android.speech.tts.TextToSpeechClient newClient(
diff --git a/v8/tts/src/android/support/v8/speech/tts/ITextToSpeechClient.java b/v4/donut/android/support/v4/speech/tts/ITextToSpeechClient.java
similarity index 84%
rename from v8/tts/src/android/support/v8/speech/tts/ITextToSpeechClient.java
rename to v4/donut/android/support/v4/speech/tts/ITextToSpeechClient.java
index cf6a9c1..051f101 100644
--- a/v8/tts/src/android/support/v8/speech/tts/ITextToSpeechClient.java
+++ b/v4/donut/android/support/v4/speech/tts/ITextToSpeechClient.java
@@ -14,14 +14,14 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.net.Uri;
-import android.support.v8.speech.tts.TextToSpeechClient.ConnectionCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.EngineStatus;
-import android.support.v8.speech.tts.TextToSpeechClient.RequestCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.UtteranceId;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.EngineStatus;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.UtteranceId;
 
 import java.io.File;
 
diff --git a/v8/tts/src/android/support/v8/speech/tts/RequestConfig.java b/v4/donut/android/support/v4/speech/tts/RequestConfig.java
similarity index 99%
rename from v8/tts/src/android/support/v8/speech/tts/RequestConfig.java
rename to v4/donut/android/support/v4/speech/tts/RequestConfig.java
index 784abfe..9b3e78c 100644
--- a/v8/tts/src/android/support/v8/speech/tts/RequestConfig.java
+++ b/v4/donut/android/support/v4/speech/tts/RequestConfig.java
@@ -14,7 +14,7 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.media.AudioManager;
 import android.os.Bundle;
diff --git a/v8/tts/src/android/support/v8/speech/tts/RequestConfigHelper.java b/v4/donut/android/support/v4/speech/tts/RequestConfigHelper.java
similarity index 89%
rename from v8/tts/src/android/support/v8/speech/tts/RequestConfigHelper.java
rename to v4/donut/android/support/v4/speech/tts/RequestConfigHelper.java
index 54c8532..4385bda 100644
--- a/v8/tts/src/android/support/v8/speech/tts/RequestConfigHelper.java
+++ b/v4/donut/android/support/v4/speech/tts/RequestConfigHelper.java
@@ -1,6 +1,22 @@
-package android.support.v8.speech.tts;
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 
-import android.support.v8.speech.tts.TextToSpeechClient.EngineStatus;
+package android.support.v4.speech.tts;
+
+import android.support.v4.speech.tts.TextToSpeechClient.EngineStatus;
 
 import java.util.Locale;
 
diff --git a/v8/tts/src/android/support/v8/speech/tts/TextToSpeechClient.java b/v4/donut/android/support/v4/speech/tts/TextToSpeechClient.java
similarity index 89%
rename from v8/tts/src/android/support/v8/speech/tts/TextToSpeechClient.java
rename to v4/donut/android/support/v4/speech/tts/TextToSpeechClient.java
index 13ac1fa..ac8351e 100644
--- a/v8/tts/src/android/support/v8/speech/tts/TextToSpeechClient.java
+++ b/v4/donut/android/support/v4/speech/tts/TextToSpeechClient.java
@@ -14,7 +14,7 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.net.Uri;
@@ -367,55 +367,6 @@
 
     private final ITextToSpeechClient mImplementation;
 
-    /**
-     * Create TextToSpeech service client.
-     *
-     * Will connect to the default TTS service. In order to be usable, {@link #connect()} need
-     * to be called first and successful connection callback need to be received.
-     *
-     * @param context
-     *            The context this instance is running in.
-     * @param engine
-     *            Package name of requested TTS engine. If it's null, then default engine will
-     *            be selected regardless of {@code fallbackToDefaultEngine} parameter value.
-     * @param fallbackToDefaultEngine
-     *            If requested engine is not available, should we fallback to the default engine?
-     * @param defaultRequestCallbacks
-     *            Default request callbacks, it will be used for all synthesis requests without
-     *            supplied RequestCallbacks instance. Can't be null.
-     * @param connectionCallbacks
-     *            Callbacks for connecting and disconnecting from the service. Can't be null.
-     */
-    public TextToSpeechClient(Context context,
-            String engine, boolean fallbackToDefaultEngine,
-            RequestCallbacks defaultRequestCallbacks,
-            ConnectionCallbacks connectionCallbacks) {
-        if (Build.VERSION.CODENAME.equals("L")) {
-            mImplementation = new TTSImplementationV2();
-        } else {
-            mImplementation = new TTSImplementationV1();
-        }
-        mImplementation.setup(context, engine, fallbackToDefaultEngine, defaultRequestCallbacks,
-                connectionCallbacks);
-    }
-
-    /**
-     * Create TextToSpeech service client. Will connect to the default TTS
-     * service. In order to be usable, {@link #connect()} need to be called
-     * first and successful connection callback need to be received.
-     *
-     * @param context Context this instance is running in.
-     * @param defaultRequestCallbacks Default request callbacks, it
-     *            will be used for all synthesis requests without supplied
-     *            RequestCallbacks instance. Can't be null.
-     * @param connectionCallbacks Callbacks for connecting and disconnecting
-     *            from the service. Can't be null.
-     */
-    public TextToSpeechClient(Context context, RequestCallbacks defaultRequestCallbacks,
-            ConnectionCallbacks connectionCallbacks) {
-        this(context, null, true, defaultRequestCallbacks, connectionCallbacks);
-    }
-
     TextToSpeechClient(ITextToSpeechClient implementation,
             Context context, String engine, boolean fallbackToDefaultEngine,
             RequestCallbacks defaultRequestCallbacks,
diff --git a/v8/tts/src/android/support/v8/speech/tts/VoiceInfo.java b/v4/donut/android/support/v4/speech/tts/VoiceInfo.java
similarity index 99%
rename from v8/tts/src/android/support/v8/speech/tts/VoiceInfo.java
rename to v4/donut/android/support/v4/speech/tts/VoiceInfo.java
index a7eed1e..6269744 100644
--- a/v8/tts/src/android/support/v8/speech/tts/VoiceInfo.java
+++ b/v4/donut/android/support/v4/speech/tts/VoiceInfo.java
@@ -14,7 +14,7 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.os.Bundle;
 import android.os.Parcel;
diff --git a/v8/tts/ics-mr1/android/support/v8/speech/tts/TextToSpeechICSMR1.java b/v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java
similarity index 92%
rename from v8/tts/ics-mr1/android/support/v8/speech/tts/TextToSpeechICSMR1.java
rename to v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java
index ef795f2..bbad4c1 100644
--- a/v8/tts/ics-mr1/android/support/v8/speech/tts/TextToSpeechICSMR1.java
+++ b/v4/ics-mr1/android/support/v4/speech/tts/TextToSpeechICSMR1.java
@@ -1,4 +1,4 @@
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.UtteranceProgressListener;
@@ -9,7 +9,6 @@
 
 /** Helper class for TTS functionality introduced in ICS MR1 */
 class TextToSpeechICSMR1 {
-
     /**
      * Call {@link TextToSpeech#getFeatures} if available.
      *
@@ -23,6 +22,9 @@
         return null;
     }
 
+    public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
+    public static final String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
+
     static interface UtteranceProgressListenerICSMR1 {
         void onDone(String utteranceId);
         void onError(String utteranceId);
diff --git a/v8/tts/ics/android/support/v8/speech/tts/TextToSpeechICS.java b/v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java
similarity index 88%
rename from v8/tts/ics/android/support/v8/speech/tts/TextToSpeechICS.java
rename to v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java
index b557c41..4e0c041 100644
--- a/v8/tts/ics/android/support/v8/speech/tts/TextToSpeechICS.java
+++ b/v4/ics/android/support/v4/speech/tts/TextToSpeechICS.java
@@ -1,4 +1,4 @@
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.os.Build;
@@ -8,7 +8,7 @@
 
 /** Helper class for TTS functionality introduced in ICS */
 class TextToSpeechICS {
-    private static final String TAG = "android.support.v8.speech.tts";
+    private static final String TAG = "android.support.v4.speech.tts";
 
     static TextToSpeech construct(Context context, OnInitListener onInitListener,
             String engineName) {
diff --git a/v8/tts/src/android/support/v8/speech/tts/TTSImplementationV1.java b/v4/java/android/support/v4/speech/tts/TTSImplementationV1.java
similarity index 94%
rename from v8/tts/src/android/support/v8/speech/tts/TTSImplementationV1.java
rename to v4/java/android/support/v4/speech/tts/TTSImplementationV1.java
index cf03537..434f7a3 100644
--- a/v8/tts/src/android/support/v8/speech/tts/TTSImplementationV1.java
+++ b/v4/java/android/support/v4/speech/tts/TTSImplementationV1.java
@@ -14,23 +14,22 @@
  * the License.
  */
 
-package android.support.v8.speech.tts;
+package android.support.v4.speech.tts;
 
 import android.content.Context;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.Settings;
 import android.speech.tts.TextToSpeech;
-import android.speech.tts.TtsEngines;
 import android.speech.tts.TextToSpeech.Engine;
 import android.speech.tts.TextToSpeech.OnInitListener;
 import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
-import android.support.v8.speech.tts.TextToSpeechClient.ConnectionCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.EngineStatus;
-import android.support.v8.speech.tts.TextToSpeechClient.RequestCallbacks;
-import android.support.v8.speech.tts.TextToSpeechClient.Status;
-import android.support.v8.speech.tts.TextToSpeechClient.UtteranceId;
-import android.support.v8.speech.tts.TextToSpeechICSMR1.UtteranceProgressListenerICSMR1;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.EngineStatus;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.Status;
+import android.support.v4.speech.tts.TextToSpeechClient.UtteranceId;
+import android.support.v4.speech.tts.TextToSpeechICSMR1.UtteranceProgressListenerICSMR1;
 import android.util.Log;
 
 import java.io.File;
@@ -44,7 +43,7 @@
  * Implementation of the TTS V2 API using V1 API.
  */
 class TTSImplementationV1 implements ITextToSpeechClient {
-    private static final String TAG = "android.support.v8.speech.tts";
+    private static final String TAG = "android.support.v4.speech.tts";
     private TextToSpeech mOldClient;
     private Context mContext;
     private String mEngine;
@@ -229,7 +228,8 @@
     private EngineStatus generateEngineStatus() {
         Bundle defaultParams = new Bundle();
         defaultParams.putFloat(TextToSpeechClient.Params.SPEECH_PITCH, 1.0f);
-        defaultParams.putFloat(TextToSpeechClient.Params.SPEECH_SPEED, -1.0f);
+        // Zero value will make it use system default
+        defaultParams.putFloat(TextToSpeechClient.Params.SPEECH_SPEED, 0.0f);
 
         // Enumerate all locales and check if they are available
         ArrayList<VoiceInfo> voicesInfo = new ArrayList<VoiceInfo>();
@@ -245,7 +245,7 @@
             try {
                 // Call those to prevent log spam from isLanguageAvailable.
                 locale.getISO3Language();
-                if (!locale.getCountry().isEmpty()) {
+                if (locale.getCountry() != null && locale.getCountry().length() > 0) {
                     locale.getISO3Country();
                 }
                 if (mOldClient.isLanguageAvailable(locale) != expectedStatus) {
@@ -333,14 +333,15 @@
 
         int voiceType = VoiceInfoPrivate.getVoiceType(config.getVoice());
         if (voiceType == VoiceInfoPrivate.VOICE_TYPE_NETWORK) {
-            parameters.put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS,
+            parameters.put(TextToSpeechICSMR1.KEY_FEATURE_NETWORK_SYNTHESIS,
                     "true");
         } else if (voiceType == VoiceInfoPrivate.VOICE_TYPE_EMBEDDED) {
-            parameters.put(TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS,
+            parameters.put(TextToSpeechICSMR1.KEY_FEATURE_EMBEDDED_SYNTHESIS,
                     "true");
         }
         return parameters;
     }
+
     @Override
     public void queueSpeak(final String utterance, final UtteranceId utteranceId,
             final RequestConfig config, final RequestCallbacks callbacks) {
@@ -451,7 +452,7 @@
 
     /** Read default speech speed rate from settings */
     float getDefaultSpeechRate() {
-        return getSecureSettingInt(Settings.Secure.TTS_DEFAULT_RATE, Engine.DEFAULT_RATE) / 100.0f;
+        return getSecureSettingInt(Settings.Secure.TTS_DEFAULT_RATE, 100) / 100.0f;
     }
 
     int getSecureSettingInt(String name, int defaultValue) {
diff --git a/v4/java/android/support/v4/speech/tts/TextToSpeechClientCompat.java b/v4/java/android/support/v4/speech/tts/TextToSpeechClientCompat.java
new file mode 100644
index 0000000..7cc0e31
--- /dev/null
+++ b/v4/java/android/support/v4/speech/tts/TextToSpeechClientCompat.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package android.support.v4.speech.tts;
+
+import android.content.Context;
+import android.os.Build;
+import android.support.v4.speech.tts.TextToSpeechClient.ConnectionCallbacks;
+import android.support.v4.speech.tts.TextToSpeechClient.RequestCallbacks;
+
+/**
+ * Helper for accessing features in {@link android.speech.tts.TextToSpeechClient}
+ * introduced in API level 20 in a backwards compatible fashion.
+ */
+public class TextToSpeechClientCompat {
+    /**
+     * Create TextToSpeech service client.
+     *
+     * Will connect to the default TTS service. In order to be usable, {@link #connect()} need
+     * to be called first and successful connection callback need to be received.
+     *
+     * @param context
+     *            The context this instance is running in.
+     * @param engine
+     *            Package name of requested TTS engine. If it's null, then default engine will
+     *            be selected regardless of {@code fallbackToDefaultEngine} parameter value.
+     * @param fallbackToDefaultEngine
+     *            If requested engine is not available, should we fallback to the default engine?
+     * @param defaultRequestCallbacks
+     *            Default request callbacks, it will be used for all synthesis requests without
+     *            supplied RequestCallbacks instance. Can't be null.
+     * @param connectionCallbacks
+     *            Callbacks for connecting and disconnecting from the service. Can't be null.
+     */
+    public static TextToSpeechClient createTextToSpeechClient(Context context,
+            String engine, boolean fallbackToDefaultEngine,
+            RequestCallbacks defaultRequestCallbacks,
+            ConnectionCallbacks connectionCallbacks) {
+        ITextToSpeechClient implementation;
+        if (Build.VERSION.CODENAME.equals("L")) {
+            implementation = new TTSImplementationV2();
+        } else {
+            implementation = new TTSImplementationV1();
+        }
+        return new TextToSpeechClient(implementation, context, engine, fallbackToDefaultEngine,
+                defaultRequestCallbacks, connectionCallbacks);
+    }
+
+    /**
+     * Create TextToSpeech service client. Will connect to the default TTS
+     * service. In order to be usable, {@link #connect()} need to be called
+     * first and successful connection callback need to be received.
+     *
+     * @param context Context this instance is running in.
+     * @param defaultRequestCallbacks Default request callbacks, it
+     *            will be used for all synthesis requests without supplied
+     *            RequestCallbacks instance. Can't be null.
+     * @param connectionCallbacks Callbacks for connecting and disconnecting
+     *            from the service. Can't be null.
+     */
+    public static TextToSpeechClient createTextToSpeechClient(Context context,
+            RequestCallbacks defaultRequestCallbacks, ConnectionCallbacks connectionCallbacks) {
+        return createTextToSpeechClient(context, null, true, defaultRequestCallbacks,
+                connectionCallbacks);
+    }
+
+}
diff --git a/v8/tts/Android.mk b/v8/tts/Android.mk
deleted file mode 100644
index 0e60af6..0000000
--- a/v8/tts/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-# -----------------------------------------------------------------------
-
-# A helper sub-library that makes direct use of Ice Cream Sandwich APIs.
-include $(CLEAR_VARS)
-LOCAL_MODULE := android-support-tts-ics
-LOCAL_SDK_VERSION := 14
-LOCAL_SRC_FILES := $(call all-java-files-under, ics)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-# A helper sub-library that makes direct use of Ice Cream Sandwich MR1 APIs.
-include $(CLEAR_VARS)
-LOCAL_MODULE := android-support-tts-ics-mr1
-LOCAL_SDK_VERSION := 15
-LOCAL_SRC_FILES := $(call all-java-files-under, ics-mr1)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android-support-v8-tts
-#LOCAL_SDK_VERSION := 8
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-tts-ics-mr1 android-support-tts-ics
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(LOCAL_PATH)/tests/Android.mk
diff --git a/v8/tts/AndroidManifest.xml b/v8/tts/AndroidManifest.xml
deleted file mode 100644
index 0f52756..0000000
--- a/v8/tts/AndroidManifest.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.v8.speech.tts">
-    <uses-sdk android:minSdkVersion="8"/>
-</manifest>
diff --git a/v8/tts/tests/Android.mk b/v8/tts/tests/Android.mk
deleted file mode 100644
index 9101d2f..0000000
--- a/v8/tts/tests/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_SRC_FILES := $(call all-java-files-under, java)
-#LOCAL_SDK_VERSION := cur
-LOCAL_STATIC_JAVA_LIBRARIES := mockito-target android-support-v8-tts
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_PACKAGE_NAME := android-support-v8-tts-tests
-
-include $(BUILD_PACKAGE)
diff --git a/v8/tts/tests/AndroidManifest.xml b/v8/tts/tests/AndroidManifest.xml
deleted file mode 100644
index 684db70..0000000
--- a/v8/tts/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.support.v8.speech.tts">
-
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation
-        android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="android.support.v8.speech.tts" />
-</manifest>
