diff --git a/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt
index fd12528eb33651d10b94fe935279c5903d2675fe..620df73fcc323f5864a1fe968abdca5d3a438ed2 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt
@@ -75,10 +75,10 @@ class AddSourceActivity : AppCompatActivity() {
         _buttonInstall = findViewById(R.id.button_install);
 
         _buttonBack.setOnClickListener {
-            onBackPressed();
+            finish();
         };
         _buttonCancel.setOnClickListener {
-            onBackPressed();
+            finish();
         }
         _buttonInstall.setOnClickListener {
             _config?.let {
diff --git a/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt
index da4a563ba948408ca2ff22522037e45730b95a26..e34916e4ea2727c38ab982ec59d4af91c55fc243 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt
@@ -1,7 +1,10 @@
 package com.futo.platformplayer.activities
 
+import android.content.Intent
+import android.net.Uri
 import android.os.Bundle
 import android.widget.*
+import androidx.activity.result.contract.ActivityResultContracts
 import androidx.appcompat.app.AppCompatActivity
 import com.futo.platformplayer.*
 import com.futo.platformplayer.views.buttons.BigButton
@@ -14,6 +17,31 @@ class AddSourceOptionsActivity : AppCompatActivity() {
     lateinit var _buttonQR: BigButton;
     lateinit var _buttonURL: BigButton;
 
+    private val _qrCodeResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+        val scanResult = IntentIntegrator.parseActivityResult(result.resultCode, result.data)
+        scanResult?.let {
+            val content = it.contents
+            if (content == null) {
+                UIDialogs.toast(this, "Failed to scan QR code")
+                return@let
+            }
+
+            val url = if (content.startsWith("https://")) {
+                content
+            } else if (content.startsWith("grayjay://plugin/")) {
+                content.substring("grayjay://plugin/".length)
+            } else {
+                UIDialogs.toast(this, "Not a plugin URL")
+                return@let;
+            }
+
+            val intent = Intent(this, AddSourceActivity::class.java).apply {
+                data = Uri.parse(url);
+            };
+            startActivity(intent);
+        }
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_add_source_options);
@@ -37,8 +65,9 @@ class AddSourceOptionsActivity : AppCompatActivity() {
             integrator.setBeepEnabled(false)
             integrator.setBarcodeImageEnabled(true)
             integrator.setCaptureActivity(QRCaptureActivity::class.java);
-            integrator.initiateScan()
+            _qrCodeResultLauncher.launch(integrator.createScanIntent())
         }
+
         _buttonURL.onClick.subscribe {
             UIDialogs.toast(this, "Not implemented yet..");
         }
diff --git a/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt
index 2a92cbf13e056d947a5a70db83ea6a21dfb53fa9..68ec760912f3c4e7ba9a8ecec973897033ab2c40 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt
@@ -5,6 +5,7 @@ import android.os.Bundle
 import android.widget.EditText
 import android.widget.ImageButton
 import android.widget.LinearLayout
+import androidx.activity.result.contract.ActivityResultContracts
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.lifecycleScope
 import com.futo.platformplayer.R
@@ -14,6 +15,7 @@ import com.futo.platformplayer.setNavigationBarColorAndIcons
 import com.futo.platformplayer.states.StatePolycentric
 import com.futo.polycentric.core.*
 import com.google.zxing.integration.android.IntentIntegrator
+import com.journeyapps.barcodescanner.CaptureActivity
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
@@ -27,6 +29,16 @@ class PolycentricImportProfileActivity : AppCompatActivity() {
     private lateinit var _buttonImportProfile: LinearLayout;
     private lateinit var _editProfile: EditText;
 
+    private val _qrCodeResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+        val scanResult = IntentIntegrator.parseActivityResult(result.resultCode, result.data)
+        scanResult?.let {
+            if (it.contents != null) {
+                val scannedUrl = it.contents
+                import(scannedUrl)
+            }
+        }
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_polycentric_import_profile);
@@ -45,10 +57,15 @@ class PolycentricImportProfileActivity : AppCompatActivity() {
         };
 
         _buttonScanProfile.setOnClickListener {
-            val integrator = IntentIntegrator(this);
-            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
-            integrator.setPrompt("Scan a QR code");
-            integrator.initiateScan();
+            val integrator = IntentIntegrator(this)
+            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
+            integrator.setPrompt("Scan a QR code")
+            integrator.setOrientationLocked(true);
+            integrator.setCameraId(0)
+            integrator.setBeepEnabled(false)
+            integrator.setBarcodeImageEnabled(true)
+            integrator.setCaptureActivity(QRCaptureActivity::class.java);
+            _qrCodeResultLauncher.launch(integrator.createScanIntent())
         };
 
         _buttonImportProfile.setOnClickListener {
@@ -66,18 +83,6 @@ class PolycentricImportProfileActivity : AppCompatActivity() {
         }
     }
 
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
-        if (result != null) {
-            if (result.contents != null) {
-                val scannedUrl = result.contents;
-                import(scannedUrl);
-            }
-        } else {
-            super.onActivityResult(requestCode, resultCode, data)
-        }
-    }
-
     private fun import(url: String) {
         if (!url.startsWith("polycentric://")) {
             UIDialogs.toast(this, "Not a valid URL");
@@ -126,4 +131,8 @@ class PolycentricImportProfileActivity : AppCompatActivity() {
     companion object {
         private const val TAG = "PolycentricImportProfileActivity";
     }
+
+    class QRCaptureActivity: CaptureActivity() {
+
+    }
 }
\ No newline at end of file