diff --git a/src/com/android/customization/model/theme/custom/CustomThemeManager.java b/src/com/android/customization/model/theme/custom/CustomThemeManager.java
index a3acba4..7b9b67c 100644
--- a/src/com/android/customization/model/theme/custom/CustomThemeManager.java
+++ b/src/com/android/customization/model/theme/custom/CustomThemeManager.java
@@ -16,7 +16,6 @@
 package com.android.customization.model.theme.custom;
 
 import android.content.Context;
-import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
 
@@ -24,9 +23,7 @@
 import com.android.customization.model.theme.ThemeBundle.PreviewInfo;
 import com.android.customization.model.theme.ThemeManager;
 import com.android.customization.model.theme.custom.CustomTheme.Builder;
-import com.android.wallpaper.R;
 
-import java.util.HashMap;
 import java.util.Map;
 
 public class CustomThemeManager implements CustomizationManager<ThemeComponentOption> {
@@ -48,11 +45,6 @@
 
     @Override
     public void apply(ThemeComponentOption option, @Nullable Callback callback) {
-//        option.getOverlayPackages().forEach((category, packageName) -> {
-//            if (!TextUtils.isEmpty(packageName)) {
-//                mBuilder.addOverlayPackage(category, packageName);
-//            }
-//        });
         option.buildStep(mBuilder);
         if (callback != null) {
             callback.onSuccess();
diff --git a/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java b/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java
index b050e41..2206ff4 100644
--- a/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java
+++ b/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java
@@ -52,7 +52,7 @@
  */
 public class ShapeOptionsProvider extends ThemeComponentOptionProvider<ShapeOption> {
 
-    private static final String TAG = "FontOptionsProvider";
+    private static final String TAG = "ShapeOptionsProvider";
     private final String[] mShapePreviewIconPackages;
     private int mThumbSize;
 
diff --git a/src/com/android/customization/picker/theme/ThemePreviewPage.java b/src/com/android/customization/picker/theme/ThemePreviewPage.java
index 73bd886..eaa169e 100644
--- a/src/com/android/customization/picker/theme/ThemePreviewPage.java
+++ b/src/com/android/customization/picker/theme/ThemePreviewPage.java
@@ -86,6 +86,7 @@
         private OnClickListener mEditClickListener;
         private final OnLayoutChangeListener mListener;
         private final int mCornerRadius;
+        private final ColorStateList mTintList;
 
         public ThemeCoverPage(Context context, String title, int accentColor, List<Drawable> icons,
                 Typeface headlineFont, int cornerRadius,
@@ -108,6 +109,20 @@
             mColorTileIconIds = colorTileIconIds;
             mShapeIconIds = shapeIconIds;
             mListener = wallpaperListener;
+            // Color QS icons:
+            int controlGreyColor = mRes.getColor(R.color.control_grey, null);
+            mTintList = new ColorStateList(
+                    new int[][]{
+                            new int[]{android.R.attr.state_selected},
+                            new int[]{android.R.attr.state_checked},
+                            new int[]{-android.R.attr.state_enabled},
+                    },
+                    new int[] {
+                            accentColor,
+                            accentColor,
+                            controlGreyColor
+                    }
+            );
         }
 
         @Override
@@ -121,25 +136,10 @@
                 card.requestLayout();
             }
 
-            // Color QS icons:
-            int controlGreyColor = mRes.getColor(R.color.control_grey, null);
-            ColorStateList tintList = new ColorStateList(
-                    new int[][]{
-                            new int[]{android.R.attr.state_selected},
-                            new int[]{android.R.attr.state_checked},
-                            new int[]{-android.R.attr.state_enabled},
-                    },
-                    new int[] {
-                            accentColor,
-                            accentColor,
-                            controlGreyColor
-                    }
-            );
-
             for (int i = 0; i < mColorButtonIds.length; i++) {
                 CompoundButton button = card.findViewById(mColorButtonIds[i]);
                 if (button != null) {
-                    button.setButtonTintList(tintList);
+                    button.setButtonTintList(mTintList);
                 }
             }
             for (int i = 0; i < 3 && i < mIcons.size(); i++) {
