diff --git a/modules/layered_tile_map/editor/layered_tile_map_layer_editor.cpp b/modules/layered_tile_map/editor/layered_tile_map_layer_editor.cpp
index eb8dc8d69..2664bfb2a 100644
--- a/modules/layered_tile_map/editor/layered_tile_map_layer_editor.cpp
+++ b/modules/layered_tile_map/editor/layered_tile_map_layer_editor.cpp
@@ -47,6 +47,8 @@
 #include "scene/gui/popup_menu.h"
 #include "scene/gui/split_container.h"
 
+#include "theme_changed_notifier.h"
+
 #include "core/containers/hash_set.h"
 #include "core/input/input.h"
 #include "core/math/geometry.h"
@@ -2451,13 +2453,18 @@ LayeredTileMapLayerEditorTilesPlugin::LayeredTileMapLayerEditorTilesPlugin() {
 
 	// --- Bottom panel tiles ---
 	tiles_bottom_panel = memnew(VBoxContainer);
+
+	tiles_bottom_panel->connect("visibility_changed", this, "_stop_dragging");
+	tiles_bottom_panel->connect("visibility_changed", this, "_tab_changed");
+	tiles_bottom_panel->set_name(TTR("Tiles"));
+
 	// FIXME: This can trigger theme updates when the nodes that we want to update are not yet available.
 	// The toolbar should be extracted to a dedicated control and theme updates should be handled through
 	// the notification.
 	//tiles_bottom_panel->connect("theme_changed", this, "_update_theme");
-	tiles_bottom_panel->connect("visibility_changed", this, "_stop_dragging");
-	tiles_bottom_panel->connect("visibility_changed", this, "_tab_changed");
-	tiles_bottom_panel->set_name(TTR("Tiles"));
+	ThemeChangedNotifier *theme_changed_notifier = memnew(ThemeChangedNotifier);
+	theme_changed_notifier->connect("theme_changed", this, "_update_theme");
+	tiles_bottom_panel->add_child(theme_changed_notifier);
 
 	missing_source_label = memnew(Label);
 	missing_source_label->set_text(TTR("This LayeredTileMap's LayeredTileSet has no source configured. Go to the LayeredTileSet bottom panel to add one."));
@@ -3612,11 +3619,14 @@ void LayeredTileMapLayerEditorTerrainsPlugin::edit(ObjectID p_edited_tile_map_la
 
 LayeredTileMapLayerEditorTerrainsPlugin::LayeredTileMapLayerEditorTerrainsPlugin() {
 	main_vbox_container = memnew(VBoxContainer);
+	main_vbox_container->set_name(TTR("Terrains"));
+
 	// FIXME: This can trigger theme updates when the nodes that we want to update are not yet available.
 	// The toolbar should be extracted to a dedicated control and theme updates should be handled through
 	// the notification.
-	//main_vbox_container->connect("theme_changed", this, "_update_theme");
-	main_vbox_container->set_name(TTR("Terrains"));
+	ThemeChangedNotifier *theme_changed_notifier = memnew(ThemeChangedNotifier);
+	theme_changed_notifier->connect("theme_changed", this, "_update_theme");
+	main_vbox_container->add_child(theme_changed_notifier);
 
 	HSplitContainer *tilemap_tab_terrains = memnew(HSplitContainer);
 	tilemap_tab_terrains->set_h_size_flags(Control::SIZE_EXPAND_FILL);
diff --git a/modules/layered_tile_map/editor/theme_changed_notifier.cpp b/modules/layered_tile_map/editor/theme_changed_notifier.cpp
new file mode 100644
index 000000000..ca85280af
--- /dev/null
+++ b/modules/layered_tile_map/editor/theme_changed_notifier.cpp
@@ -0,0 +1,48 @@
+/*************************************************************************/
+/*  theme_changed_notifier.cpp                                           */
+/*************************************************************************/
+/*                         This file is part of:                         */
+/*                          PANDEMONIUM ENGINE                           */
+/*             https://github.com/Relintai/pandemonium_engine            */
+/*************************************************************************/
+/* Copyright (c) 2022-present Péter Magyar.                              */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */
+/*                                                                       */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the       */
+/* "Software"), to deal in the Software without restriction, including   */
+/* without limitation the rights to use, copy, modify, merge, publish,   */
+/* distribute, sublicense, and/or sell copies of the Software, and to    */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions:                                             */
+/*                                                                       */
+/* The above copyright notice and this permission notice shall be        */
+/* included in all copies or substantial portions of the Software.       */
+/*                                                                       */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
+/*************************************************************************/
+
+#include "theme_changed_notifier.h"
+
+void ThemeChangedNotifier::_notification(int p_what) {
+	if (p_what == NOTIFICATION_THEME_CHANGED) {
+		emit_signal("theme_changed");
+	}
+}
+
+void ThemeChangedNotifier::_bind_methods() {
+	ADD_SIGNAL(MethodInfo("theme_changed"));
+}
+
+ThemeChangedNotifier::ThemeChangedNotifier() {
+}
+
+ThemeChangedNotifier::~ThemeChangedNotifier() {
+}
diff --git a/modules/layered_tile_map/editor/theme_changed_notifier.h b/modules/layered_tile_map/editor/theme_changed_notifier.h
new file mode 100644
index 000000000..1de2d4f74
--- /dev/null
+++ b/modules/layered_tile_map/editor/theme_changed_notifier.h
@@ -0,0 +1,49 @@
+#ifndef THEME_CHANGED_NOTIFIER_H
+#define THEME_CHANGED_NOTIFIER_H
+
+/*************************************************************************/
+/*  theme_changed_notifier.h                                             */
+/*************************************************************************/
+/*                         This file is part of:                         */
+/*                          PANDEMONIUM ENGINE                           */
+/*             https://github.com/Relintai/pandemonium_engine            */
+/*************************************************************************/
+/* Copyright (c) 2022-present Péter Magyar.                              */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */
+/*                                                                       */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the       */
+/* "Software"), to deal in the Software without restriction, including   */
+/* without limitation the rights to use, copy, modify, merge, publish,   */
+/* distribute, sublicense, and/or sell copies of the Software, and to    */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions:                                             */
+/*                                                                       */
+/* The above copyright notice and this permission notice shall be        */
+/* included in all copies or substantial portions of the Software.       */
+/*                                                                       */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
+/*************************************************************************/
+
+#include "scene/main/control.h"
+
+class ThemeChangedNotifier : public Control {
+	GDCLASS(ThemeChangedNotifier, Control);
+
+protected:
+	void _notification(int p_what);
+	static void _bind_methods();
+	
+public:
+	ThemeChangedNotifier();
+	~ThemeChangedNotifier();
+};
+
+#endif