diff --git a/toonz/sources/include/toonz/studiopalette.h b/toonz/sources/include/toonz/studiopalette.h
index 90c2950..bbbf38c 100644
--- a/toonz/sources/include/toonz/studiopalette.h
+++ b/toonz/sources/include/toonz/studiopalette.h
@@ -4,7 +4,8 @@
 #define STUDIOPALETTE_INCLUDED
 
 #include "tpalette.h"
-//#include "tfilepath.h"
+#include "toonz/tproject.h"
+// #include "tfilepath.h"
 
 #undef DVAPI
 #undef DVVAR
@@ -20,7 +21,9 @@ class TPalette;
 class TImage;
 class TColorStyle;
 
-class DVAPI StudioPalette {  // singleton; methods can throw exceptions
+class DVAPI StudioPalette
+    : public TProjectManager::Listener {  // singleton; methods can throw
+                                          // exceptions
 public:
   class Listener {
   public:
@@ -110,6 +113,10 @@ public:
   void removeEntry(const std::wstring paletteId);
   void addEntry(const std::wstring paletteId, const TFilePath &path);
 
+  // TProjectManager::Listener
+  void onProjectSwitched() override;
+  void onProjectChanged() override;
+
 private:
   StudioPalette();
   TFilePath m_root;
diff --git a/toonz/sources/toonzlib/studiopalette.cpp b/toonz/sources/toonzlib/studiopalette.cpp
index b655f11..039bb16 100644
--- a/toonz/sources/toonzlib/studiopalette.cpp
+++ b/toonz/sources/toonzlib/studiopalette.cpp
@@ -180,18 +180,9 @@ StudioPalette::StudioPalette() {
     }
   }
 
-  // load [global id] - [path] table file
-  TFilePath rootFps[2] = {m_root, getProjectPalettesRoot()};
-  for (auto rootFp : rootFps) {
-    if (rootFp.isEmpty()) continue;
-    TFilePath tablePath = rootFp + pathTableFileName;
-    if (!TFileStatus(tablePath).doesExist()) continue;
-    QSettings tableSettings(QString::fromStdWString(tablePath.getWideString()),
-                            QSettings::IniFormat);
-    for (auto key : tableSettings.allKeys())
-      table_cached[key.toStdWString()] =
-          rootFp + TFilePath(tableSettings.value(key, "").toString());
-  }
+  TProjectManager *pm = TProjectManager::instance();
+  pm->addListener(this);
+  onProjectSwitched();
 }
 
 //-------------------------------------------------------------------
@@ -739,4 +730,24 @@ void StudioPalette::addEntry(const std::wstring paletteId,
     QString pathValue = (path - rootFp).getQString();
     tableSettings.setValue(QString::fromStdWString(paletteId), pathValue);
   }
-}
\ No newline at end of file
+}
+
+//-------------------------------------------------------------------
+
+void StudioPalette::onProjectSwitched() {
+  table_cached.clear();
+  // load [global id] - [path] table file
+  TFilePath rootFps[2] = {m_root, getProjectPalettesRoot()};
+  for (auto rootFp : rootFps) {
+    if (rootFp.isEmpty()) continue;
+    TFilePath tablePath = rootFp + pathTableFileName;
+    if (!TFileStatus(tablePath).doesExist()) continue;
+    QSettings tableSettings(QString::fromStdWString(tablePath.getWideString()),
+                            QSettings::IniFormat);
+    for (auto key : tableSettings.allKeys())
+      table_cached[key.toStdWString()] =
+          rootFp + TFilePath(tableSettings.value(key, "").toString());
+  }
+}
+
+void StudioPalette::onProjectChanged() { onProjectSwitched(); }
\ No newline at end of file