diff --git a/v17/leanback/res/layout/lb_vertical_grid_fragment.xml b/v17/leanback/res/layout/lb_vertical_grid_fragment.xml
index 0720501..4cd3a22 100644
--- a/v17/leanback/res/layout/lb_vertical_grid_fragment.xml
+++ b/v17/leanback/res/layout/lb_vertical_grid_fragment.xml
@@ -14,17 +14,24 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/browse_dummy"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:layout_height="match_parent" >
 
-    <include layout="@layout/lb_browse_title" />
-
-    <FrameLayout
-        android:id="@+id/browse_grid_dock"
+    <android.support.v17.leanback.app.BrowseFrameLayout
+        android:id="@+id/browse_frame"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="match_parent" >
 
-</FrameLayout>
\ No newline at end of file
+        <include layout="@layout/lb_browse_title" />
+
+        <FrameLayout
+            android:id="@+id/browse_grid_dock"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+    </android.support.v17.leanback.app.BrowseFrameLayout>
+</FrameLayout>
diff --git a/v17/leanback/src/android/support/v17/leanback/app/VerticalGridFragment.java b/v17/leanback/src/android/support/v17/leanback/app/VerticalGridFragment.java
index f364307..8758381 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/VerticalGridFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/VerticalGridFragment.java
@@ -27,6 +27,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewGroup.MarginLayoutParams;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -43,6 +44,7 @@
     // TODO: remove Params
     private Params mParams;
 
+    private BrowseFrameLayout mBrowseFrame;
     private String mTitle;
     private Drawable mBadgeDrawable;
     private ObjectAdapter mAdapter;
@@ -272,12 +274,35 @@
         }
     }
 
+    private final BrowseFrameLayout.OnFocusSearchListener mOnFocusSearchListener =
+            new BrowseFrameLayout.OnFocusSearchListener() {
+        @Override
+        public View onFocusSearch(View focused, int direction) {
+            if (DEBUG) Log.v(TAG, "onFocusSearch focused " + focused + " + direction " + direction);
+
+            if (focused == mSearchOrbView && (
+                    direction == View.FOCUS_DOWN || direction == View.FOCUS_RIGHT)) {
+                return mGridViewHolder.view;
+
+            } else if (focused != mSearchOrbView && mSearchOrbView.getVisibility() == View.VISIBLE
+                    && direction == View.FOCUS_UP) {
+                return mSearchOrbView;
+
+            } else {
+                return null;
+            }
+        }
+    };
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment,
                 container, false);
 
+        mBrowseFrame = (BrowseFrameLayout) root.findViewById(R.id.browse_frame);
+        mBrowseFrame.setOnFocusSearchListener(mOnFocusSearchListener);
+
         mBrowseTitle = (ViewGroup) root.findViewById(R.id.browse_title_group);
         mBadgeView = (ImageView) mBrowseTitle.findViewById(R.id.browse_badge);
         mTitleView = (TextView) mBrowseTitle.findViewById(R.id.browse_title);
@@ -292,13 +317,13 @@
         mSceneWithTitle = sTransitionHelper.createScene(root, new Runnable() {
             @Override
             public void run() {
-                mBrowseTitle.setVisibility(View.VISIBLE);
+                showTitle(true);
             }
         });
         mSceneWithoutTitle = sTransitionHelper.createScene(root, new Runnable() {
             @Override
             public void run() {
-                mBrowseTitle.setVisibility(View.GONE);
+                showTitle(false);
             }
         });
         mTitleTransition = sTransitionHelper.createTransitionSet(false);
@@ -311,6 +336,12 @@
         return root;
     }
 
+    private void showTitle(boolean show) {
+        MarginLayoutParams lp = (MarginLayoutParams) mBrowseTitle.getLayoutParams();
+        lp.topMargin = show ? 0 : -mBrowseTitle.getHeight();
+        mBrowseTitle.setLayoutParams(lp);
+    }
+
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         ViewGroup gridDock = (ViewGroup) view.findViewById(R.id.browse_grid_dock);
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/BaseGridView.java b/v17/leanback/src/android/support/v17/leanback/widget/BaseGridView.java
index 90d834e..7113383 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/BaseGridView.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/BaseGridView.java
@@ -467,16 +467,8 @@
     }
 
     /**
-     * Get if view has same row sibling next to it.
-     *
-     * @param position Position in adapter.
-     */
-    public boolean hasNextViewInSameRow(int position) {
-        return mLayoutManager.hasNextViewInSameRow(position);
-    }
-
-    /**
-     * Get if view has same row sibling in front of it.
+     * Returns true if the view at the given position has a same row sibling
+     * in front of it.
      *
      * @param position Position in adapter.
      */
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
index 64f1c49..91a96fa 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -2117,27 +2117,13 @@
         return null;
     }
 
-    boolean hasNextViewInSameRow(int pos) {
-        if (mGrid == null || pos == NO_POSITION) {
-            return false;
-        }
-        final int focusedRow = mGrid.getLocation(pos).row;
-        for (int i = 0, count = getChildCount(); i < count; i++) {
-            int position = getPositionByIndex(i);
-            StaggeredGrid.Location loc = mGrid.getLocation(position);
-            if (loc != null && loc.row == focusedRow) {
-                if (position > pos) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     boolean hasPreviousViewInSameRow(int pos) {
         if (mGrid == null || pos == NO_POSITION) {
             return false;
         }
+        if (mFirstVisiblePos > 0) {
+            return true;
+        }
         final int focusedRow = mGrid.getLocation(pos).row;
         for (int i = getChildCount() - 1; i >= 0; i--) {
             int position = getPositionByIndex(i);
