diff --git a/car-ui-lib/Android.mk b/car-ui-lib/Android.mk
index 28edddd..c67ea5c 100644
--- a/car-ui-lib/Android.mk
+++ b/car-ui-lib/Android.mk
@@ -62,10 +62,11 @@
     androidx.appcompat_appcompat \
     androidx-constraintlayout_constraintlayout \
     androidx.preference_preference \
-    androidx.recyclerview_recyclerview
+    androidx.recyclerview_recyclerview \
+    androidx.asynclayoutinflater_asynclayoutinflater \
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
-    androidx-constraintlayout_constraintlayout-solver
+    androidx-constraintlayout_constraintlayout-solver \
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
diff --git a/car-ui-lib/res/layout/car_ui_toolbar.xml b/car-ui-lib/res/layout/car_ui_toolbar.xml
index 2d54431..187dc84 100644
--- a/car-ui-lib/res/layout/car_ui_toolbar.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar.xml
@@ -65,7 +65,6 @@
         android:id="@+id/car_ui_toolbar_nav_icon_container"
         android:layout_width="@dimen/car_ui_toolbar_margin"
         android:layout_height="0dp"
-        android:background="?android:attr/selectableItemBackground"
         style="@style/Widget.CarUi.Toolbar.NavIconContainer"
         app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
@@ -135,11 +134,10 @@
         app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
         app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_end_guideline"/>
 
-    <com.android.car.ui.toolbar.SearchView
-        android:id="@+id/car_ui_toolbar_search_view"
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_search_view_container"
         android:layout_width="0dp"
         android:layout_height="@dimen/car_ui_toolbar_search_height"
-        android:visibility="gone"
         app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
         app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml b/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
index bc334bf..efae70b 100644
--- a/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
@@ -79,7 +79,6 @@
         android:id="@+id/car_ui_toolbar_nav_icon_container"
         android:layout_width="@dimen/car_ui_toolbar_margin"
         android:layout_height="0dp"
-        android:background="?android:attr/selectableItemBackground"
         style="@style/Widget.CarUi.Toolbar.NavIconContainer"
         app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
@@ -128,15 +127,14 @@
         app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_title_logo_container"
         app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_menu_items_container"/>
 
-    <com.android.car.ui.toolbar.SearchView
-        android:id="@+id/car_ui_toolbar_search_view"
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_search_view_container"
         android:layout_width="0dp"
         android:layout_height="@dimen/car_ui_toolbar_search_height"
-        android:visibility="gone"
         app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-        app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_menu_items_container"/>
+        app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"/>
 
     <LinearLayout
         android:id="@+id/car_ui_toolbar_menu_items_container"
diff --git a/car-ui-lib/res/values/styles.xml b/car-ui-lib/res/values/styles.xml
index 87ee6d6..9b9419a 100644
--- a/car-ui-lib/res/values/styles.xml
+++ b/car-ui-lib/res/values/styles.xml
@@ -43,6 +43,7 @@
     <style name="Widget.CarUi.Toolbar.NavIcon">
         <item name="android:tint">@color/car_ui_toolbar_nav_icon_color</item>
         <item name="android:src">@drawable/car_ui_icon_arrow_back</item>
+        <item name="android:background">@drawable/car_ui_toolbar_menu_item_icon_ripple</item>
     </style>
 
     <style name="Widget.CarUi.Toolbar.Title">
@@ -201,10 +202,6 @@
         <item name="android:layout">@layout/car_ui_preference_fragment</item>
     </style>
 
-    <style name="RadioButton.CarUi" parent="android:Widget.DeviceDefault.Light.CompoundButton.RadioButton">
-        <item name="android:textAppearance">?android:attr/textAppearanceLarge</item>
-    </style>
-
     <style name="PreferenceFragmentList.CarUi">
         <item name="android:paddingTop">0dp</item>
         <item name="android:paddingBottom">0dp</item>
diff --git a/car-ui-lib/res/values/themes.xml b/car-ui-lib/res/values/themes.xml
index d40e13c..91d26c6 100644
--- a/car-ui-lib/res/values/themes.xml
+++ b/car-ui-lib/res/values/themes.xml
@@ -200,8 +200,6 @@
 
         <!-- Used by CarUiRecyclerView -->
         <item name="carUiRecyclerViewStyle">@style/Widget.CarUi.CarUiRecyclerView</item>
-
-        <item name="radioButtonStyle">@style/RadioButton.CarUi</item>
     </style>
 
     <style name="CarUiPreferenceTheme">
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
index 45f34ec..ef142ec 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
@@ -308,10 +308,11 @@
     /** Builder class */
     public static final class Builder {
         private final Context mContext;
-        private final CharSequence mSearchTitle;
-        private final CharSequence mSettingsTitle;
-        private final Drawable mSearchIcon;
-        private final Drawable mSettingsIcon;
+
+        private CharSequence mSearchTitle;
+        private CharSequence mSettingsTitle;
+        private Drawable mSearchIcon;
+        private Drawable mSettingsIcon;
 
         private int mId = View.NO_ID;
         private CharSequence mTitle;
@@ -335,10 +336,6 @@
             // Must use getApplicationContext to avoid leaking activities when the MenuItem
             // is held onto for longer than the Activity's lifecycle
             mContext = c.getApplicationContext();
-            mSearchTitle = mContext.getString(R.string.car_ui_toolbar_menu_item_search_title);
-            mSettingsTitle = mContext.getString(R.string.car_ui_toolbar_menu_item_settings_title);
-            mSearchIcon = mContext.getDrawable(R.drawable.car_ui_icon_search);
-            mSettingsIcon = mContext.getDrawable(R.drawable.car_ui_icon_settings);
         }
 
         /** Builds a {@link MenuItem} from the current state of the Builder */
@@ -531,6 +528,8 @@
          * <p>If using this, you should only change the id, visibility, or onClickListener.
          */
         public Builder setToSearch() {
+            mSearchTitle = mContext.getString(R.string.car_ui_toolbar_menu_item_search_title);
+            mSearchIcon = mContext.getDrawable(R.drawable.car_ui_icon_search);
             mIsSearch = true;
             setTitle(mSearchTitle);
             setIcon(mSearchIcon);
@@ -547,6 +546,8 @@
          * <p>If using this, you should only change the id, visibility, or onClickListener.
          */
         public Builder setToSettings() {
+            mSettingsTitle = mContext.getString(R.string.car_ui_toolbar_menu_item_settings_title);
+            mSettingsIcon = mContext.getDrawable(R.drawable.car_ui_icon_settings);
             mIsSettings = true;
             setTitle(mSettingsTitle);
             setIcon(mSettingsIcon);
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
index a939c5d..b6ba3fc 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
@@ -24,7 +24,6 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Xml;
-import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
@@ -32,6 +31,7 @@
 import android.widget.TextView;
 
 import androidx.annotation.XmlRes;
+import androidx.asynclayoutinflater.view.AsyncLayoutInflater;
 
 import com.android.car.ui.R;
 import com.android.car.ui.utils.CarUiUtils;
@@ -45,6 +45,7 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
 
 class MenuItemRenderer implements MenuItem.Listener {
 
@@ -89,20 +90,22 @@
         updateView();
     }
 
-    View createView() {
-        LayoutInflater inflater = (LayoutInflater) mParentView.getContext().getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
+    CompletableFuture<View> createView() {
+        CompletableFuture<View> future = new CompletableFuture<>();
+        AsyncLayoutInflater inflater = new AsyncLayoutInflater(mParentView.getContext());
+        inflater.inflate(R.layout.car_ui_toolbar_menu_item, mParentView, (View view, int resid,
+                ViewGroup parent) -> {
+            mView = view;
+            mIconContainer = mView.requireViewById(R.id.car_ui_toolbar_menu_item_icon_container);
+            mIconView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_icon);
+            mSwitch = mView.requireViewById(R.id.car_ui_toolbar_menu_item_switch);
+            mTextView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_text);
+            mTextWithIconView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_text_with_icon);
+            updateView();
+            future.complete(view);
+        });
 
-        mView = inflater.inflate(R.layout.car_ui_toolbar_menu_item, mParentView, false);
-
-        mIconContainer = mView.requireViewById(R.id.car_ui_toolbar_menu_item_icon_container);
-        mIconView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_icon);
-        mSwitch = mView.requireViewById(R.id.car_ui_toolbar_menu_item_switch);
-        mTextView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_text);
-        mTextWithIconView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_text_with_icon);
-
-        updateView();
-        return mView;
+        return future;
     }
 
     private void updateView() {
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
index 54048c6..d7240eb 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
@@ -32,22 +32,23 @@
 
 import com.android.car.ui.R;
 
-import java.util.HashSet;
+import java.util.Collections;
 import java.util.Set;
 
 /**
  * A search view used by {@link Toolbar}.
  */
 public class SearchView extends ConstraintLayout {
+    private final InputMethodManager mInputMethodManager;
     private final ImageView mIcon;
     private final EditText mSearchText;
     private final View mCloseIcon;
     private final int mStartPaddingWithoutIcon;
     private final int mStartPadding;
     private final int mEndPadding;
-    private final Set<Toolbar.OnSearchListener> mSearchListeners = new HashSet<>();
-    private final Set<Toolbar.OnSearchCompletedListener> mSearchCompletedListeners =
-            new HashSet<>();
+    private Set<Toolbar.OnSearchListener> mSearchListeners = Collections.emptySet();
+    private Set<Toolbar.OnSearchCompletedListener> mSearchCompletedListeners =
+            Collections.emptySet();
     private final TextWatcher mTextWatcher = new TextWatcher() {
         @Override
         public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
@@ -76,6 +77,9 @@
     public SearchView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
 
+        mInputMethodManager = (InputMethodManager)
+            getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+
         LayoutInflater inflater = LayoutInflater.from(context);
         inflater.inflate(R.layout.car_ui_toolbar_search_view, this, true);
 
@@ -83,6 +87,7 @@
         mIcon = requireViewById(R.id.car_ui_toolbar_search_icon);
         mCloseIcon = requireViewById(R.id.car_ui_toolbar_search_close);
         mCloseIcon.setOnClickListener(view -> mSearchText.getText().clear());
+        mCloseIcon.setVisibility(View.GONE);
 
         mStartPaddingWithoutIcon = mSearchText.getPaddingStart();
         mStartPadding = context.getResources().getDimensionPixelSize(
@@ -94,13 +99,10 @@
 
         mSearchText.setOnFocusChangeListener(
                 (view, hasFocus) -> {
-                    InputMethodManager manager = ((InputMethodManager)
-                            context.getSystemService(Context.INPUT_METHOD_SERVICE));
                     if (hasFocus) {
-                        manager.restartInput(view); // needed to detect changes to imeOptions
-                        manager.showSoftInput(view, 0);
+                        mInputMethodManager.showSoftInput(view, 0);
                     } else {
-                        manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+                        mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
                     }
                 });
 
@@ -138,32 +140,16 @@
      * Adds a listener for the search text changing.
      * See also {@link #unregisterOnSearchListener(Toolbar.OnSearchListener)}
      */
-    public void registerOnSearchListener(Toolbar.OnSearchListener listener) {
-        mSearchListeners.add(listener);
+    public void setSearchListeners(Set<Toolbar.OnSearchListener> listeners) {
+        mSearchListeners = listeners;
     }
 
     /**
      * Removes a search listener.
      * See also {@link #registerOnSearchListener(Toolbar.OnSearchListener)}
      */
-    public boolean unregisterOnSearchListener(Toolbar.OnSearchListener listener) {
-        return mSearchListeners.remove(listener);
-    }
-
-    /**
-     * Adds a search completed listener
-     * See also {@link #registerOnSearchCompletedListener(Toolbar.OnSearchCompletedListener)}
-     */
-    public void registerOnSearchCompletedListener(Toolbar.OnSearchCompletedListener listener) {
-        mSearchCompletedListeners.add(listener);
-    }
-
-    /**
-     * Removes a search completed listener.
-     * See also {@link #unregisterOnSearchCompletedListener(Toolbar.OnSearchCompletedListener)}
-     */
-    public boolean unregisterOnSearchCompletedListener(Toolbar.OnSearchCompletedListener listener) {
-        return mSearchCompletedListeners.remove(listener);
+    public void setSearchCompletedListeners(Set<Toolbar.OnSearchCompletedListener> listeners) {
+        mSearchCompletedListeners = listeners;
     }
 
     /**
@@ -227,6 +213,9 @@
                 mIcon.setVisibility(View.VISIBLE);
             }
             mIsPlainText = plainText;
+
+            // Needed to detect changes to imeOptions
+            mInputMethodManager.restartInput(mSearchText);
         }
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java b/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
index 32b2ae1..7970789 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
@@ -49,7 +49,9 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * A toolbar for Android Automotive OS apps.
@@ -144,11 +146,21 @@
     private ViewGroup mTitleLogoContainer;
     private TabLayout mTabLayout;
     private LinearLayout mMenuItemsContainer;
-    private final MenuItem mOverflowButton;
+    private FrameLayout mSearchViewContainer;
+    private SearchView mSearchView;
+
+    // Cached values that we will send to views when they are inflated
+    private CharSequence mSearchHint;
+    private Drawable mSearchIcon;
+    private String mSearchQuery;
+    private final Set<OnSearchListener> mOnSearchListeners = new HashSet<>();
+    private final Set<OnSearchCompletedListener> mOnSearchCompletedListeners = new HashSet<>();
+
     private final Set<OnBackListener> mOnBackListeners = new HashSet<>();
     private final Set<OnTabSelectedListener> mOnTabSelectedListeners = new HashSet<>();
     private final Set<OnHeightChangedListener> mOnHeightChangedListeners = new HashSet<>();
-    private SearchView mSearchView;
+
+    private final MenuItem mOverflowButton;
     private boolean mHasLogo = false;
     private boolean mShowMenuItemsWhileSearching;
     private State mState = State.HOME;
@@ -157,6 +169,8 @@
     private List<MenuItem> mMenuItems = Collections.emptyList();
     private List<MenuItem> mOverflowItems = new ArrayList<>();
     private final List<MenuItemRenderer> mMenuItemRenderers = new ArrayList<>();
+    private CompletableFuture<Void> mMenuItemViewsFuture;
+    private int mMenuItemsXmlId = 0;
     private AlertDialog mOverflowDialog;
     private boolean mNavIconSpaceReserved;
     private boolean mLogoFillsNavIconSpace;
@@ -224,7 +238,7 @@
             mTitle = requireViewById(R.id.car_ui_toolbar_title);
             mTitleLogoContainer = requireViewById(R.id.car_ui_toolbar_title_logo_container);
             mTitleLogo = requireViewById(R.id.car_ui_toolbar_title_logo);
-            mSearchView = requireViewById(R.id.car_ui_toolbar_search_view);
+            mSearchViewContainer = requireViewById(R.id.car_ui_toolbar_search_view_container);
             mProgressBar = requireViewById(R.id.car_ui_toolbar_progress_bar);
 
             mTitle.setText(a.getString(R.styleable.CarUiToolbar_title));
@@ -511,18 +525,23 @@
     }
 
     /** Sets the hint for the search bar. */
-    public void setSearchHint(int resId) {
-        mSearchView.setHint(resId);
+    public void setSearchHint(@StringRes int resId) {
+        setSearchHint(getContext().getString(resId));
     }
 
     /** Sets the hint for the search bar. */
     public void setSearchHint(CharSequence hint) {
-        mSearchView.setHint(hint);
+        if (!Objects.equals(hint, mSearchHint)) {
+            mSearchHint = hint;
+            if (mSearchView != null) {
+                mSearchView.setHint(mSearchHint);
+            }
+        }
     }
 
     /** Gets the search hint */
     public CharSequence getSearchHint() {
-        return mSearchView.getHint();
+        return mSearchHint;
     }
 
     /**
@@ -531,8 +550,8 @@
      * <p>The icon will be lost on configuration change, make sure to set it in onCreate() or
      * a similar place.
      */
-    public void setSearchIcon(int resId) {
-        mSearchView.setIcon(resId);
+    public void setSearchIcon(@DrawableRes int resId) {
+        setSearchIcon(getContext().getDrawable(resId));
     }
 
     /**
@@ -542,7 +561,12 @@
      * a similar place.
      */
     public void setSearchIcon(Drawable d) {
-        mSearchView.setIcon(d);
+        if (!Objects.equals(d, mSearchIcon)) {
+            mSearchIcon = d;
+            if (mSearchView != null) {
+                mSearchView.setIcon(mSearchIcon);
+            }
+        }
     }
 
     /**
@@ -595,10 +619,7 @@
         return super.getBackground() != null;
     }
 
-    /**
-     * Sets the {@link MenuItem Menuitems} to display.
-     */
-    public void setMenuItems(@Nullable List<MenuItem> items) {
+    private void setMenuItemsInternal(@Nullable List<MenuItem> items) {
         if (items == null) {
             items = Collections.emptyList();
         }
@@ -615,6 +636,7 @@
         mMenuItemRenderers.clear();
         mMenuItemsContainer.removeAllViews();
 
+        List<CompletableFuture<View>> viewFutures = new ArrayList<>();
         for (MenuItem item : mMenuItems) {
             if (item.getDisplayBehavior() == MenuItem.DisplayBehavior.NEVER) {
                 mOverflowItems.add(item);
@@ -622,23 +644,48 @@
             } else {
                 MenuItemRenderer renderer = new MenuItemRenderer(item, mMenuItemsContainer);
                 mMenuItemRenderers.add(renderer);
-                mMenuItemsContainer.addView(renderer.createView());
+                viewFutures.add(renderer.createView());
             }
         }
 
-        MenuItemRenderer renderer = new MenuItemRenderer(mOverflowButton, mMenuItemsContainer);
-        mMenuItemRenderers.add(renderer);
-        mMenuItemsContainer.addView(renderer.createView());
+        if (!mOverflowItems.isEmpty()) {
+            MenuItemRenderer renderer = new MenuItemRenderer(mOverflowButton, mMenuItemsContainer);
+            mMenuItemRenderers.add(renderer);
+            viewFutures.add(renderer.createView());
+            createOverflowDialog();
+        }
 
-        createOverflowDialog();
+        if (mMenuItemViewsFuture != null) {
+            mMenuItemViewsFuture.cancel(false);
+        }
+
+        mMenuItemViewsFuture = CompletableFuture.allOf(
+            viewFutures.toArray(new CompletableFuture[0]));
+        mMenuItemViewsFuture.thenRunAsync(() -> {
+            for (CompletableFuture<View> future : viewFutures) {
+                mMenuItemsContainer.addView(future.join());
+            }
+            mMenuItemViewsFuture = null;
+        }, getContext().getMainExecutor());
 
         setState(mState);
     }
 
     /**
+     * Sets the {@link MenuItem Menuitems} to display.
+     */
+    public void setMenuItems(@Nullable List<MenuItem> items) {
+        mMenuItemsXmlId = 0;
+        setMenuItemsInternal(items);
+    }
+
+    /**
      * Sets the {@link MenuItem Menuitems} to display to a list defined in XML.
      *
-     * The XML file must have one <MenuItems> tag, with a variable number of <MenuItem>
+     * <p>If this method is called twice with the same argument (and {@link #setMenuItems(List)}
+     * wasn't called), nothing will happen the second time, even if the MenuItems were changed.
+     *
+     * <p>The XML file must have one <MenuItems> tag, with a variable number of <MenuItem>
      * child tags. See CarUiToolbarMenuItem in CarUi's attrs.xml for a list of available attributes.
      *
      * Example:
@@ -662,8 +709,13 @@
      * @return The MenuItems that were loaded from XML.
      */
     public List<MenuItem> setMenuItems(@XmlRes int resId) {
+        if (mMenuItemsXmlId != 0 && mMenuItemsXmlId == resId) {
+            return mMenuItems;
+        }
+
+        mMenuItemsXmlId = resId;
         List<MenuItem> menuItems = MenuItemRenderer.readMenuItemList(getContext(), resId);
-        setMenuItems(menuItems);
+        setMenuItemsInternal(menuItems);
         return menuItems;
     }
 
@@ -748,7 +800,16 @@
      * Sets the search query.
      */
     public void setSearchQuery(String query) {
-        mSearchView.setSearchQuery(query);
+        if (!Objects.equals(mSearchQuery, query)) {
+            mSearchQuery = query;
+            if (mSearchView != null) {
+                mSearchView.setSearchQuery(query);
+            } else {
+                for (OnSearchListener listener : mOnSearchListeners) {
+                    listener.onSearch(query);
+                }
+            }
+        }
     }
 
     /**
@@ -758,6 +819,23 @@
     public void setState(State state) {
         mState = state;
 
+        if (mSearchView == null && (state == State.SEARCH || state == State.EDIT)) {
+            SearchView searchView = new SearchView(getContext());
+            searchView.setHint(mSearchHint);
+            searchView.setIcon(mSearchIcon);
+            searchView.setSearchListeners(mOnSearchListeners);
+            searchView.setSearchCompletedListeners(mOnSearchCompletedListeners);
+            searchView.setSearchQuery(mSearchQuery);
+            searchView.setVisibility(View.GONE);
+
+            FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
+                    ViewGroup.LayoutParams.MATCH_PARENT,
+                    ViewGroup.LayoutParams.MATCH_PARENT);
+            mSearchViewContainer.addView(searchView, layoutParams);
+
+            mSearchView = searchView;
+        }
+
         for (MenuItemRenderer renderer : mMenuItemRenderers) {
             renderer.setToolbarState(mState);
         }
@@ -820,8 +898,14 @@
                 ? VISIBLE : GONE);
         mTabLayout.setVisibility(state == State.HOME && hasTabs ? VISIBLE : GONE);
 
-        mSearchView.setVisibility(state == State.SEARCH || state == State.EDIT ? VISIBLE : GONE);
-        mSearchView.setPlainText(state == State.EDIT);
+        if (mSearchView != null) {
+            if (state == State.SEARCH || state == State.EDIT) {
+                mSearchView.setPlainText(state == State.EDIT);
+                mSearchView.setVisibility(VISIBLE);
+            } else {
+                mSearchView.setVisibility(GONE);
+            }
+        }
 
         boolean showButtons = (state != State.SEARCH && state != State.EDIT)
                 || mShowMenuItemsWhileSearching;
@@ -918,22 +1002,22 @@
 
     /** Registers a new {@link OnSearchListener} to the list of listeners. */
     public void registerOnSearchListener(OnSearchListener listener) {
-        mSearchView.registerOnSearchListener(listener);
+        mOnSearchListeners.add(listener);
     }
 
     /** Unregisters an existing {@link OnSearchListener} from the list of listeners. */
     public boolean unregisterOnSearchListener(OnSearchListener listener) {
-        return mSearchView.unregisterOnSearchListener(listener);
+        return mOnSearchListeners.remove(listener);
     }
 
     /** Registers a new {@link OnSearchCompletedListener} to the list of listeners. */
     public void registerOnSearchCompletedListener(OnSearchCompletedListener listener) {
-        mSearchView.registerOnSearchCompletedListener(listener);
+        mOnSearchCompletedListeners.add(listener);
     }
 
     /** Unregisters an existing {@link OnSearchCompletedListener} from the list of listeners. */
     public boolean unregisterOnSearchCompletedListener(OnSearchCompletedListener listener) {
-        return mSearchView.unregisterOnSearchCompletedListener(listener);
+        return mOnSearchCompletedListeners.remove(listener);
     }
 
     /** Registers a new {@link OnBackListener} to the list of listeners. */
diff --git a/car-ui-lib/tests/apitest/current.xml b/car-ui-lib/tests/apitest/current.xml
index 21c0f66..c428165 100644
--- a/car-ui-lib/tests/apitest/current.xml
+++ b/car-ui-lib/tests/apitest/current.xml
@@ -215,7 +215,6 @@
   <public type="style" name="Preference.CarUi.SwitchPreference"/>
   <public type="style" name="PreferenceFragment.CarUi"/>
   <public type="style" name="PreferenceFragmentList.CarUi"/>
-  <public type="style" name="RadioButton.CarUi"/>
   <public type="style" name="TextAppearance.CarUi"/>
   <public type="style" name="TextAppearance.CarUi.AlertDialog.Subtitle"/>
   <public type="style" name="TextAppearance.CarUi.ListItem"/>
