diff --git a/app/src/main/java/app/grapheneos/camera/CamConfig.kt b/app/src/main/java/app/grapheneos/camera/CamConfig.kt
index 53c6f6c..89aa1ef 100644
--- a/app/src/main/java/app/grapheneos/camera/CamConfig.kt
+++ b/app/src/main/java/app/grapheneos/camera/CamConfig.kt
@@ -41,6 +41,7 @@
 import app.grapheneos.camera.analyzer.QRAnalyzer
 import app.grapheneos.camera.ui.activities.CaptureActivity
 import app.grapheneos.camera.ui.activities.MainActivity
+import app.grapheneos.camera.ui.activities.MoreSettings
 import app.grapheneos.camera.ui.activities.SecureActivity
 import app.grapheneos.camera.ui.activities.SecureMainActivity
 import app.grapheneos.camera.ui.activities.VideoCaptureActivity
@@ -198,7 +199,7 @@
 
     var iAnalyzer: ImageAnalysis? = null
 
-    val mPlayer: TunePlayer by lazy { TunePlayer(mActivity.applicationContext) }
+    val mPlayer: TunePlayer by lazy { TunePlayer(mActivity) }
 
     // note that Activities which implement SecureActivity interface (meaning they are accessible
     // from the lock screen) are forced to override getSharedPreferences()
@@ -1413,7 +1414,7 @@
         builder.setMessage(R.string.reverting_to_default_folder)
         builder.setPositiveButton(R.string.ok, null)
         builder.setNeutralButton(R.string.more_settings) { _, _ ->
-            mActivity.settingsDialog.openMoreSettings()
+            MoreSettings.start(mActivity)
         }
         val alertDialog: AlertDialog = builder.create()
         alertDialog.setCancelable(false)
diff --git a/app/src/main/java/app/grapheneos/camera/NumInputFilter.kt b/app/src/main/java/app/grapheneos/camera/NumInputFilter.kt
index c75de74..a40a559 100644
--- a/app/src/main/java/app/grapheneos/camera/NumInputFilter.kt
+++ b/app/src/main/java/app/grapheneos/camera/NumInputFilter.kt
@@ -4,7 +4,7 @@
 import android.text.Spanned
 import app.grapheneos.camera.ui.activities.MoreSettings
 
-class NumInputFilter(private val mActivity: MoreSettings) : InputFilter {
+class NumInputFilter(private val settings: MoreSettings) : InputFilter {
 
     override fun filter(
         source: CharSequence,
@@ -22,9 +22,7 @@
             if (isInRange(input)) {
                 return null
             } else {
-                mActivity.showMessage(
-                    "Photo quality can only be between $min and $max"
-                )
+                settings.showMessage("Photo quality can only be between $min and $max")
             }
         } catch (e: NumberFormatException) {
             e.printStackTrace()
@@ -40,4 +38,4 @@
         const val min = 1
         const val max = 100
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/grapheneos/camera/TunePlayer.kt b/app/src/main/java/app/grapheneos/camera/TunePlayer.kt
index b373f78..a961156 100644
--- a/app/src/main/java/app/grapheneos/camera/TunePlayer.kt
+++ b/app/src/main/java/app/grapheneos/camera/TunePlayer.kt
@@ -1,10 +1,9 @@
 package app.grapheneos.camera
 
-import android.content.Context
 import android.media.MediaPlayer
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
+import app.grapheneos.camera.ui.activities.MainActivity
 
-class TunePlayer(context: Context) {
+class TunePlayer(val context: MainActivity) {
 
     private val shutterPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.image_shot)
 
@@ -17,7 +16,7 @@
     private val vStopPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.video_stop)
 
     private fun shouldNotPlayTune(): Boolean {
-        return !camConfig.enableCameraSounds
+        return !context.camConfig.enableCameraSounds
     }
 
     fun playShutterSound() {
@@ -60,4 +59,4 @@
         fSPlayer.seekTo(0)
         fSPlayer.start()
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/grapheneos/camera/analyzer/QRAnalyzer.kt b/app/src/main/java/app/grapheneos/camera/analyzer/QRAnalyzer.kt
index c261386..06820cf 100644
--- a/app/src/main/java/app/grapheneos/camera/analyzer/QRAnalyzer.kt
+++ b/app/src/main/java/app/grapheneos/camera/analyzer/QRAnalyzer.kt
@@ -4,7 +4,6 @@
 import androidx.camera.core.ImageAnalysis.Analyzer
 import androidx.camera.core.ImageProxy
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import com.google.zxing.BarcodeFormat
 import com.google.zxing.BinaryBitmap
 import com.google.zxing.DecodeHintType
@@ -31,6 +30,8 @@
     }
 
     fun refreshHints() {
+        val camConfig = mActivity.camConfig
+
         val supportedHints: MutableMap<DecodeHintType, Any> = EnumMap(
             DecodeHintType::class.java
         )
diff --git a/app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt b/app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt
index ea59378..99c3b75 100644
--- a/app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt
+++ b/app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt
@@ -21,13 +21,13 @@
 import app.grapheneos.camera.CapturedItem
 import app.grapheneos.camera.R
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import app.grapheneos.camera.ui.activities.SecureMainActivity
 
 private const val imageFileFormat = ".jpg"
 var isTakingPicture: Boolean = false
 
 class ImageCapturer(val mActivity: MainActivity) {
+    val camConfig = mActivity.camConfig
 
     @SuppressLint("RestrictedApi")
     fun takePicture() {
diff --git a/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt b/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
index ba82faf..35f9052 100644
--- a/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
+++ b/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
@@ -27,7 +27,6 @@
 import app.grapheneos.camera.R
 import app.grapheneos.camera.VIDEO_NAME_PREFIX
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import app.grapheneos.camera.ui.activities.SecureMainActivity
 import app.grapheneos.camera.ui.activities.VideoCaptureActivity
 import app.grapheneos.camera.util.getTreeDocumentUri
@@ -37,6 +36,7 @@
 import java.util.Locale
 
 class VideoCapturer(private val mActivity: MainActivity) {
+    val camConfig = mActivity.camConfig
 
     var isRecording = false
         private set
diff --git a/app/src/main/java/app/grapheneos/camera/notifier/SensorOrientationChangeNotifier.kt b/app/src/main/java/app/grapheneos/camera/notifier/SensorOrientationChangeNotifier.kt
index a21f228..b676965 100644
--- a/app/src/main/java/app/grapheneos/camera/notifier/SensorOrientationChangeNotifier.kt
+++ b/app/src/main/java/app/grapheneos/camera/notifier/SensorOrientationChangeNotifier.kt
@@ -7,7 +7,6 @@
 import android.hardware.SensorManager
 import android.view.View
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import java.lang.ref.WeakReference
 import kotlin.math.abs
 import kotlin.math.atan
@@ -103,7 +102,7 @@
                 notifyListeners()
             }
 
-            if (!camConfig.shouldShowGyroscope()) return
+            if (!mainActivity.camConfig.shouldShowGyroscope()) return
 
             val dAngle = if (mainActivity.gCircleFrame.rotation == 270f) {
                 90f
diff --git a/app/src/main/java/app/grapheneos/camera/ui/CountDownTimerUI.kt b/app/src/main/java/app/grapheneos/camera/ui/CountDownTimerUI.kt
index e9b7b85..7289ee7 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/CountDownTimerUI.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/CountDownTimerUI.kt
@@ -10,9 +10,9 @@
 import android.view.animation.AccelerateDecelerateInterpolator
 import androidx.appcompat.widget.AppCompatTextView
 import androidx.camera.core.AspectRatio
+import app.grapheneos.camera.CamConfig
 import app.grapheneos.camera.ui.activities.CaptureActivity
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 
 class CountDownTimerUI @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null
@@ -20,6 +20,7 @@
 
     private lateinit var timer: CountDownTimer
     lateinit var mActivity: MainActivity
+    lateinit var camConfig: CamConfig
 
     companion object {
         private const val textAnimDuration = 700L
@@ -33,6 +34,7 @@
 
     fun setMainActivity(mainActivity: MainActivity) {
         this.mActivity = mainActivity
+        camConfig = mainActivity.camConfig
     }
 
     fun startTimer() {
@@ -136,4 +138,4 @@
     init {
         gravity = Gravity.CENTER
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/CustomGrid.kt b/app/src/main/java/app/grapheneos/camera/ui/CustomGrid.kt
index 3efaa4d..7391f33 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/CustomGrid.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/CustomGrid.kt
@@ -9,7 +9,6 @@
 import androidx.camera.core.AspectRatio
 import app.grapheneos.camera.CamConfig
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 
 class CustomGrid @JvmOverloads constructor(
     context: Context,
@@ -32,6 +31,8 @@
     }
 
     override fun onDraw(canvas: Canvas) {
+        val camConfig = mActivity.camConfig
+
         super.onDraw(canvas)
 
         if (camConfig.gridType == CamConfig.GridType.NONE) {
@@ -94,4 +95,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/QRToggle.kt b/app/src/main/java/app/grapheneos/camera/ui/QRToggle.kt
index 16d8db9..5fb09c5 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/QRToggle.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/QRToggle.kt
@@ -3,7 +3,6 @@
 import android.content.Context
 import android.util.AttributeSet
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import com.google.android.material.imageview.ShapeableImageView
 
 class QRToggle @JvmOverloads constructor(
@@ -31,6 +30,7 @@
 
     override fun setSelected(selected: Boolean) {
         super.setSelected(selected)
+        val camConfig = mActivity.camConfig
 
         if (!selected && camConfig.allowedFormats.size == 1) {
             mActivity.showMessage(
@@ -49,4 +49,4 @@
         private const val selectedAlpha = 1f
         private const val deselectedAlpha = 0.3f
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
index de94203..319678d 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
@@ -42,13 +42,14 @@
 import app.grapheneos.camera.databinding.SettingsBinding
 import app.grapheneos.camera.ui.activities.CaptureActivity
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import app.grapheneos.camera.ui.activities.MoreSettings
+import app.grapheneos.camera.ui.activities.SecureActivity
 import app.grapheneos.camera.ui.activities.SecureMainActivity
 import app.grapheneos.camera.ui.activities.VideoCaptureActivity
 
 class SettingsDialog(val mActivity: MainActivity) :
     Dialog(mActivity, R.style.Theme_App) {
+    val camConfig = mActivity.camConfig
 
     private val binding: SettingsBinding by lazy { SettingsBinding.inflate(layoutInflater) }
     private var dialog: View
@@ -99,7 +100,7 @@
         moreSettingsButton = binding.moreSettings
         moreSettingsButton.setOnClickListener {
             if (!mActivity.videoCapturer.isRecording) {
-                openMoreSettings()
+                MoreSettings.start(mActivity)
             } else {
                 mActivity.showMessage(getString(R.string.more_settings_unavailable_during_recording))
             }
@@ -726,15 +727,4 @@
 
         videoQualitySpinner.setSelection(titles.indexOf(qt))
     }
-
-    fun openMoreSettings() {
-        val mSIntent = Intent(mActivity, MoreSettings::class.java)
-        mSIntent.putExtra(
-            "show_storage_settings",
-            !(mActivity is SecureMainActivity ||
-                    (mActivity is CaptureActivity &&
-                            mActivity !is VideoCaptureActivity))
-        )
-        mActivity.startActivity(mSIntent)
-    }
 }
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
index 4494574..2684ba0 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
@@ -1318,14 +1318,13 @@
         rotateView(settingsDialog.settingsFrame, iconRotation)
     }
 
+    lateinit var camConfig: CamConfig
+
     companion object {
         private const val TAG = "GOCam"
         private const val autoCenterFocusDuration = 2000L
         private val hexArray = "0123456789ABCDEF".toCharArray()
 
-        lateinit var camConfig: CamConfig
-        fun isCamConfigInitialized() = this::camConfig.isInitialized
-
         private const val SWIPE_THRESHOLD = 100
         private const val SWIPE_VELOCITY_THRESHOLD = 100
     }
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt
index f58f1a7..115f229 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt
@@ -20,11 +20,11 @@
 import app.grapheneos.camera.NumInputFilter
 import app.grapheneos.camera.R
 import app.grapheneos.camera.databinding.MoreSettingsBinding
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import app.grapheneos.camera.util.storageLocationToUiString
 import com.google.android.material.snackbar.Snackbar
 
 class MoreSettings : AppCompatActivity(), TextView.OnEditorActionListener {
+    private lateinit var camConfig: CamConfig
 
     private lateinit var binding: MoreSettingsBinding
     private lateinit var snackBar: Snackbar
@@ -70,12 +70,20 @@
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+
+        val camConfig = obtainCamConfig(intent)
+        if (camConfig == null) {
+            finish()
+            return
+        }
+        this.camConfig = camConfig
+
         binding = MoreSettingsBinding.inflate(layoutInflater)
         setContentView(binding.root)
         setTitle(R.string.more_settings)
         supportActionBar?.setDisplayHomeAsUpEnabled(true)
 
-        val showStorageSettings = intent.extras?.getBoolean("show_storage_settings") == true
+        val showStorageSettings = intent.getBooleanExtra(INTENT_EXTRA_SHOW_STORAGE_SETTINGS, false)
 
         val sIAPToggle = binding.saveImageAsPreviewToggle
 
@@ -304,4 +312,39 @@
         finish()
         return true
     }
+
+    companion object {
+        private var camConfigId = 0L
+        private var staticCamConfig: CamConfig? = null
+
+        private const val INTENT_EXTRA_CAM_CONFIG_ID = "camConfig_id"
+        private const val INTENT_EXTRA_SHOW_STORAGE_SETTINGS = "show_storage_settings"
+
+        fun start(caller: MainActivity) {
+            Intent(caller, MoreSettings::class.java).let {
+                it.putExtra(INTENT_EXTRA_SHOW_STORAGE_SETTINGS, caller !is SecureActivity)
+                camConfigId += 1
+                it.putExtra(INTENT_EXTRA_CAM_CONFIG_ID, camConfigId)
+                staticCamConfig = caller.camConfig
+
+                caller.startActivity(it)
+            }
+        }
+
+        private fun obtainCamConfig(intent: Intent): CamConfig? {
+            val camConfig = staticCamConfig
+            if (camConfigId != intent.getLongExtra(INTENT_EXTRA_CAM_CONFIG_ID, -1)) {
+                return null
+            }
+            return camConfig
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+
+        if (isFinishing) {
+            staticCamConfig = null
+        }
+    }
 }
diff --git a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt
index c3ce481..1b22d4d 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt
@@ -17,7 +17,6 @@
 import androidx.transition.TransitionManager
 import app.grapheneos.camera.R
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 
 class ExposureBar : AppCompatSeekBar {
     constructor(context: Context) : super(context)
@@ -113,7 +112,7 @@
                 Log.i("progress", progress.toString())
                 Log.i("max", max.toString())
 
-                camConfig.camera?.cameraControl
+                mainActivity.camConfig.camera?.cameraControl
                     ?.setExposureCompensationIndex(progress)
 
                 showPanel()
diff --git a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ZoomBar.kt b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ZoomBar.kt
index 9d1b094..68dc4ce 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ZoomBar.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ZoomBar.kt
@@ -18,9 +18,9 @@
 import androidx.transition.Fade
 import androidx.transition.Transition
 import androidx.transition.TransitionManager
+import app.grapheneos.camera.CamConfig
 import app.grapheneos.camera.R
 import app.grapheneos.camera.ui.activities.MainActivity
-import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
 import kotlin.math.roundToInt
 
 class ZoomBar : AppCompatSeekBar {
@@ -46,9 +46,11 @@
         .inflate(R.layout.zoom_bar_thumb, null, false)
 
     private lateinit var mainActivity: MainActivity
+    private lateinit var camConfig: CamConfig
 
     fun setMainActivity(mainActivity: MainActivity) {
         this.mainActivity = mainActivity
+        camConfig = mainActivity.camConfig
     }
 
     fun showPanel() {
