diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp
index bab18dec6..896ff8f6f 100644
--- a/es-core/src/ThemeData.cpp
+++ b/es-core/src/ThemeData.cpp
@@ -169,6 +169,7 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
        {"reflectionsOpacity", FLOAT},
        {"reflectionsFalloff", FLOAT},
        {"unfocusedItemOpacity", FLOAT},
+       {"fastScrolling", BOOLEAN},
        {"defaultLogo", PATH},                      // For backward compatibility with legacy themes.
        {"logoSize", NORMALIZED_PAIR},              // For backward compatibility with legacy themes.
        {"logoScale", FLOAT},                       // For backward compatibility with legacy themes.
diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h
index b80008805..d79ce07a4 100644
--- a/es-core/src/components/IList.h
+++ b/es-core/src/components/IList.h
@@ -25,39 +25,6 @@ enum class ListLoopType {
     LIST_NEVER_LOOP
 };
 
-struct ScrollTier {
-    int length; // How long we stay on this tier before going to the next.
-    int scrollDelay; // How long between scrolls.
-};
-
-struct ScrollTierList {
-    const int count;
-    const ScrollTier* tiers;
-};
-
-// Default scroll tiers.
-// clang-format off
-const ScrollTier QUICK_SCROLL_TIERS[] = {
-    {500, 500},
-    {1200, 114},
-    {0, 16}
-};
-const ScrollTierList LIST_SCROLL_STYLE_QUICK = {
-    3,
-    QUICK_SCROLL_TIERS
-};
-
-const ScrollTier SLOW_SCROLL_TIERS[] = {
-    {500, 500},
-    {0, 200}
-};
-
-const ScrollTierList LIST_SCROLL_STYLE_SLOW = {
-    2,
-    SLOW_SCROLL_TIERS
-};
-// clang-format on
-
 template <typename EntryData, typename UserData> class IList : public virtual GuiComponent
 {
 public:
@@ -68,9 +35,54 @@ public:
     };
 
 protected:
+    struct ScrollTier {
+        int length; // How long we stay on this tier before going to the next.
+        int scrollDelay; // How long between scrolls.
+    };
+
+    struct ScrollTierList {
+        int count;
+        const ScrollTier* tiers;
+    };
+
+    // Default scroll tiers.
+    // clang-format off
+    static inline const ScrollTier QUICK_SCROLL_TIERS[3] {
+        {500, 500},
+        {1200, 114},
+        {0, 16}
+    };
+
+    static inline const ScrollTierList LIST_SCROLL_STYLE_QUICK {
+        3,
+        QUICK_SCROLL_TIERS
+    };
+
+    static inline const ScrollTier MEDIUM_SCROLL_TIERS[3] {
+        {500, 500},
+        {1100, 180},
+        {0, 80}
+    };
+
+    static inline const ScrollTierList LIST_SCROLL_STYLE_MEDIUM {
+        3,
+        MEDIUM_SCROLL_TIERS
+    };
+
+    static inline const ScrollTier SLOW_SCROLL_TIERS[2] {
+        {500, 500},
+        {0, 200}
+    };
+
+    static inline const ScrollTierList LIST_SCROLL_STYLE_SLOW {
+        2,
+        SLOW_SCROLL_TIERS
+    };
+    // clang-format on
+
     Window* mWindow;
     std::vector<Entry> mEntries;
-    const ScrollTierList& mTierList;
+    ScrollTierList mTierList;
     const ListLoopType mLoopType;
     int mCursor;
     int mLastCursor;
diff --git a/es-core/src/components/primary/CarouselComponent.h b/es-core/src/components/primary/CarouselComponent.h
index 271518365..00a81eed9 100644
--- a/es-core/src/components/primary/CarouselComponent.h
+++ b/es-core/src/components/primary/CarouselComponent.h
@@ -199,7 +199,7 @@ private:
 
 template <typename T>
 CarouselComponent<T>::CarouselComponent()
-    : IList<CarouselEntry, T> {LIST_SCROLL_STYLE_SLOW,
+    : IList<CarouselEntry, T> {IList<CarouselEntry, T>::LIST_SCROLL_STYLE_SLOW,
                                (std::is_same_v<T, SystemData*> ?
                                     ListLoopType::LIST_ALWAYS_LOOP :
                                     ListLoopType::LIST_PAUSE_AT_END_ON_JUMP)}
@@ -1614,6 +1614,9 @@ void CarouselComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme,
         if (elem->has("unfocusedItemOpacity"))
             mUnfocusedItemOpacity =
                 glm::clamp(elem->get<float>("unfocusedItemOpacity"), 0.1f, 1.0f);
+
+        if (elem->has("fastScrolling") && elem->get<bool>("fastScrolling"))
+            List::mTierList = IList<CarouselEntry, T>::LIST_SCROLL_STYLE_MEDIUM;
     }
 
     // Legacy themes.
diff --git a/es-core/src/components/primary/GridComponent.h b/es-core/src/components/primary/GridComponent.h
index e21e12e48..0fe3b2302 100644
--- a/es-core/src/components/primary/GridComponent.h
+++ b/es-core/src/components/primary/GridComponent.h
@@ -198,7 +198,8 @@ private:
 
 template <typename T>
 GridComponent<T>::GridComponent()
-    : IList<GridEntry, T> {LIST_SCROLL_STYLE_SLOW, ListLoopType::LIST_PAUSE_AT_END}
+    : IList<GridEntry, T> {IList<GridEntry, T>::LIST_SCROLL_STYLE_SLOW,
+                           ListLoopType::LIST_PAUSE_AT_END}
     , mRenderer {Renderer::getInstance()}
     , mEntryOffset {0.0f}
     , mScrollPos {0.0f}
diff --git a/es-core/src/components/primary/TextListComponent.h b/es-core/src/components/primary/TextListComponent.h
index c1a8fb240..38b50eb52 100644
--- a/es-core/src/components/primary/TextListComponent.h
+++ b/es-core/src/components/primary/TextListComponent.h
@@ -159,8 +159,9 @@ private:
 
 template <typename T>
 TextListComponent<T>::TextListComponent()
-    : IList<TextListData, T> {(std::is_same_v<T, SystemData*> ? LIST_SCROLL_STYLE_SLOW :
-                                                                LIST_SCROLL_STYLE_QUICK),
+    : IList<TextListData, T> {(std::is_same_v<T, SystemData*> ?
+                                   IList<TextListData, T>::LIST_SCROLL_STYLE_SLOW :
+                                   IList<TextListData, T>::LIST_SCROLL_STYLE_QUICK),
                               ListLoopType::LIST_PAUSE_AT_END}
     , mRenderer {Renderer::getInstance()}
     , mCamOffset {0.0f}