diff --git a/web/modals/threads/settings/thread-settings-general-tab.css b/web/modals/threads/settings/thread-settings-general-tab.css
--- a/web/modals/threads/settings/thread-settings-general-tab.css
+++ b/web/modals/threads/settings/thread-settings-general-tab.css
@@ -29,4 +29,5 @@
 
 .save_button {
   width: 100%;
+  min-height: 46px;
 }
diff --git a/web/modals/threads/settings/thread-settings-general-tab.react.js b/web/modals/threads/settings/thread-settings-general-tab.react.js
--- a/web/modals/threads/settings/thread-settings-general-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-general-tab.react.js
@@ -21,6 +21,7 @@
 import { firstLine } from 'lib/utils/string-utils';
 
 import Button from '../../../components/button.react';
+import LoadingIndicator from '../../../loading-indicator.react';
 import Input from '../../input.react';
 import { useModalContext } from '../../modal-provider.react';
 import ColorSelector from '../color-selector.react';
@@ -139,6 +140,13 @@
     threadPermissions.EDIT_THREAD_NAME,
   );
 
+  let loginButtonContent;
+  if (threadSettingsOperationInProgress) {
+    loginButtonContent = <LoadingIndicator status="loading" />;
+  } else {
+    loginButtonContent = 'Save';
+  }
+
   return (
     <form method="POST">
       <div>
@@ -183,7 +191,7 @@
         disabled={threadSettingsOperationInProgress || !changeQueued}
         className={css.save_button}
       >
-        Save
+        {loginButtonContent}
       </Button>
     </form>
   );