diff --git a/v17/leanback/src/android/support/v17/leanback/app/BrowseFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BrowseFragment.java
index 16deaa4..3928ef5 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BrowseFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BrowseFragment.java
@@ -45,11 +45,12 @@
  * Wrapper fragment for leanback browse screens. Composed of a
  * RowsFragment and a HeadersFragment.
  * <p>
- * The fragment comes with default back key support to show headers.
- * For app customized {@link Activity#onBackPressed()}, app must disable
- * BrowseFragment's default back key support by calling
- * {@link #setHeadersTransitionOnBackEnabled(boolean)} with false and use
- * {@link BrowseFragment.BrowseTransitionListener} and {@link #startHeadersTransition(boolean)}.
+ * By default the BrowseFragment includes support for returning to the headers
+ * when the user presses Back. For Activities that customize {@link
+ * Activity#onBackPressed()}, you must disable this default Back key support by
+ * calling {@link #setHeadersTransitionOnBackEnabled(boolean)} with false and
+ * use {@link BrowseFragment.BrowseTransitionListener} and
+ * {@link #startHeadersTransition(boolean)}.
  */
 public class BrowseFragment extends Fragment {
 
@@ -144,16 +145,22 @@
     }
 
     /**
-     * Listener for browse transitions.
+     * Listener for transitions between browse headers and rows.
      */
     public static class BrowseTransitionListener {
         /**
          * Callback when headers transition starts.
+         *
+         * @param withHeaders True if the transition will result in headers
+         *        being shown, false otherwise.
          */
         public void onHeadersTransitionStart(boolean withHeaders) {
         }
         /**
          * Callback when headers transition stops.
+         *
+         * @param withHeaders True if the transition will result in headers
+         *        being shown, false otherwise.
          */
         public void onHeadersTransitionStop(boolean withHeaders) {
         }
@@ -248,6 +255,14 @@
 
     /**
      * Create arguments for a browse fragment.
+     *
+     * @param args The Bundle to place arguments into, or null if the method
+     *        should return a new Bundle.
+     * @param title The title of the BrowseFragment.
+     * @param headersState The initial state of the headers of the
+     *        BrowseFragment. Must be one of {@link #HEADERS_ENABLED}, {@link
+     *        #HEADERS_HIDDEN}, or {@link #HEADERS_DISABLED}.
+     * @return A Bundle with the given arguments for creating a BrowseFragment.
      */
     public static Bundle createArgs(Bundle args, String title, int headersState) {
         if (args == null) {
@@ -280,7 +295,11 @@
     }
 
     /**
-     * Sets the brand color for the browse fragment.
+     * Sets the brand color for the browse fragment. The brand color is used as
+     * the primary color for UI elements in the browse fragment. For example,
+     * the background color of the headers fragment uses the brand color.
+     *
+     * @param color The color to use as the brand color of the fragment.
      */
     public void setBrandColor(int color) {
         mBrandColor = color;
@@ -300,7 +319,14 @@
     }
 
     /**
-     * Sets the list of rows for the fragment.
+     * Sets the adapter containing the rows for the fragment.
+     *
+     * <p>The items referenced by the adapter must be be derived from
+     * {@link Row}. These rows will be used by the rows fragment and the headers
+     * fragment (if not disabled) to render the browse rows.
+     *
+     * @param adapter An ObjectAdapter for the browse rows. All items must
+     *        derive from {@link Row}.
      */
     public void setAdapter(ObjectAdapter adapter) {
         mAdapter = adapter;
@@ -311,14 +337,17 @@
     }
 
     /**
-     * Returns the list of rows.
+     * Returns the adapter containing the rows for the fragment.
      */
     public ObjectAdapter getAdapter() {
         return mAdapter;
     }
 
     /**
-     * Sets an item selection listener.
+     * Sets an item selection listener. This listener will be called when an
+     * item or row is selected by a user.
+     *
+     * @param listener The listener to call when an item or row is selected.
      */
     public void setOnItemSelectedListener(OnItemSelectedListener listener) {
         mExternalOnItemSelectedListener = listener;
@@ -326,9 +355,14 @@
 
     /**
      * Sets an item clicked listener on the fragment.
-     * OnItemClickedListener will override {@link View.OnClickListener} that
-     * item presenter sets during {@link Presenter#onCreateViewHolder(ViewGroup)}.
-     * So in general,  developer should choose one of the listeners but not both.
+     *
+     * <p>OnItemClickedListener will override {@link View.OnClickListener} that
+     * an item presenter may set during
+     * {@link Presenter#onCreateViewHolder(ViewGroup)}. So in general, you
+     * should choose to use an {@link OnItemClickedListener} or a
+     * {@link View.OnClickListener} on your item views, but not both.
+     *
+     * @param listener The listener to call when an item is clicked.
      */
     public void setOnItemClickedListener(OnItemClickedListener listener) {
         mOnItemClickedListener = listener;
@@ -338,7 +372,7 @@
     }
 
     /**
-     * Returns the item Clicked listener.
+     * Returns the item clicked listener.
      */
     public OnItemClickedListener getOnItemClickedListener() {
         return mOnItemClickedListener;
@@ -347,12 +381,14 @@
     /**
      * Sets a click listener for the search affordance.
      *
-     * The presence of a listener will change the visibility of the search affordance in the
-     * title area. When set to non-null the title area will contain a call to search action.
+     * <p>The presence of a listener will change the visibility of the search
+     * affordance in the fragment title. When set to non-null, the title will
+     * contain an element that a user may click to begin a search.
      *
-     * The listener onClick method will be invoked when the user click on the search action.
+     * <p>The listener's {@link View.OnClickListener#onClick onClick} method
+     * will be invoked when the user clicks on the search element.
      *
-     * @param listener The listener.
+     * @param listener The listener to call when the search element is clicked.
      */
     public void setOnSearchClickedListener(View.OnClickListener listener) {
         mExternalOnSearchClickedListener = listener;
@@ -363,6 +399,8 @@
 
     /**
      * Sets the color used to draw the search affordance.
+     *
+     * @param color The color to use for the search affordance.
      */
     public void setSearchAffordanceColor(int color) {
         mSearchAffordanceColor = color;
@@ -387,7 +425,14 @@
     }
 
     /**
-     * Start headers transition.
+     * Start a headers transition.
+     *
+     * <p>This method will begin a transition to either show or hide the
+     * headers, depending on the value of withHeaders. If headers are disabled
+     * for this browse fragment, this method will throw an exception.
+     *
+     * @param withHeaders True if the headers should transition to being shown,
+     *        false if the transition should result in headers being hidden.
      */
     public void startHeadersTransition(boolean withHeaders) {
         if (!mCanShowHeaders) {
@@ -400,21 +445,24 @@
     }
 
     /**
-     * Returns true if headers transition is currently running.
+     * Returns true if the headers transition is currently running.
      */
     public boolean isInHeadersTransition() {
         return mHeadersTransition != null;
     }
 
     /**
-     * Returns true if headers is showing.
+     * Returns true if headers are shown.
      */
     public boolean isShowingHeaders() {
         return mShowingHeaders;
     }
 
     /**
-     * Set listener for browse fragment transitions.
+     * Set a listener for browse fragment transitions.
+     *
+     * @param listener The listener to call when a browse headers transition
+     *        begins or ends.
      */
     public void setBrowseTransitionListener(BrowseTransitionListener listener) {
         mBrowseTransitionListener = listener;
@@ -669,6 +717,12 @@
         });
     }
 
+    /**
+     * Sets the {@link PresenterSelector} used to render the row headers.
+     *
+     * @param headerPresenterSelector The PresenterSelector that will determine
+     *        the Presenter for each row header.
+     */
     public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {
         mHeaderPresenterSelector = headerPresenterSelector;
         if (mHeadersFragment != null) {
@@ -783,14 +837,15 @@
     }
 
     /**
-     * Enable/disable headers transition on back key support.  This is enabled by default.
-     * BrowseFragment will add a back stack entry when headers are showing.
-     * Headers transition on back key only works for {@link #HEADERS_ENABLED}
-     * or {@link #HEADERS_HIDDEN}.
+     * Enable/disable headers transition on back key support. This is enabled by
+     * default. The BrowseFragment will add a back stack entry when headers are
+     * showing. Running a headers transition when the back key is pressed only
+     * works when the headers state is {@link #HEADERS_ENABLED} or
+     * {@link #HEADERS_HIDDEN}.
      * <p>
-     * NOTE: If app has its own onBackPressed() handling,
-     * app must disable this feature, app may use {@link #startHeadersTransition(boolean)}
-     * and {@link BrowseTransitionListener} in its own back stack handling.
+     * NOTE: If an Activity has its own onBackPressed() handling, you must
+     * disable this feature. You may use {@link #startHeadersTransition(boolean)}
+     * and {@link BrowseTransitionListener} in your own back stack handling.
      */
     public final void setHeadersTransitionOnBackEnabled(boolean headersBackStackEnabled) {
         mHeadersBackStackEnabled = headersBackStackEnabled;
@@ -816,8 +871,9 @@
     }
 
     /**
-     * Sets the drawable displayed in the fragment title area.
-     * @param drawable
+     * Sets the drawable displayed in the browse fragment title.
+     *
+     * @param drawable The Drawable to display in the browse fragment title.
      */
     public void setBadgeDrawable(Drawable drawable) {
         if (mBadgeDrawable != drawable) {
@@ -829,7 +885,7 @@
     }
 
     /**
-     * Returns the badge drawable.
+     * Returns the badge drawable used in the fragment title.
      */
     public Drawable getBadgeDrawable() {
         return mBadgeDrawable;
@@ -837,6 +893,8 @@
 
     /**
      * Sets a title for the browse fragment.
+     *
+     * @param title The title of the browse fragment.
      */
     public void setTitle(String title) {
         mTitle = title;
@@ -853,7 +911,11 @@
     }
 
     /**
-     * Sets the state for the headers column in the browse fragment.
+     * Sets the state for the headers column in the browse fragment. Must be one
+     * of {@link #HEADERS_ENABLED}, {@link #HEADERS_HIDDEN}, or
+     * {@link #HEADERS_DISABLED}.
+     *
+     * @param headersState The state of the headers for the browse fragment.
      */
     public void setHeadersState(int headersState) {
         if (headersState < HEADERS_ENABLED || headersState > HEADERS_DISABLED) {
@@ -887,7 +949,7 @@
     }
 
     /**
-     * Returns the state for the headers column in the browse fragment.
+     * Returns the state of the headers column in the browse fragment.
      */
     public int getHeadersState() {
         return mHeadersState;
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/Row.java b/v17/leanback/src/android/support/v17/leanback/widget/Row.java
index 893d5c0..acf76d4 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/Row.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/Row.java
@@ -16,7 +16,7 @@
 import static android.support.v17.leanback.widget.ObjectAdapter.NO_ID;
 
 /**
- * A row in the RowContainerFragment.  This is the basic class for all Rows.
+ * A row in the RowsFragment.  This is the basic class for all Rows.
  * Developer usually overrides {@link ListRow}, but may override this class
  * for non-list Row (e.g. a HtmlRow).
  */
