diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b9c0f9f..cc27223 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -212,7 +212,8 @@
         <activity android:name=".search2.SearchActivity"
                   android:label="@string/search_settings"
                   android:icon="@drawable/ic_search_history"
-                  android:parentActivityName="Settings">
+                  android:parentActivityName="Settings"
+                  android:theme="@style/Theme.Settings.NoActionBar">
         </activity>
 
         <!-- Top-level settings -->
diff --git a/res/layout/search_main.xml b/res/layout/search_main.xml
index ab728cd..6de344d 100644
--- a/res/layout/search_main.xml
+++ b/res/layout/search_main.xml
@@ -18,7 +18,6 @@
 -->
 
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:id="@+id/main_content"
-             android:layout_height="match_parent"
-             android:layout_width="match_parent"
-             android:background="@color/material_grey_300"/>
+    android:id="@+id/main_content"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"/>
diff --git a/res/layout/search_panel.xml b/res/layout/search_panel.xml
index 9445e0c..d097cfe 100644
--- a/res/layout/search_panel.xml
+++ b/res/layout/search_panel.xml
@@ -15,71 +15,80 @@
 -->
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/search_panel"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/search_panel_list_background">
 
-    <LinearLayout android:id="@+id/layout_recent_searches"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:layout_gravity="center"
-                  android:orientation="vertical"
-                  android:layout_alignParentTop="true">
+    <FrameLayout
+        android:id="@+id/layout_results"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/feedback_popup"
+        android:orientation="vertical">
 
         <!-- Padding is included in the background -->
-        <android.support.v7.widget.RecyclerView android:id="@+id/list_recent_searches"
-                  android:layout_width="match_parent"
-                  android:layout_height="match_parent"
-                  android:paddingStart="@dimen/dashboard_padding_start"
-                  android:paddingEnd="@dimen/dashboard_padding_end"
-                  android:paddingTop="@dimen/dashboard_padding_top"
-                  android:paddingBottom="@dimen/dashboard_padding_bottom"
-                  android:scrollbarStyle="outsideOverlay"
-                  android:headerDividersEnabled="false"
-                  android:elevation="@dimen/search_panel_elevation"/>
-    </LinearLayout>
-
-    <LinearLayout android:id="@+id/layout_results"
-                  android:layout_width="match_parent"
-                  android:layout_height="fill_parent"
-                  android:layout_above="@id/feedback_popup"
-                  android:orientation="vertical">
-
-        <!-- Padding is included in the background -->
-        <android.support.v7.widget.RecyclerView android:id="@+id/list_results"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:paddingStart="@dimen/dashboard_padding_start"
-                  android:paddingEnd="@dimen/dashboard_padding_end"
-                  android:paddingTop="@dimen/dashboard_padding_top"
-                  android:paddingBottom="@dimen/dashboard_padding_bottom"
-                  android:scrollbarStyle="outsideOverlay"
-                  android:scrollbars="vertical"/>
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/list_results"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="@dimen/dashboard_padding_start"
+            android:paddingEnd="@dimen/dashboard_padding_end"
+            android:paddingTop="@dimen/dashboard_padding_top"
+            android:paddingBottom="@dimen/dashboard_padding_bottom"
+            android:scrollbarStyle="outsideOverlay"
+            android:scrollbars="vertical"/>
 
         <LinearLayout
             android:id="@+id/no_results_layout"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:paddingTop="80dp"
+            android:paddingTop="96dp"
             android:orientation="vertical"
             android:visibility="gone">
 
+            <Space
+                android:layout_width="match_parent"
+                android:layout_height="?android:attr/actionBarSize"/>
+
             <ImageView
-            android:layout_height="160dp"
-            android:layout_width="160dp"
-            android:layout_gravity="center_horizontal"
-            android:src="@drawable/empty_search_results"/>
+                android:layout_height="160dp"
+                android:layout_width="160dp"
+                android:layout_gravity="center_horizontal"
+                android:src="@drawable/empty_search_results"/>
 
             <TextView
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:paddingTop="24dp"
-            android:textSize="18sp"
-            android:text="@string/search_settings_no_results"
-            android:gravity="center"/>
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:paddingTop="24dp"
+                android:textSize="18sp"
+                android:text="@string/search_settings_no_results"
+                android:gravity="center"/>
+
         </LinearLayout>
-    </LinearLayout>
+
+        <android.support.v7.widget.CardView
+            android:id="@+id/search_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="@dimen/search_bar_margin"
+            app:cardCornerRadius="2dp"
+            app:cardBackgroundColor="?android:attr/colorBackground"
+            app:cardElevation="2dp">
+
+            <SearchView
+                android:id="@+id/search_view"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:iconifiedByDefault="false"
+                android:imeOptions="actionSearch|flagNoExtractUi"
+                android:theme="?android:attr/actionBarTheme"/>
+
+        </android.support.v7.widget.CardView>
+
+    </FrameLayout>
 
     <include layout="@layout/search_feedback"/>
+
 </RelativeLayout>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 3dbaa8b..8d1320b 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -165,6 +165,12 @@
         <item name="switchBarTheme">@style/ThemeOverlay.SwitchBar.SubSettings</item>
     </style>
 
+    <!-- Variant of the settings theme with no action bar. -->
+    <style name="Theme.Settings.NoActionBar">
+        <item name="android:windowActionBar">false</item>
+        <item name="android:windowNoTitle">true</item>
+    </style>
+
     <style name="Theme.ProvisioningActivity" parent="@android:style/Theme.Translucent.NoTitleBar">
         <item name="android:windowAnimationStyle">@null</item>
         <item name="android:windowIsTranslucent">true</item>
diff --git a/src/com/android/settings/search2/HeaderDecorator.java b/src/com/android/settings/search2/HeaderDecorator.java
new file mode 100644
index 0000000..786692e
--- /dev/null
+++ b/src/com/android/settings/search2/HeaderDecorator.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search2;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Rect;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.android.settings.R;
+
+public class HeaderDecorator extends RecyclerView.ItemDecoration {
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
+            RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+        if (parent.getChildAdapterPosition(view) > 0) {
+            return;
+        }
+
+        Context context = view.getContext();
+        TypedArray ta = context.obtainStyledAttributes(new int[]{android.R.attr.actionBarSize});
+        outRect.top = ta.getDimensionPixelSize(0, 0);
+        ta.recycle();
+
+        outRect.top += 2 * context.getResources().getDimensionPixelSize(R.dimen.search_bar_margin);
+    }
+}
diff --git a/src/com/android/settings/search2/SearchFragment.java b/src/com/android/settings/search2/SearchFragment.java
index 2a5c961..b4d443b 100644
--- a/src/com/android/settings/search2/SearchFragment.java
+++ b/src/com/android/settings/search2/SearchFragment.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.search2;
 
-import android.app.ActionBar;
 import android.app.Activity;
 import android.app.LoaderManager;
 import android.content.Context;
@@ -32,7 +31,6 @@
 import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.SearchView;
 
 import com.android.internal.logging.nano.MetricsProto;
@@ -60,9 +58,6 @@
         LoaderManager.LoaderCallbacks<List<? extends SearchResult>>, IndexingCallback {
     private static final String TAG = "SearchFragment";
 
-    @VisibleForTesting
-    static final int SEARCH_TAG = "SearchViewTag".hashCode();
-
     // State values
     private static final String STATE_QUERY = "state_query";
     private static final String STATE_SHOWING_SAVED_QUERY = "state_showing_saved_query";
@@ -95,12 +90,12 @@
     @VisibleForTesting
     SavedQueryController mSavedQueryController;
 
-    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    @VisibleForTesting
     SearchFeatureProvider mSearchFeatureProvider;
 
     private SearchResultsAdapter mSearchAdapter;
 
-    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    @VisibleForTesting
     RecyclerView mResultsRecyclerView;
     @VisibleForTesting
     SearchView mSearchView;
@@ -149,13 +144,6 @@
         }
 
         final Activity activity = getActivity();
-        final ActionBar actionBar = activity.getActionBar();
-        mSearchView = makeSearchView(actionBar, mQuery);
-        actionBar.setCustomView(mSearchView);
-        actionBar.setDisplayShowCustomEnabled(true);
-        actionBar.setDisplayShowTitleEnabled(false);
-        mSearchView.requestFocus();
-
         // Run the Index update only if we have some space
         if (!Utils.isLowStorage(activity)) {
             mSearchFeatureProvider.updateIndex(activity, this /* indexingCallback */);
@@ -172,8 +160,14 @@
         mResultsRecyclerView.setAdapter(mSearchAdapter);
         mResultsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
         mResultsRecyclerView.addOnScrollListener(mScrollListener);
+        mResultsRecyclerView.addItemDecoration(new HeaderDecorator());
 
         mNoResultsView = view.findViewById(R.id.no_results_layout);
+
+        mSearchView = view.findViewById(R.id.search_view);
+        mSearchView.setQuery(mQuery, false /* submitQuery */);
+        mSearchView.setOnQueryTextListener(this);
+        mSearchView.requestFocus();
         return view;
     }
 
@@ -347,19 +341,6 @@
         onQueryTextChange(query);
     }
 
-    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
-    SearchView makeSearchView(ActionBar actionBar, String query) {
-        final SearchView searchView = new SearchView(actionBar.getThemedContext());
-        searchView.setIconifiedByDefault(false);
-        searchView.setQuery(query, false /* submitQuery */);
-        searchView.setOnQueryTextListener(this);
-        searchView.setTag(SEARCH_TAG, searchView);
-        final LayoutParams lp =
-                new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
-        searchView.setLayoutParams(lp);
-        return searchView;
-    }
-
     private void hideKeyboard() {
         final Activity activity = getActivity();
         if (activity != null) {
diff --git a/tests/app/src/com/android/settings/search2/SearchFragmentEspressoTest.java b/tests/app/src/com/android/settings/search2/SearchFragmentEspressoTest.java
index e6fe899..3d39cdb 100644
--- a/tests/app/src/com/android/settings/search2/SearchFragmentEspressoTest.java
+++ b/tests/app/src/com/android/settings/search2/SearchFragmentEspressoTest.java
@@ -28,11 +28,13 @@
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.matcher.ViewMatchers.hasFocus;
 import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
-import static android.support.test.espresso.matcher.ViewMatchers.withTagKey;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.assertion.ViewAssertions.matches;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.core.AllOf.allOf;
 
+import com.android.settings.R;
+
 
 @RunWith(AndroidJUnit4.class)
 @SmallTest
@@ -43,7 +45,7 @@
 
     @Test
     public void test_OpenKeyboardOnSearchLaunch() {
-        onView(allOf(hasFocus(), withTagKey(SearchFragment.SEARCH_TAG)))
+        onView(allOf(hasFocus(), withId(R.id.search_view)))
                 .check(matches(withClassName(containsString(SearchView.class.getName()))));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/SettingsRobolectricTestRunner.java b/tests/robotests/src/com/android/settings/SettingsRobolectricTestRunner.java
index a991e7a..1daefc4 100644
--- a/tests/robotests/src/com/android/settings/SettingsRobolectricTestRunner.java
+++ b/tests/robotests/src/com/android/settings/SettingsRobolectricTestRunner.java
@@ -93,6 +93,10 @@
                         getPackageName(),
                         Fs.fileFromPath("./frameworks/support/v7/appcompat/res"),
                         null));
+                paths.add(new ResourcePath(
+                        getPackageName(),
+                        Fs.fileFromPath("./frameworks/support/v7/cardview/res"),
+                        null));
                 return paths;
             }
         };
diff --git a/tests/robotests/src/com/android/settings/search2/HeaderDecoratorTest.java b/tests/robotests/src/com/android/settings/search2/HeaderDecoratorTest.java
new file mode 100644
index 0000000..4fdf44c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search2/HeaderDecoratorTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search2;
+
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.Loader;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.search.IndexingCallback;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ActivityController;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class HeaderDecoratorTest {
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private View mView;
+    @Mock
+    private RecyclerView mRecyclerView;
+    @Mock
+    private RecyclerView.LayoutParams mLayoutParams;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mView.getLayoutParams()).thenReturn(mLayoutParams);
+    }
+
+    @Test
+    public void testgetItemOffsets_positionZero_headerAdded() {
+        HeaderDecorator decorator = new HeaderDecorator();
+        Rect outRect = new Rect();
+        when(mRecyclerView.getChildAdapterPosition(any(View.class))).thenReturn(0);
+        when(mView.getContext().obtainStyledAttributes(any(int[].class))
+                .getDimensionPixelSize(0, 0)).thenReturn(20);
+        when(mView.getContext().getResources().getDimensionPixelSize(R.dimen.search_bar_margin))
+                .thenReturn(5);
+
+        decorator.getItemOffsets(outRect, mView, mRecyclerView, null);
+
+        assertThat(outRect).isEqualTo(new Rect(0, 30, 0, 0));
+    }
+
+    @Test
+    public void testgetItemOffsets_positionGreaterThanZero_noDecoration() {
+        HeaderDecorator decorator = new HeaderDecorator();
+        Rect outRect = new Rect();
+        when(mRecyclerView.getChildAdapterPosition(any(View.class))).thenReturn(1);
+
+        decorator.getItemOffsets(outRect, mView, mRecyclerView, null);
+
+        assertThat(outRect).isEqualTo(new Rect(0, 0, 0, 0));
+    }
+}
