diff --git a/app/src/main/java/org/futo/circles/feature/circles/following/FollowingDataSource.kt b/app/src/main/java/org/futo/circles/feature/circles/following/FollowingDataSource.kt
index 16ae18798f14b29631af46e22c83e9ddaccf31e9..4e08695e1f674f23f37d61398d3132c4848a1b40 100644
--- a/app/src/main/java/org/futo/circles/feature/circles/following/FollowingDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/circles/following/FollowingDataSource.kt
@@ -1,11 +1,8 @@
 package org.futo.circles.feature.circles.following
 
-import android.content.Context
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.map
-import dagger.hilt.android.qualifiers.ApplicationContext
 import dagger.hilt.android.scopes.ViewModelScoped
-import org.futo.circles.R
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.extensions.getOrThrow
 import org.futo.circles.core.model.CIRCLE_TAG
@@ -20,20 +17,13 @@ import javax.inject.Inject
 @ViewModelScoped
 class FollowingDataSource @Inject constructor(
     savedStateHandle: SavedStateHandle,
-    @ApplicationContext context: Context,
     private val roomRelationsBuilder: RoomRelationsBuilder
 ) {
 
     private val roomId: String = savedStateHandle.getOrThrow("roomId")
 
-
-    private val session = MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-        context.getString(R.string.session_is_not_created)
-    )
-
-    private val room = session.getRoom(roomId) ?: throw IllegalArgumentException(
-        context.getString(R.string.session_is_not_created)
-    )
+    private val session = MatrixSessionProvider.getSessionOrThrow()
+    private val room = session.getRoom(roomId) ?: throw IllegalArgumentException("room not found")
 
     val roomsLiveData = room.getRoomSummaryLive().map {
         val children = it.getOrNull()?.spaceChildren ?: emptyList()
diff --git a/app/src/main/java/org/futo/circles/feature/notifications/PushersManager.kt b/app/src/main/java/org/futo/circles/feature/notifications/PushersManager.kt
index eb69a159279c87b0d808af091b99095c49d448bc..1b5f37f7f761712ef411569b33536b0d6b8f12f4 100644
--- a/app/src/main/java/org/futo/circles/feature/notifications/PushersManager.kt
+++ b/app/src/main/java/org/futo/circles/feature/notifications/PushersManager.kt
@@ -45,9 +45,7 @@ class PushersManager @Inject constructor(
         pushKey: String,
         gateway: String
     ): UUID {
-        val currentSession =
-            MatrixSessionProvider.currentSession
-                ?: throw IllegalArgumentException(context.getString(R.string.session_is_not_created))
+        val currentSession = MatrixSessionProvider.getSessionOrThrow()
         val pusher = createHttpPusher(pushKey, gateway)
         return currentSession.pushersService().enqueueAddHttpPusher(pusher)
     }
diff --git a/app/src/main/java/org/futo/circles/feature/people/user/UserDataSource.kt b/app/src/main/java/org/futo/circles/feature/people/user/UserDataSource.kt
index 6bcb5eaf3816db5f10fb4772bfda4a745b78b027..1d8234ae48d918dc1daa4e309d2cbd362e88a645 100644
--- a/app/src/main/java/org/futo/circles/feature/people/user/UserDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/people/user/UserDataSource.kt
@@ -1,17 +1,14 @@
 package org.futo.circles.feature.people.user
 
-import android.content.Context
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.asFlow
 import androidx.lifecycle.map
-import dagger.hilt.android.qualifiers.ApplicationContext
 import dagger.hilt.android.scopes.ViewModelScoped
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.flow.flowOn
 import kotlinx.coroutines.flow.map
-import org.futo.circles.R
 import org.futo.circles.core.extensions.getOrThrow
 import org.futo.circles.core.extensions.getRoomOwners
 import org.futo.circles.core.model.TIMELINE_TYPE
@@ -29,17 +26,12 @@ import javax.inject.Inject
 
 @ViewModelScoped
 class UserDataSource @Inject constructor(
-    @ApplicationContext context: Context,
     savedStateHandle: SavedStateHandle
 ) {
 
     private val userId: String = savedStateHandle.getOrThrow("userId")
 
-    private val session by lazy {
-        MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-            context.getString(R.string.session_is_not_created)
-        )
-    }
+    private val session by lazy { MatrixSessionProvider.getSessionOrThrow() }
 
     val userLiveData = session.userService().getUserLive(userId).map {
         it.getOrNull() ?: session.getUserOrDefault(userId)
diff --git a/app/src/main/java/org/futo/circles/feature/room/RoomNotificationsDataSource.kt b/app/src/main/java/org/futo/circles/feature/room/RoomNotificationsDataSource.kt
index cee394c4798c840c4262e905d436874dfd1bb3b9..a2e77e2f11ab3364c3b1b129a88ef093c20107a6 100644
--- a/app/src/main/java/org/futo/circles/feature/room/RoomNotificationsDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/room/RoomNotificationsDataSource.kt
@@ -1,13 +1,9 @@
 package org.futo.circles.feature.room
 
-import android.content.Context
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.map
-import dagger.assisted.AssistedFactory
-import dagger.hilt.android.qualifiers.ApplicationContext
 import dagger.hilt.android.scopes.ViewModelScoped
-import org.futo.circles.R
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.extensions.getOrThrow
 import org.futo.circles.core.model.CircleRoomTypeArg
@@ -20,23 +16,19 @@ import javax.inject.Inject
 
 @ViewModelScoped
 class RoomNotificationsDataSource @Inject constructor(
-    savedStateHandle: SavedStateHandle,
-    @ApplicationContext private val context: Context
+    savedStateHandle: SavedStateHandle
 ) {
 
     private val roomId: String = savedStateHandle.getOrThrow("roomId")
     private val type: CircleRoomTypeArg = savedStateHandle.getOrThrow("type")
 
     private val session
-        get() = MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-            context.getString(R.string.session_is_not_created)
-        )
+        get() = MatrixSessionProvider.getSessionOrThrow()
 
     private val timelineId by lazy {
         if (type == CircleRoomTypeArg.Group) roomId
-        else getTimelineRoomFor(roomId)?.roomId ?: throw IllegalArgumentException(
-            context.getString(R.string.timeline_not_found)
-        )
+        else getTimelineRoomFor(roomId)?.roomId
+            ?: throw IllegalArgumentException("Timeline not found")
     }
 
     val notificationsStateLiveData =
diff --git a/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDataSource.kt b/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDataSource.kt
index d8a9efee2d4dd6ab26fed824b2a04ce12e7c4791..3a4c5d323213a39264a416831a0f9c777c5753b6 100644
--- a/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/room/well_known/RoomWellKnownDataSource.kt
@@ -1,8 +1,5 @@
 package org.futo.circles.feature.room.well_known
 
-import android.content.Context
-import dagger.hilt.android.qualifiers.ApplicationContext
-import org.futo.circles.R
 import org.futo.circles.core.extensions.Response
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.extensions.getOrFetchUser
@@ -19,14 +16,9 @@ import org.matrix.android.sdk.api.session.room.model.Membership
 import org.matrix.android.sdk.api.session.room.peeking.PeekResult
 import javax.inject.Inject
 
-class RoomWellKnownDataSource @Inject constructor(
-    @ApplicationContext private val context: Context
-) {
+class RoomWellKnownDataSource @Inject constructor() {
 
-    val session by lazy {
-        MatrixSessionProvider.currentSession
-            ?: throw IllegalArgumentException(context.getString(R.string.session_is_not_created))
-    }
+    val session by lazy { MatrixSessionProvider.getSessionOrThrow() }
 
     suspend fun resolveRoom(roomUrlData: RoomUrlData): Response<RoomPublicInfo> = createResult {
         session.getRoom(roomUrlData.roomId)?.roomSummary()?.toRoomPublicInfo()
@@ -34,7 +26,7 @@ class RoomWellKnownDataSource @Inject constructor(
         when (val peekResult = session.roomService().peekRoom(roomUrlData.roomId)) {
             is PeekResult.Success -> peekResult.toRoomPublicInfo()
             is PeekResult.PeekingNotAllowed -> roomUrlData.toRoomPublicInfo()
-            PeekResult.UnknownAlias -> throw IllegalArgumentException(context.getString(R.string.room_not_found))
+            PeekResult.UnknownAlias -> throw IllegalArgumentException("Room not found")
         }
     }
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 19d222b24083b7179c5a8b90cdb438d745ae226b..db10f7a2775271c71101028342ed0e76a2cb1036 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -123,7 +123,6 @@
     <string name="people_i_m_following">People I\'m following</string>
     <string name="delete_circle_message">Are you sure you want to remove this circle?</string>
     <string name="delete_group_message">Are you sure you want to remove this group?</string>
-    <string name="timeline_not_found">Timeline not found</string>
     <string name="remove_from_this_circle_but_do_not_unfollow">Remove from this circle, but do not unfollow</string>
     <string name="unfollow_completely_remove_from_all_circles">Unfollow completely (remove from all circles)</string>
     <string name="unfollow">Unfollow</string>
@@ -277,7 +276,6 @@
     <string name="unmute_notifications">Unmute notifications</string>
     <string name="shortcut_disabled">Shortcut disabled</string>
     <string name="shared_circles_space_not_found">Shared Circles space not found</string>
-    <string name="room_not_found">Room not found</string>
     <string name="notification_method">Notification method</string>
     <string name="unifiedpush_distributors_dialog_title">Choose how to receive notifications</string>
     <string name="thread_format">%s (thread)</string>
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/cross_signing/CrossSigningDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/cross_signing/CrossSigningDataSource.kt
index db9891e271c630e4308d2cd3dcdf4472fc7b4705..1b3595b4b04ca43d8b7b98449a46edad7acfa51e 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/cross_signing/CrossSigningDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/cross_signing/CrossSigningDataSource.kt
@@ -1,9 +1,5 @@
 package org.futo.circles.auth.feature.cross_signing
 
-import android.content.Context
-import dagger.hilt.android.qualifiers.ApplicationContext
-import org.futo.circles.auth.R
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.provider.MatrixSessionProvider
 import org.matrix.android.sdk.api.session.Session
 import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
@@ -16,11 +12,10 @@ import org.matrix.android.sdk.api.session.securestorage.SsssKeySpec
 import org.matrix.android.sdk.api.util.awaitCallback
 import javax.inject.Inject
 
-class CrossSigningDataSource @Inject constructor(@ApplicationContext private val context: Context) {
+class CrossSigningDataSource @Inject constructor() {
 
     suspend fun initCrossSigningIfNeed(keySpec: SsssKeySpec) {
-        val session =
-            MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+        val session = MatrixSessionProvider.getSessionOrThrow()
         val crossSigningService = session.cryptoService().crossSigningService()
         try {
             session.sharedSecretStorageService().getSecret(MASTER_KEY_SSSS_NAME, null, keySpec)
@@ -31,8 +26,7 @@ class CrossSigningDataSource @Inject constructor(@ApplicationContext private val
     }
 
     suspend fun configureCrossSigning(keySpec: SsssKeySpec) {
-        val session =
-            MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+        val session = MatrixSessionProvider.getSessionOrThrow()
         val keyId = (session.sharedSecretStorageService()
             .getDefaultKey() as? KeyInfoResult.Success)?.keyInfo?.id
 
@@ -62,11 +56,11 @@ class CrossSigningDataSource @Inject constructor(@ApplicationContext private val
     private suspend fun storeKeys(session: Session, keySpec: SsssKeySpec) {
         val xKeys = session.cryptoService().crossSigningService().getCrossSigningPrivateKeys()
         val mskPrivateKey = xKeys?.master
-            ?: throw IllegalArgumentException(context.getString(R.string.key_is_missing))
+            ?: throw IllegalArgumentException("The key is missing")
         val sskPrivateKey = xKeys.selfSigned
-            ?: throw IllegalArgumentException(context.getString(R.string.key_is_missing))
+            ?: throw IllegalArgumentException("The key is missing")
         val uskPrivateKey = xKeys.user
-            ?: throw IllegalArgumentException(context.getString(R.string.key_is_missing))
+            ?: throw IllegalArgumentException("The key is missing")
 
         val keyId = (session.sharedSecretStorageService()
             .getDefaultKey() as? KeyInfoResult.Success)?.keyInfo?.id
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/log_out/LogoutDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/log_out/LogoutDataSource.kt
index 308e535f5e999709e38d791dcaddef73d8577dcd..8bc23a8487f70b27db2c21618bcca8e59be9ffc3 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/log_out/LogoutDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/log_out/LogoutDataSource.kt
@@ -1,21 +1,15 @@
 package org.futo.circles.auth.feature.log_in.log_out
 
-import android.content.Context
 import androidx.lifecycle.MutableLiveData
-import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.R
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.model.LoadingData
 import org.futo.circles.core.provider.MatrixSessionProvider
 import javax.inject.Inject
 
-class LogoutDataSource @Inject constructor(
-    @ApplicationContext private val context: Context
-) {
+class LogoutDataSource @Inject constructor() {
 
-    private val session =
-        MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+    private val session = MatrixSessionProvider.getSessionOrThrow()
 
     val loadingLiveData = MutableLiveData<LoadingData>()
     private val loadingData = LoadingData(total = 0)
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/create/CreatePassPhraseDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/create/CreatePassPhraseDataSource.kt
index 4fc819465a49abc53961d382168574c075fc7373..7fcecb1b8e0fd07e8dc2eeb20dea83cb1cf14e06 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/create/CreatePassPhraseDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/create/CreatePassPhraseDataSource.kt
@@ -6,7 +6,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.R
 import org.futo.circles.auth.feature.cross_signing.CrossSigningDataSource
 import org.futo.circles.auth.feature.pass_phrase.restore.SSSSDataSource
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.model.LoadingData
 import org.futo.circles.core.provider.MatrixSessionProvider
 import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersion
@@ -22,8 +21,7 @@ class CreatePassPhraseDataSource @Inject constructor(
 ) {
 
     private val keysBackupService by lazy {
-        MatrixSessionProvider.currentSession?.cryptoService()?.keysBackupService()
-            ?: throw SessionIsNotCreatedException(context)
+        MatrixSessionProvider.getSessionOrThrow().cryptoService().keysBackupService()
     }
     val loadingLiveData = MutableLiveData<LoadingData>()
     private val passPhraseLoadingData = LoadingData()
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
index ffb18d7ba7745adb546e1ef76f26016b3f20b39a..833703bebc2bd20c8decc05874255d5b2dbf66b2 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
@@ -8,7 +8,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.R
 import org.futo.circles.auth.feature.cross_signing.CrossSigningDataSource
 import org.futo.circles.auth.model.KeyData
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.model.LoadingData
 import org.futo.circles.core.provider.MatrixSessionProvider
 import org.matrix.android.sdk.api.listeners.StepProgressListener
@@ -135,8 +134,7 @@ class RestoreBackupDataSource @Inject constructor(
     }
 
     private fun getKeysBackupService() =
-        MatrixSessionProvider.currentSession?.cryptoService()?.keysBackupService()
-            ?: throw SessionIsNotCreatedException(context)
+        MatrixSessionProvider.getSessionOrThrow().cryptoService().keysBackupService()
 
     private suspend fun getKeysVersion(keysBackupService: KeysBackupService) =
         awaitCallback<KeysBackupLastVersionResult> {
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
index 08ee5c8d45d08bd92b57e00861e90cff845ce6da..63c0498832e9273def1f5dcd747e72d213d2309e 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
@@ -1,10 +1,8 @@
 package org.futo.circles.auth.feature.pass_phrase.restore
 
 import android.content.Context
-import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.R
 import org.futo.circles.auth.model.KeyData
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.provider.MatrixSessionProvider
 import org.matrix.android.sdk.api.listeners.ProgressListener
 import org.matrix.android.sdk.api.listeners.StepProgressListener
@@ -23,7 +21,7 @@ import org.matrix.android.sdk.api.util.toBase64NoPadding
 import java.util.UUID
 import javax.inject.Inject
 
-class SSSSDataSource @Inject constructor(@ApplicationContext private val context: Context) {
+class SSSSDataSource @Inject constructor() {
 
     fun isBackupKeyInQuadS(): Boolean {
         val session = MatrixSessionProvider.currentSession ?: return false
@@ -36,8 +34,7 @@ class SSSSDataSource @Inject constructor(@ApplicationContext private val context
     }
 
     suspend fun storeIntoSSSSWithKey(recoveryKey: String): KeyData {
-        val session =
-            MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+        val session = MatrixSessionProvider.getSessionOrThrow()
         val quadS = session.sharedSecretStorageService()
         val keyInfo = quadS.generateKey(
             UUID.randomUUID().toString(),
@@ -55,7 +52,7 @@ class SSSSDataSource @Inject constructor(@ApplicationContext private val context
         isBsSpeke: Boolean
     ): KeyData {
         val session =
-            MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+            MatrixSessionProvider.getSessionOrThrow()
         val quadS = session.sharedSecretStorageService()
         val keyInfo = quadS.generateKeyWithPassphrase(
             UUID.randomUUID().toString(),
@@ -75,8 +72,7 @@ class SSSSDataSource @Inject constructor(@ApplicationContext private val context
         progressObserver: StepProgressListener,
         isBsSpeke: Boolean
     ): KeyData {
-        val session =
-            MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+        val session = MatrixSessionProvider.getSessionOrThrow()
 
         val keyInfo = getKeyInfo(session, context)
 
@@ -108,7 +104,7 @@ class SSSSDataSource @Inject constructor(@ApplicationContext private val context
         recoveryKey: String,
         progressObserver: StepProgressListener
     ): KeyData {
-        val session = MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
+        val session = MatrixSessionProvider.getSessionOrThrow()
 
         val keyInfo = getKeyInfo(session, context)
 
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/reauth/ReAuthStagesDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/reauth/ReAuthStagesDataSource.kt
index 57491ef3511391ea9e5057b23b4c24077219e6a4..991b3c828a0c5f41a8c3095d6d943ab3b8d9fa06 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/reauth/ReAuthStagesDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/reauth/ReAuthStagesDataSource.kt
@@ -4,7 +4,6 @@ import android.content.Context
 import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.base.BaseLoginStagesDataSource
 import org.futo.circles.auth.model.CustomUIAuth
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.SingleEventLiveData
 import org.futo.circles.core.extensions.Response
 import org.futo.circles.core.provider.MatrixSessionProvider
@@ -30,9 +29,7 @@ class ReAuthStagesDataSource @Inject constructor(
     private var sessionId: String = ""
     private var stageResultContinuation: Continuation<Response<RegistrationResult>>? =
         null
-    private val session by lazy {
-        MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
-    }
+    private val session by lazy { MatrixSessionProvider.getSessionOrThrow() }
 
     fun startReAuthStages(
         session: String,
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileDataSource.kt
index 1182e6a105e1ab51b240766891841f8e00be6217..2006f36f822115da00d4dba36bacff56b5fc05ad 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/setup_profile/SetupProfileDataSource.kt
@@ -3,7 +3,6 @@ package org.futo.circles.auth.feature.sign_up.setup_profile
 import android.content.Context
 import android.net.Uri
 import dagger.hilt.android.qualifiers.ApplicationContext
-import org.futo.circles.core.SessionIsNotCreatedException
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.extensions.getFilename
 import org.futo.circles.core.provider.MatrixSessionProvider
@@ -14,9 +13,7 @@ class SetupProfileDataSource @Inject constructor(
     @ApplicationContext private val context: Context
 ) {
 
-    private val session by lazy {
-        MatrixSessionProvider.currentSession ?: throw SessionIsNotCreatedException(context)
-    }
+    private val session by lazy { MatrixSessionProvider.getSessionOrThrow() }
 
     fun getUserData() = session.userService().getUser(session.myUserId)
 
diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml
index f596913a348dda5a52fd311f1c77c184e04c89ca..a906f15447aa9d130885a09e04f272c782233c43 100644
--- a/auth/src/main/res/values/strings.xml
+++ b/auth/src/main/res/values/strings.xml
@@ -44,7 +44,6 @@
     <string name="invalid_recovery_key">"It's not a valid recovery key"</string>
     <string name="backup_could_not_be_decrypted_with_key">Backup could not be decrypted with this recovery key.</string>
     <string name="failed_to_access_secure_storage">Failed to access secure storage</string>
-    <string name="key_is_missing">The key is missing</string>
     <string name="generating_recovery_key">Generating recovery key from passphrase.</string>
     <string name="creating_backup">Creating backup</string>
     <string name="backup_already_exist">Backup already exist</string>
diff --git a/core/src/main/java/org/futo/circles/core/SessionIsNotCreatedException.kt b/core/src/main/java/org/futo/circles/core/SessionIsNotCreatedException.kt
deleted file mode 100644
index 146a7b05bd94660e689c0f5a7343eef984e4b2f4..0000000000000000000000000000000000000000
--- a/core/src/main/java/org/futo/circles/core/SessionIsNotCreatedException.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.futo.circles.core
-
-import android.content.Context
-
-class SessionIsNotCreatedException(context: Context) :
-    Exception(context.getString(R.string.session_is_not_created))
diff --git a/core/src/main/java/org/futo/circles/core/provider/MatrixSessionProvider.kt b/core/src/main/java/org/futo/circles/core/provider/MatrixSessionProvider.kt
index 56b1dcb086f35e3b557b16a46adde4047f768538..05976d0b0f7d58d6493e115cf7f1052768c5999d 100644
--- a/core/src/main/java/org/futo/circles/core/provider/MatrixSessionProvider.kt
+++ b/core/src/main/java/org/futo/circles/core/provider/MatrixSessionProvider.kt
@@ -16,6 +16,8 @@ object MatrixSessionProvider {
     private var notificationSetupListener: MatrixNotificationSetupListener? = null
     private var onNewAuthLister: (() -> Unit)? = null
 
+    fun getSessionOrThrow() = currentSession ?: throw IllegalArgumentException("Session is not created")
+
     fun initSession(
         context: Context,
         notificationListener: MatrixNotificationSetupListener? = null,
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index ae932552dd9bad0713cd77c4323122971eaaa795..76060f182302d4d9352e10475a4f5c6aecfa2432 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -51,6 +51,5 @@
     <string name="send_screenshot">Send screenshot</string>
     <string name="save">Save</string>
     <string name="select_items_from_list_below">Select items from list below</string>
-    <string name="session_is_not_created">Session is not created</string>
 
 </resources>
\ No newline at end of file
diff --git a/settings/src/main/java/org/futo/circles/settings/feature/SettingsDataSource.kt b/settings/src/main/java/org/futo/circles/settings/feature/SettingsDataSource.kt
index ebc6181d1ccc18892c8f828ad1fac5452f0727d2..dc1fe57b7a464f80013adb6018208f1b3d12b3b5 100644
--- a/settings/src/main/java/org/futo/circles/settings/feature/SettingsDataSource.kt
+++ b/settings/src/main/java/org/futo/circles/settings/feature/SettingsDataSource.kt
@@ -9,7 +9,6 @@ import org.futo.circles.auth.feature.reauth.AuthConfirmationProvider
 import org.futo.circles.core.extensions.Response
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.provider.MatrixSessionProvider
-import org.futo.circles.settings.R
 import org.futo.circles.auth.feature.change_password.ChangePasswordDataSource
 import java.io.File
 import javax.inject.Inject
@@ -20,9 +19,7 @@ class SettingsDataSource @Inject constructor(
     private val authConfirmationProvider: AuthConfirmationProvider
 ) {
 
-    private val session = MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-        context.getString(R.string.session_is_not_created)
-    )
+    private val session = MatrixSessionProvider.getSessionOrThrow()
     val passPhraseLoadingLiveData = changePasswordDataSource.passPhraseLoadingLiveData
     val startReAuthEventLiveData = authConfirmationProvider.startReAuthEventLiveData
     val profileLiveData = session.userService().getUserLive(session.myUserId)
diff --git a/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/ActiveSessionsDataSource.kt b/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/ActiveSessionsDataSource.kt
index 52627e5bb2b34af8d379a750c08359e1fe254e26..fad02c1412a6445096ba16b7b84e412156291031 100644
--- a/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/ActiveSessionsDataSource.kt
+++ b/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/ActiveSessionsDataSource.kt
@@ -29,9 +29,7 @@ class ActiveSessionsDataSource @Inject constructor(
     private val authConfirmationProvider: AuthConfirmationProvider
 ) : ExpandableItemsDataSource {
 
-    private val session = MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-        context.getString(R.string.session_is_not_created)
-    )
+    private val session = MatrixSessionProvider.getSessionOrThrow()
 
     val startReAuthEventLiveData = authConfirmationProvider.startReAuthEventLiveData
 
diff --git a/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/verify/VerifySessionViewModel.kt b/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/verify/VerifySessionViewModel.kt
index 5814abfec78550840342b261bb31f47b8c475b00..6d9e87e946a5334a3884a26114ca5009fcde7471 100644
--- a/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/verify/VerifySessionViewModel.kt
+++ b/settings/src/main/java/org/futo/circles/settings/feature/active_sessions/verify/VerifySessionViewModel.kt
@@ -1,33 +1,32 @@
 package org.futo.circles.settings.feature.active_sessions.verify
 
-import android.content.Context
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.ViewModel
 import dagger.hilt.android.lifecycle.HiltViewModel
-import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.core.extensions.getOrThrow
 import org.futo.circles.core.provider.MatrixSessionProvider
-import org.futo.circles.settings.R
 import org.futo.circles.settings.model.QrCanceled
 import org.futo.circles.settings.model.QrLoading
 import org.futo.circles.settings.model.QrReady
 import org.futo.circles.settings.model.QrState
 import org.futo.circles.settings.model.QrSuccess
-import org.matrix.android.sdk.api.session.crypto.verification.*
+import org.matrix.android.sdk.api.session.crypto.verification.PendingVerificationRequest
+import org.matrix.android.sdk.api.session.crypto.verification.QrCodeVerificationTransaction
+import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
+import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
+import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
+import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
 import javax.inject.Inject
 
 @HiltViewModel
 class VerifySessionViewModel @Inject constructor(
-    savedStateHandle: SavedStateHandle,
-    @ApplicationContext context: Context
+    savedStateHandle: SavedStateHandle
 ) : ViewModel(), VerificationService.Listener {
 
     private val deviceId: String = savedStateHandle.getOrThrow("deviceId")
 
-    private val session = MatrixSessionProvider.currentSession ?: throw IllegalArgumentException(
-        context.getString(R.string.session_is_not_created)
-    )
+    private val session = MatrixSessionProvider.getSessionOrThrow()
 
     private val verificationMethods = listOf(
         VerificationMethod.QR_CODE_SHOW,