diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java
index 31a8526..b865ea5 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -25,6 +25,7 @@
 import android.database.ContentObserver;
 import android.net.ConnectivityManager;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -37,6 +38,7 @@
 import com.android.settings.core.PreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnCreate;
 import com.android.settingslib.core.lifecycle.events.OnDestroy;
 import com.android.settingslib.core.lifecycle.events.OnPause;
 import com.android.settingslib.core.lifecycle.events.OnResume;
@@ -44,11 +46,12 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 import static android.os.UserManager.DISALLOW_CONFIG_TETHERING;
+
 import static com.android.settingslib.RestrictedLockUtils.checkIfRestrictionEnforced;
 import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
 
 public class TetherPreferenceController extends PreferenceController
-        implements LifecycleObserver, OnResume, OnPause, OnDestroy {
+        implements LifecycleObserver, OnCreate, OnResume, OnPause, OnDestroy {
 
     private static final String KEY_TETHER_SETTINGS = "tether_settings";
 
@@ -56,7 +59,8 @@
     private final AtomicReference<BluetoothPan> mBluetoothPan;
     private final ConnectivityManager mConnectivityManager;
     private final BluetoothAdapter mBluetoothAdapter;
-    private final BluetoothProfile.ServiceListener mBtProfileServiceListener =
+    @VisibleForTesting
+    final BluetoothProfile.ServiceListener mBtProfileServiceListener =
             new android.bluetooth.BluetoothProfile.ServiceListener() {
                 public void onServiceConnected(int profile, BluetoothProfile proxy) {
                     mBluetoothPan.set((BluetoothPan) proxy);
@@ -92,10 +96,6 @@
         if (lifecycle != null) {
             lifecycle.addObserver(this);
         }
-        if (mBluetoothAdapter != null) {
-            mBluetoothAdapter.getProfileProxy(context, mBtProfileServiceListener,
-                    BluetoothProfile.PAN);
-        }
     }
 
     @Override
@@ -131,6 +131,14 @@
     }
 
     @Override
+    public void onCreate(Bundle savedInstanceState) {
+        if (mBluetoothAdapter != null) {
+            mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener,
+                    BluetoothProfile.PAN);
+        }
+    }
+
+    @Override
     public void onResume() {
         if (mAirplaneModeObserver == null) {
             mAirplaneModeObserver = new SettingObserver();
@@ -139,7 +147,7 @@
             mTetherReceiver = new TetherBroadcastReceiver();
         }
         mContext.registerReceiver(
-            mTetherReceiver, new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED));
+                mTetherReceiver, new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED));
         mContext.getContentResolver()
                 .registerContentObserver(mAirplaneModeObserver.uri, false, mAirplaneModeObserver);
     }
diff --git a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
index 4ae8c2c..b8a6d28 100644
--- a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.network;
 
-
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothPan;
 import android.bluetooth.BluetoothProfile;
@@ -78,6 +77,14 @@
     }
 
     @Test
+    public void lifeCycle_onCreate_shouldInitBluetoothPan() {
+        mController.onCreate(null);
+
+        verify(mBluetoothAdapter).getProfileProxy(mContext, mController.mBtProfileServiceListener,
+                BluetoothProfile.PAN);
+    }
+
+    @Test
     public void goThroughLifecycle_shouldDestoryBluetoothProfile() {
         final BluetoothPan pan = mock(BluetoothPan.class);
         final AtomicReference<BluetoothPan> panRef =
@@ -161,7 +168,8 @@
         mController.onResume();
 
         verify(mContext).registerReceiver(
-            any(TetherPreferenceController.TetherBroadcastReceiver.class), any(IntentFilter.class));
+                any(TetherPreferenceController.TetherBroadcastReceiver.class),
+                any(IntentFilter.class));
     }
 
     @Test
@@ -172,7 +180,7 @@
         mController.onPause();
 
         verify(mContext).unregisterReceiver(
-            any(TetherPreferenceController.TetherBroadcastReceiver.class));
+                any(TetherPreferenceController.TetherBroadcastReceiver.class));
     }
 
     @Test
