diff --git a/smash/web/admin.py b/smash/web/admin.py
index 39e6b331929e6b9de76c23aab0b9c9c4bea38190..a375578b188739c1300310912e3daab9741c38db 100644
--- a/smash/web/admin.py
+++ b/smash/web/admin.py
@@ -12,7 +12,7 @@ admin.site.register(Subject)
 admin.site.register(Visit)
 admin.site.register(Item)
 admin.site.register(Room)
-admin.site.register(AppType)
+admin.site.register(AppointmentType)
 admin.site.register(Language, LanguageAdmin)
 admin.site.register(Worker)
 admin.site.register(FlyingTeam)
diff --git a/smash/web/models.py b/smash/web/models.py
index bd76a27ea2a10549213fdcee844933e1e5e3f273..e544a95af69b17b93647649084ea0a49f8ab818b 100644
--- a/smash/web/models.py
+++ b/smash/web/models.py
@@ -74,14 +74,16 @@ class Subject(models.Model):
         verbose_name='MPower ID'
     )
     STATUS_CHOICES = (
-        ('INV', 'Invited'),
-        ('OPT', 'Opted out'),
-        ('PAR', 'Participating'),
+        ('NCO', 'Not contacted'),
         ('TST', 'Test group'),
+        ('LEA', 'Level A'),
+        ('LEB', 'Level B'),
+        ('OPT', 'Opted out'),
         ('DEA', 'Dead')
     )
     subjectStatus = models.CharField(max_length=3, choices=STATUS_CHOICES,
-        verbose_name='Status'
+        verbose_name='Status',
+        default='NCO'
     )
     mainPseudonym = models.CharField(max_length=45,
         verbose_name='Pseudonym'
@@ -90,6 +92,15 @@ class Subject(models.Model):
         verbose_name='Comments'
     )
 
+    dateAdded = models.DateField(verbose_name='Added on',
+        auto_now=True
+    )
+
+    referral = models.CharField(max_length=128,
+        null=True,
+        verbose_name='Referred by'
+    )
+
     def __str__(self):
         return "%s %s" % (self.firstName, self.lastName)
 
@@ -106,15 +117,19 @@ class Visit(models.Model):
     )
     visitEnd = models.DateTimeField(
         verbose_name='Visit ends at'
+    ) # Deadline before which all appointments need to be scheduled
+    TYPE_CHOICES = (
+        ('A', 'Level A visit'),
+        ('B', 'Level B visit'),
+        ('O', 'Other')
     )
-    assesmentNo = models.IntegerField(
-        verbose_name='Which assesment'
-    )
-    visitType = models.IntegerField(
-        verbose_name='Type of visit'
+    visitType = models.CharField(max_length=1, choices=TYPE_CHOICES,
+        verbose_name='Visit type',
+        default='O'
     )
     visitFinished = models.BooleanField(
-        verbose_name='Has ended'
+        verbose_name='Has ended',
+        default=False
     )
 
     def __str__(self):
@@ -138,7 +153,7 @@ class Item (models.Model):
 class Room (models.Model):
     possEquipment = models.ManyToManyField(Item,
         verbose_name='On-site equipment',
-        null=True, blank=True
+        blank=True
     )
     owner = models.CharField(max_length=50,
         verbose_name='Owner'
@@ -162,24 +177,20 @@ class Room (models.Model):
     def __str__(self):
         return "%d %s %s" % (self.roomNo, self.address, self.city)
 
-class AppType (models.Model):
-    reqEquipment = models.ManyToManyField(Item,
+class AppointmentType (models.Model):
+    requiredEquipment = models.ManyToManyField(Item,
         verbose_name='Required equipment'
     )
-    followUp = models.ForeignKey('self',
-        verbose_name='Follow-up visit',
-        null=True, blank=True
-    )
-    apCode = models.CharField(max_length=20,
+    code = models.CharField(max_length=20,
         verbose_name='Appointment code'
     )
-    apDescription = models.CharField(max_length=2000,
+    description = models.CharField(max_length=2000,
         verbose_name='Appointment description'
     )
-    apDefaultTime = models.IntegerField(
+    defaultTime = models.IntegerField(
         verbose_name='Default time'
     )
-    apRestTime = models.IntegerField(
+    restTime = models.IntegerField(
         verbose_name='Suggested rest time'
     )
 
@@ -279,7 +290,8 @@ class Avaibility(models.Model):
         verbose_name='Avaible until'
     )
     current = models.BooleanField(
-        verbose_name='Is current?'
+        verbose_name='Is current?',
+        default=True
     )
 
     def __str__(self):
@@ -304,8 +316,13 @@ class Appointment(models.Model):
         verbose_name='Flying team (if applicable)',
         null=True, blank=True
     )
-    appType = models.ForeignKey(AppType,
-        verbose_name='Appointment type'
+    workerAssigned = models.ForeignKey(Worker,
+        verbose_name='Worker conducting the assessment (if applicable)',
+        null=True, blank=True
+    )
+    appointmentType = models.ForeignKey(AppointmentType,
+        verbose_name='Appointment type',
+        null=True, blank=True
     )
     room = models.ForeignKey(Room,
         verbose_name='Room ID'
@@ -318,7 +335,8 @@ class Appointment(models.Model):
     )
     appLength = models.IntegerField(
         verbose_name='Appointment length'
-    )
+    )#Potentially redundant; but can be used to manually adjust appointment's length
     appFinished = models.BooleanField(
-        verbose_name='Has the appointment ended?'
+        verbose_name='Has the appointment ended?',
+        default=False
     )