diff --git a/es-core/src/components/BadgesComponent.cpp b/es-core/src/components/BadgesComponent.cpp
index a7a6adc50..5b0a569be 100644
--- a/es-core/src/components/BadgesComponent.cpp
+++ b/es-core/src/components/BadgesComponent.cpp
@@ -13,32 +13,37 @@
 #include "ThemeData.h"
 #include "resources/TextureResource.h"
 
-BadgesComponent::BadgesComponent(Window* window)
-    : FlexboxComponent(window)
-{
-    // Define the slots.
-    mSlots = {SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDS, SLOT_BROKEN};
+// Available slot definitions.
+const std::vector<std::string> BadgesComponent::mSlots = {SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDS, SLOT_BROKEN};
+std::map<std::string, std::string> BadgesComponent::mBadgeIcons = std::map<std::string, std::string>();
+std::map<std::string, ImageComponent> BadgesComponent::mImageComponents = std::map<std::string, ImageComponent>();
+
+BadgesComponent::BadgesComponent(Window *window)
+        : FlexboxComponent(window) {
+    if (mBadgeIcons.empty()) {
+        mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
+        mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
+        mBadgeIcons[SLOT_KIDS] = ":/graphics/badge_kidgame.svg";
+        mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg";
+    }
 
-    mBadgeIcons = std::map<std::string, std::string>();
-    mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
-    mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
-    mBadgeIcons[SLOT_KIDS] = ":/graphics/badge_kidgame.svg";
-    mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg";
 
     // Create the child ImageComponent for every badge.
-    mImageComponents = std::map<std::string, ImageComponent>();
-    ImageComponent mImageFavorite = ImageComponent(window);
-    mImageFavorite.setImage(mBadgeIcons[SLOT_FAVORITE], false, false);
-    mImageComponents.insert({SLOT_FAVORITE, mImageFavorite});
-    ImageComponent mImageCompleted = ImageComponent(window);
-    mImageCompleted.setImage(mBadgeIcons[SLOT_COMPLETED], false, false);
-    mImageComponents.insert({SLOT_COMPLETED, mImageCompleted});
-    ImageComponent mImageKids = ImageComponent(window);
-    mImageKids.setImage(mBadgeIcons[SLOT_KIDS], false, false);
-    mImageComponents.insert({SLOT_KIDS, mImageKids});
-    ImageComponent mImageBroken = ImageComponent(window);
-    mImageBroken.setImage(mBadgeIcons[SLOT_BROKEN], false, false);
-    mImageComponents.insert({SLOT_BROKEN, mImageBroken});
+    if (mImageComponents.empty()) {
+        ImageComponent mImageFavorite = ImageComponent(window);
+        mImageFavorite.setImage(mBadgeIcons[SLOT_FAVORITE], false, true);
+        mImageComponents.insert({SLOT_FAVORITE, mImageFavorite});
+        ImageComponent mImageCompleted = ImageComponent(window);
+        mImageCompleted.setImage(mBadgeIcons[SLOT_COMPLETED], false, true);
+        mImageComponents.insert({SLOT_COMPLETED, mImageCompleted});
+        ImageComponent mImageKids = ImageComponent(window);
+        mImageKids.setImage(mBadgeIcons[SLOT_KIDS], false, true);
+        mImageComponents.insert({SLOT_KIDS, mImageKids});
+        ImageComponent mImageBroken = ImageComponent(window);
+        mImageBroken.setImage(mBadgeIcons[SLOT_BROKEN], false, true);
+        mImageComponents.insert({SLOT_BROKEN, mImageBroken});
+    }
+
 }
 
 void BadgesComponent::setValue(const std::string& value)
@@ -82,9 +87,9 @@ void BadgesComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
 
     bool imgChanged = false;
     for (auto& slot : mSlots) {
-        if (properties & PATH && elem->has(slot)) {
+        if (properties & PATH && elem->has(slot) && mBadgeIcons[slot] != elem->get<std::string>(slot)) {
             mBadgeIcons[slot] = elem->get<std::string>(slot);
-            mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot]);
+            mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot], false, true);
             imgChanged = true;
         }
     }
diff --git a/es-core/src/components/BadgesComponent.h b/es-core/src/components/BadgesComponent.h
index badaa57c7..79b49fc8a 100644
--- a/es-core/src/components/BadgesComponent.h
+++ b/es-core/src/components/BadgesComponent.h
@@ -30,19 +30,19 @@ public:
 
     std::string getValue() const override;
     // Should be a list of strings.
-    void setValue(const std::string& value) override;
+    void setValue(const std::string &value) override;
 
-    virtual void applyTheme(const std::shared_ptr<ThemeData>& theme,
-                            const std::string& view,
-                            const std::string& element,
+    virtual void applyTheme(const std::shared_ptr<ThemeData> &theme,
+                            const std::string &view,
+                            const std::string &element,
                             unsigned int properties) override;
 
     virtual std::vector<HelpPrompt> getHelpPrompts() override;
 
 private:
-    std::vector<std::string> mSlots;
-    std::map<std::string, std::string> mBadgeIcons;
-    std::map<std::string, ImageComponent> mImageComponents;
+    static const std::vector<std::string> mSlots;
+    static std::map<std::string, std::string> mBadgeIcons;
+    static std::map<std::string, ImageComponent> mImageComponents;
 };
 
 #endif // ES_APP_COMPONENTS_BADGES_COMPONENT_H