diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt
index 88d4aff1fbd4be7e2bef2d5e78a287d291f85dde..2a826f042f0b0af71c88bf80291e8d077107fca0 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LoginDataSource.kt
@@ -12,7 +12,8 @@ import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_BS
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_EMAIL_SUBMIT_TOKEN_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.TYPE_PARAM_KEY
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.USER_PARAM_KEY
-import org.futo.circles.auth.feature.uia.UIAFlowType
+import org.futo.circles.auth.feature.uia.UIADataSourceProvider
+import org.futo.circles.auth.model.UIAFlowType
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.provider.MatrixInstanceProvider
 import org.futo.circles.core.utils.HomeServerUtils.buildHomeServerConfigFromDomain
@@ -21,10 +22,12 @@ import javax.inject.Inject
 
 class LoginDataSource @Inject constructor(
     @ApplicationContext private val context: Context,
-    private val uiaFactory: UIADataSource.Factory
+    uiaFactory: UIADataSource.Factory
 ) {
 
-    private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.Login) }
+    private val uiaDataSource by lazy {
+        UIADataSourceProvider.create(UIAFlowType.Login, uiaFactory)
+    }
     private val authService by lazy { MatrixInstanceProvider.matrix.authenticationService() }
 
     suspend fun startLogin(
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt
index 20d57016c2b90e31fba4619df7cce5f3339ded0d..8841a4ead076e435f19e47271daef34f8e6ae535 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/sign_up/SignUpDataSource.kt
@@ -6,7 +6,8 @@ import org.futo.circles.auth.R
 import org.futo.circles.auth.feature.uia.UIADataSource
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_FREE_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.REGISTRATION_SUBSCRIPTION_TYPE
-import org.futo.circles.auth.feature.uia.UIAFlowType
+import org.futo.circles.auth.feature.uia.UIADataSourceProvider
+import org.futo.circles.auth.model.UIAFlowType
 import org.futo.circles.core.base.CirclesAppConfig
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.provider.MatrixInstanceProvider
@@ -16,12 +17,14 @@ import javax.inject.Inject
 
 class SignUpDataSource @Inject constructor(
     @ApplicationContext private val context: Context,
-    private val uiaFactory: UIADataSource.Factory
+    uiaFactory: UIADataSource.Factory
 ) {
 
     private var registrationFlowsForDomain: Pair<String, List<List<Stage>>>? = null
 
-    private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.Signup) }
+    private val uiaDataSource by lazy {
+        UIADataSourceProvider.create(UIAFlowType.Signup, uiaFactory)
+    }
 
     suspend fun getAuthFlowsFor(domain: String) = createResult {
         registrationFlowsForDomain = null
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt
index e6486560973eda424d4b96c246a2362ab90ccec0..1471183a5a5440df0f238434b7bf2b3f36766bb3 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/UIADataSourceProvider.kt
@@ -1,11 +1,11 @@
 package org.futo.circles.auth.feature.uia
 
-enum class UIAFlowType { Login, Signup, ReAuth, ForgotPassword }
+import org.futo.circles.auth.model.UIAFlowType
+
 
 object UIADataSourceProvider {
 
-    var activeFlowDataSource: UIADataSource? = null
-        private set
+    private var activeFlowDataSource: UIADataSource? = null
 
     var activeFlowType: UIAFlowType? = null
         private set
@@ -14,9 +14,8 @@ object UIADataSourceProvider {
         activeFlowDataSource ?: throw IllegalArgumentException("Flow is not active")
 
 
-    fun startUIAFlow(flowType: UIAFlowType, factory: UIADataSource.Factory) {
+    fun create(flowType: UIAFlowType, factory: UIADataSource.Factory): UIADataSource {
         activeFlowType = flowType
-        activeFlowDataSource = factory.create(flowType)
-
+        return factory.create(flowType).also { activeFlowDataSource = it }
     }
 }
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt
index c93abbff8618e2d36ee073970ab45f1632c20a1c..a3eb2d6204aedd4cf84a6fb10d845aad556a870b 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/flow/reauth/AuthConfirmationProvider.kt
@@ -4,7 +4,8 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.MainScope
 import kotlinx.coroutines.launch
 import org.futo.circles.auth.feature.uia.UIADataSource
-import org.futo.circles.auth.feature.uia.UIAFlowType
+import org.futo.circles.auth.feature.uia.UIADataSourceProvider
+import org.futo.circles.auth.model.UIAFlowType
 import org.futo.circles.core.base.SingleEventLiveData
 import org.matrix.android.sdk.api.auth.UIABaseAuth
 import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
@@ -15,11 +16,13 @@ import kotlin.coroutines.Continuation
 import kotlin.coroutines.resumeWithException
 
 class AuthConfirmationProvider @Inject constructor(
-    private val uiaFactory: UIADataSource.Factory
+    uiaFactory: UIADataSource.Factory
 ) : UserInteractiveAuthInterceptor {
 
     val startReAuthEventLiveData = SingleEventLiveData<Unit>()
-    private val uiaDataSource by lazy { uiaFactory.create(UIAFlowType.ReAuth) }
+    private val uiaDataSource by lazy {
+        UIADataSourceProvider.create(UIAFlowType.ReAuth, uiaFactory)
+    }
 
     override fun performStage(
         flowResponse: RegistrationFlowResponse,