diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index a2c6a12..c53f7f1 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -37,7 +37,7 @@
           mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
           mUpdate(false), mExtending(false),
           mRequireLocalization(false), mPseudolocalize(false),
-          mUTF8(false), mValues(false),
+          mUTF8(false), mEncodingSpecified(false), mValues(false),
           mCompressionMethod(0), mOutputAPKFile(NULL),
           mAssetSourceDir(NULL), mProguardFile(NULL),
           mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
@@ -78,6 +78,8 @@
     void setPseudolocalize(bool val) { mPseudolocalize = val; }
     bool getUTF8(void) const { return mUTF8; }
     void setUTF8(bool val) { mUTF8 = val; }
+    bool getEncodingSpecified(void) const { return mEncodingSpecified; }
+    void setEncodingSpecified(bool val) { mEncodingSpecified = val; }
     bool getValues(void) const { return mValues; }
     void setValues(bool val) { mValues = val; }
     int getCompressionMethod(void) const { return mCompressionMethod; }
@@ -116,7 +118,9 @@
     const char*  getMinSdkVersion() const { return mMinSdkVersion; }
     void setMinSdkVersion(const char*  val) {
         mMinSdkVersion = val;
-        setUTF8(isUTF8Available());
+        if (!mEncodingSpecified) {
+            setUTF8(isUTF8Available());
+        }
     }
     const char*  getTargetSdkVersion() const { return mTargetSdkVersion; }
     void setTargetSdkVersion(const char*  val) { mTargetSdkVersion = val; }
@@ -169,6 +173,7 @@
     bool        mRequireLocalization;
     bool        mPseudolocalize;
     bool        mUTF8;
+    bool        mEncodingSpecified;
     bool        mValues;
     int         mCompressionMethod;
     bool        mJunkPath;
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index efbb2f7..1e6b52e 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -59,7 +59,7 @@
         "        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \\\n"
         "        [--min-sdk-version VAL] [--target-sdk-version VAL] \\\n"
         "        [--max-sdk-version VAL] [--app-version VAL] \\\n"
-        "        [--app-version-name TEXT] [--custom-package VAL] \\\n"
+        "        [--app-version-name TEXT] [--custom-package VAL] [--utf16] \\\n"
         "        [-I base-package [-I base-package ...]] \\\n"
         "        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file] \\\n"
         "        [-S resource-sources [-S resource-sources ...]] "
@@ -118,12 +118,12 @@
         "   -P  specify where to output public resource definitions\n"
         "   -S  directory in which to find resources.  Multiple directories will be scanned\n"
         "       and the first match found (left to right) will take precedence.\n"
-        "   -8  Encode string resources in UTF-8.\n"
         "   -0  specifies an additional extension for which such files will not\n"
         "       be stored compressed in the .apk.  An empty string means to not\n"
         "       compress any files at all.\n"
         "   --min-sdk-version\n"
-        "       inserts android:minSdkVersion in to manifest.\n"
+        "       inserts android:minSdkVersion in to manifest.  If the version is 7 or\n"
+        "       higher, the default encoding for resources will be in UTF-8.\n"
         "   --target-sdk-version\n"
         "       inserts android:targetSdkVersion in to manifest.\n"
         "   --max-sdk-version\n"
@@ -135,7 +135,10 @@
         "   --version-name\n"
         "       inserts android:versionName in to manifest.\n"
         "   --custom-package\n"
-        "       generates R.java into a different package.\n");
+        "       generates R.java into a different package.\n"
+        "   --utf16\n"
+        "       changes default encoding for resources to UTF-16.  Only useful when API\n"
+        "       level is set to 7 or higher where the default encoding is UTF-8.\n");
 }
 
 /*
@@ -373,9 +376,6 @@
                     bundle.setCompressionMethod(ZipEntry::kCompressStored);
                 }
                 break;
-            case '8':
-                bundle.setUTF8(true);
-                break;
             case '-':
                 if (strcmp(cp, "-min-sdk-version") == 0) {
                     argc--;
@@ -433,6 +433,9 @@
                         goto bail;
                     }
                     bundle.setCustomPackage(argv[0]);
+                } else if (strcmp(cp, "-utf16") == 0) {
+                    bundle.setEncodingSpecified(true);
+                    bundle.setUTF8(false);
                 } else {
                     fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp);
                     wantUsage = true;
