diff --git a/web/app/corpora/events.py b/web/app/corpora/events.py
index 616354a921d91c4c784736f06508a78eae77365c..7e0858141dceee13672dfbe3c46393b8b70fdb12 100644
--- a/web/app/corpora/events.py
+++ b/web/app/corpora/events.py
@@ -28,7 +28,15 @@ corpus_analysis_clients = {}
 @socketio_login_required
 def export_corpus(corpus_id):
     # TODO: This should not be get_or_404 here - Socket.IO != HTTP request
-    corpus = Corpus.query.get_or_404(corpus_id)
+    corpus = Corpus.query.get(corpus_id)
+    if corpus is None:
+        response = {'code': 404, 'msg': 'Not found'}
+        socketio.emit('export_corpus', response, room=request.sid)
+        return
+    if corpus.status not in ['prepared', 'start analysis', 'stop analysis']:
+        response = {'code': 412, 'msg': 'Precondition Failed'}
+        socketio.emit('export_corpus', response, room=request.sid)
+        return
     # delete old corpus archive if it exists/has been build before
     if corpus.archive_file is not None and os.path.isfile(corpus.archive_file):
         os.remove(corpus.archive_file)
diff --git a/web/app/static/js/nopaque/displays/CorpusDisplay.js b/web/app/static/js/nopaque/displays/CorpusDisplay.js
index 68a2a11f9ff65ba11de19367a34ceea760a7525e..110646234fde6e53455881a753e41c4e5d5337aa 100644
--- a/web/app/static/js/nopaque/displays/CorpusDisplay.js
+++ b/web/app/static/js/nopaque/displays/CorpusDisplay.js
@@ -79,6 +79,9 @@ class CorpusDisplay extends RessourceDisplay {
       }
     }
     for (let element of this.displayElement.querySelectorAll('.corpus-status')) {this.setElement(element, status);}
+    for (let exportCorpusTriggerElement of this.displayElement.querySelectorAll('.export-corpus-trigger')) {
+      exportCorpusTriggerElement.classList.toggle('disabled', !['prepared', 'start analysis', 'stop analysis'].includes(status));
+    }
     for (let element of this.displayElement.querySelectorAll('.status')) {element.dataset.status = status;}
     for (let element of this.displayElement.querySelectorAll('.status-spinner')) {
       if (['submitted', 'queued', 'running', 'canceling', 'start analysis', 'stop analysis'].includes(status)) {
diff --git a/web/app/templates/corpora/corpus.html.j2 b/web/app/templates/corpora/corpus.html.j2
index cba422086b5dd631dcdcae24a81937da7844d3c8..eabed2c16c9629ff2c7a07b4c11a8413f03d8688 100644
--- a/web/app/templates/corpora/corpus.html.j2
+++ b/web/app/templates/corpora/corpus.html.j2
@@ -72,7 +72,7 @@
         <div class="card-action right-align">
           <a class="analyse-corpus-trigger btn disabled waves-effect waves-light" href="{{ url_for('corpora.analyse_corpus', corpus_id=corpus.id) }}"><i class="material-icons left">search</i>Analyze</a>
           <a class="btn build-corpus-trigger disabled waves-effect waves-light" href="{{ url_for('corpora.prepare_corpus', corpus_id=corpus.id) }}"><i class="material-icons left">build</i>Build</a>
-          <a class="btn export-corpus-trigger waves-effect waves-light"><i class="material-icons left">import_export</i>Export</a>
+          <a class="btn disabled export-corpus-trigger waves-effect waves-light"><i class="material-icons left">import_export</i>Export</a>
           <a class="btn modal-trigger red waves-effect waves-light" data-target="delete-corpus-modal"><i class="material-icons left">delete</i>Delete</a>
         </div>
       </div>