diff --git a/app/views/messages/overview.php b/app/views/messages/overview.php
index 6ece39466b780d5c61bb10cd73c1612003f22d7a..6e39e0d9a202da1b0d20d9c75255181ccca4c5e8 100644
--- a/app/views/messages/overview.php
+++ b/app/views/messages/overview.php
@@ -81,7 +81,7 @@
             </tr>
             <? endif ?>
             <tr id="reloader" class="more">
-                <td colspan="7"><?= Assets::img("ajax_indicator_small.gif") ?></td>
+                <td colspan="7"></td>
             </tr>
         </tbody>
     </table>
diff --git a/public/assets/images/loading-indicator.svg b/public/assets/images/loading-indicator.svg
new file mode 100644
index 0000000000000000000000000000000000000000..94113e09b520ee9b73b492b7875d0d51b138f2d8
--- /dev/null
+++ b/public/assets/images/loading-indicator.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;}
+	.st1{fill:#28497C;}
+	.st2{fill:#EBEBEC; display: none;}
+</style>
+<rect y="0" class="st0" width="64" height="64"/>
+	<path class="st1" d="M32,4C16.5,4,4,16.5,4,32h8.3c0-10.9,8.8-19.7,19.7-19.6c10.9,0,19.7,8.8,19.6,19.7c0,10.9-8.8,19.6-19.7,19.6
+	V60c15.5,0,28-12.5,28-28S47.5,4,32,4z">
+		<animateTransform attributeName="transform" type="rotate" from="0 32 32" to="360 32 32" dur="5s" repeatCount="indefinite" />
+	</path>
+	<path class="st1" d="M42.5,32c0-5.8-4.7-10.5-10.5-10.5c-5.8,0-10.5,4.7-10.5,10.5c0,5.8,4.7,10.5,10.5,10.5
+	C37.8,42.6,42.5,37.8,42.5,32C42.5,32,42.5,32,42.5,32z"/>
+	<path class="st2" d="M42.5,32L42.5,32c0,5.8-4.7,10.5-10.5,10.5c-5.8,0-10.5-4.7-10.5-10.5c0-5.8,4.7-10.5,10.5-10.5c0,0,0,0,0,0
+	v-9.2h0c-10.9,0-19.7,8.8-19.7,19.7S21.1,51.7,32,51.7c10.9,0,19.7-8.8,19.7-19.7H42.5z">
+			<animateTransform attributeName="transform" type="rotate" from="360 32 32" to="0 32 32" dur="4s" repeatCount="indefinite" />
+	</path>
+</svg>
diff --git a/resources/assets/javascripts/bootstrap/application.js b/resources/assets/javascripts/bootstrap/application.js
index 5dd746fdf8f3b05e5838a63c7cb9216e8afd6c0b..633062c40d8a139750fab8109803deaad0f983bf 100644
--- a/resources/assets/javascripts/bootstrap/application.js
+++ b/resources/assets/javascripts/bootstrap/application.js
@@ -74,9 +74,6 @@ STUDIP.ready(function() {
  * application wide setup
  * ------------------------------------------------------------------------ */
 STUDIP.domReady(function () {
-    // AJAX Indicator
-    STUDIP.ajax_indicator = true;
-
     STUDIP.study_area_selection.initialize();
 
     if (document.createElement('textarea').style.resize === undefined) {
diff --git a/resources/assets/javascripts/bootstrap/files.js b/resources/assets/javascripts/bootstrap/files.js
index 2f0c172667d61e9f05c29726c2dda1faab2b6d63..72a2a6e63e08e504e7ab2a22665a6cb761869836 100644
--- a/resources/assets/javascripts/bootstrap/files.js
+++ b/resources/assets/javascripts/bootstrap/files.js
@@ -2,7 +2,7 @@ function searchMoreFiles (button) {
     var table = $(button).closest('table');
     var loading = $('<div class="loading" style="padding: 10px">').html(
         $('<img>')
-            .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+            .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
             .css('width', '24')
             .css('height', '24')
     );
diff --git a/resources/assets/javascripts/bootstrap/members.js b/resources/assets/javascripts/bootstrap/members.js
index b6a519146c3f3c9d62d2d1255a3fdea253a8cff4..ff689bcd2bf4826ed33edccf6dc50badf9e752d5 100644
--- a/resources/assets/javascripts/bootstrap/members.js
+++ b/resources/assets/javascripts/bootstrap/members.js
@@ -9,7 +9,7 @@ STUDIP.domReady(() => {
                 $('<img>').attr({
                     width: 32,
                     height: 32,
-                    src: STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg'
+                    src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg'
                 })
             );
 
diff --git a/resources/assets/javascripts/bootstrap/statusgroups.js b/resources/assets/javascripts/bootstrap/statusgroups.js
index c79bb324e3a3c86e4beb8432cd461d754276a65c..3ec865b6f72450a79468d38097903ff147e3d1fe 100644
--- a/resources/assets/javascripts/bootstrap/statusgroups.js
+++ b/resources/assets/javascripts/bootstrap/statusgroups.js
@@ -12,7 +12,7 @@ STUDIP.ready(function() {
                 $('<img>').attr({
                     width: 32,
                     height: 32,
-                    src: STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg'
+                    src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg'
                 })
             );
 
diff --git a/resources/assets/javascripts/bootstrap/subcourses.js b/resources/assets/javascripts/bootstrap/subcourses.js
index cf777da12ab969dab95293da8f208ce5801faa54..dd4e1f71b04f65cdc0e93a2269f77ddd98933964 100644
--- a/resources/assets/javascripts/bootstrap/subcourses.js
+++ b/resources/assets/javascripts/bootstrap/subcourses.js
@@ -38,7 +38,7 @@ $(document).on('click', '.toggle-subcourses', function(event) {
                 $('<div class="loading" style="padding: 10px">')
                     .html(
                         $('<img>')
-                            .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                            .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                             .css('width', '24')
                             .css('height', '24')
                     )
diff --git a/resources/assets/javascripts/lib/admission.js b/resources/assets/javascripts/lib/admission.js
index dd4642239d518eefe3826a67079faf1e46dbdcec..307fb15473458f8c48d9365cc8f8229a1bcca378 100644
--- a/resources/assets/javascripts/lib/admission.js
+++ b/resources/assets/javascripts/lib/admission.js
@@ -23,7 +23,7 @@ const Admission = {
         var loading = $gettext('Wird geladen');
         $('#instcourses').empty();
         $('<img/>', {
-            src: STUDIP.ASSETS_URL + 'images/ajax_indicator_small.gif'
+            src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg'
         }).appendTo('#instcourses');
         $('#instcourses').append(loading);
         $('#instcourses').load(targetUrl, data);
diff --git a/resources/assets/javascripts/lib/course_wizard.js b/resources/assets/javascripts/lib/course_wizard.js
index 87e65707e5a16b757af62e9a8706612f1d1343c1..be01ee1369228c453f9c2e23d1afbf98abb471d9 100644
--- a/resources/assets/javascripts/lib/course_wizard.js
+++ b/resources/assets/javascripts/lib/course_wizard.js
@@ -188,7 +188,7 @@ const CourseWizard = {
                     target.children('ul').append(
                         $('<li class="tree-loading">').html(
                             $('<img>')
-                                .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                                .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                 .css('width', '16')
                                 .css('height', '16')
                         )
@@ -237,7 +237,7 @@ const CourseWizard = {
                         .parent()
                         .append(
                             $('<img>')
-                                .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                                .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                 .attr('id', 'sem-tree-search-loading')
                                 .css('width', '16')
                                 .css('height', '16')
@@ -542,7 +542,7 @@ const CourseWizard = {
                 left: pos.left
             });
         var loading = $('<img>')
-            .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+            .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
             .css({
                 width: 32,
                 height: 32,
diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js
index 1a1945a0ecd31d249f7fad7045ee61c4b11f2be9..c511847b6b4f0a8a5bdaef7d91e1f6159b67e48c 100644
--- a/resources/assets/javascripts/lib/fullcalendar.js
+++ b/resources/assets/javascripts/lib/fullcalendar.js
@@ -521,7 +521,7 @@ class Fullcalendar
                     if (!$('#loading-spinner').length) {
                         jQuery('#layout_content').append(
                             $('<div id="loading-spinner" style="position: absolute; top: calc(50% - 55px); left: calc(50% + 135px); z-index: 9001;">').html(
-                                $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                                $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                     .css({
                                         width: 64,
                                         height: 64
diff --git a/resources/assets/javascripts/lib/resources.js b/resources/assets/javascripts/lib/resources.js
index 36fb3d7f6ae5098a65b5ae968bf2ed63030fce87..ac182a9f9e1fad72aec41e5dab066416387f5b17 100644
--- a/resources/assets/javascripts/lib/resources.js
+++ b/resources/assets/javascripts/lib/resources.js
@@ -737,7 +737,7 @@ class Resources
                 if (!$('#loading-spinner').length) {
                     jQuery('#layout_content').append(
                         $('<div id="loading-spinner" style="position: absolute; top: calc(50% - 55px); left: calc(50% + 135px); z-index: 9001;">').html(
-                            $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                            $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                 .css({
                                     width: 64,
                                     height: 64
diff --git a/resources/assets/javascripts/lib/smiley_picker.js b/resources/assets/javascripts/lib/smiley_picker.js
index 8fd85ca6a2298383b7413f11bf73166b5a1111c2..21d8bc23ba7d73815e51e52221fb76401457a8fc 100644
--- a/resources/assets/javascripts/lib/smiley_picker.js
+++ b/resources/assets/javascripts/lib/smiley_picker.js
@@ -37,7 +37,7 @@ function loadURL(url, callback) {
             var that = this,
                 src = this.src,
                 image = new Image();
-            this.src = STUDIP.ASSETS_URL + 'images/ajax_indicator_small.gif';
+            this.src = STUDIP.ASSETS_URL + 'images/loading-indicator.gif';
 
             image.onload = image.onerror = function() {
                 that.src = src;
diff --git a/resources/assets/javascripts/mvv_course_wizard.js b/resources/assets/javascripts/mvv_course_wizard.js
index 63822f562cd04a0818fcd3359df58d745dc24d75..d182f34dc1783a564898df1bbe17c5aad2e65424 100644
--- a/resources/assets/javascripts/mvv_course_wizard.js
+++ b/resources/assets/javascripts/mvv_course_wizard.js
@@ -24,7 +24,7 @@ STUDIP.MVV.CourseWizard = {
                     target.children('ul').append(
                         $('<li class="tree-loading">').html(
                             $('<img>')
-                                .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                                .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                 .css('width', '16')
                                 .css('height', '16')
                         )
@@ -83,7 +83,7 @@ STUDIP.MVV.CourseWizard = {
                         .parent()
                         .append(
                             $('<img>')
-                                .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+                                .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
                                 .attr('id', 'lvgroup-tree-search-loading')
                                 .css('width', '16')
                                 .css('height', '16')
@@ -260,7 +260,7 @@ STUDIP.MVV.CourseWizard = {
                 left: pos.left
             });
         var loading = $('<img>')
-            .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg')
+            .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg')
             .css({
                 width: 32,
                 height: 32,
diff --git a/resources/assets/stylesheets/scss/admin.scss b/resources/assets/stylesheets/scss/admin.scss
index bd147e580b9d535bc4c114c121793544d46bf6c6..26f1369a2d8b2d1559857a0a19fa61291800c0c2 100644
--- a/resources/assets/stylesheets/scss/admin.scss
+++ b/resources/assets/stylesheets/scss/admin.scss
@@ -148,7 +148,7 @@ fieldset.attribute_table {
         }
 
         &.ajaxing {
-            background-image: url("#{$image-path}/ajax_indicator_small.gif");
+            background-image: url("#{$image-path}/loading-indicator.svg");
         }
     }
 }
diff --git a/resources/assets/stylesheets/scss/ajax.scss b/resources/assets/stylesheets/scss/ajax.scss
index 19adf7db70d66d7fac7306d253b185c3baf8a1ae..053395fa01ae4168fae6adac7c0982e6d423557b 100644
--- a/resources/assets/stylesheets/scss/ajax.scss
+++ b/resources/assets/stylesheets/scss/ajax.scss
@@ -20,7 +20,7 @@
     position: relative;
 
     .notification {
-        background: rgba(255, 255, 255, 0.5) url("#{$image-path}/ajax_indicator_small.gif") center center no-repeat;
+        background: rgba(255, 255, 255, 0.5) url("#{$image-path}/loading-indicator.svg") center center no-repeat;
         border: 1px solid #ccc;
         border-radius: 8px;
         display: inline-block;
@@ -33,7 +33,7 @@
 }
 
 .ajaxing {
-    background: url("#{$image-path}/ajax_indicator_small.gif") center no-repeat;
+    background: url("#{$image-path}/loading-indicator.svg") center no-repeat;
     display: inline-block;
     @include size(16px, 16px);
     @include hide-text();
diff --git a/resources/assets/stylesheets/scss/globalsearch.scss b/resources/assets/stylesheets/scss/globalsearch.scss
index 5fc1d53239f9b93fcda30245dac5487ff30e29fa..61aa9d9722eecbc6e9a50d864e40a26823d99270 100644
--- a/resources/assets/stylesheets/scss/globalsearch.scss
+++ b/resources/assets/stylesheets/scss/globalsearch.scss
@@ -122,7 +122,7 @@
         display: none;
         text-align: center;
 
-        background-image: url("#{$image-path}/ajax-indicator-black.svg");
+        background-image: url("#{$image-path}/loading-indicator.svg");
         background-position: center bottom;
         background-repeat: no-repeat;
         background-size: $icon-size;
diff --git a/resources/assets/stylesheets/scss/installer.scss b/resources/assets/stylesheets/scss/installer.scss
index 9268b9c9cfffc113f02fb3da34ebeb68835bde61..9a72993b7cbee1b9b209f1a4ca918b6d76ee995b 100644
--- a/resources/assets/stylesheets/scss/installer.scss
+++ b/resources/assets/stylesheets/scss/installer.scss
@@ -135,7 +135,7 @@
                 background-size: 16px;
             }
             dt.requesting {
-                background: url('#{$image-path}/ajax-indicator-black.svg') no-repeat top 3px right;
+                background: url('#{$image-path}/loading-indicator.svg') no-repeat top 3px right;
                 background-size: 16px;
             }
 
diff --git a/resources/assets/stylesheets/scss/progress_indicator.scss b/resources/assets/stylesheets/scss/progress_indicator.scss
index 0f78c4c2931c1892d3462cf650facf33ed2eb462..3346d661aaf138ff809236eb502c4f5f2bddbc67 100644
--- a/resources/assets/stylesheets/scss/progress_indicator.scss
+++ b/resources/assets/stylesheets/scss/progress_indicator.scss
@@ -5,7 +5,7 @@
 
     .progress-indicator {
         width: 100%;
-        background-image: url("#{$image-path}/ajax-indicator-black.svg");
+        background-image: url("#{$image-path}/loading-indicator.svg");
         background-repeat: no-repeat;
         background-position: center;
     }
@@ -26,4 +26,4 @@
             display: block;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/resources/assets/stylesheets/scss/search.scss b/resources/assets/stylesheets/scss/search.scss
index 8d6b37046de05f62308c38cc7a8891bdca82a797..8ba202a08fe835eaaa4ca1f743334a6493002170 100644
--- a/resources/assets/stylesheets/scss/search.scss
+++ b/resources/assets/stylesheets/scss/search.scss
@@ -10,7 +10,7 @@ label.inactive-settings-category {
         display: none;
         text-align: center;
 
-        background-image: url("#{$image-path}/ajax-indicator-black.svg");
+        background-image: url("#{$image-path}/loading-indicator.svg");
         background-position: center bottom;
         background-repeat: no-repeat;
         background-size: $icon-size;
diff --git a/resources/assets/stylesheets/scss/smileys.scss b/resources/assets/stylesheets/scss/smileys.scss
index 1621b47e5d1b29b43c13cf20130052961117ca4d..e6bc47c39849770c3125c0a1faa1e0654f678d08 100644
--- a/resources/assets/stylesheets/scss/smileys.scss
+++ b/resources/assets/stylesheets/scss/smileys.scss
@@ -88,7 +88,7 @@
     }
 
     &.ajax {
-        background-image: url("#{$image-path}/ajax_indicator_small.gif");
+        background-image: url("#{$image-path}/loading-indicator.svg");
     }
 }
 
diff --git a/resources/assets/stylesheets/scss/studip-overlay.scss b/resources/assets/stylesheets/scss/studip-overlay.scss
index a48bc72a571cf5c8a37ab5e35795ee48c342d7ca..d7dbb928da2a944c387da73c7524ae2e386df86d 100644
--- a/resources/assets/stylesheets/scss/studip-overlay.scss
+++ b/resources/assets/stylesheets/scss/studip-overlay.scss
@@ -26,14 +26,10 @@
         // browsers (except for some old android versions that we can neglect).
         // Thus said, if the loading animation looks ugly - update your
         // browser ffs!
-        background-image: url("#{$image-path}/ajax_indicator_small.gif");
-        background-image: none, url("#{$image-path}/ajax-indicator-white.svg");
+        background-image: url("#{$image-path}/loading-indicator.svg");
         background-position: center;
         background-repeat: no-repeat;
-    }
-
-    &-ajax.modal-overlay-dark {
-        background-image: none, url("#{$image-path}/ajax-indicator-black.svg");
+        background-size: 32px;
     }
 
     // Progress
diff --git a/resources/vue/components/BlubberGlobalstream.vue b/resources/vue/components/BlubberGlobalstream.vue
index 548e1fd57ba95e6d2cf17895265c72568cf4296c..2236e1fba966c84d8e084763642bb54cf1d7181c 100644
--- a/resources/vue/components/BlubberGlobalstream.vue
+++ b/resources/vue/components/BlubberGlobalstream.vue
@@ -4,7 +4,7 @@
             <blubber-public-composer></blubber-public-composer>
             <ol class="postings" aria-live="polite">
                 <li class="more" v-if="streamData.more_up">
-                    <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img>
+                    <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img>
                 </li>
 
                 <li :class="blubber.class"
@@ -25,7 +25,7 @@
                 </li>
 
                 <li class="more" v-if="more_down">
-                    <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img>
+                    <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img>
                 </li>
             </ol>
         </div>
diff --git a/resources/vue/components/BlubberThread.vue b/resources/vue/components/BlubberThread.vue
index a3a5d7027a4af9d8563802935ceb60007b168724..b5d287d4aaf83342a8d63d7be9743b233a6acfd4 100644
--- a/resources/vue/components/BlubberThread.vue
+++ b/resources/vue/components/BlubberThread.vue
@@ -34,7 +34,7 @@
                 <ol class="comments" aria-live="polite">
 
                     <li class="more" v-if="threadData.more_up">
-                        <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img>
+                        <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img>
                     </li>
 
                     <li :class="comment.class"
@@ -62,7 +62,7 @@
                     </li>
 
                     <li class="more" v-if="threadData.more_down">
-                        <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img>
+                        <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img>
                     </li>
 
                 </ol>
diff --git a/resources/vue/components/BlubberThreadWidget.vue b/resources/vue/components/BlubberThreadWidget.vue
index 0606eb88972099f442b2475729521248bb18ce10..cfa6cb18b7cc3c15bcf474e18d95f9b520fe48fe 100644
--- a/resources/vue/components/BlubberThreadWidget.vue
+++ b/resources/vue/components/BlubberThreadWidget.vue
@@ -21,7 +21,7 @@
                     </a>
                 </li>
                 <li class="more" v-if="display_more_down" key="more">
-                    <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img>
+                    <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img>
                 </li>
         </transition-group>
     </div>
diff --git a/resources/vue/components/StudipProgressIndicator.vue b/resources/vue/components/StudipProgressIndicator.vue
index 8266ca2ae03deeb0bfdb97e39d1b8b74ef6a9515..b6f7ee23537f6553d2cc30751dd64f3800c44838 100644
--- a/resources/vue/components/StudipProgressIndicator.vue
+++ b/resources/vue/components/StudipProgressIndicator.vue
@@ -1,7 +1,7 @@
 <template>
     <div class="progress-indicator-wrapper">
         <div class="progress-indicator" :style="indicatorStyle"></div>
-        <p v-if="description !== ''" class="progress-indicator-description">
+        <p v-if="hasDescription" class="progress-indicator-description">
             {{ description }}
         </p>
         <p v-else class="progress-indicator-description-default">
@@ -18,18 +18,21 @@ export default {
             type: String,
             required: false
         },
-        width: {
+        size: {
             type: Number,
             default: 32
         }
     },
     computed: {
         indicatorStyle() {
-            let style = 'background-size: ' + this.width + 'px;';
-            style += 'height: ' + this.width + 'px;';
-
-            return style;
+            return {
+                backgroundSize: `${this.size}px`,
+                height: `${this.size}px`
+            };
+        },
+        hasDescription () {
+            return this.description.trim().length > 0;
         }
     }
 }
-</script>
\ No newline at end of file
+</script>