diff --git a/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml b/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
index 71f1b7d..c15f135 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/AndroidManifest.xml
@@ -39,6 +39,9 @@
         <activity
             android:name=".DialogExampleActivity"
             android:theme="@style/Theme.Example.LeanbackDialog"></activity>
+        <activity
+            android:name=".DetailViewExampleActivity"
+            android:theme="@style/Theme.Example.LeanbackDetailView"></activity>
     </application>
 
 </manifest>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/CardExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/CardExampleFragment.java
index b47caf1..4ece60d 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/CardExampleFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/CardExampleFragment.java
@@ -70,7 +70,7 @@
 
     private void createRows() {
         String json = Utils
-                .inputStreamToString(getResources().openRawResource(R.raw.cards_card_example));
+                .inputStreamToString(getResources().openRawResource(R.raw.cards_example));
         CardRow[] rows = new Gson().fromJson(json, CardRow[].class);
         for (CardRow row : rows) {
             mRowsAdapter.add(createCardRow(row));
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleActivity.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleActivity.java
new file mode 100644
index 0000000..e301f58
--- /dev/null
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleActivity.java
@@ -0,0 +1,54 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.support.v17.leanback.app.DetailsFragment;
+import android.support.v17.leanback.app.GuidedStepFragment;
+import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
+import android.support.v17.leanback.supportleanbackshowcase.cards.presenters.CardPresenterSelector;
+import android.support.v17.leanback.widget.Action;
+import android.support.v17.leanback.widget.ArrayObjectAdapter;
+import android.support.v17.leanback.widget.ClassPresenterSelector;
+import android.support.v17.leanback.widget.DetailsOverviewRow;
+import android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter;
+import android.support.v17.leanback.widget.HeaderItem;
+import android.support.v17.leanback.widget.ListRow;
+import android.support.v17.leanback.widget.ListRowPresenter;
+import android.support.v17.leanback.widget.OnItemViewClickedListener;
+import android.support.v17.leanback.widget.OnItemViewSelectedListener;
+import android.support.v17.leanback.widget.Presenter;
+import android.support.v17.leanback.widget.Row;
+import android.support.v17.leanback.widget.RowPresenter;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.google.gson.Gson;
+
+/**
+ * Contains a {@link DetailsFragment} in order to display more details for a given card.
+ */
+public class DetailViewExampleActivity extends Activity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_detail_example);
+    }
+}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleFragment.java
index 10ceceb..5433587 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailViewExampleFragment.java
@@ -38,39 +38,46 @@
 import com.google.gson.Gson;
 
 /**
- * Displays a card with more details.
+ * Displays a card with more details using a {@link DetailsFragment}.
  */
 public class DetailViewExampleFragment extends DetailsFragment implements OnItemViewClickedListener,
         OnItemViewSelectedListener {
 
-    private static final String TAG = "DetailViewExampleFragment";
     private ArrayObjectAdapter mRowsAdapter;
 
-    @Override public void onActivityCreated(Bundle savedInstanceState) {
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         setupUi();
         setupEventListeners();
     }
 
     private void setupUi() {
+        // Load the card we want to display from a JSON resource. This JSON data could come from
+        // anywhere in a real world app, e.g. a server.
         String json = Utils
                 .inputStreamToString(getResources().openRawResource(R.raw.detail_example));
         DetailedCard data = new Gson().fromJson(json, DetailedCard.class);
+
+        // Setup fragment
         setTitle(getString(R.string.detail_view_title));
 
         FullWidthDetailsOverviewRowPresenter rowPresenter = new FullWidthDetailsOverviewRowPresenter(
                 new DetailsDescriptionPresenter(getActivity())) {
-            @Override protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {
+
+            @Override
+            protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {
+                // Customize Actionbar and Content by using custom colors.
                 RowPresenter.ViewHolder viewHolder = super.createRowViewHolder(parent);
 
-                // TODO: hahnr@ replace with API calls (they don't exist yet)
-                View actionsView = viewHolder.view.findViewById(R.id.details_overview_actions);
-                actionsView.setBackgroundColor(getActivity().getResources().getColor(
-                        R.color.detail_view_actionbar_background));
+                View actionsView = viewHolder.view.
+                        findViewById(R.id.details_overview_actions_background);
+                actionsView.setBackgroundColor(getActivity().getResources().
+                        getColor(R.color.detail_view_actionbar_background, null));
 
                 View detailsView = viewHolder.view.findViewById(R.id.details_frame);
                 detailsView.setBackgroundColor(
-                        getActivity().getResources().getColor(R.color.detail_view_background));
+                        getResources().getColor(R.color.detail_view_background, null));
                 return viewHolder;
             }
         };
@@ -112,26 +119,30 @@
     }
 
     private void setupEventListeners() {
-        // FIXME: leanbackteam@ The item & itemViewHolder parameters in onItemSelected are null in the DetailsOverviewRow as long as the user navigates top or down. After navigating left or right it will be the actual item rather than null.
         setOnItemViewSelectedListener(this);
         setOnItemViewClickedListener(this);
     }
 
-    @Override public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
-                                        RowPresenter.ViewHolder rowViewHolder, Row row) {
+    @Override
+    public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
+                              RowPresenter.ViewHolder rowViewHolder, Row row) {
         if (!(item instanceof Action)) return;
         Action action = (Action) item;
         if (action.getId() == 3) {
             setSelectedPosition(1);
-        } else Toast.makeText(getActivity(), getString(R.string.action_cicked), Toast.LENGTH_LONG)
+        } else {
+            Toast.makeText(getActivity(), getString(R.string.action_cicked), Toast.LENGTH_LONG)
                     .show();
+        }
     }
 
-    @Override public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
-                                         RowPresenter.ViewHolder rowViewHolder, Row row) {
+    @Override
+    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
+                               RowPresenter.ViewHolder rowViewHolder, Row row) {
         if (mRowsAdapter.indexOf(row) > 0) {
-            getView().setBackgroundColor(
-                    getResources().getColor(R.color.detail_view_related_background));
+            int backgroundColor = getResources().getColor(R.color.detail_view_related_background,
+                    null);
+            getView().setBackgroundColor(backgroundColor);
         } else {
             getView().setBackgroundResource(R.drawable.background_canyon);
         }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailsDescriptionPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailsDescriptionPresenter.java
index 678b3d5..ebb5c53 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailsDescriptionPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/DetailsDescriptionPresenter.java
@@ -36,7 +36,7 @@
     }
 
     @Override public ViewHolder onCreateViewHolder(ViewGroup parent) {
-        View view = LayoutInflater.from(mContext).inflate(R.layout.detail_view, null);
+        View view = LayoutInflater.from(mContext).inflate(R.layout.detail_view_content, null);
         return new ViewHolder(view);
     }
 
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/MainFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/MainFragment.java
index 3522d0b..6486a10 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/MainFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/MainFragment.java
@@ -178,12 +178,9 @@
                     break;
                 }
                 case 3: {
-                    updateBackgroundImage(
-                            getResources().getDrawable(R.drawable.background_canyon, null));
-                    Fragment fragment = new DetailViewExampleFragment();
-                    getFragmentManager().beginTransaction()
-                                        .replace(R.id.fragmentContainer, fragment)
-                                        .addToBackStack(null).commit();
+                    Intent intent = new Intent(getActivity().getBaseContext(),
+                            DetailViewExampleActivity.class);
+                    startActivity(intent);
                     break;
                 }
                 case 4: {
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/Movie.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/Movie.java
index 3fc9d69..4d590ae 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/Movie.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/Movie.java
@@ -1,3 +1,17 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
 import com.google.gson.annotations.SerializedName;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/ResourceCache.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/ResourceCache.java
index bee5cbb..c7c8589 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/ResourceCache.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/ResourceCache.java
@@ -1,3 +1,17 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
 import android.util.SparseArray;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/SettingsExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/SettingsExampleFragment.java
index fef91b1..44930f2 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/SettingsExampleFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/SettingsExampleFragment.java
@@ -1,3 +1,17 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
 import android.app.Fragment;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/VideoConsumptionExampleFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/VideoConsumptionExampleFragment.java
index 058f759..29e82a8 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/VideoConsumptionExampleFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/VideoConsumptionExampleFragment.java
@@ -34,13 +34,11 @@
         OnItemViewClickedListener, MediaPlayerGlue.OnMediaFileFinishedPlayingListener {
 
     private static final String URL = "http://techslides.com/demos/sample-videos/small.mp4";
-    private static final String TAG = "VideoConsumptionExampleFragment";
     private ArrayObjectAdapter mRowsAdapter;
     private MediaPlayerGlue mGlue;
 
     @Override public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onCreate");
 
         mGlue = new VideoMediaPlayerGlue(getActivity(), this) {
 
@@ -61,7 +59,6 @@
         SurfaceView surface = (SurfaceView) videoSurfaceFragment.getView();
         surface.getHolder().addCallback(new SurfaceHolder.Callback() {
             @Override public void surfaceCreated(SurfaceHolder holder) {
-                Log.d(TAG, "surfaceCreated(SurfaceHolder)");
                 mGlue.setDisplay(holder);
             }
 
@@ -71,7 +68,6 @@
             }
 
             @Override public void surfaceDestroyed(SurfaceHolder holder) {
-                Log.d(TAG, "surfaceDestroyed(SurfaceHolder)");
             }
         });
 
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample2ndStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample2ndStepFragment.java
index 4d54a6a..ea53288 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample2ndStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample2ndStepFragment.java
@@ -1,3 +1,17 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
 import android.graphics.Color;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample3rdStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample3rdStepFragment.java
index 4838301..fccf7c9 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample3rdStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample3rdStepFragment.java
@@ -1,7 +1,19 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
-import android.graphics.Color;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
@@ -9,11 +21,8 @@
 import android.support.v17.leanback.widget.GuidanceStylist;
 import android.support.v17.leanback.widget.GuidedAction;
 import android.support.v17.leanback.widget.GuidedActionsStylist;
-import android.util.Log;
 
 import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
 
 /**
  * TODO: JavaDoc
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample4thStepFragment.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample4thStepFragment.java
index 623de26..82a8a3d 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample4thStepFragment.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/WizardExample4thStepFragment.java
@@ -1,3 +1,17 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase;
 
 import android.os.Bundle;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java
new file mode 100644
index 0000000..311f885
--- /dev/null
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/CharacterCardView.java
@@ -0,0 +1,70 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase.cards;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.support.v17.leanback.supportleanbackshowcase.R;
+import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
+import android.support.v17.leanback.widget.BaseCardView;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class CharacterCardView extends BaseCardView {
+
+    public CharacterCardView(Context context) {
+        super(context);
+        LayoutInflater.from(getContext()).inflate(R.layout.character_card, this);
+        setOnFocusChangeListener(new View.OnFocusChangeListener() {
+            @Override
+            public void onFocusChange(View v, boolean hasFocus) {
+                ImageView mainImage = (ImageView) findViewById(R.id.main_image);
+                View container = findViewById(R.id.container);
+                if (hasFocus) {
+                    container.setBackgroundResource(R.drawable.character_focused);
+                    mainImage.setBackgroundResource(R.drawable.character_focused);
+                } else {
+                    container.setBackgroundResource(R.drawable.character_not_focused_padding);
+                    mainImage.setBackgroundResource(R.drawable.character_not_focused);
+                }
+            }
+        });
+        setFocusable(true);
+    }
+
+    public void updateUi(Card card) {
+        TextView primaryText = (TextView) findViewById(R.id.primary_text);
+        final ImageView imageView = (ImageView) findViewById(R.id.main_image);
+
+        primaryText.setText(card.getTitle());
+        if (card.getLocalImageResourceName() != null) {
+            int resourceId = card.getLocalImageResourceId(getContext());
+            Bitmap bitmap = BitmapFactory
+                    .decodeResource(getContext().getResources(), resourceId);
+            RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getContext().getResources(), bitmap);
+            drawable.setAntiAlias(true);
+            drawable.setCornerRadius(Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2.0f);
+            imageView.setImageDrawable(drawable);
+        }
+    }
+
+
+}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/TextCardView.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/TextCardView.java
new file mode 100644
index 0000000..4f661e0
--- /dev/null
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/TextCardView.java
@@ -0,0 +1,57 @@
+/*
+ * 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.v17.leanback.supportleanbackshowcase.cards;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.support.v17.leanback.supportleanbackshowcase.R;
+import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
+import android.support.v17.leanback.widget.BaseCardView;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class TextCardView extends BaseCardView {
+
+    public TextCardView(Context context) {
+        super(context);
+        LayoutInflater.from(getContext()).inflate(R.layout.text_icon_card, this);
+        setFocusable(true);
+    }
+
+    public void updateUi(Card card) {
+        TextView extraText = (TextView) findViewById(R.id.extra_text);
+        TextView primaryText = (TextView) findViewById(R.id.primary_text);
+        final ImageView imageView = (ImageView) findViewById(R.id.main_image);
+
+        extraText.setText(card.getExtraText());
+        primaryText.setText(card.getTitle());
+
+        // Create a rounded drawable.
+        int resourceId = card.getLocalImageResourceId(getContext());
+        Bitmap bitmap = BitmapFactory
+                .decodeResource(getContext().getResources(), resourceId);
+        RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getContext().getResources(), bitmap);
+        drawable.setAntiAlias(true);
+        drawable.setCornerRadius(
+                Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2.0f);
+        imageView.setImageDrawable(drawable);
+    }
+
+}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/models/Card.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/models/Card.java
index c0b79c7..79f9519 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/models/Card.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/models/Card.java
@@ -109,12 +109,13 @@
 
     public enum Type {
 
-        THIN,
-        THIN_RATING,
+        MOVIE_COMPLETE,
+        MOVIE,
+        MOVIE_BASE,
         ICON,
         SQUARE_BIG,
-        SQUARE,
-        WIDE_SHORT,
+        SINGLE_LINE,
+        GAME,
         SQUARE_SMALL,
         DEFAULT,
         SIDE_INFO,
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractCardPresenter.java
index 574968c..b81f119 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractCardPresenter.java
@@ -15,7 +15,6 @@
 
 import android.content.Context;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
 import android.support.v17.leanback.widget.BaseCardView;
 import android.support.v17.leanback.widget.Presenter;
 import android.view.ViewGroup;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractFooterCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractFooterCardPresenter.java
deleted file mode 100644
index adfda24..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/AbstractFooterCardPresenter.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.content.Context;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.Utils;
-import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.FooterLayoutCardView;
-import android.support.v17.leanback.widget.Presenter;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.squareup.picasso.Picasso;
-
-/**
- * A custom and abstract card {@link Presenter} which allows to create a card consisting of an image
- * and a custom footer. The footer is passed as a layout and will be inflated automatically.
- */
-public abstract class AbstractFooterCardPresenter extends
-        AbstractCardPresenter<FooterLayoutCardView> {
-
-    private static final String TAG = "AbstractFooterCardPresenter";
-    private final Drawable mLoadingErrorDrawable;
-    private final int mFooterLayoutd;
-    private final int mImageWidth;
-    private final int mImageHeight;
-
-    /**
-     * @param context Used to retrieve default values such as error drawables.
-     * @param footerLayoutId The layout which represents the footer.
-     * @param imageWidth The width of the card's main image. This width defines the card's width
-     * too.
-     * @param imageHeight The height of the card's main image. The card's height will be
-     * <code>imageHeight + footerHeight</code>
-     */
-    public AbstractFooterCardPresenter(Context context, int footerLayoutId, int imageWidth,
-                                       int imageHeight) {
-        super(context);
-        mFooterLayoutd = footerLayoutId;
-        mImageWidth = imageWidth;
-        mImageHeight = imageHeight;
-
-        // In case the image could not be fetched from the server we want to make sure something is show. In this case, a solid color.
-        int color = context.getResources().getColor(R.color.loading_error_card_background);
-        mLoadingErrorDrawable = new ColorDrawable(color);
-    }
-
-    @Override public final FooterLayoutCardView onCreateView() {
-        FooterLayoutCardView cardView = new FooterLayoutCardView(getContext(), mFooterLayoutd,
-                                                                 mImageWidth, mImageHeight);
-        onViewCreated(cardView);
-        return cardView;
-    }
-
-    @Override public void onBindViewHolder(Card card, FooterLayoutCardView cardView) {
-        // Load the card's image. This can be either an image on a remote server or a local one stored in the resources.
-        ImageView imageView = cardView.getImageView();
-        if (card.getImageURI() != null) {
-            Utils.loadImageFromUri(getContext(), card.getImageURI(), imageView, mImageWidth,
-                                   mImageHeight, true, mLoadingErrorDrawable);
-        } else if (card.getLocalImageResourceName() != null) {
-            int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
-            Picasso.with(getContext()).load(resourceId).resize(mImageWidth, mImageHeight)
-                   .centerCrop().into(imageView);
-        }
-    }
-
-    /**
-     * Override this method to react to creations of new card views.
-     *
-     * @param cardView The view which has been created.
-     * @see Presenter#onCreateViewHolder(ViewGroup)
-     */
-    public void onViewCreated(FooterLayoutCardView cardView) {
-        // Nothing to clean up. Override if necessary.
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CardPresenterSelector.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CardPresenterSelector.java
index 491fb2f..53d4620 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CardPresenterSelector.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CardPresenterSelector.java
@@ -25,9 +25,6 @@
 
 /**
  * This PresenterSelector will decide what Presenter to use depending on a given card's type.
- * <p/>
- * TODO: leanbackteam@ Discuss whether leanback's PresenterSelector should be renamed to
- * AbstractPresenterSelector.
  */
 public class CardPresenterSelector extends PresenterSelector {
 
@@ -38,68 +35,55 @@
         mContext = context;
     }
 
-    @Override public Presenter getPresenter(Object item) {
+    @Override
+    public Presenter getPresenter(Object item) {
         if (!(item instanceof Card)) throw new RuntimeException(
                 String.format("The PresenterSelector only supports data items of type '%s'",
-                              Card.class.getName()));
+                        Card.class.getName()));
         Card card = (Card) item;
         Presenter presenter = presenters.get(card.getType());
-        if (presenter == null) switch (card.getType()) {
-            case SQUARE:
-                presenter = new SingleLineCardPresenter(mContext);
-                break;
-            case THIN_RATING:
-                presenter = new MovieRatingCardPresenter(mContext);
-                break;
-            case SIDE_INFO:
-                presenter = new SideInfoCardPresenter(mContext);
-                break;
-            case SIDE_INFO_TEST_1:
-                presenter = new LauncherCardPresenter(mContext);
-                break;
-            case TEXT:
-                presenter = new TextCardPresenter(mContext);
-                break;
-            case ICON:
-                presenter = new IconCardPresenter(mContext);
-                break;
-            case CHARACTER:
-                presenter = new CharacterCardPresenter(mContext);
-                break;
-            case THIN: {
-                int width = (int) mContext.getResources()
-                                          .getDimension(R.dimen.thin_image_card_width);
-                int height = (int) mContext.getResources()
-                                           .getDimension(R.dimen.thin_image_card_height);
-                presenter = new ImageCardViewPresenter1(mContext, width, height);
+        if (presenter == null) {
+            switch (card.getType()) {
+                case SINGLE_LINE:
+                    presenter = new SingleLineCardPresenter(mContext);
+                    break;
+                case MOVIE:
+                case MOVIE_BASE:
+                case MOVIE_COMPLETE:
+                case SQUARE_BIG:
+                case GRID_SQUARE:
+                case GAME: {
+                    int style = R.style.MovieCardSimpleStyle;
+                    if (card.getType() == Card.Type.MOVIE_BASE) {
+                        style = R.style.MovieCardBasicStyle;
+                    } else if (card.getType() == Card.Type.MOVIE_COMPLETE) {
+                        style = R.style.MovieCardCompleteStyle;
+                    } else if (card.getType() == Card.Type.SQUARE_BIG) {
+                        style = R.style.SquareBigCard;
+                    } else if (card.getType() == Card.Type.GRID_SQUARE) {
+                        style = R.style.GridCardStyle;
+                    } else if (card.getType() == Card.Type.GAME) {
+                        style = R.style.GameCardStyle;
+                    }
+                    presenter = new ImageCardViewPresenter(mContext, style);
+                    break;
+                }
+                case SIDE_INFO:
+                    presenter = new SideInfoCardPresenter(mContext);
+                    break;
+                case TEXT:
+                    presenter = new TextCardPresenter(mContext);
+                    break;
+                case ICON:
+                    presenter = new IconCardPresenter(mContext);
+                    break;
+                case CHARACTER:
+                    presenter = new CharacterCardPresenter(mContext);
+                    break;
+                default:
+                    presenter = new ImageCardViewPresenter(mContext);
+                    break;
             }
-            break;
-            case SQUARE_BIG: {
-                int width = (int) mContext.getResources()
-                                          .getDimension(R.dimen.big_square_image_card_width);
-                int height = (int) mContext.getResources()
-                                           .getDimension(R.dimen.big_square_image_card_height);
-                presenter = new ImageCardViewPresenter(mContext, width, height);
-            }
-            break;
-            case GRID_SQUARE: {
-                int width = (int) mContext.getResources().getDimension(R.dimen.grid_card_width);
-                int height = (int) mContext.getResources().getDimension(R.dimen.grid_card_height);
-                presenter = new ImageCardViewPresenter(mContext, width, height);
-            }
-            break;
-            case WIDE_SHORT: {
-                presenter = new GameBannerCardPresenter(mContext);
-            }
-            break;
-            default: {
-                int width = (int) mContext.getResources()
-                                          .getDimension(R.dimen.default_image_card_width);
-                int height = (int) mContext.getResources()
-                                           .getDimension(R.dimen.default_image_card_height);
-                presenter = new ImageCardViewPresenter(mContext, width, height);
-            }
-            break;
         }
         presenters.put(card.getType(), presenter);
         return presenter;
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CharacterCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CharacterCardPresenter.java
index 5514674..60fa5b2 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CharacterCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/CharacterCardPresenter.java
@@ -15,73 +15,26 @@
 package android.support.v17.leanback.supportleanbackshowcase.cards.presenters;
 
 import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.support.v17.leanback.supportleanbackshowcase.Constants;
-import android.support.v17.leanback.supportleanbackshowcase.R;
+import android.support.v17.leanback.supportleanbackshowcase.cards.CharacterCardView;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
 
 /**
  * This Presenter is used to display the characters card row in the DetailView examples.
  */
-public class CharacterCardPresenter extends AbstractCardPresenter<BaseCardViewEx> {
-
-    private static final String TAG = "CharacterCardPresenter";
-    private final SparseArray<RoundedBitmapDrawable> mImageCache = new SparseArray<RoundedBitmapDrawable>();
+public class CharacterCardPresenter extends AbstractCardPresenter<CharacterCardView> {
 
     public CharacterCardPresenter(Context context) {
         super(context);
     }
 
-    @Override protected BaseCardViewEx onCreateView() {
-        final BaseCardViewEx cardView = new BaseCardViewEx(getContext());
-        LayoutInflater.from(getContext()).inflate(R.layout.character_card, cardView);
-        cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
-            @Override public void onFocusChange(View v, boolean hasFocus) {
-                if (Constants.LOCAL_LOGD) Log.d(TAG, "onFocusChanged(" + hasFocus + ")");
-                ImageView mainImage = cardView.getViewById(R.id.main_image);
-                View container = cardView.getViewById(R.id.container);
-                if (hasFocus) {
-                    container.setBackgroundResource(R.drawable.character_focused);
-                    mainImage.setBackgroundResource(R.drawable.character_focused);
-                } else {
-                    container.setBackgroundResource(R.drawable.character_not_focused_padding);
-                    mainImage.setBackgroundResource(R.drawable.character_not_focused);
-                }
-            }
-        });
-        return cardView;
+    @Override
+    protected CharacterCardView onCreateView() {
+        return new CharacterCardView(getContext());
     }
 
-    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onBindViewHolder");
-        TextView primaryText = cardView.getViewById(R.id.primary_text);
-        final ImageView imageView = cardView.getViewById(R.id.main_image);
-
-        primaryText.setText(card.getTitle());
-        if (card.getLocalImageResourceName() != null) {
-            int resourceId = card.getLocalImageResourceId(getContext());
-            RoundedBitmapDrawable drawable = mImageCache.get(resourceId, null);
-            if (drawable == null) {
-                Bitmap bitmap = BitmapFactory
-                        .decodeResource(getContext().getResources(), resourceId);
-                drawable = RoundedBitmapDrawableFactory.create(getContext().getResources(), bitmap);
-                drawable.setAntiAlias(true);
-                drawable.setCornerRadius(Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2.0f);
-                mImageCache.put(resourceId, drawable);
-            }
-            imageView.setImageDrawable(drawable);
-            if (Constants.LOCAL_LOGD) Log.d(TAG, "Round image created and set.");
-        }
+    @Override
+    public void onBindViewHolder(Card card, CharacterCardView cardView) {
+        cardView.updateUi(card);
     }
 
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/GameBannerCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/GameBannerCardPresenter.java
deleted file mode 100644
index d6e3d0e..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/GameBannerCardPresenter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.content.Context;
-import android.graphics.Color;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement;
-import android.widget.TextView;
-
-/**
- * This presenter will display the cards representing a gamer banners. It inherits from {@link
- * ImageCardViewPresenter} and will set a footer icon as well as a secondary text color.
- */
-public class GameBannerCardPresenter extends ImageCardViewPresenter {
-
-    private static final String TAG = "GameBannerCardPresenter";
-
-    public GameBannerCardPresenter(Context context) {
-        super(context,
-              (int) context.getResources().getDimension(R.dimen.wide_short_image_card_width),
-              (int) context.getResources().getDimension(R.dimen.wide_short_image_card_height));
-    }
-
-    @Override protected ImageCardViewReplacement onCreateView() {
-        ImageCardViewReplacement cardView = super.onCreateView();
-        TextView secondaryText = cardView.getSecondaryTextView();
-        secondaryText.setTextColor(Color.parseColor("#80c349"));
-        return cardView;
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/IconCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/IconCardPresenter.java
index 0154743..bf5be70 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/IconCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/IconCardPresenter.java
@@ -16,51 +16,36 @@
 
 import android.content.Context;
 import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
-import android.view.LayoutInflater;
+import android.support.v17.leanback.widget.ImageCardView;
 import android.view.View;
 import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.squareup.picasso.Picasso;
 
 /**
  * This Presenter will display cards which consists of a single icon which will be highlighted by a
  * surrounding circle when the card is focused. AndroidTV uses these cards for entering settings
  * menu.
  */
-public class IconCardPresenter extends AbstractCardPresenter<BaseCardViewEx> {
-
-    private static final String TAG = "IconCardPresenter";
+public class IconCardPresenter extends ImageCardViewPresenter {
 
     public IconCardPresenter(Context context) {
-        super(context);
+        super(context, R.style.IconCardStyle);
     }
 
-    @Override protected BaseCardViewEx onCreateView() {
-        final BaseCardViewEx cardView = new BaseCardViewEx(getContext());
-        LayoutInflater.from(getContext()).inflate(R.layout.icon_card, cardView);
-        LayoutInflater.from(getContext()).inflate(R.layout.icon_card_footer, cardView);
-        cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
-            @Override public void onFocusChange(View v, boolean hasFocus) {
-                if (hasFocus) cardView.getViewById(R.id.container)
-                                      .setBackgroundResource(R.drawable.icon_focused);
-                else cardView.getViewById(R.id.container).setBackground(null);
+    @Override
+    protected ImageCardView onCreateView() {
+        final ImageCardView imageCardView = super.onCreateView();
+        final ImageView image = imageCardView.getMainImageView();
+        imageCardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+            @Override
+            public void onFocusChange(View v, boolean hasFocus) {
+                if (hasFocus) {
+                    image.setBackgroundResource(R.drawable.icon_focused);
+                } else {
+                    image.setBackground(null);
+                }
             }
         });
-        return cardView;
-    }
-
-    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
-        TextView primaryText = cardView.getViewById(R.id.primary_text);
-        ImageView imageView = cardView.getViewById(R.id.main_image);
-
-        primaryText.setText(card.getTitle());
-        if (card.getLocalImageResourceName() != null) {
-            int resourceId = card.getLocalImageResourceId(getContext());
-            Picasso.with(getContext()).load(resourceId).into(imageView);
-        }
+        return imageCardView;
     }
 
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter.java
index f467dad..bf03753 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter.java
@@ -15,127 +15,45 @@
 package android.support.v17.leanback.supportleanbackshowcase.cards.presenters;
 
 import android.content.Context;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.support.v17.leanback.supportleanbackshowcase.Constants;
 import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.Utils;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement;
-import android.util.Log;
-import android.view.View;
-
-import com.squareup.picasso.Picasso;
-
-import java.util.HashMap;
+import android.support.v17.leanback.widget.ImageCardView;
 
 /**
- * A ImageCardViewPresenter is used to generate Views and bind Objects to them on demand. It
- * contains an {@link ImageCardViewReplacement}.
+ * A very basic {@link ImageCardView} {@link android.support.v17.leanback.widget.Presenter}.You can
+ * pass a custom style for the ImageCardView in the constructor. Use the default constructor to
+ * create a Presenter with a default ImageCardView style.
  */
-public class ImageCardViewPresenter extends AbstractCardPresenter<ImageCardViewReplacement> {
+public class ImageCardViewPresenter extends AbstractCardPresenter<ImageCardView> {
 
-    private static final String TAG = "ImageCardViewPresenter";
-    private final int mImageWidthInDp;
-    private final int mImageHeightDp;
-    private final Drawable mLoadingErrorDrawable;
-    private final HashMap<Object, Integer> mSelectedColors = new HashMap<Object, Integer>();
-    private int mDefaultFooterColor;
+    private final int mCardStyleResId;
 
-    public ImageCardViewPresenter(Context context, int imageWidthInDp, int imageHeightInDp) {
+    public ImageCardViewPresenter(Context context, int cardStyleResId) {
         super(context);
-        int color = context.getResources().getColor(R.color.loading_error_card_background);
-        mLoadingErrorDrawable = new ColorDrawable(color);
-
-        mDefaultFooterColor = context.getResources()
-                                     .getColor(R.color.default_card_footer_background_color);
-        mImageWidthInDp = imageWidthInDp;
-        mImageHeightDp = imageHeightInDp;
+        mCardStyleResId = cardStyleResId;
     }
 
-    @Override protected ImageCardViewReplacement onCreateView() {
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onCreateView()");
-        final ImageCardViewReplacement cardView = new ImageCardViewReplacement(getContext(),
-                                                                               mImageWidthInDp,
-                                                                               mImageHeightDp);
-        cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
-            @Override public void onFocusChange(View v, boolean hasFocus) {
-                udateCardUi(cardView);
-            }
-        });
-        return cardView;
+    public ImageCardViewPresenter(Context context) {
+        super(context);
+        mCardStyleResId = R.style.DefaultCardStyle;
     }
 
-    @Override public void onBindViewHolder(Card card, ImageCardViewReplacement cardView) {
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onBindViewHolder(Card,ImageCardViewReplacement)");
+    @Override
+    protected ImageCardView onCreateView() {
+        return new ImageCardView(getContext(), mCardStyleResId);
+    }
+
+    @Override
+    public void onBindViewHolder(Card card, final ImageCardView cardView) {
         cardView.setTag(card);
-
-        // Display description iff there is one.
-        if (card.getDescription() == null || card.getDescription().length() == 0) {
-            cardView.getSecondaryTextView().setVisibility(View.GONE);
-            cardView.getPrimaryTextView().setLines(2);
-            cardView.getPrimaryTextView().setMaxLines(2);
-        } else {
-            cardView.getPrimaryTextView().setLines(1);
-            cardView.getPrimaryTextView().setMaxLines(1);
-            cardView.getSecondaryTextView().setText(card.getDescription());
-            cardView.getSecondaryTextView().setVisibility(View.VISIBLE);
-        }
-
-        // Display title iff there is one.
-        if (card.getTitle() == null || card.getTitle().length() == 0) {
-            cardView.getPrimaryTextView().setVisibility(View.GONE);
-            cardView.getSecondaryTextView().setLines(2);
-            cardView.getSecondaryTextView().setMaxLines(2);
-        } else {
-            cardView.getSecondaryTextView().setLines(1);
-            cardView.getSecondaryTextView().setMaxLines(1);
-            cardView.getPrimaryTextView().setText(card.getTitle());
-            cardView.getPrimaryTextView().setVisibility(View.VISIBLE);
-        }
-        // Load main image from an URI or a local resource.
-        if (card.getImageURI() != null) {
-            Utils.loadImageFromUri(getContext(), card.getImageURI(), cardView.getImageView(),
-                                   mImageWidthInDp, mImageHeightDp, true, mLoadingErrorDrawable);
-        } else if (card.getLocalImageResourceName() != null) {
+        cardView.setTitleText(card.getTitle());
+        cardView.setContentText(card.getDescription());
+        if (card.getLocalImageResourceName() != null) {
             int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
-            Picasso.with(getContext()).load(resourceId).resize(mImageWidthInDp, mImageHeightDp)
-                   .centerCrop().into(cardView.getImageView());
+                    .getIdentifier(card.getLocalImageResourceName(),
+                            "drawable", getContext().getPackageName());
+            cardView.getMainImageView().setImageResource(resourceId);
         }
-
-        // Load footer icon from a local resource or hide it.
-        cardView.getViewById(R.id.container).setVisibility(View.VISIBLE);
-        if (card.getFooterLocalImageResourceName() != null) {
-            int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getFooterLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
-            Picasso.with(getContext()).load(resourceId).into(cardView.getIconView());
-            cardView.getIconView().setVisibility(View.VISIBLE);
-        } else {
-            if (card.getDescription() == null || card.getDescription().isEmpty()) {
-                cardView.getViewById(R.id.container).setVisibility(View.GONE);
-            }
-            cardView.getIconView().setVisibility(View.GONE);
-        }
-
-        // Update background color depending on the card's focused state.
-        udateCardUi(cardView);
     }
 
-    private void udateCardUi(ImageCardViewReplacement view) {
-        int color = mDefaultFooterColor;
-
-        if (view.getTag() != null) {
-            Card card = (Card) view.getTag();
-            if (card.getSelectedColor() != -1 && view.isSelected()) {
-                color = card.getSelectedColor();
-            }
-            if (card.getFooterColor() != -1) {
-                color = card.getFooterColor();
-            }
-        }
-        view.getInfoBoxView().setBackgroundColor(color);
-    }
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter1.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter1.java
deleted file mode 100644
index bd5712c..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/ImageCardViewPresenter1.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.Constants;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement;
-import android.support.v17.leanback.widget.ImageCardView;
-import android.util.Log;
-
-/**
- * A ImageCardViewPresenter is used to generate Views and bind Objects to them on demand. It
- * contains an {@link ImageCardViewReplacement}.
- */
-public class ImageCardViewPresenter1 extends AbstractCardPresenter<ImageCardView> {
-
-    private static final String TAG = "ImageCardViewPresenter";
-    private final int mImageWidthInDp;
-    private final int mImageHeightDp;
-
-    public ImageCardViewPresenter1(Context context, int imageWidthInDp, int imageHeightInDp) {
-        super(context);
-        mImageWidthInDp = imageWidthInDp;
-        mImageHeightDp = imageHeightInDp;
-    }
-
-    @Override protected ImageCardView onCreateView() {
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onCreateView()");
-
-        final ImageCardView cardView = new ImageCardView(getContext(), R.style.ImageCardViewColoredTextStyle);
-        cardView.setMainImageDimensions(mImageWidthInDp, mImageHeightDp);
-        cardView.setFocusable(true);
-        return cardView;
-    }
-
-    @Override public void onBindViewHolder(Card card, final ImageCardView cardView) {
-        if (Constants.LOCAL_LOGD) Log.d(TAG, "onBindViewHolder(Card,ImageCardViewReplacement)");
-        cardView.setTag(card);
-        cardView.setTitleText(card.getTitle());
-        //cardView.setContentText("Hello");
-        if (card.getLocalImageResourceName() != null) {
-            int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
-            cardView.getMainImageView().setImageResource(resourceId);
-        }
-
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/LauncherCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/LauncherCardPresenter.java
deleted file mode 100644
index 8942321..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/LauncherCardPresenter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.Utils;
-import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.widget.ImageView;
-
-import com.squareup.picasso.Picasso;
-
-/**
- * THis Presenter displays an expandable card which is used e.g. in the AndroidTV launcher. Once
- * such a card gets focused it expands and will show more details of the image.
- */
-public class LauncherCardPresenter extends ImageCardViewPresenter {
-
-    private static final String TAG = "LauncherCardPresenter";
-
-    public LauncherCardPresenter(Context context) {
-        super(context, 1 /* val > 0 required by Picasso */,
-              (int) context.getResources().getDimension(R.dimen.default_image_card_height));
-    }
-
-    @Override protected ImageCardViewReplacement onCreateView() {
-        ImageCardViewReplacement cardView = super.onCreateView();
-        final ImageView imageView = cardView.getImageView();
-        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-        cardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
-            @Override public void onFocusChange(View v, final boolean hasFocus) {
-                int expandedWidth = (int) getContext().getResources().getDimension(
-                        R.dimen.default_image_card_width);
-                int collapsedWidth = (int) getContext().getResources().getDimension(
-                        R.dimen.default_image_card_height);
-
-                expandedWidth = collapsedWidth;
-
-                ValueAnimator animator = new ValueAnimator();
-                animator.setInterpolator(new AccelerateDecelerateInterpolator());
-                animator.setIntValues(hasFocus ? collapsedWidth : expandedWidth,
-                                      hasFocus ? expandedWidth : collapsedWidth);
-                animator.setDuration(500);
-                animator.setStartDelay(0);
-                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                    @Override public void onAnimationUpdate(ValueAnimator animation) {
-                        ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
-                        layoutParams.width = (Integer) animation.getAnimatedValue();
-                        imageView.setLayoutParams(layoutParams);
-                    }
-                });
-                animator.start();
-            }
-        });
-        return cardView;
-    }
-
-    @Override public void onBindViewHolder(Card card, ImageCardViewReplacement cardView) {
-        super.onBindViewHolder(card, cardView);
-
-        ImageView imageView = cardView.getImageView();
-        cardView.setTag(card);
-        int width = (int) getContext().getResources()
-                                      .getDimension(R.dimen.default_image_card_height);
-        ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
-        layoutParams.width = Utils.convertDpToPixel(getContext(), width);
-        imageView.setLayoutParams(layoutParams);
-
-
-        if (card.getLocalImageResourceName() != null) {
-            int height = (int) getContext().getResources()
-                                           .getDimension(R.dimen.sidetext_image_card_height);
-            int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
-            Picasso.with(getContext()).load(resourceId).into(imageView);
-        }
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/MovieRatingCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/MovieRatingCardPresenter.java
deleted file mode 100644
index e3b2c7e..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/MovieRatingCardPresenter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.ImageCardViewReplacement;
-import android.view.Gravity;
-
-/**
- * This Presenter inherits from ImageCardViewPresenter and will set the secondary text alignment as
- * well as a footer icon to display the movie's rating.
- */
-public class MovieRatingCardPresenter extends ImageCardViewPresenter {
-
-    private static final String TAG = "MovieRatingCardPresenter";
-
-    public MovieRatingCardPresenter(Context context) {
-        super(context, (int) context.getResources().getDimension(R.dimen.thin_image_card_width),
-              (int) context.getResources().getDimension(R.dimen.thin_image_card_height));
-    }
-
-    @Override public void onBindViewHolder(Card card, ImageCardViewReplacement cardView) {
-        super.onBindViewHolder(card, cardView);
-        cardView.getPrimaryTextView().setLines(2);
-        cardView.getPrimaryTextView().setMaxLines(2);
-        cardView.getSecondaryTextView().setGravity(Gravity.RIGHT);
-    }
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SideInfoCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SideInfoCardPresenter.java
index e1e4dc6..dfe34e2 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SideInfoCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SideInfoCardPresenter.java
@@ -17,8 +17,6 @@
 import android.content.Context;
 import android.support.v17.leanback.supportleanbackshowcase.R;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.OnActivateStateChangeHandler;
 import android.support.v17.leanback.widget.BaseCardView;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -33,49 +31,55 @@
  * box, thus it will be hidden if the parent row is inactive. This behavior is unique to this card
  * and requires a special focus handler.
  */
-public class SideInfoCardPresenter extends AbstractCardPresenter<BaseCardViewEx> implements
-        OnActivateStateChangeHandler {
-
-    private static final String TAG = "SideInfoCardPresenter";
+public class SideInfoCardPresenter extends AbstractCardPresenter<BaseCardView> {
 
     public SideInfoCardPresenter(Context context) {
         super(context);
     }
 
-    @Override protected BaseCardViewEx onCreateView() {
-        BaseCardViewEx cardView = new BaseCardViewEx(getContext());
+    @Override
+    protected BaseCardView onCreateView() {
+        final BaseCardView cardView = new BaseCardView(getContext()) {
+
+            @Override
+            public void setActivated(boolean activated) {
+                super.setActivated(activated);
+                onActivateStateChanged(this, activated);
+            }
+        };
+        cardView.setFocusable(true);
         cardView.setCardType(BaseCardView.CARD_TYPE_MAIN_ONLY);
         cardView.addView(LayoutInflater.from(getContext()).inflate(R.layout.side_info_card, null));
-        cardView.setOnActivateStateChangeHandler(this);
         onActivateStateChanged(cardView, cardView.isActivated());
         return cardView;
     }
 
-    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
-        ImageView imageView = cardView.getViewById(R.id.main_image);
+    @Override
+    public void onBindViewHolder(Card card, BaseCardView cardView) {
+        ImageView imageView = (ImageView) cardView.findViewById(R.id.main_image);
         if (card.getLocalImageResourceName() != null) {
             int width = (int) getContext().getResources()
-                                          .getDimension(R.dimen.sidetext_image_card_width);
+                    .getDimension(R.dimen.sidetext_image_card_width);
             int height = (int) getContext().getResources()
-                                           .getDimension(R.dimen.sidetext_image_card_height);
+                    .getDimension(R.dimen.sidetext_image_card_height);
             int resourceId = getContext().getResources()
-                                         .getIdentifier(card.getLocalImageResourceName(),
-                                                        "drawable", getContext().getPackageName());
+                    .getIdentifier(card.getLocalImageResourceName(),
+                            "drawable", getContext().getPackageName());
             Picasso.with(getContext()).load(resourceId).resize(width, height).centerCrop()
-                   .into(imageView);
+                    .into(imageView);
         }
 
-        TextView primaryText = cardView.getViewById(R.id.primary_text);
+        TextView primaryText = (TextView) cardView.findViewById(R.id.primary_text);
         primaryText.setText(card.getTitle());
 
-        TextView secondaryText = cardView.getViewById(R.id.secondary_text);
+        TextView secondaryText = (TextView) cardView.findViewById(R.id.secondary_text);
         secondaryText.setText(card.getDescription());
 
-        TextView extraText = cardView.getViewById(R.id.extra_text);
+        TextView extraText = (TextView) cardView.findViewById(R.id.extra_text);
         extraText.setText(card.getExtraText());
     }
 
-    @Override public void onActivateStateChanged(final BaseCardViewEx cardView, boolean activated) {
-        cardView.getViewById(R.id.info).setVisibility(activated ? View.VISIBLE : View.GONE);
+    public void onActivateStateChanged(final BaseCardView cardView, boolean activated) {
+        cardView.findViewById(R.id.info).setVisibility(activated ? View.VISIBLE : View.GONE);
     }
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SingleLineCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SingleLineCardPresenter.java
index add3dfa..f48a3ca 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SingleLineCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/SingleLineCardPresenter.java
@@ -17,44 +17,22 @@
 import android.content.Context;
 import android.support.v17.leanback.supportleanbackshowcase.R;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
-import android.support.v17.leanback.widget.BaseCardView;
-import android.view.LayoutInflater;
-import android.widget.ImageView;
-import android.widget.TextView;
+import android.support.v17.leanback.widget.ImageCardView;
 
 /**
  * This Presenter will display a card which consists of a big image followed by a colored footer.
  * Not only the colored footer is unique to this card, but also it's footer (info) will be visible
  * even when its parent row is inactive.
  */
-public class SingleLineCardPresenter extends AbstractCardPresenter<BaseCardViewEx> {
-
-    private static final String TAG = "SingleLineCardPresenter";
+public class SingleLineCardPresenter extends ImageCardViewPresenter {
 
     public SingleLineCardPresenter(Context context) {
-        super(context);
+        super(context, R.style.SingleLineCardStyle);
     }
 
-    @Override protected BaseCardViewEx onCreateView() {
-        BaseCardViewEx cardView = new BaseCardViewEx(getContext());
-        cardView.setCardType(BaseCardView.CARD_TYPE_MAIN_ONLY);
-        cardView.addView(
-                LayoutInflater.from(getContext()).inflate(R.layout.single_line_card_footer, null));
-        return cardView;
-    }
-
-    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
-        TextView primaryText = cardView.getViewById(R.id.primary_text);
-        primaryText.setText(card.getTitle());
-
-        int resourceId = getContext().getResources()
-                                     .getIdentifier(card.getLocalImageResourceName(), "drawable",
-                                                    getContext().getPackageName());
-        ImageView mainImage = cardView.getViewById(R.id.main_image);
-        mainImage.setImageResource(resourceId);
-
-        cardView.getViewById(R.id.container).setBackgroundColor(card.getFooterColor());
+    @Override public void onBindViewHolder(Card card, ImageCardView cardView) {
+        super.onBindViewHolder(card, cardView);
+        cardView.setInfoAreaBackgroundColor(card.getFooterColor());
     }
 
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/StringPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/StringPresenter.java
deleted file mode 100644
index 93d42e0..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/StringPresenter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.presenters;
-
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.widget.Presenter;
-import android.util.Log;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-public class StringPresenter extends Presenter {
-
-    private static final String TAG = "StringPresenter";
-
-    public ViewHolder onCreateViewHolder(ViewGroup parent) {
-        Log.d(TAG, "onCreateViewHolder");
-        TextView tv = new TextView(parent.getContext());
-        tv.setFocusable(true);
-        tv.setFocusableInTouchMode(true);
-        tv.setBackground(parent.getContext().getResources().getDrawable(R.drawable.icon_focused));
-        return new ViewHolder(tv);
-    }
-
-    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
-        Log.d(TAG, "onBindViewHolder for " + item.toString());
-        ((TextView) viewHolder.view).setText(item.toString());
-    }
-
-    public void onUnbindViewHolder(ViewHolder viewHolder) {
-        Log.d(TAG, "onUnbindViewHolder");
-    }
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/TextCardPresenter.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/TextCardPresenter.java
index ad13be5..a688f44 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/TextCardPresenter.java
+++ b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/presenters/TextCardPresenter.java
@@ -15,74 +15,27 @@
 package android.support.v17.leanback.supportleanbackshowcase.cards.presenters;
 
 import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.support.v17.leanback.supportleanbackshowcase.R;
+import android.support.v17.leanback.supportleanbackshowcase.cards.TextCardView;
 import android.support.v17.leanback.supportleanbackshowcase.cards.models.Card;
-import android.support.v17.leanback.supportleanbackshowcase.cards.views.BaseCardViewEx;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import android.view.LayoutInflater;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.squareup.picasso.Picasso;
-import com.squareup.picasso.Target;
 
 /**
  * The Presenter displays a card consisting of text as a replacement for a big image. The footer is
  * also quite unique since it does contain two images rather than one or non.
  */
-public class TextCardPresenter extends AbstractCardPresenter<BaseCardViewEx> {
-
-    private static final String TAG = "AbstractFooterCardPresenter";
+public class TextCardPresenter extends AbstractCardPresenter<TextCardView> {
 
     public TextCardPresenter(Context context) {
         super(context);
     }
 
-    @Override protected BaseCardViewEx onCreateView() {
-        BaseCardViewEx cardView = new BaseCardViewEx(getContext());
-        LayoutInflater.from(getContext()).inflate(R.layout.text_icon_card, cardView);
-        LayoutInflater.from(getContext()).inflate(R.layout.text_icon_card_footer, cardView);
-        return cardView;
+    @Override
+    protected TextCardView onCreateView() {
+        return new TextCardView(getContext());
     }
 
-    @Override public void onBindViewHolder(Card card, BaseCardViewEx cardView) {
-        TextView extraText = cardView.getViewById(R.id.extra_text);
-        TextView primaryText = cardView.getViewById(R.id.primary_text);
-        ImageView footerIcon = cardView.getViewById(R.id.footer_icon);
-        final ImageView imageView = cardView.getViewById(R.id.main_image);
-
-        extraText.setText(card.getExtraText());
-        primaryText.setText(card.getTitle());
-        if (card.getLocalImageResourceName() != null) {
-            int width = (int) getContext().getResources()
-                                          .getDimension(R.dimen.sidetext_image_card_width);
-            int height = (int) getContext().getResources()
-                                           .getDimension(R.dimen.sidetext_image_card_height);
-            int resourceId = card.getLocalImageResourceId(getContext());
-            // TODO: hahnr@ load the image without Picasso
-            Picasso.with(getContext()).load(resourceId).resize(width, height).centerCrop()
-                   .into(new Target() {
-
-                       @Override
-                       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
-                           RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory
-                                   .create(getContext().getResources(), bitmap);
-                           drawable.setCornerRadius(
-                                   Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2.0f);
-                           imageView.setImageDrawable(drawable);
-                       }
-
-                       @Override public void onBitmapFailed(Drawable errorDrawable) {
-                       }
-
-                       @Override public void onPrepareLoad(Drawable placeHolderDrawable) {
-                       }
-                   });
-        }
-        footerIcon.setImageResource(R.drawable.stars_white);
+    @Override
+    public void onBindViewHolder(Card card, TextCardView cardView) {
+        cardView.updateUi(card);
     }
 
 }
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/BaseCardViewEx.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/BaseCardViewEx.java
deleted file mode 100644
index d11f4e8..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/BaseCardViewEx.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.views;
-
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.ResourceCache;
-import android.support.v17.leanback.widget.BaseCardView;
-import android.view.View;
-
-/**
- * This class is an extension for the BaseCardView which is focusable by default. This behavior has
- * to be merged into the original BaseCardView at some point in the development. After merging those
- * two classes, this one, the BaseCardViewEx, can be removed.
- */
-public class BaseCardViewEx extends BaseCardView {
-
-    protected Context mContext;
-    private ResourceCache mResourceCache = new ResourceCache();
-    private OnActivateStateChangeHandler mActivationCallback;
-
-
-    public BaseCardViewEx(Context context) {
-        super(context);
-        mContext = context;
-        setCardType(BaseCardView.CARD_TYPE_INFO_UNDER);
-
-        // TODO: @hahnr BaseCardView should be focusable by default. Merge!
-        setFocusable(true);
-        setFocusableInTouchMode(true);
-    }
-
-    @Override public void setActivated(boolean activated) {
-        super.setActivated(activated);
-        if (mActivationCallback != null)
-            mActivationCallback.onActivateStateChanged(this, activated);
-    }
-
-    public void setOnActivateStateChangeHandler(OnActivateStateChangeHandler handler) {
-        mActivationCallback = handler;
-    }
-
-    public <ViewType extends View> ViewType getViewById(int resId) {
-        return mResourceCache.getViewById(this, resId);
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/FooterLayoutCardView.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/FooterLayoutCardView.java
deleted file mode 100644
index 9e8af54..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/FooterLayoutCardView.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.views;
-
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.view.LayoutInflater;
-import android.widget.ImageView;
-
-/**
- * The FooterLayoutCardView creates a card view consisting of a big image followed by a footer
- * passed as a layout resource.
- */
-public class FooterLayoutCardView extends BaseCardViewEx {
-
-    private final ImageView mImageView;
-
-    /**
-     * The footer passed as a layout resource id will be inflated and added automatically to this
-     * view.
-     * <p/>
-     * <u>Note:</u> If you want your footer to expand/collapse when its parent row is
-     * activated/deactivated, you have to add the <code>layout_viewType="info"</code> property to
-     * your footers root view.
-     * <p/>
-     * <u>Example footer layout:</u>
-     * <pre>{@code <?xml version="1.0" encoding="utf-8"?>
-     * <FrameLayout
-     *     xmlns:android="http://schemas.android.com/apk/res/android"
-     *     xmlns:lb="http://schemas.android.com/apk/res-auto"
-     *     lb:layout_viewType="info"
-     *     android:layout_width="match_parent"
-     *     android:layout_height="match_parent">
-     *     <TextView
-     *         android:id="@+id/primary_text"
-     *         android:layout_width="match_parent"
-     *         android:layout_height="wrap_content"/>
-     * </FrameLayout>}</pre>
-     *
-     * @param context The current context.
-     * @param layoutId The footers layout resource id.
-     * @param imageWidthInDp The width of the ImageView used in this card. The card's width always
-     * equals the image's width.
-     * @param imageHeightInDp The height of the ImageView used in this card.
-     * @see android.support.v17.leanback.widget.BaseCardView.LayoutParams
-     */
-    public FooterLayoutCardView(Context context, int layoutId, int imageWidthInDp,
-                                int imageHeightInDp) {
-        super(context);
-        setCardType(CARD_TYPE_INFO_UNDER);
-        setBackgroundColor(context.getResources().getColor(R.color.default_card_background_color));
-
-        LayoutInflater.from(context).inflate(R.layout.image_card, this);
-        mImageView = getViewById(R.id.image_card_view_main_image);
-        LayoutInflater.from(context).inflate(layoutId, this);
-    }
-
-    public ImageView getImageView() {
-        return mImageView;
-    }
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/ImageCardViewReplacement.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/ImageCardViewReplacement.java
deleted file mode 100644
index c2a55fd..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/ImageCardViewReplacement.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.views;
-
-import android.content.Context;
-import android.support.v17.leanback.supportleanbackshowcase.R;
-import android.support.v17.leanback.widget.ImageCardView;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-/**
- * Leanback's {@link ImageCardView} will need some layout changes to fit all design requirements
- * from the specs. This class is a temporary implementation of the "new" {@link ImageCardView} and
- * will replace the existing one at some point in the development process. The original
- * implementation also requires some refactoring to be more flexible in order to be used for various
- * card types.
- * <p/>
- * Besides from the refactoring of the ImageCardView I suggest to change not only the BaseCardView
- * but also to add at least one additional CardView, the "FooterLayoutCardView". More about this
- * topic can be discussed later in the development process.
- */
-public class ImageCardViewReplacement extends FooterLayoutCardView {
-
-    public static final int PRIMARY_TEXTVIEW_ID = R.id.primary_text;
-    public static final int SECONDARY_TEXTVIEW_ID = R.id.secondary_text;
-    public static final int FOOTER_ICON_ID = R.id.footer_icon;
-    public static final int INFO_BOX_ID = R.id.info_field;
-
-    public ImageCardViewReplacement(Context context, int widthInDp, int heightInDp) {
-        super(context, R.layout.image_card_footer, widthInDp, heightInDp);
-        setBackgroundColor(context.getResources().getColor(R.color.default_card_background_color));
-    }
-
-    public TextView getPrimaryTextView() {
-        return getViewById(PRIMARY_TEXTVIEW_ID);
-    }
-
-    public TextView getSecondaryTextView() {
-        return getViewById(SECONDARY_TEXTVIEW_ID);
-    }
-
-    public ImageView getIconView() {
-        return getViewById(FOOTER_ICON_ID);
-    }
-
-    public View getInfoBoxView() {
-        return getViewById(INFO_BOX_ID);
-    }
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/OnActivateStateChangeHandler.java b/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/OnActivateStateChangeHandler.java
deleted file mode 100644
index e444ef2..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/java/android/support/v17/leanback/supportleanbackshowcase/cards/views/OnActivateStateChangeHandler.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * 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.v17.leanback.supportleanbackshowcase.cards.views;
-
-public interface OnActivateStateChangeHandler {
-
-    void onActivateStateChanged(BaseCardViewEx cardView, boolean activated);
-
-}
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_focused.xml
index eb12683..5c2570d 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_focused.xml
@@ -1,7 +1,26 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp"></padding>
+    <padding
+        android:bottom="4dp"
+        android:left="4dp"
+        android:right="4dp"
+        android:top="4dp"></padding>
     <solid android:color="#FFEEEEEE"></solid>
 </shape>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused.xml
index c2f724c..db4cf9c 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused_padding.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused_padding.xml
index 1140e80..8da3812 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused_padding.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/character_not_focused_padding.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/default_background.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/default_background.xml
index 07b0589..d9fa80b 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/default_background.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/default_background.xml
@@ -1,9 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
     <gradient
-            android:startColor="@color/background_gradient_start"
-            android:endColor="@color/background_gradient_end"
-            android:angle="-270" />
+        android:angle="-270"
+        android:endColor="@color/background_gradient_end"
+        android:startColor="@color/background_gradient_start"/>
 </shape>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused.xml
index 4eb4fa8..bab1cc6 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused.xml
@@ -1,7 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval">
+<!--
+     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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="oval">
     <solid android:color="#4DEEEEEE"></solid>
     <size
         android:width="96dp"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused_selector.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused_selector.xml
deleted file mode 100644
index 386aa7d..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_focused_selector.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:drawable="@drawable/icon_not_focused"></item>
-    <item android:drawable="@drawable/icon_focused" android:state_focused="true"></item>
-</selector>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_not_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_not_focused.xml
deleted file mode 100644
index 940efe7..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/icon_not_focused.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval">
-    <solid android:color="#00EEEEEE"></solid>
-</shape>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/overlay_black.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/overlay_black.xml
index 880f9f0..9fccc24 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/overlay_black.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/overlay_black.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="#E6000000"></solid>
 </shape>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background.xml
index 7be6ec4..0329874 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background.xml
@@ -1,6 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" android:drawable="@drawable/song_row_background_focused"></item>
+    <item android:drawable="@drawable/song_row_background_focused" android:state_focused="true"></item>
     <item>
         <color android:color="#384248"></color>
     </item>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background_focused.xml
index 2dd9d9f..152e7e6 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/song_row_background_focused.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item>
         <color android:color="#384248"></color>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_background_blackned.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_background_blackned.xml
index dca2934..bea8d66 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_background_blackned.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_background_blackned.xml
@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:drawable="@drawable/background_canyon"></item>
-    <item android:drawable="@drawable/overlay_black"></item>
+     <item android:drawable="@drawable/background_canyon"></item>
+     <item android:drawable="@drawable/overlay_black"></item>
 </layer-list>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background.xml
index 4893247..b4fd39e 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/wizard_important_action_item_background_focused" android:state_focused="true"></item>
     <item android:drawable="@drawable/wizard_important_action_item_background_not_focused"></item>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_focused.xml
index 4652b0b..d6a1023 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_focused.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_not_focused.xml b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_not_focused.xml
index 43cbeac..74cccd0 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_not_focused.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/drawable/wizard_important_action_item_background_not_focused.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_detail_example.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_detail_example.xml
new file mode 100644
index 0000000..90c69b6
--- /dev/null
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_detail_example.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+    <fragment
+        android:id="@+id/detailsFragment"
+        android:name="android.support.v17.leanback.supportleanbackshowcase.DetailViewExampleFragment"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"></fragment>
+</RelativeLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_main.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_main.xml
index b6cf93f..9d2eda6 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_main.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_main.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <RelativeLayout
     android:id="@+id/fragmentContainer"
     xmlns:android="http://schemas.android.com/apk/res/android"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_settings_example.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_settings_example.xml
index 080adb1..34c3b3a 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_settings_example.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/activity_settings_example.xml
@@ -1,8 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent">
-
     <fragment
         android:id="@+id/settingsFragment"
         android:name="android.support.v17.leanback.supportleanbackshowcase.SettingsExampleFragment"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
index 0343cb8..13f8584 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/character_card.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:lb="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent"
@@ -26,7 +41,7 @@
 
         <TextView
             android:id="@+id/primary_text"
-            style="@style/StandardCardPrimaryText"
+            style="@style/Widget.Leanback.ImageCardView.TitleStyle"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="7dp"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view_content.xml
similarity index 83%
rename from samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view.xml
rename to samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view_content.xml
index 3caaa2f..5140ed7 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/detail_view_content.xml
@@ -1,5 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card.xml
deleted file mode 100644
index c24c187..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:lb="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             lb:layout_viewType="main">
-
-    <LinearLayout
-        android:id="@+id/container"
-        android:layout_width="96dp"
-        android:layout_height="96dp"
-        android:background="@drawable/icon_focused_selector"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/main_image"
-            android:layout_width="64dp"
-            android:layout_height="64dp"
-            android:layout_marginLeft="16dp"
-            android:layout_marginTop="16dp"/>
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card_footer.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card_footer.xml
deleted file mode 100644
index b1cc798..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/icon_card_footer.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:lb="http://schemas.android.com/apk/res-auto"
-             lb:layout_viewType="info"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent">
-
-    <TextView
-        android:id="@+id/primary_text"
-        style="@style/StandardCardPrimaryText"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:fontFamily="sans-serif-condensed"
-        android:gravity="center"
-        android:lines="2"
-        android:maxLines="2"
-        />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card.xml
deleted file mode 100644
index 31c5636..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
-           xmlns:lb="http://schemas.android.com/apk/res-auto"
-           lb:layout_viewType="main"
-           android:layout_width="match_parent"
-           android:id="@+id/image_card_view_main_image"
-           android:layout_height="match_parent">
-
-</ImageView>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card_footer.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card_footer.xml
deleted file mode 100644
index d8f86e7..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/image_card_footer.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:lb="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             android:background="@color/default_card_footer_background_color"
-             lb:layout_viewType="info">
-
-    <RelativeLayout
-        android:id="@+id/info_field"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="7dp"
-        android:paddingLeft="11dp"
-        android:paddingRight="11dp"
-        android:paddingTop="7dp">
-
-        <TextView
-            android:id="@+id/primary_text"
-            style="@style/StandardCardPrimaryText"
-            android:layout_width="match_parent"
-            android:fontFamily="sans-serif-condensed"
-            android:maxLines="1"/>
-
-        <LinearLayout
-            android:id="@+id/container"
-            android:layout_width="match_parent"
-            android:layout_height="16sp"
-            android:layout_below="@+id/primary_text"
-            android:layout_gravity="center_vertical"
-            android:orientation="horizontal">
-
-            <ImageView
-                android:id="@+id/footer_icon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:layout_marginRight="8dp"
-                android:gravity="center_vertical"
-                android:src="@drawable/category_drama"/>
-
-            <TextView
-                android:id="@+id/secondary_text"
-                style="@style/StandardCardSecondaryText"
-                android:layout_gravity="center_vertical"
-                android:fontFamily="sans-serif-condensed"
-                android:maxLines="1"
-                android:text="Purchased"
-                />
-        </LinearLayout>
-    </RelativeLayout>
-</FrameLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_song.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_song.xml
index aadc105..b8d660d 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_song.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_song.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               xmlns:lb="http://schemas.android.com/apk/res-auto"
               android:layout_width="match_parent"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_track_list_header.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_track_list_header.xml
index 4156267..df16028 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_track_list_header.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/row_track_list_header.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 xmlns:lb="http://schemas.android.com/apk/res-auto"
                 android:layout_width="match_parent"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/side_info_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/side_info_card.xml
index 4676727..c9ec7ca 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/side_info_card.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/side_info_card.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:lb="http://schemas.android.com/apk/res-auto"
              android:layout_width="wrap_content"
@@ -29,14 +44,14 @@
 
             <TextView
                 android:id="@+id/primary_text"
-                style="@style/StandardCardPrimaryText"
+                style="@style/Widget.Leanback.ImageCardView.TitleStyle"
                 android:fontFamily="sans-serif-condensed"
                 android:maxLines="2"
                 android:textSize="16sp"/>
 
             <TextView
                 android:id="@+id/secondary_text"
-                style="@style/StandardCardSecondaryText"
+                style="@style/Widget.Leanback.ImageCardView.ContentStyle"
                 android:layout_marginTop="4dp"
                 android:fontFamily="sans-serif-condensed"
                 android:maxLines="1"
@@ -44,7 +59,7 @@
 
             <TextView
                 android:id="@+id/extra_text"
-                style="@style/StandardCardSecondaryText"
+                style="@style/Widget.Leanback.ImageCardView.ContentStyle"
                 android:layout_marginTop="6dp"
                 android:fontFamily="sans-serif-condensed"
                 android:maxLines="5"/>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/single_line_card_footer.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/single_line_card_footer.xml
deleted file mode 100644
index 84ca560..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/single_line_card_footer.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             android:background="@color/default_card_footer_background_color">
-
-    <LinearLayout
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_horizontal"
-        android:orientation="vertical"
-        android:paddingLeft="11dp"
-        android:paddingRight="11dp"
-        android:paddingTop="7dp">
-
-        <ImageView
-            android:id="@+id/main_image"
-            android:layout_width="@dimen/square_image_card_width"
-            android:layout_height="@dimen/square_image_card_height"/>
-
-        <TextView
-            android:id="@+id/primary_text"
-            style="@style/StandardCardPrimaryText"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:fontFamily="sans-serif-condensed"
-            android:gravity="center"
-            android:maxLines="2"
-            android:paddingBottom="7dp"
-            android:paddingTop="7dp"/>
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card.xml
index a11ac68..339549a 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card.xml
@@ -1,29 +1,79 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:lb="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             android:background="@color/default_card_footer_background_color"
-             lb:layout_viewType="main">
+<!--
+     Copyright (C) 2015 The Android Open Source Project
 
-    <LinearLayout
+     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.
+-->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:lb="http://schemas.android.com/apk/res-auto"
+       android:layout_width="wrap_content"
+       android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/extra_text"
+        style="@style/Widget.Leanback.ImageCardView.ContentStyle"
         android:layout_width="256dp"
         android:layout_height="wrap_content"
         android:background="@color/default_card_background_color"
-        android:orientation="vertical">
+        android:fontFamily="sans-serif-condensed"
+        android:lines="7"
+        android:maxLines="7"
+        android:paddingBottom="14dp"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp"
+        android:paddingTop="12dp"
+        lb:layout_viewType="main"/>
+
+    <android.support.v17.leanback.widget.NonOverlappingRelativeLayout
+        android:layout_width="256dp"
+        android:layout_height="36dp"
+        android:background="@color/default_card_footer_background_color"
+        android:gravity="left"
+        android:orientation="horizontal"
+        android:paddingBottom="7dp"
+        android:paddingLeft="12dp"
+        android:paddingRight="12dp"
+        android:paddingTop="7dp">
+
+        <ImageView
+            android:id="@+id/main_image"
+            android:layout_width="36dp"
+            android:layout_height="36dp"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center_vertical"
+            android:layout_marginRight="8dp"
+            android:adjustViewBounds="true"/>
 
         <TextView
-            android:id="@+id/extra_text"
-            style="@style/StandardCardSecondaryText"
+            android:id="@+id/primary_text"
+            style="@style/Widget.Leanback.ImageCardView.TitleStyle"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_gravity="left"
+            android:layout_toRightOf="@+id/main_image"
             android:fontFamily="sans-serif-condensed"
-            android:lines="7"
-            android:maxLines="7"
-            android:paddingBottom="14dp"
-            android:paddingLeft="15dp"
-            android:paddingRight="15dp"
-            android:paddingTop="12dp"/>
+            android:maxLines="1"
+            />
 
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+        <ImageView
+            android:id="@+id/footer_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="32dp"
+            android:layout_alignParentEnd="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center_vertical"
+            android:adjustViewBounds="true"
+            android:src="@drawable/stars_white"/>
+
+    </android.support.v17.leanback.widget.NonOverlappingRelativeLayout>
+</merge>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card_footer.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card_footer.xml
deleted file mode 100644
index 717c63a..0000000
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/text_icon_card_footer.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:lb="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             lb:layout_viewType="info">
-
-    <LinearLayout
-        android:layout_width="256dp"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/primary_text"
-        android:background="@color/default_card_footer_background_color"
-        android:gravity="left"
-        android:orientation="horizontal"
-        android:paddingBottom="7dp"
-        android:paddingLeft="12dp"
-        android:paddingRight="12dp"
-        android:paddingTop="7dp">
-
-        <ImageView
-            android:id="@+id/main_image"
-            android:layout_width="36dp"
-            android:layout_height="36dp"
-            android:layout_gravity="center_vertical"
-            android:layout_marginRight="8dp"
-            android:adjustViewBounds="true"/>
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="32dp"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/primary_text"
-                style="@style/StandardCardPrimaryText"
-                android:layout_width="match_parent"
-                android:layout_gravity="left"
-                android:layout_marginTop="1dp"
-                android:fontFamily="sans-serif-condensed"
-                android:maxLines="1"
-                />
-
-            <RelativeLayout
-                android:layout_width="wrap_content"
-                android:layout_height="16sp">
-
-                <ImageView
-                    android:id="@+id/footer_icon"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_centerVertical="true"/>
-
-            </RelativeLayout>
-        </LinearLayout>
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/layout/video_surface_fragment.xml b/samples/SupportLeanbackShowcase/app/src/main/res/layout/video_surface_fragment.xml
index 8a12869..ff5be69 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/layout/video_surface_fragment.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/layout/video_surface_fragment.xml
@@ -1,6 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
 <SurfaceView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
-
 </SurfaceView>
\ No newline at end of file
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_card_example.json b/samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_example.json
similarity index 87%
rename from samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_card_example.json
rename to samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_example.json
index 84184a2..8b52b02 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_card_example.json
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/raw/cards_example.json
@@ -3,55 +3,55 @@
     "title": "Standard",
     "cards": [
       {
-        "type": "THIN",
-        "title": "The Amazing Spuder-Man",
+        "type": "MOVIE",
+        "title": "The Amazing Spider-Man",
         "description": "$3.99",
         "localImageResource": "card_image_movie_01"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "American Psycho",
         "description": "$3.99",
         "localImageResource": "card_image_movie_02"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "Big Hero 6",
         "description": "$3.99",
         "localImageResource": "card_image_movie_03"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "Edge of Tomorrow",
         "description": "$3.99",
         "localImageResource": "card_image_movie_04"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "The Hobbit: The Desolation of Smaug",
         "description": "$3.99",
         "localImageResource": "card_image_movie_05"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "Interstellar",
         "description": "$3.99",
         "localImageResource": "card_image_movie_06"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "Jurassic Park",
         "description": "$3.99",
         "localImageResource": "card_image_movie_07"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "The Hunger Games: Mockingjay Part I",
         "description": "$3.99",
         "localImageResource": "card_image_movie_08"
       },
       {
-        "type": "THIN",
+        "type": "MOVIE",
         "title": "Planes",
         "description": "$3.99",
         "localImageResource": "card_image_movie_09"
@@ -62,47 +62,47 @@
     "title": "Two Line Title",
     "cards": [
       {
-        "type": "THIN_RATING",
-        "title": "The Amazing Spuder-Man",
+        "type": "MOVIE_BASE",
+        "title": "The Amazing Spider-Man",
         "localImageResource": "card_image_movie_01"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "American Psycho",
         "localImageResource": "card_image_movie_02"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "Big Hero 6",
         "localImageResource": "card_image_movie_03"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "Edge of Tomorrow",
         "localImageResource": "card_image_movie_04"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "The Hobbit: The Desolation of Smaug",
         "localImageResource": "card_image_movie_05"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "Interstellar",
         "localImageResource": "card_image_movie_06"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "Jurassic Park",
         "localImageResource": "card_image_movie_07"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "The Hunger Games: Mockingjay Part I",
         "localImageResource": "card_image_movie_08"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_BASE",
         "title": "Planes",
         "localImageResource": "card_image_movie_09"
       }
@@ -112,63 +112,63 @@
     "title": "Two Line Title + Icon",
     "cards": [
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "description": "$3.99",
         "title": "The Amazing Spider-Man",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_01"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "American Psycho",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_02"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "Big Hero 6",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_03"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "Edge of Tomorrow",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_04"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "The Hobbit: The Desolation of Smaug",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_05"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "Interstellar",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_06"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "Jurassic Park",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_07"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "description": "$3.99",
         "title": "The Hunger Games: Mockingjay Part I",
         "footerIconLocalImageResource": "stars_red",
         "localImageResource": "card_image_movie_08"
       },
       {
-        "type": "THIN_RATING",
+        "type": "MOVIE_COMPLETE",
         "title": "Planes",
         "description": "$3.99",
         "footerIconLocalImageResource": "stars_red",
@@ -288,35 +288,35 @@
     "title": "Wide (Games)",
     "cards": [
       {
-        "type": "WIDE_SHORT",
+        "type": "GAME",
         "title": "Angry Birds",
         "description": "Purchased",
         "localImageResource": "game_angry_bird_w",
         "footerIconLocalImageResource": "ic_installed"
       },
       {
-        "type": "WIDE_SHORT",
+        "type": "GAME",
         "title": "Badland",
         "description": "Purchased",
         "localImageResource": "game_badland_w",
         "footerIconLocalImageResource": "ic_installed"
       },
       {
-        "type": "WIDE_SHORT",
+        "type": "GAME",
         "title": "Leo's Fortune",
         "description": "Purchased",
         "localImageResource": "game_leos_fortune_w",
         "footerIconLocalImageResource": "ic_installed"
       },
       {
-        "type": "WIDE_SHORT",
+        "type": "GAME",
         "title": "Minion Rush",
         "description": "Purchased",
         "localImageResource": "game_minion_rush_w",
         "footerIconLocalImageResource": "ic_installed"
       },
       {
-        "type": "WIDE_SHORT",
+        "type": "GAME",
         "title": "Monument Valley",
         "description": "Purchased",
         "localImageResource": "game_monument_valley_w",
@@ -431,99 +431,46 @@
     ]
   },
   {
-    "title": "Launcher",
-    "cards": [
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_01"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_02"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_03"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_04"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_05"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_06"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_07"
-      },
-      {
-        "type": "SIDE_INFO_TEST_1",
-        "title": "Harry Potter",
-        "description": "$3.99",
-        "localImageResource": "coffee_and_tea_08"
-      }
-    ]
-  },
-  {
     "title": "Single Line",
     "cards": [
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Action & Adventure",
         "footerColor": "#dd004e",
         "localImageResource": "category_action"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Animation",
         "footerColor": "#c51162",
         "localImageResource": "category_animation"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Classics",
         "footerColor": "#9c27b0",
         "localImageResource": "category_classics"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Comedy",
         "footerColor": "#cf4900",
         "localImageResource": "category_comedy"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Crime",
         "footerColor": "#3f51b5",
         "localImageResource": "category_crime"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Documentary",
         "footerColor": "#02639b",
         "localImageResource": "category_documentary"
       },
       {
-        "type": "SQUARE",
+        "type": "SINGLE_LINE",
         "title": "Drama",
         "footerColor": "#2a56c6",
         "localImageResource": "category_drama"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/raw/detail_example.json b/samples/SupportLeanbackShowcase/app/src/main/res/raw/detail_example.json
index b01a2d4..b6d06e2 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/raw/detail_example.json
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/raw/detail_example.json
@@ -49,55 +49,55 @@
   ],
   "recommended": [
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "The Amazing Spuder-Man",
       "description": "$3.99",
       "localImageResource": "card_image_movie_01"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "American Psycho",
       "description": "$3.99",
       "localImageResource": "card_image_movie_02"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "Big Hero 6",
       "description": "$3.99",
       "localImageResource": "card_image_movie_03"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "Edge of Tomorrow",
       "description": "$3.99",
       "localImageResource": "card_image_movie_04"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "The Hobbit: The Desolation of Smaug",
       "description": "$3.99",
       "localImageResource": "card_image_movie_05"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "Interstellar",
       "description": "$3.99",
       "localImageResource": "card_image_movie_06"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "Jurassic Park",
       "description": "$3.99",
       "localImageResource": "card_image_movie_07"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "The Hunger Games: Mockingjay Part I",
       "description": "$3.99",
       "localImageResource": "card_image_movie_08"
     },
     {
-      "type": "THIN",
+      "type": "MOVIE",
       "title": "Planes",
       "description": "$3.99",
       "localImageResource": "card_image_movie_09"
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/values/colors.xml b/samples/SupportLeanbackShowcase/app/src/main/res/values/colors.xml
index 7984d7e..6305c41 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/values/colors.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/values/colors.xml
@@ -1,3 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
 <resources>
     <color name="background_gradient_start">#FFFFFF</color>
     <color name="background_gradient_end">#DDDDDD</color>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/values/dims.xml b/samples/SupportLeanbackShowcase/app/src/main/res/values/dims.xml
index d12d790..07c8027 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/values/dims.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/values/dims.xml
@@ -1,10 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
 <resources>
     <dimen name="default_image_card_width">224dp</dimen>
     <dimen name="default_image_card_height">126dp</dimen>
 
-    <dimen name="thin_image_card_width">120dp</dimen>
-    <dimen name="thin_image_card_height">172dp</dimen>
+    <dimen name="movie_image_card_width">120dp</dimen>
+    <dimen name="movie_image_card_height">172dp</dimen>
 
     <dimen name="icon_image_card_width">224dp</dimen>
     <dimen name="icon_image_card_height">109dp</dimen>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/values/strings.xml b/samples/SupportLeanbackShowcase/app/src/main/res/values/strings.xml
index fab46b0..4c2c673 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/values/strings.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/values/strings.xml
@@ -1,3 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
 <resources>
     <string name="app_name">ShowcaseApp</string>
     <string name="browse_title"><![CDATA[androidTV]]></string>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/values/styles.xml b/samples/SupportLeanbackShowcase/app/src/main/res/values/styles.xml
index 1ac8724..490f442 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/values/styles.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/values/styles.xml
@@ -1,31 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
 <resources>
 
     <style name="AppTheme" parent="@style/Theme.Leanback">
     </style>
 
-    <style name="StandardCardPrimaryText">
-        <item name="android:ellipsize">end</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:textColor">@color/card_primary_text</item>
-        <item name="android:lineSpacingMultiplier">1.09</item>
-    </style>
-
-    <style name="StandardCardSecondaryText">
-        <item name="android:ellipsize">end</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:textSize">12sp</item>
-        <item name="android:textColor">@color/card_secondary_text</item>
-        <item name="android:lineSpacingMultiplier">1.13</item>
-    </style>
-    <style name="ImageCardViewColoredTextStyle" parent="Widget.Leanback.ImageCardViewStyle">
-        <item name="titleStyle">@style/ImageCardViewColoredTitle</item>
-        <item name="infoAreaBackground">#F00</item>
-    </style>
-
     <style name="WizardActionsContainerStyle" parent="Widget.Leanback.GuidedActionsContainerStyle">
         <item name="android:background">#C03800</item>
     </style>
@@ -34,8 +26,137 @@
         <item name="android:background">#263238</item>
     </style>
 
-    <style name="ImageCardViewColoredTitle" parent="Widget.Leanback.ImageCardView.TitleStyle">
-        <item name="android:textColor">#F0F</item>
+    <!-- Various movie card styles. Used in cards example. -->
+    <style name="MovieCardBadgeStyle" parent="Widget.Leanback.ImageCardView.BadgeStyle">
+        <item name="android:src">@drawable/stars_red</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:scaleType">center</item>
+    </style>
+
+    <style name="MovieCardTitleTwoLineStyle" parent="Widget.Leanback.ImageCardView.TitleStyle">
+        <item name="android:maxLines">2</item>
+        <item name="android:minLines">2</item>
+    </style>
+
+    <style name="MovieCardContentGoneStyle" parent="Widget.Leanback.ImageCardView.ContentStyle">
+        <item name="android:visibility">invisible</item>
+    </style>
+
+    <style name="MovieCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">@dimen/movie_image_card_width</item>
+        <item name="android:layout_height">@dimen/movie_image_card_height</item>
+    </style>
+
+    <style name="MovieCardSimpleStyle" parent="Widget.Leanback.ImageCardViewStyle">
+        <item name="lbImageCardViewType">Title</item>
+        <item name="lbImageCardViewImageStyle">@style/MovieCardImageStyle</item>
+    </style>
+
+    <style name="MovieCardCompleteStyle" parent="MovieCardSimpleStyle">
+        <item name="lbImageCardViewTitleStyle">@style/MovieCardTitleTwoLineStyle</item>
+        <item name="lbImageCardViewBadgeStyle">@style/MovieCardBadgeStyle</item>
+        <item name="lbImageCardViewType">Title|Content|IconOnLeft</item>
+    </style>
+
+    <style name="MovieCardBasicStyle" parent="MovieCardCompleteStyle">
+        <item name="lbImageCardViewContentStyle">@style/MovieCardContentGoneStyle</item>
+    </style>
+
+    <!-- Squared Title/Content card style. Used in cards example. -->
+    <style name="SquareBigCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">@dimen/big_square_image_card_width</item>
+        <item name="android:layout_height">@dimen/big_square_image_card_height</item>
+    </style>
+
+    <style name="SquareBigCard" parent="Widget.Leanback.ImageCardViewStyle">
+        <item name="lbImageCardViewImageStyle">@style/SquareBigCardImageStyle</item>
+    </style>
+
+    <!-- Grid card style. Used by Grid example. -->
+    <style name="GridCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">@dimen/grid_card_width</item>
+        <item name="android:layout_height">@dimen/grid_card_height</item>
+    </style>
+
+    <style name="GridCardStyle" parent="Widget.Leanback.ImageCardViewStyle">
+        <item name="lbImageCardViewImageStyle">@style/GridCardImageStyle</item>
+    </style>
+
+    <!-- A default card style. Used in cards example. -->
+    <style name="DefaultCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">@dimen/default_image_card_width</item>
+        <item name="android:layout_height">@dimen/default_image_card_height</item>
+    </style>
+
+    <style name="DefaultCardStyle" parent="Widget.Leanback.ImageCardViewStyle">
+        <item name="lbImageCardViewImageStyle">@style/DefaultCardImageStyle</item>
+    </style>
+
+    <!-- Game card styles with custom Badge icon. Used in cards example. -->
+    <style name="GameCardContentStyle" parent="Widget.Leanback.ImageCardView.ContentStyle">
+        <item name="android:textColor">#80c349</item>
+    </style>
+
+    <style name="GameCardBadgeStyle" parent="Widget.Leanback.ImageCardView.BadgeStyle">
+        <item name="android:src">@drawable/ic_installed</item>
+    </style>
+
+    <style name="GameCardStyle" parent="DefaultCardStyle">
+        <item name="lbImageCardViewContentStyle">@style/GameCardContentStyle</item>
+        <item name="lbImageCardViewType">Title|Content|IconOnLeft</item>
+        <item name="lbImageCardViewBadgeStyle">@style/GameCardBadgeStyle</item>
+    </style>
+
+    <!-- Squared single line card with colored footer style. Used in cards example. -->
+    <style name="SingleLineCardTitleStyle" parent="Widget.Leanback.ImageCardView.TitleStyle">
+        <item name="android:textAlignment">center</item>
+        <item name="android:gravity">center</item>
+    </style>
+
+    <style name="SingleLineCardInfoAreaStyle" parent="Widget.Leanback.ImageCardView.InfoAreaStyle">
+        <item name="android:layout_width">@dimen/square_image_card_width</item>
+        <item name="layout_viewType">main</item>
+    </style>
+
+    <style name="SingleLineCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">@dimen/square_image_card_width</item>
+        <item name="android:layout_height">@dimen/square_image_card_height</item>
+    </style>
+
+    <style name="SingleLineCardStyle" parent="DefaultCardStyle">
+        <item name="lbImageCardViewTitleStyle">@style/SingleLineCardTitleStyle</item>
+        <item name="lbImageCardViewType">Title</item>
+        <item name="lbImageCardViewImageStyle">@style/SingleLineCardImageStyle</item>
+        <item name="lbImageCardViewInfoAreaStyle">@style/SingleLineCardInfoAreaStyle</item>
+    </style>
+
+    <!-- Icon card style with custom focus handler. Used in cards example. -->
+    <style name="IconCardImageStyle" parent="Widget.Leanback.ImageCardView.ImageStyle">
+        <item name="android:layout_width">96dp</item>
+        <item name="android:layout_height">96dp</item>
+        <item name="android:padding">16dp</item>
+    </style>
+
+    <style name="IconCardTitleStyle" parent="Widget.Leanback.ImageCardView.TitleStyle">
+        <item name="android:maxLines">2</item>
+        <item name="android:minLines">2</item>
+        <item name="android:gravity">center</item>
+    </style>
+
+    <style name="IconCardInfoAreaStyle" parent="Widget.Leanback.ImageCardView.InfoAreaStyle">
+        <item name="android:layout_width">96dp</item>
+        <item name="android:background">@null</item>
+        <item name="layout_viewType">main</item>
+    </style>
+
+    <style name="IconCardStyle" parent="DefaultCardStyle">
+        <item name="android:background">@null</item>
+        <item name="android:layout_width">96dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="lbImageCardViewTitleStyle">@style/IconCardTitleStyle</item>
+        <item name="lbImageCardViewType">Title</item>
+        <item name="lbImageCardViewImageStyle">@style/IconCardImageStyle</item>
+        <item name="lbImageCardViewInfoAreaStyle">@style/IconCardInfoAreaStyle</item>
     </style>
 
 </resources>
diff --git a/samples/SupportLeanbackShowcase/app/src/main/res/values/themes.xml b/samples/SupportLeanbackShowcase/app/src/main/res/values/themes.xml
index 38244aa..8d55515 100644
--- a/samples/SupportLeanbackShowcase/app/src/main/res/values/themes.xml
+++ b/samples/SupportLeanbackShowcase/app/src/main/res/values/themes.xml
@@ -1,3 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
 <resources>
 
     <style name="Theme.Example.Leanback" parent="Theme.Leanback">
@@ -11,7 +26,6 @@
         <item name="android:colorPrimary">@color/search_color</item>
         <item name="android:colorAccent">@color/accent</item>
         <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14</item>
-        <!-- <item name="imageCardViewStyle">@style/ImageCardViewColoredTextStyle</item> -->
     </style>
 
     <style name="Theme.Example.LeanbackWizard" parent="Theme.Leanback.GuidedStep">
@@ -29,4 +43,8 @@
         <item name="android:backgroundDimEnabled">true</item>
         <item name="android:colorPrimary">@color/settings_background</item>
     </style>
+
+    <style name="Theme.Example.LeanbackDetailView" parent="Theme.Leanback">
+        <item name="android:colorPrimary">@color/detail_view_actionbar_background</item>
+    </style>
 </resources>
