diff --git a/src/com/android/customization/model/theme/DefaultThemeProvider.java b/src/com/android/customization/model/theme/DefaultThemeProvider.java
index 87b5b4a..9fdb0c9 100644
--- a/src/com/android/customization/model/theme/DefaultThemeProvider.java
+++ b/src/com/android/customization/model/theme/DefaultThemeProvider.java
@@ -349,7 +349,7 @@
     }
 
     private void addThemeBundleToArray(JSONArray themesArray, ThemeBundle themeBundle) {
-        JSONObject jsonPackages = themeBundle.getJsonPackages();
+        JSONObject jsonPackages = themeBundle.getJsonPackages(false);
         try {
             jsonPackages.put(THEME_TITLE_FIELD, themeBundle.getTitle());
             if (themeBundle instanceof CustomTheme) {
diff --git a/src/com/android/customization/model/theme/ThemeBundle.java b/src/com/android/customization/model/theme/ThemeBundle.java
index b3258de..2fc5d90 100644
--- a/src/com/android/customization/model/theme/ThemeBundle.java
+++ b/src/com/android/customization/model/theme/ThemeBundle.java
@@ -31,7 +31,9 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.ShapeDrawable;
 import android.graphics.drawable.shapes.PathShape;
+import android.icu.text.SimpleDateFormat;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -52,14 +54,17 @@
 import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
 
+import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -70,7 +75,10 @@
  */
 public class ThemeBundle implements CustomizationOption<ThemeBundle> {
 
+    private static final String TAG = "ThemeBundle";
     private final static String EMPTY_JSON = "{}";
+    private final static String TIMESTAMP_FIELD = "_applied_timestamp";
+
     private final String mTitle;
     private final PreviewInfo mPreviewInfo;
     private final boolean mIsDefault;
@@ -121,10 +129,10 @@
     @Override
     public boolean isActive(CustomizationManager<ThemeBundle> manager) {
         ThemeManager themeManager = (ThemeManager) manager;
-        String serializedOverlays = themeManager.getStoredOverlays();
 
         if (mIsDefault) {
-            return TextUtils.isEmpty(serializedOverlays);
+            String serializedOverlays = themeManager.getStoredOverlays();
+            return TextUtils.isEmpty(serializedOverlays) || EMPTY_JSON.equals(serializedOverlays);
         } else {
             Map<String, String> currentOverlays = themeManager.getCurrentOverlays();
             return mPackagesByCategory.equals(currentOverlays);
@@ -197,19 +205,27 @@
     }
 
     public String getSerializedPackages() {
-        if (isDefault()) {
-            return "";
-        }
-        return getJsonPackages().toString();
+        return getJsonPackages(false).toString();
     }
 
-    JSONObject getJsonPackages() {
+    public String getSerializedPackagesWithTimestamp() {
+        return getJsonPackages(true).toString();
+    }
+
+    JSONObject getJsonPackages(boolean insertTimestamp) {
         if (isDefault()) {
             return new JSONObject();
         }
         JSONObject json = new JSONObject(mPackagesByCategory);
         // Remove items with null values to avoid deserialization issues.
         removeNullValues(json);
+        if (insertTimestamp) {
+            try {
+                json.put(TIMESTAMP_FIELD, System.currentTimeMillis());
+            } catch (JSONException e) {
+                Log.e(TAG, "Couldn't add timestamp to serialized themebundle");
+            }
+        }
         return json;
     }
 
diff --git a/src/com/android/customization/model/theme/ThemeManager.java b/src/com/android/customization/model/theme/ThemeManager.java
index 5fddc57..e4981b0 100644
--- a/src/com/android/customization/model/theme/ThemeManager.java
+++ b/src/com/android/customization/model/theme/ThemeManager.java
@@ -153,7 +153,7 @@
 
     private void applyOverlays(ThemeBundle theme, Callback callback) {
         boolean allApplied = Settings.Secure.putString(mActivity.getContentResolver(),
-                ResourceConstants.THEME_SETTING, theme.getSerializedPackages());
+                ResourceConstants.THEME_SETTING, theme.getSerializedPackagesWithTimestamp());
         if (theme instanceof CustomTheme) {
             storeCustomTheme((CustomTheme) theme);
         }
