diff --git a/app/main/forms.py b/app/main/forms.py
index a3ff4a639373ee4dc648a7cadffb52f327c20bac..e26c34da547c44ab198c7b1c9579159d855f8e68 100644
--- a/app/main/forms.py
+++ b/app/main/forms.py
@@ -1,28 +1,28 @@
 from flask_wtf import FlaskForm
-from wtforms import (MultipleFileField, StringField, SubmitField,
+from wtforms import (FileField, StringField, SubmitField,
                      ValidationError, IntegerField, SelectField)
-from wtforms.validators import DataRequired, Length, NumberRange
-
-
-class CreateCorpusForm(FlaskForm):
-    description = StringField('Description',
-                              validators=[DataRequired(), Length(1, 64)])
-    submit = SubmitField('Create corpus')
-    title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
+from wtforms.validators import DataRequired, Length
 
 
 class AddCorpusFileForm(FlaskForm):
     author = StringField('Author', validators=[DataRequired(), Length(1, 64)])
-    files = MultipleFileField('Files', validators=[DataRequired()])
-    publishing_year = IntegerField('Publishing year', validators=[DataRequired()])
+    file = FileField('File', validators=[DataRequired()])
+    publishing_year = IntegerField('Publishing year',
+                                   validators=[DataRequired()])
     submit = SubmitField()
     title = StringField('Title', validators=[DataRequired(), Length(1, 64)])
 
-    def validate_files(form, field):
-        for file in field.data:
-            if not file.filename.lower().endswith('.vrt'):
-                raise ValidationError('File does not have an approved '
-                                      'extension: .vrt')
+    def validate_file(form, field):
+        if not field.data.filename.lower().endswith('.vrt'):
+            raise ValidationError('File does not have an approved extension: '
+                                  '.vrt')
+
+
+class CreateCorpusForm(FlaskForm):
+    description = StringField('Description',
+                              validators=[DataRequired(), Length(1, 64)])
+    submit = SubmitField('Create corpus')
+    title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
 
 
 class QueryForm(FlaskForm):
diff --git a/app/main/views.py b/app/main/views.py
index e2202423930e4517fd128408e1de279f1e6270f2..1806fe28a6af5e274493559e1a6e77b3fe93c82d 100644
--- a/app/main/views.py
+++ b/app/main/views.py
@@ -17,7 +17,7 @@ def index():
     return render_template('main/index.html.j2', title='Opaque')
 
 
-@main.route('/corpora/<int:corpus_id>')
+@main.route('/corpora/<int:corpus_id>', methods=['GET', 'POST'])
 @login_required
 def corpus(corpus_id):
     corpus = Corpus.query.get_or_404(corpus_id)
@@ -26,6 +26,29 @@ def corpus(corpus_id):
         abort(403)
     add_corpus_file_form = AddCorpusFileForm()
     if add_corpus_file_form.validate_on_submit():
+        filename = secure_filename(add_corpus_file_form.file.data.filename)
+        for corpus_file in corpus.files:
+            if filename == corpus_file.filename:
+                flash('File already registered to this corpus.')
+                return redirect(url_for('main.corpus', corpus_id=corpus_id))
+        # Gather information to create new corpus file database entry
+        author = add_corpus_file_form.author.data
+        dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id))
+        file = add_corpus_file_form.file.data
+        publishing_year = add_corpus_file_form.publishing_year.data
+        title = add_corpus_file_form.title.data
+        # Save the file
+        file_dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
+                                dir)
+        file.save(os.path.join(file_dir, filename))
+        corpus_file = CorpusFile(author=author,
+                                 corpus=corpus,
+                                 dir=dir,
+                                 filename=filename,
+                                 publishing_year=publishing_year,
+                                 title=title)
+        db.session.add(corpus_file)
+        db.session.commit()
         flash('Corpus file added!')
         return redirect(url_for('main.corpus', corpus_id=corpus_id))
     return render_template('main/corpora/corpus.html.j2',
diff --git a/app/templates/main/corpora/corpus.html.j2 b/app/templates/main/corpora/corpus.html.j2
index 5896af60245c232a3ef8d7c166e40cf8c9ac8853..df3025483cb93ba3eec241e5423e6fc0f239f31c 100644
--- a/app/templates/main/corpora/corpus.html.j2
+++ b/app/templates/main/corpora/corpus.html.j2
@@ -69,7 +69,7 @@
             <td>{{ file.publishing_year }}</td>
             <td class="right-align">
               <a class="waves-effect waves-light btn-small"><i class="material-icons">edit</i></a>
-              <a class="waves-effect waves-light btn-small"><i class="material-icons">file_download</i></a>
+              <a class="waves-effect waves-light btn-small" href="{{ url_for('main.corpus_download', corpus_file_id=file.id, corpus_id=corpus.id) }}"><i class="material-icons">file_download</i></a>
               <a class="waves-effect waves-light btn-small red"><i class="material-icons">delete</i></a>
             </td>
           </tr>
@@ -87,7 +87,7 @@
     <form method="POST" enctype="multipart/form-data">
       {{ add_corpus_file_form.hidden_tag() }}
       <div class="row">
-        <div class="col s12 m8">
+        <div class="col s12 m4">
           <div class="input-field">
             <i class="material-icons prefix">person</i>
             {{ add_corpus_file_form.author(data_length='64') }}
@@ -107,16 +107,26 @@
             {% endfor %}
           </div>
         </div>
+        <div class="col s12 m4">
+          <div class="input-field">
+            <i class="material-icons prefix">access_time</i>
+            {{ add_corpus_file_form.publishing_year() }}
+            {{ add_corpus_file_form.publishing_year.label }}
+            {% for error in add_corpus_file_form.publishing_year.errors %}
+              <span class="helper-text red-text">{{ error }}</span>
+            {% endfor %}
+          </div>
+        </div>
         <div class="col s12">
           <div class="file-field input-field">
             <div class="btn">
-              <span>{{ add_corpus_file_form.files.label.text }}</span>
-              {{ add_corpus_file_form.files(accept='.vrt') }}
+              <span>{{ add_corpus_file_form.file.label.text }}</span>
+              {{ add_corpus_file_form.file(accept='.vrt') }}
             </div>
             <div class="file-path-wrapper">
               <input class="file-path validate" type="text">
             </div>
-            {% for error in add_corpus_file_form.files.errors %}
+            {% for error in add_corpus_file_form.file.errors %}
               <span class="helper-text red-text">{{ error }}</span>
             {% endfor %}
           </div>
diff --git a/app/utils.py b/app/utils.py
index e68d068262fde893d3f164b55a7fec3f1bb887b0..2abecee22d5052707ef3d7e93a3f677d939467ee 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -63,5 +63,7 @@ def background_delete_corpus(app, corpus_id):
         logger.warning('Called by delete_thread.')
         logger.warning('Corpus id is: {}.'.format(corpus_id))
         corpus = Corpus.query.filter_by(id=corpus_id).first()
-        logger.warning('Corpus object is: {}'.format(corpus))
+        for corpus_file in corpus.files:
+            db.session.delete(corpus_file)
+            logger.warning('Corpus object is: {}'.format(corpus))
         corpus.delete_corpus()