diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 55be8df7935f3f2709cdbeeb5443a39004f464b7..3faa878aab104e4c6980795c8cf4d79f6a69001b 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,16 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+Changed
+~~~~~~~
+
+* Make External Link Widget icons clickable
+
+Fixed
+~~~~~
+
+* The progress page for background tasks didn't show all status messages.
+
 `2.10`_ - 2022-06-25
 --------------------
 
diff --git a/aleksis/core/static/js/progress.js b/aleksis/core/static/js/progress.js
index 5fa0213f8466738466158a56ca6e1df50654a811..8a97577e93d276cd62c69ead4c65b448a7631d49 100644
--- a/aleksis/core/static/js/progress.js
+++ b/aleksis/core/static/js/progress.js
@@ -24,25 +24,32 @@ function renderMessageBox(level, text) {
     return '<div class="alert ' + STYLE_CLASSES[level] + '"><p><i class="material-icons iconify left" data-icon="' + ICONS[level] + '"></i>' + text + '</p></div>';
 }
 
+function updateMessages(messages) {
+    const messagesBox = $("#messages");
+
+    // Clear container
+    messagesBox.html("");
+
+    // Render message boxes
+    $.each(messages, function (i, message) {
+        messagesBox.append(renderMessageBox(message[0], message[1]));
+    });
+}
+
 function customProgress(progressBarElement, progressBarMessageElement, progress) {
     setProgress(progress.percent);
 
     if (progress.hasOwnProperty("messages")) {
-        const messagesBox = $("#messages");
-
-        // Clear container
-        messagesBox.html("")
-
-        // Render message boxes
-        $.each(progress.messages, function (i, message) {
-            messagesBox.append(renderMessageBox(message[0], message[1]));
-        })
+        updateMessages(progress.messages);
     }
 }
 
 
-function customSuccess(progressBarElement, progressBarMessageElement) {
+function customSuccess(progressBarElement, progressBarMessageElement, result) {
     setProgress(100);
+    if (result) {
+        updateMessages(result);
+    }
     $("#result-alert").addClass("success");
     $("#result-icon").attr("data-icon", "mdi:check-circle-outline");
     $("#result-text").text(OPTIONS.success);
@@ -54,8 +61,11 @@ function customSuccess(progressBarElement, progressBarMessageElement) {
     }
 }
 
-function customError(progressBarElement, progressBarMessageElement) {
+function customError(progressBarElement, progressBarMessageElement, excMessage) {
     setProgress(100);
+    if (excMessage) {
+        updateMessages([40, excMessage]);
+    }
     $("#result-alert").addClass("error");
     $("#result-icon").attr("data-icon", "mdi:alert-octagon-outline");
     $("#result-text").text(OPTIONS.error);
diff --git a/aleksis/core/templates/core/dashboard_widget/external_link_widget.html b/aleksis/core/templates/core/dashboard_widget/external_link_widget.html
index bfbb5bda23e0e5034425ff745efab7f630119355..4f2a940b7b59b84b3fa03a9a3dbc10a0045cf51e 100644
--- a/aleksis/core/templates/core/dashboard_widget/external_link_widget.html
+++ b/aleksis/core/templates/core/dashboard_widget/external_link_widget.html
@@ -1,6 +1,6 @@
 <div class="card">
         <div class="card-image">
-                <img src="{{ icon_url }}" alt="{{ title }}" />
+                <a href="{{ url }}"><img src="{{ icon_url }}" alt="{{ title }}" /></a>
         </div>
         <div class="card-action">
                 <a href="{{ url }}">{{ title }}</a>
diff --git a/aleksis/core/util/celery_progress.py b/aleksis/core/util/celery_progress.py
index ef42f1692dab60dc9bc88f3c6bba4ce4beef3222..91b5b7168f215da509c71806f137483a422872d3 100644
--- a/aleksis/core/util/celery_progress.py
+++ b/aleksis/core/util/celery_progress.py
@@ -155,7 +155,8 @@ def recorded_task(orig: Optional[Callable] = None, **kwargs) -> Union[Callable,
         @wraps(orig)
         def _inject_recorder(task, *args, **kwargs):
             recorder = ProgressRecorder(task)
-            return orig(*args, **kwargs, recorder=recorder)
+            orig(*args, **kwargs, recorder=recorder)
+            return recorder._messages
 
         # Force bind to True because _inject_recorder needs the Task object
         kwargs["bind"] = True