diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1740b2b..f5c368f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2893,12 +2893,12 @@
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.WifiCallingSettings" />
+                       android:value="com.android.settings.wifi.calling.WifiCallingSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
 
-        <activity android:name=".wifi.WifiCallingSuggestionActivity"
+        <activity android:name=".wifi.calling.WifiCallingSuggestionActivity"
                   android:label="@string/wifi_calling_settings_title"
                   android:icon="@drawable/ic_settings_wireless">
             <intent-filter>
@@ -2906,7 +2906,7 @@
                 <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.WifiCallingSettings" />
+                       android:value="com.android.settings.wifi.calling.WifiCallingSettings" />
             <meta-data android:name="com.android.settings.dismiss"
                 android:value="10,14,30" />
             <meta-data android:name="com.android.settings.title"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 72db253..86e538f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6478,6 +6478,7 @@
     <string name="help_uri_process_stats_apps" translatable="false"></string>
     <string name="help_uri_private_dns" translatable="false"></string>
     <string name="help_uri_about_phone_v2" translatable="false"></string>
+    <string name="help_uri_wifi_calling" translatable="false"></string>
 
     <!-- User account title [CHAR LIMIT=30] -->
     <string name="user_account_title">Account for content</string>
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 76def2c..c75b0c6 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -28,7 +28,7 @@
 import com.android.settings.TestingSettings;
 import com.android.settings.TetherSettings;
 import com.android.settings.TrustedCredentialsSettings;
-import com.android.settings.WifiCallingSettings;
+import com.android.settings.wifi.calling.WifiCallingSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
 import com.android.settings.accessibility.CaptionPropertiesFragment;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 690c795..8ddef1c 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -55,7 +55,7 @@
         FocusListener, SuggestionControllerMixin.SuggestionControllerHost {
     public static final boolean DEBUG = false;
     private static final boolean DEBUG_TIMING = false;
-    private static final int MAX_WAIT_MILLIS = 700;
+    private static final int MAX_WAIT_MILLIS = 3000;
     private static final String TAG = "DashboardSummary";
 
     private static final String EXTRA_SCROLL_POSITION = "scroll_position";
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index 8523273..07ffb8a 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -37,7 +37,7 @@
 import com.android.settings.password.ScreenLockSuggestionActivity;
 import com.android.settings.support.NewDeviceIntroSuggestionActivity;
 import com.android.settings.wallpaper.WallpaperSuggestionActivity;
-import com.android.settings.wifi.WifiCallingSuggestionActivity;
+import com.android.settings.wifi.calling.WifiCallingSuggestionActivity;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.suggestions.SuggestionControllerMixin;
diff --git a/src/com/android/settings/search/actionbar/SearchMenuController.java b/src/com/android/settings/search/actionbar/SearchMenuController.java
index f3a9285..1729ccd 100644
--- a/src/com/android/settings/search/actionbar/SearchMenuController.java
+++ b/src/com/android/settings/search/actionbar/SearchMenuController.java
@@ -28,6 +28,7 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.SearchFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.ObservableFragment;
 import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment;
 import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
 
@@ -41,6 +42,10 @@
         host.getLifecycle().addObserver(new SearchMenuController(host));
     }
 
+    public static void init(@NonNull ObservableFragment host) {
+        host.getLifecycle().addObserver(new SearchMenuController(host));
+    }
+
     private SearchMenuController(@NonNull Fragment host) {
         mHost = host;
     }
diff --git a/src/com/android/settings/support/actionbar/HelpMenuController.java b/src/com/android/settings/support/actionbar/HelpMenuController.java
index a95d44e..1188fc2 100644
--- a/src/com/android/settings/support/actionbar/HelpMenuController.java
+++ b/src/com/android/settings/support/actionbar/HelpMenuController.java
@@ -27,6 +27,7 @@
 
 import com.android.settingslib.HelpUtils;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.ObservableFragment;
 import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment;
 import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
 
@@ -41,6 +42,10 @@
         host.getLifecycle().addObserver(new HelpMenuController(host));
     }
 
+    public static void init(@NonNull ObservableFragment host) {
+        host.getLifecycle().addObserver(new HelpMenuController(host));
+    }
+
     private HelpMenuController(@NonNull Fragment host) {
         mHost = host;
     }
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/wifi/calling/WifiCallingSettings.java
similarity index 80%
rename from src/com/android/settings/WifiCallingSettings.java
rename to src/com/android/settings/wifi/calling/WifiCallingSettings.java
index e872fb8..7bab07a 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettings.java
@@ -14,11 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.settings;
+package com.android.settings.wifi.calling;
 
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.content.Context;
 import android.os.Bundle;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.telephony.SubscriptionInfo;
@@ -28,9 +27,13 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.ims.ImsConfig;
 import com.android.ims.ImsManager;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
+import com.android.settings.search.actionbar.SearchMenuController;
+import com.android.settings.support.actionbar.HelpMenuController;
+import com.android.settings.support.actionbar.HelpResourceProvider;
 import com.android.settings.widget.RtlCompatibleViewPager;
 import com.android.settings.widget.SlidingTabLayout;
 
@@ -40,7 +43,7 @@
  * "Wi-Fi Calling settings" screen. This is the container fragment which holds
  * {@link WifiCallingSettingsForSub} fragments.
  */
-public class WifiCallingSettings extends SettingsPreferenceFragment {
+public class WifiCallingSettings extends InstrumentedFragment implements HelpResourceProvider {
     private static final String TAG = "WifiCallingSettings";
     private List<SubscriptionInfo> mSil;
 
@@ -71,6 +74,10 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        setHasOptionsMenu(true);
+        SearchMenuController.init(this /* host */);
+        HelpMenuController.init(this /* host */);
+
         // TODO: besides in onCreate, we should also update subList when SIM / Sub status
         // changes.
         updateSubList();
@@ -87,6 +94,11 @@
         }
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_uri_wifi_calling;
+    }
+
     private final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter {
         private final RtlCompatibleViewPager mViewPager;
 
@@ -105,6 +117,7 @@
         public Fragment getItem(int position) {
             Log.d(TAG, "Adapter getItem " + position);
             final Bundle args = new Bundle();
+            args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
             args.putInt(WifiCallingSettingsForSub.FRAGMENT_BUNDLE_SUBID,
                     mSil.get(position).getSubscriptionId());
             WifiCallingSettingsForSub fragment = new WifiCallingSettingsForSub();
@@ -132,26 +145,6 @@
         }
     }
 
-    public static int getWfcModeSummary(Context context, int wfcMode) {
-        int resId = com.android.internal.R.string.wifi_calling_off_summary;
-        if (ImsManager.isWfcEnabledByUser(context)) {
-            switch (wfcMode) {
-                case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
-                    resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
-                    break;
-                case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED:
-                    resId = com.android.internal.R.string.wfc_mode_cellular_preferred_summary;
-                    break;
-                case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED:
-                    resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary;
-                    break;
-                default:
-                    Log.e(TAG, "Unexpected WFC mode value: " + wfcMode);
-            }
-        }
-        return resId;
-    }
-
     private void updateSubList() {
         mSil = SubscriptionManager.from(getActivity()).getActiveSubscriptionInfoList();
 
@@ -159,7 +152,7 @@
         if (mSil == null) {
             return;
         }
-        for (int i = 0; i < mSil.size();) {
+        for (int i = 0; i < mSil.size(); ) {
             ImsManager imsManager = ImsManager.getInstance(getActivity(),
                     mSil.get(i).getSimSlotIndex());
             if (!imsManager.isWfcEnabledByPlatform()) {
diff --git a/src/com/android/settings/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
similarity index 98%
rename from src/com/android/settings/WifiCallingSettingsForSub.java
rename to src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index ba5ba84..2bfd796 100644
--- a/src/com/android/settings/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings;
+package com.android.settings.wifi.calling;
 
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -45,6 +45,10 @@
 import com.android.ims.ImsManager;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.Phone;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
 import com.android.settings.widget.SwitchBar;
 
 /**
@@ -54,7 +58,7 @@
 public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
         implements SwitchBar.OnSwitchChangeListener,
         Preference.OnPreferenceChangeListener {
-    private static final String TAG = "WifiCallingSettingsForSub";
+    private static final String TAG = "WifiCallingForSub";
 
     //String keys for preference lookup
     private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
@@ -130,12 +134,6 @@
         }
     };
 
-    @Override
-    public int getHelpResource() {
-        // Helper resource is already defined in the container fragment.
-        return 0;
-    }
-
     private final OnPreferenceClickListener mUpdateAddressListener =
             new OnPreferenceClickListener() {
                 /*
@@ -226,8 +224,7 @@
 
         // SubId should always be specified when creating this fragment. Either through
         // fragment.setArguments() or through savedInstanceState.
-        if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID))
-        {
+        if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID)) {
             mSubId = getArguments().getInt(FRAGMENT_BUNDLE_SUBID);
         } else if (savedInstanceState != null) {
             mSubId = savedInstanceState.getInt(
diff --git a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java b/src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java
similarity index 96%
rename from src/com/android/settings/wifi/WifiCallingSuggestionActivity.java
rename to src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java
index c3c7adb..9a50a83 100644
--- a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.wifi;
+package com.android.settings.wifi.calling;
 
 import android.content.Context;
 
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index 5a3c044..748dc94 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -60,8 +60,7 @@
 com.android.settings.applications.appinfo.PictureInPictureDetails
 com.android.settings.ApnSettings
 com.android.settings.PrivacySettings
-com.android.settings.WifiCallingSettings
-com.android.settings.WifiCallingSettingsForSub
+com.android.settings.wifi.calling.WifiCallingSettingsForSub
 com.android.settings.password.SetupChooseLockGeneric$SetupChooseLockGenericFragment
 com.android.settings.SetupRedactionInterstitial$SetupRedactionInterstitialFragment
 com.android.settings.security.trustagent.TrustAgentSettings
diff --git a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
index e1c77cd..d6e8c63 100644
--- a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
+++ b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
@@ -18,6 +18,7 @@
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.os.Bundle;
@@ -27,6 +28,7 @@
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.lifecycle.ObservableFragment;
 import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment;
 
 import org.junit.Before;
@@ -42,26 +44,47 @@
 
     @Mock
     private Menu mMenu;
-    private TestFragment mHost;
+    private TestPreferenceFragment mPreferenceHost;
+    private ObservableFragment mHost;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mHost = new TestFragment();
+        mHost = new ObservableFragment();
+        mPreferenceHost = new TestPreferenceFragment();
+
+        when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu))
+                .thenReturn(mock(MenuItem.class));
     }
 
     @Test
-    public void init_shouldAddMenu() {
-        when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu))
-                .thenReturn(mock(MenuItem.class));
+    public void init_prefFragment_shouldAddMenu() {
+        SearchMenuController.init(mPreferenceHost);
+        mPreferenceHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
 
+        verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu);
+    }
+
+    @Test
+    public void init_observableFragment_shouldAddMenu() {
         SearchMenuController.init(mHost);
         mHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
 
         verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu);
     }
 
-    public static class TestFragment extends ObservablePreferenceFragment {
+    @Test
+    public void init_doNotNeedSearchIcon_shouldNotAddMenu() {
+        final Bundle args = new Bundle();
+        args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
+        mHost.setArguments(args);
+
+        SearchMenuController.init(mHost);
+        mHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
+        verifyZeroInteractions(mMenu);
+    }
+
+    public static class TestPreferenceFragment extends ObservablePreferenceFragment {
 
         @Override
         public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
index 677bf41..9dff925 100644
--- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
+++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
@@ -68,7 +68,7 @@
 
     @Test
     public void wifiCallingSuggestion_isValid() {
-        assertSuggestionEquals("com.android.settings.wifi.WifiCallingSuggestionActivity",
+        assertSuggestionEquals("com.android.settings.wifi.calling.WifiCallingSuggestionActivity",
                 CATEGORY_FIRST_IMPRESSION,
                 R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary);
     }
