diff --git a/java/src/org/futo/inputmethod/latin/LatinIME.kt b/java/src/org/futo/inputmethod/latin/LatinIME.kt
index bfd0716ed4f1fca1b5286d867b5fd2c0b1bf5944..76ca689cdf8006fa5ef5d29655952ec3ccd22841 100644
--- a/java/src/org/futo/inputmethod/latin/LatinIME.kt
+++ b/java/src/org/futo/inputmethod/latin/LatinIME.kt
@@ -273,6 +273,10 @@ class LatinIME : InputMethodService(), LifecycleOwner, ViewModelStoreOwner, Save
                 }
             }
         }
+
+        lifecycleScope.launch {
+            saveSubtypes()
+        }
     }
 
     override fun onDestroy() {
diff --git a/java/src/org/futo/inputmethod/latin/Subtypes.kt b/java/src/org/futo/inputmethod/latin/Subtypes.kt
new file mode 100644
index 0000000000000000000000000000000000000000..926561374db808eb0661facdc06eac0277c10cd9
--- /dev/null
+++ b/java/src/org/futo/inputmethod/latin/Subtypes.kt
@@ -0,0 +1,26 @@
+package org.futo.inputmethod.latin
+
+import android.content.Context
+import android.view.inputmethod.InputMethodManager
+import androidx.datastore.preferences.core.stringSetPreferencesKey
+import org.futo.inputmethod.latin.uix.SettingsKey
+import org.futo.inputmethod.latin.uix.setSetting
+
+val SubtypesSetting = SettingsKey(
+    stringSetPreferencesKey("subtypes"),
+    setOf()
+)
+
+suspend fun Context.saveSubtypes() {
+    val inputMethodManager = getSystemService(android.inputmethodservice.InputMethodService.INPUT_METHOD_SERVICE) as InputMethodManager
+    val inputMethodList = inputMethodManager.getEnabledInputMethodSubtypeList(
+        RichInputMethodManager.getInstance().inputMethodInfoOfThisIme,
+        true
+    )
+
+    val encodedSubtypes = inputMethodList.map {
+        it.locale + ":" + (it.extraValue ?: "") + ":" + it.languageTag
+    }.toSet()
+
+    setSetting(SubtypesSetting, encodedSubtypes)
+}
\ No newline at end of file
diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Languages.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Languages.kt
index 4c637d48461dd0e3955e730fd131eb5105e980a7..ee9925e80458dad07307ccf527b8e5c1b5f261bd 100644
--- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Languages.kt
+++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Languages.kt
@@ -26,6 +26,7 @@ import okhttp3.internal.toImmutableList
 import org.futo.inputmethod.latin.BinaryDictionaryGetter
 import org.futo.inputmethod.latin.R
 import org.futo.inputmethod.latin.RichInputMethodManager
+import org.futo.inputmethod.latin.saveSubtypes
 import org.futo.inputmethod.latin.uix.FileKind
 import org.futo.inputmethod.latin.uix.ResourceHelper
 import org.futo.inputmethod.latin.uix.getSetting
@@ -117,6 +118,8 @@ fun LanguagesScreen(navController: NavHostController = rememberNavController())
             RichInputMethodManager.getInstance().inputMethodInfoOfThisIme,
             true
         )
+
+        context.saveSubtypes()
     }