diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle
index 3ab2c90b4..cea2c0e4f 100644
--- a/src/all/mangadex/build.gradle
+++ b/src/all/mangadex/build.gradle
@@ -5,7 +5,7 @@ ext {
     appName = 'Tachiyomi: MangaDex'
     pkgNameSuffix = 'all.mangadex'
     extClass = '.MangadexFactory'
-    extVersionCode = 43
+    extVersionCode = 44
     libVersion = '1.2'
 }
 
diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt
index 3903252a4..35c626b00 100644
--- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt
+++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt
@@ -159,15 +159,26 @@ open class Mangadex(override val lang: String, private val internalLang: String,
                 is TextField -> url.addQueryParameter(filter.key, filter.state)
                 is Demographic -> {
                     if (filter.state != 0) {
-                        url.addQueryParameter("demo", filter.state.toString())
+                        url.addQueryParameter("demo_id", filter.state.toString())
+                    }
+                }
+                is PublicationStatus -> {
+                    if (filter.state != 0) {
+                        url.addQueryParameter("status_id", filter.state.toString())
                     }
                 }
                 is OriginalLanguage -> {
                     if (filter.state != 0) {
                         val number: String = SOURCE_LANG_LIST.first { it -> it.first == filter.values[filter.state] }.second
-                        url.addQueryParameter("source_lang", number)
+                        url.addQueryParameter("lang_id", number)
                     }
                 }
+                is TagInclusionMode -> {
+                    url.addQueryParameter("tag_mode_inc", arrayOf("all", "any")[filter.state])
+                }
+                is TagExclusionMode -> {
+                    url.addQueryParameter("tag_mode_exc", arrayOf("all", "any")[filter.state])
+                }
                 is ContentList -> {
                     filter.state.forEach { content ->
                         if (content.isExcluded()) {
@@ -284,13 +295,8 @@ open class Mangadex(override val lang: String, private val internalLang: String,
             manga.status = parseStatus(status)
         }
 
-        val genres = mutableListOf<String>()
-        val genreList = getGenreList()
-        mangaJson.get("genres").asJsonArray.forEach { id ->
-            genreList.find { it -> it.id == id.string }?.let { genre ->
-                genres.add(genre.name)
-            }
-        }
+        val genres = (if (mangaJson.get("hentai").int == 1) listOf("Hentai") else listOf()) +
+                mangaJson.get("genres").asJsonArray.mapNotNull { GENRES.get(it.toString()) }
         manga.genre = genres.joinToString(", ")
 
         return manga
@@ -467,7 +473,10 @@ open class Mangadex(override val lang: String, private val internalLang: String,
     private class GenreList(genres: List<Tag>) : Filter.Group<Tag>("Genres", genres)
     private class R18 : Filter.Select<String>("R18+", arrayOf("Default", "Show all", "Show only", "Show none"))
     private class Demographic : Filter.Select<String>("Demographic", arrayOf("All", "Shounen", "Shoujo", "Seinen", "Josei"))
+    private class PublicationStatus : Filter.Select<String>("Publication status", arrayOf("All", "Ongoing", "Completed", "Cancelled", "Hiatus"))
     private class ThemeList(themes: List<Tag>) : Filter.Group<Tag>("Themes", themes)
+    private class TagInclusionMode : Filter.Select<String>("Tag inclusion mode", arrayOf("All (and)", "Any (or)"), 0)
+    private class TagExclusionMode : Filter.Select<String>("Tag exclusion mode", arrayOf("All (and)", "Any (or)"), 1)
 
     class SortFilter : Filter.Sort("Sort",
             sortables.map { it.first }.toTypedArray(),
@@ -481,11 +490,14 @@ open class Mangadex(override val lang: String, private val internalLang: String,
             R18(),
             SortFilter(),
             Demographic(),
+            PublicationStatus(),
             OriginalLanguage(),
             ContentList(getContentList()),
             FormatList(getFormatList()),
             GenreList(getGenreList()),
-            ThemeList(getThemeList())
+            ThemeList(getThemeList()),
+            TagInclusionMode(),
+            TagExclusionMode()
     )
 
     private fun getContentList() = listOf(
@@ -514,12 +526,10 @@ open class Mangadex(override val lang: String, private val internalLang: String,
             Tag("2", "Action"),
             Tag("3", "Adventure"),
             Tag("5", "Comedy"),
-            Tag("6", "Cooking"),
             Tag("8", "Drama"),
             Tag("10", "Fantasy"),
             Tag("13", "Historical"),
             Tag("14", "Horror"),
-            Tag("15", "Josei"),
             Tag("17", "Mecha"),
             Tag("18", "Medical"),
             Tag("20", "Mystery"),
@@ -543,6 +553,8 @@ open class Mangadex(override val lang: String, private val internalLang: String,
     ).sortedWith(compareBy { it.name })
 
     private fun getThemeList() = listOf(
+            Tag("6", "Cooking"),
+            Tag("11", "Gyaru"),
             Tag("12", "Harem"),
             Tag("16", "Martial Arts"),
             Tag("19", "Music"),
@@ -578,6 +590,7 @@ open class Mangadex(override val lang: String, private val internalLang: String,
             Tag("83", "Incest")
     ).sortedWith(compareBy { it.name })
 
+    private val GENRES = (getContentList() + getFormatList() + getGenreList() + getThemeList()).map { it.id to it.name }.toMap()
 
     companion object {
         private val WHITESPACE_REGEX = "\\s".toRegex()
diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexLanguages.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexLanguages.kt
index ce11fb225..22f5ad4e0 100644
--- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexLanguages.kt
+++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexLanguages.kt
@@ -11,12 +11,13 @@ class MangaDexGerman : Mangadex("de", "de", 8)
 class MangaDexFrench : Mangadex("fr", "fr", 10)
 class MangaDexVietnamese : Mangadex("vi", "vn", 12)
 class MangaDexSpanishSpain : Mangadex("es", "es", 15)
-class MangaDexPortuguese : Mangadex("pt", "br", 16)
+class MangaDexSpanishLTAM : Mangadex("es-419", "mx", 29)
+class MangaDexCatalan : Mangadex("ca", "ct", 33)
+class MangaDexPortuguesePortugal : Mangadex("pt", "pt", 17)
+class MangaDexPortugueseBrazil : Mangadex("pt-BR", "br", 16)
 class MangaDexSwedish : Mangadex("sv", "se", 18)
 class MangaDexTurkish : Mangadex("tr", "tr", 26)
 class MangaDexIndonesian : Mangadex("id", "id", 27)
-class MangaDexSpanishLTAM : Mangadex("es-419", "mx", 29)
-class MangaDexCatalan : Mangadex("ca", "ct", 33)
 class MangaDexHungarian : Mangadex("hu", "hu", 9)
 class MangaDexBulgarian : Mangadex("bg", "bg", 14)
 class MangaDexFilipino : Mangadex("fil", "ph", 34)
@@ -24,7 +25,22 @@ class MangaDexDutch : Mangadex("nl", "nl", 5)
 class MangaDexArabic : Mangadex("ar", "sa", 19)
 class MangaDexChineseSimp : Mangadex("zh-Hans", "cn", 21)
 class MangaDexChineseTrad : Mangadex("zh-Hant", "hk", 35)
-class MangaDexThai: Mangadex("th", "th", 32)
+class MangaDexThai : Mangadex("th", "th", 32)
+class MangaDexBengali : Mangadex("bn", "bd", 22)
+class MangaDexBurmese : Mangadex("my", "mm", 37)
+class MangaDexCzech : Mangadex("cs", "cz", 24)
+class MangaDexDanish : Mangadex("da", "dk", 20)
+class MangaDexFinnish : Mangadex("fi", "fi", 11)
+class MangaDexGreek : Mangadex("el", "gr", 13)
+class MangaDexJapanese : Mangadex("ja", "jp", 2)
+class MangaDexKorean : Mangadex("ko", "kr", 28)
+class MangaDexLithuanian : Mangadex("lt", "lt", 38)
+class MangaDexMalay : Mangadex("ms", "my", 31)
+class MangaDexMongolian : Mangadex("mn", "mn", 25)
+class MangaDexPersian : Mangadex("fa", "ir", 30)
+class MangaDexRomanian : Mangadex("ro", "ro", 23)
+class MangaDexSerboCroatian : Mangadex("sh", "rs", 4)
+class MangaDexUkrainian : Mangadex("uk", "ua", 36)
 
 fun getAllMangaDexLanguages() = listOf(
         MangaDexEnglish(),
@@ -35,12 +51,13 @@ fun getAllMangaDexLanguages() = listOf(
         MangaDexFrench(),
         MangaDexVietnamese(),
         MangaDexSpanishSpain(),
-        MangaDexPortuguese(),
+        MangaDexSpanishLTAM(),
+        MangaDexCatalan(),
+        MangaDexPortuguesePortugal(),
+        MangaDexPortugueseBrazil(),
         MangaDexSwedish(),
         MangaDexTurkish(),
         MangaDexIndonesian(),
-        MangaDexSpanishLTAM(),
-        MangaDexCatalan(),
         MangaDexHungarian(),
         MangaDexBulgarian(),
         MangaDexFilipino(),
@@ -48,5 +65,20 @@ fun getAllMangaDexLanguages() = listOf(
         MangaDexArabic(),
         MangaDexChineseSimp(),
         MangaDexChineseTrad(),
-        MangaDexThai()
-)
\ No newline at end of file
+        MangaDexThai(),
+        MangaDexBengali(),
+        MangaDexBurmese(),
+        MangaDexCzech(),
+        MangaDexDanish(),
+        MangaDexFinnish(),
+        MangaDexGreek(),
+        MangaDexJapanese(),
+        MangaDexKorean(),
+        MangaDexLithuanian(),
+        MangaDexMalay(),
+        MangaDexMongolian(),
+        MangaDexPersian(),
+        MangaDexRomanian(),
+        MangaDexSerboCroatian(),
+        MangaDexUkrainian()
+)