diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 205d949e140aec319aad5823771b7b103eec7445..b3bf5524f4b068bb0e42bf482be3cdb6ac3774ba 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,8 +15,8 @@ before_script:
 
 Build:
   script:
-    - docker build --pull -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
-    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+    - docker build --pull -t $CI_REGISTRY_IMAGE:tmp .
+    - docker push $CI_REGISTRY_IMAGE:tmp
   stage: build
   tags:
   - docker
@@ -25,8 +25,8 @@ Push development:
   only:
     - development
   script:
-    - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
-    - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:development
+    - docker pull $CI_REGISTRY_IMAGE:tmp
+    - docker tag $CI_REGISTRY_IMAGE:tmp $CI_REGISTRY_IMAGE:development
     - docker push $CI_REGISTRY_IMAGE:development
   stage: push
   tags:
@@ -36,8 +36,8 @@ Push latest:
   only:
     - master
   script:
-    - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
-    - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
+    - docker pull $CI_REGISTRY_IMAGE:tmp
+    - docker tag $CI_REGISTRY_IMAGE:tmp $CI_REGISTRY_IMAGE:latest
     - docker push $CI_REGISTRY_IMAGE:latest
   stage: push
   tags:
@@ -47,8 +47,8 @@ Push tag:
   only:
     - tags
   script:
-    - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
-    - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
+    - docker pull $CI_REGISTRY_IMAGE:tmp
+    - docker tag $CI_REGISTRY_IMAGE:tmp $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
     - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
   stage: push
   tags:
diff --git a/app/corpora/views.py b/app/corpora/views.py
index aef61908b3a7d4224f5a7ef8912b012e21bfe347..e7862b17c2ceb25198056fe4f615c195ffd50b05 100644
--- a/app/corpora/views.py
+++ b/app/corpora/views.py
@@ -19,7 +19,7 @@ def add_corpus():
     if add_corpus_form.validate_on_submit():
         corpus = Corpus(creator=current_user,
                         description=add_corpus_form.description.data,
-                        title=add_corpus_form.title.data)
+                        status='unprepared', title=add_corpus_form.title.data)
         db.session.add(corpus)
         db.session.commit()
         dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
@@ -166,6 +166,7 @@ def edit_corpus_file(corpus_id, corpus_file_id):
         corpus_file.author = edit_corpus_file_form.author.data
         corpus_file.publishing_year = edit_corpus_file_form.publishing_year.data
         corpus_file.title = edit_corpus_file_form.title.data
+        corpus_file.insert_metadata()
         db.session.commit()
         flash('Corpus file edited!')
         return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
diff --git a/app/models.py b/app/models.py
index 77892c02b1420f4fd40d7ca2e9e83e2273d7acde..4987fb4c36f79dbc73489a4eeacb4fabded765bf 100644
--- a/app/models.py
+++ b/app/models.py
@@ -2,6 +2,7 @@ from flask import current_app
 from flask_login import UserMixin, AnonymousUserMixin
 from itsdangerous import BadSignature, TimedJSONWebSignatureSerializer
 from werkzeug.security import generate_password_hash, check_password_hash
+import xml.etree.ElementTree as ET
 from . import db
 from . import login_manager
 from datetime import datetime
@@ -410,6 +411,18 @@ class CorpusFile(db.Model):
     title = db.Column(db.String(64))
     corpus_id = db.Column(db.Integer, db.ForeignKey('corpora.id'))
 
+    def __init__(self, **kwargs):
+        super(CorpusFile, self).__init__(**kwargs)
+        file = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
+                            self.dir,
+                            self.filename)
+        element_tree = ET.parse(file)
+        text_node = element_tree.find('text')
+        text_node.set('author', self.author)
+        text_node.set('publishing_year', str(self.publishing_year))
+        text_node.set('title', self.title)
+        element_tree.write(file)
+
     def delete(self):
         logger = logging.getLogger(__name__)
         logger.warning('Called CorpusFile.delete')
@@ -434,18 +447,15 @@ class Corpus(db.Model):
     id = db.Column(db.Integer, primary_key=True)
     creation_date = db.Column(db.DateTime(), default=datetime.utcnow)
     description = db.Column(db.String(255))
+    status = db.Column(db.String(16))
     title = db.Column(db.String(32))
     user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
-    status = db.Column(db.String(16))
     # Relationships
     files = db.relationship('CorpusFile',
                             backref='corpus',
                             lazy='dynamic',
                             cascade='save-update, merge, delete')
 
-    def __init__(self, **kwargs):
-        super(Corpus, self).__init__(**kwargs)
-
     def __repr__(self):
         """
         String representation of the corpus. For human readability.
@@ -482,6 +492,9 @@ class Corpus(db.Model):
         db.session.delete(self)
         db.session.commit()
 
+    def prepare(self):
+        pass
+
 
 '''
 ' Flask-Login is told to use the application’s custom anonymous user by setting
diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2
index fbcf321bb89f49df48762fbbf31fbe0528154908..bf04d74dff4c5572e5ffc319deaf9732f697cdd2 100644
--- a/app/templates/corpora/corpus.html.j2
+++ b/app/templates/corpora/corpus.html.j2
@@ -4,6 +4,7 @@
 <div class="col s12 m4">
   <h3 id="title">{{ corpus.title }}</h3>
   <p id="description">{{ corpus.description }}</p>
+  <a class="waves-effect waves-light btn">{{ corpus.status }}</a>
 </div>
 
 <div class="col s12 m8">
@@ -18,13 +19,10 @@
           </div>
         </div>
       </div>
-      <span class="card-title">Actions</span>
-      <a href="{{ url_for('corpora.corpus_analysis', corpus_id=corpus.id) }}" class="waves-effect waves-light btn">
-        <i class="material-icons left">help</i>Analyse
-      </a>
-      <a data-target="delete-corpus-modal" class="waves-effect waves-light btn red modal-trigger right">
-        <i class="material-icons left">delete</i>Delete Corpus
-      </a>
+    </div>
+    <div class="card-action right-align">
+      <a href="{{ url_for('corpora.corpus_analysis', corpus_id=corpus.id) }}" class="waves-effect waves-light btn"><i class="material-icons left">help</i>Analyse</a>
+      <a data-target="delete-corpus-modal" class="waves-effect waves-light btn red modal-trigger"><i class="material-icons left">delete</i>Delete Corpus</a>
     </div>
   </div>
 </div>
diff --git a/app/templates/jobs/job.html.j2 b/app/templates/jobs/job.html.j2
index 512dc7345b97f35b120b8ee036ff8d0c3a7d2a69..30a722e8559c585c4b9340b9ff3423144e0d8d7d 100644
--- a/app/templates/jobs/job.html.j2
+++ b/app/templates/jobs/job.html.j2
@@ -79,7 +79,7 @@
       if (timestamp === null) {
         end_date = "N.a.";
       } else {
-        end_date = new Date(timestamp * 1000).toLocaleString();
+        end_date = new Date(timestamp * 1000).toLocaleString("en-US");
       }
       document.getElementById("end-date").value = end_date;
       M.updateTextFields();
@@ -118,23 +118,6 @@
   <h3 id="title">{{ job.title }}</h3>
   <p id="description">{{ job.description }}</p>
   <a class="waves-effect waves-light btn" id="status"></a>
-  <h2>Actions:</h2>
-  <!-- Confirm deletion of job with modal dialogue
-  Modal Trigger-->
-  <a href="#modal-confirm-delete" class="waves-effect waves-light btn red modal-trigger"><i class="material-icons left">delete</i>Delete Job</a>
-  <a href="#" class="waves-effect waves-light btn"><i class="material-icons left">settings</i>Export Parameters</a>
-  <!-- Modal Strucutre -->
-  <div id="modal-confirm-delete" class="modal">
-    <div class="modal-content">
-      <h4>Confirm deletion</h4>
-        <p>Do you really want to delete the job {{job.title}}?
-        All iput and output files will be permanently deleted.</p>
-    </div>
-    <div class="modal-footer">
-      <a href="{{ url_for('jobs.delete_job', job_id=job.id) }}" class="modal-close waves-effect waves-green btn red"><i class="material-icons left">delete</i>Delete Job</a>
-      <a href="#!" class="modal-close waves-effect waves-green btn cancel">Cancel</a>
-    </div>
-  </div>
 </div>
 
 
@@ -195,6 +178,10 @@
         </div>
       </div>
     </div>
+    <div class="card-action right-align">
+      <a href="#" class="waves-effect waves-light btn"><i class="material-icons left">settings</i>Export Parameters</a>
+      <a data-target="delete-job-modal" class="waves-effect waves-light btn red modal-trigger"><i class="material-icons left">delete</i>Delete Job</a>
+    </div>
   </div>
 </div>
 
@@ -228,4 +215,15 @@
   </div>
 </div>
 
+<!-- Modals -->
+<div id="delete-job-modal" class="modal">
+  <div class="modal-content">
+    <h4>Confirm deletion</h4>
+      <p>Do you really want to delete the job {{job.title}}? All associated files will be permanently deleted.</p>
+  </div>
+  <div class="modal-footer">
+    <a href="#!" class="modal-close waves-effect waves-green btn cancel">Cancel</a>
+    <a class="modal-close waves-effect waves-green btn red" href="{{ url_for('jobs.delete_job', job_id=job.id) }}">Confirm<i class="material-icons right">send</i></a>
+  </div>
+</div>
 {% endblock %}
diff --git a/app/utils.py b/app/utils.py
index 7c1d9638dc5ce66607d3b7b7a0572d172b8165bd..6eae9d54dde739708d8a53edba6d9ffeecb72d44 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -1,4 +1,4 @@
-from .models import Job, User, Corpus
+from .models import Job, User, Corpus, CorpusFile
 from . import db
 import logging
 
@@ -64,3 +64,8 @@ def background_delete_corpus(app, corpus_id):
         logger.warning('Corpus id is: {}.'.format(corpus_id))
         corpus = Corpus.query.filter_by(id=corpus_id).first()
         corpus.delete()
+
+
+def background_prepare_corpus_file(app, corpus_file_id):
+    with app.app_context():
+        corpus_file = CorpusFile.query.filter_by(id=corpus_file_id).first()