diff --git a/slices/core/src/main/java/androidx/app/slice/Slice.java b/slices/core/src/main/java/androidx/app/slice/Slice.java
index 8033bb7..ef0a05c 100644
--- a/slices/core/src/main/java/androidx/app/slice/Slice.java
+++ b/slices/core/src/main/java/androidx/app/slice/Slice.java
@@ -76,7 +76,7 @@
     @RestrictTo(Scope.LIBRARY)
     @StringDef({HINT_TITLE, HINT_LIST, HINT_LIST_ITEM, HINT_LARGE, HINT_ACTIONS, HINT_SELECTED,
             HINT_HORIZONTAL, HINT_NO_TINT, HINT_PARTIAL,
-            SliceHints.HINT_HIDDEN, SliceHints.SUBTYPE_TOGGLE})
+            SliceHints.HINT_SUMMARY, SliceHints.SUBTYPE_TOGGLE})
     public @interface SliceHint{ }
 
     private final SliceItem[] mItems;
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceItem.java b/slices/core/src/main/java/androidx/app/slice/SliceItem.java
index e4412d1..51517e0 100644
--- a/slices/core/src/main/java/androidx/app/slice/SliceItem.java
+++ b/slices/core/src/main/java/androidx/app/slice/SliceItem.java
@@ -269,7 +269,7 @@
      * @hide
      */
     @RestrictTo(Scope.LIBRARY)
-    public boolean hasAnyHints(@Slice.SliceHint String[] hints) {
+    public boolean hasAnyHints(@Slice.SliceHint String... hints) {
         if (hints == null) return false;
         for (String hint : hints) {
             if (ArrayUtils.contains(mHints, hint)) {
diff --git a/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java b/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java
index 96e2c3f..34acf93 100644
--- a/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java
+++ b/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java
@@ -39,12 +39,10 @@
      * Key to retrieve an extra added to an intent when a control is changed.
      */
     public static final String EXTRA_TOGGLE_STATE = "android.app.slice.extra.TOGGLE_STATE";
+
     /**
-     * Hint to indicate that this content should not be shown in the
-     * {@link androidx.app.slice.widget.SliceView#MODE_SMALL}
-     * and {@link androidx.app.slice.widget.SliceView#MODE_LARGE} modes of SliceView.
-     * This content may be used to populate
-     * the {@link androidx.app.slice.widget.SliceView#MODE_SHORTCUT} format of the slice.
+     * Hint indicating this content should be shown instead of the normal content when the slice
+     * is in small format
      */
-    public static final String HINT_HIDDEN = "hidden";
+    public static final String HINT_SUMMARY = "summary";
 }
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/GridView.java b/slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java
similarity index 98%
rename from slices/view/src/main/java/androidx/app/slice/widget/GridView.java
rename to slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java
index edccc2c..531928f 100644
--- a/slices/view/src/main/java/androidx/app/slice/widget/GridView.java
+++ b/slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java
@@ -62,7 +62,7 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 @TargetApi(24)
-public class GridView extends LinearLayout implements LargeSliceAdapter.SliceListView,
+public class GridRowView extends LinearLayout implements LargeSliceAdapter.SliceListView,
         View.OnClickListener, SliceView.SliceModeView {
 
     private static final String TAG = "GridView";
@@ -94,11 +94,11 @@
     private int mBigPictureHeight;
     private int mAllImagesHeight;
 
-    public GridView(Context context) {
+    public GridRowView(Context context) {
         this(context, null);
     }
 
-    public GridView(Context context, AttributeSet attrs) {
+    public GridRowView(Context context, AttributeSet attrs) {
         super(context, attrs);
         final Resources res = getContext().getResources();
         mIconSize = res.getDimensionPixelSize(R.dimen.abc_slice_icon_size);
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java b/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java
index eb03d91..f77e1d9 100644
--- a/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java
+++ b/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java
@@ -24,6 +24,8 @@
 import static android.app.slice.SliceItem.FORMAT_SLICE;
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 
+import static androidx.app.slice.core.SliceHints.HINT_SUMMARY;
+
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.support.annotation.RestrictTo;
@@ -101,7 +103,7 @@
             slice.getItems().forEach(new Consumer<SliceItem>() {
                 @Override
                 public void accept(SliceItem item) {
-                    if (item.hasHint(HINT_ACTIONS)) {
+                    if (item.hasAnyHints(HINT_ACTIONS, HINT_SUMMARY)) {
                         return;
                     } else if (FORMAT_COLOR.equals(item.getFormat())) {
                         return;
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/RowView.java b/slices/view/src/main/java/androidx/app/slice/widget/RowView.java
index b903e3b..c516021 100644
--- a/slices/view/src/main/java/androidx/app/slice/widget/RowView.java
+++ b/slices/view/src/main/java/androidx/app/slice/widget/RowView.java
@@ -29,6 +29,7 @@
 import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
 
 import static androidx.app.slice.core.SliceHints.EXTRA_TOGGLE_STATE;
+import static androidx.app.slice.core.SliceHints.HINT_SUMMARY;
 
 import android.annotation.TargetApi;
 import android.app.PendingIntent;
@@ -76,9 +77,8 @@
 
     private int mIconSize;
     private int mPadding;
-
-    // If this is being used as a small template we don't allow a start item, for list items we do.
-    private boolean mAllowStartItem;
+    private boolean mInSmallMode;
+    private boolean mIsHeader;
 
     private LinearLayout mStartContainer;
     private LinearLayout mContent;
@@ -125,7 +125,8 @@
      */
     @Override
     public void setSliceItem(SliceItem slice, boolean isHeader) {
-        mAllowStartItem = !isHeader; // Headers don't show start items
+        mIsHeader = isHeader;
+        mInSmallMode = false;
         populateViews(slice, slice);
     }
 
@@ -134,16 +135,21 @@
      */
     @Override
     public void setSlice(Slice slice) {
-        mAllowStartItem = false;
+        mInSmallMode = true;
         Slice.Builder sb = new Slice.Builder(slice.getUri());
         sb.addSubSlice(slice);
         Slice parentSlice = sb.build();
-        populateViews(parentSlice.getItems().get(0), getHeaderItem(slice));
+        populateViews(parentSlice.getItems().get(0), getSummaryItem(slice));
     }
 
-    private SliceItem getHeaderItem(Slice slice) {
+    private SliceItem getSummaryItem(Slice slice) {
         List<SliceItem> items = slice.getItems();
-        // See if a header is specified
+        // See if a summary is specified
+        SliceItem summary = SliceQuery.find(slice, FORMAT_SLICE, HINT_SUMMARY, null);
+        if (summary != null) {
+            return summary;
+        }
+        // First fallback is using a header
         SliceItem header = SliceQuery.find(slice, FORMAT_SLICE, null, HINT_LIST_ITEM);
         if (header != null) {
             return header;
@@ -199,7 +205,7 @@
         SliceItem subTitle = null;
         ArrayList<SliceItem> endItems = new ArrayList<>();
 
-        // If the first item is an action let's check if it should be used to populate the content
+        // If the first item is an action check if it should be used to populate the content
         // or if it should be in the start position.
         SliceItem firstSlice = items.size() > 0 ? items.get(0) : null;
         if (firstSlice != null && FORMAT_ACTION.equals(firstSlice.getFormat())) {
@@ -255,7 +261,7 @@
                         : -1;
         // Populate main part of the template
         if (startItem != null) {
-            if (mAllowStartItem) {
+            if (!mIsHeader) {
                 startItem = addItem(startItem, color, mStartContainer, 0 /* padding */)
                         ? startItem
                         : null;
@@ -263,8 +269,8 @@
                     endItems.remove(startItem);
                 }
             } else {
-                startItem = null;
                 endItems.add(0, startItem);
+                startItem = null;
             }
         }
         mStartContainer.setVisibility(startItem != null ? View.VISIBLE : View.GONE);
@@ -290,14 +296,10 @@
                 .filter(new Predicate<SliceItem>() {
                     @Override
                     public boolean test(SliceItem item) {
-                        if (item == null) {
-                            return false;
-                        }
                         return FORMAT_ACTION.equals(item.getFormat())
                                 && SliceQuery.hasHints(item.getSlice(), SliceHints.SUBTYPE_TOGGLE);
                     }
-                })
-                .findFirst().orElse(null);
+                }).findFirst().orElse(null);
         if (toggleItem != null) {
             if (addToggle(toggleItem, color)) {
                 mDivider.setVisibility(mRowAction != null ? View.VISIBLE : View.GONE);
@@ -310,9 +312,9 @@
         int itemCount = 0;
         for (int i = 0; i < endItems.size(); i++) {
             SliceItem item = endItems.get(i);
-            if (item == null) {
-                // do nothing
-            } else if (itemCount <= MAX_END_ITEMS) {
+            // Only show one type of format at the end of the slice, use whatever is first
+            if (itemCount <= MAX_END_ITEMS
+                    && item.getFormat().equals(endItems.get(0).getFormat())) {
                 if (FORMAT_ACTION.equals(item.getFormat())
                         && itemCount == 0
                         && SliceQuery.hasHints(item.getSlice(), SliceHints.SUBTYPE_TOGGLE)
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java b/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java
index 6a40898..b3a7f0c 100644
--- a/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java
+++ b/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java
@@ -260,7 +260,7 @@
             case MODE_SMALL:
                 // Check if it's horizontal
                 if (SliceQuery.hasHints(mCurrentSlice, HINT_HORIZONTAL)) {
-                    return new GridView(getContext());
+                    return new GridRowView(getContext());
                 } else {
                     return new RowView(getContext());
                 }
diff --git a/slices/view/src/main/res/layout/abc_slice_grid.xml b/slices/view/src/main/res/layout/abc_slice_grid.xml
index 7e264d0..890f77d 100644
--- a/slices/view/src/main/res/layout/abc_slice_grid.xml
+++ b/slices/view/src/main/res/layout/abc_slice_grid.xml
@@ -14,7 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<androidx.app.slice.widget.GridView
+<androidx.app.slice.widget.GridRowView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -22,4 +22,4 @@
     android:gravity="center_vertical"
     android:background="?android:attr/activatedBackgroundIndicator"
     android:clipToPadding="false">
-</androidx.app.slice.widget.GridView>
+</androidx.app.slice.widget.GridRowView>
