diff --git a/src/tr/MangaDenizi/build.gradle b/src/tr/MangaDenizi/build.gradle
new file mode 100644
index 000000000..de26d4573
--- /dev/null
+++ b/src/tr/MangaDenizi/build.gradle
@@ -0,0 +1,12 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+
+ext {
+    appName = 'Tachiyomi: MangaDenizi'
+    pkgNameSuffix = 'tr.mangadenizi'
+    extClass = '.MangaDenizi'
+    extVersionCode = 1
+    libVersion = '1.2'
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/tr/MangaDenizi/res/mipmap-hdpi/ic_launcher.png b/src/tr/MangaDenizi/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..412911dd1
Binary files /dev/null and b/src/tr/MangaDenizi/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/src/tr/MangaDenizi/res/mipmap-mdpi/ic_launcher.png b/src/tr/MangaDenizi/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..e1223d1be
Binary files /dev/null and b/src/tr/MangaDenizi/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/src/tr/MangaDenizi/res/mipmap-xhdpi/ic_launcher.png b/src/tr/MangaDenizi/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..7cbfcdd5b
Binary files /dev/null and b/src/tr/MangaDenizi/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/src/tr/MangaDenizi/res/mipmap-xxhdpi/ic_launcher.png b/src/tr/MangaDenizi/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2ae5244d8
Binary files /dev/null and b/src/tr/MangaDenizi/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/src/tr/MangaDenizi/res/mipmap-xxxhdpi/ic_launcher.png b/src/tr/MangaDenizi/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0b07b8fef
Binary files /dev/null and b/src/tr/MangaDenizi/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/tr/MangaDenizi/res/web_hi_res_512.png b/src/tr/MangaDenizi/res/web_hi_res_512.png
new file mode 100644
index 000000000..35a3ebe62
Binary files /dev/null and b/src/tr/MangaDenizi/res/web_hi_res_512.png differ
diff --git a/src/tr/MangaDenizi/src/eu/kanade/tachiyomi/extension/tr/mangadenizi/MangaDenizi.kt b/src/tr/MangaDenizi/src/eu/kanade/tachiyomi/extension/tr/mangadenizi/MangaDenizi.kt
new file mode 100644
index 000000000..21b4135ae
--- /dev/null
+++ b/src/tr/MangaDenizi/src/eu/kanade/tachiyomi/extension/tr/mangadenizi/MangaDenizi.kt
@@ -0,0 +1,134 @@
+package eu.kanade.tachiyomi.extension.tr.mangadenizi
+
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.MangasPage
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.source.online.ParsedHttpSource
+import eu.kanade.tachiyomi.util.asJsoup
+import java.text.SimpleDateFormat
+import okhttp3.OkHttpClient
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import org.json.JSONArray
+import org.json.JSONObject
+
+class MangaDenizi : ParsedHttpSource() {
+    override val name = "MangaDenizi"
+
+    override val baseUrl = "https://mangadenizi.com"
+
+    override val lang = "tr"
+
+    override val supportsLatest = true
+
+    override val client = network.cloudflareClient
+
+    override fun popularMangaSelector() = "div.media-left"
+
+    override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga-list?page=$page", headers)
+
+    override fun popularMangaFromElement(element: Element) = SManga.create().apply {
+        setUrlWithoutDomain(element.select("a").attr("href"))
+        title = element.select("img").attr("alt")
+        thumbnail_url = element.select("img").attr("abs:src")
+    }
+
+    override fun popularMangaNextPageSelector() = "[rel=next]"
+
+    override fun latestUpdatesSelector() = "h3 > a"
+
+    override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/latest-release?page=$page", headers)
+
+    //No thumbnail on latest releases page
+    override fun latestUpdatesFromElement(element: Element) = SManga.create().apply {
+        setUrlWithoutDomain(element.attr("href"))
+        title = element.text()
+    }
+
+    override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
+
+    override fun latestUpdatesParse(response: Response): MangasPage {
+        val document = response.asJsoup()
+        val mangas = document.select(latestUpdatesSelector())
+            .distinctBy { it.text().trim() }
+            .map { latestUpdatesFromElement(it) }
+        val hasNextPage = latestUpdatesNextPageSelector().let { selector ->
+            document.select(selector).first()
+        } != null
+
+        return MangasPage(mangas, hasNextPage)
+    }
+
+    override fun searchMangaSelector() = "Unused"
+
+    override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/search?query=$query", headers)
+
+    override fun searchMangaNextPageSelector() = "Unused"
+    override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException("Unused")
+
+    override fun searchMangaParse(response: Response): MangasPage {
+        val res = response.body()!!.string()
+        return getMangasPage(res)
+    }
+
+    private fun getMangasPage(json: String): MangasPage {
+        val response = JSONObject(json)
+        val results = response.getJSONArray("suggestions")
+        val mangas = ArrayList<SManga>()
+
+        //No thumbnail here either
+        for (i in 0 until results.length()) {
+            val obj = results.getJSONObject(i)
+            val manga = SManga.create()
+            manga.title = obj.getString("value")
+            manga.url = "/manga/${obj.getString("data")}"
+            mangas.add(manga)
+        }
+
+        return MangasPage(mangas, false)
+    }
+
+    override fun mangaDetailsParse(document: Document) = SManga.create().apply {
+        description = document.select(".well > p").text()
+        genre = document.select("dd > a[href*=category]").joinToString { it.text() }
+        status = document.select(".label.label-success").let {
+            parseStatus(it.text())
+        }
+        thumbnail_url = document.select("img.img-responsive").attr("src")
+    }
+
+    private fun parseStatus(status: String) = when {
+        status.contains("Devam Ediyor") -> SManga.ONGOING
+        status.contains("Tamamlandı") -> SManga.COMPLETED
+        else -> SManga.UNKNOWN
+    }
+
+    override fun chapterListSelector() = "ul.chapters li"
+
+    override fun chapterFromElement(element: Element) = SChapter.create().apply {
+        setUrlWithoutDomain(element.select("a").attr("href"))
+        name = "${element.select("a").text()}: ${element.select("em").text()}"
+        date_upload = dateFormat.parse(element.select("div.date-chapter-title-rtl").text().trim()).time ?: 0
+    }
+
+    companion object {
+        val dateFormat by lazy {
+            SimpleDateFormat("dd MMM. yyyy")
+        }
+    }
+
+    override fun pageListParse(document: Document): List<Page> {
+        return document.select("img.img-responsive").mapIndexed { i, element ->
+            val url = if (element.hasAttr("data-src")) element.attr("abs:data-src") else element.attr("abs:src")
+            Page(i, "", url)
+        }
+    }
+
+    override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used")
+
+    override fun getFilterList() = FilterList()
+}