diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml
index 78b5f3fb88b2f9577da6103efa2f4d3db78d37f3..6d6a5d2a813dd360d4707f4f3e66a94eeb756511 100644
--- a/.haml-lint_todo.yml
+++ b/.haml-lint_todo.yml
@@ -329,7 +329,6 @@ linters:
       - 'ee/app/views/errors/kerberos_denied.html.haml'
       - 'ee/app/views/groups/ee/_settings_nav.html.haml'
       - 'ee/app/views/groups/group_members/_ldap_sync.html.haml'
-      - 'ee/app/views/groups/group_members/_sync_button.html.haml'
       - 'ee/app/views/groups/hooks/edit.html.haml'
       - 'ee/app/views/groups/ldap_group_links/index.html.haml'
       - 'ee/app/views/layouts/nav/ee/admin/_new_monitoring_sidebar.html.haml'
@@ -362,7 +361,6 @@ linters:
       - 'ee/app/views/projects/services/gitlab_slack_application/_help.html.haml'
       - 'ee/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml'
       - 'ee/app/views/projects/settings/slacks/edit.html.haml'
-      - 'ee/app/views/shared/_mirror_update_button.html.haml'
       - 'ee/app/views/shared/epic/_search_bar.html.haml'
       - 'ee/app/views/shared/issuable/_approvals.html.haml'
       - 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml'
diff --git a/app/assets/stylesheets/fontawesome_custom.scss b/app/assets/stylesheets/fontawesome_custom.scss
index b5fd314698ebbfc8b317f09035dcb0c56faf5296..7b1953be69d75fb1156ac6c413a02811f5148f3f 100644
--- a/app/assets/stylesheets/fontawesome_custom.scss
+++ b/app/assets/stylesheets/fontawesome_custom.scss
@@ -113,10 +113,6 @@
   content: '\f0da';
 }
 
-.fa-refresh::before {
-  content: '\f021';
-}
-
 .fa-chevron-up::before {
   content: '\f077';
 }
diff --git a/app/assets/stylesheets/framework/spinner.scss b/app/assets/stylesheets/framework/spinner.scss
index a74aeb9f2207576f12bea2f32e07b0c54782cf6e..581b7c37b5f81b90c2d02a95f5ad6937e7b36f85 100644
--- a/app/assets/stylesheets/framework/spinner.scss
+++ b/app/assets/stylesheets/framework/spinner.scss
@@ -56,3 +56,7 @@
     vertical-align: text-bottom;
   }
 }
+
+.spin {
+  animation: spinner-rotate 2s infinite linear;
+}
diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml
index ba41243389b362788071bea8d85f710c20ba1059..5b074ff8a28a1d23a1d85ac46a55e185571bd593 100644
--- a/app/views/projects/mirrors/_mirror_repos.html.haml
+++ b/app/views/projects/mirrors/_mirror_repos.html.haml
@@ -74,4 +74,4 @@
                       - if mirror.ssh_key_auth?
                         = clipboard_button(text: mirror.ssh_public_key, class: 'gl-button btn btn-default', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button')
                       = render 'shared/remote_mirror_update_button', remote_mirror: mirror
-                    %button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.gl-button.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove')
+                    %button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.btn-icon.gl-button.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove')
diff --git a/app/views/shared/_remote_mirror_update_button.html.haml b/app/views/shared/_remote_mirror_update_button.html.haml
index 54bd4ba04a091cd5511345241d8d9d51b58e47c9..70b72f74ab39e62bc21ad2a6b2c73180d1638182 100644
--- a/app/views/shared/_remote_mirror_update_button.html.haml
+++ b/app/views/shared/_remote_mirror_update_button.html.haml
@@ -1,6 +1,6 @@
 - if remote_mirror.update_in_progress?
-  %button.btn.disabled{ type: 'button', data: { toggle: 'tooltip', container: 'body', qa_selector: 'updating_button' }, title: _('Updating') }
-    = icon("refresh spin")
+  %button.btn.btn-icon.gl-button.disabled{ type: 'button', data: { toggle: 'tooltip', container: 'body', qa_selector: 'updating_button' }, title: _('Updating') }
+    = sprite_icon("retry", css_class: "spin")
 - elsif remote_mirror.enabled?
-  = link_to update_now_project_mirror_path(@project, sync_remote: true), method: :post, class: "btn qa-update-now-button rspec-update-now-button", data: { toggle: 'tooltip', container: 'body' }, title: _('Update now') do
-    = icon("refresh")
+  = link_to update_now_project_mirror_path(@project, sync_remote: true), method: :post, class: "btn btn-icon gl-button qa-update-now-button rspec-update-now-button", data: { toggle: 'tooltip', container: 'body' }, title: _('Update now') do
+    = sprite_icon("retry")
diff --git a/changelogs/unreleased/mw-replace-fa-refresh-icons.yml b/changelogs/unreleased/mw-replace-fa-refresh-icons.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3d4593cc223f0a41d2560ec38049e6a5d0d19989
--- /dev/null
+++ b/changelogs/unreleased/mw-replace-fa-refresh-icons.yml
@@ -0,0 +1,5 @@
+---
+title: Replace fa-refresh icon with GitLab SVG
+merge_request: 45777
+author:
+type: changed
diff --git a/ee/app/views/groups/group_members/_sync_button.html.haml b/ee/app/views/groups/group_members/_sync_button.html.haml
index 17f957854158ebfa0236ab83e78df996fea956b8..9f28eb27260d64e03931eb6919542b7a52cee18b 100644
--- a/ee/app/views/groups/group_members/_sync_button.html.haml
+++ b/ee/app/views/groups/group_members/_sync_button.html.haml
@@ -1,15 +1,15 @@
 - if @group.ldap_sync_started?
-  %span.btn.disabled
-    = icon("refresh spin")
-    Syncing…
+  %span.btn.gl-button.disabled
+    = sprite_icon("retry", css_class: 'spin gl-mr-2')
+    = _('Syncing…')
 - elsif @group.ldap_sync_pending?
-  %span.btn.disabled
-    = icon("refresh spin")
-    Pending sync…
+  %span.btn.gl-button.disabled
+    = sprite_icon("retry", css_class: 'spin gl-mr-2')
+    = ('Pending sync…')
 - else
-  = link_to sync_group_ldap_path(@group), method: :put, class: 'btn qa-sync-now-button' do
-    = icon("refresh")
-    Sync now
+  = link_to sync_group_ldap_path(@group), method: :put, class: 'btn btn-default gl-button qa-sync-now-button' do
+    = sprite_icon("retry", css_class: "gl-mr-2")
+    = _('Sync now')
 - if @group.ldap_sync_ready? && @group.ldap_sync_last_successful_update_at
   %p.inline.gl-ml-3
-    Successfully synced #{time_ago_with_tooltip(@group.ldap_sync_last_successful_update_at)}.
+    = _('Successfully synced %{synced_timeago}.').html_safe % { synced_timeago: time_ago_with_tooltip(@group.ldap_sync_last_successful_update_at) }
diff --git a/ee/app/views/projects/mirrors/_table_pull_row.html.haml b/ee/app/views/projects/mirrors/_table_pull_row.html.haml
index 75880a8bdf8234acb1f20ccdee87688212c53642..564cd6cd6f17c8fec65e4093f420c9d04a6deb83 100644
--- a/ee/app/views/projects/mirrors/_table_pull_row.html.haml
+++ b/ee/app/views/projects/mirrors/_table_pull_row.html.haml
@@ -21,10 +21,10 @@
       - if ssh_public_key
         = clipboard_button(text: ssh_public_key, class: 'btn btn-default rspec-copy-ssh-public-key', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button')
       - if import_state.mirror_update_due? || import_state.updating_mirror?
-        %button.btn.disabled{ type: 'button', data: { container: 'body', toggle: 'tooltip', qa_selector: 'updating_button' }, title: _('Updating') }= icon("refresh spin")
+        %button.btn.btn-icon.gl-button.disabled{ type: 'button', data: { container: 'body', toggle: 'tooltip', qa_selector: 'updating_button' }, title: _('Updating') }= sprite_icon("retry", css_class: "spin")
       - elsif @project.archived?
-        %button.btn.disabled{ type: 'button', data: { container: 'body', toggle: 'tooltip', qa_selector: 'update_now_button' }, title: _('This Project is currently archived and read-only. Please unarchive the project first if you want to resume Pull mirroring') }= icon("refresh")
+        %button.btn.btn-icon.gl-button.disabled{ type: 'button', data: { container: 'body', toggle: 'tooltip', qa_selector: 'update_now_button' }, title: _('This Project is currently archived and read-only. Please unarchive the project first if you want to resume Pull mirroring') }= sprite_icon("retry")
       - else
-        = link_to update_now_project_mirror_path(@project), method: :post, class: 'btn js-force-update-mirror', data: { container: 'body', toggle: 'tooltip', qa_selector: 'update_now_button' }, title: _('Update now') do
-          = icon("refresh")
-      %button.js-delete-mirror.js-delete-pull-mirror.btn.btn-danger{ type: 'button', data: { toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove')
+        = link_to update_now_project_mirror_path(@project), method: :post, class: 'btn gl-button btn-icon js-force-update-mirror', data: { container: 'body', toggle: 'tooltip', qa_selector: 'update_now_button' }, title: _('Update now') do
+          = sprite_icon("retry")
+      %button.js-delete-mirror.js-delete-pull-mirror.btn.btn-icon.gl-button.btn-danger{ type: 'button', data: { toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove')
diff --git a/ee/app/views/shared/_mirror_update_button.html.haml b/ee/app/views/shared/_mirror_update_button.html.haml
index 2600a5c846f422712ef7296ad9e38f1f17191c78..f42038a944d0f5caa8ab940b67d9d4f14122f5b1 100644
--- a/ee/app/views/shared/_mirror_update_button.html.haml
+++ b/ee/app/views/shared/_mirror_update_button.html.haml
@@ -2,20 +2,20 @@
   .gl-mb-3
     - if @project.import_state.mirror_update_due?
       %span.btn.disabled
-        = icon("refresh spin")
-        Update Scheduled…
+        = sprite_icon('retry', css_class: 'spin')
+        = ('Update Scheduled…')
     - elsif @project.import_state.updating_mirror?
       %span.btn.disabled
-        = icon("refresh spin")
-        Updating…
+        = sprite_icon('retry', css_class: 'spin')
+        = ('Updating…')
     - elsif can?(current_user, :admin_project, @project)
       = link_to update_now_project_mirror_path(@project), method: :post, class: 'btn' do
-        = icon("refresh")
-        Update Now
+        = sprite_icon('retry')
+        = ('Update Now')
     - else
       %span.btn.disabled
-        = icon("refresh")
-        Update Now
+        = sprite_icon('retry')
+        = ('Update Now')
     - if @project.mirror_last_update_succeeded?
       %p.inline.gl-ml-3
-        Successfully updated #{time_ago_with_tooltip(@project.import_state.last_successful_update_at)}.
+        = ('Successfully updated %{last_updated_timeago}.').html_safe % { last_updated_timeago: time_ago_with_tooltip(@project.import_state.last_successful_update_at) }
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 352ccdf4d1e4a5ea51b815be379d95d1ec62fc5e..99c51cd2c5e1b5bca0027c7223ed29c7d25b64ca 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -25558,6 +25558,9 @@ msgstr ""
 msgid "Successfully scheduled a pipeline to run. Go to the %{pipelines_link_start}Pipelines page%{pipelines_link_end} for details."
 msgstr ""
 
+msgid "Successfully synced %{synced_timeago}."
+msgstr ""
+
 msgid "Successfully unblocked"
 msgstr ""
 
@@ -25693,12 +25696,18 @@ msgstr ""
 msgid "Sync information"
 msgstr ""
 
+msgid "Sync now"
+msgstr ""
+
 msgid "Synced"
 msgstr ""
 
 msgid "Synchronization disabled"
 msgstr ""
 
+msgid "Syncing…"
+msgstr ""
+
 msgid "System"
 msgstr ""