--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -77,15 +77,15 @@
             ProjectRole.query.get(name='*anonymous')._id)
         self.config.acl['comment'].append(
             ProjectRole.query.get(name='*authenticated')._id)
-        model.Globals(project_id=c.project._id, last_ticket_num=0, status_names='open,unread,accepted,pending,closed')
+        model.Globals(app_config_id=c.app.config._id, last_ticket_num=0, status_names='open,unread,accepted,pending,closed')
 
     def uninstall(self, project):
         "Remove all the plugin's artifacts from the database"
-        project_id = {'project_id':c.project._id}
-        # mapper(model.Ticket).remove(project_id)
-        # mapper(model.Comment).remove(project_id)
-        # mapper(model.Attachment).remove(project_id)
-        # mapper(model.Globals).remove(project_id)
+        model.Attachment.query.remove({'metadata.app_config_id':c.app.config._id})
+        app_config_id = {'app_config_id':c.app.config._id}
+        model.Ticket.query.remove(app_config_id)
+        model.Comment.query.remove(app_config_id)
+        model.Globals.query.remove(app_config_id)
 
 
 class RootController(object):
@@ -93,7 +93,7 @@
     @with_trailing_slash
     @expose('forgetracker.templates.index')
     def index(self):
-        tickets = model.Ticket.query.find(dict(project_id=c.project._id)).sort('ticket_num')
+        tickets = model.Ticket.query.find(dict(app_config_id=c.app.config._id)).sort('ticket_num')
         return dict(tickets=tickets)
 
     @expose('forgetracker.templates.search')
@@ -135,16 +135,16 @@
         if request.method != 'POST':
             raise Exception('save_new must be a POST request')
         if ticket_num:
-            ticket = model.Ticket.query.get(project_id=c.project._id,
+            ticket = model.Ticket.query.get(app_config_id=c.app.config._id,
                                           ticket_num=int(ticket_num))
             if not ticket:
                 raise Exception('Ticket number not found.')
             del post_data['ticket_num']
         else:
             ticket = model.Ticket()
-            ticket.project_id = c.project._id
+            ticket.app_config_id = c.app.config._id
             ticket.custom_fields = dict()
-            globals = model.Globals.query.get(project_id=c.project._id)
+            globals = model.Globals.query.get(app_config_id=c.app.config._id)
 
             # FIX ME: need to lock around this increment or something
             globals.last_ticket_num += 1
@@ -153,7 +153,7 @@
 
         for k,v in post_data.iteritems():
             setattr(ticket, k, v)
-        redirect(str(ticket.ticket_num))
+        redirect(str(ticket.ticket_num)+'/')
 
 
 class TicketController(object):
@@ -161,7 +161,7 @@
     def __init__(self, ticket_num=None):
         if ticket_num is not None:
             self.ticket_num = int(ticket_num)
-            self.ticket = model.Ticket.query.get(project_id=c.project._id,
+            self.ticket = model.Ticket.query.get(app_config_id=c.app.config._id,
                                                     ticket_num=self.ticket_num)
             self.attachment = AttachmentsController(self.ticket)
             self.comments = CommentController(self.ticket)
@@ -171,7 +171,7 @@
     def index(self, **kw):
         require(has_artifact_access('read', self.ticket))
         if self.ticket is not None:
-            globals = model.Globals.query.get(project_id=c.project._id)
+            globals = model.Globals.query.get(app_config_id=c.app.config._id)
             return dict(ticket=self.ticket, globals=globals)
         else:
             redirect('not_found')
@@ -180,7 +180,7 @@
     @expose('forgetracker.templates.edit_ticket')
     def edit(self, **kw):
         require(has_artifact_access('write', self.ticket))
-        globals = model.Globals.query.get(project_id=c.project._id)
+        globals = model.Globals.query.get(app_config_id=c.app.config._id)
         return dict(ticket=self.ticket, globals=globals)
 
     @expose()
@@ -193,11 +193,11 @@
         self.ticket.assigned_to = post_data['assigned_to']
         self.ticket.status = post_data['status']
 
-        globals = model.Globals.query.get(project_id=c.project._id)
+        globals = model.Globals.query.get(app_config_id=c.app.config._id)
         if globals.custom_fields:
             for field in globals.custom_fields.split(','):
                 self.ticket.custom_fields[field] = post_data[field]
-        redirect('edit')
+        redirect('edit/')
 
     @expose()
     def attach(self, file_info=None):
@@ -209,7 +209,8 @@
         with model.Attachment.create(
             content_type=content_type,
             filename=filename,
-            ticket_id=self.ticket._id) as fp:
+            ticket_id=self.ticket._id,
+            app_config_id=c.app.config._id) as fp:
             while True:
                 s = file_info.file.read()
                 if not s: break
@@ -290,7 +291,7 @@
     @with_trailing_slash
     @expose('forgetracker.templates.admin')
     def index(self):
-        globals = model.Globals.query.get(project_id=c.project._id)
+        globals = model.Globals.query.get(app_config_id=c.app.config._id)
         return dict(app=self.app, globals=globals)
 
     @expose()
@@ -299,12 +300,12 @@
 
     @expose()
     def set_status_names(self, **post_data):
-        globals = model.Globals.query.get(project_id=c.project._id)
+        globals = model.Globals.query.get(app_config_id=c.app.config._id)
         globals.status_names = post_data['status_names']
         redirect('.')
 
     @expose()
     def set_custom_fields(self, **post_data):
-        globals = model.Globals.query.get(project_id=c.project._id)
+        globals = model.Globals.query.get(app_config_id=c.app.config._id)
         globals.custom_fields = post_data['custom_fields']
         redirect('.')