diff --git a/admin.py b/admin.py
index 97802584..170f5c80 100644
--- a/admin.py
+++ b/admin.py
@@ -1,6 +1,7 @@
 from django.contrib import admin
 from helpdesk.models import Queue, Ticket, FollowUp, PreSetReply, KBCategory
 from helpdesk.models import EscalationExclusion, EmailTemplate, KBItem
+from helpdesk.models import TicketChange, Attachment
 
 class QueueAdmin(admin.ModelAdmin):
     list_display = ('title', 'slug', 'email_address')
@@ -10,17 +11,23 @@ class TicketAdmin(admin.ModelAdmin):
     date_hierarchy = 'created'
     list_filter = ('assigned_to', 'status', )
 
-class GenericAdmin(admin.ModelAdmin):
-    pass
+class TicketChangeInline(admin.StackedInline):
+    model = TicketChange
+
+class AttachmentInline(admin.StackedInline):
+    model = Attachment
+
+class FollowUpAdmin(admin.ModelAdmin):
+    inlines = [TicketChangeInline, AttachmentInline]
 
 class PreSetReplyAdmin(admin.ModelAdmin):
     list_display = ('name',)
 
 admin.site.register(Ticket, TicketAdmin)
 admin.site.register(Queue, QueueAdmin)
-admin.site.register(FollowUp, GenericAdmin)
-admin.site.register(PreSetReply, GenericAdmin)
-admin.site.register(EscalationExclusion, GenericAdmin)
-admin.site.register(EmailTemplate, GenericAdmin)
-admin.site.register(KBCategory, GenericAdmin)
-admin.site.register(KBItem, GenericAdmin)
+admin.site.register(FollowUp, FollowUpAdmin)
+admin.site.register(PreSetReply)
+admin.site.register(EscalationExclusion)
+admin.site.register(EmailTemplate)
+admin.site.register(KBCategory)
+admin.site.register(KBItem)
diff --git a/models.py b/models.py
index ec89ebfa..4518b367 100644
--- a/models.py
+++ b/models.py
@@ -12,7 +12,6 @@ from datetime import datetime
 from django.contrib.auth.models import User
 from django.db import models
 from django.conf import settings
-from django.dispatch import dispatcher
 from django.utils.translation import ugettext_lazy as _
 
 class Queue(models.Model):
@@ -243,10 +242,10 @@ class TicketChange(models.Model):
     """ For each FollowUp, any changes to the parent ticket (eg Title, Priority,
     etc) are tracked here for display purposes.
     """
-    followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
-    field = models.CharField(_('Field'), max_length=100, core=True)
-    old_value = models.TextField(_('Old Value'), blank=True, null=True, core=True)
-    new_value = models.TextField(_('New Value'), blank=True, null=True, core=True)
+    followup = models.ForeignKey(FollowUp)
+    field = models.CharField(_('Field'), max_length=100)
+    old_value = models.TextField(_('Old Value'), blank=True, null=True)
+    new_value = models.TextField(_('New Value'), blank=True, null=True)
 
     def __unicode__(self):
         str = u'%s ' % field
@@ -274,9 +273,9 @@ class DynamicFileField(models.FileField):
     def contribute_to_class(self, cls, name):
         """Hook up events so we can access the instance."""
         super(DynamicFileField, self).contribute_to_class(cls, name)
-        dispatcher.connect(self._post_init, models.signals.post_init, sender=cls)
+        models.signals.post_init.connect(self._post_init, sender=cls)
 
-    def _post_init(self, instance=None):
+    def _post_init(self, instance=None, **kwargs):
         """Get dynamic upload_to value from the model instance."""
         if hasattr(instance, 'get_upload_to'):
             self.upload_to = instance.get_upload_to(self.attname)
@@ -286,8 +285,8 @@ class DynamicFileField(models.FileField):
         return 'varchar(100)' 
 
 class Attachment(models.Model):
-    followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
-    file = DynamicFileField(_('File'), upload_to='helpdesk/attachments', core=True)
+    followup = models.ForeignKey(FollowUp)
+    file = DynamicFileField(_('File'), upload_to='helpdesk/attachments')
     filename = models.CharField(_('Filename'), max_length=100)
     mime_type = models.CharField(_('MIME Type'), max_length=30)
     size = models.IntegerField(_('Size'), help_text=_('Size of this file in bytes'))
diff --git a/scripts/get_email.py b/scripts/get_email.py
index 22285b25..94147dc0 100644
--- a/scripts/get_email.py
+++ b/scripts/get_email.py
@@ -17,6 +17,8 @@ from email.Utils import parseaddr
 from helpdesk.models import Queue, Ticket, FollowUp, Attachment
 from helpdesk.lib import send_templated_mail
 
+from django.core.files.base import ContentFile
+
 def process_email():
     for q in Queue.objects.filter(email_box_type__isnull=False, allow_email_submission=True):
         if not q.email_box_last_check: q.email_box_last_check = datetime.now()-timedelta(minutes=30)
@@ -173,7 +175,8 @@ def ticket_from_message(message, queue):
     for file in files:
         filename = file['filename'].replace(' ', '_')
         a = Attachment(followup=f, filename=filename, mime_type=file['type'], size=len(file['content']))
-        a.save_file_file(file['filename'], file['content'])
+        #a.save_file_file(file['filename'], file['content'])
+        a.file.save(file['filename'], ContentFile(file['content']))
         a.save()
         print "    - %s" % file['filename']
     
diff --git a/views/staff.py b/views/staff.py
index cbae660c..dc91ac24 100644
--- a/views/staff.py
+++ b/views/staff.py
@@ -10,6 +10,7 @@ from datetime import datetime
 
 from django.contrib.auth.models import User
 from django.contrib.auth.decorators import login_required
+from django.core.files.base import ContentFile
 from django.core.urlresolvers import reverse
 from django.db.models import Q
 from django.http import HttpResponseRedirect, Http404, HttpResponse
@@ -194,7 +195,8 @@ def update_ticket(request, ticket_id):
         for file in request.FILES.getlist('attachment'):
             filename = file['filename'].replace(' ', '_')
             a = Attachment(followup=f, filename=filename, mime_type=file['content-type'], size=len(file['content']))
-            a.save_file_file(file['filename'], file['content'])
+            #a.save_file_file(file['filename'], file['content'])
+            a.file.save(file['filename'], ContentFile(file['content']))
             a.save()
 
     ticket.save()