diff --git a/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java b/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java
index 505ce59..daf2852 100644
--- a/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java
+++ b/common/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java
@@ -12,4 +12,6 @@ public abstract class TaskScheduler {
     public abstract void runAsync(Runnable runnable);
 
     public abstract void runLaterAsync(Runnable runnable, long ticks);
+
+    public abstract  void runDelayedTimerAsync(Runnable runnable, long delay, long ticks);
 }
diff --git a/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java b/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java
index 364c51f..c2b145a 100644
--- a/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java
+++ b/folia/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java
@@ -19,4 +19,9 @@ public class FoliaScheduler extends TaskScheduler {
     public void runLaterAsync(Runnable runnable, long ticks) {
         Bukkit.getAsyncScheduler().runDelayed(plugin, task -> runnable.run(), ticks * 50, TimeUnit.MILLISECONDS);
     }
+
+    @Override
+    public void runDelayedTimerAsync(Runnable runnable, long delay, long ticks) {
+        Bukkit.getAsyncScheduler().runAtFixedRate(plugin, task -> runnable.run(), delay * 50, ticks * 50, TimeUnit.MILLISECONDS);
+    }
 }
diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java
index b56a02f..96ebb7d 100644
--- a/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java
+++ b/spigot/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java
@@ -124,9 +124,9 @@ public class ZNPCsPlus extends JavaPlugin {
         Bukkit.getOnlinePlayers().forEach(User::get);
 
         log(ChatColor.WHITE + " * Starting tasks...");
-        new NPCVisibilityTask(this);
+        new NPCVisibilityTask();
         new InventoryListener(this);
-        new SkinCacheCleanTask(this);
+        new SkinCacheCleanTask();
         new UserListener(this);
         if (Configs.config().checkForUpdates()) new UpdateNotificationListener(this, new UpdateChecker(this));
 
diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java b/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java
index 77d01e2..f8f6b68 100644
--- a/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java
+++ b/spigot/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java
@@ -17,4 +17,9 @@ public class SpigotScheduler extends TaskScheduler {
     public void runLaterAsync(Runnable runnable, long ticks) {
         Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, runnable, ticks);
     }
+
+    @Override
+    public void runDelayedTimerAsync(Runnable runnable, long delay, long ticks) {
+        Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, runnable, delay, ticks);
+    }
 }
diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java b/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java
index 443d0ca..7b935b3 100644
--- a/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java
+++ b/spigot/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java
@@ -4,8 +4,8 @@ import lol.pyr.znpcsplus.ZNPCsPlus;
 import org.bukkit.scheduler.BukkitRunnable;
 
 public class SkinCacheCleanTask extends BukkitRunnable {
-    public SkinCacheCleanTask(ZNPCsPlus plugin) {
-        runTaskTimerAsynchronously(plugin, 1200, 1200);
+    public SkinCacheCleanTask() {
+        ZNPCsPlus.SCHEDULER.runDelayedTimerAsync(this, 1200, 1200);
     }
 
     @Override
diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java b/spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java
index 5b2a669..4cd4f7e 100644
--- a/spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java
+++ b/spigot/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java
@@ -1,17 +1,17 @@
 package lol.pyr.znpcsplus.tasks;
 
+import lol.pyr.znpcsplus.ZNPCsPlus;
 import lol.pyr.znpcsplus.config.Configs;
 import lol.pyr.znpcsplus.npc.NPC;
 import lol.pyr.znpcsplus.npc.NPCRegistry;
 import org.bukkit.Bukkit;
 import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
 import org.bukkit.scheduler.BukkitRunnable;
 import org.bukkit.util.NumberConversions;
 
 public class NPCVisibilityTask extends BukkitRunnable {
-    public NPCVisibilityTask(Plugin plugin) {
-        runTaskTimerAsynchronously(plugin, 60L, 10L);
+    public NPCVisibilityTask() {
+        ZNPCsPlus.SCHEDULER.runDelayedTimerAsync(this, 60L, 10L);
     }
 
     public void run() {
diff --git a/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java b/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java
index b373e55..5caf7d7 100644
--- a/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java
+++ b/spigot/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java
@@ -18,7 +18,7 @@ public class UpdateChecker extends BukkitRunnable {
 
     public UpdateChecker(ZNPCsPlus plugin) {
         this.plugin = plugin;
-        runTaskTimerAsynchronously(plugin, 5L, 6000L);
+        ZNPCsPlus.SCHEDULER.runDelayedTimerAsync(this, 5L, 6000L);
     }
 
     public void run() {
diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml
index 00bc9fa..c1c78f5 100644
--- a/spigot/src/main/resources/plugin.yml
+++ b/spigot/src/main/resources/plugin.yml
@@ -12,4 +12,5 @@ softdepend:
   - ViaBackwards
   - ViaRewind
   - Geyser-Spigot
-authors: [gonalez (g0b#3830), Pyr (Pyr#6969)]
\ No newline at end of file
+authors: [gonalez (g0b#3830), Pyr (Pyr#6969)]
+folia-supported: true
\ No newline at end of file