diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePolycentric.kt b/app/src/main/java/com/futo/platformplayer/states/StatePolycentric.kt
index 9b3a456ff0361765ee3709eb733f7250586b0fed..6911d0f75bf6efad62217d0718a14e9e8fdc1b75 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StatePolycentric.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StatePolycentric.kt
@@ -34,13 +34,11 @@ import kotlinx.coroutines.Deferred
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.async
 import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.withContext
 import userpackage.Protocol
-import java.lang.Exception
-import java.lang.Thread.State
 import java.time.Instant
 import java.time.OffsetDateTime
 import java.time.ZoneOffset
+import kotlin.Exception
 
 class StatePolycentric {
     private data class LikeDislikeEntry(val unixMilliseconds: Long, val hasLiked: Boolean, val hasDisliked: Boolean);
@@ -49,7 +47,7 @@ class StatePolycentric {
     private var _likeDislikeMap = hashMapOf<String, LikeDislikeEntry>()
     private val _activeProcessHandle = FragmentedStorage.get<StringStorage>("activeProcessHandle");
     private var _transientEnabled = true
-    val enabled = _transientEnabled && Settings.instance.other.polycentricEnabled
+    val enabled get() = _transientEnabled && Settings.instance.other.polycentricEnabled
 
     fun load(context: Context) {
         if (!enabled) {
@@ -62,12 +60,21 @@ class StatePolycentric {
 
             val activeProcessHandleString = _activeProcessHandle.value;
             if (activeProcessHandleString.isNotEmpty()) {
-                val system = PublicKey.fromProto(Protocol.PublicKey.parseFrom(activeProcessHandleString.base64ToByteArray()));
-                setProcessHandle(Store.instance.getProcessSecret(system)?.toProcessHandle());
+                try {
+                    val system = PublicKey.fromProto(Protocol.PublicKey.parseFrom(activeProcessHandleString.base64ToByteArray()));
+                    setProcessHandle(Store.instance.getProcessSecret(system)?.toProcessHandle());
+                } catch (e: Throwable) {
+                    db.upgradeOldSecrets(db.writableDatabase);
+
+                    val system = PublicKey.fromProto(Protocol.PublicKey.parseFrom(activeProcessHandleString.base64ToByteArray()));
+                    setProcessHandle(Store.instance.getProcessSecret(system)?.toProcessHandle());
+
+                    Log.i(TAG, "Failed to initialize Polycentric.", e)
+                }
             }
         } catch (e: Throwable) {
             _transientEnabled = false
-            UIDialogs.toast(context, "Polycentric failed to initialize due to an error.")
+            UIDialogs.showGeneralErrorDialog(context, "Failed to initialize Polycentric.", e);
             Log.i(TAG, "Failed to initialize Polycentric.", e)
         }
     }
diff --git a/dep/polycentricandroid b/dep/polycentricandroid
index faaa7a6d8efb3f92fc239e7d77ec2f9a46c3a958..62328514ec1dae52b8cc966561f73b81d7ebed80 160000
--- a/dep/polycentricandroid
+++ b/dep/polycentricandroid
@@ -1 +1 @@
-Subproject commit faaa7a6d8efb3f92fc239e7d77ec2f9a46c3a958
+Subproject commit 62328514ec1dae52b8cc966561f73b81d7ebed80