diff --git a/app/corpora/cqi/models/corpora.py b/app/corpora/cqi/models/corpora.py
index 0f67e19579a154d627709dc63b3019e5cd7c8417..8c28279426b3eb3a1c364034b02df164ae303ee3 100644
--- a/app/corpora/cqi/models/corpora.py
+++ b/app/corpora/cqi/models/corpora.py
@@ -61,6 +61,9 @@ class Corpus(Model):
                         subattr_value
         return lookups
 
+    def drop(self):
+        return self.client.api.corpus_drop_corpus(self.attrs['api_name'])
+
     def query(self, query, subcorpus_name='Results'):
         return self.client.api.cqp_query(self.attrs['api_name'],
                                          subcorpus_name, query)
diff --git a/app/corpora/views.py b/app/corpora/views.py
index 1a2204991606e258d9337b4dc16ef0ca067f907a..dc4d4ade4b34e3095e0b282416c287dcb1ef05d8 100644
--- a/app/corpora/views.py
+++ b/app/corpora/views.py
@@ -1,4 +1,4 @@
-from flask import (abort, current_app, flash, redirect, request,
+from flask import (abort, current_app, flash, make_response, redirect, request,
                    render_template, url_for, send_from_directory)
 from flask_login import current_user, login_required
 from threading import Thread
@@ -99,8 +99,8 @@ def add_corpus_file(corpus_id):
         for corpus_file in corpus.files:
             if filename == corpus_file.filename:
                 flash('File already registered to this corpus.')
-                return redirect(url_for('corpora.add_corpus_file',
-                                        corpus_id=corpus_id))
+                return make_response({'redirect_url': url_for('corpora.corpus', corpus_id=corpus.id)}, 500)
+                # return redirect(url_for('corpora.add_corpus_file', corpus_id=corpus_id))
         # Save the file
         dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id))
         file.save(os.path.join(current_app.config['NOPAQUE_STORAGE'],
@@ -125,7 +125,10 @@ def add_corpus_file(corpus_id):
                               corpus_file.id))
         thread.start()
         flash('Corpus file added!')
-        return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
+        return make_response(
+            {'redirect_url': url_for('corpora.corpus', corpus_id=corpus.id)},
+            201)
+        # return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
     return render_template('corpora/add_corpus_file.html.j2',
                            add_corpus_file_form=add_corpus_file_form,
                            corpus=corpus, title='Add corpus file')
diff --git a/app/models.py b/app/models.py
index f8e6fbc61dea53a83ca2883efcbe7e79f219f569..d4044e573c99c15d286711c1e1c3fa2d5fc261e2 100644
--- a/app/models.py
+++ b/app/models.py
@@ -426,6 +426,24 @@ class CorpusFile(db.Model):
         self.corpus.status = 'unprepared'
         db.session.commit()
 
+    def to_dict(self):
+        return {'id': self.id,
+                'address': self.address,
+                'author': self.author,
+                'booktitle': self.booktitle,
+                'chapter': self.chapter,
+                'dir': self.dir,
+                'editor': self.editor,
+                'filename': self.filename,
+                'institution': self.institution,
+                'journal': self.journal,
+                'pages': self.pages,
+                'publisher': self.publisher,
+                'publishing_year': self.publishing_year,
+                'school': self.school,
+                'title': self.title,
+                'corpus_id': self.corpus_id}
+
 
 class Corpus(db.Model):
     """
@@ -455,6 +473,7 @@ class Corpus(db.Model):
         return {'id': self.id,
                 'creation_date': self.creation_date.timestamp(),
                 'description': self.description,
+                'files': [file.to_dict() for file in self.files],
                 'status': self.status,
                 'title': self.title,
                 'user_id': self.user_id}
diff --git a/app/static/css/nopaque.css b/app/static/css/nopaque.css
index 17e8803b3c4c0aca2b292f9c263e0c27e09d873b..24027647a79a3ce60683456374a2069f00b8d4a2 100644
--- a/app/static/css/nopaque.css
+++ b/app/static/css/nopaque.css
@@ -68,12 +68,19 @@ indicator will show up how the column is sorted right now.; */
   z-index: 999; /* tmp fix */
 }
 
+.show-if-only-child:not(:only-child) {
+  display: none !important;
+}
+
 /* class for expert view */
 .expert-view {
   cursor: pointer;
 }
 
 /* styles for resource lists */
+.analyse-link[href=""] {
+  display: none;
+}
 .service[data-service]:before {
   content: "help";
 }
diff --git a/app/static/js/nopaque.lists.js b/app/static/js/nopaque.lists.js
index 009a5bf9ec3743a8ee95cfd817ebab426b2deef5..73be18ec7bc67ade0be4dacc4a942ebc8b2ce9ab 100644
--- a/app/static/js/nopaque.lists.js
+++ b/app/static/js/nopaque.lists.js
@@ -56,7 +56,7 @@ RessourceList.dataMapper = {
   corpus: corpus => ({creation_date: corpus.creation_date,
                       description: corpus.description,
                       id: corpus.id,
-                      "analyse-link": `/corpora/${corpus.id}/analyse`,
+                      "analyse-link": ["analysing", "prepared", "start analysis"].includes(corpus.status) ? `/corpora/${corpus.id}/analyse` : "",
                       "edit-link": `/corpora/${corpus.id}`,
                       status: corpus.status,
                       title: corpus.title}),
diff --git a/app/templates/corpora/add_corpus_file.html.j2 b/app/templates/corpora/add_corpus_file.html.j2
index f792f0fe76201010ca5b77f6daa7823598a56485..beb46ba388d41114ed2b29252b58d3237cb42422 100644
--- a/app/templates/corpora/add_corpus_file.html.j2
+++ b/app/templates/corpora/add_corpus_file.html.j2
@@ -8,7 +8,7 @@
 </div>
 
 <div class="col s12 m8">
-  <form method="POST" enctype="multipart/form-data">
+  <form class="nopaque-job-form" data-progress-modal="progress-modal">
     {{ add_corpus_file_form.hidden_tag() }}
     <div class="card">
       <div class="card-content">
@@ -103,4 +103,16 @@
     </ul>
   </form>
 </div>
+
+<div id="progress-modal" class="modal">
+  <div class="modal-content">
+    <h4><i class="material-icons prefix">file_upload</i> Uploading files for <span class="title"></span></h4>
+    <div class="progress">
+      <div class="determinate" style="width: 0%"></div>
+    </div>
+  </div>
+  <div class="modal-footer">
+    <a href="#!" class="modal-close waves-effect waves-light btn red abort-request">Cancel</a>
+  </div>
+</div>
 {% endblock %}
diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2
index dd14e7e18044e24c39fdb6fdb7864f5ccf6a8e1b..fcf181c57d5994b86d3537843acda0e699b4bad6 100644
--- a/app/templates/corpora/corpus.html.j2
+++ b/app/templates/corpora/corpus.html.j2
@@ -35,9 +35,7 @@
     </div>
     <div class="card-action right-align">
       <a href="{{ url_for('corpora.analyse_corpus', corpus_id=corpus.id) }}" class="btn disabled hide waves-effect waves-light" id="analyze"><i class="material-icons left">search</i>Analyze</a>
-      {% if corpus.files[0] is defined %}
-      <a href="{{ url_for('corpora.prepare_corpus', corpus_id=corpus.id) }}" class="btn disabled hide waves-effect waves-light" id="build"><i class="material-icons left">build</i>Build</a>
-      {% endif %}
+      <a href="{{ url_for('corpora.prepare_corpus', corpus_id=corpus.id) }}" class="btn disabled hide waves-effect waves-light" id="compile"><i class="material-icons left">merge_type</i>Compile</a>
       <a data-target="delete-corpus-modal" class="btn modal-trigger red waves-effect waves-light"><i class="material-icons left">delete</i>Delete</a>
     </div>
   </div>
@@ -49,6 +47,7 @@
   <div class="card">
     <div class="card-content" style="overflow: hidden;">
       <span class="card-title">Files</span>
+
       <table class="highlight responsive-table">
         <thead>
           <tr>
@@ -60,6 +59,12 @@
           </tr>
         </thead>
         <tbody>
+          <tr class="show-if-only-child">
+            <td colspan="5">
+              <span class="card-title"><i class="material-icons left">book</i>Nothing here...</span>
+              <p>Corpus is empty. Add texts using the option below.</p>
+            </td>
+          </tr>
           {% for file in corpus.files %}
           <tr>
             <td>{{ file.filename }}</td>
@@ -114,6 +119,7 @@
     constructor(corpusId, foreignCorpusFlag) {
       this.corpusId = corpusId;
       this.foreignCorpusFlag = foreignCorpusFlag;
+
       if (this.foreignCorpusFlag) {
         nopaque.foreignCorporaSubscribers.push(this);
       } else {
@@ -124,14 +130,11 @@
     _init() {
       let corpus;
 
-      if (this.foreignCorpusFlag) {
-        corpus = nopaque.foreignCorpora[this.corpusId];
-      } else {
-        corpus = nopaque.corpora[this.corpusId];
-      }
+      corpus = (this.foreignCorpusFlag ? nopaque.foreignCorpora[this.corpusId]
+                                       : nopaque.corpora[this.corpusId]);
 
       // Status
-      this.setStatus(corpus.status);
+      this.setStatus(corpus.status, corpus.files.length);
     }
 
     _update(patch) {
@@ -160,7 +163,9 @@
     }
 
     setStatus(status) {
-      let analyzeElement, buildElement, progressIndicatorElement, statusElement;
+      let analyzeElement, compileElement, numFiles, progressIndicatorElement, statusElement;
+
+      numFiles = (this.foreignCorpusFlag ? nopaque.foreignCorpora[this.corpusId] : nopaque.corpora[this.corpusId]).files.length;
 
       progressIndicatorElement = document.getElementById("progress-indicator");
       if (["queued", "running", "start analysis", "stop analysis"].includes(status)) {
@@ -180,11 +185,11 @@
         analyzeElement.classList.add("disabled", "hide");
       }
 
-      buildElement = document.getElementById("build");
-      if (status === 'unprepared') {
-        buildElement.classList.remove("disabled", "hide");
+      compileElement = document.getElementById("compile");
+      if (status === "unprepared" && numFiles > 0) {
+        compileElement.classList.remove("disabled", "hide");
       } else {
-        buildElement.classList.add("disabled", "hide");
+        compileElement.classList.add("disabled", "hide");
       }
     }
   }
diff --git a/app/templates/jobs/job.html.j2 b/app/templates/jobs/job.html.j2
index bd0e7086c9ca69d844e89a8b251ac332b4e4d3be..5b45d19a2b4e212f133792fef3c0c2c672fe0a11 100644
--- a/app/templates/jobs/job.html.j2
+++ b/app/templates/jobs/job.html.j2
@@ -146,6 +146,7 @@
     constructor(jobId, foreignJobFlag) {
       this.jobId = jobId;
       this.foreignJobFlag = foreignJobFlag;
+
       if (this.foreignJobFlag) {
         nopaque.foreignJobsSubscribers.push(this);
       } else {
@@ -156,11 +157,8 @@
     _init() {
       let job;
 
-      if (this.foreignJobFlag) {
-        job = nopaque.foreignJobs[this.jobId];
-      } else {
-        job = nopaque.jobs[this.jobId];
-      }
+      job = (this.foreignJobFlag ? nopaque.foreignJobs[this.jobId]
+                                 : nopaque.jobs[this.jobId]);
 
       // End date
       this.setEndDate(job.end_date);