diff --git a/src/en/animeowl/build.gradle b/src/en/animeowl/build.gradle
index e5849d46..40b4fa1d 100644
--- a/src/en/animeowl/build.gradle
+++ b/src/en/animeowl/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AnimeOwl'
     extClass = '.AnimeOwl'
-    extVersionCode = 22
+    extVersionCode = 23
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt
index b53606e8..3b061288 100644
--- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt
+++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt
@@ -129,20 +129,20 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
         val document = response.asJsoup()
         val sub = document.select("#anime-cover-sub-content .episode-node").mapIndexed { idx, it ->
             EpisodeResponse.Episode(
-                id = it.text().toDouble(),
+                id = it.attr("title").toDoubleOrNull(),
                 episodeIndex = idx.toString(),
-                name = it.text(),
+                name = it.attr("title"),
                 lang = "Sub",
-                href = it.attr("abs:href"),
+                href = it.absUrl("href"),
             )
         }
         val dub = document.select("#anime-cover-dub-content .episode-node").mapIndexed { idx, it ->
             EpisodeResponse.Episode(
-                id = it.text().toDouble(),
+                id = it.attr("title").toDoubleOrNull(),
                 episodeIndex = idx.toString(),
-                name = it.text(),
+                name = it.attr("title"),
                 lang = "Dub",
-                href = it.attr("abs:href"),
+                href = it.absUrl("href"),
             )
         }
 
diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt
index 0e39f027..66ae5673 100644
--- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt
+++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt
@@ -53,12 +53,13 @@ data class Link(
 
 @Serializable
 data class OwlServers(
-    val kaido: String? = null,
-    val luffy: String? = null,
-    val zoro: String? = null,
+    val kaido: List<Stream>? = null,
+    val luffy: List<Stream>? = null,
+    val zoro: List<Stream>? = null,
 )
 
 @Serializable
 data class Stream(
     val url: String,
+    val resolution: String?,
 )
diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt
index e3fa8ef1..3d4c22a9 100644
--- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt
+++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt
@@ -45,23 +45,32 @@ class OwlExtractor(private val client: OkHttpClient, private val baseUrl: String
         coroutineScope {
             val lufDeferred = async {
                 servers.luffy?.let { luffy ->
-                    noRedirectClient.newCall(GET("${luffy}$jwt")).execute()
-                        .use { it.headers["Location"] }
-                        ?.let { videoList.add(Video(it, "${link.lang} Luffy:1080p", it)) }
+                    luffy.forEach { stream ->
+                        noRedirectClient.newCall(GET("${stream.url}$jwt")).execute()
+                            .use { it.headers["Location"] }?.let {
+                                videoList.add(
+                                    Video(it, "${link.lang} Luffy:${stream.resolution}", it),
+                                )
+                            }
+                    }
                 }
             }
             val kaiDeferred = async {
-                servers.kaido?.let {
-                    videoList.addAll(
-                        getHLS("${it}$jwt", "Kaido", link.lang),
-                    )
+                servers.kaido?.let { kaido ->
+                    kaido.forEach { stream ->
+                        videoList.addAll(
+                            getHLS("${stream.url}$jwt", "Kaido", link.lang),
+                        )
+                    }
                 }
             }
             val zorDeferred = async {
-                servers.zoro?.let {
-                    videoList.addAll(
-                        getHLS("${it}$jwt", "Boa", link.lang),
-                    )
+                servers.zoro?.let { zoro ->
+                    zoro.forEach { stream ->
+                        videoList.addAll(
+                            getHLS("${stream.url}$jwt", "Boa", link.lang),
+                        )
+                    }
                 }
             }
 
@@ -71,7 +80,7 @@ class OwlExtractor(private val client: OkHttpClient, private val baseUrl: String
     }
 
     private fun getHLS(url: String, server: String, lang: String): List<Video> {
-        return client.newCall(GET(url)).execute().let {
+        return client.newCall(GET(url)).execute().let { it ->
             if (it.isSuccessful) {
                 it.parseAs<Stream>().url.let {
                     playlistUtils.extractFromHls(it, videoNameGen = { qty -> "$lang $server:$qty" })
diff --git a/src/en/aniplay/build.gradle b/src/en/aniplay/build.gradle
index 454a3448..edce2f4c 100644
--- a/src/en/aniplay/build.gradle
+++ b/src/en/aniplay/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'AniPlay'
     extClass = '.AniPlay'
     themePkg = 'anilist'
-    overrideVersionCode = 14
+    overrideVersionCode = 15
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt
index 75e355e9..e23034ec 100644
--- a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt
+++ b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt
@@ -260,6 +260,14 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
         }
     }
 
+    private fun getProxiedUrl(originalUrl: String, serverName: String, referer: String?): String {
+        return when (serverName) {
+            "Yuki" -> "$PROXY_URL/yukiprox?url=$originalUrl"
+            "Pahe" -> "$PROXY_URL/fetch?url=$originalUrl?ref=$referer"
+            else -> return originalUrl
+        }
+    }
+
     private fun processEpisodeData(episodeData: EpisodeData): List<Video> {
         val defaultSource = episodeData.response.sources?.firstOrNull {
             it.quality in listOf("default", "auto")
@@ -282,37 +290,19 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
         }
 
         try {
-            if (episodeData.response.proxy == true) {
-                var proxyUrl = "$PROXY_URL/fetch?url=${defaultSource.url}"
-                if (episodeData.response.headers != null && episodeData.response.headers.Referer?.startsWith("https://") == true) {
-                    proxyUrl += "&ref=${episodeData.response.headers.Referer}"
-                }
-                return playlistUtils.extractFromHls(
-                    playlistUrl = proxyUrl,
-                    videoNameGen = { quality -> "$serverName - $quality - $typeName" },
-                    subtitleList = subtitles,
-                )
-            }
-            if (episodeData.response.headers != null && episodeData.response.headers.Referer?.startsWith("https://") == true) {
-                return playlistUtils.extractFromHls(
-                    playlistUrl = defaultSource.url,
-                    videoNameGen = { quality -> "$serverName - $quality - $typeName" },
-                    subtitleList = subtitles,
-                    masterHeadersGen = { baseHeaders: Headers, _: String ->
-                        baseHeaders.newBuilder().apply {
-                            set("Accept", "*/*")
-                            set("Origin", baseUrl)
-                            set("Referer", episodeData.response.headers.Referer)
-                        }.build()
-                    },
-                )
-            } else {
-                return playlistUtils.extractFromHls(
-                    playlistUrl = defaultSource.url,
-                    videoNameGen = { quality -> "$serverName - $quality - $typeName" },
-                    subtitleList = subtitles,
-                )
-            }
+            val url = getProxiedUrl(defaultSource.url, serverName, episodeData.response.headers?.Referer)
+            return playlistUtils.extractFromHls(
+                playlistUrl = url,
+                videoNameGen = { quality -> "$serverName - $quality - $typeName" },
+                subtitleList = subtitles,
+                masterHeadersGen = { baseHeaders: Headers, _: String ->
+                    baseHeaders.newBuilder().apply {
+                        set("Accept", "*/*")
+                        set("Origin", baseUrl)
+                        set("Referer", "$baseUrl/")
+                    }.build()
+                },
+            )
         } catch (e: Exception) {
             Log.e("AniPlay", "processEpisodeData extractFromHls Error (\"$serverName - $typeName\"): $e")
         }
@@ -536,15 +526,15 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
 
         private val HEADER_NEXT_ACTION = mapOf(
             PREF_DOMAIN_ENTRY_VALUES[0] to mapOf(
-                "NEXT_ACTION_EPISODE_LIST" to "7f245562e54103f7dc13b3f89743fe31492ae34d6d",
-                "NEXT_ACTION_SOURCES_LIST" to "7fa64b02d2e6dc6a72c31b915844cb42a729b5e575",
+                "NEXT_ACTION_EPISODE_LIST" to "7f07777b5f74e3edb312e0b718a560f9d3ad21aeba",
+                "NEXT_ACTION_SOURCES_LIST" to "7f11490e43dca1ed90fcb5b90bac1e5714a3e11232",
             ),
             PREF_DOMAIN_ENTRY_VALUES[1] to mapOf(
-                "NEXT_ACTION_EPISODE_LIST" to "7f4b13f495ada236e47ada7923680d8264f2601e45",
-                "NEXT_ACTION_SOURCES_LIST" to "7f41e61d8806a49322bbe4746ff28a39e4dc098b6b",
+                "NEXT_ACTION_EPISODE_LIST" to "7f57233b7a6486e8211b883c502fa0450775f0ee98",
+                "NEXT_ACTION_SOURCES_LIST" to "7f48c7ffeb25edece852102a65d794a1dffa37aaac",
             ),
         )
-        private const val PROXY_URL = "https://aniplay-cors.yqizw7.easypanel.host"
+        private const val PROXY_URL = "https://prox.aniplaynow.live"
 
         private val DATE_FORMATTER = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
     }