diff --git a/app/src/main/java/com/futo/circles/core/Constants.kt b/app/src/main/java/com/futo/circles/core/Constants.kt
index 7ca9158d64f02ed9cdb6cde4c15e1f9b165e8200..372f118349b31dedfb36d5fa873f299973a2d5a0 100644
--- a/app/src/main/java/com/futo/circles/core/Constants.kt
+++ b/app/src/main/java/com/futo/circles/core/Constants.kt
@@ -1,4 +1,11 @@
-package com.futo.circles.utils
+package com.futo.circles.core
 
 const val GROUP_TAG = "social.kombucha.group"
-const val DEFAULT_USER_PREFIX = "@notices:"
\ No newline at end of file
+const val DEFAULT_USER_PREFIX = "@notices:"
+
+
+const val DEFAULT_ERROR_MESSAGE = "Something went wrong"
+const val AUTH_EXCEPTION_REASON_KEY = "reason"
+
+const val PENDING_SESSION_PROPERTY_NAME = "pendingSessionData"
+const val CURRENT_SESSION_PROPERTY_NAME = "currentSession"
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/core/ErrorParser.kt b/app/src/main/java/com/futo/circles/core/ErrorParser.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8f945aff12ef47d138689169e9d966c8b32ea9d5
--- /dev/null
+++ b/app/src/main/java/com/futo/circles/core/ErrorParser.kt
@@ -0,0 +1,26 @@
+package com.futo.circles.core
+
+import org.json.JSONObject
+import org.matrix.android.sdk.api.failure.Failure
+import retrofit2.HttpException
+
+object ErrorParser {
+
+
+    fun getErrorMessage(t: Throwable): String =
+        handleErrorBodyException(t) ?: handleServerException(t) ?: DEFAULT_ERROR_MESSAGE
+
+
+    private fun handleErrorBodyException(t: Throwable): String? =
+        (t as? HttpException)?.response()?.errorBody()?.string()?.let {
+            try {
+                JSONObject(it).getString(AUTH_EXCEPTION_REASON_KEY)
+            } catch (e: Exception) {
+                null
+            }
+        }
+
+    private fun handleServerException(t: Throwable): String? =
+        (t as? Failure.ServerError)?.error?.message ?: t.message
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt
index 59aa786296ce9ebb441b41fef08e9f2c3bfabc48..50931f79a04c896ed432f4e917b96f6a5ecb0c8b 100644
--- a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt
+++ b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt
@@ -1,4 +1,4 @@
-package com.futo.circles.utils
+package com.futo.circles.core
 
 fun <T : Any> T.getPrivateProperty(variableName: String): Any? {
     return javaClass.getDeclaredField(variableName).let { field ->
diff --git a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt
index 037a1c64a83b0a4ec2b35dd243793be5c0a25749..f32b7633eb3a4836783012af4678b0e476dcdf44 100644
--- a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt
+++ b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt
@@ -2,9 +2,9 @@ package com.futo.circles.extensions
 
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.LiveData
+import com.futo.circles.core.ErrorParser
 import com.futo.circles.core.HasLoadingState
 import com.futo.circles.core.SingleEventLiveData
-import org.matrix.android.sdk.api.failure.Failure
 
 fun <T> SingleEventLiveData<Response<T>>.observeResponse(
     hasLoadingState: HasLoadingState,
@@ -35,8 +35,7 @@ suspend fun <T> createResult(block: suspend () -> T): Response<T> {
     return try {
         Response.Success(block())
     } catch (t: Throwable) {
-        val message = (t as? Failure.ServerError)?.error?.message ?: t.message
-        Response.Error(message ?: "Something went wrong")
+        Response.Error(ErrorParser.getErrorMessage(t))
     }
 }
 
diff --git a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt
index c15128010fa5d318253834a8b377345ba4550ed0..839ebb5f0fb12c298869f3138a07cad14a9bcf3a 100644
--- a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt
+++ b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt
@@ -1,8 +1,10 @@
 package com.futo.circles.extensions
 
-import com.futo.circles.utils.getPrivateProperty
+import com.futo.circles.core.CURRENT_SESSION_PROPERTY_NAME
+import com.futo.circles.core.PENDING_SESSION_PROPERTY_NAME
+import com.futo.circles.core.getPrivateProperty
 import org.matrix.android.sdk.api.auth.registration.RegistrationWizard
 
 fun RegistrationWizard.getPendingSignUpSessionId() =
-    getPrivateProperty("pendingSessionData")
-        ?.getPrivateProperty("currentSession")?.toString() ?: ""
\ No newline at end of file
+    getPrivateProperty(PENDING_SESSION_PROPERTY_NAME)
+        ?.getPrivateProperty(CURRENT_SESSION_PROPERTY_NAME)?.toString() ?: ""
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt
index 38ae86c6c05cf90cb397e64c88f8b7c8d30c2632..5b41d4ef105f5847208a122d1cf42c0f14ba6b4b 100644
--- a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt
+++ b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt
@@ -4,7 +4,7 @@ import android.net.Uri
 import com.futo.circles.extensions.createResult
 import com.futo.circles.model.UserListItem
 import com.futo.circles.provider.MatrixSessionProvider
-import com.futo.circles.utils.GROUP_TAG
+import com.futo.circles.core.GROUP_TAG
 import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
 import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
 import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
diff --git a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt
index a8fd123bb8c85b0728c0f5c061c898bee54faf68..0baed56b3ff56307986e15f618bfe359568b246b 100644
--- a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt
+++ b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt
@@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel
 import androidx.lifecycle.map
 import com.futo.circles.extensions.toGroupsList
 import com.futo.circles.provider.MatrixSessionProvider
-import com.futo.circles.utils.GROUP_TAG
+import com.futo.circles.core.GROUP_TAG
 import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
 
 
diff --git a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt
index 4a6a9959ef8ad805f9ada1d851891988ea5e74d2..48ba04c96d25020599beef7a451a9ca6f2c31f35 100644
--- a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt
+++ b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt
@@ -7,7 +7,7 @@ import com.futo.circles.model.InviteMemberListItem
 import com.futo.circles.model.NoResultsItem
 import com.futo.circles.model.UserListItem
 import com.futo.circles.provider.MatrixSessionProvider
-import com.futo.circles.utils.DEFAULT_USER_PREFIX
+import com.futo.circles.core.DEFAULT_USER_PREFIX
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.*
 import org.matrix.android.sdk.api.session.user.model.User