diff --git a/multisrc/overrides/gattsu/universohentai/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/gattsu/universohentai/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..c1b123201
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/gattsu/universohentai/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..641fa93cb
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/gattsu/universohentai/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..0612ac358
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/gattsu/universohentai/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..8175ce30f
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/gattsu/universohentai/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..33c0d4b0a
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/res/web_hi_res_512.png b/multisrc/overrides/gattsu/universohentai/res/web_hi_res_512.png
new file mode 100644
index 000000000..9ea229683
Binary files /dev/null and b/multisrc/overrides/gattsu/universohentai/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/gattsu/universohentai/src/UniversoHentai.kt b/multisrc/overrides/gattsu/universohentai/src/UniversoHentai.kt
new file mode 100644
index 000000000..2a34f5790
--- /dev/null
+++ b/multisrc/overrides/gattsu/universohentai/src/UniversoHentai.kt
@@ -0,0 +1,69 @@
+package eu.kanade.tachiyomi.extension.pt.universohentai
+
+import eu.kanade.tachiyomi.annotations.Nsfw
+import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
+import eu.kanade.tachiyomi.multisrc.gattsu.Gattsu
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.OkHttpClient
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import java.util.concurrent.TimeUnit
+
+@Nsfw
+class UniversoHentai : Gattsu(
+    "Universo Hentai",
+    "https://universohentai.com",
+    "pt-BR"
+) {
+
+    override val client: OkHttpClient = super.client.newBuilder()
+        .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
+        .build()
+
+    override fun latestUpdatesSelector() = "div.meio div.videos div.video a[href^=$baseUrl]:not(:has(span.selo-hd))"
+
+    override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
+        title = element.selectFirst("span.video-titulo").text().trim()
+        thumbnail_url = element.selectFirst("img.wp-post-image").attr("src")
+        setUrlWithoutDomain(element.attr("href"))
+    }
+
+    override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector()
+
+    override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+        val postBox = document.selectFirst(chapterListSelector())!!
+
+        title = postBox.select("h1.post-titulo").first()!!.text()
+        author = postBox.select("ul.paginaPostItens li:contains(Artista) a").firstOrNull()?.text()
+        genre = postBox.select("ul.paginaPostItens li:contains(Categorias) a")
+            .joinToString(", ") { it.text() }
+        status = SManga.COMPLETED
+        thumbnail_url = postBox.select("div.paginaPostThumb > img.wp-post-image")
+            .attr("src")
+            .withoutSize()
+    }
+
+    override fun chapterListParse(response: Response): List<SChapter> {
+        val document = response.asJsoup()
+
+        return document.select(chapterListSelector())
+            .map { chapterFromElement(it) }
+    }
+
+    override fun chapterListSelector() = "div.meio div.post[itemscope]:has(a[title=Abrir galeria])"
+
+    override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+        name = "CapĂ­tulo Ășnico"
+        scanlator = element.select("ul.paginaPostItens li:contains(Tradutor) a").firstOrNull()?.text()
+        date_upload = element.ownerDocument().select("meta[property=article:published_time]").firstOrNull()
+            ?.attr("content")
+            .orEmpty()
+            .toDate()
+        setUrlWithoutDomain(element.selectFirst("a[title=Abrir galeria]").attr("href"))
+    }
+
+    override fun pageListSelector() = "div.meio div.galeria div.galeria-foto a img"
+}
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/Gattsu.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/Gattsu.kt
index a36ec3e86..24a06b050 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/Gattsu.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/Gattsu.kt
@@ -129,7 +129,7 @@ abstract class Gattsu(
         return GET(page.imageUrl!!, imageHeaders)
     }
 
-    private fun String.toDate(): Long {
+    protected fun String.toDate(): Long {
         return try {
             DATE_FORMATTER.parse(this.substringBefore("T"))?.time ?: 0L
         } catch (e: ParseException) {
@@ -137,7 +137,7 @@ abstract class Gattsu(
         }
     }
 
-    private fun String.withoutSize(): String = this.replace(THUMB_SIZE_REGEX, ".")
+    protected fun String.withoutSize(): String = this.replace(THUMB_SIZE_REGEX, ".")
 
     companion object {
         private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," +
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/GattsuGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/GattsuGenerator.kt
index 10b51567d..7f1f08fbb 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/GattsuGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/gattsu/GattsuGenerator.kt
@@ -13,7 +13,8 @@ class GattsuGenerator : ThemeSourceGenerator {
 
     override val sources = listOf(
     	SingleLang("Hentai Kai", "https://hentaikai.com", "pt-BR", isNsfw = true),
-    	SingleLang("Hentai Season", "https://hentaiseason.com", "pt-BR", isNsfw = true)
+    	SingleLang("Hentai Season", "https://hentaiseason.com", "pt-BR", isNsfw = true),
+        SingleLang("Universo Hentai", "https://universohentai.com", "pt-BR", isNsfw = true)
     )
 
     companion object {