diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt
index 84cbcd52b01f8a3720ab1d9833eb82657299551a..30ef23fa0e851de82de5014f77cc0988e7f40ac5 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt
@@ -125,4 +125,7 @@ interface RegistrationWizard {
      * called successfully.
      */
     fun isRegistrationStarted(): Boolean
+
+    //Added to support few registration flows
+    suspend fun getAllRegistrationFlows(): List<List<Stage>>
 }
\ No newline at end of file
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt
index dac75cfd1d56b282399e0279c7b9b366bf79d189..3077f8953c8241e5b0c399a4331a348e94939984 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt
@@ -20,7 +20,12 @@ import kotlinx.coroutines.delay
 import org.matrix.android.sdk.api.auth.LoginType
 import org.matrix.android.sdk.api.auth.data.Credentials
 import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
-import org.matrix.android.sdk.api.auth.registration.*
+import org.matrix.android.sdk.api.auth.registration.RegisterThreePid
+import org.matrix.android.sdk.api.auth.registration.RegistrationAvailability
+import org.matrix.android.sdk.api.auth.registration.RegistrationResult
+import org.matrix.android.sdk.api.auth.registration.RegistrationWizard
+import org.matrix.android.sdk.api.auth.registration.Stage
+import org.matrix.android.sdk.api.auth.registration.toFlowResult
 import org.matrix.android.sdk.api.failure.Failure
 import org.matrix.android.sdk.api.failure.Failure.RegistrationFlowError
 import org.matrix.android.sdk.api.util.JsonDict
@@ -265,4 +270,38 @@ internal class DefaultRegistrationWizard(
     override suspend fun registrationAvailable(userName: String): RegistrationAvailability {
         return registerAvailableTask.execute(RegisterAvailableTask.Params(userName))
     }
+
+    //Added to support few registration flows
+    override suspend fun getAllRegistrationFlows(): List<List<Stage>> {
+        try {
+            registerTask.execute(RegisterTask.Params(RegistrationParams()))
+        } catch (exception: Throwable) {
+            return if (exception is RegistrationFlowError) {
+                pendingSessionData =
+                        pendingSessionData.copy(currentSession = exception.registrationFlowResponse.session)
+                                .also { pendingSessionStore.savePendingSessionData(it) }
+                val flowResponse = exception.registrationFlowResponse
+                val missingStages = flowResponse.toFlowResult().missingStages
+
+                val flowsWithStages = flowResponse.flows?.mapNotNull { it.stages }?.map { flow ->
+                    flow.mapNotNull { type -> missingStages.findStageForType(type) }
+                } ?: emptyList()
+
+                flowsWithStages
+            } else {
+                emptyList()
+            }
+        }
+        return emptyList()
+    }
+
+    //Added to support few registration flows
+    private fun List<Stage>.findStageForType(type: String): Stage? = when (type) {
+        LoginFlowTypes.RECAPTCHA      -> firstOrNull { it is Stage.ReCaptcha }
+        LoginFlowTypes.DUMMY          -> firstOrNull { it is Stage.Dummy }
+        LoginFlowTypes.TERMS          -> firstOrNull { it is Stage.Terms }
+        LoginFlowTypes.EMAIL_IDENTITY -> firstOrNull { it is Stage.Email }
+        LoginFlowTypes.MSISDN         -> firstOrNull { it is Stage.Msisdn }
+        else                          -> firstOrNull { (it as? Stage.Other)?.type == type }
+    }
 }
\ No newline at end of file