diff --git a/lib-multisrc/bakkin/build.gradle.kts b/lib-multisrc/bakkin/build.gradle.kts
index ede652be5..f0ad544d5 100644
--- a/lib-multisrc/bakkin/build.gradle.kts
+++ b/lib-multisrc/bakkin/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 6
+baseVersionCode = 7
diff --git a/lib-multisrc/bakkin/src/eu/kanade/tachiyomi/multisrc/bakkin/BakkinReaderX.kt b/lib-multisrc/bakkin/src/eu/kanade/tachiyomi/multisrc/bakkin/BakkinReaderX.kt
index dc89a458a..dba0c5b9c 100644
--- a/lib-multisrc/bakkin/src/eu/kanade/tachiyomi/multisrc/bakkin/BakkinReaderX.kt
+++ b/lib-multisrc/bakkin/src/eu/kanade/tachiyomi/multisrc/bakkin/BakkinReaderX.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.bakkin
 
-import android.app.Application
 import android.os.Build
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -14,6 +13,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromJsonElement
 import kotlinx.serialization.json.jsonObject
@@ -33,9 +33,7 @@ abstract class BakkinReaderX(
         "Android ${Build.VERSION.RELEASE}; Mobile) " +
         "Tachiyomi/${AppInfo.getVersionName()}"
 
-    protected val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    protected val preferences by getPreferencesLazy()
 
     private val json by lazy { Injekt.get<Json>() }
 
diff --git a/lib-multisrc/colamanga/build.gradle.kts b/lib-multisrc/colamanga/build.gradle.kts
index 32aad01eb..b736bb247 100644
--- a/lib-multisrc/colamanga/build.gradle.kts
+++ b/lib-multisrc/colamanga/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 7
+baseVersionCode = 8
 
 dependencies {
     api(project(":lib:synchrony"))
diff --git a/lib-multisrc/colamanga/src/eu/kanade/tachiyomi/multisrc/colamanga/ColaManga.kt b/lib-multisrc/colamanga/src/eu/kanade/tachiyomi/multisrc/colamanga/ColaManga.kt
index 6d7b9ed5b..b531789b7 100644
--- a/lib-multisrc/colamanga/src/eu/kanade/tachiyomi/multisrc/colamanga/ColaManga.kt
+++ b/lib-multisrc/colamanga/src/eu/kanade/tachiyomi/multisrc/colamanga/ColaManga.kt
@@ -19,6 +19,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.jsonArray
 import kotlinx.serialization.json.jsonObject
@@ -46,9 +47,7 @@ abstract class ColaManga(
 
     private val intl = ColaMangaIntl(lang)
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient.newBuilder()
         .rateLimitHost(
diff --git a/lib-multisrc/foolslide/build.gradle.kts b/lib-multisrc/foolslide/build.gradle.kts
index e2f11e9c1..6e70fd158 100644
--- a/lib-multisrc/foolslide/build.gradle.kts
+++ b/lib-multisrc/foolslide/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 3
+baseVersionCode = 4
diff --git a/lib-multisrc/foolslide/src/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlide.kt b/lib-multisrc/foolslide/src/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlide.kt
index 34eacf257..2afd55562 100644
--- a/lib-multisrc/foolslide/src/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlide.kt
+++ b/lib-multisrc/foolslide/src/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlide.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.foolslide
 
-import android.app.Application
 import androidx.preference.CheckBoxPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
@@ -12,6 +11,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.jsonArray
 import kotlinx.serialization.json.jsonObject
@@ -273,9 +273,7 @@ abstract class FoolSlide(
 
     override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
 
-    protected val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    protected val preferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         CheckBoxPreference(screen.context).apply {
diff --git a/lib-multisrc/galleryadults/build.gradle.kts b/lib-multisrc/galleryadults/build.gradle.kts
index 6e70fd158..b45873b53 100644
--- a/lib-multisrc/galleryadults/build.gradle.kts
+++ b/lib-multisrc/galleryadults/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 4
+baseVersionCode = 5
diff --git a/lib-multisrc/galleryadults/src/eu/kanade/tachiyomi/multisrc/galleryadults/GalleryAdults.kt b/lib-multisrc/galleryadults/src/eu/kanade/tachiyomi/multisrc/galleryadults/GalleryAdults.kt
index 6a23b9922..ee9cadc83 100644
--- a/lib-multisrc/galleryadults/src/eu/kanade/tachiyomi/multisrc/galleryadults/GalleryAdults.kt
+++ b/lib-multisrc/galleryadults/src/eu/kanade/tachiyomi/multisrc/galleryadults/GalleryAdults.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.galleryadults
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.preference.PreferenceScreen
@@ -18,6 +17,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.ParsedHttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
@@ -36,8 +36,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 
@@ -56,9 +54,7 @@ abstract class GalleryAdults(
         .build()
 
     /* Preferences */
-    protected val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    protected val preferences: SharedPreferences by getPreferencesLazy()
 
     protected open val useShortTitlePreference = true
 
diff --git a/lib-multisrc/grouple/build.gradle.kts b/lib-multisrc/grouple/build.gradle.kts
index 2fc011acf..87841af2c 100644
--- a/lib-multisrc/grouple/build.gradle.kts
+++ b/lib-multisrc/grouple/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 30
+baseVersionCode = 31
diff --git a/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt b/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt
index 4d92a8295..4c525ad28 100644
--- a/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt
+++ b/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.grouple
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import eu.kanade.tachiyomi.network.GET
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -22,8 +22,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import java.text.DecimalFormat
 import java.text.ParseException
@@ -37,9 +35,7 @@ abstract class GroupLe(
     final override val lang: String,
 ) : ConfigurableSource, ParsedHttpSource() {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val supportsLatest = true
 
diff --git a/lib-multisrc/guya/build.gradle.kts b/lib-multisrc/guya/build.gradle.kts
index b45873b53..ede652be5 100644
--- a/lib-multisrc/guya/build.gradle.kts
+++ b/lib-multisrc/guya/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 5
+baseVersionCode = 6
diff --git a/lib-multisrc/guya/src/eu/kanade/tachiyomi/multisrc/guya/Guya.kt b/lib-multisrc/guya/src/eu/kanade/tachiyomi/multisrc/guya/Guya.kt
index 605a279ec..3427d48e6 100644
--- a/lib-multisrc/guya/src/eu/kanade/tachiyomi/multisrc/guya/Guya.kt
+++ b/lib-multisrc/guya/src/eu/kanade/tachiyomi/multisrc/guya/Guya.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.guya
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.os.Build
 import androidx.preference.ListPreference
@@ -16,6 +15,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.Request
 import okhttp3.Response
@@ -25,8 +25,6 @@ import org.jsoup.Jsoup
 import org.jsoup.select.Evaluator
 import rx.Observable
 import rx.schedulers.Schedulers
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 abstract class Guya(
     override val name: String,
@@ -48,9 +46,7 @@ abstract class Guya(
     private val scanlators: ScanlatorStore = ScanlatorStore()
 
     // Preferences configuration
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     // Request builder for the "browse" page of the manga
     override fun popularMangaRequest(page: Int): Request {
diff --git a/lib-multisrc/heancms/build.gradle.kts b/lib-multisrc/heancms/build.gradle.kts
index ac3762176..73f9e980b 100644
--- a/lib-multisrc/heancms/build.gradle.kts
+++ b/lib-multisrc/heancms/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 28
+baseVersionCode = 29
 
 dependencies {
     api(project(":lib:i18n"))
diff --git a/lib-multisrc/heancms/src/eu/kanade/tachiyomi/multisrc/heancms/HeanCms.kt b/lib-multisrc/heancms/src/eu/kanade/tachiyomi/multisrc/heancms/HeanCms.kt
index cd1be5660..41355a9a2 100644
--- a/lib-multisrc/heancms/src/eu/kanade/tachiyomi/multisrc/heancms/HeanCms.kt
+++ b/lib-multisrc/heancms/src/eu/kanade/tachiyomi/multisrc/heancms/HeanCms.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.heancms
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -26,8 +26,6 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import kotlin.concurrent.thread
@@ -39,9 +37,7 @@ abstract class HeanCms(
     protected val apiUrl: String = baseUrl.replace("://", "://api."),
 ) : ConfigurableSource, HttpSource() {
 
-    protected val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    protected val preferences: SharedPreferences by getPreferencesLazy()
 
     override val supportsLatest = true
 
diff --git a/lib-multisrc/hentaihand/build.gradle.kts b/lib-multisrc/hentaihand/build.gradle.kts
index 9dce2478c..e2f11e9c1 100644
--- a/lib-multisrc/hentaihand/build.gradle.kts
+++ b/lib-multisrc/hentaihand/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 2
+baseVersionCode = 3
diff --git a/lib-multisrc/hentaihand/src/eu/kanade/tachiyomi/multisrc/hentaihand/HentaiHand.kt b/lib-multisrc/hentaihand/src/eu/kanade/tachiyomi/multisrc/hentaihand/HentaiHand.kt
index 3c9896bae..0e786fe81 100644
--- a/lib-multisrc/hentaihand/src/eu/kanade/tachiyomi/multisrc/hentaihand/HentaiHand.kt
+++ b/lib-multisrc/hentaihand/src/eu/kanade/tachiyomi/multisrc/hentaihand/HentaiHand.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.hentaihand
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.text.InputType
 import android.widget.Toast
@@ -16,6 +15,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
 import kotlinx.serialization.json.buildJsonObject
@@ -32,8 +32,6 @@ import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
 import rx.Observable
 import rx.schedulers.Schedulers
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.text.SimpleDateFormat
@@ -318,9 +316,7 @@ abstract class HentaiHand(
 
     // Preferences
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         screen.addPreference(screen.editTextPreference(USERNAME_TITLE, USERNAME_DEFAULT, username))
diff --git a/lib-multisrc/kemono/build.gradle.kts b/lib-multisrc/kemono/build.gradle.kts
index 92c1c905d..ed1c83ed6 100644
--- a/lib-multisrc/kemono/build.gradle.kts
+++ b/lib-multisrc/kemono/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 18
+baseVersionCode = 19
diff --git a/lib-multisrc/kemono/src/eu/kanade/tachiyomi/multisrc/kemono/Kemono.kt b/lib-multisrc/kemono/src/eu/kanade/tachiyomi/multisrc/kemono/Kemono.kt
index 58a5f05af..2991ca8ec 100644
--- a/lib-multisrc/kemono/src/eu/kanade/tachiyomi/multisrc/kemono/Kemono.kt
+++ b/lib-multisrc/kemono/src/eu/kanade/tachiyomi/multisrc/kemono/Kemono.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.kemono
 
-import android.app.Application
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -15,13 +14,12 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.lang.Thread.sleep
 import java.util.TimeZone
@@ -41,8 +39,7 @@ open class Kemono(
 
     private val json: Json by injectLazy()
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     private val apiPath = "api/v1"
 
diff --git a/lib-multisrc/keyoapp/build.gradle.kts b/lib-multisrc/keyoapp/build.gradle.kts
index 1c3344942..2dc006287 100644
--- a/lib-multisrc/keyoapp/build.gradle.kts
+++ b/lib-multisrc/keyoapp/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 13
+baseVersionCode = 14
 
 dependencies {
     api(project(":lib:i18n"))
diff --git a/lib-multisrc/keyoapp/src/eu/kanade/tachiyomi/multisrc/keyoapp/Keyoapp.kt b/lib-multisrc/keyoapp/src/eu/kanade/tachiyomi/multisrc/keyoapp/Keyoapp.kt
index d98bf1380..6d0a93f6a 100644
--- a/lib-multisrc/keyoapp/src/eu/kanade/tachiyomi/multisrc/keyoapp/Keyoapp.kt
+++ b/lib-multisrc/keyoapp/src/eu/kanade/tachiyomi/multisrc/keyoapp/Keyoapp.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.keyoapp
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -15,6 +14,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -23,8 +23,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.ParseException
 import java.text.SimpleDateFormat
@@ -37,9 +35,7 @@ abstract class Keyoapp(
     final override val lang: String,
 ) : ParsedHttpSource(), ConfigurableSource {
 
-    protected val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    protected val preferences: SharedPreferences by getPreferencesLazy()
 
     override val supportsLatest = true
 
diff --git a/lib-multisrc/libgroup/build.gradle.kts b/lib-multisrc/libgroup/build.gradle.kts
index 8577219f5..90ef7b652 100644
--- a/lib-multisrc/libgroup/build.gradle.kts
+++ b/lib-multisrc/libgroup/build.gradle.kts
@@ -2,4 +2,4 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 35
+baseVersionCode = 36
diff --git a/lib-multisrc/libgroup/src/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt b/lib-multisrc/libgroup/src/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
index 937d7cb08..c35c74048 100644
--- a/lib-multisrc/libgroup/src/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
+++ b/lib-multisrc/libgroup/src/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
@@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.multisrc.libgroup
 
 import android.annotation.SuppressLint
 import android.app.Application
-import android.content.SharedPreferences
 import android.os.Handler
 import android.os.Looper
 import android.util.Log
@@ -24,6 +23,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -57,9 +57,10 @@ abstract class LibGroup(
         encodeDefaults = true
     }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-            .migrateOldImageServer()
+    private val preferences by getPreferencesLazy {
+        if (getString(SERVER_PREF, "main") == "fourth") {
+            edit().putString(SERVER_PREF, "secondary").apply()
+        }
     }
 
     override val supportsLatest = true
@@ -685,11 +686,4 @@ abstract class LibGroup(
             }
         }
     }
-
-    // api changed id of servers, remap SERVER_PREF old("fourth") to new("secondary")
-    private fun SharedPreferences.migrateOldImageServer(): SharedPreferences {
-        if (getString(SERVER_PREF, "main") != "fourth") return this
-        edit().putString(SERVER_PREF, "secondary").apply()
-        return this
-    }
 }
diff --git a/lib-multisrc/machinetranslations/build.gradle.kts b/lib-multisrc/machinetranslations/build.gradle.kts
index f700a5412..b21dd0bb4 100644
--- a/lib-multisrc/machinetranslations/build.gradle.kts
+++ b/lib-multisrc/machinetranslations/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
     id("lib-multisrc")
 }
 
-baseVersionCode = 4
+baseVersionCode = 5
 
 dependencies {
     api(project(":lib:i18n"))
diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt
index 506ed4a04..3a8bc5d2f 100644
--- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt
+++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.machinetranslations
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.os.Build
 import android.widget.Toast
@@ -20,6 +19,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -30,8 +30,6 @@ import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Calendar
@@ -51,9 +49,7 @@ abstract class MachineTranslations(
 
     override val lang = language.lang
 
-    protected val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    protected val preferences: SharedPreferences by getPreferencesLazy()
 
     /**
      * A flag that tracks whether the settings have been changed. It is used to indicate if
diff --git a/lib-multisrc/mangathemesia/src/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaAlt.kt b/lib-multisrc/mangathemesia/src/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaAlt.kt
index 1c26a123f..3378629ae 100644
--- a/lib-multisrc/mangathemesia/src/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaAlt.kt
+++ b/lib-multisrc/mangathemesia/src/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaAlt.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.multisrc.mangathemesia
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -9,6 +8,7 @@ import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.MangasPage
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.sync.Mutex
 import kotlinx.coroutines.sync.withLock
@@ -16,8 +16,6 @@ import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.lang.ref.SoftReference
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -34,14 +32,12 @@ abstract class MangaThemesiaAlt(
     protected open val listUrl = "$mangaUrlDirectory/list-mode/"
     protected open val listSelector = "div#content div.soralist ul li a.series"
 
-    protected val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000).also {
-            if (it.contains("__random_part_cache")) {
-                it.edit().remove("__random_part_cache").apply()
-            }
-            if (it.contains("titles_without_random_part")) {
-                it.edit().remove("titles_without_random_part").apply()
-            }
+    protected val preferences by getPreferencesLazy {
+        if (contains("__random_part_cache")) {
+            edit().remove("__random_part_cache").apply()
+        }
+        if (contains("titles_without_random_part")) {
+            edit().remove("titles_without_random_part").apply()
         }
     }
 
diff --git a/src/all/akuma/build.gradle b/src/all/akuma/build.gradle
index 811a85d41..c7f1bba41 100644
--- a/src/all/akuma/build.gradle
+++ b/src/all/akuma/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Akuma'
     extClass = '.AkumaFactory'
-    extVersionCode = 5
+    extVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/all/akuma/src/eu/kanade/tachiyomi/extension/all/akuma/Akuma.kt b/src/all/akuma/src/eu/kanade/tachiyomi/extension/all/akuma/Akuma.kt
index 4172dace1..18fd609d6 100644
--- a/src/all/akuma/src/eu/kanade/tachiyomi/extension/all/akuma/Akuma.kt
+++ b/src/all/akuma/src/eu/kanade/tachiyomi/extension/all/akuma/Akuma.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.akuma
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.ParsedHttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.FormBody
 import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
 import okhttp3.Interceptor
@@ -25,8 +25,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import java.text.ParseException
 import java.text.SimpleDateFormat
@@ -112,9 +110,7 @@ class Akuma(
         return storedToken!!
     }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val displayFullTitle: Boolean get() = preferences.getBoolean(PREF_TITLE, false)
 
diff --git a/src/all/batoto/build.gradle b/src/all/batoto/build.gradle
index 581a1200d..f829a1a18 100644
--- a/src/all/batoto/build.gradle
+++ b/src/all/batoto/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Bato.to'
     extClass = '.BatoToFactory'
-    extVersionCode = 48
+    extVersionCode = 49
     isNsfw = true
 }
 
diff --git a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
index 217168bcf..d0e439c15 100644
--- a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
+++ b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
@@ -20,6 +20,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
@@ -48,10 +49,7 @@ open class BatoTo(
     private val siteLang: String,
 ) : ConfigurableSource, ParsedHttpSource() {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-            .migrateMirrorPref()
-    }
+    private val preferences by getPreferencesLazy { migrateMirrorPref() }
 
     override val name: String = "Bato.to"
     override val baseUrl: String get() = mirror
@@ -125,14 +123,12 @@ open class BatoTo(
         return preferences.getBoolean("${REMOVE_TITLE_VERSION_PREF}_$lang", false)
     }
 
-    private fun SharedPreferences.migrateMirrorPref(): SharedPreferences {
+    private fun SharedPreferences.migrateMirrorPref() {
         val selectedMirror = getString("${MIRROR_PREF_KEY}_$lang", MIRROR_PREF_DEFAULT_VALUE)!!
 
         if (selectedMirror in DEPRECATED_MIRRORS) {
             edit().putString("${MIRROR_PREF_KEY}_$lang", MIRROR_PREF_DEFAULT_VALUE).commit()
         }
-
-        return this
     }
 
     override val supportsLatest = true
diff --git a/src/all/comicfury/build.gradle b/src/all/comicfury/build.gradle
index 741cf7088..2689f2746 100644
--- a/src/all/comicfury/build.gradle
+++ b/src/all/comicfury/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Comic Fury'
     extClass = '.ComicFuryFactory'
-    extVersionCode = 3
+    extVersionCode = 4
     isNsfw = true
 }
 
diff --git a/src/all/comicfury/src/eu/kanade/tachiyomi/extension/all/comicfury/ComicFury.kt b/src/all/comicfury/src/eu/kanade/tachiyomi/extension/all/comicfury/ComicFury.kt
index c4aa89b29..3458c5568 100644
--- a/src/all/comicfury/src/eu/kanade/tachiyomi/extension/all/comicfury/ComicFury.kt
+++ b/src/all/comicfury/src/eu/kanade/tachiyomi/extension/all/comicfury/ComicFury.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.comicfury
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -16,13 +15,12 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -205,9 +203,7 @@ class ComicFury(
     private fun Boolean.toInt(): Int = if (this) { 0 } else { 1 }
 
     // START OF AUTHOR NOTES //
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
     companion object {
         private const val SHOW_AUTHORS_NOTES_KEY = "showAuthorsNotes"
     }
diff --git a/src/all/comickfun/build.gradle b/src/all/comickfun/build.gradle
index 1796e90c1..155751ef8 100644
--- a/src/all/comickfun/build.gradle
+++ b/src/all/comickfun/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Comick'
     extClass = '.ComickFactory'
-    extVersionCode = 52
+    extVersionCode = 53
     isNsfw = true
 }
 
diff --git a/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/Comick.kt b/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/Comick.kt
index 808371c36..95367c24e 100644
--- a/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/Comick.kt
+++ b/src/all/comickfun/src/eu/kanade/tachiyomi/extension/all/comickfun/Comick.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.comickfun
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.ListPreference
@@ -17,6 +16,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Headers
@@ -25,8 +25,6 @@ import okhttp3.Interceptor
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.ParseException
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -65,10 +63,7 @@ abstract class Comick(
         )
     }
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-            .newLineIgnoredGroups()
-    }
+    private val preferences by getPreferencesLazy { newLineIgnoredGroups() }
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         EditTextPreference(screen.context).apply {
@@ -507,8 +502,9 @@ abstract class Comick(
 
     override fun getFilterList() = getFilters()
 
-    private fun SharedPreferences.newLineIgnoredGroups(): SharedPreferences {
-        if (getBoolean(MIGRATED_IGNORED_GROUPS, false)) return this
+    private fun SharedPreferences.newLineIgnoredGroups() {
+        if (getBoolean(MIGRATED_IGNORED_GROUPS, false)) return
+
         val ignoredGroups = getString(IGNORED_GROUPS_PREF, "").orEmpty()
 
         edit()
@@ -522,8 +518,6 @@ abstract class Comick(
             )
             .putBoolean(MIGRATED_IGNORED_GROUPS, true)
             .apply()
-
-        return this
     }
 
     companion object {
diff --git a/src/all/comicskingdom/build.gradle b/src/all/comicskingdom/build.gradle
index b2be199c5..bd2d8d126 100644
--- a/src/all/comicskingdom/build.gradle
+++ b/src/all/comicskingdom/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'ComicsKingdom'
     extClass = '.ComicsKingdomFactory'
-    extVersionCode = 1
+    extVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/comicskingdom/src/eu/kanade/tachiyomi/extension/all/comicskingdom/ComicsKingdom.kt b/src/all/comicskingdom/src/eu/kanade/tachiyomi/extension/all/comicskingdom/ComicsKingdom.kt
index 2ae2bf710..d33fde5f4 100644
--- a/src/all/comicskingdom/src/eu/kanade/tachiyomi/extension/all/comicskingdom/ComicsKingdom.kt
+++ b/src/all/comicskingdom/src/eu/kanade/tachiyomi/extension/all/comicskingdom/ComicsKingdom.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.comicskingdom
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
@@ -12,6 +11,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl
@@ -19,8 +19,6 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.Jsoup
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -301,9 +299,7 @@ class ComicsKingdom(override val lang: String) : ConfigurableSource, HttpSource(
         screen.addPreference(compactpref)
     }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private fun shouldCompact() = preferences.getBoolean("compactPref", true)
 
diff --git a/src/all/comikey/build.gradle b/src/all/comikey/build.gradle
index 7f109a60f..0ce38f18a 100644
--- a/src/all/comikey/build.gradle
+++ b/src/all/comikey/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = "Comikey"
     extClass = ".ComikeyFactory"
-    extVersionCode = 2
+    extVersionCode = 3
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/comikey/src/eu/kanade/tachiyomi/extension/all/comikey/Comikey.kt b/src/all/comikey/src/eu/kanade/tachiyomi/extension/all/comikey/Comikey.kt
index 57db395be..baa21aeb6 100644
--- a/src/all/comikey/src/eu/kanade/tachiyomi/extension/all/comikey/Comikey.kt
+++ b/src/all/comikey/src/eu/kanade/tachiyomi/extension/all/comikey/Comikey.kt
@@ -24,6 +24,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl
@@ -75,9 +76,7 @@ open class Comikey(
         classLoader = this::class.java.classLoader!!,
     )
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun popularMangaRequest(page: Int) = GET("$baseUrl/comics/?order=-views&page=$page", headers)
 
diff --git a/src/all/danbooru/src/eu/kanade/tachiyomi/extension/all/danbooru/Filters.kt b/src/all/danbooru/src/eu/kanade/tachiyomi/extension/all/danbooru/Filters.kt
index 9db604004..8cfa7fd9b 100644
--- a/src/all/danbooru/src/eu/kanade/tachiyomi/extension/all/danbooru/Filters.kt
+++ b/src/all/danbooru/src/eu/kanade/tachiyomi/extension/all/danbooru/Filters.kt
@@ -1,4 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.danbooru
+
 import eu.kanade.tachiyomi.source.model.Filter
 
 internal class FilterTags : Filter.Text("Tags")
diff --git a/src/all/deviantart/build.gradle b/src/all/deviantart/build.gradle
index 5f5fc881a..b775377c9 100644
--- a/src/all/deviantart/build.gradle
+++ b/src/all/deviantart/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'DeviantArt'
     extClass = '.DeviantArt'
-    extVersionCode = 6
+    extVersionCode = 7
     isNsfw = true
 }
 
diff --git a/src/all/deviantart/src/eu/kanade/tachiyomi/extension/all/deviantart/DeviantArt.kt b/src/all/deviantart/src/eu/kanade/tachiyomi/extension/all/deviantart/DeviantArt.kt
index e0d40adfd..228549b9a 100644
--- a/src/all/deviantart/src/eu/kanade/tachiyomi/extension/all/deviantart/DeviantArt.kt
+++ b/src/all/deviantart/src/eu/kanade/tachiyomi/extension/all/deviantart/DeviantArt.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.deviantart
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
@@ -20,8 +20,6 @@ import okhttp3.Response
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.parser.Parser
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.ParseException
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -32,9 +30,7 @@ class DeviantArt : HttpSource(), ConfigurableSource {
     override val lang = "all"
     override val supportsLatest = false
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun headersBuilder() = Headers.Builder().apply {
         add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0")
diff --git a/src/all/ehentai/build.gradle b/src/all/ehentai/build.gradle
index 8e88bbcb2..acd2151ce 100644
--- a/src/all/ehentai/build.gradle
+++ b/src/all/ehentai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'E-Hentai'
     extClass = '.EHFactory'
-    extVersionCode = 24
+    extVersionCode = 25
     isNsfw = true
 }
 
diff --git a/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt b/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt
index c6fda90b8..cbf909ca3 100644
--- a/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt
+++ b/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.all.ehentai
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.content.SharedPreferences
 import android.net.Uri
 import android.webkit.CookieManager
@@ -23,6 +22,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.CacheControl
 import okhttp3.CookieJar
 import okhttp3.Headers
@@ -30,8 +30,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URLEncoder
 
 abstract class EHentai(
@@ -41,9 +39,7 @@ abstract class EHentai(
 
     override val name = "E-Hentai"
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val webViewCookieManager: CookieManager by lazy { CookieManager.getInstance() }
     private val memberId: String by lazy { getMemberIdPref() }
diff --git a/src/all/galaxy/build.gradle b/src/all/galaxy/build.gradle
index 3f8f966ae..4be47e5a8 100644
--- a/src/all/galaxy/build.gradle
+++ b/src/all/galaxy/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Galaxy'
     extClass = '.GalaxyFactory'
-    extVersionCode = 4
+    extVersionCode = 5
     isNsfw = false
 }
 
diff --git a/src/all/galaxy/src/eu/kanade/tachiyomi/extension/all/galaxy/GalaxyFactory.kt b/src/all/galaxy/src/eu/kanade/tachiyomi/extension/all/galaxy/GalaxyFactory.kt
index a2e2a162d..fae762902 100644
--- a/src/all/galaxy/src/eu/kanade/tachiyomi/extension/all/galaxy/GalaxyFactory.kt
+++ b/src/all/galaxy/src/eu/kanade/tachiyomi/extension/all/galaxy/GalaxyFactory.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.all.galaxy
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.SourceFactory
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class GalaxyFactory : SourceFactory {
 
@@ -22,9 +20,7 @@ class GalaxyFactory : SourceFactory {
 
         override val baseUrl by lazy { getPrefBaseUrl() }
 
-        private val preferences: SharedPreferences by lazy {
-            Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-        }
+        private val preferences: SharedPreferences by getPreferencesLazy()
 
         companion object {
             private const val RESTART_APP = ".لتطبيق الإعدادات الجديدة أعد تشغيل التطبيق"
diff --git a/src/all/hentai3/build.gradle b/src/all/hentai3/build.gradle
index a237e848a..340705425 100644
--- a/src/all/hentai3/build.gradle
+++ b/src/all/hentai3/build.gradle
@@ -1,8 +1,8 @@
-ext {
-    extName = '3Hentai'
-    extClass = '.Hentai3Factory'
-    extVersionCode = 1
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = '3Hentai'
+    extClass = '.Hentai3Factory'
+    extVersionCode = 1
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3.kt b/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3.kt
index 4293ede51..bbd4037dd 100644
--- a/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3.kt
+++ b/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.hentai3
-
+
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.MangasPage
diff --git a/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3Filters.kt b/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3Filters.kt
index d0497305b..10a99f811 100644
--- a/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3Filters.kt
+++ b/src/all/hentai3/src/eu/kanade/tachiyomi/extension/all/hentai3/Hentai3Filters.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.hentai3
-
+
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 
diff --git a/src/all/hentaiera/build.gradle b/src/all/hentaiera/build.gradle
index 685a01bc1..9be2fc767 100644
--- a/src/all/hentaiera/build.gradle
+++ b/src/all/hentaiera/build.gradle
@@ -1,10 +1,10 @@
-ext {
-    extName = 'HentaiEra'
-    extClass = '.HentaiEraFactory'
-    themePkg = 'galleryadults'
-    baseUrl = 'https://hentaiera.com'
-    overrideVersionCode = 1
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'HentaiEra'
+    extClass = '.HentaiEraFactory'
+    themePkg = 'galleryadults'
+    baseUrl = 'https://hentaiera.com'
+    overrideVersionCode = 1
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEra.kt b/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEra.kt
index 80c181496..f436e13e8 100644
--- a/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEra.kt
+++ b/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEra.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.hentaiera
-
+
 import eu.kanade.tachiyomi.multisrc.galleryadults.GalleryAdults
 import eu.kanade.tachiyomi.multisrc.galleryadults.Genre
 import eu.kanade.tachiyomi.multisrc.galleryadults.SearchFlagFilter
diff --git a/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEraFactory.kt b/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEraFactory.kt
index 332b271a2..9e69e6edc 100644
--- a/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEraFactory.kt
+++ b/src/all/hentaiera/src/eu/kanade/tachiyomi/extension/all/hentaiera/HentaiEraFactory.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.hentaiera
-
+
 import eu.kanade.tachiyomi.multisrc.galleryadults.GalleryAdults
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceFactory
diff --git a/src/all/hitomi/build.gradle b/src/all/hitomi/build.gradle
index 1b1252bc3..f62766cbd 100644
--- a/src/all/hitomi/build.gradle
+++ b/src/all/hitomi/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Hitomi'
     extClass = '.HitomiFactory'
-    extVersionCode = 36
+    extVersionCode = 37
     isNsfw = true
 }
 
diff --git a/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt b/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt
index b76e34c85..0f6c9c6f6 100644
--- a/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt
+++ b/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.hitomi
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.preference.ListPreference
@@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.async
 import kotlinx.coroutines.awaitAll
 import kotlinx.coroutines.coroutineScope
@@ -32,8 +32,6 @@ import okhttp3.Response
 import okhttp3.ResponseBody.Companion.toResponseBody
 import okhttp3.internal.http2.StreamResetException
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.nio.ByteBuffer
 import java.nio.ByteOrder
@@ -74,9 +72,7 @@ class Hitomi(
         }
         .build()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
     private fun imageType() = preferences.getString(PREF_IMAGETYPE, "webp")!!
 
     override fun headersBuilder() = super.headersBuilder()
diff --git a/src/all/izneo/build.gradle b/src/all/izneo/build.gradle
index 576a89252..6207ef0bc 100644
--- a/src/all/izneo/build.gradle
+++ b/src/all/izneo/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'izneo (webtoons)'
     extClass = '.IzneoFactory'
-    extVersionCode = 5
+    extVersionCode = 6
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/izneo/src/eu/kanade/tachiyomi/extension/all/izneo/Izneo.kt b/src/all/izneo/src/eu/kanade/tachiyomi/extension/all/izneo/Izneo.kt
index 739a8746c..e25d1a1a9 100644
--- a/src/all/izneo/src/eu/kanade/tachiyomi/extension/all/izneo/Izneo.kt
+++ b/src/all/izneo/src/eu/kanade/tachiyomi/extension/all/izneo/Izneo.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.izneo
 
-import android.app.Application
 import android.text.InputType.TYPE_CLASS_TEXT
 import android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD
 import android.util.Base64
@@ -14,6 +13,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromJsonElement
 import kotlinx.serialization.json.int
@@ -43,9 +43,7 @@ class Izneo(override val lang: String) : ConfigurableSource, HttpSource() {
 
     private val json by lazy { Injekt.get<Json>() }
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     private inline val username: String
         get() = preferences.getString("username", "")!!
diff --git a/src/all/koharu/build.gradle b/src/all/koharu/build.gradle
index a000dd3ad..ca3317aa1 100644
--- a/src/all/koharu/build.gradle
+++ b/src/all/koharu/build.gradle
@@ -1,8 +1,8 @@
-ext {
-    extName = 'SchaleNetwork'
-    extClass = '.KoharuFactory'
-    extVersionCode = 11
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'SchaleNetwork'
+    extClass = '.KoharuFactory'
+    extVersionCode = 12
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/Koharu.kt b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/Koharu.kt
index fa71cd005..642383043 100644
--- a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/Koharu.kt
+++ b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/Koharu.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.koharu
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -23,8 +23,6 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -55,9 +53,7 @@ class Koharu(
     private val shortenTitleRegex = Regex("""(\[[^]]*]|[({][^)}]*[)}])""")
     private fun String.shortenTitle() = replace(shortenTitleRegex, "").trim()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private fun quality() = preferences.getString(PREF_IMAGERES, "1280")!!
 
diff --git a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuDto.kt b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuDto.kt
index fb67dc6e9..579321ead 100644
--- a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuDto.kt
+++ b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuDto.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.koharu
-
+
 import kotlinx.serialization.Serializable
 
 @Serializable
diff --git a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFactory.kt b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFactory.kt
index 4a3edcb52..0bcdd4be5 100644
--- a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFactory.kt
+++ b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFactory.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.koharu
-
+
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceFactory
 
diff --git a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFilters.kt b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFilters.kt
index 96bc1d1d0..e8478fea7 100644
--- a/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFilters.kt
+++ b/src/all/koharu/src/eu/kanade/tachiyomi/extension/all/koharu/KoharuFilters.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.koharu
-
+
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 
diff --git a/src/all/komga/build.gradle b/src/all/komga/build.gradle
index d70aa6132..78082712d 100644
--- a/src/all/komga/build.gradle
+++ b/src/all/komga/build.gradle
@@ -1,11 +1,11 @@
-ext {
-    extName = 'Komga'
-    extClass = '.KomgaFactory'
-    extVersionCode = 59
-}
-
-apply from: "$rootDir/common.gradle"
-
-dependencies {
-    implementation("org.apache.commons:commons-text:1.11.0")
-}
+ext {
+    extName = 'Komga'
+    extClass = '.KomgaFactory'
+    extVersionCode = 60
+}
+
+apply from: "$rootDir/common.gradle"
+
+dependencies {
+    implementation("org.apache.commons:commons-text:1.11.0")
+}
diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
index 1936008b8..13d537679 100644
--- a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
+++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.komga
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.text.InputType
 import android.util.Log
@@ -28,6 +27,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -41,17 +41,13 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import org.apache.commons.text.StringSubstitutor
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.security.MessageDigest
 import java.util.Locale
 
 open class Komga(private val suffix: String = "") : ConfigurableSource, UnmeteredSource, HttpSource() {
 
-    internal val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    internal val preferences: SharedPreferences by getPreferencesLazy()
 
     private val displayName by lazy { preferences.getString(PREF_DISPLAY_NAME, "")!! }
 
diff --git a/src/all/lanraragi/build.gradle b/src/all/lanraragi/build.gradle
index b265dfcc5..883d2dcbb 100644
--- a/src/all/lanraragi/build.gradle
+++ b/src/all/lanraragi/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'LANraragi'
     extClass = '.LANraragiFactory'
-    extVersionCode = 18
+    extVersionCode = 19
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/lanraragi/src/eu/kanade/tachiyomi/extension/all/lanraragi/LANraragi.kt b/src/all/lanraragi/src/eu/kanade/tachiyomi/extension/all/lanraragi/LANraragi.kt
index 37db40fd6..2e64905bb 100644
--- a/src/all/lanraragi/src/eu/kanade/tachiyomi/extension/all/lanraragi/LANraragi.kt
+++ b/src/all/lanraragi/src/eu/kanade/tachiyomi/extension/all/lanraragi/LANraragi.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.lanraragi
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.net.Uri
 import android.text.InputType
@@ -18,6 +17,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.jsonArray
@@ -284,9 +284,7 @@ open class LANraragi(private val suffix: String = "") : ConfigurableSource, Unme
         (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE
     }
 
-    internal val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    internal val preferences: SharedPreferences by getPreferencesLazy()
 
     private fun getPrefBaseUrl(): String = preferences.getString(HOSTNAME_KEY, HOSTNAME_DEFAULT)!!
     private fun getPrefAPIKey(): String = preferences.getString(APIKEY_KEY, "")!!
diff --git a/src/all/luscious/build.gradle b/src/all/luscious/build.gradle
index e342bf605..299ac7810 100644
--- a/src/all/luscious/build.gradle
+++ b/src/all/luscious/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Luscious'
     extClass = '.LusciousFactory'
-    extVersionCode = 19
+    extVersionCode = 20
     isNsfw = true
 }
 
diff --git a/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt
index 6683505bb..bf52e431c 100644
--- a/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt
+++ b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.luscious
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.CheckBoxPreference
 import androidx.preference.ListPreference
@@ -15,6 +14,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
@@ -37,8 +37,6 @@ import okhttp3.Request
 import okhttp3.Response
 import okhttp3.ResponseBody.Companion.toResponseBody
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.util.Calendar
 
@@ -49,9 +47,7 @@ abstract class Luscious(
     override val supportsLatest: Boolean = true
     override val name: String = "Luscious"
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val baseUrl: String = getMirrorPref()!!
 
diff --git a/src/all/manga18me/build.gradle b/src/all/manga18me/build.gradle
index 59b8f4fff..6bf9280a8 100644
--- a/src/all/manga18me/build.gradle
+++ b/src/all/manga18me/build.gradle
@@ -1,9 +1,9 @@
-ext {
-    extName = 'Manga18Me'
-    extClass = '.M18MFactory'
-    extVersionCode = 1
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
-
+ext {
+    extName = 'Manga18Me'
+    extClass = '.M18MFactory'
+    extVersionCode = 1
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
+
diff --git a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt
index 56887ac01..5cf9521f4 100644
--- a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt
+++ b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.manga18me
-
+
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 
diff --git a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt
index bef68bcfc..54d3d6568 100644
--- a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt
+++ b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.manga18me
-
+
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.MangasPage
diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle
index bc926dc26..fd4c71406 100644
--- a/src/all/mangadex/build.gradle
+++ b/src/all/mangadex/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MangaDex'
     extClass = '.MangaDexFactory'
-    extVersionCode = 199
+    extVersionCode = 200
     isNsfw = true
 }
 
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 2b157c01d..fc3fb56a7 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
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mangadex
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.os.Build
 import androidx.preference.EditTextPreference
@@ -32,6 +31,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import okhttp3.CacheControl
 import okhttp3.Headers
@@ -40,8 +40,6 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.util.Date
 
 abstract class MangaDex(final override val lang: String, private val dexLang: String = lang) :
@@ -53,10 +51,7 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-            .sanitizeExistingUuidPrefs()
-    }
+    private val preferences by getPreferencesLazy { sanitizeExistingUuidPrefs() }
 
     private val helper = MangaDexHelper(lang)
 
@@ -885,9 +880,9 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
      * preferences. This method clear invalid UUIDs in case the user have updated from
      * a previous version with that behaviour.
      */
-    private fun SharedPreferences.sanitizeExistingUuidPrefs(): SharedPreferences {
+    private fun SharedPreferences.sanitizeExistingUuidPrefs() {
         if (getBoolean(MDConstants.getHasSanitizedUuidsPrefKey(dexLang), false)) {
-            return this
+            return
         }
 
         val blockedGroups = getString(MDConstants.getBlockedGroupsPrefKey(dexLang), "")!!
@@ -907,7 +902,5 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
             .putString(MDConstants.getBlockedUploaderPrefKey(dexLang), blockedUploaders)
             .putBoolean(MDConstants.getHasSanitizedUuidsPrefKey(dexLang), true)
             .apply()
-
-        return this
     }
 }
diff --git a/src/all/mangafire/build.gradle b/src/all/mangafire/build.gradle
index d0d1fb038..0004bd644 100644
--- a/src/all/mangafire/build.gradle
+++ b/src/all/mangafire/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MangaFire'
     extClass = '.MangaFireFactory'
-    extVersionCode = 10
+    extVersionCode = 11
     isNsfw = true
 }
 
diff --git a/src/all/mangafire/src/eu/kanade/tachiyomi/extension/all/mangafire/MangaFire.kt b/src/all/mangafire/src/eu/kanade/tachiyomi/extension/all/mangafire/MangaFire.kt
index 37c3ea92d..f300e937c 100644
--- a/src/all/mangafire/src/eu/kanade/tachiyomi/extension/all/mangafire/MangaFire.kt
+++ b/src/all/mangafire/src/eu/kanade/tachiyomi/extension/all/mangafire/MangaFire.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mangafire
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
 import eu.kanade.tachiyomi.network.GET
@@ -12,6 +11,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
@@ -24,8 +24,6 @@ import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.ParseException
 import java.text.SimpleDateFormat
@@ -43,9 +41,7 @@ class MangaFire(
 
     private val json: Json by injectLazy()
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient.newBuilder().addInterceptor(ImageInterceptor).build()
 
diff --git a/src/all/mangapark/build.gradle b/src/all/mangapark/build.gradle
index 634bffda5..7fe709ec3 100644
--- a/src/all/mangapark/build.gradle
+++ b/src/all/mangapark/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MangaPark'
     extClass = '.MangaParkFactory'
-    extVersionCode = 20
+    extVersionCode = 21
     isNsfw = true
 }
 
diff --git a/src/all/mangapark/src/eu/kanade/tachiyomi/extension/all/mangapark/MangaPark.kt b/src/all/mangapark/src/eu/kanade/tachiyomi/extension/all/mangapark/MangaPark.kt
index e05a70719..b4674b7d0 100644
--- a/src/all/mangapark/src/eu/kanade/tachiyomi/extension/all/mangapark/MangaPark.kt
+++ b/src/all/mangapark/src/eu/kanade/tachiyomi/extension/all/mangapark/MangaPark.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mangapark
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -18,6 +17,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -30,8 +30,6 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import okhttp3.Request
 import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.atomic.AtomicBoolean
@@ -47,8 +45,7 @@ class MangaPark(
 
     override val versionId = 2
 
-    private val preference =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preference = getPreferences()
 
     private val domain =
         preference.getString(MIRROR_PREF_KEY, MIRROR_PREF_DEFAULT) ?: MIRROR_PREF_DEFAULT
diff --git a/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt b/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt
index b17f18536..64c3f7ea5 100644
--- a/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt
+++ b/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mangaplus
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.text.Editable
 import android.text.TextWatcher
@@ -21,6 +20,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Headers
@@ -32,8 +32,6 @@ import okhttp3.Request
 import okhttp3.Response
 import okhttp3.ResponseBody.Companion.toResponseBody
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.util.UUID
 
@@ -73,9 +71,7 @@ class MangaPlus(
         )
     }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     /**
      * Private cache to find the newest thumbnail URL in case the existing one
diff --git a/src/all/mangareaderto/build.gradle b/src/all/mangareaderto/build.gradle
index d54894b26..89eeeb1fc 100644
--- a/src/all/mangareaderto/build.gradle
+++ b/src/all/mangareaderto/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaReaderFactory'
     themePkg = 'mangareader'
     baseUrl = 'https://mangareader.to'
-    overrideVersionCode = 5
+    overrideVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/all/mangareaderto/src/eu/kanade/tachiyomi/extension/all/mangareaderto/MangaReader.kt b/src/all/mangareaderto/src/eu/kanade/tachiyomi/extension/all/mangareaderto/MangaReader.kt
index 1204c43ee..c12464da5 100644
--- a/src/all/mangareaderto/src/eu/kanade/tachiyomi/extension/all/mangareaderto/MangaReader.kt
+++ b/src/all/mangareaderto/src/eu/kanade/tachiyomi/extension/all/mangareaderto/MangaReader.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mangareaderto
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -13,11 +12,11 @@ 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.util.asJsoup
+import keiyoushi.utils.getPreferences
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class MangaReader(
     language: Language,
@@ -32,9 +31,7 @@ class MangaReader(
         .addInterceptor(ImageInterceptor)
         .build()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     // =============================== Search ===============================
 
diff --git a/src/all/mango/build.gradle b/src/all/mango/build.gradle
index 22d0a6da7..2e60f3a7b 100644
--- a/src/all/mango/build.gradle
+++ b/src/all/mango/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Mango'
     extClass = '.Mango'
-    extVersionCode = 9
+    extVersionCode = 10
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/mango/src/eu/kanade/tachiyomi/extension/all/mango/Mango.kt b/src/all/mango/src/eu/kanade/tachiyomi/extension/all/mango/Mango.kt
index 92d7f2291..7d1d1e4e9 100644
--- a/src/all/mango/src/eu/kanade/tachiyomi/extension/all/mango/Mango.kt
+++ b/src/all/mango/src/eu/kanade/tachiyomi/extension/all/mango/Mango.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.mango
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.text.InputType
 import android.widget.Toast
@@ -18,6 +17,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import info.debatty.java.stringsimilarity.JaroWinkler
 import info.debatty.java.stringsimilarity.Levenshtein
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
@@ -34,8 +34,6 @@ import okhttp3.Request
 import okhttp3.RequestBody
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 
@@ -214,9 +212,7 @@ class Mango : ConfigurableSource, UnmeteredSource, HttpSource() {
         Headers.Builder()
             .add("User-Agent", "Tachiyomi Mango v${AppInfo.getVersionName()}")
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client: OkHttpClient =
         network.client.newBuilder()
diff --git a/src/all/meituatop/build.gradle b/src/all/meituatop/build.gradle
index 54830dc17..7f901e532 100644
--- a/src/all/meituatop/build.gradle
+++ b/src/all/meituatop/build.gradle
@@ -1,8 +1,8 @@
-ext {
-    extName = 'Meitua.top'
-    extClass = '.MeituaTop'
-    extVersionCode = 9
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'Meitua.top'
+    extClass = '.MeituaTop'
+    extVersionCode = 9
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/meituatop/src/eu/kanade/tachiyomi/extension/all/meituatop/MeituaTop.kt b/src/all/meituatop/src/eu/kanade/tachiyomi/extension/all/meituatop/MeituaTop.kt
index 2e75e9f27..3472e01ed 100644
--- a/src/all/meituatop/src/eu/kanade/tachiyomi/extension/all/meituatop/MeituaTop.kt
+++ b/src/all/meituatop/src/eu/kanade/tachiyomi/extension/all/meituatop/MeituaTop.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.meituatop
-
+
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
diff --git a/src/all/namicomi/build.gradle b/src/all/namicomi/build.gradle
index 308aa7a6e..f6e973062 100644
--- a/src/all/namicomi/build.gradle
+++ b/src/all/namicomi/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'NamiComi'
     extClass = '.NamiComiFactory'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = false
 }
 
diff --git a/src/all/namicomi/src/eu/kanade/tachiyomi/extension/all/namicomi/NamiComi.kt b/src/all/namicomi/src/eu/kanade/tachiyomi/extension/all/namicomi/NamiComi.kt
index 48d167749..a25bb5fcc 100644
--- a/src/all/namicomi/src/eu/kanade/tachiyomi/extension/all/namicomi/NamiComi.kt
+++ b/src/all/namicomi/src/eu/kanade/tachiyomi/extension/all/namicomi/NamiComi.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.namicomi
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -22,6 +21,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import okhttp3.CacheControl
@@ -31,8 +31,6 @@ import okhttp3.Request
 import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
 import okio.IOException
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 abstract class NamiComi(final override val lang: String, private val extLang: String = lang) :
     ConfigurableSource, HttpSource() {
@@ -41,9 +39,7 @@ abstract class NamiComi(final override val lang: String, private val extLang: St
     override val baseUrl = NamiComiConstants.webUrl
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val helper = NamiComiHelper(lang)
 
diff --git a/src/all/nhentai/build.gradle b/src/all/nhentai/build.gradle
index 7d43d3c2d..9a253e1c0 100644
--- a/src/all/nhentai/build.gradle
+++ b/src/all/nhentai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'NHentai'
     extClass = '.NHFactory'
-    extVersionCode = 50
+    extVersionCode = 51
     isNsfw = true
 }
 
diff --git a/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt b/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
index 2784f7e17..a8b4f1c52 100644
--- a/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
+++ b/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.nhentai
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -25,6 +24,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.ParsedHttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -34,8 +34,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 open class NHentai(
@@ -53,9 +51,7 @@ open class NHentai(
 
     private val json: Json by injectLazy()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client: OkHttpClient by lazy {
         network.cloudflareClient.newBuilder()
diff --git a/src/all/novelcool/build.gradle b/src/all/novelcool/build.gradle
index 47f1a30b9..628e57bc4 100644
--- a/src/all/novelcool/build.gradle
+++ b/src/all/novelcool/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'NovelCool'
     extClass = '.NovelCoolFactory'
-    extVersionCode = 3
+    extVersionCode = 4
     isNsfw = true
 }
 
diff --git a/src/all/novelcool/src/eu/kanade/tachiyomi/extension/all/novelcool/NovelCool.kt b/src/all/novelcool/src/eu/kanade/tachiyomi/extension/all/novelcool/NovelCool.kt
index f15eac962..f7789fd5e 100644
--- a/src/all/novelcool/src/eu/kanade/tachiyomi/extension/all/novelcool/NovelCool.kt
+++ b/src/all/novelcool/src/eu/kanade/tachiyomi/extension/all/novelcool/NovelCool.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.novelcool
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -17,6 +16,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -32,8 +32,6 @@ import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import org.jsoup.select.Elements
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -62,9 +60,7 @@ open class NovelCool(
 
     private val json: Json by injectLazy()
 
-    private val preference by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preference by getPreferencesLazy()
 
     override fun fetchPopularManga(page: Int): Observable<MangasPage> {
         return when (preference.useAppApi) {
diff --git a/src/all/peppercarrot/build.gradle b/src/all/peppercarrot/build.gradle
index e9ab35165..d86a14bf7 100644
--- a/src/all/peppercarrot/build.gradle
+++ b/src/all/peppercarrot/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Pepper&Carrot'
     extClass = '.PepperCarrot'
-    extVersionCode = 2
+    extVersionCode = 3
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/peppercarrot/src/eu/kanade/tachiyomi/extension/all/peppercarrot/PepperCarrot.kt b/src/all/peppercarrot/src/eu/kanade/tachiyomi/extension/all/peppercarrot/PepperCarrot.kt
index 42a872e77..68d035035 100644
--- a/src/all/peppercarrot/src/eu/kanade/tachiyomi/extension/all/peppercarrot/PepperCarrot.kt
+++ b/src/all/peppercarrot/src/eu/kanade/tachiyomi/extension/all/peppercarrot/PepperCarrot.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.peppercarrot
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
@@ -11,6 +10,8 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.CacheControl
 import okhttp3.Request
 import okhttp3.Response
@@ -18,8 +19,6 @@ import org.jsoup.nodes.TextNode
 import org.jsoup.select.Evaluator
 import rx.Observable
 import rx.Single
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -31,9 +30,7 @@ class PepperCarrot : HttpSource(), ConfigurableSource {
 
     override val baseUrl = BASE_URL
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun fetchPopularManga(page: Int): Observable<MangasPage> = Single.create<MangasPage> {
         updateLangData(client, headers, preferences)
diff --git a/src/all/photos18/build.gradle b/src/all/photos18/build.gradle
index 5a94a5b96..be8e8bcb2 100644
--- a/src/all/photos18/build.gradle
+++ b/src/all/photos18/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Photos18'
     extClass = '.Photos18'
-    extVersionCode = 5
+    extVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/all/photos18/src/eu/kanade/tachiyomi/extension/all/photos18/Photos18.kt b/src/all/photos18/src/eu/kanade/tachiyomi/extension/all/photos18/Photos18.kt
index 51c927b64..055905fab 100644
--- a/src/all/photos18/src/eu/kanade/tachiyomi/extension/all/photos18/Photos18.kt
+++ b/src/all/photos18/src/eu/kanade/tachiyomi/extension/all/photos18/Photos18.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.photos18
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
 import eu.kanade.tachiyomi.network.GET
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -21,8 +21,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.select.Evaluator
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class Photos18 : HttpSource(), ConfigurableSource {
     override val name = "Photos18"
@@ -156,9 +154,7 @@ class Photos18 : HttpSource(), ConfigurableSource {
         }
     }
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     private val useTrad get() = preferences.getBoolean("ZH_HANT", false)
 
diff --git a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFilters.kt b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFilters.kt
index 0e14013f5..ae6cc8e6a 100644
--- a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFilters.kt
+++ b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFilters.kt
@@ -1,4 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.pixiv
+
 import eu.kanade.tachiyomi.source.model.Filter
 
 private val TYPE_VALUES = arrayOf("All", "Illustrations", "Manga")
diff --git a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivTypes.kt b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivTypes.kt
index 0c57be291..adfe178eb 100644
--- a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivTypes.kt
+++ b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivTypes.kt
@@ -1,4 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.pixiv
+
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.json.JsonPrimitive
 
diff --git a/src/all/projectsuki/build.gradle b/src/all/projectsuki/build.gradle
index c8166e08a..009e36e58 100644
--- a/src/all/projectsuki/build.gradle
+++ b/src/all/projectsuki/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Project Suki'
     extClass = '.ProjectSuki'
-    extVersionCode = 4
+    extVersionCode = 5
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSuki.kt b/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSuki.kt
index b1ec91908..d09ed21f4 100644
--- a/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSuki.kt
+++ b/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSuki.kt
@@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -188,7 +189,7 @@ class ProjectSuki : HttpSource(), ConfigurableSource {
     override val id: Long = 8965918600406781666L
 
     /** Handles extension preferences found in Extensions &gt; Project Suki &gt; Gear icon */
-    private val preferences = ProjectSukiPreferences(id)
+    private val preferences = ProjectSukiPreferences(getPreferences())
 
     /** See [Kotlinx-Serialization](https://github.com/Kotlin/kotlinx.serialization). */
     private val json: Json = Json {
diff --git a/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSukiPreferences.kt b/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSukiPreferences.kt
index dd994e2e4..43de1d96d 100644
--- a/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSukiPreferences.kt
+++ b/src/all/projectsuki/src/eu/kanade/tachiyomi/extension/all/projectsuki/ProjectSukiPreferences.kt
@@ -1,14 +1,11 @@
 package eu.kanade.tachiyomi.extension.all.projectsuki
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.ListPreference
 import androidx.preference.Preference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.util.Locale
 
 /**
@@ -20,9 +17,7 @@ private inline val INFO: Nothing get() = error("INFO")
 /**
  * @author Federico d'Alonzo &lt;me@npgx.dev&gt;
  */
-class ProjectSukiPreferences(id: Long) {
-
-    internal val shared by lazy { Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) }
+class ProjectSukiPreferences(internal val shared: SharedPreferences) {
 
     abstract inner class PSPreference<Raw : Any, T : Any>(val preferenceIdentifier: String, val default: Raw) {
 
diff --git a/src/all/pururin/build.gradle b/src/all/pururin/build.gradle
index b52cf0832..d456c6867 100644
--- a/src/all/pururin/build.gradle
+++ b/src/all/pururin/build.gradle
@@ -1,8 +1,8 @@
-ext {
-    extName = 'Pururin'
-    extClass = '.PururinFactory'
-    extVersionCode = 10
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'Pururin'
+    extClass = '.PururinFactory'
+    extVersionCode = 10
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/Pururin.kt b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/Pururin.kt
index 8275e55eb..3c0686daf 100644
--- a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/Pururin.kt
+++ b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/Pururin.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.pururin
-
+
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.Page
diff --git a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFactory.kt b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFactory.kt
index 95117dcd2..040479c89 100644
--- a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFactory.kt
+++ b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFactory.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.pururin
-
+
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceFactory
 
diff --git a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFilters.kt b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFilters.kt
index 40bc4006a..e1f1868fd 100644
--- a/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFilters.kt
+++ b/src/all/pururin/src/eu/kanade/tachiyomi/extension/all/pururin/PururinFilters.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.pururin
-
+
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 
diff --git a/src/all/simplycosplay/build.gradle b/src/all/simplycosplay/build.gradle
index 270cd0bcf..a09bf6025 100644
--- a/src/all/simplycosplay/build.gradle
+++ b/src/all/simplycosplay/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Simply Cosplay'
     extClass = '.SimplyCosplay'
-    extVersionCode = 1
+    extVersionCode = 2
     isNsfw = true
 }
 
diff --git a/src/all/simplycosplay/src/eu/kanade/tachiyomi/extension/all/simplycosplay/SimplyCosplay.kt b/src/all/simplycosplay/src/eu/kanade/tachiyomi/extension/all/simplycosplay/SimplyCosplay.kt
index d2c1868fb..f88c1ce68 100644
--- a/src/all/simplycosplay/src/eu/kanade/tachiyomi/extension/all/simplycosplay/SimplyCosplay.kt
+++ b/src/all/simplycosplay/src/eu/kanade/tachiyomi/extension/all/simplycosplay/SimplyCosplay.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.simplycosplay
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.preference.ListPreference
@@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl
@@ -24,8 +24,6 @@ import okhttp3.Interceptor
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.text.SimpleDateFormat
@@ -53,9 +51,7 @@ class SimplyCosplay : HttpSource(), ConfigurableSource {
 
     private val json: Json by injectLazy()
 
-    private val preference by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preference by getPreferencesLazy()
 
     private fun tokenIntercept(chain: Interceptor.Chain): Response {
         val request = chain.request()
diff --git a/src/all/simplyhentai/build.gradle b/src/all/simplyhentai/build.gradle
index 7aacd6486..22e53f6b6 100644
--- a/src/all/simplyhentai/build.gradle
+++ b/src/all/simplyhentai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Simply Hentai'
     extClass = '.SimplyHentaiFactory'
-    extVersionCode = 7
+    extVersionCode = 8
     isNsfw = true
 }
 
diff --git a/src/all/simplyhentai/src/eu/kanade/tachiyomi/extension/all/simplyhentai/SimplyHentai.kt b/src/all/simplyhentai/src/eu/kanade/tachiyomi/extension/all/simplyhentai/SimplyHentai.kt
index 3b1ee9de2..c931b9596 100644
--- a/src/all/simplyhentai/src/eu/kanade/tachiyomi/extension/all/simplyhentai/SimplyHentai.kt
+++ b/src/all/simplyhentai/src/eu/kanade/tachiyomi/extension/all/simplyhentai/SimplyHentai.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.simplyhentai
 
-import android.app.Application
 import android.net.Uri
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -12,11 +11,10 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -40,9 +38,7 @@ open class SimplyHentai(
 
     private val json: Json by injectLazy()
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun popularMangaRequest(page: Int) =
         Uri.parse("$apiUrl/tag/$langName").buildUpon().run {
diff --git a/src/all/solarmtl/build.gradle b/src/all/solarmtl/build.gradle
index 5a8b5945f..26e4a5354 100644
--- a/src/all/solarmtl/build.gradle
+++ b/src/all/solarmtl/build.gradle
@@ -1,10 +1,10 @@
-ext {
-    extName = 'Solar Machine Translations'
-    extClass = '.SolarmtlFactory'
-    themePkg = 'machinetranslations'
-    baseUrl = 'https://solarmtl.com'
-    overrideVersionCode = 0
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'Solar Machine Translations'
+    extClass = '.SolarmtlFactory'
+    themePkg = 'machinetranslations'
+    baseUrl = 'https://solarmtl.com'
+    overrideVersionCode = 0
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/Solarmtl.kt b/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/Solarmtl.kt
index 23f86d7aa..92ad82647 100644
--- a/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/Solarmtl.kt
+++ b/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/Solarmtl.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.solarmtl
-
+
 import android.os.Build
 import androidx.annotation.RequiresApi
 import eu.kanade.tachiyomi.multisrc.machinetranslations.Language
diff --git a/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/SolarmtlFactory.kt b/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/SolarmtlFactory.kt
index fc801c47e..10da66dbd 100644
--- a/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/SolarmtlFactory.kt
+++ b/src/all/solarmtl/src/eu/kanade/tachiyomi/extension/all/solarmtl/SolarmtlFactory.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.solarmtl
-
+
 import android.os.Build
 import androidx.annotation.RequiresApi
 import eu.kanade.tachiyomi.multisrc.machinetranslations.LanguageImpl
diff --git a/src/all/thunderscans/build.gradle b/src/all/thunderscans/build.gradle
index b9e556425..e4fa83963 100644
--- a/src/all/thunderscans/build.gradle
+++ b/src/all/thunderscans/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.ThunderScansFactory'
     themePkg = 'mangathemesia'
     baseUrl = 'https://en-thunderscans.com'
-    overrideVersionCode = 9
+    overrideVersionCode = 10
     isNsfw = false
 }
 
diff --git a/src/all/webtoons/build.gradle b/src/all/webtoons/build.gradle
index c3fe02a78..131b9bd4a 100644
--- a/src/all/webtoons/build.gradle
+++ b/src/all/webtoons/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.WebtoonsFactory'
     themePkg = 'webtoons'
     baseUrl = 'https://www.webtoons.com'
-    overrideVersionCode = 39
+    overrideVersionCode = 40
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/webtoons/src/eu/kanade/tachiyomi/extension/all/webtoons/WebtoonsSrc.kt b/src/all/webtoons/src/eu/kanade/tachiyomi/extension/all/webtoons/WebtoonsSrc.kt
index 6ecdf1309..cf4f9813f 100644
--- a/src/all/webtoons/src/eu/kanade/tachiyomi/extension/all/webtoons/WebtoonsSrc.kt
+++ b/src/all/webtoons/src/eu/kanade/tachiyomi/extension/all/webtoons/WebtoonsSrc.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.all.webtoons
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -10,12 +9,11 @@ import eu.kanade.tachiyomi.multisrc.webtoons.Webtoons
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Page
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.jsonObject
 import kotlinx.serialization.json.jsonPrimitive
 import okhttp3.OkHttpClient
 import org.jsoup.nodes.Document
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -32,9 +30,7 @@ open class WebtoonsSrc(
         .addInterceptor(TextInterceptor())
         .build()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         val authorsNotesPref = SwitchPreferenceCompat(screen.context).apply {
diff --git a/src/ar/dilar/build.gradle b/src/ar/dilar/build.gradle
index 195858f45..acafc8abe 100644
--- a/src/ar/dilar/build.gradle
+++ b/src/ar/dilar/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'Dilar'
     extClass = '.Dilar'
     themePkg = 'gmanga'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/dilar/src/eu/kanade/tachiyomi/extension/ar/dilar/Dilar.kt b/src/ar/dilar/src/eu/kanade/tachiyomi/extension/ar/dilar/Dilar.kt
index 41cc0a3f0..75dbc3158 100644
--- a/src/ar/dilar/src/eu/kanade/tachiyomi/extension/ar/dilar/Dilar.kt
+++ b/src/ar/dilar/src/eu/kanade/tachiyomi/extension/ar/dilar/Dilar.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ar.dilar
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.ListPreference
@@ -10,10 +9,9 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 private const val MIRROR_PREF_KEY = "MIRROR"
 private const val MIRROR_PREF_TITLE = "Dilar : Mirror Urls"
@@ -65,7 +63,5 @@ class Dilar :
 
     override val cdnUrl by lazy { baseUrl }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 }
diff --git a/src/ar/empirewebtoon/build.gradle b/src/ar/empirewebtoon/build.gradle
index abeb36d86..e0fb0dcb0 100644
--- a/src/ar/empirewebtoon/build.gradle
+++ b/src/ar/empirewebtoon/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.EmpireWebtoon'
     themePkg = 'madara'
     baseUrl = 'https://webtoonempire-ron.com'
-    overrideVersionCode = 4
+    overrideVersionCode = 5
     isNsfw = true
 }
 
diff --git a/src/ar/empirewebtoon/src/eu/kanade/tachiyomi/extension/ar/empirewebtoon/EmpireWebtoon.kt b/src/ar/empirewebtoon/src/eu/kanade/tachiyomi/extension/ar/empirewebtoon/EmpireWebtoon.kt
index 55a3dc332..1d21d0eb9 100644
--- a/src/ar/empirewebtoon/src/eu/kanade/tachiyomi/extension/ar/empirewebtoon/EmpireWebtoon.kt
+++ b/src/ar/empirewebtoon/src/eu/kanade/tachiyomi/extension/ar/empirewebtoon/EmpireWebtoon.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.ar.empirewebtoon
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -20,8 +18,7 @@ class EmpireWebtoon :
     ),
     ConfigurableSource {
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/ar/hentaislayer/build.gradle b/src/ar/hentaislayer/build.gradle
index 44980fecf..a2ebb8e7c 100644
--- a/src/ar/hentaislayer/build.gradle
+++ b/src/ar/hentaislayer/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'Hentai Slayer'
     extClass = '.HentaiSlayer'
     themePkg = 'fuzzydoodle'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/ar/hentaislayer/src/eu/kanade/tachiyomi/extension/ar/hentaislayer/HentaiSlayer.kt b/src/ar/hentaislayer/src/eu/kanade/tachiyomi/extension/ar/hentaislayer/HentaiSlayer.kt
index 67ed88b60..49bd69121 100644
--- a/src/ar/hentaislayer/src/eu/kanade/tachiyomi/extension/ar/hentaislayer/HentaiSlayer.kt
+++ b/src/ar/hentaislayer/src/eu/kanade/tachiyomi/extension/ar/hentaislayer/HentaiSlayer.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ar.hentaislayer
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -8,8 +7,7 @@ import eu.kanade.tachiyomi.multisrc.fuzzydoodle.FuzzyDoodle
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class HentaiSlayer : FuzzyDoodle("هنتاي سلاير", "https://hentaislayer.net", "ar"), ConfigurableSource {
 
@@ -20,9 +18,7 @@ class HentaiSlayer : FuzzyDoodle("هنتاي سلاير", "https://hentaislayer.
     override fun headersBuilder() = super.headersBuilder()
         .set("Origin", baseUrl)
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun latestPageRequest(page: Int) = GET("$baseUrl/latest-${getLatestTypes()}?page=$page", headers)
 
diff --git a/src/ar/mangalek/build.gradle b/src/ar/mangalek/build.gradle
index af5834c4a..90749bdf5 100644
--- a/src/ar/mangalek/build.gradle
+++ b/src/ar/mangalek/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Mangalek'
     themePkg = 'madara'
     baseUrl = 'https://lekmanga.net'
-    overrideVersionCode = 7
+    overrideVersionCode = 8
     isNsfw = false
 }
 
diff --git a/src/ar/mangalek/src/eu/kanade/tachiyomi/extension/ar/mangalek/Mangalek.kt b/src/ar/mangalek/src/eu/kanade/tachiyomi/extension/ar/mangalek/Mangalek.kt
index 347de2b84..88924ac73 100644
--- a/src/ar/mangalek/src/eu/kanade/tachiyomi/extension/ar/mangalek/Mangalek.kt
+++ b/src/ar/mangalek/src/eu/kanade/tachiyomi/extension/ar/mangalek/Mangalek.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ar.mangalek
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.ListPreference
@@ -11,13 +10,12 @@ import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.MangasPage
 import eu.kanade.tachiyomi.source.model.SManga
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import okhttp3.FormBody
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.ParseException
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -54,9 +52,7 @@ class Mangalek :
         }
     }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         val mirrorPref = ListPreference(screen.context).apply {
diff --git a/src/ar/mangalink/build.gradle b/src/ar/mangalink/build.gradle
index b0f2dc013..c6a26e6a3 100644
--- a/src/ar/mangalink/build.gradle
+++ b/src/ar/mangalink/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Mangalink'
     themePkg = 'madara'
     baseUrl = 'https://link-manga.com'
-    overrideVersionCode = 3
+    overrideVersionCode = 4
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/mangalink/src/eu/kanade/tachiyomi/extension/ar/mangalink/Mangalink.kt b/src/ar/mangalink/src/eu/kanade/tachiyomi/extension/ar/mangalink/Mangalink.kt
index fc0167c1b..929b3e5e0 100644
--- a/src/ar/mangalink/src/eu/kanade/tachiyomi/extension/ar/mangalink/Mangalink.kt
+++ b/src/ar/mangalink/src/eu/kanade/tachiyomi/extension/ar/mangalink/Mangalink.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.ar.mangalink
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -24,9 +22,7 @@ class Mangalink :
     override val useLoadMoreRequest = LoadMoreStrategy.Always
     override val baseUrl by lazy { getPrefBaseUrl() }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     companion object {
         private const val RESTART_TACHIYOMI = ".لتطبيق الإعدادات الجديدة Tachiyomi أعد تشغيل"
diff --git a/src/ar/mangaswat/build.gradle b/src/ar/mangaswat/build.gradle
index 8fc1853ac..77be6f50d 100644
--- a/src/ar/mangaswat/build.gradle
+++ b/src/ar/mangaswat/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaSwat'
     themePkg = 'mangathemesia'
     baseUrl = 'https://swatscans.com'
-    overrideVersionCode = 25
+    overrideVersionCode = 26
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/mangaswat/src/eu/kanade/tachiyomi/extension/ar/mangaswat/MangaSwat.kt b/src/ar/mangaswat/src/eu/kanade/tachiyomi/extension/ar/mangaswat/MangaSwat.kt
index a9ec6ef7d..34dd667b3 100644
--- a/src/ar/mangaswat/src/eu/kanade/tachiyomi/extension/ar/mangaswat/MangaSwat.kt
+++ b/src/ar/mangaswat/src/eu/kanade/tachiyomi/extension/ar/mangaswat/MangaSwat.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ar.mangaswat
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
@@ -12,6 +11,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import okhttp3.FormBody
@@ -23,8 +23,6 @@ import okhttp3.ResponseBody.Companion.toResponseBody
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -39,9 +37,7 @@ class MangaSwat :
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override val client = super.client.newBuilder()
         .addInterceptor(::tokenInterceptor)
diff --git a/src/ar/teamx/build.gradle b/src/ar/teamx/build.gradle
index ae877a4bb..265e1257b 100644
--- a/src/ar/teamx/build.gradle
+++ b/src/ar/teamx/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Team X'
     extClass = '.TeamX'
-    extVersionCode = 19
+    extVersionCode = 20
     isNsfw = false
 }
 
diff --git a/src/ar/teamx/src/eu/kanade/tachiyomi/extension/ar/teamx/TeamX.kt b/src/ar/teamx/src/eu/kanade/tachiyomi/extension/ar/teamx/TeamX.kt
index 270f75d56..0661ee5c8 100644
--- a/src/ar/teamx/src/eu/kanade/tachiyomi/extension/ar/teamx/TeamX.kt
+++ b/src/ar/teamx/src/eu/kanade/tachiyomi/extension/ar/teamx/TeamX.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ar.teamx
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
@@ -14,13 +13,12 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -43,9 +41,7 @@ class TeamX : ParsedHttpSource(), ConfigurableSource {
         .rateLimit(10, 1, TimeUnit.SECONDS)
         .build()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     // Popular
 
diff --git a/src/en/allanime/build.gradle b/src/en/allanime/build.gradle
index 6f66d724e..c2278542a 100644
--- a/src/en/allanime/build.gradle
+++ b/src/en/allanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AllManga'
     extClass = '.AllManga'
-    extVersionCode = 8
+    extVersionCode = 9
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllManga.kt b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllManga.kt
index 6d15bc053..127c85a77 100644
--- a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllManga.kt
+++ b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllManga.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.allanime
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -16,12 +15,11 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.float
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class AllManga : ConfigurableSource, HttpSource() {
 
@@ -37,9 +35,7 @@ class AllManga : ConfigurableSource, HttpSource() {
 
     override val supportsLatest = true
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient.newBuilder()
         .rateLimit(1)
diff --git a/src/en/asurascans/build.gradle b/src/en/asurascans/build.gradle
index ae67f844f..96921a83e 100644
--- a/src/en/asurascans/build.gradle
+++ b/src/en/asurascans/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Asura Scans'
     extClass = '.AsuraScans'
-    extVersionCode = 45
+    extVersionCode = 46
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/asurascans/src/eu/kanade/tachiyomi/extension/en/asurascans/AsuraScans.kt b/src/en/asurascans/src/eu/kanade/tachiyomi/extension/en/asurascans/AsuraScans.kt
index 66890b20c..4ddf7cd0a 100644
--- a/src/en/asurascans/src/eu/kanade/tachiyomi/extension/en/asurascans/AsuraScans.kt
+++ b/src/en/asurascans/src/eu/kanade/tachiyomi/extension/en/asurascans/AsuraScans.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.asurascans
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -13,6 +12,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -23,8 +23,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -44,8 +42,7 @@ class AsuraScans : ParsedHttpSource(), ConfigurableSource {
 
     private val dateFormat = SimpleDateFormat("MMMM d yyyy", Locale.US)
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         // remove legacy preferences
diff --git a/src/en/clowncorps/build.gradle b/src/en/clowncorps/build.gradle
index a46b77f4f..0a9ade80c 100644
--- a/src/en/clowncorps/build.gradle
+++ b/src/en/clowncorps/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Clown Corps'
     extClass = '.ClownCorps'
-    extVersionCode = 1
+    extVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/clowncorps/src/eu/kanade/tachiyomi/extension/en/clowncorps/ClownCorps.kt b/src/en/clowncorps/src/eu/kanade/tachiyomi/extension/en/clowncorps/ClownCorps.kt
index 5ceee1242..fbe5c85ca 100644
--- a/src/en/clowncorps/src/eu/kanade/tachiyomi/extension/en/clowncorps/ClownCorps.kt
+++ b/src/en/clowncorps/src/eu/kanade/tachiyomi/extension/en/clowncorps/ClownCorps.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.clowncorps
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.MultiSelectListPreference
@@ -17,6 +16,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
@@ -24,8 +24,6 @@ import kotlinx.serialization.json.Json
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.ParseException
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -181,9 +179,7 @@ class ClownCorps : ConfigurableSource, HttpSource() {
     override fun searchMangaRequest(page: Int, query: String, filters: FilterList) =
         throw UnsupportedOperationException()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private fun getShowAuthorsNotesPref() =
         preferences.getBoolean(SETTING_KEY_SHOW_AUTHORS_NOTES, false)
diff --git a/src/en/constellarscans/build.gradle b/src/en/constellarscans/build.gradle
index e8a779461..230509564 100644
--- a/src/en/constellarscans/build.gradle
+++ b/src/en/constellarscans/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.ConstellarScans'
     themePkg = 'mangathemesia'
     baseUrl = 'https://constellarcomic.com'
-    overrideVersionCode = 16
+    overrideVersionCode = 17
     isNsfw = true
 }
 
diff --git a/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt b/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt
index 71137c219..7bf21fe17 100644
--- a/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt
+++ b/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.constellarscans
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -12,6 +11,7 @@ import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Page
 import eu.kanade.tachiyomi.source.model.SChapter
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.jsonArray
 import kotlinx.serialization.json.jsonObject
 import kotlinx.serialization.json.jsonPrimitive
@@ -20,8 +20,6 @@ import okhttp3.Headers
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import org.jsoup.nodes.Document
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class ConstellarScans :
     MangaThemesia(
@@ -31,9 +29,7 @@ class ConstellarScans :
     ),
     ConfigurableSource {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         addRandomUAPreferenceToScreen(screen)
diff --git a/src/en/grrlpower/build.gradle b/src/en/grrlpower/build.gradle
index 8e9cf3654..c26594654 100644
--- a/src/en/grrlpower/build.gradle
+++ b/src/en/grrlpower/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Grrl Power Comic'
     extClass = '.GrrlPower'
-    extVersionCode = 2
+    extVersionCode = 3
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/grrlpower/src/eu/kanade/tachiyomi/extension/en/grrlpower/GrrlPower.kt b/src/en/grrlpower/src/eu/kanade/tachiyomi/extension/en/grrlpower/GrrlPower.kt
index f87f52cc1..7e518f5c3 100644
--- a/src/en/grrlpower/src/eu/kanade/tachiyomi/extension/en/grrlpower/GrrlPower.kt
+++ b/src/en/grrlpower/src/eu/kanade/tachiyomi/extension/en/grrlpower/GrrlPower.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.grrlpower
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -16,11 +15,10 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Calendar
 import java.util.Locale
@@ -121,9 +119,7 @@ class GrrlPower(
 
     // Show Authors Notes Pref Copied from
     // ProjectRoot/multisrc/overrides/webtoons/webtoons/src/WebtoonsSrc.kt
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
     companion object {
         private const val SHOW_AUTHORS_NOTES_KEY = "showAuthorsNotes"
     }
diff --git a/src/en/hiperdex/build.gradle b/src/en/hiperdex/build.gradle
index a80b22924..ad57726a4 100644
--- a/src/en/hiperdex/build.gradle
+++ b/src/en/hiperdex/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Hiperdex'
     themePkg = 'madara'
     baseUrl = 'https://hipertoon.com'
-    overrideVersionCode = 16
+    overrideVersionCode = 17
     isNsfw = true
 }
 
diff --git a/src/en/hiperdex/src/eu/kanade/tachiyomi/extension/en/hiperdex/Hiperdex.kt b/src/en/hiperdex/src/eu/kanade/tachiyomi/extension/en/hiperdex/Hiperdex.kt
index 471500023..ddc4179dc 100644
--- a/src/en/hiperdex/src/eu/kanade/tachiyomi/extension/en/hiperdex/Hiperdex.kt
+++ b/src/en/hiperdex/src/eu/kanade/tachiyomi/extension/en/hiperdex/Hiperdex.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.hiperdex
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -11,8 +10,7 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 
 class Hiperdex :
     Madara(
@@ -24,8 +22,7 @@ class Hiperdex :
 
     override val mangaDetailsSelectorStatus = "div.summary-heading:contains(Status) + div.summary-content"
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/en/lunarscans/build.gradle b/src/en/lunarscans/build.gradle
index d7228ca76..d85575a48 100644
--- a/src/en/lunarscans/build.gradle
+++ b/src/en/lunarscans/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.LunarScans'
     themePkg = 'mangathemesia'
     baseUrl = 'https://lunarscan.org'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/en/lunarscans/src/eu/kanade/tachiyomi/extension/en/lunarscans/LunarScans.kt b/src/en/lunarscans/src/eu/kanade/tachiyomi/extension/en/lunarscans/LunarScans.kt
index 9d9db7ab1..42d2c9d1b 100644
--- a/src/en/lunarscans/src/eu/kanade/tachiyomi/extension/en/lunarscans/LunarScans.kt
+++ b/src/en/lunarscans/src/eu/kanade/tachiyomi/extension/en/lunarscans/LunarScans.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.lunarscans
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -13,12 +12,11 @@ import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.Page
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import okhttp3.Request
 import org.jsoup.nodes.Document
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class LunarScans :
     MangaThemesia(
@@ -29,7 +27,7 @@ class LunarScans :
     ),
     ConfigurableSource {
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val client = super.client.newBuilder()
         .setRandomUserAgent(
diff --git a/src/en/madokami/build.gradle b/src/en/madokami/build.gradle
index 52cdb3886..01ad52097 100644
--- a/src/en/madokami/build.gradle
+++ b/src/en/madokami/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Madokami'
     extClass = '.Madokami'
-    extVersionCode = 9
+    extVersionCode = 10
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/madokami/src/eu/kanade/tachiyomi/extension/en/madokami/Madokami.kt b/src/en/madokami/src/eu/kanade/tachiyomi/extension/en/madokami/Madokami.kt
index 713761916..aad64bfb4 100644
--- a/src/en/madokami/src/eu/kanade/tachiyomi/extension/en/madokami/Madokami.kt
+++ b/src/en/madokami/src/eu/kanade/tachiyomi/extension/en/madokami/Madokami.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.madokami
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.text.InputType
 import eu.kanade.tachiyomi.network.GET
@@ -10,6 +9,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonArray
@@ -22,8 +22,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.net.URLDecoder
@@ -42,9 +40,7 @@ class Madokami : ConfigurableSource, ParsedHttpSource() {
 
     private val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH)
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private fun authenticate(request: Request): Request {
         val credential = Credentials.basic(preferences.getString("username", "")!!, preferences.getString("password", "")!!)
diff --git a/src/en/mangadistrict/build.gradle b/src/en/mangadistrict/build.gradle
index e2dce16d6..f25b90449 100644
--- a/src/en/mangadistrict/build.gradle
+++ b/src/en/mangadistrict/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaDistrict'
     themePkg = 'madara'
     baseUrl = 'https://mangadistrict.com'
-    overrideVersionCode = 8
+    overrideVersionCode = 9
     isNsfw = true
 }
 
diff --git a/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt b/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt
index 3339dea7d..f2c0cdbed 100644
--- a/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt
+++ b/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.en.mangadistrict
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -23,8 +23,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.TimeZone
@@ -39,9 +37,7 @@ class MangaDistrict :
 
     override val mangaSubString = "read-scan"
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun popularMangaNextPageSelector() = "div[role=navigation] span.current + a.page"
 
diff --git a/src/en/mangago/build.gradle b/src/en/mangago/build.gradle
index f55ba5fa3..cc2bfdbbf 100644
--- a/src/en/mangago/build.gradle
+++ b/src/en/mangago/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Mangago'
     extClass = '.Mangago'
-    extVersionCode = 24
+    extVersionCode = 25
     isNsfw = true
 }
 
diff --git a/src/en/mangago/src/eu/kanade/tachiyomi/extension/en/mangago/Mangago.kt b/src/en/mangago/src/eu/kanade/tachiyomi/extension/en/mangago/Mangago.kt
index d4aa82b50..8bd370f8f 100644
--- a/src/en/mangago/src/eu/kanade/tachiyomi/extension/en/mangago/Mangago.kt
+++ b/src/en/mangago/src/eu/kanade/tachiyomi/extension/en/mangago/Mangago.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.mangago
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
@@ -23,6 +22,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -31,8 +31,6 @@ import okhttp3.Request
 import okhttp3.ResponseBody.Companion.toResponseBody
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.ByteArrayOutputStream
 import java.io.InputStream
 import java.net.URLEncoder
@@ -52,9 +50,7 @@ class Mangago : ParsedHttpSource(), ConfigurableSource {
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient.newBuilder()
         .rateLimit(1, 2)
diff --git a/src/en/mangahen/build.gradle b/src/en/mangahen/build.gradle
index 73915d78a..c1ac662d7 100644
--- a/src/en/mangahen/build.gradle
+++ b/src/en/mangahen/build.gradle
@@ -1,8 +1,8 @@
-ext {
-    extName = 'MangaHen'
-    extClass = '.MangaHen'
-    extVersionCode = 2
-    isNsfw = true
-}
-
-apply from: "$rootDir/common.gradle"
+ext {
+    extName = 'MangaHen'
+    extClass = '.MangaHen'
+    extVersionCode = 2
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHen.kt b/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHen.kt
index ac81e6ee0..5902c4e2d 100644
--- a/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHen.kt
+++ b/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHen.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.mangahen
-
+
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.MangasPage
diff --git a/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHenFilters.kt b/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHenFilters.kt
index 62418adc9..eec3c5aff 100644
--- a/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHenFilters.kt
+++ b/src/en/mangahen/src/eu/kanade/tachiyomi/extension/en/mangahen/MangaHenFilters.kt
@@ -1,5 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.mangahen
-
+
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
 
diff --git a/src/en/mangakatana/build.gradle b/src/en/mangakatana/build.gradle
index d18b00940..106c45cda 100644
--- a/src/en/mangakatana/build.gradle
+++ b/src/en/mangakatana/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MangaKatana'
     extClass = '.MangaKatana'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/mangakatana/src/eu/kanade/tachiyomi/extension/en/mangakatana/MangaKatana.kt b/src/en/mangakatana/src/eu/kanade/tachiyomi/extension/en/mangakatana/MangaKatana.kt
index 08f724ba9..a9c3f936a 100644
--- a/src/en/mangakatana/src/eu/kanade/tachiyomi/extension/en/mangakatana/MangaKatana.kt
+++ b/src/en/mangakatana/src/eu/kanade/tachiyomi/extension/en/mangakatana/MangaKatana.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.mangakatana
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import okhttp3.OkHttpClient
@@ -22,8 +22,6 @@ import okhttp3.Response
 import okhttp3.ResponseBody.Companion.toResponseBody
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -36,9 +34,7 @@ class MangaKatana : ConfigurableSource, ParsedHttpSource() {
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
     private val serverPreference = "SERVER_PREFERENCE"
 
     override val client: OkHttpClient = network.cloudflareClient.newBuilder().addNetworkInterceptor { chain ->
diff --git a/src/en/mangamo/build.gradle b/src/en/mangamo/build.gradle
index 647332f2f..be76c930f 100644
--- a/src/en/mangamo/build.gradle
+++ b/src/en/mangamo/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Mangamo'
     extClass = '.Mangamo'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = false
 }
 
diff --git a/src/en/mangamo/src/eu/kanade/tachiyomi/extension/en/mangamo/Mangamo.kt b/src/en/mangamo/src/eu/kanade/tachiyomi/extension/en/mangamo/Mangamo.kt
index 1903d2dda..55b0d107d 100644
--- a/src/en/mangamo/src/eu/kanade/tachiyomi/extension/en/mangamo/Mangamo.kt
+++ b/src/en/mangamo/src/eu/kanade/tachiyomi/extension/en/mangamo/Mangamo.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.mangamo
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.MultiSelectListPreference
@@ -23,14 +22,13 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 
 class Mangamo : ConfigurableSource, HttpSource() {
@@ -43,9 +41,7 @@ class Mangamo : ConfigurableSource, HttpSource() {
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val helper = MangamoHelper(headers)
 
diff --git a/src/en/monochromecustom/build.gradle b/src/en/monochromecustom/build.gradle
index 29bde0eab..5bed69cde 100644
--- a/src/en/monochromecustom/build.gradle
+++ b/src/en/monochromecustom/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'Monochrome Custom'
     extClass = '.MonochromeCustom'
     themePkg = 'monochrome'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/monochromecustom/src/eu/kanade/tachiyomi/extension/en/monochromecustom/MonochromeCustom.kt b/src/en/monochromecustom/src/eu/kanade/tachiyomi/extension/en/monochromecustom/MonochromeCustom.kt
index 7a942e288..2bfad8eef 100644
--- a/src/en/monochromecustom/src/eu/kanade/tachiyomi/extension/en/monochromecustom/MonochromeCustom.kt
+++ b/src/en/monochromecustom/src/eu/kanade/tachiyomi/extension/en/monochromecustom/MonochromeCustom.kt
@@ -1,12 +1,10 @@
 package eu.kanade.tachiyomi.extension.en.monochromecustom
 
-import android.app.Application
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.monochrome.MonochromeCMS
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class MonochromeCustom : ConfigurableSource,
     MonochromeCMS("Monochrome Custom", "", "en") {
@@ -18,9 +16,7 @@ class MonochromeCustom : ConfigurableSource,
         preferences.getString("apiUrl", DEMO_API_URL)!!
     }
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         EditTextPreference(screen.context).apply {
diff --git a/src/en/nightscans/build.gradle b/src/en/nightscans/build.gradle
index fd7eda63f..4067af8f2 100644
--- a/src/en/nightscans/build.gradle
+++ b/src/en/nightscans/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.NightScans'
     themePkg = 'mangathemesia'
     baseUrl = 'https://nightsup.net'
-    overrideVersionCode = 10
+    overrideVersionCode = 11
     isNsfw = true
 }
 
diff --git a/src/en/questionablecontent/build.gradle b/src/en/questionablecontent/build.gradle
index b8c1f4b6f..3ab9d456f 100644
--- a/src/en/questionablecontent/build.gradle
+++ b/src/en/questionablecontent/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Questionable Content'
     extClass = '.QuestionableContent'
-    extVersionCode = 7
+    extVersionCode = 8
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/questionablecontent/src/eu/kanade/tachiyomi/extension/en/questionablecontent/QuestionableContent.kt b/src/en/questionablecontent/src/eu/kanade/tachiyomi/extension/en/questionablecontent/QuestionableContent.kt
index 30b92e50f..c21601e1f 100644
--- a/src/en/questionablecontent/src/eu/kanade/tachiyomi/extension/en/questionablecontent/QuestionableContent.kt
+++ b/src/en/questionablecontent/src/eu/kanade/tachiyomi/extension/en/questionablecontent/QuestionableContent.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.questionablecontent
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -13,14 +12,13 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.util.Date
 
 class QuestionableContent : ParsedHttpSource(), ConfigurableSource {
@@ -52,9 +50,7 @@ class QuestionableContent : ParsedHttpSource(), ConfigurableSource {
 
     override fun fetchMangaDetails(manga: SManga) = fetchPopularManga(1).map { it.mangas.first() }
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun chapterListParse(response: Response): List<SChapter> {
         val chapters = super.chapterListParse(response).distinct()
diff --git a/src/en/readcomiconline/build.gradle b/src/en/readcomiconline/build.gradle
index ebcdf5f91..072d07195 100644
--- a/src/en/readcomiconline/build.gradle
+++ b/src/en/readcomiconline/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'ReadComicOnline'
     extClass = '.Readcomiconline'
-    extVersionCode = 28
+    extVersionCode = 29
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/readcomiconline/src/eu/kanade/tachiyomi/extension/en/readcomiconline/Readcomiconline.kt b/src/en/readcomiconline/src/eu/kanade/tachiyomi/extension/en/readcomiconline/Readcomiconline.kt
index ac1bcf4c9..f4c87506e 100644
--- a/src/en/readcomiconline/src/eu/kanade/tachiyomi/extension/en/readcomiconline/Readcomiconline.kt
+++ b/src/en/readcomiconline/src/eu/kanade/tachiyomi/extension/en/readcomiconline/Readcomiconline.kt
@@ -22,6 +22,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -75,9 +76,7 @@ class Readcomiconline : ConfigurableSource, ParsedHttpSource() {
 
     private var captchaUrl: String? = null
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun popularMangaSelector() = ".list-comic > .item > a:first-child"
 
diff --git a/src/en/reaperscans/src/eu/kanade/tachiyomi/extension/en/reaperscans/ReaperScansDto.kt b/src/en/reaperscans/src/eu/kanade/tachiyomi/extension/en/reaperscans/ReaperScansDto.kt
index eb61ac2da..b4eb4f6bd 100644
--- a/src/en/reaperscans/src/eu/kanade/tachiyomi/extension/en/reaperscans/ReaperScansDto.kt
+++ b/src/en/reaperscans/src/eu/kanade/tachiyomi/extension/en/reaperscans/ReaperScansDto.kt
@@ -1,4 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.reaperscans
+
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
 
diff --git a/src/en/rizzcomic/build.gradle b/src/en/rizzcomic/build.gradle
index 391cfeaa0..c51591662 100644
--- a/src/en/rizzcomic/build.gradle
+++ b/src/en/rizzcomic/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.RizzComic'
     themePkg = 'mangathemesia'
     baseUrl = 'https://rizzfables.com'
-    overrideVersionCode = 9
+    overrideVersionCode = 10
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/tapastic/build.gradle b/src/en/tapastic/build.gradle
index 48606be86..e213995df 100644
--- a/src/en/tapastic/build.gradle
+++ b/src/en/tapastic/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Tapas'
     extClass = '.Tapastic'
-    extVersionCode = 20
+    extVersionCode = 21
     isNsfw = true
 }
 
diff --git a/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt b/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt
index 8f31ee85b..51d026c95 100644
--- a/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt
+++ b/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.tapastic
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.webkit.CookieManager
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.boolean
 import kotlinx.serialization.json.int
@@ -32,8 +32,6 @@ import okhttp3.Response
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -99,9 +97,7 @@ class Tapastic : ConfigurableSource, ParsedHttpSource() {
         .addInterceptor(TextInterceptor())
         .build()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun headersBuilder(): Headers.Builder = Headers.Builder()
         .add("Referer", "https://m.tapas.io")
diff --git a/src/en/tcbscans/build.gradle b/src/en/tcbscans/build.gradle
index 15d0dfe61..0b97ff449 100644
--- a/src/en/tcbscans/build.gradle
+++ b/src/en/tcbscans/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TCB Scans'
     extClass = '.TCBScans'
-    extVersionCode = 8
+    extVersionCode = 9
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/tcbscans/src/eu/kanade/tachiyomi/extension/en/tcbscans/TCBScans.kt b/src/en/tcbscans/src/eu/kanade/tachiyomi/extension/en/tcbscans/TCBScans.kt
index 1ceaa4ba0..dc391958b 100644
--- a/src/en/tcbscans/src/eu/kanade/tachiyomi/extension/en/tcbscans/TCBScans.kt
+++ b/src/en/tcbscans/src/eu/kanade/tachiyomi/extension/en/tcbscans/TCBScans.kt
@@ -9,6 +9,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Request
 import okhttp3.Response
 import okio.IOException
@@ -123,7 +124,7 @@ class TCBScans : ParsedHttpSource() {
 
     init {
         val context = Injekt.get<Application>()
-        val prefs = context.getSharedPreferences("source_$id", 0x0000)
+        val prefs = getPreferences()
 
         if (!prefs.getBoolean("legacy_updateTime_removed", false)) {
             try {
diff --git a/src/en/theblank/build.gradle b/src/en/theblank/build.gradle
index 6d1a36bcd..91fa900e1 100644
--- a/src/en/theblank/build.gradle
+++ b/src/en/theblank/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.TheBlank'
     themePkg = 'madara'
     baseUrl = 'https://theblank.net'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/en/theblank/src/eu/kanade/tachiyomi/extension/en/theblank/TheBlank.kt b/src/en/theblank/src/eu/kanade/tachiyomi/extension/en/theblank/TheBlank.kt
index d4e3902fa..f639cd39d 100644
--- a/src/en/theblank/src/eu/kanade/tachiyomi/extension/en/theblank/TheBlank.kt
+++ b/src/en/theblank/src/eu/kanade/tachiyomi/extension/en/theblank/TheBlank.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.theblank
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -9,8 +8,7 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -23,7 +21,7 @@ class TheBlank :
     ),
     ConfigurableSource {
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val client = super.client.newBuilder()
         .rateLimit(1)
diff --git a/src/en/webcomics/build.gradle b/src/en/webcomics/build.gradle
index 4d2d2bf7b..7790dc259 100644
--- a/src/en/webcomics/build.gradle
+++ b/src/en/webcomics/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Webcomics'
     extClass = '.Webcomics'
-    extVersionCode = 5
+    extVersionCode = 6
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/webcomics/src/eu/kanade/tachiyomi/extension/en/webcomics/Webcomics.kt b/src/en/webcomics/src/eu/kanade/tachiyomi/extension/en/webcomics/Webcomics.kt
index 8344a7d04..d612f2470 100644
--- a/src/en/webcomics/src/eu/kanade/tachiyomi/extension/en/webcomics/Webcomics.kt
+++ b/src/en/webcomics/src/eu/kanade/tachiyomi/extension/en/webcomics/Webcomics.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.en.webcomics
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.PREF_KEY_RANDOM_UA
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -23,8 +23,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 class Webcomics : ParsedHttpSource(), ConfigurableSource {
@@ -41,7 +39,7 @@ class Webcomics : ParsedHttpSource(), ConfigurableSource {
 
     private val json: Json by injectLazy()
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override fun headersBuilder() = super.headersBuilder()
         .set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
diff --git a/src/es/emperorscan/build.gradle b/src/es/emperorscan/build.gradle
index f9197315d..89f3ba6d9 100644
--- a/src/es/emperorscan/build.gradle
+++ b/src/es/emperorscan/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.EmperorScan'
     themePkg = 'madara'
     baseUrl = 'https://zonaemperor.com'
-    overrideVersionCode = 6
+    overrideVersionCode = 7
     isNsfw = false
 }
 
diff --git a/src/es/emperorscan/src/eu/kanade/tachiyomi/extension/es/emperorscan/EmperorScan.kt b/src/es/emperorscan/src/eu/kanade/tachiyomi/extension/es/emperorscan/EmperorScan.kt
index 94884a19a..844a29fd7 100644
--- a/src/es/emperorscan/src/eu/kanade/tachiyomi/extension/es/emperorscan/EmperorScan.kt
+++ b/src/es/emperorscan/src/eu/kanade/tachiyomi/extension/es/emperorscan/EmperorScan.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.emperorscan
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -10,9 +9,8 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
 import eu.kanade.tachiyomi.source.ConfigurableSource
+import keiyoushi.utils.getPreferences
 import okhttp3.HttpUrl.Companion.toHttpUrl
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -25,8 +23,7 @@ class EmperorScan :
     ),
     ConfigurableSource {
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val useLoadMoreRequest = LoadMoreStrategy.Never
     override val useNewChapterEndpoint = true
diff --git a/src/es/ikigaimangas/build.gradle b/src/es/ikigaimangas/build.gradle
index 8b55c7c92..a6d8b2076 100644
--- a/src/es/ikigaimangas/build.gradle
+++ b/src/es/ikigaimangas/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Ikigai Mangas'
     extClass = '.IkigaiMangas'
-    extVersionCode = 23
+    extVersionCode = 24
     isNsfw = true
 }
 
diff --git a/src/es/ikigaimangas/src/eu/kanade/tachiyomi/extension/es/ikigaimangas/IkigaiMangas.kt b/src/es/ikigaimangas/src/eu/kanade/tachiyomi/extension/es/ikigaimangas/IkigaiMangas.kt
index 4f9c6aa60..81d8f39fd 100644
--- a/src/es/ikigaimangas/src/eu/kanade/tachiyomi/extension/es/ikigaimangas/IkigaiMangas.kt
+++ b/src/es/ikigaimangas/src/eu/kanade/tachiyomi/extension/es/ikigaimangas/IkigaiMangas.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.ikigaimangas
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -18,13 +17,12 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -85,8 +83,7 @@ class IkigaiMangas : HttpSource(), ConfigurableSource {
             .build()
     }
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private val lazyHeaders by lazy {
         headersBuilder()
diff --git a/src/es/lectortmo/build.gradle b/src/es/lectortmo/build.gradle
index 275278c88..485f7a266 100644
--- a/src/es/lectortmo/build.gradle
+++ b/src/es/lectortmo/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TuMangaOnline'
     extClass = '.LectorTmo'
-    extVersionCode = 6
+    extVersionCode = 7
     isNsfw = true
 }
 
diff --git a/src/es/lectortmo/src/eu/kanade/tachiyomi/extension/es/lectortmo/LectorTmo.kt b/src/es/lectortmo/src/eu/kanade/tachiyomi/extension/es/lectortmo/LectorTmo.kt
index 08a92ad62..846f8cc8e 100644
--- a/src/es/lectortmo/src/eu/kanade/tachiyomi/extension/es/lectortmo/LectorTmo.kt
+++ b/src/es/lectortmo/src/eu/kanade/tachiyomi/extension/es/lectortmo/LectorTmo.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.es.lectortmo
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.CheckBoxPreference
 import androidx.preference.PreferenceScreen
@@ -18,6 +17,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.FormBody
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -26,8 +26,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.security.SecureRandom
 import java.security.cert.X509Certificate
 import java.text.SimpleDateFormat
@@ -47,9 +45,7 @@ class LectorTmo : ParsedHttpSource(), ConfigurableSource {
 
     override val lang = "es"
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val supportsLatest = true
 
diff --git a/src/es/mangacrab/build.gradle b/src/es/mangacrab/build.gradle
index e0060f69b..49e438043 100644
--- a/src/es/mangacrab/build.gradle
+++ b/src/es/mangacrab/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaCrab'
     themePkg = 'madara'
     baseUrl = 'https://wikicrab.xyz'
-    overrideVersionCode = 11
+    overrideVersionCode = 12
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/mangacrab/src/eu/kanade/tachiyomi/extension/es/mangacrab/MangaCrab.kt b/src/es/mangacrab/src/eu/kanade/tachiyomi/extension/es/mangacrab/MangaCrab.kt
index 508ca1001..6dc3ee3a4 100644
--- a/src/es/mangacrab/src/eu/kanade/tachiyomi/extension/es/mangacrab/MangaCrab.kt
+++ b/src/es/mangacrab/src/eu/kanade/tachiyomi/extension/es/mangacrab/MangaCrab.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.mangacrab
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -10,8 +9,7 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -24,8 +22,7 @@ class MangaCrab :
     ),
     ConfigurableSource {
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client = super.client.newBuilder()
         .setRandomUserAgent(
diff --git a/src/es/mangamx/build.gradle b/src/es/mangamx/build.gradle
index 84911e0d4..b9a67ba40 100644
--- a/src/es/mangamx/build.gradle
+++ b/src/es/mangamx/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MangaOni'
     extClass = '.MangaOni'
-    extVersionCode = 16
+    extVersionCode = 17
     isNsfw = true
 }
 
diff --git a/src/es/mangamx/src/eu/kanade/tachiyomi/extension/es/mangamx/MangaOni.kt b/src/es/mangamx/src/eu/kanade/tachiyomi/extension/es/mangamx/MangaOni.kt
index 9cc8ffd18..9bef31615 100644
--- a/src/es/mangamx/src/eu/kanade/tachiyomi/extension/es/mangamx/MangaOni.kt
+++ b/src/es/mangamx/src/eu/kanade/tachiyomi/extension/es/mangamx/MangaOni.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.mangamx
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.net.Uri
 import android.util.Base64
@@ -14,12 +13,11 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.nio.charset.Charset
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -310,9 +308,7 @@ open class MangaOni : ConfigurableSource, ParsedHttpSource() {
         Pair("Isekai", "43"),
     )
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
         val contentPref = androidx.preference.CheckBoxPreference(screen.context).apply {
diff --git a/src/es/noblessetranslations/build.gradle b/src/es/noblessetranslations/build.gradle
index 633975369..9fe863321 100644
--- a/src/es/noblessetranslations/build.gradle
+++ b/src/es/noblessetranslations/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.NoblesseTranslations'
     themePkg = 'madara'
     baseUrl = 'https://www.swordalada.org'
-    overrideVersionCode = 5
+    overrideVersionCode = 6
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/noblessetranslations/src/eu/kanade/tachiyomi/extension/es/noblessetranslations/NoblesseTranslations.kt b/src/es/noblessetranslations/src/eu/kanade/tachiyomi/extension/es/noblessetranslations/NoblesseTranslations.kt
index 8a05328f3..574cebce1 100644
--- a/src/es/noblessetranslations/src/eu/kanade/tachiyomi/extension/es/noblessetranslations/NoblesseTranslations.kt
+++ b/src/es/noblessetranslations/src/eu/kanade/tachiyomi/extension/es/noblessetranslations/NoblesseTranslations.kt
@@ -1,14 +1,12 @@
 package eu.kanade.tachiyomi.extension.es.noblessetranslations
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -21,8 +19,7 @@ class NoblesseTranslations :
     ),
     ConfigurableSource {
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/es/olympusscanlation/build.gradle b/src/es/olympusscanlation/build.gradle
index 75985470c..d2ab46ef8 100644
--- a/src/es/olympusscanlation/build.gradle
+++ b/src/es/olympusscanlation/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Olympus Scanlation'
     extClass = '.OlympusScanlation'
-    extVersionCode = 13
+    extVersionCode = 14
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/olympusscanlation/src/eu/kanade/tachiyomi/extension/es/olympusscanlation/OlympusScanlation.kt b/src/es/olympusscanlation/src/eu/kanade/tachiyomi/extension/es/olympusscanlation/OlympusScanlation.kt
index 759b0a762..e454e6481 100644
--- a/src/es/olympusscanlation/src/eu/kanade/tachiyomi/extension/es/olympusscanlation/OlympusScanlation.kt
+++ b/src/es/olympusscanlation/src/eu/kanade/tachiyomi/extension/es/olympusscanlation/OlympusScanlation.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.olympusscanlation
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.CheckBoxPreference
@@ -17,13 +16,12 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -68,8 +66,7 @@ class OlympusScanlation : HttpSource(), ConfigurableSource {
 
     override val supportsLatest: Boolean = true
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client by lazy {
         network.cloudflareClient.newBuilder()
diff --git a/src/es/plottwistnofansub/build.gradle b/src/es/plottwistnofansub/build.gradle
index 188827076..c770b6061 100644
--- a/src/es/plottwistnofansub/build.gradle
+++ b/src/es/plottwistnofansub/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Plot Twist No Fansub'
     extClass = '.PlotTwistNoFansub'
-    extVersionCode = 8
+    extVersionCode = 9
     isNsfw = true
 }
 
diff --git a/src/es/plottwistnofansub/src/eu/kanade/tachiyomi/extension/es/plottwistnofansub/PlotTwistNoFansub.kt b/src/es/plottwistnofansub/src/eu/kanade/tachiyomi/extension/es/plottwistnofansub/PlotTwistNoFansub.kt
index bb855ed60..6985d37f0 100644
--- a/src/es/plottwistnofansub/src/eu/kanade/tachiyomi/extension/es/plottwistnofansub/PlotTwistNoFansub.kt
+++ b/src/es/plottwistnofansub/src/eu/kanade/tachiyomi/extension/es/plottwistnofansub/PlotTwistNoFansub.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.plottwistnofansub
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -19,6 +18,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.FormBody
@@ -32,8 +32,6 @@ import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import org.jsoup.nodes.Entities
 import org.jsoup.select.Elements
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 class PlotTwistNoFansub : ParsedHttpSource(), ConfigurableSource {
@@ -48,8 +46,7 @@ class PlotTwistNoFansub : ParsedHttpSource(), ConfigurableSource {
 
     private val json: Json by injectLazy()
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client: OkHttpClient = network.cloudflareClient.newBuilder()
         .setRandomUserAgent(
diff --git a/src/es/tmohentai/build.gradle b/src/es/tmohentai/build.gradle
index f2a38cb83..ff1b20943 100644
--- a/src/es/tmohentai/build.gradle
+++ b/src/es/tmohentai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TMOHentai'
     extClass = '.TMOHentai'
-    extVersionCode = 9
+    extVersionCode = 10
     isNsfw = true
 }
 
diff --git a/src/es/tmohentai/src/eu/kanade/tachiyomi/extension/es/tmohentai/TMOHentai.kt b/src/es/tmohentai/src/eu/kanade/tachiyomi/extension/es/tmohentai/TMOHentai.kt
index 70a1b9be0..c63861547 100644
--- a/src/es/tmohentai/src/eu/kanade/tachiyomi/extension/es/tmohentai/TMOHentai.kt
+++ b/src/es/tmohentai/src/eu/kanade/tachiyomi/extension/es/tmohentai/TMOHentai.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.es.tmohentai
 
-import android.app.Application
 import android.content.SharedPreferences
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.asObservableSuccess
@@ -14,6 +13,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.ParsedHttpSource
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -21,8 +21,6 @@ import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class TMOHentai : ConfigurableSource, ParsedHttpSource() {
 
@@ -41,9 +39,7 @@ class TMOHentai : ConfigurableSource, ParsedHttpSource() {
     override fun headersBuilder(): Headers.Builder = super.headersBuilder()
         .set("Referer", "$baseUrl/")
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun popularMangaRequest(page: Int) = GET("$baseUrl/section/all?view=list&page=$page&order=popularity&order-dir=desc&search[searchText]=&search[searchBy]=name&type=all", headers)
 
diff --git a/src/fr/japanread/build.gradle b/src/fr/japanread/build.gradle
index 2acbe545e..83ff30155 100644
--- a/src/fr/japanread/build.gradle
+++ b/src/fr/japanread/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Bento Manga'
     extClass = '.BentoManga'
-    extVersionCode = 15
+    extVersionCode = 16
     isNsfw = true
 }
 
diff --git a/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt b/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt
index 00a9abbf7..26489bddb 100644
--- a/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt
+++ b/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.fr.japanread
 
-import android.app.Application
 import android.net.Uri
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.jsonArray
 import kotlinx.serialization.json.jsonObject
@@ -27,8 +27,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.util.Calendar
 import java.util.concurrent.TimeUnit
@@ -67,7 +65,7 @@ class BentoManga : ParsedHttpSource(), ConfigurableSource {
             set("Sec-Fetch-User", "?1")
         }
 
-        val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+        val preferences = getPreferences()
         val userAgent = preferences.getString(USER_AGENT_PREF, "")!!
         return if (userAgent.isNotBlank()) {
             builder.set("User-Agent", userAgent)
diff --git a/src/fr/japscan/build.gradle b/src/fr/japscan/build.gradle
index 31fda5f86..aae08cd26 100644
--- a/src/fr/japscan/build.gradle
+++ b/src/fr/japscan/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Japscan'
     extClass = '.Japscan'
-    extVersionCode = 48
+    extVersionCode = 49
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt b/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt
index 1d566a59c..12e584589 100644
--- a/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt
+++ b/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt
@@ -21,6 +21,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
 import kotlinx.serialization.json.jsonArray
@@ -55,9 +56,7 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
 
     private val json: Json by injectLazy()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client: OkHttpClient = network.cloudflareClient.newBuilder()
         .rateLimit(1, 2)
diff --git a/src/fr/sushiscan/build.gradle b/src/fr/sushiscan/build.gradle
index b88ddce26..a8991c6a3 100644
--- a/src/fr/sushiscan/build.gradle
+++ b/src/fr/sushiscan/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.SushiScan'
     themePkg = 'mangathemesia'
     baseUrl = 'https://sushiscan.net'
-    overrideVersionCode = 12
+    overrideVersionCode = 13
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/fr/sushiscan/src/eu/kanade/tachiyomi/extension/fr/sushiscan/SushiScan.kt b/src/fr/sushiscan/src/eu/kanade/tachiyomi/extension/fr/sushiscan/SushiScan.kt
index 4226a7555..45386d85c 100644
--- a/src/fr/sushiscan/src/eu/kanade/tachiyomi/extension/fr/sushiscan/SushiScan.kt
+++ b/src/fr/sushiscan/src/eu/kanade/tachiyomi/extension/fr/sushiscan/SushiScan.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.fr.sushiscan
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.Page
 import eu.kanade.tachiyomi.source.model.SManga
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import okhttp3.Headers
@@ -20,8 +20,6 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import org.jsoup.nodes.Document
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -36,7 +34,7 @@ class SushiScan :
     ),
     ConfigurableSource {
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         addRandomUAPreferenceToScreen(screen)
diff --git a/src/id/doujindesu/build.gradle b/src/id/doujindesu/build.gradle
index c21f76341..9861e6443 100644
--- a/src/id/doujindesu/build.gradle
+++ b/src/id/doujindesu/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'DoujinDesu'
     extClass = '.DoujinDesu'
-    extVersionCode = 8
+    extVersionCode = 9
     isNsfw = true
 }
 
diff --git a/src/id/doujindesu/src/eu/kanade/tachiyomi/extension/id/doujindesu/DoujinDesu.kt b/src/id/doujindesu/src/eu/kanade/tachiyomi/extension/id/doujindesu/DoujinDesu.kt
index 8006d4426..f6a31b364 100644
--- a/src/id/doujindesu/src/eu/kanade/tachiyomi/extension/id/doujindesu/DoujinDesu.kt
+++ b/src/id/doujindesu/src/eu/kanade/tachiyomi/extension/id/doujindesu/DoujinDesu.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.id.doujindesu
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -17,6 +16,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.FormBody
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -24,8 +24,6 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -39,9 +37,7 @@ class DoujinDesu : ParsedHttpSource(), ConfigurableSource {
 
     // Private stuff
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val DATE_FORMAT by lazy {
         SimpleDateFormat("EEEE, dd MMMM yyyy", Locale("id"))
diff --git a/src/id/doujinku/build.gradle b/src/id/doujinku/build.gradle
index 8d9f17637..e295f2e13 100644
--- a/src/id/doujinku/build.gradle
+++ b/src/id/doujinku/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Doujinku'
     themePkg = 'mangathemesia'
     baseUrl = 'https://doujinku.xyz'
-    overrideVersionCode = 1
+    overrideVersionCode = 2
     isNsfw = true
 }
 
diff --git a/src/id/doujinku/src/eu/kanade/tachiyomi/extension/id/doujinku/Doujinku.kt b/src/id/doujinku/src/eu/kanade/tachiyomi/extension/id/doujinku/Doujinku.kt
index 47d155e09..e35d88b5c 100644
--- a/src/id/doujinku/src/eu/kanade/tachiyomi/extension/id/doujinku/Doujinku.kt
+++ b/src/id/doujinku/src/eu/kanade/tachiyomi/extension/id/doujinku/Doujinku.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.id.doujinku
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -19,8 +17,7 @@ class Doujinku :
         dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("id")),
     ),
     ConfigurableSource {
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/id/shinigami/build.gradle b/src/id/shinigami/build.gradle
index f1f94c521..e0dae92eb 100644
--- a/src/id/shinigami/build.gradle
+++ b/src/id/shinigami/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Shinigami'
     themePkg = 'madara'
     baseUrl = 'https://shinigami09.com'
-    overrideVersionCode = 30
+    overrideVersionCode = 31
     isNsfw = false
 }
 
diff --git a/src/id/shinigami/src/eu/kanade/tachiyomi/extension/id/shinigami/Shinigami.kt b/src/id/shinigami/src/eu/kanade/tachiyomi/extension/id/shinigami/Shinigami.kt
index 2e558f3d7..245f6f7a6 100644
--- a/src/id/shinigami/src/eu/kanade/tachiyomi/extension/id/shinigami/Shinigami.kt
+++ b/src/id/shinigami/src/eu/kanade/tachiyomi/extension/id/shinigami/Shinigami.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.id.shinigami
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Base64
 import android.widget.Toast
@@ -12,12 +11,11 @@ import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Page
 import eu.kanade.tachiyomi.source.model.SChapter
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class Shinigami : Madara("Shinigami", "https://shinigami09.com", "id"), ConfigurableSource {
     // moved from Reaper Scans (id) to Shinigami (id)
@@ -29,9 +27,7 @@ class Shinigami : Madara("Shinigami", "https://shinigami09.com", "id"), Configur
 
     override val useLoadMoreRequest = LoadMoreStrategy.Never
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: PreferenceScreen) {
         val baseUrlPref = androidx.preference.EditTextPreference(screen.context).apply {
diff --git a/src/ja/manga9co/build.gradle b/src/ja/manga9co/build.gradle
index 6438df6db..7d563d068 100644
--- a/src/ja/manga9co/build.gradle
+++ b/src/ja/manga9co/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaRaw'
     themePkg = 'mangaraw'
     baseUrl = 'https://manga1001.in'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/ja/manga9co/src/eu/kanade/tachiyomi/extension/ja/manga9co/MangaRaw.kt b/src/ja/manga9co/src/eu/kanade/tachiyomi/extension/ja/manga9co/MangaRaw.kt
index c18180cb2..e81eeab71 100644
--- a/src/ja/manga9co/src/eu/kanade/tachiyomi/extension/ja/manga9co/MangaRaw.kt
+++ b/src/ja/manga9co/src/eu/kanade/tachiyomi/extension/ja/manga9co/MangaRaw.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ja.manga9co
 
-import android.app.Application
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.mangaraw.ImageListParser
@@ -9,12 +8,11 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.FilterList
 import eu.kanade.tachiyomi.source.model.Page
+import keiyoushi.utils.getPreferences
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import org.jsoup.select.Evaluator
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import kotlin.random.Random
 
 class MangaRaw : MangaRawTheme("MangaRaw", ""), ConfigurableSource {
@@ -36,7 +34,7 @@ class MangaRaw : MangaRawTheme("MangaRaw", ""), ConfigurableSource {
 
     init {
         val mirrors = MIRRORS
-        val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+        val preferences = getPreferences()
         var mirrorIndex = preferences.getString(MIRROR_PREF, "-1")!!.toInt()
 
         if (mirrorIndex !in mirrors.indices) {
diff --git a/src/ko/newtoki/build.gradle b/src/ko/newtoki/build.gradle
index da95f003d..e24163b21 100644
--- a/src/ko/newtoki/build.gradle
+++ b/src/ko/newtoki/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'NewToki / ManaToki'
     extClass = '.TokiFactory'
-    extVersionCode = 32
+    extVersionCode = 33
     isNsfw = true
 }
 
diff --git a/src/ko/newtoki/src/eu/kanade/tachiyomi/extension/ko/newtoki/Preferences.kt b/src/ko/newtoki/src/eu/kanade/tachiyomi/extension/ko/newtoki/Preferences.kt
index fa81cab9f..1d1169f20 100644
--- a/src/ko/newtoki/src/eu/kanade/tachiyomi/extension/ko/newtoki/Preferences.kt
+++ b/src/ko/newtoki/src/eu/kanade/tachiyomi/extension/ko/newtoki/Preferences.kt
@@ -1,12 +1,10 @@
 package eu.kanade.tachiyomi.extension.ko.newtoki
 
-import android.app.Application
 import android.content.Context
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.ListPreference
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 
 const val MANATOKI_ID = 2526381983439079467L // "NewToki/ko/1"
 const val NEWTOKI_ID = 1977818283770282459L // "NewToki (Webtoon)/ko/1"
@@ -14,8 +12,8 @@ const val NEWTOKI_ID = 1977818283770282459L // "NewToki (Webtoon)/ko/1"
 const val MANATOKI_PREFIX = "manatoki"
 const val NEWTOKI_PREFIX = "newtoki"
 
-val manaTokiPreferences = getSharedPreferences(MANATOKI_ID).migrate()
-val newTokiPreferences = getSharedPreferences(NEWTOKI_ID).migrate()
+val manaTokiPreferences = getPreferences(MANATOKI_ID).migrate()
+val newTokiPreferences = getPreferences(NEWTOKI_ID).migrate()
 
 fun getPreferencesInternal(context: Context) = arrayOf(
 
@@ -85,6 +83,3 @@ private const val DOMAIN_NUMBER_PREF = "domainNumber"
 private const val RATE_LIMIT_PERIOD_PREF = "rateLimitPeriod"
 private const val RATE_LIMIT_PERIOD_DEFAULT = 2.toString()
 private const val RATE_LIMIT_PERIOD_MAX = 9
-
-private fun getSharedPreferences(id: Long): SharedPreferences =
-    Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
diff --git a/src/ko/toonkor/build.gradle b/src/ko/toonkor/build.gradle
index 3673d4bf5..4c77ffb46 100644
--- a/src/ko/toonkor/build.gradle
+++ b/src/ko/toonkor/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Toonkor'
     extClass = '.Toonkor'
-    extVersionCode = 4
+    extVersionCode = 5
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ko/toonkor/src/eu/kanade/tachiyomi/extension/ko/toonkor/Toonkor.kt b/src/ko/toonkor/src/eu/kanade/tachiyomi/extension/ko/toonkor/Toonkor.kt
index 68af6aeb0..04a4a6376 100644
--- a/src/ko/toonkor/src/eu/kanade/tachiyomi/extension/ko/toonkor/Toonkor.kt
+++ b/src/ko/toonkor/src/eu/kanade/tachiyomi/extension/ko/toonkor/Toonkor.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ko.toonkor
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Base64
 import eu.kanade.tachiyomi.AppInfo
@@ -12,12 +11,11 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.nio.charset.Charset
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -186,9 +184,7 @@ class Toonkor : ConfigurableSource, ParsedHttpSource() {
 
     // Preferences
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
         val baseUrlPref = androidx.preference.EditTextPreference(screen.context).apply {
diff --git a/src/ko/wolfdotcom/build.gradle b/src/ko/wolfdotcom/build.gradle
index 10484ae79..4598f122f 100644
--- a/src/ko/wolfdotcom/build.gradle
+++ b/src/ko/wolfdotcom/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Wolf.com'
     extClass = '.WolfFactory'
-    extVersionCode = 1
+    extVersionCode = 2
     isNsfw = true
 }
 
diff --git a/src/ko/wolfdotcom/src/eu/kanade/tachiyomi/extension/ko/wolfdotcom/Wolf.kt b/src/ko/wolfdotcom/src/eu/kanade/tachiyomi/extension/ko/wolfdotcom/Wolf.kt
index f45e3e7fc..7751e577e 100644
--- a/src/ko/wolfdotcom/src/eu/kanade/tachiyomi/extension/ko/wolfdotcom/Wolf.kt
+++ b/src/ko/wolfdotcom/src/eu/kanade/tachiyomi/extension/ko/wolfdotcom/Wolf.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ko.wolfdotcom
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
@@ -27,8 +27,6 @@ import okhttp3.Response
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.net.URLEncoder
@@ -58,9 +56,7 @@ open class Wolf(
 
     private val json: Json by injectLazy()
 
-    private val preference: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preference: SharedPreferences by getPreferencesLazy()
 
     override fun fetchPopularManga(page: Int): Observable<MangasPage> {
         return fetchSearchManga(page, "", POPULAR)
diff --git a/src/pt/bakai/build.gradle b/src/pt/bakai/build.gradle
index 9a436f985..a9ff1c4bd 100644
--- a/src/pt/bakai/build.gradle
+++ b/src/pt/bakai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Bakai'
     extClass = '.Bakai'
-    extVersionCode = 8
+    extVersionCode = 9
     isNsfw = true
 }
 
diff --git a/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt
index ff004f68d..ab5e348d6 100644
--- a/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt
+++ b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.bakai
 
-import android.app.Application
 import android.content.SharedPreferences
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.asObservableSuccess
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.model.UpdateStrategy
 import eu.kanade.tachiyomi.source.online.ParsedHttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import okhttp3.Cookie
 import okhttp3.CookieJar
 import okhttp3.HttpUrl
@@ -23,8 +23,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import java.util.concurrent.TimeUnit
 
@@ -60,8 +58,7 @@ class Bakai : ParsedHttpSource() {
             .build()
     }
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override fun headersBuilder() = super.headersBuilder()
         .set("Referer", baseUrl)
diff --git a/src/pt/blackoutcomics/build.gradle b/src/pt/blackoutcomics/build.gradle
index a0cbbe98d..58b7b926c 100644
--- a/src/pt/blackoutcomics/build.gradle
+++ b/src/pt/blackoutcomics/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Blackout Comics'
     extClass = '.BlackoutComics'
-    extVersionCode = 6
+    extVersionCode = 7
     isNsfw = true
 }
 
diff --git a/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt b/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt
index 117f988f3..11eedd3cf 100644
--- a/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt
+++ b/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.blackoutcomics
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.FormBody
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Interceptor
@@ -24,8 +24,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -98,8 +96,7 @@ class BlackoutComics : ParsedHttpSource(), ConfigurableSource {
         return chain.proceed(request)
     }
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override fun headersBuilder() =
         super.headersBuilder()
diff --git a/src/pt/fenixmanhwas/src/eu/kanade/tachiyomi/extension/pt/fenixmanhwas/FenixManhwas.kt b/src/pt/fenixmanhwas/src/eu/kanade/tachiyomi/extension/pt/fenixmanhwas/FenixManhwas.kt
index 0b1f44409..5c9c84452 100644
--- a/src/pt/fenixmanhwas/src/eu/kanade/tachiyomi/extension/pt/fenixmanhwas/FenixManhwas.kt
+++ b/src/pt/fenixmanhwas/src/eu/kanade/tachiyomi/extension/pt/fenixmanhwas/FenixManhwas.kt
@@ -1,4 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.fenixmanhwas
+
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 
 class FenixManhwas : Madara(
diff --git a/src/pt/hentaiteca/build.gradle b/src/pt/hentaiteca/build.gradle
index 870b3d36e..f9ec61a75 100644
--- a/src/pt/hentaiteca/build.gradle
+++ b/src/pt/hentaiteca/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.HentaiTeca'
     themePkg = 'madara'
     baseUrl = 'https://hentaiteca.net'
-    overrideVersionCode = 2
+    overrideVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/pt/hentaiteca/src/eu/kanade/tachiyomi/extension/pt/hentaiteca/HentaiTeca.kt b/src/pt/hentaiteca/src/eu/kanade/tachiyomi/extension/pt/hentaiteca/HentaiTeca.kt
index 19fd2a4a2..ed15bd789 100644
--- a/src/pt/hentaiteca/src/eu/kanade/tachiyomi/extension/pt/hentaiteca/HentaiTeca.kt
+++ b/src/pt/hentaiteca/src/eu/kanade/tachiyomi/extension/pt/hentaiteca/HentaiTeca.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.hentaiteca
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -9,10 +8,9 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
+import keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.OkHttpClient
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -26,7 +24,7 @@ class HentaiTeca :
     ),
     ConfigurableSource {
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val client: OkHttpClient = super.client.newBuilder()
         .setRandomUserAgent(
diff --git a/src/pt/mangaonline/build.gradle b/src/pt/mangaonline/build.gradle
index fb701df82..e6082e710 100644
--- a/src/pt/mangaonline/build.gradle
+++ b/src/pt/mangaonline/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Manga Online'
     extClass = '.MangaOnline'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/pt/mangaonline/src/eu/kanade/tachiyomi/extension/pt/mangaonline/MangaOnline.kt b/src/pt/mangaonline/src/eu/kanade/tachiyomi/extension/pt/mangaonline/MangaOnline.kt
index 78bb2f5b0..91dd4c9ee 100644
--- a/src/pt/mangaonline/src/eu/kanade/tachiyomi/extension/pt/mangaonline/MangaOnline.kt
+++ b/src/pt/mangaonline/src/eu/kanade/tachiyomi/extension/pt/mangaonline/MangaOnline.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.mangaonline
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.preference.PreferenceScreen
@@ -19,6 +18,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -28,8 +28,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -45,8 +43,7 @@ class MangaOnline : ParsedHttpSource(), ConfigurableSource {
 
     private var genresSet: Set<Genre> = emptySet()
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client: OkHttpClient =
         network.cloudflareClient.newBuilder()
diff --git a/src/pt/randomscan/build.gradle b/src/pt/randomscan/build.gradle
index d1149f6af..186002bee 100644
--- a/src/pt/randomscan/build.gradle
+++ b/src/pt/randomscan/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'Lura Toon'
     extClass = '.LuraToon'
     baseUrl = 'https://luratoons.net'
-    extVersionCode = 56
+    extVersionCode = 57
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/pt/randomscan/src/eu/kanade/tachiyomi/extension/pt/randomscan/LuraToon.kt b/src/pt/randomscan/src/eu/kanade/tachiyomi/extension/pt/randomscan/LuraToon.kt
index b9e201db5..32346de97 100644
--- a/src/pt/randomscan/src/eu/kanade/tachiyomi/extension/pt/randomscan/LuraToon.kt
+++ b/src/pt/randomscan/src/eu/kanade/tachiyomi/extension/pt/randomscan/LuraToon.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.randomscan
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.extension.pt.randomscan.dto.Capitulo
@@ -22,13 +21,12 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Interceptor
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -44,9 +42,7 @@ class LuraToon : HttpSource(), ConfigurableSource {
 
     private val json: Json by injectLazy()
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient
         .newBuilder()
diff --git a/src/pt/remangas/build.gradle b/src/pt/remangas/build.gradle
index 4491f2d1e..b5a070df9 100644
--- a/src/pt/remangas/build.gradle
+++ b/src/pt/remangas/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Remangas'
     themePkg = 'madara'
     baseUrl = 'https://remangas.net'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
     isNsfw = true
 }
 
diff --git a/src/pt/remangas/src/eu/kanade/tachiyomi/extension/pt/remangas/Remangas.kt b/src/pt/remangas/src/eu/kanade/tachiyomi/extension/pt/remangas/Remangas.kt
index 12deb41ae..a749d75ba 100644
--- a/src/pt/remangas/src/eu/kanade/tachiyomi/extension/pt/remangas/Remangas.kt
+++ b/src/pt/remangas/src/eu/kanade/tachiyomi/extension/pt/remangas/Remangas.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.remangas
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
@@ -10,9 +9,8 @@ import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.OkHttpClient
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -27,9 +25,7 @@ class Remangas :
 
     override val useLoadMoreRequest = LoadMoreStrategy.Always
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val client: OkHttpClient = super.client.newBuilder()
         .setRandomUserAgent(
diff --git a/src/pt/sssscanlator/build.gradle b/src/pt/sssscanlator/build.gradle
index 91463633a..4d990d84e 100644
--- a/src/pt/sssscanlator/build.gradle
+++ b/src/pt/sssscanlator/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.YomuComics'
     themePkg = 'mangathemesia'
     baseUrl = 'https://yomucomics.com'
-    overrideVersionCode = 5
+    overrideVersionCode = 6
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/pt/sssscanlator/src/eu/kanade/tachiyomi/extension/pt/sssscanlator/YomuComics.kt b/src/pt/sssscanlator/src/eu/kanade/tachiyomi/extension/pt/sssscanlator/YomuComics.kt
index 179312f0d..6ecc8460f 100644
--- a/src/pt/sssscanlator/src/eu/kanade/tachiyomi/extension/pt/sssscanlator/YomuComics.kt
+++ b/src/pt/sssscanlator/src/eu/kanade/tachiyomi/extension/pt/sssscanlator/YomuComics.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.sssscanlator
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -11,10 +10,9 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.interceptor.rateLimit
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Page
+import keiyoushi.utils.getPreferences
 import okhttp3.OkHttpClient
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -31,7 +29,7 @@ class YomuComics :
     // SSSScanlator
     override val id = 1497838059713668619
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val client: OkHttpClient = super.client.newBuilder()
         .setRandomUserAgent(
diff --git a/src/pt/sussyscan/build.gradle b/src/pt/sussyscan/build.gradle
index 37abef250..7100dbf8f 100644
--- a/src/pt/sussyscan/build.gradle
+++ b/src/pt/sussyscan/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Sussy Toons'
     extClass = '.SussyToons'
-    extVersionCode = 50
+    extVersionCode = 51
     isNsfw = true
 }
 
diff --git a/src/pt/sussyscan/src/eu/kanade/tachiyomi/extension/pt/sussyscan/SussyToons.kt b/src/pt/sussyscan/src/eu/kanade/tachiyomi/extension/pt/sussyscan/SussyToons.kt
index 789c669e8..41cde72ff 100644
--- a/src/pt/sussyscan/src/eu/kanade/tachiyomi/extension/pt/sussyscan/SussyToons.kt
+++ b/src/pt/sussyscan/src/eu/kanade/tachiyomi/extension/pt/sussyscan/SussyToons.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.pt.sussyscan
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
@@ -26,8 +26,6 @@ import okhttp3.Response
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -49,8 +47,7 @@ class SussyToons : HttpSource(), ConfigurableSource {
 
     private val isCi = System.getenv("CI") == "true"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private var apiUrl: String
         get() = preferences.getString(API_BASE_URL_PREF, defaultApiUrl)!!
diff --git a/src/pt/taiyo/build.gradle b/src/pt/taiyo/build.gradle
index 7185c964b..c8415bb9a 100644
--- a/src/pt/taiyo/build.gradle
+++ b/src/pt/taiyo/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Taiyō'
     extClass = '.Taiyo'
-    extVersionCode = 5
+    extVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/pt/taiyo/src/eu/kanade/tachiyomi/extension/pt/taiyo/Taiyo.kt b/src/pt/taiyo/src/eu/kanade/tachiyomi/extension/pt/taiyo/Taiyo.kt
index 211acbf09..c0aeeff9d 100644
--- a/src/pt/taiyo/src/eu/kanade/tachiyomi/extension/pt/taiyo/Taiyo.kt
+++ b/src/pt/taiyo/src/eu/kanade/tachiyomi/extension/pt/taiyo/Taiyo.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.pt.taiyo
 
-import android.app.Application
 import android.content.SharedPreferences
 import eu.kanade.tachiyomi.extension.pt.taiyo.dto.AdditionalInfoDto
 import eu.kanade.tachiyomi.extension.pt.taiyo.dto.ChapterListDto
@@ -17,6 +16,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -38,8 +38,6 @@ import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import org.jsoup.select.Elements
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -55,8 +53,7 @@ class Taiyo : ParsedHttpSource() {
     // The source doesn't show the title on the home page
     override val supportsLatest = false
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private var bearerToken: String = preferences.getString(BEARER_TOKEN_PREF, "").toString()
 
diff --git a/src/ru/allhentai/build.gradle b/src/ru/allhentai/build.gradle
index a07d528ab..7c4f62aab 100644
--- a/src/ru/allhentai/build.gradle
+++ b/src/ru/allhentai/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.AllHentai'
     themePkg = 'grouple'
     baseUrl = 'https://20.allhen.online'
-    overrideVersionCode = 24
+    overrideVersionCode = 25
     isNsfw = true
 }
 
diff --git a/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt b/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt
index f9cacc84a..d068216b1 100644
--- a/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt
+++ b/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt
@@ -1,20 +1,18 @@
 package eu.kanade.tachiyomi.extension.ru.allhentai
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class AllHentai : GroupLe("AllHentai", "https://20.allhen.online", "ru") {
     override val id = 1809051393403180443
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/desu/build.gradle b/src/ru/desu/build.gradle
index 904ccee78..c22b16bad 100644
--- a/src/ru/desu/build.gradle
+++ b/src/ru/desu/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Desu'
     extClass = '.Desu'
-    extVersionCode = 26
+    extVersionCode = 27
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ru/desu/src/eu/kanade/tachiyomi/extension/ru/desu/Desu.kt b/src/ru/desu/src/eu/kanade/tachiyomi/extension/ru/desu/Desu.kt
index f114efeca..7852c1482 100644
--- a/src/ru/desu/src/eu/kanade/tachiyomi/extension/ru/desu/Desu.kt
+++ b/src/ru/desu/src/eu/kanade/tachiyomi/extension/ru/desu/Desu.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ru.desu
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.contentOrNull
@@ -32,8 +32,6 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 class Desu : ConfigurableSource, HttpSource() {
@@ -41,8 +39,7 @@ class Desu : ConfigurableSource, HttpSource() {
 
     override val id: Long = 6684416167758830305
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_DOMAIN_PREF, null).let { prefDefaultDomain ->
diff --git a/src/ru/henchan/build.gradle b/src/ru/henchan/build.gradle
index a12d77b87..1e5e80a6a 100644
--- a/src/ru/henchan/build.gradle
+++ b/src/ru/henchan/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.HenChan'
     themePkg = 'multichan'
     baseUrl = 'https://xxxxx.hentaichan.live'
-    overrideVersionCode = 38
+    overrideVersionCode = 39
     isNsfw = true
 }
 
diff --git a/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt b/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt
index 8c5b6693b..dc6796ee9 100644
--- a/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt
+++ b/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.ru.henchan
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -15,14 +14,13 @@ 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.util.asJsoup
+import keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URL
 import java.text.SimpleDateFormat
 import java.util.Date
@@ -32,9 +30,7 @@ class HenChan : MultiChan("HenChan", "https://xxxxx.hentaichan.live", "ru"), Con
 
     override val id = 5504588601186153612
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val domain = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
 
diff --git a/src/ru/hentailib/build.gradle b/src/ru/hentailib/build.gradle
index d6b90d65e..f97a4419e 100644
--- a/src/ru/hentailib/build.gradle
+++ b/src/ru/hentailib/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.HentaiLib'
     themePkg = 'libgroup'
     baseUrl = 'https://hentailib.me'
-    overrideVersionCode = 19
+    overrideVersionCode = 20
     isNsfw = true
 }
 
diff --git a/src/ru/hentailib/src/eu/kanade/tachiyomi/extension/ru/hentailib/HentaiLib.kt b/src/ru/hentailib/src/eu/kanade/tachiyomi/extension/ru/hentailib/HentaiLib.kt
index b16b01055..90cf2a60b 100644
--- a/src/ru/hentailib/src/eu/kanade/tachiyomi/extension/ru/hentailib/HentaiLib.kt
+++ b/src/ru/hentailib/src/eu/kanade/tachiyomi/extension/ru/hentailib/HentaiLib.kt
@@ -1,19 +1,15 @@
 package eu.kanade.tachiyomi.extension.ru.hentailib
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
 import eu.kanade.tachiyomi.source.model.FilterList
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class HentaiLib : LibGroup("HentaiLib", "https://hentailib.me", "ru") {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private var domain: String = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
     override val baseUrl: String = domain
diff --git a/src/ru/mangalib/build.gradle b/src/ru/mangalib/build.gradle
index 9b281d731..307381c48 100644
--- a/src/ru/mangalib/build.gradle
+++ b/src/ru/mangalib/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MangaLib'
     themePkg = 'libgroup'
     baseUrl = 'https://mangalib.me'
-    overrideVersionCode = 74
+    overrideVersionCode = 75
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ru/mangalib/src/eu/kanade/tachiyomi/extension/ru/mangalib/MangaLib.kt b/src/ru/mangalib/src/eu/kanade/tachiyomi/extension/ru/mangalib/MangaLib.kt
index 5d88c35f6..946890260 100644
--- a/src/ru/mangalib/src/eu/kanade/tachiyomi/extension/ru/mangalib/MangaLib.kt
+++ b/src/ru/mangalib/src/eu/kanade/tachiyomi/extension/ru/mangalib/MangaLib.kt
@@ -1,18 +1,14 @@
 package eu.kanade.tachiyomi.extension.ru.mangalib
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class MangaLib : LibGroup("MangaLib", "https://mangalib.me", "ru") {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private var domain: String = preferences.getString(DOMAIN_PREF, DOMAIN_DEFAULT)!!
     override val baseUrl: String = domain
diff --git a/src/ru/mintmanga/build.gradle b/src/ru/mintmanga/build.gradle
index 7a3e1d612..af2dc416d 100644
--- a/src/ru/mintmanga/build.gradle
+++ b/src/ru/mintmanga/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.MintManga'
     themePkg = 'grouple'
     baseUrl = 'https://2.mintmanga.one'
-    overrideVersionCode = 46
+    overrideVersionCode = 47
     isNsfw = true
 }
 
diff --git a/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/MintManga.kt b/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/MintManga.kt
index f0614fc03..9a28efbd9 100644
--- a/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/MintManga.kt
+++ b/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/MintManga.kt
@@ -1,22 +1,19 @@
 package eu.kanade.tachiyomi.extension.ru.mintmanga
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class MintManga : GroupLe("MintManga", "https://2.mintmanga.one", "ru") {
 
     override val id: Long = 6
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/nudemoon/build.gradle b/src/ru/nudemoon/build.gradle
index c9f5c84ba..e47f5a100 100644
--- a/src/ru/nudemoon/build.gradle
+++ b/src/ru/nudemoon/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Nude-Moon'
     extClass = '.Nudemoon'
-    extVersionCode = 21
+    extVersionCode = 22
     isNsfw = true
 }
 
diff --git a/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt b/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt
index 6225aa587..3488daf85 100644
--- a/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt
+++ b/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.ru.nudemoon
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.webkit.CookieManager
 import android.widget.Toast
@@ -15,13 +14,12 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URLEncoder
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -36,8 +34,7 @@ class Nudemoon : ParsedHttpSource(), ConfigurableSource {
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/readmanga/build.gradle b/src/ru/readmanga/build.gradle
index f1e8cbca6..3601a37cd 100644
--- a/src/ru/readmanga/build.gradle
+++ b/src/ru/readmanga/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.ReadManga'
     themePkg = 'grouple'
     baseUrl = 'https://zz.readmanga.io'
-    overrideVersionCode = 46
+    overrideVersionCode = 47
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/ReadManga.kt b/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/ReadManga.kt
index 36f9ec791..058b9c41a 100644
--- a/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/ReadManga.kt
+++ b/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/ReadManga.kt
@@ -1,22 +1,19 @@
 package eu.kanade.tachiyomi.extension.ru.readmanga
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class ReadManga : GroupLe("ReadManga", "https://zz.readmanga.io", "ru") {
 
     override val id: Long = 5
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/rumix/build.gradle b/src/ru/rumix/build.gradle
index 7073dadb3..a0535677b 100644
--- a/src/ru/rumix/build.gradle
+++ b/src/ru/rumix/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.RuMIX'
     themePkg = 'grouple'
     baseUrl = 'https://rumix.me'
-    overrideVersionCode = 1
+    overrideVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt b/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt
index 4be9606a1..d176a46c0 100644
--- a/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt
+++ b/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt
@@ -1,20 +1,17 @@
 package eu.kanade.tachiyomi.extension.ru.rumix
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class RuMIX : GroupLe("RuMIX", "https://rumix.me", "ru") {
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/seimanga/build.gradle b/src/ru/seimanga/build.gradle
index 86b919ad5..707746dc6 100644
--- a/src/ru/seimanga/build.gradle
+++ b/src/ru/seimanga/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.SeiManga'
     themePkg = 'grouple'
     baseUrl = 'https://1.seimanga.me'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
     isNsfw = true
 }
 
diff --git a/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt b/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt
index 97d1b76c1..973e0f059 100644
--- a/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt
+++ b/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt
@@ -1,20 +1,17 @@
 package eu.kanade.tachiyomi.extension.ru.seimanga
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class SeiManga : GroupLe("SeiManga", "https://1.seimanga.me", "ru") {
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/selfmanga/build.gradle b/src/ru/selfmanga/build.gradle
index 92fb90916..e9f3e5f67 100644
--- a/src/ru/selfmanga/build.gradle
+++ b/src/ru/selfmanga/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.SelfManga'
     themePkg = 'grouple'
     baseUrl = 'https://selfmanga.live'
-    overrideVersionCode = 22
+    overrideVersionCode = 23
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt b/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt
index 29c43f2da..24d39972e 100644
--- a/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt
+++ b/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt
@@ -1,22 +1,19 @@
 package eu.kanade.tachiyomi.extension.ru.selfmanga
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") {
 
     override val id: Long = 5227602742162454547
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/senkognito/build.gradle b/src/ru/senkognito/build.gradle
index c32fd66f3..4af79ba99 100644
--- a/src/ru/senkognito/build.gradle
+++ b/src/ru/senkognito/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Senkognito'
     themePkg = 'senkuro'
     baseUrl = 'https://senkognito.com'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
     isNsfw = true
 }
 
diff --git a/src/ru/senkognito/src/eu/kanade/tachiyomi/extension/ru/senkognito/Senkognito.kt b/src/ru/senkognito/src/eu/kanade/tachiyomi/extension/ru/senkognito/Senkognito.kt
index dbc27203a..8b0f13953 100644
--- a/src/ru/senkognito/src/eu/kanade/tachiyomi/extension/ru/senkognito/Senkognito.kt
+++ b/src/ru/senkognito/src/eu/kanade/tachiyomi/extension/ru/senkognito/Senkognito.kt
@@ -1,17 +1,13 @@
 package eu.kanade.tachiyomi.extension.ru.senkognito
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import eu.kanade.tachiyomi.multisrc.senkuro.Senkuro
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class Senkognito : Senkuro("Senkognito", "https://senkognito.com", "ru") {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private var domain: String? = if (preferences.getBoolean(redirect_PREF, true)) "https://senkognito.com" else "https://senkuro.com"
     override val baseUrl: String = domain.toString()
diff --git a/src/ru/usagi/build.gradle b/src/ru/usagi/build.gradle
index c376874ed..b253d103c 100644
--- a/src/ru/usagi/build.gradle
+++ b/src/ru/usagi/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Usagi'
     themePkg = 'grouple'
     baseUrl = 'https://web.usagi.one'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
     isNsfw = true
 }
 
diff --git a/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt b/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt
index 0d44f8666..a23de2e6b 100644
--- a/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt
+++ b/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt
@@ -1,20 +1,17 @@
 package eu.kanade.tachiyomi.extension.ru.usagi
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.model.Filter
 import eu.kanade.tachiyomi.source.model.FilterList
+import keiyoushi.utils.getPreferences
 import okhttp3.Request
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class Usagi : GroupLe("Usagi", "https://web.usagi.one/", "ru") {
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/ru/yaoilib/build.gradle b/src/ru/yaoilib/build.gradle
index ee4efd366..eccfee55c 100644
--- a/src/ru/yaoilib/build.gradle
+++ b/src/ru/yaoilib/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.YaoiLib'
     themePkg = 'libgroup'
     baseUrl = 'https://slashlib.me'
-    overrideVersionCode = 4
+    overrideVersionCode = 5
     isNsfw = true
 }
 
diff --git a/src/ru/yaoilib/src/eu/kanade/tachiyomi/extension/ru/yaoilib/YaoiLib.kt b/src/ru/yaoilib/src/eu/kanade/tachiyomi/extension/ru/yaoilib/YaoiLib.kt
index 97e43a929..97bafe159 100644
--- a/src/ru/yaoilib/src/eu/kanade/tachiyomi/extension/ru/yaoilib/YaoiLib.kt
+++ b/src/ru/yaoilib/src/eu/kanade/tachiyomi/extension/ru/yaoilib/YaoiLib.kt
@@ -1,18 +1,14 @@
 package eu.kanade.tachiyomi.extension.ru.yaoilib
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferencesLazy
 
 class YaoiLib : LibGroup("YaoiLib", "https://slashlib.me", "ru") {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private var domain: String = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
     override val baseUrl: String = domain
diff --git a/src/vi/goctruyentranh/build.gradle b/src/vi/goctruyentranh/build.gradle
index 464d32558..afd39dd3f 100644
--- a/src/vi/goctruyentranh/build.gradle
+++ b/src/vi/goctruyentranh/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Goc Truyen Tranh'
     extClass = '.GocTruyenTranh'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/vi/goctruyentranh/src/eu/kanade/tachiyomi/extension/vi/goctruyentranh/GocTruyenTranh.kt b/src/vi/goctruyentranh/src/eu/kanade/tachiyomi/extension/vi/goctruyentranh/GocTruyenTranh.kt
index 3705568af..4549ef03a 100644
--- a/src/vi/goctruyentranh/src/eu/kanade/tachiyomi/extension/vi/goctruyentranh/GocTruyenTranh.kt
+++ b/src/vi/goctruyentranh/src/eu/kanade/tachiyomi/extension/vi/goctruyentranh/GocTruyenTranh.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.goctruyentranh
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Headers
@@ -23,8 +23,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Calendar
@@ -311,8 +309,7 @@ class GocTruyenTranh : ParsedHttpSource(), ConfigurableSource {
         Genre("Magic", "70"),
     )
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/hentaivnplus/build.gradle b/src/vi/hentaivnplus/build.gradle
index 3b263518d..75c88b8a0 100644
--- a/src/vi/hentaivnplus/build.gradle
+++ b/src/vi/hentaivnplus/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.HentaiVNPlus'
     themePkg = 'madara'
     baseUrl = 'https://hentaivn.tech'
-    overrideVersionCode = 7
+    overrideVersionCode = 8
     isNsfw = true
 }
 
diff --git a/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt b/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
index 5b34412e1..3039e7886 100644
--- a/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
+++ b/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.vi.hentaivnplus
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -24,8 +22,7 @@ class HentaiVNPlus :
 
     override val mangaSubString = "truyen-hentai"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/lxhentai/build.gradle b/src/vi/lxhentai/build.gradle
index 975230036..34578931d 100644
--- a/src/vi/lxhentai/build.gradle
+++ b/src/vi/lxhentai/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'LXHentai'
     extClass = '.LxHentai'
-    extVersionCode = 15
+    extVersionCode = 16
     isNsfw = true
 }
 
diff --git a/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt b/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
index 882693d0f..e255083b4 100644
--- a/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
+++ b/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.lxhentai
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
@@ -13,6 +12,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -20,8 +20,6 @@ import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -279,8 +277,7 @@ class LxHentai : ParsedHttpSource(), ConfigurableSource {
         Genre("LXHENTAI", 66),
     )
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/sayhentai/build.gradle b/src/vi/sayhentai/build.gradle
index df3da260d..5846aa394 100644
--- a/src/vi/sayhentai/build.gradle
+++ b/src/vi/sayhentai/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = ".SayHentai"
     themePkg = "manhwaz"
     baseUrl = "https://sayhentai.art"
-    overrideVersionCode = 9
+    overrideVersionCode = 10
     isNsfw = true
 }
 
diff --git a/src/vi/sayhentai/src/eu/kanade/tachiyomi/extension/vi/sayhentai/SayHentai.kt b/src/vi/sayhentai/src/eu/kanade/tachiyomi/extension/vi/sayhentai/SayHentai.kt
index 2c3420d43..4f216c639 100644
--- a/src/vi/sayhentai/src/eu/kanade/tachiyomi/extension/vi/sayhentai/SayHentai.kt
+++ b/src/vi/sayhentai/src/eu/kanade/tachiyomi/extension/vi/sayhentai/SayHentai.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.vi.sayhentai
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.manhwaz.ManhwaZ
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 
 class SayHentai :
     ManhwaZ(
@@ -20,8 +18,7 @@ class SayHentai :
     ConfigurableSource {
     override fun popularMangaSelector() = "#slide-top > .item:contains(a)"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/truyengg/build.gradle b/src/vi/truyengg/build.gradle
index 3599d06c0..02eabc1d0 100644
--- a/src/vi/truyengg/build.gradle
+++ b/src/vi/truyengg/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TruyenGG'
     extClass = '.TruyenGG'
-    extVersionCode = 4
+    extVersionCode = 5
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/vi/truyengg/src/eu/kanade/tachiyomi/extension/vi/truyengg/TruyenGG.kt b/src/vi/truyengg/src/eu/kanade/tachiyomi/extension/vi/truyengg/TruyenGG.kt
index dfa36fb0b..957dc3074 100644
--- a/src/vi/truyengg/src/eu/kanade/tachiyomi/extension/vi/truyengg/TruyenGG.kt
+++ b/src/vi/truyengg/src/eu/kanade/tachiyomi/extension/vi/truyengg/TruyenGG.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.truyengg
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -21,8 +21,6 @@ import okhttp3.OkHttpClient
 import okhttp3.Request
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 import java.util.concurrent.TimeUnit
@@ -37,8 +35,7 @@ class TruyenGG : ParsedHttpSource(), ConfigurableSource {
 
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val baseUrl by lazy { getPrefBaseUrl() }
 
diff --git a/src/vi/truyenvn/build.gradle b/src/vi/truyenvn/build.gradle
index 5fbe1455a..ca3dfc83c 100644
--- a/src/vi/truyenvn/build.gradle
+++ b/src/vi/truyenvn/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.TruyenVN'
     themePkg = 'madara'
     baseUrl = 'https://truyenvn.tech'
-    overrideVersionCode = 12
+    overrideVersionCode = 13
     isNsfw = true
 }
 
diff --git a/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt b/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
index da74e1d15..aab5664fb 100644
--- a/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
+++ b/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
@@ -1,13 +1,11 @@
 package eu.kanade.tachiyomi.extension.vi.truyenvn
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.madara.Madara
 import eu.kanade.tachiyomi.source.ConfigurableSource
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
+import keiyoushi.utils.getPreferences
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -24,8 +22,7 @@ class TruyenVN :
 
     override val mangaSubString = "truyen-tranh"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/ungtycomics/build.gradle b/src/vi/ungtycomics/build.gradle
index 52af10d74..946c7b56a 100644
--- a/src/vi/ungtycomics/build.gradle
+++ b/src/vi/ungtycomics/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = "Ung Ty Comics"
     extClass = ".UngTyComics"
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/vi/ungtycomics/src/eu/kanade/tachiyomi/extension/vi/ungtycomics/UngTyComics.kt b/src/vi/ungtycomics/src/eu/kanade/tachiyomi/extension/vi/ungtycomics/UngTyComics.kt
index ccdebde70..eec0d5ff0 100644
--- a/src/vi/ungtycomics/src/eu/kanade/tachiyomi/extension/vi/ungtycomics/UngTyComics.kt
+++ b/src/vi/ungtycomics/src/eu/kanade/tachiyomi/extension/vi/ungtycomics/UngTyComics.kt
@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.extension.vi.ungtycomics
 
 import android.annotation.SuppressLint
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -15,14 +14,13 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.security.SecureRandom
 import java.security.cert.X509Certificate
 import java.text.SimpleDateFormat
@@ -46,9 +44,7 @@ class UngTyComics : ParsedHttpSource(), ConfigurableSource {
 
     override val supportsLatest = true
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override val client = network.cloudflareClient.newBuilder()
         .rateLimitHost(baseUrl.toHttpUrl(), 2)
diff --git a/src/vi/vlogtruyen/build.gradle b/src/vi/vlogtruyen/build.gradle
index 752abafc6..d97021462 100644
--- a/src/vi/vlogtruyen/build.gradle
+++ b/src/vi/vlogtruyen/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'ThichDoc'
     extClass = '.VlogTruyen'
-    extVersionCode = 6
+    extVersionCode = 7
     isNsfw = true
 }
 
diff --git a/src/vi/vlogtruyen/src/eu/kanade/tachiyomi/extension/vi/vlogtruyen/VlogTruyen.kt b/src/vi/vlogtruyen/src/eu/kanade/tachiyomi/extension/vi/vlogtruyen/VlogTruyen.kt
index ac7292b3e..c67878622 100644
--- a/src/vi/vlogtruyen/src/eu/kanade/tachiyomi/extension/vi/vlogtruyen/VlogTruyen.kt
+++ b/src/vi/vlogtruyen/src/eu/kanade/tachiyomi/extension/vi/vlogtruyen/VlogTruyen.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.vlogtruyen
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Headers
@@ -27,8 +27,6 @@ import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.text.SimpleDateFormat
 import java.util.Locale
@@ -171,8 +169,7 @@ class VlogTruyen : ParsedHttpSource(), ConfigurableSource {
 
     override fun imageUrlParse(document: Document): String = ""
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
diff --git a/src/vi/xxmanhwa/build.gradle b/src/vi/xxmanhwa/build.gradle
index 82325297b..a4802fcdd 100644
--- a/src/vi/xxmanhwa/build.gradle
+++ b/src/vi/xxmanhwa/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'XXManhwa'
     extClass = '.XxManhwa'
-    extVersionCode = 6
+    extVersionCode = 7
     isNsfw = true
 }
 
diff --git a/src/vi/xxmanhwa/src/eu/kanade/tachiyomi/extension/vi/xxmanhwa/XxManhwa.kt b/src/vi/xxmanhwa/src/eu/kanade/tachiyomi/extension/vi/xxmanhwa/XxManhwa.kt
index 55c407f5a..aa68ba831 100644
--- a/src/vi/xxmanhwa/src/eu/kanade/tachiyomi/extension/vi/xxmanhwa/XxManhwa.kt
+++ b/src/vi/xxmanhwa/src/eu/kanade/tachiyomi/extension/vi/xxmanhwa/XxManhwa.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.xxmanhwa
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.FormBody
@@ -22,8 +22,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import kotlin.random.Random
 
@@ -44,9 +42,7 @@ class XxManhwa : ParsedHttpSource(), ConfigurableSource {
 
     private val json: Json by injectLazy()
 
-    private val preferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences by getPreferencesLazy()
 
     override fun popularMangaRequest(page: Int) = GET("$baseUrl/tat-ca-cac-truyen?page_num=$page", headers)
 
diff --git a/src/vi/yurineko/build.gradle b/src/vi/yurineko/build.gradle
index 18ae13c72..cf9edfe6d 100644
--- a/src/vi/yurineko/build.gradle
+++ b/src/vi/yurineko/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'YuriNeko'
     extClass = '.YuriNeko'
-    extVersionCode = 7
+    extVersionCode = 8
     isNsfw = true
 }
 
diff --git a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
index 34bdb6422..d3a4ce756 100644
--- a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
+++ b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.vi.yurineko
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import androidx.preference.EditTextPreference
@@ -21,6 +20,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.CacheControl
@@ -30,8 +30,6 @@ import okhttp3.Interceptor
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import java.net.URLDecoder
 import java.util.concurrent.TimeUnit
@@ -408,8 +406,7 @@ class YuriNeko : HttpSource(), ConfigurableSource {
     private inline fun <reified T> Response.parseAs(): T = use {
         json.decodeFromString(body.string())
     }
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     init {
         preferences.getString(DEFAULT_DOMAIN_PREF, null).let { prefDefaultDomain ->
diff --git a/src/zh/baimangu/build.gradle b/src/zh/baimangu/build.gradle
index 9a734a1be..97b09cf69 100644
--- a/src/zh/baimangu/build.gradle
+++ b/src/zh/baimangu/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Baimangu (Darpou)'
     extClass = '.Baimangu'
-    extVersionCode = 4
+    extVersionCode = 5
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/baimangu/src/eu/kanade/tachiyomi/extension/zh/baimangu/Baimangu.kt b/src/zh/baimangu/src/eu/kanade/tachiyomi/extension/zh/baimangu/Baimangu.kt
index c34b02b07..63cdbe283 100644
--- a/src/zh/baimangu/src/eu/kanade/tachiyomi/extension/zh/baimangu/Baimangu.kt
+++ b/src/zh/baimangu/src/eu/kanade/tachiyomi/extension/zh/baimangu/Baimangu.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.baimangu
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.widget.Toast
 import eu.kanade.tachiyomi.network.GET
@@ -12,6 +11,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -19,8 +19,6 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.util.concurrent.TimeUnit
 
 class Baimangu : ConfigurableSource, ParsedHttpSource() {
@@ -29,9 +27,7 @@ class Baimangu : ConfigurableSource, ParsedHttpSource() {
     override val name = "百漫谷"
 
     // Preference setting
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     override val baseUrl = preferences.getString(MAINSITE_URL_PREF, MAINSITE_URL_PREF_DEFAULT)!!
 
diff --git a/src/zh/baozimanhua/build.gradle b/src/zh/baozimanhua/build.gradle
index 36d970d72..014a9d616 100644
--- a/src/zh/baozimanhua/build.gradle
+++ b/src/zh/baozimanhua/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Baozi Manhua'
     extClass = '.Baozi'
-    extVersionCode = 23
+    extVersionCode = 24
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/baozimanhua/src/eu/kanade/tachiyomi/extension/zh/baozimanhua/Baozi.kt b/src/zh/baozimanhua/src/eu/kanade/tachiyomi/extension/zh/baozimanhua/Baozi.kt
index 97b530d4d..efe04da1a 100644
--- a/src/zh/baozimanhua/src/eu/kanade/tachiyomi/extension/zh/baozimanhua/Baozi.kt
+++ b/src/zh/baozimanhua/src/eu/kanade/tachiyomi/extension/zh/baozimanhua/Baozi.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.baozimanhua
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
@@ -23,8 +23,6 @@ import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import org.jsoup.select.Evaluator
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -34,8 +32,7 @@ class Baozi : ParsedHttpSource(), ConfigurableSource {
 
     override val name = "包子漫画"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private val domain: String = run {
         val mirrors = MIRRORS
diff --git a/src/zh/baozimhorg/build.gradle b/src/zh/baozimhorg/build.gradle
index 1d5abffee..24cb1b094 100644
--- a/src/zh/baozimhorg/build.gradle
+++ b/src/zh/baozimhorg/build.gradle
@@ -2,7 +2,7 @@ ext {
     extName = 'GoDa'
     extClass = '.GoDaManhua'
     themePkg = 'goda'
-    overrideVersionCode = 30
+    overrideVersionCode = 31
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/baozimhorg/src/eu/kanade/tachiyomi/extension/zh/baozimhorg/GoDaManhua.kt b/src/zh/baozimhorg/src/eu/kanade/tachiyomi/extension/zh/baozimhorg/GoDaManhua.kt
index 07148f953..81e62d3ce 100644
--- a/src/zh/baozimhorg/src/eu/kanade/tachiyomi/extension/zh/baozimhorg/GoDaManhua.kt
+++ b/src/zh/baozimhorg/src/eu/kanade/tachiyomi/extension/zh/baozimhorg/GoDaManhua.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.baozimhorg
 
-import android.app.Application
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.multisrc.goda.GoDa
@@ -8,6 +7,7 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
 import eu.kanade.tachiyomi.source.model.Page
 import eu.kanade.tachiyomi.source.model.SChapter
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Interceptor
@@ -28,7 +28,7 @@ class GoDaManhua : GoDa("GoDa漫画", "", "zh"), ConfigurableSource {
         if (System.getenv("CI") == "true") {
             baseUrl = mirrors.joinToString("#, ") { "https://$it" }
         } else {
-            val mirrorIndex = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+            val mirrorIndex = getPreferences()
                 .getString(MIRROR_PREF, "0")!!.toInt().coerceAtMost(mirrors.size - 1)
             baseUrl = "https://" + mirrors[mirrorIndex]
         }
diff --git a/src/zh/bilibilimanga/build.gradle b/src/zh/bilibilimanga/build.gradle
index 88c9628b1..96fe55c39 100644
--- a/src/zh/bilibilimanga/build.gradle
+++ b/src/zh/bilibilimanga/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'BILIBILI MANGA'
     extClass = '.BilibiliManga'
-    extVersionCode = 12
+    extVersionCode = 13
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/Bilibili.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/Bilibili.kt
index 164840645..7a6e4b6f2 100644
--- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/Bilibili.kt
+++ b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/Bilibili.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.bilibilimanga
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Base64
 import androidx.preference.ListPreference
@@ -14,6 +13,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferencesLazy
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -30,8 +30,6 @@ import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
 import okhttp3.ResponseBody.Companion.toResponseBody
 import org.jsoup.Jsoup
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.nio.ByteBuffer
 import java.nio.ByteOrder
@@ -74,9 +72,7 @@ abstract class Bilibili(
 
     protected open val defaultLatestSort: Int = 1
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     protected val json: Json by injectLazy()
 
diff --git a/src/zh/boylove/build.gradle b/src/zh/boylove/build.gradle
index a3b6b1c19..61cf7e462 100644
--- a/src/zh/boylove/build.gradle
+++ b/src/zh/boylove/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'BoyLove'
     extClass = '.BoyLove'
-    extVersionCode = 12
+    extVersionCode = 13
     isNsfw = true
 }
 
diff --git a/src/zh/boylove/src/eu/kanade/tachiyomi/extension/zh/boylove/BoyLove.kt b/src/zh/boylove/src/eu/kanade/tachiyomi/extension/zh/boylove/BoyLove.kt
index ae2581b88..8e727af1b 100644
--- a/src/zh/boylove/src/eu/kanade/tachiyomi/extension/zh/boylove/BoyLove.kt
+++ b/src/zh/boylove/src/eu/kanade/tachiyomi/extension/zh/boylove/BoyLove.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.boylove
 
-import android.app.Application
 import android.util.Log
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
@@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -24,8 +24,6 @@ import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.select.Evaluator
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import kotlin.concurrent.thread
 
@@ -39,8 +37,7 @@ class BoyLove : HttpSource(), ConfigurableSource {
     private val json: Json by injectLazy()
 
     override val baseUrl by lazy {
-        val preferences =
-            Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+        val preferences = getPreferences()
 
         val mirrors = MIRRORS
         val index = preferences.getString(MIRROR_PREF, "0")!!.toInt().coerceIn(0, mirrors.size - 1)
diff --git a/src/zh/cartoon18/build.gradle b/src/zh/cartoon18/build.gradle
index 14e805a2a..0757438bc 100644
--- a/src/zh/cartoon18/build.gradle
+++ b/src/zh/cartoon18/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Cartoon18'
     extClass = '.Cartoon18'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/zh/cartoon18/src/eu/kanade/tachiyomi/extension/zh/cartoon18/Cartoon18.kt b/src/zh/cartoon18/src/eu/kanade/tachiyomi/extension/zh/cartoon18/Cartoon18.kt
index ad6124f1d..9df3ad108 100644
--- a/src/zh/cartoon18/src/eu/kanade/tachiyomi/extension/zh/cartoon18/Cartoon18.kt
+++ b/src/zh/cartoon18/src/eu/kanade/tachiyomi/extension/zh/cartoon18/Cartoon18.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.cartoon18
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
 import eu.kanade.tachiyomi.network.GET
@@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -20,8 +20,6 @@ import okhttp3.HttpUrl
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URLDecoder
 
 class Cartoon18 : HttpSource(), ConfigurableSource {
@@ -202,8 +200,7 @@ class Cartoon18 : HttpSource(), ConfigurableSource {
 
     private fun launchIO(block: () -> Unit) = scope.launch { block() }
 
-    private val preferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)!!
+    private val preferences = getPreferences()
 
     private val useTrad get() = preferences.getBoolean("ZH_HANT", false)
 
diff --git a/src/zh/dm5/build.gradle b/src/zh/dm5/build.gradle
index a100953c6..1e3f6ecbd 100644
--- a/src/zh/dm5/build.gradle
+++ b/src/zh/dm5/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Dm5'
     extClass = '.Dm5'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/zh/dm5/src/eu/kanade/tachiyomi/extension/zh/dm5/Dm5.kt b/src/zh/dm5/src/eu/kanade/tachiyomi/extension/zh/dm5/Dm5.kt
index fad5e77ca..8df782fd8 100644
--- a/src/zh/dm5/src/eu/kanade/tachiyomi/extension/zh/dm5/Dm5.kt
+++ b/src/zh/dm5/src/eu/kanade/tachiyomi/extension/zh/dm5/Dm5.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.dm5
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
@@ -13,14 +12,13 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
 
@@ -33,8 +31,7 @@ class Dm5 : ParsedHttpSource(), ConfigurableSource {
         .addInterceptor(CommentsInterceptor)
         .build()
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     // Some mangas are blocked without this
     override fun headersBuilder() = super.headersBuilder().set("Accept-Language", "zh-TW")
diff --git a/src/zh/dmzj/build.gradle b/src/zh/dmzj/build.gradle
index 851edf0d6..cc5465585 100644
--- a/src/zh/dmzj/build.gradle
+++ b/src/zh/dmzj/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'DMZJ'
     extClass = '.Dmzj'
-    extVersionCode = 42
+    extVersionCode = 43
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/dmzj/src/eu/kanade/tachiyomi/extension/zh/dmzj/Dmzj.kt b/src/zh/dmzj/src/eu/kanade/tachiyomi/extension/zh/dmzj/Dmzj.kt
index 59a1b9f6c..bb0c26174 100644
--- a/src/zh/dmzj/src/eu/kanade/tachiyomi/extension/zh/dmzj/Dmzj.kt
+++ b/src/zh/dmzj/src/eu/kanade/tachiyomi/extension/zh/dmzj/Dmzj.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.dmzj
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
@@ -12,12 +11,11 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 /**
  * Dmzj source
@@ -29,8 +27,7 @@ class Dmzj : ConfigurableSource, HttpSource() {
     override val name = "动漫之家"
     override val baseUrl = "https://m.idmzj.com"
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client: OkHttpClient = network.client.newBuilder()
         .addInterceptor(ImageUrlInterceptor)
diff --git a/src/zh/happymh/build.gradle b/src/zh/happymh/build.gradle
index caf18e277..c33b7e535 100644
--- a/src/zh/happymh/build.gradle
+++ b/src/zh/happymh/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Happymh'
     extClass = '.Happymh'
-    extVersionCode = 16
+    extVersionCode = 17
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/happymh/src/eu/kanade/tachiyomi/extension/zh/happymh/Happymh.kt b/src/zh/happymh/src/eu/kanade/tachiyomi/extension/zh/happymh/Happymh.kt
index b8ec58e56..d1c2041e5 100644
--- a/src/zh/happymh/src/eu/kanade/tachiyomi/extension/zh/happymh/Happymh.kt
+++ b/src/zh/happymh/src/eu/kanade/tachiyomi/extension/zh/happymh/Happymh.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.happymh
 
-import android.app.Application
 import android.widget.Toast
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -18,6 +17,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.util.asJsoup
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.FormBody
@@ -30,8 +30,6 @@ import okhttp3.Request
 import okhttp3.Response
 import okhttp3.ResponseBody.Companion.asResponseBody
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 const val PREF_KEY_CUSTOM_UA = "pref_key_custom_ua_"
@@ -45,7 +43,7 @@ class Happymh : HttpSource(), ConfigurableSource {
     private val json: Json by injectLazy()
     private val chapterUrlToCode = hashMapOf<String, String>()
 
-    private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences = getPreferences()
 
     init {
         val oldUa = preferences.getString("userAgent", null)
diff --git a/src/zh/jinmantiantang/build.gradle b/src/zh/jinmantiantang/build.gradle
index 858235821..fcaf09257 100644
--- a/src/zh/jinmantiantang/build.gradle
+++ b/src/zh/jinmantiantang/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Jinman Tiantang'
     extClass = '.Jinmantiantang'
-    extVersionCode = 45
+    extVersionCode = 46
     isNsfw = true
 }
 
diff --git a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
index 6c79c0f91..09dd74fca 100644
--- a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
+++ b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.jinmantiantang
 
-import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
 import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
@@ -18,6 +17,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
 import okhttp3.Request
@@ -35,8 +35,7 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
     override val name: String = "禁漫天堂"
     override val supportsLatest: Boolean = true
 
-    private val preferences: SharedPreferences =
-        getSharedPreferences(id)
+    private val preferences = getPreferences { preferenceMigration() }
 
     override val baseUrl: String = "https://" + preferences.baseUrl
 
diff --git a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
index 45ccc3a73..f9a8e70c3 100644
--- a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
+++ b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.jinmantiantang
 
-import android.app.Application
 import android.content.Context
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
@@ -8,8 +7,6 @@ import androidx.preference.ListPreference
 import eu.kanade.tachiyomi.network.GET
 import okhttp3.Interceptor
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 
 internal fun getPreferenceList(context: Context, preferences: SharedPreferences, isUrlUpdated: Boolean) = arrayOf(
@@ -99,15 +96,14 @@ private const val URL_LIST_PREF = "baseUrlList"
 private val SharedPreferences.mirrorIndex get() = getString(USE_MIRROR_URL_PREF, "0")!!.toInt()
 private val SharedPreferences.urlList get() = getString(URL_LIST_PREF, DEFAULT_LIST)!!.split(",")
 
-fun getSharedPreferences(id: Long): SharedPreferences {
-    val preferences: SharedPreferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    if (preferences.getString(DEFAULT_LIST_PREF, "")!! == DEFAULT_LIST) return preferences
-    preferences.edit()
-        .remove("overrideBaseUrl")
-        .putString(DEFAULT_LIST_PREF, DEFAULT_LIST)
-        .setUrlList(DEFAULT_LIST, preferences.mirrorIndex)
-        .apply()
-    return preferences
+fun SharedPreferences.preferenceMigration() {
+    if (getString(DEFAULT_LIST_PREF, "")!! != DEFAULT_LIST) {
+        edit()
+            .remove("overrideBaseUrl")
+            .putString(DEFAULT_LIST_PREF, DEFAULT_LIST)
+            .setUrlList(DEFAULT_LIST, mirrorIndex)
+            .apply()
+    }
 }
 
 fun SharedPreferences.Editor.setUrlList(urlList: String, oldIndex: Int): SharedPreferences.Editor {
diff --git a/src/zh/mangabz/build.gradle b/src/zh/mangabz/build.gradle
index 85a0ce1a1..97fc0679c 100644
--- a/src/zh/mangabz/build.gradle
+++ b/src/zh/mangabz/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Mangabz'
     extClass = '.Mangabz'
-    extVersionCode = 8
+    extVersionCode = 9
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/mangabz/src/eu/kanade/tachiyomi/extension/zh/mangabz/Mangabz.kt b/src/zh/mangabz/src/eu/kanade/tachiyomi/extension/zh/mangabz/Mangabz.kt
index ec113a976..c2d8beb8f 100644
--- a/src/zh/mangabz/src/eu/kanade/tachiyomi/extension/zh/mangabz/Mangabz.kt
+++ b/src/zh/mangabz/src/eu/kanade/tachiyomi/extension/zh/mangabz/Mangabz.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.mangabz
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.lib.cookieinterceptor.CookieInterceptor
 import eu.kanade.tachiyomi.lib.unpacker.SubstringExtractor
@@ -14,6 +13,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.OkHttpClient
@@ -23,8 +23,6 @@ import org.jsoup.nodes.Element
 import org.jsoup.select.Elements
 import org.jsoup.select.Evaluator
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class Mangabz : MangabzTheme("Mangabz"), ConfigurableSource {
 
@@ -34,7 +32,7 @@ class Mangabz : MangabzTheme("Mangabz"), ConfigurableSource {
     private val urlSuffix: String
 
     init {
-        val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+        val preferences = getPreferences()
         val mirror = preferences.mirror
         _baseUrl = "https://" + mirror.domain
         urlSuffix = mirror.urlSuffix
diff --git a/src/zh/manhuagui/build.gradle b/src/zh/manhuagui/build.gradle
index 4fa8e884c..8a802f1c9 100644
--- a/src/zh/manhuagui/build.gradle
+++ b/src/zh/manhuagui/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'ManHuaGui'
     extClass = '.Manhuagui'
-    extVersionCode = 22
+    extVersionCode = 23
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt
index 0dfdf1aaf..2c7fb079c 100644
--- a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt
+++ b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.manhuagui
 
-import android.app.Application
 import android.content.SharedPreferences
 import eu.kanade.tachiyomi.lib.lzstring.LZString
 import eu.kanade.tachiyomi.lib.unpacker.Unpacker
@@ -17,6 +16,7 @@ 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 keiyoushi.utils.getPreferencesLazy
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.delay
@@ -37,8 +37,6 @@ import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.text.SimpleDateFormat
@@ -49,9 +47,7 @@ class Manhuagui(
     override val lang: String = "zh",
 ) : ConfigurableSource, ParsedHttpSource() {
 
-    private val preferences: SharedPreferences by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    }
+    private val preferences: SharedPreferences by getPreferencesLazy()
 
     private val baseHost = if (preferences.getBoolean(USE_MIRROR_URL_PREF, false)) {
         "mhgui.com"
diff --git a/src/zh/manhuaren/build.gradle b/src/zh/manhuaren/build.gradle
index 0c675383a..14b0514a6 100644
--- a/src/zh/manhuaren/build.gradle
+++ b/src/zh/manhuaren/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Manhuaren'
     extClass = '.Manhuaren'
-    extVersionCode = 15
+    extVersionCode = 16
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/manhuaren/src/eu/kanade/tachiyomi/extension/zh/manhuaren/Manhuaren.kt b/src/zh/manhuaren/src/eu/kanade/tachiyomi/extension/zh/manhuaren/Manhuaren.kt
index 555dbda1c..57d71a4a9 100644
--- a/src/zh/manhuaren/src/eu/kanade/tachiyomi/extension/zh/manhuaren/Manhuaren.kt
+++ b/src/zh/manhuaren/src/eu/kanade/tachiyomi/extension/zh/manhuaren/Manhuaren.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.manhuaren
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.os.Build
 import android.text.format.DateFormat
@@ -15,6 +14,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
@@ -31,8 +31,6 @@ import okhttp3.Response
 import okio.Buffer
 import org.json.JSONArray
 import org.json.JSONObject
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URLEncoder
 import java.security.KeyFactory
 import java.security.MessageDigest
@@ -54,8 +52,7 @@ class Manhuaren : HttpSource(), ConfigurableSource {
 
     private val pageSize = 20
     private val baseHttpUrl = baseUrl.toHttpUrl()
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private val gsnSalt = "4e0a48e1c0b54041bce9c8f0e036124d"
     private val encodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFCg289dTws27v8GtqIffkP4zgFR+MYIuUIeVO5AGiBV0rfpRh5gg7i8RrT12E9j6XwKoe3xJz1khDnPc65P5f7CJcNJ9A8bj7Al5K4jYGxz+4Q+n0YzSllXPit/Vz/iW5jFdlP6CTIgUVwvIoGEL2sS4cqqqSpCDKHSeiXh9CtMsktc6YyrSN+8mQbBvoSSew18r/vC07iQiaYkClcs7jIPq9tuilL//2uR9kWn5jsp8zHKVjmXuLtHDhM9lObZGCVJwdlN2KDKTh276u/pzQ1s5u8z/ARtK26N8e5w8mNlGcHcHfwyhjfEQurvrnkqYH37+12U3jGk5YNHGyOPcwIDAQAB"
diff --git a/src/zh/manwa/build.gradle b/src/zh/manwa/build.gradle
index 1f034dc2b..af2fd3efe 100644
--- a/src/zh/manwa/build.gradle
+++ b/src/zh/manwa/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Manwa'
     extClass = '.Manwa'
-    extVersionCode = 8
+    extVersionCode = 9
     isNsfw = true
 }
 
diff --git a/src/zh/manwa/src/eu/kanade/tachiyomi/extension/zh/manwa/Manwa.kt b/src/zh/manwa/src/eu/kanade/tachiyomi/extension/zh/manwa/Manwa.kt
index 258e76b9a..0dec1bd2c 100644
--- a/src/zh/manwa/src/eu/kanade/tachiyomi/extension/zh/manwa/Manwa.kt
+++ b/src/zh/manwa/src/eu/kanade/tachiyomi/extension/zh/manwa/Manwa.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.manwa
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.net.Uri
 import androidx.preference.CheckBoxPreference
@@ -15,6 +14,7 @@ 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 keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.int
 import kotlinx.serialization.json.jsonArray
@@ -31,8 +31,6 @@ import okhttp3.ResponseBody.Companion.toResponseBody
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import javax.crypto.Cipher
 import javax.crypto.spec.IvParameterSpec
@@ -43,8 +41,7 @@ class Manwa : ParsedHttpSource(), ConfigurableSource {
     override val lang: String = "zh"
     override val supportsLatest: Boolean = true
     private val json: Json by injectLazy()
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
     override val baseUrl = "https://" + MIRROR_ENTRIES.run { this[preferences.getString(MIRROR_KEY, "0")!!.toInt().coerceAtMost(size)] }
 
     private val rewriteOctetStream: Interceptor = Interceptor { chain ->
diff --git a/src/zh/noyacg/build.gradle b/src/zh/noyacg/build.gradle
index 7dee71c92..2c1d5206b 100644
--- a/src/zh/noyacg/build.gradle
+++ b/src/zh/noyacg/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'NoyAcg'
     extClass = '.NoyAcg'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/zh/noyacg/src/eu/kanade/tachiyomi/extension/zh/noyacg/NoyAcg.kt b/src/zh/noyacg/src/eu/kanade/tachiyomi/extension/zh/noyacg/NoyAcg.kt
index fc8e32777..e458d536f 100644
--- a/src/zh/noyacg/src/eu/kanade/tachiyomi/extension/zh/noyacg/NoyAcg.kt
+++ b/src/zh/noyacg/src/eu/kanade/tachiyomi/extension/zh/noyacg/NoyAcg.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.noyacg
 
-import android.app.Application
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.POST
@@ -12,14 +11,13 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.FormBody
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 class NoyAcg : HttpSource(), ConfigurableSource {
@@ -28,9 +26,7 @@ class NoyAcg : HttpSource(), ConfigurableSource {
     override val supportsLatest get() = true
     override val baseUrl get() = "https://noy1.top"
 
-    private val imageCdn by lazy {
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000).imageCdn
-    }
+    private val imageCdn by lazy { getPreferences().imageCdn }
 
     override fun headersBuilder() = super.headersBuilder()
         .add("Referer", "$baseUrl/")
diff --git a/src/zh/picacomic/build.gradle b/src/zh/picacomic/build.gradle
index b99426899..a2ad6790e 100644
--- a/src/zh/picacomic/build.gradle
+++ b/src/zh/picacomic/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Picacomic'
     extClass = '.Picacomic'
-    extVersionCode = 5
+    extVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/zh/picacomic/src/eu/kanade/tachiyomi/extension/zh/picacomic/Picacomic.kt b/src/zh/picacomic/src/eu/kanade/tachiyomi/extension/zh/picacomic/Picacomic.kt
index 82e721e85..4e86715bb 100644
--- a/src/zh/picacomic/src/eu/kanade/tachiyomi/extension/zh/picacomic/Picacomic.kt
+++ b/src/zh/picacomic/src/eu/kanade/tachiyomi/extension/zh/picacomic/Picacomic.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.picacomic
 
-import android.app.Application
 import android.content.SharedPreferences
 import android.util.Base64
 import androidx.preference.EditTextPreference
@@ -16,6 +15,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -26,8 +26,6 @@ import okhttp3.MediaType.Companion.toMediaType
 import okhttp3.Request
 import okhttp3.RequestBody.Companion.toRequestBody
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.net.URLEncoder
 import java.text.SimpleDateFormat
 import java.util.Date
@@ -41,8 +39,7 @@ class Picacomic : HttpSource(), ConfigurableSource {
     override val baseUrl = "https://picaapi.picacomic.com"
     private val leeway: Long = 10
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     private val blocklist = preferences.getString("BLOCK_GENRES", "")!!
         .split(',').map { it.trim() }
diff --git a/src/zh/roumanwu/build.gradle b/src/zh/roumanwu/build.gradle
index 8252b354a..a49e1ee3a 100644
--- a/src/zh/roumanwu/build.gradle
+++ b/src/zh/roumanwu/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Roumanwu'
     extClass = '.Roumanwu'
-    extVersionCode = 15
+    extVersionCode = 16
     isNsfw = true
 }
 
diff --git a/src/zh/roumanwu/src/eu/kanade/tachiyomi/extension/zh/roumanwu/Roumanwu.kt b/src/zh/roumanwu/src/eu/kanade/tachiyomi/extension/zh/roumanwu/Roumanwu.kt
index f4efb82de..5efeb702a 100644
--- a/src/zh/roumanwu/src/eu/kanade/tachiyomi/extension/zh/roumanwu/Roumanwu.kt
+++ b/src/zh/roumanwu/src/eu/kanade/tachiyomi/extension/zh/roumanwu/Roumanwu.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.roumanwu
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
@@ -13,11 +12,10 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import kotlin.math.max
 
 class Roumanwu : ParsedHttpSource(), ConfigurableSource {
@@ -25,8 +23,7 @@ class Roumanwu : ParsedHttpSource(), ConfigurableSource {
     override val lang = "zh"
     override val supportsLatest = true
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val baseUrl = MIRRORS[
         max(MIRRORS.size - 1, preferences.getString(MIRROR_PREF, MIRROR_DEFAULT)!!.toInt()),
diff --git a/src/zh/vomic/build.gradle b/src/zh/vomic/build.gradle
index 05b672f9f..bed2e57d9 100644
--- a/src/zh/vomic/build.gradle
+++ b/src/zh/vomic/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'vomic'
     extClass = '.Vomic'
-    extVersionCode = 4
+    extVersionCode = 5
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/vomic/src/eu/kanade/tachiyomi/extension/zh/vomic/Vomic.kt b/src/zh/vomic/src/eu/kanade/tachiyomi/extension/zh/vomic/Vomic.kt
index a1bb24a2d..c9260d5eb 100644
--- a/src/zh/vomic/src/eu/kanade/tachiyomi/extension/zh/vomic/Vomic.kt
+++ b/src/zh/vomic/src/eu/kanade/tachiyomi/extension/zh/vomic/Vomic.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.vomic
 
-import android.app.Application
 import android.util.Base64
 import androidx.preference.EditTextPreference
 import androidx.preference.PreferenceScreen
@@ -12,14 +11,13 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.text.SimpleDateFormat
@@ -41,7 +39,7 @@ class Vomic : HttpSource(), ConfigurableSource {
     private val apiUrl: String
 
     init {
-        val domain = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000).getString(DOMAIN_PREF, DEFAULT_DOMAIN)!!
+        val domain = getPreferences().getString(DOMAIN_PREF, DEFAULT_DOMAIN)!!
         if (domain.startsWith("www.") || domain.startsWith("api.")) {
             val tld = domain.substring(4)
             baseUrl = "http://www.$tld"
diff --git a/src/zh/wnacg/build.gradle b/src/zh/wnacg/build.gradle
index e0c7bc511..8282a925d 100644
--- a/src/zh/wnacg/build.gradle
+++ b/src/zh/wnacg/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'WNACG'
     extClass = '.wnacg'
-    extVersionCode = 17
+    extVersionCode = 18
     isNsfw = true
 }
 
diff --git a/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/Preferences.kt b/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/Preferences.kt
index a33e29dbb..d7e0d937b 100644
--- a/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/Preferences.kt
+++ b/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/Preferences.kt
@@ -1,14 +1,11 @@
 package eu.kanade.tachiyomi.extension.zh.wnacg
 
-import android.app.Application
 import android.content.Context
 import android.content.SharedPreferences
 import androidx.preference.ListPreference
 import eu.kanade.tachiyomi.network.GET
 import okhttp3.Interceptor
 import okhttp3.Response
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import java.io.IOException
 import kotlin.random.Random
 
@@ -42,15 +39,14 @@ val SharedPreferences.urlList get() = getString(URL_LIST_PREF, DEFAULT_LIST)!!.s
 
 fun getCiBaseUrl() = DEFAULT_LIST.replace(",", "#, ")
 
-fun getSharedPreferences(id: Long): SharedPreferences {
-    val preferences: SharedPreferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-    if (preferences.getString(DEFAULT_LIST_PREF, "")!! == DEFAULT_LIST) return preferences
-    preferences.edit()
-        .remove("overrideBaseUrl")
-        .putString(DEFAULT_LIST_PREF, DEFAULT_LIST)
-        .setUrlList(DEFAULT_LIST, preferences.urlIndex)
-        .apply()
-    return preferences
+fun SharedPreferences.preferenceMigration() {
+    if (getString(DEFAULT_LIST_PREF, "")!! != DEFAULT_LIST) {
+        edit()
+            .remove("overrideBaseUrl")
+            .putString(DEFAULT_LIST_PREF, DEFAULT_LIST)
+            .setUrlList(DEFAULT_LIST, urlIndex)
+            .apply()
+    }
 }
 
 fun SharedPreferences.Editor.setUrlList(urlList: String, oldIndex: Int): SharedPreferences.Editor {
diff --git a/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/wnacg.kt b/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/wnacg.kt
index 7720016d9..db9c9e3c5 100644
--- a/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/wnacg.kt
+++ b/src/zh/wnacg/src/eu/kanade/tachiyomi/extension/zh/wnacg/wnacg.kt
@@ -9,6 +9,7 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
@@ -22,7 +23,7 @@ class wnacg : ParsedHttpSource(), ConfigurableSource {
     override val lang = "zh"
     override val supportsLatest = false
 
-    private val preferences = getSharedPreferences(id)
+    private val preferences = getPreferences { preferenceMigration() }
 
     override val baseUrl = when (System.getenv("CI")) {
         "true" -> getCiBaseUrl()
diff --git a/src/zh/yidan/build.gradle b/src/zh/yidan/build.gradle
index b7d176fc7..d542c542c 100644
--- a/src/zh/yidan/build.gradle
+++ b/src/zh/yidan/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Yidan Girl'
     extClass = '.Yidan'
-    extVersionCode = 2
+    extVersionCode = 3
     isNsfw = true
 }
 
diff --git a/src/zh/yidan/src/eu/kanade/tachiyomi/extension/zh/yidan/Yidan.kt b/src/zh/yidan/src/eu/kanade/tachiyomi/extension/zh/yidan/Yidan.kt
index 65b3e5c73..685e91a86 100644
--- a/src/zh/yidan/src/eu/kanade/tachiyomi/extension/zh/yidan/Yidan.kt
+++ b/src/zh/yidan/src/eu/kanade/tachiyomi/extension/zh/yidan/Yidan.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.yidan
 
-import android.app.Application
 import androidx.preference.ListPreference
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
@@ -12,6 +11,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.decodeFromStream
 import okhttp3.Headers
@@ -19,8 +19,6 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 
 class Yidan : HttpSource(), ConfigurableSource {
@@ -32,7 +30,7 @@ class Yidan : HttpSource(), ConfigurableSource {
 
     init {
         val mirrors = MIRRORS
-        val index = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+        val index = getPreferences()
             .getString(MIRROR_PREF, "0")!!.toInt().coerceAtMost(mirrors.size - 1)
         baseUrl = "https://" + mirrors[index]
     }
diff --git a/src/zh/zaimanhua/build.gradle b/src/zh/zaimanhua/build.gradle
index 27e316df7..facb9d856 100644
--- a/src/zh/zaimanhua/build.gradle
+++ b/src/zh/zaimanhua/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Zaimanhua'
     extClass = '.Zaimanhua'
-    extVersionCode = 5
+    extVersionCode = 6
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/zaimanhua/src/eu/kanade/tachiyomi/extension/zh/zaimanhua/Zaimanhua.kt b/src/zh/zaimanhua/src/eu/kanade/tachiyomi/extension/zh/zaimanhua/Zaimanhua.kt
index d3c7dc5bd..17fc93b54 100644
--- a/src/zh/zaimanhua/src/eu/kanade/tachiyomi/extension/zh/zaimanhua/Zaimanhua.kt
+++ b/src/zh/zaimanhua/src/eu/kanade/tachiyomi/extension/zh/zaimanhua/Zaimanhua.kt
@@ -1,6 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.zaimanhua
 
-import android.app.Application
 import android.content.SharedPreferences
 import androidx.preference.EditTextPreference
 import androidx.preference.ListPreference
@@ -15,6 +14,7 @@ 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.HttpSource
+import keiyoushi.utils.getPreferences
 import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
@@ -29,8 +29,6 @@ import okhttp3.Request
 import okhttp3.RequestBody
 import okhttp3.Response
 import rx.Observable
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.io.IOException
 import java.security.MessageDigest
@@ -48,8 +46,7 @@ class Zaimanhua : HttpSource(), ConfigurableSource {
 
     private val json by injectLazy<Json>()
 
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    private val preferences: SharedPreferences = getPreferences()
 
     override val client: OkHttpClient = network.client.newBuilder()
         .rateLimit(5)
diff --git a/src/zh/zerobyw/build.gradle b/src/zh/zerobyw/build.gradle
index 79a7fc4a8..93704e003 100644
--- a/src/zh/zerobyw/build.gradle
+++ b/src/zh/zerobyw/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Zerobyw'
     extClass = '.Zerobyw'
-    extVersionCode = 18
+    extVersionCode = 19
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/UpdateUrl.kt b/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/UpdateUrl.kt
index 88f6fc217..72eeea5e5 100644
--- a/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/UpdateUrl.kt
+++ b/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/UpdateUrl.kt
@@ -21,13 +21,13 @@ var SharedPreferences.baseUrl: String
     get() = getString(BASE_URL_PREF, DEFAULT_BASE_URL)!!
     set(value) = edit().putString(BASE_URL_PREF, value).apply()
 
-fun SharedPreferences.clearOldBaseUrl(): SharedPreferences {
-    if (getString(DEFAULT_BASE_URL_PREF, "")!! == DEFAULT_BASE_URL) return this
+fun SharedPreferences.clearOldBaseUrl() {
+    if (getString(DEFAULT_BASE_URL_PREF, "")!! == DEFAULT_BASE_URL) return
+
     edit()
         .remove(BASE_URL_PREF)
         .putString(DEFAULT_BASE_URL_PREF, DEFAULT_BASE_URL)
         .apply()
-    return this
 }
 
 fun getBaseUrlPreference(context: Context) = EditTextPreference(context).apply {
diff --git a/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/Zerobyw.kt b/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/Zerobyw.kt
index 96d54d1db..880fb0605 100644
--- a/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/Zerobyw.kt
+++ b/src/zh/zerobyw/src/eu/kanade/tachiyomi/extension/zh/zerobyw/Zerobyw.kt
@@ -1,7 +1,5 @@
 package eu.kanade.tachiyomi.extension.zh.zerobyw
 
-import android.app.Application
-import android.content.SharedPreferences
 import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.source.ConfigurableSource
@@ -11,22 +9,19 @@ 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 keiyoushi.utils.getPreferences
 import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
 
 class Zerobyw : ParsedHttpSource(), ConfigurableSource {
     override val name: String = "zero搬运网"
     override val lang: String = "zh"
     override val supportsLatest: Boolean get() = false
-    private val preferences: SharedPreferences =
-        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
-            .clearOldBaseUrl()
+    private val preferences = getPreferences { clearOldBaseUrl() }
 
     override val client = network.cloudflareClient.newBuilder()
         .addInterceptor(UpdateUrlInterceptor(preferences))