diff --git a/src/all/wpcomics/build.gradle b/src/all/wpcomics/build.gradle
index 6b21872df..884294c9b 100644
--- a/src/all/wpcomics/build.gradle
+++ b/src/all/wpcomics/build.gradle
@@ -5,7 +5,7 @@ ext {
     appName = 'Tachiyomi: WP-Comics'
     pkgNameSuffix = 'all.wpcomics'
     extClass = '.WPComicsFactory'
-    extVersionCode = 2
+    extVersionCode = 3
     libVersion = '1.2'
 }
 
diff --git a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt
index 74bd321fe..771679fd0 100644
--- a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt
+++ b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComics.kt
@@ -44,7 +44,7 @@ abstract class WPComics(
         }
     }
 
-    override fun popularMangaNextPageSelector() = "a.next-page"
+    override fun popularMangaNextPageSelector() = "a.next-page, a[rel=next]"
 
     // Latest
 
@@ -137,10 +137,19 @@ abstract class WPComics(
 
     // sources sometimes have an image element with an empty attr that isn't really an image
     private fun imageOrNull(element: Element): String? {
+        fun Element.hasValidAttr(attr: String): Boolean {
+            val regex = Regex("""https?://.*""", RegexOption.IGNORE_CASE)
+            return when {
+                this.attr(attr).isNullOrBlank() -> false
+                this.attr("abs:$attr").matches(regex) -> true
+                else -> false
+            }
+        }
+
         return when {
-            element.attr("data-original").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:data-original")
-            element.attr("data-src").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:data-src")
-            element.attr("src").contains(Regex("""\.(jpg|png)""", RegexOption.IGNORE_CASE)) -> element.attr("abs:src")
+            element.hasValidAttr("data-original") -> element.attr("abs:data-original")
+            element.hasValidAttr("data-src") -> element.attr("abs:data-src")
+            element.hasValidAttr("src") -> element.attr("abs:src")
             else -> null
         }
     }
diff --git a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt
index b36603675..a594dbedd 100644
--- a/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt
+++ b/src/all/wpcomics/src/eu/kanade/tachiyomi/extension/all/wpcomics/WPComicsFactory.kt
@@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceFactory
 import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import okhttp3.Request
 import org.jsoup.nodes.Element
@@ -14,7 +15,8 @@ class WPComicsFactory : SourceFactory {
     override fun createSources(): List<Source> = listOf(
         ManhuaPlus(),
         ManhuaES(),
-        MangaSum()
+        MangaSum(),
+        XoxoComics()
     )
 }
 
@@ -53,3 +55,21 @@ private class MangaSum : WPComics("MangaSum", "https://mangasum.com", "en", Simp
      * and MM/dd/yy; see about getting all 3 working (currently at 2/3)
      */
 }
+
+private class XoxoComics : WPComics("XOXO Comics", "https://xoxocomics.com", "en", SimpleDateFormat("MM/dd/yy", Locale.US), null) {
+    override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/comic-updates?page=$page", headers)
+    override fun latestUpdatesSelector() = "li.row"
+    override fun latestUpdatesFromElement(element: Element): SManga {
+        return SManga.create().apply {
+            element.select("h3 a").let {
+                title = it.text()
+                setUrlWithoutDomain(it.attr("href"))
+            }
+            thumbnail_url = element.select("img").attr("data-original")
+        }
+    }
+    override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+        return GET("$baseUrl/search?keyword=$query&page=$page", headers)
+    }
+    override fun pageListRequest(chapter: SChapter): Request = GET(baseUrl + "${chapter.url}/all")
+}