diff --git a/smash/web/models.py b/smash/web/models.py
index fef1d4a2937df8b4794d00f75d3543e3bc1aa602..31442d511f17a5bda478a3a6451fd9d63c3626a2 100644
--- a/smash/web/models.py
+++ b/smash/web/models.py
@@ -67,11 +67,13 @@ class Subject(models.Model):
 
     dead = models.BooleanField(
         verbose_name='Dead',
-        default= False
+        default= False,
+        editable=False
     )
     resigned = models.BooleanField(
         verbose_name='Resigned',
-        default= False
+        default= False,
+        editable=False
     )
     default_appointment_location = models.CharField(max_length=1,
         choices=LOCATION_CHOICES,
@@ -467,9 +469,14 @@ class Appointment(models.Model):
     )#Potentially redundant; but can be used to manually adjust appointment's length
     is_finished = models.BooleanField(
         verbose_name='Has the appointment ended?',
-        default=False
+        default=False,
+        editable=False
     )
 
+    def mark_as_finished(self):
+        self.is_finished = True
+        self.save()
+
     def datetime_until(self):
         if self.datetime_when is None:
             return None
diff --git a/smash/web/templates/appointments/edit.html b/smash/web/templates/appointments/edit.html
index 0b53364f4d057564b06d7272fabc28ec384ca9f0..35d60f3c2867725aba99acce1025b07806e50934 100644
--- a/smash/web/templates/appointments/edit.html
+++ b/smash/web/templates/appointments/edit.html
@@ -53,6 +53,9 @@
           {% endif %}
 				</div>
 			{% endfor %}
+      <div class="col-md-6">
+        <a href="{% url 'web.views.appointment_mark' id 'finished' %}" class="btn btn-warning btn-block">Mark as finished</a>
+      </div>
 		</div><!-- /.box-body -->
 
 		<div class="box-footer">
diff --git a/smash/web/urls.py b/smash/web/urls.py
index 4a71af8d219c17bfc38fc7546edd2bc090122305..00b572e42be0a4b82f7ac23039bde642267fb952 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -22,6 +22,7 @@ urlpatterns = [
     url(r'appointments/add/(?P<id>\d+)$', views.appointment_add, name='web.views.appointment_add'),
     url(r'appointments/edit/(?P<id>\d+)$', views.appointment_edit, name='web.views.appointment_edit'),
     url(r'appointments/edit_datetime/(?P<id>\d+)$', views.appointment_edit_datetime, name='web.views.appointment_edit_datetime'),
+    url(r'appointments/mark/(?P<id>\d+)/(?P<as_what>[A-z]+)$', views.appointment_mark, name='web.views.appointment_mark'),
 
     url(r'visits$', views.visits, name='web.views.visits'),
     url(r'visits/details/(?P<id>\d+)$', views.visit_details, name='web.views.visit_details'),
diff --git a/smash/web/views.py b/smash/web/views.py
index 56792a160a5143aa3d0b49b8a4d85d012bc5194f..6a9740caeb17ab9ffb4e36197bb2542332fcaf88 100644
--- a/smash/web/views.py
+++ b/smash/web/views.py
@@ -173,6 +173,12 @@ def subject_mark(request, id, as_what):
 		who.mark_as_rejected()
 	return redirect(subject_edit, id=id)
 
+def appointment_mark(request, id, as_what):
+	appointment = get_object_or_404(Appointment, id=id)
+	if as_what == 'finished':
+		appointment.mark_as_finished()
+	return redirect(visit_details, id=appointment.visit.id)
+
 def subject_visit_details(request, id):
 	locsubject = get_object_or_404(Subject, id=id)
 	visits = locsubject.visit_set.all()
@@ -350,7 +356,7 @@ def appointment_edit(request, id):
 			return redirect(appointments)
 	else:
 		form = AppointmentEditForm(instance=the_appointment)
-	return wrap_response(request, 'appointments/edit.html', {'form': form})
+	return wrap_response(request, 'appointments/edit.html', {'form': form, 'id':id})
 
 
 def appointment_edit_datetime(request, id):