diff --git a/gramps/src/AddSpouse.py b/gramps/src/AddSpouse.py
index 9b0459c13..766e3f8c0 100644
--- a/gramps/src/AddSpouse.py
+++ b/gramps/src/AddSpouse.py
@@ -88,7 +88,6 @@ class AddSpouse:
         self.spouse_list.set_column_visibility(2,0)
         self.spouse_list.set_column_visibility(3,0)
         self.sorter = Sorter.Sorter(self.spouse_list,arrow_map,'spouse',self.top)
-        self.name_list = self.db.getPersonKeys()
         self.rel_combo.set_popdown_strings(const.familyRelations)
         title = _("Choose Spouse/Partner of %s") % GrampsCfg.nameof(person)
         self.glade.get_widget("spouseTitle").set_text(title)
@@ -132,7 +131,6 @@ class AddSpouse:
         QuickAdd.QuickAdd(self.db,gen,self.update_list)
 
     def update_list(self,person):
-        self.name_list.append(person.getId())
         self.addperson(person)
         self.relation_type_changed(self.relation_type)
         row = self.spouse_list.find_row_from_data(person)
@@ -186,18 +184,23 @@ class AddSpouse:
         gender = self.person.getGender()
         if text == _("Partners"):
             if gender == RelLib.Person.male:
-                gender = RelLib.Person.female
+                sgender = const.female
             else:
-                gender = RelLib.Person.male
-	
+                sgender = const.male
+        else:
+            if gender == RelLib.Person.male:
+                sgender = const.male
+            else:
+                sgender = const.female
+            
         index = 0
         self.spouse_list.clear()
         self.spouse_list.freeze()
-        for key in self.name_list:
-            person = self.db.getPerson(key)
-            if person.getGender() == gender:
+        for key in self.db.getPersonKeys():
+            data = self.db.getPersonDisplay(key)
+            if data[2] == sgender:
                 continue
-            data = person.getDisplayInfo()
+
             self.spouse_list.append([data[0],data[3],data[5],data[6]])
             self.spouse_list.set_row_data(index,key)
             index = index + 1
@@ -238,8 +241,6 @@ class SetSpouse:
         self.relation_def = self.glade.get_widget("reldef")
         self.top = self.glade.get_widget("spouseDialog")
 
-        self.name_list = self.db.getPersonMap().values()
-        self.name_list.sort(sort.by_last_name)
         self.rel_combo.set_popdown_strings(const.familyRelations)
         title = _("Choose Spouse/Partner of %s") % GrampsCfg.nameof(person)
         self.glade.get_widget("spouseTitle").set_text(title)
@@ -274,8 +275,6 @@ class SetSpouse:
         QuickAdd.QuickAdd(self.db,gen,self.update_list)
 
     def update_list(self,person):
-        self.name_list.append(person)
-        self.name_list.sort(sort.by_last_name)
         self.addperson(person)
         self.relation_type_changed(self.relation_type)
 
@@ -322,18 +321,24 @@ class SetSpouse:
         gender = self.person.getGender()
         if text == _("Partners"):
             if gender == RelLib.Person.male:
-                gender = RelLib.Person.female
+                sgender = const.female
             else:
-                gender = RelLib.Person.male
-	
+                sgender = const.male
+	else:
+            if gender == RelLib.Person.male:
+                sgender = const.male
+            else:
+                sgender = const.female
+            
         index = 0
         self.spouse_list.clear()
         self.spouse_list.freeze()
-        for person in self.name_list:
-            if person.getGender() == gender:
+        for key in self.db.getPersonKeys():
+            data = self.db.getPersonDisplay(key)
+            if data[2] == sgender:
                 continue
-            name = person.getPrimaryName().getName()
-            self.spouse_list.append([name,Utils.birthday(person)])
-            self.spouse_list.set_row_data(index,person)
+
+            self.spouse_list.append([data[0],data[3],data[5],data[6]])
+            self.spouse_list.set_row_data(index,key)
             index = index + 1
         self.spouse_list.thaw()
diff --git a/gramps/src/Find.py b/gramps/src/Find.py
index dca88de4d..dec927e41 100644
--- a/gramps/src/Find.py
+++ b/gramps/src/Find.py
@@ -217,15 +217,15 @@ class FindSource(FindBase):
 class FindMedia(FindBase):
     """Opens a Find Media Object dialog for GRAMPS"""
     
-    def __init__(self,clist,task,plist):
+    def __init__(self,clist,task,db):
         """Opens a dialog box instance that allows users to
         search for a place.
 
         clist - GtkCList containing the people information
         task - function to call to change the active person"""
         
-        FindBase.__init__(self,clist,task,_("Find Media Object"))
-        for n in plist:
+        FindBase.__init__(self,clist,task,_("Find Media Object"),db)
+        for n in self.db.getObjectMap().values():
             self.nlist.append(n.getDescription())
         self.enable_autocomp()
         
diff --git a/gramps/src/Marriage.py b/gramps/src/Marriage.py
index 29373cd6f..43a2fa333 100644
--- a/gramps/src/Marriage.py
+++ b/gramps/src/Marriage.py
@@ -208,7 +208,7 @@ class Marriage:
         ord = self.family.getLdsSeal()
         if ord == None:
             ord = LdsOrd()
-            self.person.setLdsSeal(ord)
+            self.family.setLdsSeal(ord)
         Sources.SourceSelector(ord.getSourceRefList(),self,src_changed)
 
     def lds_note_clicked(self,obj):
@@ -216,7 +216,7 @@ class Marriage:
         ord = self.family.getLdsSeal()
         if ord == None:
             ord = LdsOrd()
-            self.person.setLdsSeal(ord)
+            self.family.setLdsSeal(ord)
         NoteEdit.NoteEditor(ord)
 
     def on_up_clicked(self,obj):
diff --git a/gramps/src/Plugins.py b/gramps/src/Plugins.py
index c89584621..be220b7de 100644
--- a/gramps/src/Plugins.py
+++ b/gramps/src/Plugins.py
@@ -254,8 +254,6 @@ class PluginStatus:
         window.show_string(info.read())
         self.top.run_and_close()
         
-
-
 #-------------------------------------------------------------------------
 #
 # load_plugins
diff --git a/gramps/src/docgen/KwordDoc.py b/gramps/src/docgen/KwordDoc.py
index 883cc69df..c532ea8bc 100644
--- a/gramps/src/docgen/KwordDoc.py
+++ b/gramps/src/docgen/KwordDoc.py
@@ -21,7 +21,6 @@
 from TextDoc import *
 from latin_utf8 import latin_to_utf8
 
-import Utils
 import time
 import StringIO
 import os
diff --git a/gramps/src/docgen/PSDrawDoc.py b/gramps/src/docgen/PSDrawDoc.py
index 28b79e181..101c301dd 100644
--- a/gramps/src/docgen/PSDrawDoc.py
+++ b/gramps/src/docgen/PSDrawDoc.py
@@ -19,7 +19,6 @@
 #
 
 import os
-import tempfile
 import string
 import Plugins
 import intl
diff --git a/gramps/src/filters/After.py b/gramps/src/filters/After.py
index 634c3010a..5f2c40e4b 100644
--- a/gramps/src/filters/After.py
+++ b/gramps/src/filters/After.py
@@ -22,7 +22,6 @@
 
 import Filter
 import Date
-import RelLib
 import intl
 _ = intl.gettext
 
diff --git a/gramps/src/filters/Before.py b/gramps/src/filters/Before.py
index e97518550..5e88565fd 100644
--- a/gramps/src/filters/Before.py
+++ b/gramps/src/filters/Before.py
@@ -22,7 +22,6 @@
 
 import Filter
 import Date
-import RelLib
 import intl
 _ = intl.gettext
 
diff --git a/gramps/src/filters/Disconnected.py b/gramps/src/filters/Disconnected.py
index 997ee93d9..f7ec9417b 100644
--- a/gramps/src/filters/Disconnected.py
+++ b/gramps/src/filters/Disconnected.py
@@ -21,7 +21,6 @@
 "Disconnected individuals"
 
 import Filter
-import RelLib
 import intl
 _ = intl.gettext
 
diff --git a/gramps/src/filters/EventPlace.py b/gramps/src/filters/EventPlace.py
index fefa83dbc..8e76b1242 100644
--- a/gramps/src/filters/EventPlace.py
+++ b/gramps/src/filters/EventPlace.py
@@ -22,7 +22,6 @@
 
 import Filter
 import re
-import RelLib
 import intl
 _ = intl.gettext
 
@@ -38,7 +37,6 @@ class EventPlace(Filter.Filter):
         Filter.Filter.__init__(self,text)
 
     def match(self,person):
-        val = 0
         list = person.getEventList()[:]
         list.append(person.getBirth())
         list.append(person.getDeath())
diff --git a/gramps/src/filters/MatchSndEx.py b/gramps/src/filters/MatchSndEx.py
index 644873e2c..4fd3f357a 100644
--- a/gramps/src/filters/MatchSndEx.py
+++ b/gramps/src/filters/MatchSndEx.py
@@ -22,7 +22,6 @@
 
 import Filter
 import soundex
-import RelLib
 import intl
 _ = intl.gettext
 
diff --git a/gramps/src/filters/MatchSndEx2.py b/gramps/src/filters/MatchSndEx2.py
index 4d5f2bf6d..95da8a3d6 100644
--- a/gramps/src/filters/MatchSndEx2.py
+++ b/gramps/src/filters/MatchSndEx2.py
@@ -22,7 +22,6 @@
 
 import Filter
 import soundex
-import RelLib
 import intl
 _ = intl.gettext
 
diff --git a/gramps/src/gramps.py b/gramps/src/gramps.py
index 145cbd9ca..346d6bf5b 100755
--- a/gramps/src/gramps.py
+++ b/gramps/src/gramps.py
@@ -23,7 +23,6 @@ locale.setlocale(locale.LC_NUMERIC,"C")
 # Standard python modules
 #
 #-------------------------------------------------------------------------
-import traceback
 import sys
 
 #-------------------------------------------------------------------------
@@ -56,12 +55,8 @@ try:
     else:
         gramps_main.Gramps(arg)
 except:
-    traceback.print_exc()
+    import DisplayTrace
+    DisplayTrace.DisplayTrace()
         
-    fname = os.path.expanduser("~/gramps.err")
-    errfile = open(fname,"w")
-    traceback.print_exc(file=errfile)
-    errfile.close()
-
 gtk.mainloop()
 
diff --git a/gramps/src/gramps_main.py b/gramps/src/gramps_main.py
index 34e7abcc5..28d8cbab0 100755
--- a/gramps/src/gramps_main.py
+++ b/gramps/src/gramps_main.py
@@ -67,7 +67,6 @@ import sort
 import Utils
 import Bookmarks
 import Sorter
-import ListColors
 import GrampsCfg
 import EditPerson
 import Marriage
@@ -334,8 +333,7 @@ class Gramps:
         elif self.notebook.get_current_page() == 3:
             Find.FindSource(self.source_view.source_list,self.find_goto_source,self.db)
         elif self.notebook.get_current_page() == 5:
-            Find.FindMedia(self.media_view.media_list,self.find_goto_media,
-                           self.db.getObjectMap().values())
+            Find.FindMedia(self.media_view.media_list,self.find_goto_media,self.db)
         else:
             Find.FindPerson(self.person_list,self.find_goto_to,self.db)
 
@@ -593,7 +591,7 @@ class Gramps:
                        
     def new_database_response(self):
         import DbPrompter
-        self.clear_database()
+        self.clear_database(2)
         DbPrompter.DbPrompter(self,1)
     
     def clear_database(self,zodb=1):
@@ -604,8 +602,10 @@ class Gramps:
         const.familyAttributes = const.init_family_attribute_list()
         const.familyRelations = const.init_family_relation_list()
     
-        if zodb:
+        if zodb == 1:
             self.db = GrampsZODB()
+        elif zodb == 2:
+            self.db = GrampsDB()
         else:
             self.db = GrampsXML()
         self.db.set_iprefix(GrampsCfg.iprefix)
@@ -696,7 +696,7 @@ class Gramps:
         if filename == "" or filename == None:
             return
         
-        self.clear_database()
+        self.clear_database(0)
     
         if getoldrev.get_active():
             vc = VersionControl.RcsVersionControl(filename)
@@ -1269,8 +1269,7 @@ class Gramps:
         self.update_display(0)
 
     def update_after_merge(self,person,old_id):
-        if epo:
-            print person,old_id
+        if person:
             self.remove_from_person_list(person,old_id)
             self.redisplay_person_list(person)
         self.update_display(0)
@@ -1710,7 +1709,7 @@ class Gramps:
             self.statusbar.set_status(_("%s has been bookmarked") % name)
             gtk.timeout_add(5000,self.modify_statusbar)
         else:
-            GnomeWarningDialog(_("Bookmark could not be set because no one was selected"))
+            gramps.ui.GnomeWarningDialog(_("Bookmark could not be set because no one was selected"))
 
     def on_edit_bookmarks_activate(self,obj):
         self.bookmarks.edit()
diff --git a/gramps/src/plugins/AncestorChart.py b/gramps/src/plugins/AncestorChart.py
index 0b741b891..0d565a000 100644
--- a/gramps/src/plugins/AncestorChart.py
+++ b/gramps/src/plugins/AncestorChart.py
@@ -301,11 +301,14 @@ class AncestorChartDialog(DrawReportDialog):
         """Create the object that will produce the Ancestor Chart.
         All user dialog has already been handled and the output file
         opened."""
-        MyReport = AncestorChart(self.db, self.person, self.target_path,
-                                 self.max_gen, self.doc, self.report_text)
-        MyReport.write_report()
-
 
+        try:
+            MyReport = AncestorChart(self.db, self.person, self.target_path,
+                                     self.max_gen, self.doc, self.report_text)
+            MyReport.write_report()
+        except:
+            import DisplayTrace
+            DisplayTrace.DisplayTrace()
 
 #------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/AncestorReport.py b/gramps/src/plugins/AncestorReport.py
index e0cb7d124..674a9798e 100644
--- a/gramps/src/plugins/AncestorReport.py
+++ b/gramps/src/plugins/AncestorReport.py
@@ -35,16 +35,11 @@ import libglade
 
 #------------------------------------------------------------------------
 #
-# 
+# AncestorReport
 #
 #------------------------------------------------------------------------
 class AncestorReport(Report):
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def __init__(self,database,person,output,max,doc,pgbrk):
         self.map = {}
         self.database = database
@@ -58,11 +53,6 @@ class AncestorReport(Report):
         except IOError,msg:
             gnome.ui.GnomeErrorDialog(_("Could not open %s") % output + "\n" + msg)
         
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def filter(self,person,index):
         if person == None or index >= (1 << 31):
             return
@@ -73,11 +63,6 @@ class AncestorReport(Report):
             self.filter(family.getFather(),index*2)
             self.filter(family.getMother(),(index*2)+1)
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def write_report(self):
 
         self.filter(self.start,1)
@@ -215,7 +200,6 @@ class AncestorReport(Report):
                         self.doc.write_text(".")
                         
             self.doc.end_paragraph()
-
         self.doc.close()
  
 
@@ -250,11 +234,6 @@ class AncestorReportDialog(TextReportDialog):
         """Where to save styles for this report."""
         return "ancestor_report.xml"
     
-    #------------------------------------------------------------------------
-    #
-    # Create output styles appropriate to this report.
-    #
-    #------------------------------------------------------------------------
     def make_default_style(self):
         """Make the default output style for the Ahnentafel report."""
         font = FontStyle()
@@ -277,18 +256,17 @@ class AncestorReportDialog(TextReportDialog):
         para.set(first_indent=-1.0,lmargin=1.0,pad=0.25)
         self.default_style.add_style("Entry",para)
 
-    #------------------------------------------------------------------------
-    #
-    # Create the contents of the report.
-    #
-    #------------------------------------------------------------------------
     def make_report(self):
         """Create the object that will produce the Ahnentafel Report.
         All user dialog has already been handled and the output file
         opened."""
-        MyReport = AncestorReport(self.db, self.person, self.target_path,
-                                  self.max_gen, self.doc, self.pg_brk)
-        MyReport.write_report()
+        try:
+            MyReport = AncestorReport(self.db, self.person, self.target_path,
+                                      self.max_gen, self.doc, self.pg_brk)
+            MyReport.write_report()
+        except:
+            import DisplayTrace
+            DisplayTrace.DisplayTrace()
 
 
 #------------------------------------------------------------------------
diff --git a/gramps/src/plugins/ChangeTypes.py b/gramps/src/plugins/ChangeTypes.py
index bf4810f0c..58efc3006 100644
--- a/gramps/src/plugins/ChangeTypes.py
+++ b/gramps/src/plugins/ChangeTypes.py
@@ -37,7 +37,11 @@ _ = intl.gettext
 #
 #-------------------------------------------------------------------------
 def runTool(database,person,callback):
-    ChangeTypes(database,person)
+    try:
+        ChangeTypes(database,person)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 class ChangeTypes:
     def __init__(self,db,person):
diff --git a/gramps/src/plugins/Check.py b/gramps/src/plugins/Check.py
index 78776cba3..1a98c8e01 100644
--- a/gramps/src/plugins/Check.py
+++ b/gramps/src/plugins/Check.py
@@ -37,12 +37,16 @@ import libglade
 #-------------------------------------------------------------------------
 def runTool(database,active_person,callback):
 
-    checker = CheckIntegrity(database)
-    checker.check_for_broken_family_links()
-    checker.cleanup_missing_photos()
-    checker.check_parent_relationships()
-    checker.cleanup_empty_families(0)
-    checker.report()
+    try:
+        checker = CheckIntegrity(database)
+        checker.check_for_broken_family_links()
+        checker.cleanup_missing_photos()
+        checker.check_parent_relationships()
+        checker.cleanup_empty_families(0)
+        checker.report()
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 #-------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/DesGraph.py b/gramps/src/plugins/DesGraph.py
index 94218dbb6..ea4894831 100644
--- a/gramps/src/plugins/DesGraph.py
+++ b/gramps/src/plugins/DesGraph.py
@@ -20,17 +20,32 @@
 
 "Generate files/Descendant Report"
 
-import GraphLayout
+#------------------------------------------------------------------------
+#
+# standard python modules
+#
+#------------------------------------------------------------------------
+import string
 
+#------------------------------------------------------------------------
+#
+# GTK/GNOME modules
+#
+#------------------------------------------------------------------------
+import libglade
+import gtk
+
+#------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#------------------------------------------------------------------------
+import GraphLayout
 from FontScale import string_width
 from DrawDoc import *
 from Report import *
 from TextDoc import *
 
-import libglade
-import gtk
-import string
-
 import intl
 _ = intl.gettext
 
@@ -44,13 +59,13 @@ _sep = 0.5
 def pt2cm(pt):
     return (float(pt)/72.0)*2.54
 
+#------------------------------------------------------------------------
+#
+# DescendantReport
+#
+#------------------------------------------------------------------------
 class DescendantReport:
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def __init__(self,database,display,person,output,doc):
         self.doc = doc
         self.doc.creator(database.getResearcher().getName())
@@ -98,7 +113,6 @@ class DescendantReport:
 
             self.lines = max(self.lines,len(self.text[p]))    
 
-
     def write_report(self):
 
         self.calc()
@@ -214,14 +228,10 @@ class DescendantReport:
         except:
             print "Document close failure"
 
-    #--------------------------------------------------------------------
-    #
-    # calc - calculate the maximum width that a box needs to be. From
-    # that and the page dimensions, calculate the proper place to put
-    # the elements on a page.
-    #
-    #--------------------------------------------------------------------
     def calc(self):
+        """calc - calculate the maximum width that a box needs to be. From
+        that and the page dimensions, calculate the proper place to put
+        the elements on a page."""
 	self.height = self.lines*pt2cm(1.25*self.font.get_size())
 	self.box_width = pt2cm(self.box_width+20)
 
@@ -238,11 +248,6 @@ class DescendantReport:
         g = GraphicsStyle()
         self.doc.add_draw_style("line",g)
 
-    #--------------------------------------------------------------------
-    #
-    #
-    #
-    #--------------------------------------------------------------------
     def print_page(self, plist,elist,r,c):
         self.doc.start_page()
 
@@ -299,6 +304,11 @@ class DescendantReport:
         self.doc.end_page()
 
 
+#------------------------------------------------------------------------
+#
+# DescendantReportDialog
+#
+#------------------------------------------------------------------------
 class DescendantReportDialog(DrawReportDialog):
     def __init__(self,database,person):
         DrawReportDialog.__init__(self,database,person)
@@ -337,10 +347,14 @@ class DescendantReportDialog(DrawReportDialog):
         """Create the object that will produce the Descendant Graph.
         All user dialog has already been handled and the output file
         opened."""
-        MyReport = DescendantReport(self.db,self.report_text,
-                                    self.person, self.target_path, self.doc)
-        MyReport.write_report()
-
+        try:
+            MyReport = DescendantReport(self.db,self.report_text,
+                                        self.person, self.target_path, self.doc)
+            MyReport.write_report()
+        except:
+            import DisplayTrace
+            DisplayTrace.DisplayTrace()
+            
 #------------------------------------------------------------------------
 #
 # 
diff --git a/gramps/src/plugins/Desbrowser.py b/gramps/src/plugins/Desbrowser.py
index a2b62350e..25ba9d531 100644
--- a/gramps/src/plugins/Desbrowser.py
+++ b/gramps/src/plugins/Desbrowser.py
@@ -20,14 +20,30 @@
 
 "Analysis and Exploration/Interactive descendant browser"
 
-from RelLib import *
+#------------------------------------------------------------------------
+#
+# standard python modules
+#
+#------------------------------------------------------------------------
 import os
+
+#------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#------------------------------------------------------------------------
+from RelLib import *
 import Utils
 import intl
 import GrampsCfg
 
 _ = intl.gettext
 
+#------------------------------------------------------------------------
+#
+# GTK/GNOME modules
+#
+#------------------------------------------------------------------------
 import GDK
 import gtk
 import libglade
@@ -38,7 +54,11 @@ import libglade
 #
 #------------------------------------------------------------------------
 def runTool(database,person,callback):
-    DesBrowse(database,person,callback)
+    try:
+        DesBrowse(database,person,callback)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 class DesBrowse:
     def __init__(self,database,person,callback):
diff --git a/gramps/src/plugins/DescendReport.py b/gramps/src/plugins/DescendReport.py
index 188788d6f..7f101a596 100644
--- a/gramps/src/plugins/DescendReport.py
+++ b/gramps/src/plugins/DescendReport.py
@@ -20,30 +20,40 @@
 
 "Generate files/Descendant Report"
 
+#------------------------------------------------------------------------
+#
+# standard python modules
+#
+#------------------------------------------------------------------------
 import os
 import sort
 import string
+
+#------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#------------------------------------------------------------------------
+from Report import *
 import intl
 
 _ = intl.gettext
 
-from Report import *
-
+#------------------------------------------------------------------------
+#
+# GTK/GNOME modules
+#
+#------------------------------------------------------------------------
 import gtk
 import libglade
 
 #------------------------------------------------------------------------
 #
-# 
+# DescendantReport
 #
 #------------------------------------------------------------------------
 class DescendantReport:
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def __init__(self,db,person,name,max,doc):
         self.creator = db.getResearcher().getName()
         self.name = name
@@ -51,27 +61,12 @@ class DescendantReport:
         self.max_generations = max
         self.doc = doc
         
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def setup(self):
         self.doc.open(self.name)
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def end(self):
         self.doc.close()
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def dump_dates(self, person):
         birth = person.getBirth().getDateObj().get_start_date()
         death = person.getDeath().getDateObj().get_start_date()
@@ -85,11 +80,6 @@ class DescendantReport:
                 self.doc.write_text('d. ' + str(death.getYear()))
             self.doc.write_text(')')
         
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def report(self):
         self.doc.start_paragraph("Title")
         name = self.person.getPrimaryName().getRegularName()
@@ -98,11 +88,6 @@ class DescendantReport:
         self.doc.end_paragraph()
         self.dump(0,self.person)
 
-    #--------------------------------------------------------------------
-    #
-    # 
-    #
-    #--------------------------------------------------------------------
     def dump(self,level,person):
 
         if level != 0:
@@ -155,11 +140,6 @@ class DescendantReportDialog(TextReportDialog):
         """Where to save styles for this report."""
         return "descend_report.xml"
     
-    #------------------------------------------------------------------------
-    #
-    # Create output styles appropriate to this report.
-    #
-    #------------------------------------------------------------------------
     def make_default_style(self):
         """Make the default output style for the Descendant Report."""
         f = FontStyle()
@@ -178,20 +158,19 @@ class DescendantReportDialog(TextReportDialog):
             p.set_left_margin(max(10.0,float(i-1)))
             self.default_style.add_style("Level%d" % i,p)
 
-    #------------------------------------------------------------------------
-    #
-    # Create the contents of the report.
-    #
-    #------------------------------------------------------------------------
     def make_report(self):
         """Create the object that will produce the Descendant Report.
         All user dialog has already been handled and the output file
         opened."""
-        MyReport = DescendantReport(self.db, self.person, self.target_path,
-                                    self.max_gen, self.doc)
-        MyReport.setup()
-        MyReport.report()
-        MyReport.end()
+        try:
+            MyReport = DescendantReport(self.db, self.person, self.target_path,
+                                        self.max_gen, self.doc)
+            MyReport.setup()
+            MyReport.report()
+            MyReport.end()
+        except:
+            import DisplayTrace
+            DisplayTrace.DisplayTrace()
         
 #------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/FamilyGroup.py b/gramps/src/plugins/FamilyGroup.py
index a1d9632c6..4fad37804 100644
--- a/gramps/src/plugins/FamilyGroup.py
+++ b/gramps/src/plugins/FamilyGroup.py
@@ -27,9 +27,6 @@ _ = intl.gettext
 
 from Report import *
 
-import gtk
-import libglade
-
 #------------------------------------------------------------------------
 #
 # 
@@ -365,9 +362,9 @@ class FamilyGroupDialog(TextReportDialog):
         will return a placebo label and disable the OK button."""
         mapping = {}
         family_list = self.person.getFamilyList()
-        if not family_list:
-            mapping[_("No known marriages")] = None
-            self.topDialog.get_widget("OK").set_sensitive(0)
+#        if not family_list:
+#            mapping[_("No known marriages")] = None
+#            self.topDialog.get_widget("OK").set_sensitive(0)
         for family in family_list:
             if self.person == family.getFather():
                 spouse = family.getMother()
diff --git a/gramps/src/plugins/Merge.py b/gramps/src/plugins/Merge.py
index 6c34aac8d..f7168d9eb 100644
--- a/gramps/src/plugins/Merge.py
+++ b/gramps/src/plugins/Merge.py
@@ -501,7 +501,11 @@ def get_name_obj(person):
 #
 #-------------------------------------------------------------------------
 def runTool(database,active_person,callback):
-    Merge(database,callback)
+    try:
+        Merge(database,callback)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 #-------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/PatchNames.py b/gramps/src/plugins/PatchNames.py
index 30b24bc2b..1c5758a58 100644
--- a/gramps/src/plugins/PatchNames.py
+++ b/gramps/src/plugins/PatchNames.py
@@ -43,7 +43,11 @@ _nick_re = re.compile(r"(.+)[(\"](.*)[)\"]")
 #
 #-------------------------------------------------------------------------
 def runTool(database,active_person,callback):
-    PatchNames(database,callback)
+    try:
+        PatchNames(database,callback)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 class PatchNames:
 
diff --git a/gramps/src/plugins/ReadGedcom.py b/gramps/src/plugins/ReadGedcom.py
index 804ce8903..7d7718270 100644
--- a/gramps/src/plugins/ReadGedcom.py
+++ b/gramps/src/plugins/ReadGedcom.py
@@ -1705,7 +1705,11 @@ def on_ok_clicked(obj):
     if name == "":
         return
     Utils.destroy_passed_object(obj)
-    importData(db,name)
+    try:
+        importData(db,name)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 #-------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/ReadNative.py b/gramps/src/plugins/ReadNative.py
index 0179619c5..7e6b44ef6 100644
--- a/gramps/src/plugins/ReadNative.py
+++ b/gramps/src/plugins/ReadNative.py
@@ -20,7 +20,6 @@
 
 "Import from Gramps"
 
-import libglade
 from ReadXML import *
 import Utils
 import intl
@@ -69,7 +68,11 @@ class ReadNative:
 
         name = "%s/%s" % (name,const.xmlFile)
         Utils.destroy_passed_object(self.top)
-        importData(self.db,name,progress)
+        try:
+            importData(self.db,name,progress)
+        except:
+            import DisplayTrace
+            DisplayTrace.DisplayTrace()
         self.callback(1)
 
 #------------------------------------------------------------------------
diff --git a/gramps/src/plugins/ReorderIds.py b/gramps/src/plugins/ReorderIds.py
index 5cf549dbe..c8ac63f76 100644
--- a/gramps/src/plugins/ReorderIds.py
+++ b/gramps/src/plugins/ReorderIds.py
@@ -33,7 +33,11 @@ _findint = re.compile('^[^\d]*(\d+)[^\d]*')
 
 def runTool(db,active_person,callback):
     """Changed person, family, object, source, and place ids"""
-    ReorderIds(db,callback)
+    try:
+        ReorderIds(db,callback)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 class ReorderIds:
 
diff --git a/gramps/src/plugins/Summary.py b/gramps/src/plugins/Summary.py
index bd1f7f9f1..bdcd05606 100644
--- a/gramps/src/plugins/Summary.py
+++ b/gramps/src/plugins/Summary.py
@@ -20,15 +20,29 @@
 
 "View/Summary of the database"
 
-from RelLib import *
+#------------------------------------------------------------------------
+#
+# standard python modules
+#
+#------------------------------------------------------------------------
 import os
 import posixpath
-import re
-import string
+
+#------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#------------------------------------------------------------------------
+from RelLib import *
 import Utils
 import intl
 _ = intl.gettext
 
+#------------------------------------------------------------------------
+#
+# GNOME/GTK modules
+#
+#------------------------------------------------------------------------
 from gtk import *
 from gnome.ui import *
 from libglade import *
diff --git a/gramps/src/plugins/Verify.py b/gramps/src/plugins/Verify.py
index a559da47d..1ef6df32f 100644
--- a/gramps/src/plugins/Verify.py
+++ b/gramps/src/plugins/Verify.py
@@ -20,19 +20,33 @@
 
 "View/Verify"
 
-from RelLib import *
+#------------------------------------------------------------------------
+#
+# standard python modules
+#
+#------------------------------------------------------------------------
 import os
-import posixpath
-import re
-import sort
-import string
+
+#------------------------------------------------------------------------
+#
+# GNOME/GTK modules
+#
+#------------------------------------------------------------------------
+from gtk import *
+from gnome.ui import *
+from libglade import *
+
+#------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#------------------------------------------------------------------------
+from RelLib import *
+
 import Utils
 import intl
 _ = intl.gettext
 
-from gtk import *
-from gnome.ui import *
-from libglade import *
 
 db = None
 glade_file = None
diff --git a/gramps/src/plugins/WriteGedcom.py b/gramps/src/plugins/WriteGedcom.py
index 27a8325f0..e4074a1f7 100644
--- a/gramps/src/plugins/WriteGedcom.py
+++ b/gramps/src/plugins/WriteGedcom.py
@@ -283,7 +283,11 @@ def ged_subdate(date):
 #
 #-------------------------------------------------------------------------
 def writeData(database,person):
-    GedcomWriter(database,person)
+    try:
+        GedcomWriter(database,person)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
 #-------------------------------------------------------------------------
 #
diff --git a/gramps/src/plugins/WritePkg.py b/gramps/src/plugins/WritePkg.py
index ff86c8615..32c6afdbb 100644
--- a/gramps/src/plugins/WritePkg.py
+++ b/gramps/src/plugins/WritePkg.py
@@ -20,113 +20,132 @@
 
 "Export to GRAMPS package"
 
+#-------------------------------------------------------------------------
+#
+# standard python modules
+#
+#-------------------------------------------------------------------------
+import time
+import os
+from cStringIO import StringIO
+
+#-------------------------------------------------------------------------
+#
+# GNOME/GTK modules
+#
+#-------------------------------------------------------------------------
+import libglade
+
+#-------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#-------------------------------------------------------------------------
 from RelLib import *
 
 import WriteXML
-import time
-import os
 import TarFile
 import Utils
-import libglade
 
-from cStringIO import StringIO
 import intl
 _ = intl.gettext
 
+#-------------------------------------------------------------------------
+#
+# writeData
+#
+#-------------------------------------------------------------------------
 def writeData(database,person):
-    global db
-    global topDialog
-    global active_person
+    try:
+        PackageWriter(database)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
     
-    db = database
-    active_person = person
-    
-    base = os.path.dirname(__file__)
-    glade_file = base + os.sep + "pkgexport.glade"
+#-------------------------------------------------------------------------
+#
+# PackageWriter
+#
+#-------------------------------------------------------------------------
+class PackageWriter:
+
+    def __init__(self,database):
+        self.db = database
         
-    dic = {
-        "destroy_passed_object" : Utils.destroy_passed_object,
-        "on_ok_clicked" : on_ok_clicked
-        }
+        base = os.path.dirname(__file__)
+        glade_file = "%s/%s" % (base,"pkgexport.glade")
+        
+        
+        dic = {
+            "destroy_passed_object" : Utils.destroy_passed_object,
+            "on_ok_clicked" : self.on_ok_clicked
+            }
+        
+        self.top = libglade.GladeXML(glade_file,"packageExport")
+        self.top.signal_autoconnect(dic)
+        self.top.get_widget("packageExport").show()
 
-    topDialog = libglade.GladeXML(glade_file,"packageExport")
-    topDialog.signal_autoconnect(dic)
+    def on_ok_clicked(self,obj):
+        name = self.top.get_widget("filename").get_text()
+        Utils.destroy_passed_object(obj)
+        self.export(name)
 
-    topDialog.get_widget("packageExport").show()
+    def export(self, filename):
 
-#-------------------------------------------------------------------------
-#
-#
-#
-#-------------------------------------------------------------------------
-def on_ok_clicked(obj):
-    global db
-    global topDialog
-    
-    name = topDialog.get_widget("filename").get_text()
-    Utils.destroy_passed_object(obj)
-    exportData(db,name)
+        t = TarFile.TarFile(filename)
+        g = StringIO()
+        
+        gfile = WriteXML.XmlWriter(self.db,None,1)
+        gfile.write_handle(g)
+        mtime = time.time()
+        t.add_file("data.gramps",mtime,g)
+        g.close()
 
-def callback(a):
-    pass
-
-def exportData(database, filename):
-
-    t = TarFile.TarFile(filename)
-    g = StringIO()
-
-    gfile = WriteXML.XmlWriter(database,None,1)
-    gfile.write_handle(g)
-    mtime = time.time()
-    t.add_file("data.gramps",mtime,g)
-    g.close()
-
-    for f in database.getPersonMap().values():
-        for p in f.getPhotoList():
-            object = p.getReference()
-            base = os.path.basename(object.getPath())
-            try:
-                g = open(object.getPath(),"rb")
-                t.add_file(base,mtime,g)
-                g.close()
-            except:
-                pass
-    for f in database.getFamilyMap().values():
-        for p in f.getPhotoList():
-            object = p.getReference()
-            base = os.path.basename(object.getPath())
-            try:
-                g = open(object.getPath(),"rb")
-                t.add_file(base,mtime,g)
-                g.close()
-            except:
-                pass
-    for f in database.getSourceMap().values():
-        for p in f.getPhotoList():
-            object = p.getReference()
-            base = os.path.basename(object.getPath())
-            try:
-                g = open(object.getPath(),"rb")
-                t.add_file(base,mtime,g)
-                g.close()
-            except:
-                pass
-    for f in database.getPlaceMap().values():
-        for p in f.getPhotoList():
-            object = p.getReference()
-            base = os.path.basename(object.getPath())
-            try:
-                g = open(object.getPath(),"rb")
-                t.add_file(base,mtime,g)
-                g.close()
-            except:
-                pass
-            
-    t.close()
+        for f in self.db.getPersonMap().values():
+            for p in f.getPhotoList():
+                object = p.getReference()
+                base = os.path.basename(object.getPath())
+                try:
+                    g = open(object.getPath(),"rb")
+                    t.add_file(base,mtime,g)
+                    g.close()
+                except:
+                    pass
+        for f in self.db.getFamilyMap().values():
+            for p in f.getPhotoList():
+                object = p.getReference()
+                base = os.path.basename(object.getPath())
+                try:
+                    g = open(object.getPath(),"rb")
+                    t.add_file(base,mtime,g)
+                    g.close()
+                except:
+                    pass
+        for f in self.db.getSourceMap().values():
+            for p in f.getPhotoList():
+                object = p.getReference()
+                base = os.path.basename(object.getPath())
+                try:
+                    g = open(object.getPath(),"rb")
+                    t.add_file(base,mtime,g)
+                    g.close()
+                except:
+                    pass
+        for f in self.db.getPlaceMap().values():
+            for p in f.getPhotoList():
+                object = p.getReference()
+                base = os.path.basename(object.getPath())
+                try:
+                    g = open(object.getPath(),"rb")
+                    t.add_file(base,mtime,g)
+                    g.close()
+                except:
+                    pass
+        t.close()
     
 #-------------------------------------------------------------------------
 #
-#
+# Register the plugin
 #
 #-------------------------------------------------------------------------
 from Plugins import register_export
diff --git a/gramps/src/plugins/count_anc.py b/gramps/src/plugins/count_anc.py
index 947a151b8..76b964709 100644
--- a/gramps/src/plugins/count_anc.py
+++ b/gramps/src/plugins/count_anc.py
@@ -31,49 +31,59 @@ from gnome.ui import *
 from libglade import *
 
 def report(database,person):
-    text = ""
-    base = os.path.dirname(__file__)
-    glade_file = base + os.sep + "summary.glade"
-    topDialog = GladeXML(glade_file,"summary")
-    topDialog.signal_autoconnect({
-        "destroy_passed_object" : Utils.destroy_passed_object,
-    })
-    thisgen = []
-    allgen = []
-    thisgen.append(person)
-    title = _("Number of ancestors of \"%s\" by generation") % person.getPrimaryName().getName()
-    text = text + title + ':\n'
-    thisgensize=1
-    gen=1
-    while thisgensize>0:
-       thisgensize=0
-       if len(thisgen) >0:
-          thisgensize=len(thisgen)
-          gen= gen-1
-	  if thisgensize == 1 :
-              text = text + _("Generation %d has 1 individual.\n") % (gen)
-          else:
-              text = text + _("Generation %d has %d individuals.\n") % (gen, thisgensize)
-	  temp = thisgen
-	  thisgen = []
-	  for person in temp:
-	      family = person.getMainParents()
-	      if family != None:
-	          father = family.getFather()
-		  mother = family.getMother()
-		  if father != None:
-		     thisgen.append(father)
-		  if mother != None:
-		     thisgen.append(mother)
-          allgen = allgen + thisgen
-	  
-    text = text + _("Total ancestors in generations %d to -1 is %d .\n") % (gen, len(allgen))
+    try:
+        CountAncestors(database,person)
+    except:
+        import DisplayTrace
+        DisplayTrace.DisplayTrace()
 
-    top = topDialog.get_widget("summary")
-    textwindow = topDialog.get_widget("textwindow")
-    topDialog.get_widget("summaryTitle").set_text(title)
-    textwindow.show_string(text)
-    top.show()
+class CountAncestors:
+    
+    def __init__(self,database,person):
+        
+        text = ""
+        base = os.path.dirname(__file__)
+        glade_file = base + os.sep + "summary.glade"
+        topDialog = GladeXML(glade_file,"summary")
+        topDialog.signal_autoconnect({
+            "destroy_passed_object" : Utils.destroy_passed_object,
+            })
+        thisgen = []
+        allgen = []
+        thisgen.append(person)
+        title = _("Number of ancestors of \"%s\" by generation") % person.getPrimaryName().getName()
+        text = text + title + ':\n'
+        thisgensize=1
+        gen=1
+        while thisgensize>0:
+            thisgensize=0
+            if len(thisgen) >0:
+                thisgensize=len(thisgen)
+                gen= gen-1
+                if thisgensize == 1 :
+                    text = text + _("Generation %d has 1 individual.\n") % (gen)
+                else:
+                    text = text + _("Generation %d has %d individuals.\n") % (gen, thisgensize)
+            temp = thisgen
+            thisgen = []
+            for person in temp:
+                family = person.getMainParents()
+                if family != None:
+                    father = family.getFather()
+                    mother = family.getMother()
+                    if father != None:
+                        thisgen.append(father)
+                    if mother != None:
+                        thisgen.append(mother)
+            allgen = allgen + thisgen
+	  
+        text = text + _("Total ancestors in generations %d to -1 is %d .\n") % (gen, len(allgen))
+
+        top = topDialog.get_widget("summary")
+        textwindow = topDialog.get_widget("textwindow")
+        topDialog.get_widget("summaryTitle").set_text(title)
+        textwindow.show_string(text)
+        top.show()
 
 #-------------------------------------------------------------------------
 #