diff --git a/matrix-sdk-android-rx/src/main/java/im/vector/matrix/rx/RxRoom.kt b/matrix-sdk-android-rx/src/main/java/im/vector/matrix/rx/RxRoom.kt
index 5cc9d1fc00..20f794860e 100644
--- a/matrix-sdk-android-rx/src/main/java/im/vector/matrix/rx/RxRoom.kt
+++ b/matrix-sdk-android-rx/src/main/java/im/vector/matrix/rx/RxRoom.kt
@@ -101,6 +101,14 @@ class RxRoom(private val room: Room) {
     fun invite(userId: String, reason: String? = null): Completable = completableBuilder<Unit> {
         room.invite(userId, reason, it)
     }
+
+    fun updateTopic(topic: String): Completable = completableBuilder<Unit> {
+        room.updateTopic(topic, it)
+    }
+
+    fun updateName(name: String): Completable = completableBuilder<Unit> {
+        room.updateName(name, it)
+    }
 }
 
 fun Room.rx(): RxRoom {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt
index 827ce50e13..91a193fba7 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt
@@ -31,6 +31,11 @@ interface StateService {
      */
     fun updateTopic(topic: String, callback: MatrixCallback<Unit>): Cancelable
 
+    /**
+     * Update the name of the room
+     */
+    fun updateName(name: String, callback: MatrixCallback<Unit>): Cancelable
+
     fun sendStateEvent(eventType: String, stateKey: String?, body: JsonDict, callback: MatrixCallback<Unit>): Cancelable
 
     fun getStateEvent(eventType: String, stateKey: QueryStringValue = QueryStringValue.NoCondition): Event?
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt
index 6646f08c2d..ed077d76b9 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt
@@ -84,4 +84,13 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private
                 stateKey = null
         )
     }
+
+    override fun updateName(name: String, callback: MatrixCallback<Unit>): Cancelable {
+        return sendStateEvent(
+                eventType = EventType.STATE_ROOM_NAME,
+                body = mapOf("name" to name),
+                callback = callback,
+                stateKey = null
+        )
+    }
 }
diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt
index 12af2be689..bb97409e74 100644
--- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt
+++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt
@@ -31,6 +31,7 @@ import im.vector.riotx.core.extensions.cleanup
 import im.vector.riotx.core.extensions.configureWith
 import im.vector.riotx.core.extensions.exhaustive
 import im.vector.riotx.core.platform.VectorBaseFragment
+import im.vector.riotx.core.utils.toast
 import im.vector.riotx.features.home.AvatarRenderer
 import im.vector.riotx.features.roomprofile.RoomProfileArgs
 import kotlinx.android.synthetic.main.fragment_room_setting_generic.*
@@ -61,10 +62,15 @@ class RoomSettingsFragment @Inject constructor(
         viewModel.observeViewEvents {
             when (it) {
                 is RoomSettingsViewEvents.Failure -> showFailure(it.throwable)
+                is RoomSettingsViewEvents.Success    -> showSuccess()
             }.exhaustive
         }
     }
 
+    private fun showSuccess() {
+        activity?.toast(R.string.room_settings_save_success)
+    }
+
     override fun onDestroyView() {
         recyclerView.cleanup()
         super.onDestroyView()
diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewEvents.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewEvents.kt
index 4856a935a8..c30a5ff9c9 100644
--- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewEvents.kt
+++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewEvents.kt
@@ -24,4 +24,5 @@ import im.vector.riotx.core.platform.VectorViewEvents
  */
 sealed class RoomSettingsViewEvents : VectorViewEvents {
     data class Failure(val throwable: Throwable) : RoomSettingsViewEvents()
+    object Success : RoomSettingsViewEvents()
 }
diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt
index d5283a240b..deca6858e2 100644
--- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt
+++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt
@@ -26,6 +26,8 @@ import im.vector.matrix.android.api.session.Session
 import im.vector.matrix.rx.rx
 import im.vector.matrix.rx.unwrap
 import im.vector.riotx.core.platform.VectorViewModel
+import io.reactivex.Completable
+import io.reactivex.Observable
 
 class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState: RoomSettingsViewState,
                                                         private val session: Session)
@@ -89,28 +91,53 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState:
                 summary?.topic != state.newTopic
     }
 
-    private fun saveSettings() {
+    private fun saveSettings() = withState { state ->
+        postLoading(true)
+
+        val operationList = mutableListOf<Completable>()
+
+        val summary = state.roomSummary.invoke()
+
+        if (summary?.displayName != state.newName) {
+            operationList.add(room.rx().updateName(state.newName ?: ""))
+        }
+        if (summary?.topic != state.newTopic) {
+            operationList.add(room.rx().updateTopic(state.newTopic ?: ""))
+        }
+
+        Observable
+                .fromIterable(operationList)
+                .flatMapCompletable { it }
+                .subscribe(
+                        {
+                            postLoading(false)
+                            _viewEvents.post(RoomSettingsViewEvents.Success)
+                        },
+                        {
+                            postLoading(false)
+                            _viewEvents.post(RoomSettingsViewEvents.Failure(it))
+                        }
+                )
     }
 
     private fun handleEnableEncryption() {
-        setState {
-            copy(isLoading = true)
-        }
+        postLoading(true)
 
         room.enableEncryption(callback = object : MatrixCallback<Unit> {
             override fun onFailure(failure: Throwable) {
-                setState {
-                    copy(isLoading = false)
-                }
-
+                postLoading(false)
                 _viewEvents.post(RoomSettingsViewEvents.Failure(failure))
             }
 
             override fun onSuccess(data: Unit) {
-                setState {
-                    copy(isLoading = false)
-                }
+                postLoading(false)
             }
         })
     }
+
+    private fun postLoading(isLoading: Boolean) {
+        setState {
+            copy(isLoading = isLoading)
+        }
+    }
 }
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index 98d8c3323e..3b3af55d1f 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -2499,5 +2499,6 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming
     <!-- Room Settings -->
     <string name="room_settings_name_hint">Room Name</string>
     <string name="room_settings_topic_hint">Topic</string>
+    <string name="room_settings_save_success">You changed room settings successfully</string>
 
 </resources>