diff --git a/src/com/android/settings/ApplicationSettings.java b/src/com/android/settings/ApplicationSettings.java
index 9b7a919..c743f1c 100644
--- a/src/com/android/settings/ApplicationSettings.java
+++ b/src/com/android/settings/ApplicationSettings.java
@@ -62,7 +62,7 @@
         mInstallLocation = (ListPreference) findPreference(KEY_APP_INSTALL_LOCATION);
         // Is app default install location set?
         boolean userSetInstLocation = (Settings.System.getInt(getContentResolver(),
-                Settings.System.SET_INSTALL_LOCATION, 0) != 0);
+                Settings.Secure.SET_INSTALL_LOCATION, 0) != 0);
         if (!userSetInstLocation) {
             getPreferenceScreen().removePreference(mInstallLocation);
         } else {
@@ -86,17 +86,17 @@
     protected void handleUpdateAppInstallLocation(final String value) {
         if(APP_INSTALL_DEVICE_ID.equals(value)) {
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE);
+                    Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE);
         } else if (APP_INSTALL_SDCARD_ID.equals(value)) {
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD);
+                    Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD);
         } else if (APP_INSTALL_AUTO_ID.equals(value)) {
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
+                    Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
         } else {
             // Should not happen, default to prompt...
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
+                    Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
         }
         mInstallLocation.setValue(value);
     }
@@ -143,7 +143,7 @@
 
     private String getAppInstallLocation() {
         int selectedLocation = Settings.System.getInt(getContentResolver(),
-                Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
+                Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
         if (selectedLocation == APP_INSTALL_DEVICE) {
             return APP_INSTALL_DEVICE_ID;
         } else if (selectedLocation == APP_INSTALL_SDCARD) {
diff --git a/src/com/android/settings/InstalledAppDetails.java b/src/com/android/settings/InstalledAppDetails.java
index 41ba49b..52e9844 100644
--- a/src/com/android/settings/InstalledAppDetails.java
+++ b/src/com/android/settings/InstalledAppDetails.java
@@ -18,6 +18,7 @@
 
 package com.android.settings;
 
+import com.android.internal.content.PackageHelper;
 import com.android.settings.R;
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -30,6 +31,7 @@
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageDataObserver;
+import android.content.pm.IPackageManager;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
 import android.content.pm.PackageInfo;
@@ -40,8 +42,11 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Message;
 import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.storage.IMountService;
 import android.text.format.Formatter;
 import android.util.Log;
 import java.util.ArrayList;
@@ -230,17 +235,36 @@
             mMoveAppButton.setText(R.string.move_app);
         } else if ((mAppInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
             mMoveAppButton.setText(R.string.move_app_to_internal);
+            // Always let apps move to internal storage from sdcard.
             moveDisable = false;
         } else {
-            moveDisable = (mAppInfo.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0 ||
-            (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
             mMoveAppButton.setText(R.string.move_app_to_sdcard);
-        }
-        if (pkgInfo != null && pkgInfo.installLocation ==
-            PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) {
-            // If an application explicitly specifies install location
-            // consider that
-            moveDisable = true;
+            if ((mAppInfo.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0 ||
+                    (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+                moveDisable = true;
+            } else if (pkgInfo != null) {
+                if (pkgInfo.installLocation ==
+                    PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) {
+                    // If an application explicitly specifies install location
+                    // consider that
+                    moveDisable = true;
+                } else if (pkgInfo.installLocation == PackageInfo.INSTALL_LOCATION_UNSPECIFIED) {
+                    IPackageManager ipm  = IPackageManager.Stub.asInterface(
+                            ServiceManager.getService("package"));
+                    int loc;
+                    try {
+                        loc = ipm.getInstallLocation();
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Is Pakage Manager running?");
+                        return;
+                    }
+                    if (loc == PackageHelper.APP_INSTALL_EXTERNAL) {
+                        // For apps with no preference and the default value set
+                        // to install on sdcard.
+                        moveDisable = false;
+                    }
+                }
+            }
         }
         if (moveDisable) {
             mMoveAppButton.setEnabled(false);
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index ec8df3c..57bffa9 100644
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -53,7 +53,7 @@
     private static final String TAG = "CachedBluetoothDevice";
     private static final boolean D = LocalBluetoothManager.D;
     private static final boolean V = LocalBluetoothManager.V;
-    private static final boolean DEBUG = true; // STOPSHIP - disable before final rom
+    private static final boolean DEBUG = false;
 
     private static final int CONTEXT_ITEM_CONNECT = Menu.FIRST + 1;
     private static final int CONTEXT_ITEM_DISCONNECT = Menu.FIRST + 2;
