diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java
index ac27540..7317738 100644
--- a/src/com/android/settings/CreateShortcut.java
+++ b/src/com/android/settings/CreateShortcut.java
@@ -25,14 +25,15 @@
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
+import android.net.ConnectivityManager;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.MeasureSpec;
 import android.widget.ImageView;
 import android.widget.ListView;
+
 import com.android.settings.Settings.TetherSettingsActivity;
-import com.android.settingslib.TetherUtil;
 
 import java.util.List;
 
@@ -91,11 +92,13 @@
     protected List<ResolveInfo> onQueryPackageManager(Intent queryIntent) {
         List<ResolveInfo> activities = getPackageManager().queryIntentActivities(queryIntent,
                 PackageManager.GET_META_DATA);
+        final ConnectivityManager cm =
+                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
         if (activities == null) return null;
         for (int i = activities.size() - 1; i >= 0; i--) {
             ResolveInfo info = activities.get(i);
             if (info.activityInfo.name.endsWith(TetherSettingsActivity.class.getSimpleName())) {
-                if (!TetherUtil.isTetheringSupported(this)) {
+                if (!cm.isTetheringSupported()) {
                     activities.remove(i);
                 }
             }
diff --git a/src/com/android/settings/TetherService.java b/src/com/android/settings/TetherService.java
index 246c063..95b8462 100644
--- a/src/com/android/settings/TetherService.java
+++ b/src/com/android/settings/TetherService.java
@@ -251,13 +251,6 @@
         }
     }
 
-    public static void scheduleRecheckAlarm(Context context, int type) {
-        Intent intent = new Intent(context, TetherService.class);
-        intent.putExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE, type);
-        intent.putExtra(ConnectivityManager.EXTRA_SET_ALARM, true);
-        context.startService(intent);
-    }
-
     private void scheduleAlarm() {
         Intent intent = new Intent(this, TetherService.class);
         intent.putExtra(ConnectivityManager.EXTRA_RUN_PROVISION, true);
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 061d059..ce0766b 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -319,7 +319,7 @@
 
         final boolean adminDisallowedTetherConfig = mUm.hasUserRestriction(
                 UserManager.DISALLOW_CONFIG_TETHERING);
-        if (!isAdmin || (!cm.isTetheringSupported() && !adminDisallowedTetherConfig)) {
+        if (!cm.isTetheringSupported() && !adminDisallowedTetherConfig) {
             getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
         } else if (!adminDisallowedTetherConfig) {
             Preference p = findPreference(KEY_TETHER_SETTINGS);
diff --git a/src/com/android/settings/dashboard/conditional/HotspotCondition.java b/src/com/android/settings/dashboard/conditional/HotspotCondition.java
index 71e79c4..e04eed2 100644
--- a/src/com/android/settings/dashboard/conditional/HotspotCondition.java
+++ b/src/com/android/settings/dashboard/conditional/HotspotCondition.java
@@ -21,6 +21,7 @@
 import android.graphics.drawable.Icon;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
+
 import com.android.settings.R;
 import com.android.settings.TetherSettings;
 import com.android.settings.Utils;
@@ -37,7 +38,7 @@
 
     @Override
     public void refreshState() {
-        boolean wifiTetherEnabled = TetherUtil.isWifiTetherEnabled(mManager.getContext());
+        boolean wifiTetherEnabled = mWifiManager.isWifiApEnabled();
         setActive(wifiTetherEnabled);
     }
 
