diff --git a/Makefile b/Makefile
index 3dfea6a7a846f6f297572962aa6f6be986a4cf7b..808b8283bc4305e684c420fec727481b97b469fe 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,8 @@ list:
 	@echo "  phpcs            > Run php code sniffer test suite"
 	@echo "  install_services > install services dependencies (virtualenv)"
 	@echo "  shell_services   > Shell into python services"
+	@echo "  install_tasks    > install tasks dependencies (virtualenv)"
+	@echo "  shell_tasks      > Shell into python tasks"
 	@echo "  create-db        > Create a database for dev only (need token_enabled=0)"
 	@echo "  remove-pgdata    > Remove the anis-next database"
 	@echo ""
@@ -91,6 +93,12 @@ install_services:
 shell_services:
 	@docker-compose exec services bash
 
+install_tasks:
+	@docker run --init -it --rm --user $(UID):$(GID) -v $(CURDIR)/tasks:/project -w /project python:3.8 /bin/bash -c "python3 -m venv venv && source /project/venv/bin/activate && pip install -r requirements.txt"
+
+shell_tasks:
+	@docker-compose exec tasks bash
+
 create-db:
 	@docker-compose exec server sh /mnt/init-keycloak.sh
 	@docker-compose exec server sh /mnt/create-db.sh
diff --git a/client/src/app/instance/search/services/download.service.ts b/client/src/app/instance/search/services/download.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2fa8241df91a05991141027afa35385b51ee01f8
--- /dev/null
+++ b/client/src/app/instance/search/services/download.service.ts
@@ -0,0 +1,13 @@
+import { HttpClient } from "@angular/common/http";
+import { Observable } from "rxjs";
+
+export class DownloadService {
+    constructor(private http: HttpClient) { }
+
+    download(url: string): Observable<Blob> {
+        return this.http.get(url, {
+            reportProgress: true,
+            responseType: 'blob'
+        });
+    }
+}
diff --git a/tasks/requirements.txt b/tasks/requirements.txt
index 8d953796cc671e3342d4a2ea4db9411dff9ca2c6..1bb63938e72440bceb9408c5496f18a608ae2b71 100644
--- a/tasks/requirements.txt
+++ b/tasks/requirements.txt
@@ -1,6 +1,9 @@
 certifi==2021.10.8
 charset-normalizer==2.0.12
+decorator==5.1.1
 idna==3.3
 pika==1.2.0
+py==1.11.0
 requests==2.27.1
+retry==0.9.2
 urllib3==1.26.8
diff --git a/tasks/src/anis_tasks/app.py b/tasks/src/anis_tasks/app.py
index bc365abbf89d34cb85138cfa9e4159e7fa13928d..810e581cecd495254e71148f7545d5561383696b 100644
--- a/tasks/src/anis_tasks/app.py
+++ b/tasks/src/anis_tasks/app.py
@@ -3,10 +3,12 @@ import logging, sys
 
 # Third party imports
 import pika
+from retry import retry
 
 # Local application imports
 from anis_tasks import utils, archive
 
+@retry(pika.exceptions.AMQPConnectionError, delay=5, jitter=(1, 3))
 def run():
     try:
         # Check config variables