diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/JSClient.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/JSClient.kt
index eff3e0f1534ed2da2a72a0d9e6bab98b024d106a..2411ce72cdb3ea8df8f41c0159d3284fc98c524e 100644
--- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/JSClient.kt
+++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/JSClient.kt
@@ -92,6 +92,19 @@ open class JSClient : IPlatformClient {
     val enableInSearch get() = descriptor.appSettings.tabEnabled.enableSearch ?: true
     val enableInHome get() = descriptor.appSettings.tabEnabled.enableHome ?: true
 
+    fun getSubscriptionRateLimit(): Int? {
+        val pluginRateLimit = config.subscriptionRateLimit;
+        val settingsRateLimit = descriptor.appSettings.rateLimit.getSubRateLimit();
+        if(settingsRateLimit > 0) {
+            if(pluginRateLimit != null)
+                return settingsRateLimit.coerceAtMost(pluginRateLimit);
+            else
+                return settingsRateLimit;
+        }
+        else
+            return pluginRateLimit;
+    }
+
     val onDisabled = Event1<JSClient>();
     val onCaptchaException = Event2<JSClient, ScriptCaptchaRequiredException>();
 
diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginDescriptor.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginDescriptor.kt
index 5595ae3e314cbc93a3026d47c8ad81652fa045b9..8bcb51b348ca4742521a726b74f03f4559327950 100644
--- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginDescriptor.kt
+++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginDescriptor.kt
@@ -3,6 +3,7 @@ package com.futo.platformplayer.api.media.platforms.js
 import com.futo.platformplayer.R
 import com.futo.platformplayer.constructs.Event0
 import com.futo.platformplayer.serializers.FlexibleBooleanSerializer
+import com.futo.platformplayer.views.fields.DropdownFieldOptions
 import com.futo.platformplayer.views.fields.FieldForm
 import com.futo.platformplayer.views.fields.FormField
 import kotlinx.serialization.Serializable
@@ -79,6 +80,29 @@ class SourcePluginDescriptor {
             var enableSearch: Boolean? = null;
         }
 
+        @FormField(R.string.ratelimit, "group", R.string.ratelimit_description, 3)
+        var rateLimit = RateLimit();
+        @Serializable
+        class RateLimit {
+            @FormField(R.string.subscriptions, FieldForm.DROPDOWN, R.string.ratelimit_sub_setting_description, 1)
+            @DropdownFieldOptions("Plugin defined", "25", "50", "75", "100", "125", "150", "200")
+            var rateLimitSubs: Int = 0;
+
+            fun getSubRateLimit(): Int {
+                return when(rateLimitSubs) {
+                    0 -> -1
+                    1 -> 25
+                    2 -> 50
+                    3 -> 75
+                    4 -> 100
+                    5 -> 125
+                    6 -> 150
+                    7 -> 200
+                    else -> -1
+                }
+            }
+
+        }
 
 
         fun loadDefaults(config: SourcePluginConfig) {
diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt
index 3030c5fc0bdf8c73df88e79c90c83b49ab336911..b391ad241141d2d4471bc415abff8c7a670aee3d 100644
--- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt
+++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt
@@ -176,8 +176,8 @@ class SubscriptionsFeedFragment : MainFragment() {
         private val _taskGetPager = TaskHandler<Boolean, IPager<IPlatformContent>>({StateApp.instance.scope}, { withRefresh ->
             if(!_bypassRateLimit) {
                 val subRequestCounts = StateSubscriptions.instance.getSubscriptionRequestCount();
-                val reqCountStr = subRequestCounts.map { "    ${it.key.config.name}: ${it.value}/${it.key.config.subscriptionRateLimit}" }.joinToString("\n");
-                val rateLimitPlugins = subRequestCounts.filter { clientCount -> clientCount.key.config.subscriptionRateLimit?.let { rateLimit -> clientCount.value > rateLimit } == true }
+                val reqCountStr = subRequestCounts.map { "    ${it.key.config.name}: ${it.value}/${it.key.getSubscriptionRateLimit()}" }.joinToString("\n");
+                val rateLimitPlugins = subRequestCounts.filter { clientCount -> clientCount.key.getSubscriptionRateLimit()?.let { rateLimit -> clientCount.value > rateLimit } == true }
                 Logger.w(TAG, "Refreshing subscriptions with requests:\n" + reqCountStr);
                 if(rateLimitPlugins.any())
                     throw RateLimitException(rateLimitPlugins.map { it.key.id });
diff --git a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt
index 6af44d7ded8817b0e41ea946b75ae0bd73184056..646460055d20b6cb54da02d73d83032e32006ceb 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt
@@ -452,8 +452,8 @@ class StateApp {
         if(Settings.instance.subscriptions.fetchOnAppBoot) {
             scope.launch(Dispatchers.IO) {
                 val subRequestCounts = StateSubscriptions.instance.getSubscriptionRequestCount();
-                val reqCountStr = subRequestCounts.map { "    ${it.key.config.name}: ${it.value}/${it.key.config.subscriptionRateLimit}" }.joinToString("\n");
-                val isRateLimitReached = !subRequestCounts.any { clientCount -> clientCount.key.config.subscriptionRateLimit?.let { rateLimit -> clientCount.value > rateLimit } == true };
+                val reqCountStr = subRequestCounts.map { "    ${it.key.config.name}: ${it.value}/${it.key.getSubscriptionRateLimit()}" }.joinToString("\n");
+                val isRateLimitReached = !subRequestCounts.any { clientCount -> clientCount.key.getSubscriptionRateLimit()?.let { rateLimit -> clientCount.value > rateLimit } == true };
                 if (isRateLimitReached) {
                     Logger.w(TAG, "Subscriptions request on boot, request counts:\n${reqCountStr}");
                     delay(5000);
diff --git a/app/src/main/java/com/futo/platformplayer/subscription/SmartSubscriptionAlgorithm.kt b/app/src/main/java/com/futo/platformplayer/subscription/SmartSubscriptionAlgorithm.kt
index 0cbbb2becaf467df189b660ed6000a9733c3886c..5df4f381ed27e2896820df4436af94bfb8473c0d 100644
--- a/app/src/main/java/com/futo/platformplayer/subscription/SmartSubscriptionAlgorithm.kt
+++ b/app/src/main/java/com/futo/platformplayer/subscription/SmartSubscriptionAlgorithm.kt
@@ -59,7 +59,7 @@ class SmartSubscriptionAlgorithm(
 
 
         for(clientTasks in ordering) {
-            val limit = clientTasks.first.config.subscriptionRateLimit;
+            val limit = clientTasks.first.getSubscriptionRateLimit();
             if(limit == null || limit <= 0)
                 finalTasks.addAll(clientTasks.second);
             else {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2859f2ec8dcdad0df494693955b44a2213bb7779..2ea180bd7ba2b9cb25351efa90d6a5981b572834 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -396,6 +396,10 @@
     <string name="various_tests_against_a_custom_source">Various tests against a custom source</string>
     <string name="writes_to_disk_till_no_space_is_left">Writes to disk till no space is left</string>
     <string name="visibility">Visibility</string>
+    <string name="ratelimit">Rate-limit</string>
+    <string name="ratelimit_description">Settings related to rate-limiting this plugin\'s behavior</string>
+    <string name="ratelimit_sub_setting">Rate-limit Subscriptions</string>
+    <string name="ratelimit_sub_setting_description">Limit the amount of subscription requests made</string>
     <string name="enable_where_this_plugins_content_are_visible">Enable where this plugin\'s content are visible</string>
     <string name="show_content_in_home_tab">Show content in home tab</string>
     <string name="show_content_in_search_results">Show content in search results</string>