diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java
index ee33f3a..a36f444 100644
--- a/src/com/android/launcher3/AppsCustomizePagedView.java
+++ b/src/com/android/launcher3/AppsCustomizePagedView.java
@@ -941,8 +941,12 @@
     }
 
     public void setContentType(ContentType type) {
+        int page = getCurrentPage();
+        if (mContentType != type) {
+            page = 0;
+        }
         mContentType = type;
-        invalidatePageData(0, true);
+        invalidatePageData(page, true);
     }
 
     public ContentType getContentType() {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 9777ea9..ad7d238 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1451,7 +1451,6 @@
                 // Reset AllApps to its initial state only if we are not in the middle of
                 // processing a multi-step drop
                 if (mAppsCustomizeTabHost != null && mPendingAddInfo.container == ItemInfo.NO_ID) {
-                    mAppsCustomizeTabHost.reset();
                     showWorkspaceAndExitOverviewMode(false);
                 }
             } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
@@ -1670,8 +1669,8 @@
                         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                     }
 
-                    // Reset AllApps to its initial state
-                    if (!alreadyOnHome && mAppsCustomizeTabHost != null) {
+                    // Reset the apps customize page
+                    if (mAppsCustomizeTabHost != null) {
                         mAppsCustomizeTabHost.reset();
                     }
                 }
diff --git a/src/com/android/launcher3/PageIndicator.java b/src/com/android/launcher3/PageIndicator.java
index a9016d5..52c8447 100644
--- a/src/com/android/launcher3/PageIndicator.java
+++ b/src/com/android/launcher3/PageIndicator.java
@@ -49,6 +49,20 @@
             new ArrayList<PageIndicatorMarker>();
     private int mActiveMarkerIndex;
 
+    public static class PageMarkerResources {
+        int activeId;
+        int inactiveId;
+
+        public PageMarkerResources() {
+            activeId = R.drawable.ic_pageindicator_current;
+            inactiveId = R.drawable.ic_pageindicator_default;
+        }
+        public PageMarkerResources(int aId, int iaId) {
+            activeId = aId;
+            inactiveId = iaId;
+        }
+    }
+
     public PageIndicator(Context context) {
         this(context, null);
     }
@@ -155,17 +169,20 @@
         mWindowRange[1] = windowEnd;
     }
 
-    void addMarker(int index, int layoutId, boolean allowAnimations) {
+    void addMarker(int index, PageMarkerResources marker, boolean allowAnimations) {
         index = Math.max(0, Math.min(index, mMarkers.size()));
 
-        PageIndicatorMarker marker =
-            (PageIndicatorMarker) mLayoutInflater.inflate(layoutId, this, false);
-        mMarkers.add(index, marker);
+        PageIndicatorMarker m =
+            (PageIndicatorMarker) mLayoutInflater.inflate(R.layout.page_indicator_marker,
+                    this, false);
+        m.setMarkerDrawables(marker.activeId, marker.inactiveId);
+
+        mMarkers.add(index, m);
         offsetWindowCenterTo(mActiveMarkerIndex, allowAnimations);
     }
-    void addMarkers(ArrayList<Integer> layoutIds, boolean allowAnimations) {
-        for (int i = 0; i < layoutIds.size(); ++i) {
-            addMarker(Integer.MAX_VALUE, layoutIds.get(i), allowAnimations);
+    void addMarkers(ArrayList<PageMarkerResources> markers, boolean allowAnimations) {
+        for (int i = 0; i < markers.size(); ++i) {
+            addMarker(Integer.MAX_VALUE, markers.get(i), allowAnimations);
         }
     }
 
diff --git a/src/com/android/launcher3/PageIndicatorMarker.java b/src/com/android/launcher3/PageIndicatorMarker.java
index 1ad0abb..b1025d6 100644
--- a/src/com/android/launcher3/PageIndicatorMarker.java
+++ b/src/com/android/launcher3/PageIndicatorMarker.java
@@ -19,10 +19,12 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.LayoutTransition;
 import android.content.Context;
+import android.content.res.Resources;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 import android.widget.FrameLayout;
 import com.android.launcher3.R;
 
@@ -32,8 +34,8 @@
 
     private static final int MARKER_FADE_DURATION = 175;
 
-    private View mActiveMarker;
-    private View mInactiveMarker;
+    private ImageView mActiveMarker;
+    private ImageView mInactiveMarker;
     private boolean mIsActive = false;
 
     public PageIndicatorMarker(Context context) {
@@ -49,8 +51,14 @@
     }
 
     protected void onFinishInflate() {
-        mActiveMarker = findViewById(R.id.active);
-        mInactiveMarker = findViewById(R.id.inactive);
+        mActiveMarker = (ImageView) findViewById(R.id.active);
+        mInactiveMarker = (ImageView) findViewById(R.id.inactive);
+    }
+
+    void setMarkerDrawables(int activeResId, int inactiveResId) {
+        Resources r = getResources();
+        mActiveMarker.setImageDrawable(r.getDrawable(activeResId));
+        mInactiveMarker.setImageDrawable(r.getDrawable(inactiveResId));
     }
 
     void activate(boolean immediate) {
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index d8fc983..763dfa1 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -337,7 +337,8 @@
             mPageIndicator = (PageIndicator) parent.findViewById(mPageIndicatorViewId);
             mPageIndicator.removeAllMarkers(mAllowPagedViewAnimations);
 
-            ArrayList<Integer> markers = new ArrayList<Integer>();
+            ArrayList<PageIndicator.PageMarkerResources> markers =
+                    new ArrayList<PageIndicator.PageMarkerResources>();
             for (int i = 0; i < getChildCount(); ++i) {
                 markers.add(getPageIndicatorMarker(i));
             }
@@ -424,8 +425,8 @@
     PageIndicator getPageIndicator() {
         return mPageIndicator;
     }
-    protected int getPageIndicatorMarker(int pageIndex) {
-        return R.layout.page_indicator_marker;
+    protected PageIndicator.PageMarkerResources getPageIndicatorMarker(int pageIndex) {
+        return new PageIndicator.PageMarkerResources();
     }
 
     public void setPageSwitchListener(PageSwitchListener pageSwitchListener) {
@@ -969,7 +970,8 @@
         // add/remove pages
         if (mPageIndicator != null && !isReordering(false)) {
             int pageIndex = indexOfChild(child);
-            mPageIndicator.addMarker(pageIndex, getPageIndicatorMarker(pageIndex),
+            mPageIndicator.addMarker(pageIndex,
+                    getPageIndicatorMarker(pageIndex),
                     mAllowPagedViewAnimations);
         }
 
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index c0b2ae3..2f58571 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -4221,10 +4221,16 @@
     }
 
     @Override
-    protected int getPageIndicatorMarker(int pageIndex) {
-        if (getScreenIdForPageIndex(pageIndex) == CUSTOM_CONTENT_SCREEN_ID) {
-            return R.layout.custom_content_page_indicator_marker;
+    protected PageIndicator.PageMarkerResources getPageIndicatorMarker(int pageIndex) {
+        long screenId = getScreenIdForPageIndex(pageIndex);
+        if (screenId == EXTRA_EMPTY_SCREEN_ID) {
+            int count = mScreenOrder.size() - (hasCustomContent() ? 1 : 0);
+            if (count > 1) {
+                return new PageIndicator.PageMarkerResources(R.drawable.ic_pageindicator_add,
+                        R.drawable.ic_pageindicator_add);
+            }
         }
+
         return super.getPageIndicatorMarker(pageIndex);
     }
 
