diff --git a/src/pt/taosect/build.gradle b/src/pt/taosect/build.gradle
index df5f0e0c6..993b1545c 100644
--- a/src/pt/taosect/build.gradle
+++ b/src/pt/taosect/build.gradle
@@ -6,7 +6,7 @@ ext {
     extName = 'Tao Sect'
     pkgNameSuffix = 'pt.taosect'
     extClass = '.TaoSect'
-    extVersionCode = 14
+    extVersionCode = 15
     isNsfw = true
 }
 
diff --git a/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png
index c0a27c960..20345902b 100644
Binary files a/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png
index 7640239d1..fc275bb1f 100644
Binary files a/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png
index d642ce103..93c99e789 100644
Binary files a/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png
index a2f794d2a..44c3ddc6f 100644
Binary files a/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png
index dbd743759..a4801fd60 100644
Binary files a/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png and b/src/pt/taosect/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/pt/taosect/res/web_hi_res_512.png b/src/pt/taosect/res/web_hi_res_512.png
index e3052b9e8..1acdd80c2 100644
Binary files a/src/pt/taosect/res/web_hi_res_512.png and b/src/pt/taosect/res/web_hi_res_512.png differ
diff --git a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt
index 21e19a1d0..302cc581c 100644
--- a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt
+++ b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt
@@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.POST
 import eu.kanade.tachiyomi.network.asObservableSuccess
-import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.MangasPage
 import eu.kanade.tachiyomi.source.model.Page
@@ -153,76 +152,8 @@ class TaoSect : HttpSource() {
             apiUrl.addQueryParameter("search", query)
         }
 
-        filters.forEach { filter ->
-            when (filter) {
-                is CountryFilter -> {
-                    filter.state
-                        .groupBy { it.state }
-                        .entries
-                        .forEach { entry ->
-                            val values = entry.value.joinToString(",") { it.id }
-
-                            if (entry.key == Filter.TriState.STATE_EXCLUDE) {
-                                apiUrl.addQueryParameter("paises_exclude", values)
-                            } else if (entry.key == Filter.TriState.STATE_INCLUDE) {
-                                apiUrl.addQueryParameter("paises", values)
-                            }
-                        }
-                }
-                is StatusFilter -> {
-                    filter.state
-                        .groupBy { it.state }
-                        .entries
-                        .forEach { entry ->
-                            val values = entry.value.joinToString(",") { it.id }
-
-                            if (entry.key == Filter.TriState.STATE_EXCLUDE) {
-                                apiUrl.addQueryParameter("situacao_exclude", values)
-                            } else if (entry.key == Filter.TriState.STATE_INCLUDE) {
-                                apiUrl.addQueryParameter("situacao", values)
-                            }
-                        }
-                }
-                is GenreFilter -> {
-                    filter.state
-                        .groupBy { it.state }
-                        .entries
-                        .forEach { entry ->
-                            val values = entry.value.joinToString(",") { it.id }
-
-                            if (entry.key == Filter.TriState.STATE_EXCLUDE) {
-                                apiUrl.addQueryParameter("generos_exclude", values)
-                            } else if (entry.key == Filter.TriState.STATE_INCLUDE) {
-                                apiUrl.addQueryParameter("generos", values)
-                            }
-                        }
-                }
-                is SortFilter -> {
-                    val orderBy = if (filter.state == null) SORT_LIST[DEFAULT_ORDERBY].id else
-                        SORT_LIST[filter.state!!.index].id
-                    val order = if (filter.state?.ascending == true) "asc" else "desc"
-
-                    apiUrl.addQueryParameter("order", order)
-                    apiUrl.addQueryParameter("orderby", orderBy)
-                }
-                is FeaturedFilter -> {
-                    if (query.isEmpty()) {
-                        if (filter.state == Filter.TriState.STATE_INCLUDE) {
-                            apiUrl.addQueryParameter("destaque", "1")
-                        } else if (filter.state == Filter.TriState.STATE_EXCLUDE) {
-                            apiUrl.addQueryParameter("destaque", "0")
-                        }
-                    }
-                }
-                is NsfwFilter -> {
-                    if (filter.state == Filter.TriState.STATE_INCLUDE) {
-                        apiUrl.addQueryParameter("mais_18", "1")
-                    } else if (filter.state == Filter.TriState.STATE_EXCLUDE) {
-                        apiUrl.addQueryParameter("mais_18", "0")
-                    }
-                }
-            }
-        }
+        filters.filterIsInstance<QueryParameterFilter>()
+            .forEach { it.toQueryParameter(apiUrl, query) }
 
         return GET(apiUrl.toString(), apiHeaders)
     }
@@ -405,29 +336,11 @@ class TaoSect : HttpSource() {
         CountryFilter(getCountryList()),
         StatusFilter(getStatusList()),
         GenreFilter(getGenreList()),
-        SortFilter(),
+        SortFilter(SORT_LIST, DEFAULT_ORDERBY),
         FeaturedFilter(),
         NsfwFilter()
     )
 
-    private class Tag(val id: String, name: String) : Filter.TriState(name)
-
-    private class CountryFilter(countries: List<Tag>) : Filter.Group<Tag>("País", countries)
-
-    private class StatusFilter(status: List<Tag>) : Filter.Group<Tag>("Status", status)
-
-    private class GenreFilter(genres: List<Tag>) : Filter.Group<Tag>("Gêneros", genres)
-
-    private class SortFilter : Filter.Sort(
-        "Ordem",
-        SORT_LIST.map { it.name }.toTypedArray(),
-        Selection(DEFAULT_ORDERBY, false)
-    )
-
-    private class FeaturedFilter : Filter.TriState("Mostrar destaques")
-
-    private class NsfwFilter : Filter.TriState("Mostrar conteúdo +18")
-
     private inline fun <reified T> Response.parseAs(): T = use {
         json.decodeFromString(it.body?.string().orEmpty())
     }
diff --git a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt
new file mode 100644
index 000000000..409e9d288
--- /dev/null
+++ b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSectFilters.kt
@@ -0,0 +1,112 @@
+package eu.kanade.tachiyomi.extension.pt.taosect
+
+import eu.kanade.tachiyomi.source.model.Filter
+import okhttp3.HttpUrl
+
+interface QueryParameterFilter {
+    fun toQueryParameter(url: HttpUrl.Builder, query: String)
+}
+
+class Tag(val id: String, name: String) : Filter.TriState(name)
+
+class CountryFilter(countries: List<Tag>) :
+    Filter.Group<Tag>("País", countries),
+    QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        state
+            .groupBy { it.state }
+            .entries
+            .forEach { entry ->
+                val values = entry.value.joinToString(",") { it.id }
+
+                if (entry.key == TriState.STATE_EXCLUDE) {
+                    url.addQueryParameter("paises_exclude", values)
+                } else if (entry.key == TriState.STATE_INCLUDE) {
+                    url.addQueryParameter("paises", values)
+                }
+            }
+    }
+}
+
+class StatusFilter(status: List<Tag>) :
+    Filter.Group<Tag>("Status", status),
+    QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        state
+            .groupBy { it.state }
+            .entries
+            .forEach { entry ->
+                val values = entry.value.joinToString(",") { it.id }
+
+                if (entry.key == TriState.STATE_EXCLUDE) {
+                    url.addQueryParameter("situacao_exclude", values)
+                } else if (entry.key == TriState.STATE_INCLUDE) {
+                    url.addQueryParameter("situacao", values)
+                }
+            }
+    }
+}
+
+class GenreFilter(genres: List<Tag>) :
+    Filter.Group<Tag>("Gêneros", genres),
+    QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        state
+            .groupBy { it.state }
+            .entries
+            .forEach { entry ->
+                val values = entry.value.joinToString(",") { it.id }
+
+                if (entry.key == TriState.STATE_EXCLUDE) {
+                    url.addQueryParameter("generos_exclude", values)
+                } else if (entry.key == TriState.STATE_INCLUDE) {
+                    url.addQueryParameter("generos", values)
+                }
+            }
+    }
+}
+
+class SortFilter(private val sortings: List<Tag>, private val default: Int) :
+    Filter.Sort(
+        "Ordem",
+        sortings.map { it.name }.toTypedArray(),
+        Selection(default, false)
+    ),
+    QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        val orderBy = if (state == null) sortings[default].id else
+            sortings[state!!.index].id
+        val order = if (state?.ascending == true) "asc" else "desc"
+
+        url.addQueryParameter("order", order)
+        url.addQueryParameter("orderby", orderBy)
+    }
+}
+
+class FeaturedFilter : Filter.TriState("Mostrar destaques"), QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        if (query.isEmpty()) {
+            if (state == STATE_INCLUDE) {
+                url.addQueryParameter("destaque", "1")
+            } else if (state == STATE_EXCLUDE) {
+                url.addQueryParameter("destaque", "0")
+            }
+        }
+    }
+}
+
+class NsfwFilter : Filter.TriState("Mostrar conteúdo +18"), QueryParameterFilter {
+
+    override fun toQueryParameter(url: HttpUrl.Builder, query: String) {
+        if (state == STATE_INCLUDE) {
+            url.addQueryParameter("mais_18", "1")
+        } else if (state == STATE_EXCLUDE) {
+            url.addQueryParameter("mais_18", "0")
+        }
+    }
+}