diff --git a/design/api/current.txt b/design/api/current.txt
index 5ac4b7c..7ecf0f8 100644
--- a/design/api/current.txt
+++ b/design/api/current.txt
@@ -65,14 +65,18 @@
     ctor public CollapsingToolbarLayout(android.content.Context);
     ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
     ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
+    method public int getCollapsedTitleGravity();
     method public android.graphics.drawable.Drawable getContentScrim();
+    method public int getExpandedTitleGravity();
     method public android.graphics.drawable.Drawable getStatusBarScrim();
+    method public void setCollapsedTitleGravity(int);
     method public void setCollapsedTitleTextAppearance(int);
     method public void setCollapsedTitleTextColor(int);
     method public void setContentScrim(android.graphics.drawable.Drawable);
     method public void setContentScrimColor(int);
     method public void setContentScrimResource(int);
     method public void setExpandedTitleColor(int);
+    method public void setExpandedTitleGravity(int);
     method public void setExpandedTitleTextAppearance(int);
     method public void setStatusBarScrim(android.graphics.drawable.Drawable);
     method public void setStatusBarScrimColor(int);
diff --git a/design/res/values/attrs.xml b/design/res/values/attrs.xml
index 9702497..a23b699 100644
--- a/design/res/values/attrs.xml
+++ b/design/res/values/attrs.xml
@@ -239,6 +239,54 @@
         <!-- The id of the primary Toolbar child that you wish to use for the purpose of collapsing.
              If you do not set this then the first Toolbar child found will be used. -->
         <attr name="toolbarId" format="reference"/>
+
+        <!-- Specifies how the title should be positioned when collapsed. -->
+        <attr name="collapsedTitleGravity">
+            <!-- Push title to the top of its container, not changing its size. -->
+            <flag name="top" value="0x30"/>
+            <!-- Push title to the bottom of its container, not changing its size. -->
+            <flag name="bottom" value="0x50"/>
+            <!-- Push title to the left of its container, not changing its size. -->
+            <flag name="left" value="0x03"/>
+            <!-- Push title to the right of its container, not changing its size. -->
+            <flag name="right" value="0x05"/>
+            <!-- Place title in the vertical center of its container, not changing its size. -->
+            <flag name="center_vertical" value="0x10"/>
+            <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
+            <flag name="fill_vertical" value="0x70"/>
+            <!-- Place title in the horizontal center of its container, not changing its size. -->
+            <flag name="center_horizontal" value="0x01"/>
+            <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
+            <flag name="center" value="0x11"/>
+            <!-- Push title to the beginning of its container, not changing its size. -->
+            <flag name="start" value="0x00800003"/>
+            <!-- Push title to the end of its container, not changing its size. -->
+            <flag name="end" value="0x00800005"/>
+        </attr>
+
+        <!-- Specifies how the title should be positioned when expanded. -->
+        <attr name="expandedTitleGravity">
+            <!-- Push title to the top of its container, not changing its size. -->
+            <flag name="top" value="0x30"/>
+            <!-- Push title to the bottom of its container, not changing its size. -->
+            <flag name="bottom" value="0x50"/>
+            <!-- Push title to the left of its container, not changing its size. -->
+            <flag name="left" value="0x03"/>
+            <!-- Push title to the right of its container, not changing its size. -->
+            <flag name="right" value="0x05"/>
+            <!-- Place title in the vertical center of its container, not changing its size. -->
+            <flag name="center_vertical" value="0x10"/>
+            <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
+            <flag name="fill_vertical" value="0x70"/>
+            <!-- Place title in the horizontal center of its container, not changing its size. -->
+            <flag name="center_horizontal" value="0x01"/>
+            <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
+            <flag name="center" value="0x11"/>
+            <!-- Push title to the beginning of its container, not changing its size. -->
+            <flag name="start" value="0x00800003"/>
+            <!-- Push title to the end of its container, not changing its size. -->
+            <flag name="end" value="0x00800005"/>
+        </attr>
     </declare-styleable>
 
     <declare-styleable name="CollapsingAppBarLayout_LayoutParams">
diff --git a/design/src/android/support/design/internal/NavigationMenu.java b/design/src/android/support/design/internal/NavigationMenu.java
new file mode 100644
index 0000000..4335631
--- /dev/null
+++ b/design/src/android/support/design/internal/NavigationMenu.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2015 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 android.support.design.internal;
+
+import android.content.Context;
+import android.support.v7.internal.view.menu.MenuBuilder;
+import android.support.v7.internal.view.menu.MenuItemImpl;
+import android.support.v7.internal.view.menu.SubMenuBuilder;
+import android.view.SubMenu;
+
+/**
+ * This is a {@link MenuBuilder} that returns an instance of {@link NavigationSubMenu} instead of
+ * {@link SubMenuBuilder} when a sub menu is created.
+ *
+ * @hide
+ */
+public class NavigationMenu extends MenuBuilder {
+
+    public NavigationMenu(Context context) {
+        super(context);
+    }
+
+    @Override
+    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {
+        final MenuItemImpl item = (MenuItemImpl) addInternal(group, id, categoryOrder, title);
+        final SubMenuBuilder subMenu = new NavigationSubMenu(getContext(), this, item);
+        item.setSubMenu(subMenu);
+        return subMenu;
+    }
+
+}
diff --git a/design/src/android/support/design/internal/NavigationMenuPresenter.java b/design/src/android/support/design/internal/NavigationMenuPresenter.java
index 34a82ee..d1d1482 100644
--- a/design/src/android/support/design/internal/NavigationMenuPresenter.java
+++ b/design/src/android/support/design/internal/NavigationMenuPresenter.java
@@ -191,7 +191,7 @@
             setUpdateSuspended(true);
             MenuItemImpl item = mAdapter.getItem(positionInAdapter).getMenuItem();
             if (item != null && item.isCheckable()) {
-                setCheckedItem(item);
+                mAdapter.setCheckedItem(item);
             }
             mMenu.performItemAction(item, this, 0);
             setUpdateSuspended(false);
diff --git a/design/src/android/support/design/internal/NavigationSubMenu.java b/design/src/android/support/design/internal/NavigationSubMenu.java
new file mode 100644
index 0000000..ae59412
--- /dev/null
+++ b/design/src/android/support/design/internal/NavigationSubMenu.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2015 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 android.support.design.internal;
+
+import android.content.Context;
+import android.support.v7.internal.view.menu.MenuBuilder;
+import android.support.v7.internal.view.menu.MenuItemImpl;
+import android.support.v7.internal.view.menu.SubMenuBuilder;
+import android.view.MenuItem;
+
+/**
+ * This is a {@link SubMenuBuilder} that it notifies the parent {@link NavigationMenu} of its menu
+ * updates.
+ *
+ * @hide
+ */
+public class NavigationSubMenu extends SubMenuBuilder {
+
+    public NavigationSubMenu(Context context, NavigationMenu menu, MenuItemImpl item) {
+        super(context, menu, item);
+    }
+
+    @Override
+    public MenuItem add(CharSequence title) {
+        MenuItem item = super.add(title);
+        notifyParent();
+        return item;
+    }
+
+    @Override
+    public MenuItem add(int titleRes) {
+        MenuItem item = super.add(titleRes);
+        notifyParent();
+        return item;
+    }
+
+    @Override
+    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
+        MenuItem item = super.add(groupId, itemId, order, title);
+        notifyParent();
+        return item;
+    }
+
+    @Override
+    public MenuItem add(int groupId, int itemId, int order, int titleRes) {
+        MenuItem item = super.add(groupId, itemId, order, titleRes);
+        notifyParent();
+        return item;
+    }
+
+    private void notifyParent() {
+        ((MenuBuilder) getParentMenu()).onItemsChanged(true);
+    }
+
+}
diff --git a/design/src/android/support/design/widget/CollapsingTextHelper.java b/design/src/android/support/design/widget/CollapsingTextHelper.java
index 636770e..8b3bd84 100644
--- a/design/src/android/support/design/widget/CollapsingTextHelper.java
+++ b/design/src/android/support/design/widget/CollapsingTextHelper.java
@@ -22,10 +22,12 @@
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Rect;
+import android.graphics.RectF;
 import android.graphics.Typeface;
 import android.os.Build;
 import android.support.design.R;
 import android.support.v4.text.TextDirectionHeuristicsCompat;
+import android.support.v4.view.GravityCompat;
 import android.support.v4.view.ViewCompat;
 import android.text.TextPaint;
 import android.text.TextUtils;
@@ -55,19 +57,23 @@
 
     private final Rect mExpandedBounds;
     private final Rect mCollapsedBounds;
-    private int mExpandedTextVerticalGravity = Gravity.CENTER_VERTICAL;
-    private int mCollapsedTextVerticalGravity = Gravity.CENTER_VERTICAL;
+    private final RectF mCurrentBounds;
+    private int mExpandedTextGravity = Gravity.CENTER_VERTICAL;
+    private int mCollapsedTextGravity = Gravity.CENTER_VERTICAL;
     private float mExpandedTextSize;
     private float mCollapsedTextSize;
     private int mExpandedTextColor;
     private int mCollapsedTextColor;
 
-    private float mExpandedTop;
-    private float mCollapsedTop;
+    private float mExpandedDrawY;
+    private float mCollapsedDrawY;
+    private float mExpandedDrawX;
+    private float mCollapsedDrawX;
+    private float mCurrentDrawX;
+    private float mCurrentDrawY;
 
     private CharSequence mText;
     private CharSequence mTextToDraw;
-    private float mTextWidth;
     private boolean mIsRtl;
 
     private boolean mUseTexture;
@@ -76,9 +82,6 @@
     private float mTextureAscent;
     private float mTextureDescent;
 
-    private float mCurrentLeft;
-    private float mCurrentRight;
-    private float mCurrentTop;
     private float mScale;
     private float mCurrentTextSize;
 
@@ -95,6 +98,7 @@
 
         mCollapsedBounds = new Rect();
         mExpandedBounds = new Rect();
+        mCurrentBounds = new RectF();
     }
 
     void setTextSizeInterpolator(Interpolator interpolator) {
@@ -143,24 +147,28 @@
         mCollapsedBounds.set(left, top, right, bottom);
     }
 
-    void setExpandedTextVerticalGravity(int gravity) {
-        gravity &= Gravity.VERTICAL_GRAVITY_MASK;
-
-        if (mExpandedTextVerticalGravity != gravity) {
-            mExpandedTextVerticalGravity = gravity;
+    void setExpandedTextGravity(int gravity) {
+        if (mExpandedTextGravity != gravity) {
+            mExpandedTextGravity = gravity;
             recalculate();
         }
     }
 
-    void setCollapsedTextVerticalGravity(int gravity) {
-        gravity &= Gravity.VERTICAL_GRAVITY_MASK;
+    int getExpandedTextGravity() {
+        return mExpandedTextGravity;
+    }
 
-        if (mCollapsedTextVerticalGravity != gravity) {
-            mCollapsedTextVerticalGravity = gravity;
+    void setCollapsedTextGravity(int gravity) {
+        if (mCollapsedTextGravity != gravity) {
+            mCollapsedTextGravity = gravity;
             recalculate();
         }
     }
 
+    int getCollapsedTextGravity() {
+        return mCollapsedTextGravity;
+    }
+
     void setCollapsedTextAppearance(int resId) {
         TypedArray a = mView.getContext().obtainStyledAttributes(resId, R.styleable.TextAppearance);
         if (a.hasValue(R.styleable.TextAppearance_android_textColor)) {
@@ -215,7 +223,7 @@
 
         if (fraction != mExpandedFraction) {
             mExpandedFraction = fraction;
-            calculateOffsets();
+            calculateCurrentOffsets();
         }
     }
 
@@ -231,15 +239,16 @@
         return mExpandedTextSize;
     }
 
-    private void calculateOffsets() {
+    private void calculateCurrentOffsets() {
         final float fraction = mExpandedFraction;
 
-        mCurrentLeft = interpolate(mExpandedBounds.left, mCollapsedBounds.left,
-                fraction, mPositionInterpolator);
-        mCurrentTop = interpolate(mExpandedTop, mCollapsedTop, fraction, mPositionInterpolator);
-        mCurrentRight = interpolate(mExpandedBounds.right, mCollapsedBounds.right,
-                fraction, mPositionInterpolator);
-        setInterpolatedTextSize(interpolate(mExpandedTextSize, mCollapsedTextSize,
+        interpolateBounds(fraction);
+        mCurrentDrawX = lerp(mExpandedDrawX, mCollapsedDrawX, fraction,
+                mPositionInterpolator);
+        mCurrentDrawY = lerp(mExpandedDrawY, mCollapsedDrawY, fraction,
+                mPositionInterpolator);
+
+        setInterpolatedTextSize(lerp(mExpandedTextSize, mCollapsedTextSize,
                 fraction, mTextSizeInterpolator));
 
         if (mCollapsedTextColor != mExpandedTextColor) {
@@ -253,54 +262,93 @@
         ViewCompat.postInvalidateOnAnimation(mView);
     }
 
-    private void calculateBaselines() {
+    private void calculateBaseOffsets() {
         // We then calculate the collapsed text size, using the same logic
         mTextPaint.setTextSize(mCollapsedTextSize);
-        switch (mCollapsedTextVerticalGravity) {
+        float width = mTextToDraw != null ?
+                mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
+        final int collapsedAbsGravity = GravityCompat.getAbsoluteGravity(mCollapsedTextGravity,
+                mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+        switch (collapsedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
             case Gravity.BOTTOM:
-                mCollapsedTop = mCollapsedBounds.bottom;
+                mCollapsedDrawY = mCollapsedBounds.bottom;
                 break;
             case Gravity.TOP:
-                mCollapsedTop = mCollapsedBounds.top - mTextPaint.ascent();
+                mCollapsedDrawY = mCollapsedBounds.top - mTextPaint.ascent();
                 break;
             case Gravity.CENTER_VERTICAL:
             default:
                 float textHeight = mTextPaint.descent() - mTextPaint.ascent();
                 float textOffset = (textHeight / 2) - mTextPaint.descent();
-                mCollapsedTop = mCollapsedBounds.centerY() + textOffset;
+                mCollapsedDrawY = mCollapsedBounds.centerY() + textOffset;
+                break;
+        }
+        switch (collapsedAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+            case Gravity.CENTER_HORIZONTAL:
+                mCollapsedDrawX = mCollapsedBounds.centerX() - (width / 2);
+                break;
+            case Gravity.RIGHT:
+                mCollapsedDrawX = mCollapsedBounds.right - width;
+                break;
+            case Gravity.LEFT:
+            default:
+                mCollapsedDrawX = mCollapsedBounds.left;
                 break;
         }
 
         mTextPaint.setTextSize(mExpandedTextSize);
-        switch (mExpandedTextVerticalGravity) {
+        width = mTextToDraw != null
+                ? mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
+        final int expandedAbsGravity = GravityCompat.getAbsoluteGravity(mExpandedTextGravity,
+                mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+        switch (expandedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
             case Gravity.BOTTOM:
-                mExpandedTop = mExpandedBounds.bottom;
+                mExpandedDrawY = mExpandedBounds.bottom;
                 break;
             case Gravity.TOP:
-                mExpandedTop = mExpandedBounds.top - mTextPaint.ascent();
+                mExpandedDrawY = mExpandedBounds.top - mTextPaint.ascent();
                 break;
             case Gravity.CENTER_VERTICAL:
             default:
                 float textHeight = mTextPaint.descent() - mTextPaint.ascent();
                 float textOffset = (textHeight / 2) - mTextPaint.descent();
-                mExpandedTop = mExpandedBounds.centerY() + textOffset;
+                mExpandedDrawY = mExpandedBounds.centerY() + textOffset;
                 break;
         }
-        mTextureAscent = mTextPaint.ascent();
-        mTextureDescent = mTextPaint.descent();
+        switch (expandedAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+            case Gravity.CENTER_HORIZONTAL:
+                mExpandedDrawX = mExpandedBounds.centerX() - (width / 2);
+                break;
+            case Gravity.RIGHT:
+                mExpandedDrawX = mExpandedBounds.right - width;
+                break;
+            case Gravity.LEFT:
+            default:
+                mExpandedDrawX = mExpandedBounds.left;
+                break;
+        }
 
         // The bounds have changed so we need to clear the texture
         clearTexture();
     }
 
+    private void interpolateBounds(float fraction) {
+        mCurrentBounds.left = lerp(mExpandedBounds.left, mCollapsedBounds.left,
+                fraction, mPositionInterpolator);
+        mCurrentBounds.top = lerp(mExpandedDrawY, mCollapsedDrawY,
+                fraction, mPositionInterpolator);
+        mCurrentBounds.right = lerp(mExpandedBounds.right, mCollapsedBounds.right,
+                fraction, mPositionInterpolator);
+        mCurrentBounds.bottom = lerp(mExpandedBounds.bottom, mCollapsedBounds.bottom,
+                fraction, mPositionInterpolator);
+    }
+
     public void draw(Canvas canvas) {
         final int saveCount = canvas.save();
 
         if (mTextToDraw != null) {
-            final boolean isRtl = mIsRtl;
-
-            float x = isRtl ? mCurrentRight : mCurrentLeft;
-            float y = mCurrentTop;
+            float x = mCurrentDrawX;
+            float y = mCurrentDrawY;
 
             final boolean drawTexture = mUseTexture && mExpandedTitleTexture != null;
 
@@ -320,7 +368,7 @@
 
             if (DEBUG_DRAW) {
                 // Just a debug tool, which drawn a Magneta rect in the text bounds
-                canvas.drawRect(mCurrentLeft, y + ascent, mCurrentRight, y + descent,
+                canvas.drawRect(mCurrentBounds.left, y + ascent, mCurrentBounds.right, y + descent,
                         DEBUG_DRAW_PAINT);
             }
 
@@ -332,10 +380,6 @@
                 canvas.scale(mScale, mScale, x, y);
             }
 
-            if (isRtl) {
-                x -= mTextWidth;
-            }
-
             if (drawTexture) {
                 // If we should use a texture, draw it instead of text
                 canvas.drawBitmap(mExpandedTitleTexture, x, y, mTexturePaint);
@@ -394,7 +438,6 @@
                 mTextToDraw = title;
             }
             mIsRtl = calculateIsRtl(mTextToDraw);
-            mTextWidth = mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length());
         }
 
         // Use our texture if the scale isn't 1.0
@@ -416,10 +459,11 @@
 
         mTextPaint.setTextSize(mExpandedTextSize);
         mTextPaint.setColor(mExpandedTextColor);
+        mTextureAscent = mTextPaint.ascent();
+        mTextureDescent = mTextPaint.descent();
 
         final int w = Math.round(mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()));
-        final int h = Math.round(mTextPaint.descent() - mTextPaint.ascent());
-        mTextWidth = w;
+        final int h = Math.round(mTextureDescent - mTextureAscent);
 
         if (w <= 0 && h <= 0) {
             return; // If the width or height are 0, return
@@ -432,9 +476,7 @@
 
         if (mTexturePaint == null) {
             // Make sure we have a paint
-            mTexturePaint = new Paint();
-            mTexturePaint.setAntiAlias(true);
-            mTexturePaint.setFilterBitmap(true);
+            mTexturePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
         }
     }
 
@@ -442,8 +484,8 @@
         if (mView.getHeight() > 0 && mView.getWidth() > 0) {
             // If we've already been laid out, calculate everything now otherwise we'll wait
             // until a layout
-            calculateBaselines();
-            calculateOffsets();
+            calculateBaseOffsets();
+            calculateCurrentOffsets();
         }
     }
 
@@ -503,7 +545,7 @@
         return Color.argb((int) a, (int) r, (int) g, (int) b);
     }
 
-    private static float interpolate(float startValue, float endValue, float fraction,
+    private static float lerp(float startValue, float endValue, float fraction,
             Interpolator interpolator) {
         if (interpolator != null) {
             fraction = interpolator.getInterpolation(fraction);
diff --git a/design/src/android/support/design/widget/CollapsingToolbarLayout.java b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
index 71611e6..7febedc 100644
--- a/design/src/android/support/design/widget/CollapsingToolbarLayout.java
+++ b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
@@ -28,6 +28,7 @@
 import android.support.annotation.Nullable;
 import android.support.design.R;
 import android.support.v4.content.ContextCompat;
+import android.support.v4.view.GravityCompat;
 import android.support.v4.view.ViewCompat;
 import android.support.v4.view.WindowInsetsCompat;
 import android.support.v7.widget.Toolbar;
@@ -122,13 +123,19 @@
         super(context, attrs, defStyleAttr);
 
         mCollapsingTextHelper = new CollapsingTextHelper(this);
-        mCollapsingTextHelper.setExpandedTextVerticalGravity(Gravity.BOTTOM);
         mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
 
         TypedArray a = context.obtainStyledAttributes(attrs,
                 R.styleable.CollapsingToolbarLayout, defStyleAttr,
                 R.style.Widget_Design_CollapsingToolbar);
 
+        mCollapsingTextHelper.setExpandedTextGravity(
+                a.getInt(R.styleable.CollapsingToolbarLayout_expandedTitleGravity,
+                        GravityCompat.START | Gravity.BOTTOM));
+        mCollapsingTextHelper.setCollapsedTextGravity(
+                a.getInt(R.styleable.CollapsingToolbarLayout_collapsedTitleGravity,
+                        GravityCompat.START | Gravity.CENTER_VERTICAL));
+
         mExpandedMarginLeft = mExpandedMarginTop = mExpandedMarginRight = mExpandedMarginBottom =
                 a.getDimensionPixelSize(R.styleable.CollapsingToolbarLayout_expandedTitleMargin, 0);
 
@@ -344,9 +351,10 @@
             mCollapsingTextHelper.setCollapsedBounds(mTmpRect.left, bottom - mTmpRect.height(),
                     mTmpRect.right, bottom);
             // Update the expanded bounds
-            mCollapsingTextHelper.setExpandedBounds(left + mExpandedMarginLeft,
-                    mTmpRect.bottom + mExpandedMarginTop, right - mExpandedMarginRight,
-                    bottom - mExpandedMarginBottom);
+            mCollapsingTextHelper.setExpandedBounds(
+                    mExpandedMarginLeft, mTmpRect.bottom,
+                    right - left - mExpandedMarginRight,
+                    bottom - top - mExpandedMarginBottom);
 
             mCollapsingTextHelper.recalculate();
         }
@@ -566,6 +574,26 @@
     }
 
     /**
+     * Sets the horizontal alignment of the collapsed title and the vertical gravity that will
+     * be used when there is extra space in the collapsed bounds beyond what is required for
+     * the title itself.
+     *
+     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
+     */
+    public void setCollapsedTitleGravity(int gravity) {
+        mCollapsingTextHelper.setExpandedTextGravity(gravity);
+    }
+
+    /**
+     * Returns the horizontal and vertical alignment for title when collapsed.
+     *
+     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
+     */
+    public int getCollapsedTitleGravity() {
+        return mCollapsingTextHelper.getCollapsedTextGravity();
+    }
+
+    /**
      * Sets the text color and size for the expanded title from the specified
      * TextAppearance resource.
      *
@@ -585,6 +613,26 @@
     }
 
     /**
+     * Sets the horizontal alignment of the expanded title and the vertical gravity that will
+     * be used when there is extra space in the expanded bounds beyond what is required for
+     * the title itself.
+     *
+     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
+     */
+    public void setExpandedTitleGravity(int gravity) {
+        mCollapsingTextHelper.setExpandedTextGravity(gravity);
+    }
+
+    /**
+     * Returns the horizontal and vertical alignment for title when expanded.
+     *
+     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
+     */
+    public int getExpandedTitleGravity() {
+        return mCollapsingTextHelper.getExpandedTextGravity();
+    }
+
+    /**
      * The additional offset used to define when to trigger the scrim visibility change.
      */
     final int getScrimTriggerOffset() {
diff --git a/design/src/android/support/design/widget/NavigationView.java b/design/src/android/support/design/widget/NavigationView.java
index 3e83863..2a19fa8 100644
--- a/design/src/android/support/design/widget/NavigationView.java
+++ b/design/src/android/support/design/widget/NavigationView.java
@@ -30,6 +30,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.StyleRes;
 import android.support.design.R;
+import android.support.design.internal.NavigationMenu;
 import android.support.design.internal.NavigationMenuPresenter;
 import android.support.design.internal.ScrimInsetsFrameLayout;
 import android.support.v4.content.ContextCompat;
@@ -75,7 +76,7 @@
 
     private static final int PRESENTER_NAVIGATION_VIEW_ID = 1;
 
-    private final MenuBuilder mMenu;
+    private final NavigationMenu mMenu;
     private final NavigationMenuPresenter mPresenter;
 
     private OnNavigationItemSelectedListener mListener;
@@ -95,7 +96,7 @@
         super(context, attrs, defStyleAttr);
 
         // Create the menu
-        mMenu = new MenuBuilder(context);
+        mMenu = new NavigationMenu(context);
 
         // Custom attributes
         TypedArray a = context.obtainStyledAttributes(attrs,
diff --git a/design/src/android/support/design/widget/TextInputLayout.java b/design/src/android/support/design/widget/TextInputLayout.java
index 4332d10..2f492c7 100644
--- a/design/src/android/support/design/widget/TextInputLayout.java
+++ b/design/src/android/support/design/widget/TextInputLayout.java
@@ -113,7 +113,7 @@
 
         mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
         mCollapsingTextHelper.setPositionInterpolator(new AccelerateInterpolator());
-        mCollapsingTextHelper.setCollapsedTextVerticalGravity(Gravity.TOP);
+        mCollapsingTextHelper.setCollapsedTextGravity(Gravity.TOP);
 
         final TypedArray a = context.obtainStyledAttributes(attrs,
                 R.styleable.TextInputLayout, 0, R.style.Widget_Design_TextInputLayout);
diff --git a/v17/leanback/api/current.txt b/v17/leanback/api/current.txt
index 336a422..ced23aa 100644
--- a/v17/leanback/api/current.txt
+++ b/v17/leanback/api/current.txt
@@ -734,7 +734,9 @@
     ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
     ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
     method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
-    method public int getBackgroundColor();
+    method public final int getActionsBackgroundColor();
+    method public final int getAlignmentMode();
+    method public final int getBackgroundColor();
     method public final int getInitialState();
     method protected int getLayoutResourceId();
     method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
@@ -744,12 +746,16 @@
     method protected void onLayoutLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
     method protected void onLayoutOverviewFrame(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
     method protected void onStateChanged(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
-    method public void setBackgroundColor(int);
+    method public final void setActionsBackgroundColor(int);
+    method public final void setAlignmentMode(int);
+    method public final void setBackgroundColor(int);
     method public final void setInitialState(int);
     method public final void setListener(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener);
     method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
     method public final void setParticipatingEntranceTransition(boolean);
     method public final void setState(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+    field public static final int ALIGN_MODE_MIDDLE = 1; // 0x1
+    field public static final int ALIGN_MODE_START = 0; // 0x0
     field public static final int STATE_FULL = 1; // 0x1
     field public static final int STATE_HALF = 0; // 0x0
     field public static final int STATE_SMALL = 2; // 0x2
diff --git a/v17/leanback/res/layout/lb_fullwidth_details_overview.xml b/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
index 27c4258..614fc59 100644
--- a/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
+++ b/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
@@ -30,7 +30,6 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/lb_details_v2_card_height"
         android:layout_marginTop="@dimen/lb_details_v2_blank_height"
-        android:paddingStart="@dimen/lb_details_v2_left"
         android:clipToPadding="false"
         android:foreground="#ffffff"
         android:elevation="@dimen/lb_details_overview_z"
@@ -42,34 +41,40 @@
         android:orientation="vertical"
         >
 
-    <android.support.v17.leanback.widget.HorizontalGridView
-        android:id="@+id/details_overview_actions"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/lb_details_v2_actions_height"
-        android:gravity="center"
-        android:clipToPadding="false"
-        android:focusable="true"
-        android:focusableInTouchMode="true"
-        android:paddingStart="@dimen/lb_details_v2_description_margin_start"
-        android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
-        lb:horizontalMargin="@dimen/lb_details_overview_action_items_margin"
-        lb:rowHeight="@dimen/lb_details_v2_actions_height" />
+        <LinearLayout 
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:id="@+id/details_overview_actions_background"
+            android:orientation="vertical" >
 
-      <android.support.v17.leanback.widget.NonOverlappingFrameLayout
-          android:id="@+id/details_overview_description"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:focusable="true"
-          android:focusableInTouchMode="true"
-          android:descendantFocusability="afterDescendants"
-          android:gravity="top"
-          android:paddingStart="@dimen/lb_details_v2_description_margin_start"
-          android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
-          android:paddingTop="@dimen/lb_details_v2_description_margin_top"
-          android:clipToPadding="false"
-          android:clipChildren="false"
-          />
+            <android.support.v17.leanback.widget.HorizontalGridView
+                android:id="@+id/details_overview_actions"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/lb_details_v2_actions_height"
+                android:gravity="center"
+                android:clipToPadding="false"
+                android:focusable="true"
+                android:focusableInTouchMode="true"
+                android:paddingStart="@dimen/lb_details_v2_description_margin_start"
+                android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
+                lb:horizontalMargin="@dimen/lb_details_overview_action_items_margin"
+                lb:rowHeight="@dimen/lb_details_v2_actions_height" />
+        </LinearLayout>
 
+        <android.support.v17.leanback.widget.NonOverlappingFrameLayout
+            android:id="@+id/details_overview_description"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:focusable="true"
+            android:focusableInTouchMode="true"
+            android:descendantFocusability="afterDescendants"
+            android:gravity="top"
+            android:paddingStart="@dimen/lb_details_v2_description_margin_start"
+            android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
+            android:paddingTop="@dimen/lb_details_v2_description_margin_top"
+            android:clipToPadding="false"
+            android:clipChildren="false"
+            />
     </LinearLayout>
     </FrameLayout>
 </FrameLayout>
diff --git a/v17/leanback/res/values/dimens.xml b/v17/leanback/res/values/dimens.xml
index c7664b9..275612e 100644
--- a/v17/leanback/res/values/dimens.xml
+++ b/v17/leanback/res/values/dimens.xml
@@ -105,6 +105,7 @@
     <dimen name="lb_details_v2_blank_height">160dp</dimen>
     <dimen name="lb_details_v2_card_height">540dp</dimen>
     <dimen name="lb_details_v2_left">270dip</dimen>
+    <dimen name="lb_details_v2_logo_margin_start">128dp</dimen>
     <dimen name="lb_details_v2_actions_height">56dip</dimen>
     <dimen name="lb_details_v2_description_margin_start">24dp</dimen>
     <dimen name="lb_details_v2_description_margin_end">54dp</dimen>
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java b/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
index 20f62d2..8d84afa 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
@@ -91,6 +91,18 @@
     public static final int STATE_SMALL = 2;
 
     /**
+     * This is the alignment mode that the logo and description align to the starting edge of the
+     * overview view.
+     */
+    public static final int ALIGN_MODE_START = 0;
+    /**
+     * This is the alignment mode that the ending edge of logo and the starting edge of description
+     * align to the middle of the overview view. Note that this might not be the exact horizontal
+     * center of the overview view.
+     */
+    public static final int ALIGN_MODE_MIDDLE = 1;
+
+    /**
      * Listeners for events on ViewHolder.
      */
     public static abstract class Listener {
@@ -185,13 +197,11 @@
 
         final ViewGroup mOverviewRoot;
         final FrameLayout mOverviewFrame;
-        final FrameLayout mDetailsDescriptionFrame;
+        final ViewGroup mDetailsDescriptionFrame;
         final HorizontalGridView mActionsRow;
         final Presenter.ViewHolder mDetailsDescriptionViewHolder;
         final DetailsOverviewLogoPresenter.ViewHolder mDetailsLogoViewHolder;
         int mNumItems;
-        boolean mShowMoreRight;
-        boolean mShowMoreLeft;
         ItemBridgeAdapter mActionBridgeAdapter;
         protected final Handler mHandler = new Handler();
         int mState = STATE_HALF;
@@ -208,9 +218,6 @@
             mActionsRow.setAdapter(mActionBridgeAdapter);
             mNumItems = mActionBridgeAdapter.getItemCount();
 
-            mShowMoreRight = false;
-            mShowMoreLeft = true;
-            showMoreLeft(false);
         }
 
         final View.OnLayoutChangeListener mLayoutChangeListener =
@@ -280,22 +287,6 @@
             if (DEBUG) Log.v(TAG, "checkFirstAndLast fromScroll " + fromScroll +
                     " showRight " + showRight + " showLeft " + showLeft);
 
-            showMoreRight(showRight);
-            showMoreLeft(showLeft);
-        }
-
-        private void showMoreLeft(boolean show) {
-            if (show != mShowMoreLeft) {
-                mActionsRow.setFadingLeftEdge(show);
-                mShowMoreLeft = show;
-            }
-        }
-
-        private void showMoreRight(boolean show) {
-            if (show != mShowMoreRight) {
-                mActionsRow.setFadingRightEdge(show);
-                mShowMoreRight = show;
-            }
         }
 
         /**
@@ -310,7 +301,7 @@
             mOverviewRoot = (ViewGroup) rootView.findViewById(R.id.details_root);
             mOverviewFrame = (FrameLayout) rootView.findViewById(R.id.details_frame);
             mDetailsDescriptionFrame =
-                    (FrameLayout) rootView.findViewById(R.id.details_overview_description);
+                    (ViewGroup) rootView.findViewById(R.id.details_overview_description);
             mActionsRow =
                     (HorizontalGridView) mOverviewFrame.findViewById(R.id.details_overview_actions);
             mActionsRow.setHasOverlappingRendering(false);
@@ -381,11 +372,15 @@
     private OnActionClickedListener mActionClickedListener;
 
     private int mBackgroundColor = Color.TRANSPARENT;
+    private int mActionsBackgroundColor = Color.TRANSPARENT;
     private boolean mBackgroundColorSet;
+    private boolean mActionsBackgroundColorSet;
 
     private Listener mListener;
     private boolean mParticipatingEntranceTransition;
 
+    private int mAlignmentMode;
+
     /**
      * Constructor for a FullWidthDetailsOverviewRowPresenter.
      *
@@ -428,20 +423,37 @@
     /**
      * Sets the background color.  If not set, a default from the theme will be used.
      */
-    public void setBackgroundColor(int color) {
+    public final void setBackgroundColor(int color) {
         mBackgroundColor = color;
         mBackgroundColorSet = true;
     }
 
     /**
-     * Returns the background color.  If no background color was set, transparent
+     * Returns the background color.  If {@link #setBackgroundColor(int)}, transparent
      * is returned.
      */
-    public int getBackgroundColor() {
+    public final int getBackgroundColor() {
         return mBackgroundColor;
     }
 
     /**
+     * Sets the background color for Action Bar.  If not set, a default from the theme will be
+     * used.
+     */
+    public final void setActionsBackgroundColor(int color) {
+        mActionsBackgroundColor = color;
+        mActionsBackgroundColorSet = true;
+    }
+
+    /**
+     * Returns the background color of actions.  If {@link #setActionsBackgroundColor(int)}
+     * is not called,  transparent is returned.
+     */
+    public final int getActionsBackgroundColor() {
+        return mActionsBackgroundColor;
+    }
+
+    /**
      * Returns true if the overview should be part of shared element transition.
      */
     public final boolean isParticipatingEntranceTransition() {
@@ -469,6 +481,24 @@
         return mInitialState;
     }
 
+    /**
+     * Set alignment mode of Description.
+     *
+     * @param alignmentMode  One of {@link #ALIGN_MODE_MIDDLE} or {@link #ALIGN_MODE_START}
+     */
+    public final void setAlignmentMode(int alignmentMode) {
+        mAlignmentMode = alignmentMode;
+    }
+
+    /**
+     * Returns alignment mode of Description.
+     *
+     * @return  One of {@link #ALIGN_MODE_MIDDLE} or {@link #ALIGN_MODE_START}.
+     */
+    public final int getAlignmentMode() {
+        return mAlignmentMode;
+    }
+
     @Override
     protected boolean isClippingChildren() {
         return true;
@@ -490,6 +520,11 @@
         return context.getResources().getColor(R.color.lb_default_brand_color);
     }
 
+    private int getDefaultActionsBackgroundColor(Context context) {
+        int c = getDefaultBackgroundColor(context);
+        return Color.argb(Color.alpha(c), Color.red(c) / 2, Color.green(c) / 2, Color.blue(c) / 2);
+    }
+
     /**
      * Get resource id to inflate the layout.  The layout must match {@link #STATE_HALF}
      */
@@ -510,6 +545,10 @@
         final int bgColor = mBackgroundColorSet ? mBackgroundColor :
                 getDefaultBackgroundColor(overview.getContext());
         overview.setBackgroundColor(bgColor);
+        final int actionBgColor = mActionsBackgroundColorSet ? mActionsBackgroundColor :
+                getDefaultActionsBackgroundColor(overview.getContext());
+        overview.findViewById(R.id.details_overview_actions_background)
+                .setBackgroundColor(actionBgColor);
         RoundedRectHelper.getInstance().setClipToRoundedOutline(overview, true);
 
         if (!getSelectEffectEnabled()) {
@@ -618,8 +657,18 @@
         View v = viewHolder.getLogoViewHolder().view;
         ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
                 v.getLayoutParams();
-        lp.setMarginStart(v.getResources().getDimensionPixelSize(R.dimen.lb_details_v2_left)
-                - lp.width);
+        switch (mAlignmentMode) {
+            case ALIGN_MODE_START:
+            default:
+                lp.setMarginStart(v.getResources().getDimensionPixelSize(
+                        R.dimen.lb_details_v2_logo_margin_start));
+                break;
+            case ALIGN_MODE_MIDDLE:
+                lp.setMarginStart(v.getResources().getDimensionPixelSize(R.dimen.lb_details_v2_left)
+                        - lp.width);
+                break;
+        }
+
         switch (viewHolder.getState()) {
         case STATE_FULL:
         default:
@@ -653,36 +702,57 @@
         boolean isBanner = viewHolder.getState() == STATE_SMALL;
         if (wasBanner != isBanner || logoChanged) {
             Resources res = viewHolder.view.getResources();
+
+            int frameMarginStart;
+            int descriptionMarginStart = 0;
+            int logoWidth = 0;
+            if (mDetailsOverviewLogoPresenter.isBoundToImage(viewHolder.getLogoViewHolder(),
+                    (DetailsOverviewRow) viewHolder.getRow())) {
+                logoWidth = viewHolder.getLogoViewHolder().view.getLayoutParams().width;
+            }
+            switch (mAlignmentMode) {
+                case ALIGN_MODE_START:
+                default:
+                    if (isBanner) {
+                        frameMarginStart = res.getDimensionPixelSize(
+                                R.dimen.lb_details_v2_logo_margin_start);
+                        descriptionMarginStart = logoWidth;
+                    } else {
+                        frameMarginStart = 0;
+                        descriptionMarginStart = logoWidth + res.getDimensionPixelSize(
+                                R.dimen.lb_details_v2_logo_margin_start);
+                    }
+                    break;
+                case ALIGN_MODE_MIDDLE:
+                    if (isBanner) {
+                        frameMarginStart = res.getDimensionPixelSize(R.dimen.lb_details_v2_left)
+                                - logoWidth;
+                        descriptionMarginStart = logoWidth;
+                    } else {
+                        frameMarginStart = 0;
+                        descriptionMarginStart = res.getDimensionPixelSize(
+                                R.dimen.lb_details_v2_left);
+                    }
+                    break;
+            }
             MarginLayoutParams lpFrame =
                     (MarginLayoutParams) viewHolder.getOverviewView().getLayoutParams();
-            int framePaddingStart;
-            if (isBanner) {
-                lpFrame.topMargin = 0;
-                if (mDetailsOverviewLogoPresenter.isBoundToImage(viewHolder.getLogoViewHolder(),
-                        (DetailsOverviewRow) viewHolder.getRow())) {
-                    View logoView = viewHolder.getLogoViewHolder().view;
-                    ViewGroup.MarginLayoutParams lpLogo =
-                            (ViewGroup.MarginLayoutParams) logoView.getLayoutParams();
-                    framePaddingStart = lpLogo.width;
-                } else {
-                    framePaddingStart = 0;
-                }
-                lpFrame.leftMargin = lpFrame.rightMargin =
-                        res.getDimensionPixelSize(R.dimen.lb_details_v2_left) - framePaddingStart;
-            } else {
-                lpFrame.topMargin = res.getDimensionPixelSize(R.dimen.lb_details_v2_blank_height);
-                framePaddingStart = res.getDimensionPixelSize(R.dimen.lb_details_v2_left);
-                lpFrame.leftMargin = lpFrame.rightMargin = 0;
-            }
+            lpFrame.topMargin = isBanner ? 0
+                    : res.getDimensionPixelSize(R.dimen.lb_details_v2_blank_height);
+            lpFrame.leftMargin = lpFrame.rightMargin = frameMarginStart;
             viewHolder.getOverviewView().setLayoutParams(lpFrame);
-            viewHolder.getOverviewView().setPaddingRelative(framePaddingStart,
-                    viewHolder.getOverviewView().getPaddingTop(),
-                    viewHolder.getOverviewView().getPaddingEnd(),
-                    viewHolder.getOverviewView().getPaddingBottom());
-            ViewGroup.LayoutParams lpActions = viewHolder.getActionsRow().getLayoutParams();
+
+            View description = viewHolder.getDetailsDescriptionFrame();
+            MarginLayoutParams lpDesc = (MarginLayoutParams) description.getLayoutParams();
+            lpDesc.setMarginStart(descriptionMarginStart);
+            description.setLayoutParams(lpDesc);
+
+            View action = viewHolder.getActionsRow();
+            MarginLayoutParams lpActions = (MarginLayoutParams) action.getLayoutParams();
+            lpActions.setMarginStart(descriptionMarginStart);
             lpActions.height =
                     isBanner ? 0 : res.getDimensionPixelSize(R.dimen.lb_details_v2_actions_height);
-            viewHolder.getActionsRow().setLayoutParams(lpActions);
+            action.setLayoutParams(lpActions);
         }
     }
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
index 7aca800..16624c7 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
@@ -429,7 +429,7 @@
     /**
      * Adds an item to the menu.  The other add methods funnel to this.
      */
-    private MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {
+    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {
         final int ordering = getOrdering(categoryOrder);
 
         final MenuItemImpl item = createNewMenuItem(group, id, categoryOrder, ordering, title,
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
index a2e9783..d38faf9 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
@@ -341,7 +341,7 @@
         return mSubMenu != null;
     }
 
-    void setSubMenu(SubMenuBuilder subMenu) {
+    public void setSubMenu(SubMenuBuilder subMenu) {
         mSubMenu = subMenu;
 
         subMenu.setHeaderTitle(getTitle());
