← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~googol/openlp/bug-779201 into lp:openlp

 

Andreas Preikschat has proposed merging lp:~googol/openlp/bug-779201 into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #779201 in OpenLP: "QString and QVariant auto-conversion"
  https://bugs.launchpad.net/openlp/+bug/779201

For more details, see:
https://code.launchpad.net/~googol/openlp/bug-779201/+merge/138311

Hello,

- fixed bug #779201: QString and QVariant auto-conversion

This needs intensive testing. Possible tests are:
a) Are you settings loaded as expected?
b) Change settings, are they restored as expected?
c) Are Lists, ints, strings, ..., saved/loaded correctly.

NOTE:
The locale aware sorting has to be tested again. Because we cannot use
   QtCore.QString.localeAwareCompare(string1.lower(), string2.lower())
anyl onger. We have to check what exactly does not work with locale.strcoll()
See lines 3534ff.
-- 
https://code.launchpad.net/~googol/openlp/bug-779201/+merge/138311
Your team OpenLP Core is requested to review the proposed merge of lp:~googol/openlp/bug-779201 into lp:openlp.
=== modified file 'openlp.pyw'
--- openlp.pyw	2012-06-27 21:32:43 +0000
+++ openlp.pyw	2012-12-05 21:02:22 +0000
@@ -27,7 +27,16 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 
+import sip
 import sys
+sip.setapi(u'QDate', 2)
+sip.setapi(u'QDateTime', 2)
+sip.setapi(u'QString', 2)
+sip.setapi(u'QTextStream', 2)
+sip.setapi(u'QTime', 2)
+sip.setapi(u'QUrl', 2)
+sip.setapi(u'QVariant', 2)
+
 from openlp.core import main
 
 

=== modified file 'openlp/core/__init__.py'
--- openlp/core/__init__.py	2012-12-05 05:53:14 +0000
+++ openlp/core/__init__.py	2012-12-05 21:02:22 +0000
@@ -43,8 +43,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, check_directory_exists
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings, check_directory_exists
 from openlp.core.lib.ui import UiStrings
 from openlp.core.resources import qInitResources
 from openlp.core.ui.mainwindow import MainWindow
@@ -119,18 +118,30 @@
         # Decide how many screens we have and their size
         screens = ScreenList.create(self.desktop())
         # First time checks in settings
+<<<<<<< TREE
         has_run_wizard = Settings().value(u'general/has run wizard', QtCore.QVariant(False)).toBool()
+=======
+        has_run_wizard = Settings().value(u'general/has run wizard', False)
+>>>>>>> MERGE-SOURCE
         if not has_run_wizard:
             if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted:
+<<<<<<< TREE
                 Settings().setValue(u'general/has run wizard', QtCore.QVariant(True))
+=======
+                Settings().setValue(u'general/has run wizard', True)
+>>>>>>> MERGE-SOURCE
         # Correct stylesheet bugs
         if os.name == u'nt':
             base_color = self.palette().color(QtGui.QPalette.Active, QtGui.QPalette.Base)
             application_stylesheet = u'* {alternate-background-color: ' + base_color.name() + ';}\n'
             application_stylesheet += nt_repair_stylesheet
             self.setStyleSheet(application_stylesheet)
+<<<<<<< TREE
         # show the splashscreen
         show_splash = Settings().value(u'general/show splash', QtCore.QVariant(True)).toBool()
+=======
+        show_splash = Settings().value(u'general/show splash', True)
+>>>>>>> MERGE-SOURCE
         if show_splash:
             self.splash = SplashScreen()
             self.splash.show()
@@ -149,7 +160,11 @@
         self.processEvents()
         if not has_run_wizard:
             self.mainWindow.firstTime()
+<<<<<<< TREE
         update_check = Settings().value(u'general/update check', QtCore.QVariant(True)).toBool()
+=======
+        update_check = Settings().value(u'general/update check', True)
+>>>>>>> MERGE-SOURCE
         if update_check:
             VersionThread(self.mainWindow).start()
         Receiver.send_message(u'live_display_blank_check')
@@ -204,7 +219,7 @@
         if event.type() == QtCore.QEvent.FileOpen:
             file_name = event.file()
             log.debug(u'Got open file event for %s!', file_name)
-            self.args.insert(0, unicode(file_name))
+            self.args.insert(0, file_name)
             return True
         else:
             return QtGui.QApplication.event(self, event)
@@ -296,8 +311,7 @@
         if app.isAlreadyRunning():
             sys.exit()
     # First time checks in settings
-    if not Settings().value(u'general/has run wizard',
-        QtCore.QVariant(False)).toBool():
+    if not Settings().value(u'general/has run wizard', False):
         if not FirstTimeLanguageForm().exec_():
             # if cancel then stop processing
             sys.exit()

=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/__init__.py	2012-12-05 21:02:22 +0000
@@ -30,6 +30,7 @@
 The :mod:`lib` module contains most of the components and libraries that make
 OpenLP work.
 """
+import datetime
 import logging
 import os
 
@@ -82,6 +83,68 @@
     Next = 3
 
 
+class Settings(QtCore.QSettings):
+    """
+    Class to wrap QSettings.
+
+    * Exposes all the methods of QSettings.
+    * Adds functionality for OpenLP Portable. If the ``defaultFormat`` is set to
+    ``IniFormat``, and the path to the Ini file is set using ``setFilename``,
+    then the Settings constructor (without any arguments) will create a Settings
+    object for accessing settings stored in that Ini file.
+    """
+    __filePath__ = u''
+
+    @staticmethod
+    def setFilename(iniFile):
+        """
+        Sets the complete path to an Ini file to be used by Settings objects.
+
+        Does not affect existing Settings objects.
+        """
+        Settings.__filePath__ = iniFile
+
+    def __init__(self, *args):
+        if not args and Settings.__filePath__ and \
+            Settings.defaultFormat() == Settings.IniFormat:
+            QtCore.QSettings.__init__(self, Settings.__filePath__,
+                Settings.IniFormat)
+        else:
+            QtCore.QSettings.__init__(self, *args)
+
+    def value(self, key, defaultValue):
+        """
+        Returns the value for the given ``key``. The returned ``value`` is
+        of the same type as the ``defaultValue``.
+
+        ``key``
+            The key to return the value from.
+
+        ``defaultValue``
+            The value to be returned if the given ``key`` is not present in the
+            config. Note, the ``defaultValue``'s type defines the type the
+            returned is converted to. In other words, if the ``defaultValue`` is
+            a boolean, then the returned value will be converted to a boolean.
+
+            **Note**, this method only converts a few types and might need to be
+            extended if a certain type is missing!
+        """
+        setting =  super(Settings, self).value(key, defaultValue)
+        # An empty list saved to the settings results in a None type being
+        # returned.
+        if setting is None:
+            return []
+        # Convert the setting to the correct type.
+        if isinstance(defaultValue, bool):
+            if isinstance(setting, bool):
+                return setting
+            # Sometimes setting is string instead of a boolean.
+            return setting == u'true'
+        if isinstance(defaultValue, int):
+            return int(setting)
+        return setting
+
+
 def translate(context, text, comment=None,
     encoding=QtCore.QCoreApplication.CodecForTr, n=-1,
     translate=QtCore.QCoreApplication.translate):
@@ -361,22 +424,22 @@
         List of unicode strings
     """
     if Qt.PYQT_VERSION_STR >= u'4.9' and Qt.qVersion() >= u'4.8':
-        return unicode(QtCore.QLocale().createSeparatedList(stringlist))
+        return QtCore.QLocale().createSeparatedList(stringlist)
     if not stringlist:
         return u''
     elif len(stringlist) == 1:
         return stringlist[0]
     elif len(stringlist) == 2:
-        return unicode(translate('OpenLP.core.lib', '%1 and %2',
-            'Locale list separator: 2 items').arg(stringlist[0], stringlist[1]))
+        return translate('OpenLP.core.lib', '%1 and %2',
+            'Locale list separator: 2 items').arg(stringlist[0], stringlist[1])
     else:
-        merged = unicode(translate('OpenLP.core.lib', '%1, and %2',
-            u'Locale list separator: end').arg(stringlist[-2], stringlist[-1]))
+        merged = translate('OpenLP.core.lib', '%1, and %2',
+            u'Locale list separator: end').arg(stringlist[-2], stringlist[-1])
         for index in reversed(range(1, len(stringlist) - 2)):
-            merged = unicode(translate('OpenLP.core.lib', '%1, %2',
-            u'Locale list separator: middle').arg(stringlist[index], merged))
-        return unicode(translate('OpenLP.core.lib', '%1, %2',
-            u'Locale list separator: start').arg(stringlist[0], merged))
+            merged = translate('OpenLP.core.lib', '%1, %2',
+            u'Locale list separator: middle').arg(stringlist[index], merged)
+        return translate('OpenLP.core.lib', '%1, %2',
+            u'Locale list separator: start').arg(stringlist[0], merged)
 
 
 from eventreceiver import Receiver

=== modified file 'openlp/core/lib/db.py'
--- openlp/core/lib/db.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/db.py	2012-12-05 21:02:22 +0000
@@ -41,10 +41,9 @@
 from sqlalchemy.orm import scoped_session, sessionmaker, mapper
 from sqlalchemy.pool import NullPool
 
-from openlp.core.lib import translate
+from openlp.core.lib import translate, Settings
 from openlp.core.lib.ui import critical_error_message_box
 from openlp.core.utils import AppLocation, delete_file
-from openlp.core.lib.settings import Settings
 
 log = logging.getLogger(__name__)
 
@@ -191,8 +190,7 @@
         self.db_url = u''
         self.is_dirty = False
         self.session = None
-        db_type = unicode(
-            settings.value(u'db type', QtCore.QVariant(u'sqlite')).toString())
+        db_type = settings.value(u'db type', u'sqlite')
         if db_type == u'sqlite':
             if db_file_name:
                 self.db_url = u'sqlite:///%s/%s' % (
@@ -203,13 +201,12 @@
                     AppLocation.get_section_data_path(plugin_name), plugin_name)
         else:
             self.db_url = u'%s://%s:%s@%s/%s' % (db_type,
-                urlquote(unicode(settings.value(u'db username').toString())),
-                urlquote(unicode(settings.value(u'db password').toString())),
-                urlquote(unicode(settings.value(u'db hostname').toString())),
-                urlquote(unicode(settings.value(u'db database').toString())))
+                urlquote(settings.value(u'db username', u'')),
+                urlquote(settings.value(u'db password', u'')),
+                urlquote(settings.value(u'db hostname', u'')),
+                urlquote(settings.value(u'db database', u'')))
             if db_type == u'mysql':
-                db_encoding = unicode(
-                    settings.value(u'db encoding', u'utf8').toString())
+                db_encoding = settings.value(u'db encoding', u'utf8')
                 self.db_url += u'?charset=%s' % urlquote(db_encoding)
         settings.endGroup()
         if upgrade_mod:
@@ -217,11 +214,11 @@
             if db_ver > up_ver:
                 critical_error_message_box(
                     translate('OpenLP.Manager', 'Database Error'),
-                    unicode(translate('OpenLP.Manager', 'The database being '
+                    translate('OpenLP.Manager', 'The database being '
                         'loaded was created in a more recent version of '
                         'OpenLP. The database is version %d, while OpenLP '
                         'expects version %d. The database will not be loaded.'
-                        '\n\nDatabase: %s')) % \
+                        '\n\nDatabase: %s') % \
                         (db_ver, up_ver, self.db_url)
                 )
                 return
@@ -231,8 +228,8 @@
             log.exception(u'Error loading database: %s', self.db_url)
             critical_error_message_box(
                 translate('OpenLP.Manager', 'Database Error'),
-                unicode(translate('OpenLP.Manager', 'OpenLP cannot load your '
-                    'database.\n\nDatabase: %s')) % self.db_url
+                translate('OpenLP.Manager', 'OpenLP cannot load your '
+                    'database.\n\nDatabase: %s') % self.db_url
             )
 
     def save_object(self, object_instance, commit=True):

=== modified file 'openlp/core/lib/formattingtags.py'
--- openlp/core/lib/formattingtags.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/formattingtags.py	2012-12-05 21:02:22 +0000
@@ -33,9 +33,7 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import translate
-from openlp.core.lib.settings import Settings
-
+from openlp.core.lib import translate, Settings
 
 class FormattingTags(object):
     """
@@ -72,7 +70,7 @@
                         tag[element] = tag[element].encode('utf8')
         # Formatting Tags were also known as display tags.
         Settings().setValue(u'displayTags/html_tags',
-            QtCore.QVariant(cPickle.dumps(tags) if tags else u''))
+            cPickle.dumps(tags) if tags else u'')
 
     @staticmethod
     def load_tags():
@@ -165,10 +163,9 @@
             u'end html': u'', u'protected': True, u'temporary': False})
         FormattingTags.add_html_tags(base_tags)
         FormattingTags.add_html_tags(temporary_tags)
+        # Formatting Tags were also known as display tags.
 
-        # Formatting Tags were also known as display tags.
-        user_expands = Settings().value(u'displayTags/html_tags',
-            QtCore.QVariant(u'')).toString()
+        user_expands = Settings().value(u'displayTags/html_tags', u'')
         # cPickle only accepts str not unicode strings
         user_expands_string = str(user_expands)
         if user_expands_string:

=== modified file 'openlp/core/lib/listwidgetwithdnd.py'
--- openlp/core/lib/listwidgetwithdnd.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/listwidgetwithdnd.py	2012-12-05 21:02:22 +0000
@@ -100,7 +100,7 @@
             event.accept()
             files = []
             for url in event.mimeData().urls():
-                localFile = unicode(url.toLocalFile())
+                localFile = url.toLocalFile()
                 if os.path.isfile(localFile):
                     files.append(localFile)
                 elif os.path.isdir(localFile):

=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/mediamanageritem.py	2012-12-05 21:02:22 +0000
@@ -36,11 +36,10 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import SettingsManager, OpenLPToolbar, ServiceItem, \
-    StringContent, build_icon, translate, Receiver, ListWidgetWithDnD
+    StringContent, build_icon, translate, Receiver, ListWidgetWithDnD, Settings
 from openlp.core.lib.searchedit import SearchEdit
 from openlp.core.lib.ui import UiStrings, create_widget_action, \
     critical_error_message_box
-from openlp.core.lib.settings import Settings
 
 log = logging.getLogger(__name__)
 
@@ -341,7 +340,7 @@
             self, self.onNewPrompt,
             SettingsManager.get_last_dir(self.settingsSection),
             self.onNewFileMasks)
-        log.info(u'New files(s) %s', unicode(files))
+        log.info(u'New files(s) %s', files)
         if files:
             Receiver.send_message(u'cursor_busy')
             self.validateAndLoad(files)
@@ -364,9 +363,8 @@
                     critical_error_message_box(
                         translate('OpenLP.MediaManagerItem',
                         'Invalid File Type'),
-                        unicode(translate('OpenLP.MediaManagerItem',
-                        'Invalid File %s.\nSuffix not supported'))
-                        % file)
+                        translate('OpenLP.MediaManagerItem',
+                        'Invalid File %s.\nSuffix not supported') % file)
                     error_shown = True
             else:
                 new_files.append(file)
@@ -384,9 +382,8 @@
         names = []
         full_list = []
         for count in range(self.listView.count()):
-            names.append(unicode(self.listView.item(count).text()))
-            full_list.append(unicode(self.listView.item(count).
-                data(QtCore.Qt.UserRole).toString()))
+            names.append(self.listView.item(count).text())
+            full_list.append(self.listView.item(count).data(QtCore.Qt.UserRole))
         duplicates_found = False
         files_added = False
         for file in files:
@@ -406,8 +403,8 @@
         if duplicates_found:
             critical_error_message_box(
                 UiStrings().Duplicate,
-                unicode(translate('OpenLP.MediaManagerItem',
-                'Duplicate files were found on import and were ignored.')))
+                translate('OpenLP.MediaManagerItem',
+                'Duplicate files were found on import and were ignored.'))
 
     def contextMenu(self, point):
         item = self.listView.itemAt(point)
@@ -426,7 +423,7 @@
         file_list = []
         while count < self.listView.count():
             bitem = self.listView.item(count)
-            filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
+            filename = bitem.data(QtCore.Qt.UserRole)
             file_list.append(filename)
             count += 1
         return file_list
@@ -467,8 +464,7 @@
         """
         Allows the list click action to be determined dynamically
         """
-        if Settings().value(u'advanced/double click live',
-            QtCore.QVariant(False)).toBool():
+        if Settings().value(u'advanced/double click live', False):
             self.onLiveClick()
         else:
             self.onPreviewClick()
@@ -478,8 +474,9 @@
         Allows the change of current item in the list to be actioned
         """
         if Settings().value(u'advanced/single click preview',
-            QtCore.QVariant(False)).toBool() and self.quickPreviewAllowed and \
-            self.listView.selectedIndexes() and self.autoSelectId == -1:
+            False) and self.quickPreviewAllowed \
+            and self.listView.selectedIndexes() \
+            and self.autoSelectId == -1:
             self.onPreviewClick(True)
 
     def onPreviewClick(self, keepFocus=False):
@@ -525,7 +522,7 @@
 
     def createItemFromId(self, item_id):
         item = QtGui.QListWidgetItem()
-        item.setData(QtCore.Qt.UserRole, QtCore.QVariant(item_id))
+        item.setData(QtCore.Qt.UserRole, item_id)
         return item
 
     def onAddClick(self):
@@ -578,8 +575,8 @@
                 QtGui.QMessageBox.information(self,
                     translate('OpenLP.MediaManagerItem',
                         'Invalid Service Item'),
-                    unicode(translate('OpenLP.MediaManagerItem',
-                        'You must select a %s service item.')) % self.title)
+                    translate('OpenLP.MediaManagerItem',
+                        'You must select a %s service item.') % self.title)
 
     def buildServiceItem(self, item=None, xmlVersion=False, remote=False):
         """
@@ -628,11 +625,11 @@
                 item = self.listView.currentItem()
                 if item is None:
                     return False
-                item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+                item_id = item.data(QtCore.Qt.UserRole)
             else:
                 item_id = remoteItem
         else:
-            item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = item.data(QtCore.Qt.UserRole)
         return item_id
 
     def saveAutoSelectId(self):
@@ -643,7 +640,7 @@
         if self.autoSelectId == -1:
             item = self.listView.currentItem()
             if item:
-                self.autoSelectId = item.data(QtCore.Qt.UserRole).toInt()[0]
+                self.autoSelectId = item.data(QtCore.Qt.UserRole)
 
     def search(self, string, showError=True):
         """

=== modified file 'openlp/core/lib/plugin.py'
--- openlp/core/lib/plugin.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/plugin.py	2012-12-05 21:02:22 +0000
@@ -33,8 +33,7 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import Receiver
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings
 from openlp.core.lib.ui import UiStrings
 from openlp.core.utils import get_application_version
 
@@ -194,16 +193,14 @@
         Sets the status of the plugin
         """
         self.status = Settings().value(
-            self.settingsSection + u'/status',
-            QtCore.QVariant(PluginStatus.Inactive)).toInt()[0]
+            self.settingsSection + u'/status', PluginStatus.Inactive)
 
     def toggleStatus(self, new_status):
         """
         Changes the status of the plugin and remembers it
         """
         self.status = new_status
-        Settings().setValue(
-            self.settingsSection + u'/status', QtCore.QVariant(self.status))
+        Settings().setValue(self.settingsSection + u'/status', self.status)
         if new_status == PluginStatus.Active:
             self.initialise()
         elif new_status == PluginStatus.Inactive:

=== modified file 'openlp/core/lib/searchedit.py'
--- openlp/core/lib/searchedit.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/searchedit.py	2012-12-05 21:02:22 +0000
@@ -123,7 +123,7 @@
         """
         menu = self.menuButton.menu()
         for action in menu.actions():
-            if identifier == action.data().toInt()[0]:
+            if identifier == action.data():
                 # setPlaceholderText has been implemented in Qt 4.7 and in at
                 # least PyQt 4.9 (I am not sure, if it was implemented in
                 # PyQt 4.8).
@@ -187,7 +187,7 @@
             A :class:`~PyQt4.QtCore.QString` instance which represents the text
             in the line edit.
         """
-        self.clearButton.setVisible(not text.isEmpty())
+        self.clearButton.setVisible(bool(text))
 
     def _onClearButtonClicked(self):
         """
@@ -211,7 +211,7 @@
         for action in self.menuButton.menu().actions():
             action.setChecked(False)
         self.menuButton.setDefaultAction(sender)
-        self._currentSearchType = sender.data().toInt()[0]
+        self._currentSearchType = sender.data()
         # setPlaceholderText has been implemented in Qt 4.7 and in at least
         # PyQt 4.9 (I am not sure, if it was implemented in PyQt 4.8).
         try:

=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py	2012-12-03 19:01:33 +0000
+++ openlp/core/lib/serviceitem.py	2012-12-05 21:02:22 +0000
@@ -492,12 +492,12 @@
         start = None
         end = None
         if self.start_time != 0:
-            start = unicode(translate('OpenLP.ServiceItem',
-                '<strong>Start</strong>: %s')) % \
+            start = translate('OpenLP.ServiceItem',
+                '<strong>Start</strong>: %s') % \
                 unicode(datetime.timedelta(seconds=self.start_time))
         if self.media_length != 0:
-            end = unicode(translate('OpenLP.ServiceItem',
-                '<strong>Length</strong>: %s')) % \
+            end = translate('OpenLP.ServiceItem',
+                '<strong>Length</strong>: %s') % \
                 unicode(datetime.timedelta(seconds=self.media_length))
         if not start and not end:
             return u''

=== removed file 'openlp/core/lib/settings.py'
--- openlp/core/lib/settings.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/settings.py	1970-01-01 00:00:00 +0000
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2012 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan      #
-# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub,      #
-# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer.   #
-# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru,          #
-# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith,             #
-# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock,              #
-# Frode Woldsund, Martin Zibricky, Patrick Zimmermann                         #
-# --------------------------------------------------------------------------- #
-# This program is free software; you can redistribute it and/or modify it     #
-# under the terms of the GNU General Public License as published by the Free  #
-# Software Foundation; version 2 of the License.                              #
-#                                                                             #
-# This program is distributed in the hope that it will be useful, but WITHOUT #
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
-# more details.                                                               #
-#                                                                             #
-# You should have received a copy of the GNU General Public License along     #
-# with this program; if not, write to the Free Software Foundation, Inc., 59  #
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
-###############################################################################
-"""
-The :mod:``settings`` module provides a thin wrapper for QSettings, which OpenLP
-uses to manage settings persistence.
-"""
-
-import logging
-
-from PyQt4 import QtCore
-
-log = logging.getLogger()
-
-class Settings(QtCore.QSettings):
-    """
-    Class to wrap QSettings.
-
-    * Exposes all the methods of QSettings.
-    * Adds functionality for OpenLP Portable. If the ``defaultFormat`` is set to
-      ``IniFormat``, and the path to the Ini file is set using ``setFilename``,
-      then the Settings constructor (without any arguments) will create a Settings
-      object for accessing settings stored in that Ini file.
-    """
-
-    __filePath = u''
-
-    @staticmethod
-    def setFilename(iniFile):
-        """
-        Sets the complete path to an Ini file to be used by Settings objects.
-
-        Does not affect existing Settings objects.
-        """
-        Settings.__filePath = iniFile
-
-    def __init__(self, *args):
-        if not args and Settings.__filePath and (Settings.defaultFormat() ==
-            Settings.IniFormat):
-            QtCore.QSettings.__init__(self, Settings.__filePath,
-                Settings.IniFormat)
-        else:
-            QtCore.QSettings.__init__(self, *args)

=== modified file 'openlp/core/lib/settingsmanager.py'
--- openlp/core/lib/settingsmanager.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/settingsmanager.py	2012-12-05 21:02:22 +0000
@@ -36,7 +36,7 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings
 from openlp.core.utils import AppLocation
 
 class SettingsManager(object):
@@ -61,9 +61,7 @@
             name = u'last directory %d' % num
         else:
             name = u'last directory'
-        last_dir = unicode(Settings().value(
-            section + u'/' + name, QtCore.QVariant(u'')).toString())
-        return last_dir
+        return Settings().value(section + u'/' + name, u'')
 
     @staticmethod
     def set_last_dir(section, directory, num=None):
@@ -84,8 +82,7 @@
             name = u'last directory %d' % num
         else:
             name = u'last directory'
-        Settings().setValue(
-            section + u'/' + name, QtCore.QVariant(directory))
+        Settings().setValue(section + u'/' + name, directory)
 
     @staticmethod
     def set_list(section, name, list):
@@ -103,13 +100,11 @@
         """
         settings = Settings()
         settings.beginGroup(section)
-        old_count = settings.value(
-            u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
+        old_count = settings.value(u'%s count' % name, 0)
         new_count = len(list)
-        settings.setValue(u'%s count' % name, QtCore.QVariant(new_count))
+        settings.setValue(u'%s count' % name, new_count)
         for counter in range(new_count):
-            settings.setValue(
-                u'%s %d' % (name, counter), QtCore.QVariant(list[counter-1]))
+            settings.setValue(u'%s %d' % (name, counter), list[counter - 1])
         if old_count > new_count:
             # Tidy up any old list items
             for counter in range(new_count, old_count):
@@ -129,13 +124,11 @@
         """
         settings = Settings()
         settings.beginGroup(section)
-        list_count = settings.value(
-            u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
+        list_count = settings.value(u'%s count' % name, 0)
         list = []
         if list_count:
             for counter in range(list_count):
-                item = unicode(
-                    settings.value(u'%s %d' % (name, counter)).toString())
+                item = settings.value(u'%s %d' % (name, counter), u'')
                 if item:
                     list.append(item)
         settings.endGroup()

=== modified file 'openlp/core/lib/spelltextedit.py'
--- openlp/core/lib/spelltextedit.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/spelltextedit.py	2012-12-05 21:02:22 +0000
@@ -102,7 +102,7 @@
         # Check if the selected word is misspelled and offer spelling
         # suggestions if it is.
         if ENCHANT_AVAILABLE and self.textCursor().hasSelection():
-            text = unicode(self.textCursor().selectedText())
+            text = self.textCursor().selectedText()
             if not self.dictionary.check(text):
                 spell_menu = QtGui.QMenu(translate('OpenLP.SpellTextEdit',
                     'Spelling Suggestions'))
@@ -202,5 +202,4 @@
 
     def __init__(self, *args):
         QtGui.QAction.__init__(self, *args)
-        self.triggered.connect(lambda x: self.correct.emit(
-            unicode(self.text())))
+        self.triggered.connect(lambda x: self.correct.emit(self.text()))

=== modified file 'openlp/core/lib/toolbar.py'
--- openlp/core/lib/toolbar.py	2012-12-01 07:57:54 +0000
+++ openlp/core/lib/toolbar.py	2012-12-05 21:02:22 +0000
@@ -68,7 +68,7 @@
         Add a widget and store it's handle under the widgets object name.
         """
         action = self.addWidget(widget)
-        self.actions[unicode(widget.objectName())] = action
+        self.actions[widget.objectName()] = action
 
     def setWidgetVisible(self, widgets, visible=True):
         """

=== modified file 'openlp/core/lib/ui.py'
--- openlp/core/lib/ui.py	2012-12-05 06:12:07 +0000
+++ openlp/core/lib/ui.py	2012-12-05 21:02:22 +0000
@@ -68,7 +68,7 @@
         self.CreateService = translate('OpenLP.Ui', 'Create a new service.')
         self.ConfirmDelete = translate('OpenLP.Ui', 'Confirm Delete')
         self.Continuous = translate('OpenLP.Ui', 'Continuous')
-        self.Default = unicode(translate('OpenLP.Ui', 'Default'))
+        self.Default = translate('OpenLP.Ui', 'Default')
         self.Delete = translate('OpenLP.Ui', '&Delete')
         self.DisplayStyle = translate('OpenLP.Ui', 'Display style:')
         self.Duplicate = translate('OpenLP.Ui', 'Duplicate Error')
@@ -134,7 +134,7 @@
         self.Split = translate('OpenLP.Ui', 'Optional &Split')
         self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two '
             'only if it does not fit on the screen as one slide.')
-        self.StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s'))
+        self.StartTimeCode = translate('OpenLP.Ui', 'Start %s')
         self.StopPlaySlidesInLoop = translate('OpenLP.Ui',
             'Stop Play Slides in Loop')
         self.StopPlaySlidesToEnd = translate('OpenLP.Ui',
@@ -373,7 +373,7 @@
         True in case the action will be considered a separator.
 
     ``data``
-        Data which is set as QVariant type.
+        The actions data.
 
     ``shortcuts``
         A QList<QKeySequence> (or a list of strings) which are set as shortcuts.
@@ -407,7 +407,7 @@
     if kwargs.pop(u'separator', False):
         action.setSeparator(True)
     if u'data' in kwargs:
-        action.setData(QtCore.QVariant(kwargs.pop(u'data')))
+        action.setData(kwargs.pop(u'data'))
     if kwargs.get(u'shortcuts'):
         action.setShortcuts(kwargs.pop(u'shortcuts'))
     if u'context' in kwargs:

=== modified file 'openlp/core/ui/aboutdialog.py'
--- openlp/core/ui/aboutdialog.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/aboutdialog.py	2012-12-05 21:02:22 +0000
@@ -158,7 +158,7 @@
         }
         documentors = [u'Wesley "wrst" Stout',
             u'John "jseagull1" Cegalis (lead)']
-        self.creditsTextEdit.setPlainText(unicode(translate('OpenLP.AboutForm',
+        self.creditsTextEdit.setPlainText(translate('OpenLP.AboutForm',
             'Project Lead\n'
             '    %s\n'
             '\n'
@@ -237,7 +237,7 @@
             '    God our Father, for sending His Son to die\n'
             '    on the cross, setting us free from sin. We\n'
             '    bring this software to you for free because\n'
-            '    He has set us free.')) % (lead, u'\n    '.join(developers),
+            '    He has set us free.') % (lead, u'\n    '.join(developers),
             u'\n    '.join(contributors), u'\n    '.join(testers),
             u'\n    '.join(packagers), u'\n        '.join(translators[u'af']),
             u'\n        '.join(translators[u'cs']),
@@ -264,9 +264,9 @@
         self.aboutNotebook.setTabText(
             self.aboutNotebook.indexOf(self.creditsTab),
             translate('OpenLP.AboutForm', 'Credits'))
-        copyright = unicode(translate('OpenLP.AboutForm',
+        copyright = translate('OpenLP.AboutForm',
             'Copyright \xa9 2004-2012 %s\n'
-            'Portions copyright \xa9 2004-2012 %s')) % (u'Raoul Snyman',
+            'Portions copyright \xa9 2004-2012 %s') % (u'Raoul Snyman',
             u'Tim Bentley, Gerald Britton, Jonathan Corwin, Samuel Findlay, '
             u'Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, '
             u'Armin K\xf6hler, Erik Lundin, Edwin Lunando, Joshua Miller, '

=== modified file 'openlp/core/ui/aboutform.py'
--- openlp/core/ui/aboutform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/aboutform.py	2012-12-05 21:02:22 +0000
@@ -49,7 +49,7 @@
         about_text = about_text.replace(u'<version>',
             applicationVersion[u'version'])
         if applicationVersion[u'build']:
-            build_text = unicode(translate('OpenLP.AboutForm', ' build %s')) % \
+            build_text = translate('OpenLP.AboutForm', ' build %s') % \
                 applicationVersion[u'build']
         else:
             build_text = u''

=== modified file 'openlp/core/ui/advancedtab.py'
--- openlp/core/ui/advancedtab.py	2012-12-05 06:13:34 +0000
+++ openlp/core/ui/advancedtab.py	2012-12-05 21:02:22 +0000
@@ -34,10 +34,11 @@
 import os
 import sys
 
+from openlp.core.lib import SettingsTab, translate, build_icon,  Receiver, \
+    Settings
+
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate, build_icon,  Receiver
-from openlp.core.lib.settings import Settings
 from openlp.core.lib.ui import UiStrings
 from openlp.core.utils import get_images_filter, AppLocation, format_time
 from openlp.core.lib import SlideLimits
@@ -59,12 +60,12 @@
         # 11 o'clock is the most popular time for morning service.
         self.defaultServiceHour = 11
         self.defaultServiceMinute = 0
-        self.defaultServiceName = unicode(translate('OpenLP.AdvancedTab',
+        self.defaultServiceName = translate('OpenLP.AdvancedTab',
             'Service %Y-%m-%d %H-%M',
             'This may not contain any of the following characters: '
             '/\\?*|<>\[\]":+\n'
             'See http://docs.python.org/library/datetime.html'
-            '#strftime-strptime-behavior for more information.'))
+            '#strftime-strptime-behavior for more information.')
         self.defaultImage = u':/graphics/openlp-splash-screen.png'
         self.defaultColor = u'#ffffff'
         self.dataExists = False
@@ -376,9 +377,9 @@
             translate('OpenLP.AdvancedTab', 'Name:'))
         self.serviceNameEdit.setToolTip(translate('OpenLP.AdvancedTab',
             'Consult the OpenLP manual for usage.'))
-        self.serviceNameRevertButton.setToolTip(unicode(
+        self.serviceNameRevertButton.setToolTip(
             translate('OpenLP.AdvancedTab',
-            'Revert to the default service name "%s".')) %
+            'Revert to the default service name "%s".') %
             self.defaultServiceName)
         self.serviceNameExampleLabel.setText(translate('OpenLP.AdvancedTab',
             'Example:'))
@@ -448,40 +449,37 @@
         # The max recent files value does not have an interface and so never
         # gets actually stored in the settings therefore the default value of
         # 20 will always be used.
-        self.recentSpinBox.setMaximum(Settings().value(
-            u'max recent files', QtCore.QVariant(20)).toInt()[0])
-        self.recentSpinBox.setValue(settings.value(u'recent file count',
-            QtCore.QVariant(4)).toInt()[0])
+        self.recentSpinBox.setMaximum(settings.value(u'max recent files', 20))
+        self.recentSpinBox.setValue(settings.value(u'recent file count', 4))
         self.mediaPluginCheckBox.setChecked(
-            settings.value(u'save current plugin',
-            QtCore.QVariant(False)).toBool())
+            settings.value(u'save current plugin', False))
         self.doubleClickLiveCheckBox.setChecked(
-            settings.value(u'double click live',
-            QtCore.QVariant(False)).toBool())
+            settings.value(u'double click live', False))
         self.singleClickPreviewCheckBox.setChecked(
-            settings.value(u'single click preview',
-            QtCore.QVariant(False)).toBool())
+            settings.value(u'single click preview', False))
         self.expandServiceItemCheckBox.setChecked(
-            settings.value(u'expand service item',
-            QtCore.QVariant(False)).toBool())
+            settings.value(u'expand service item', False))
         self.enableAutoCloseCheckBox.setChecked(
+<<<<<<< TREE
             settings.value(u'enable exit confirmation',
             QtCore.QVariant(True)).toBool())
         self.hideMouseCheckBox.setChecked(
             settings.value(u'hide mouse', QtCore.QVariant(True)).toBool())
+=======
+            settings.value(u'enable exit confirmation', True))
+        self.hideMouseCheckBox.setChecked(settings.value(u'hide mouse', False))
+>>>>>>> MERGE-SOURCE
         self.serviceNameDay.setCurrentIndex(
-            settings.value(u'default service day',
-            QtCore.QVariant(self.defaultServiceDay)).toInt()[0])
+            settings.value(u'default service day', self.defaultServiceDay))
         self.serviceNameTime.setTime(QtCore.QTime(
-            settings.value(u'default service hour',
-            self.defaultServiceHour).toInt()[0],
+            settings.value(u'default service hour', self.defaultServiceHour),
             settings.value(u'default service minute',
-            self.defaultServiceMinute).toInt()[0]))
+            self.defaultServiceMinute)))
         self.shouldUpdateServiceNameExample = True
         self.serviceNameEdit.setText(settings.value(u'default service name',
-            self.defaultServiceName).toString())
-        default_service_enabled = settings.value(u'default service enabled',
-            QtCore.QVariant(True)).toBool()
+            self.defaultServiceName))
+        default_service_enabled = settings.value(
+            u'default service enabled', True)
         self.serviceNameCheckBox.setChecked(default_service_enabled)
         self.serviceNameCheckBoxToggled(default_service_enabled)
         # Fix for bug #1014422.
@@ -490,14 +488,18 @@
             # Default to False on Gnome.
             x11_bypass_default = bool(not
                 os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
-        self.x11BypassCheckBox.setChecked(settings.value(
-            u'x11 bypass wm', QtCore.QVariant(x11_bypass_default)).toBool())
-        self.defaultColor = settings.value(u'default color',
-            QtCore.QVariant(u'#ffffff')).toString()
+        self.x11BypassCheckBox.setChecked(
+            settings.value(u'x11 bypass wm', x11_bypass_default))
+        self.defaultColor = settings.value(u'default color', u'#ffffff')
         self.defaultFileEdit.setText(settings.value(u'default image',
+<<<<<<< TREE
             QtCore.QVariant(u':/graphics/openlp-splash-screen.png')).toString())
         self.slide_limits = settings.value(
             u'slide limits', QtCore.QVariant(SlideLimits.End)).toInt()[0]
+=======
+            u':/graphics/openlp-splash-screen.png'))
+        self.slide_limits = settings.value(u'slide limits', SlideLimits.End)
+>>>>>>> MERGE-SOURCE
         if self.slide_limits == SlideLimits.End:
             self.endSlideRadioButton.setChecked(True)
         elif self.slide_limits == SlideLimits.Wrap:
@@ -541,8 +543,7 @@
         self.defaultColorButton.setStyleSheet(
             u'background-color: %s' % self.defaultColor)
         # Don't allow data directory move if running portable.
-        if Settings().value(u'advanced/is portable',
-            QtCore.QVariant(False)).toBool():
+        if settings.value(u'advanced/is portable', False):
             self.dataDirectoryGroupBox.hide()
 
     def save(self):
@@ -553,7 +554,7 @@
         settings.beginGroup(self.settingsSection)
         settings.setValue(u'default service enabled',
             self.serviceNameCheckBox.isChecked())
-        service_name = unicode(self.serviceNameEdit.text())
+        service_name = self.serviceNameEdit.text()
         preset_is_valid = self.generateServiceNameExample()[0]
         if service_name == self.defaultServiceName or not preset_is_valid:
             settings.remove(u'default service name')
@@ -566,25 +567,22 @@
             self.serviceNameTime.time().hour())
         settings.setValue(u'default service minute',
             self.serviceNameTime.time().minute())
-        settings.setValue(u'recent file count',
-            QtCore.QVariant(self.recentSpinBox.value()))
+        settings.setValue(u'recent file count', self.recentSpinBox.value())
         settings.setValue(u'save current plugin',
-            QtCore.QVariant(self.mediaPluginCheckBox.isChecked()))
+            self.mediaPluginCheckBox.isChecked())
         settings.setValue(u'double click live',
-            QtCore.QVariant(self.doubleClickLiveCheckBox.isChecked()))
+            self.doubleClickLiveCheckBox.isChecked())
         settings.setValue(u'single click preview',
-            QtCore.QVariant(self.singleClickPreviewCheckBox.isChecked()))
+            self.singleClickPreviewCheckBox.isChecked())
         settings.setValue(u'expand service item',
-            QtCore.QVariant(self.expandServiceItemCheckBox.isChecked()))
+            self.expandServiceItemCheckBox.isChecked())
         settings.setValue(u'enable exit confirmation',
-            QtCore.QVariant(self.enableAutoCloseCheckBox.isChecked()))
-        settings.setValue(u'hide mouse',
-            QtCore.QVariant(self.hideMouseCheckBox.isChecked()))
-        settings.setValue(u'x11 bypass wm',
-            QtCore.QVariant(self.x11BypassCheckBox.isChecked()))
+            self.enableAutoCloseCheckBox.isChecked())
+        settings.setValue(u'hide mouse', self.hideMouseCheckBox.isChecked())
+        settings.setValue(u'x11 bypass wm', self.x11BypassCheckBox.isChecked())
         settings.setValue(u'default color', self.defaultColor)
         settings.setValue(u'default image', self.defaultFileEdit.text())
-        settings.setValue(u'slide limits', QtCore.QVariant(self.slide_limits))
+        settings.setValue(u'slide limits', self.slide_limits)
         settings.endGroup()
         if self.displayChanged:
             Receiver.send_message(u'config_screen_changed')

=== modified file 'openlp/core/ui/exceptionform.py'
--- openlp/core/ui/exceptionform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/exceptionform.py	2012-12-05 21:02:22 +0000
@@ -112,10 +112,10 @@
 
     def _createReport(self):
         openlp_version = get_application_version()
-        description = unicode(self.descriptionTextEdit.toPlainText())
-        traceback = unicode(self.exceptionTextEdit.toPlainText())
-        system = unicode(translate('OpenLP.ExceptionForm',
-            'Platform: %s\n')) % platform.platform()
+        description = self.descriptionTextEdit.toPlainText()
+        traceback = self.exceptionTextEdit.toPlainText()
+        system = translate('OpenLP.ExceptionForm',
+            'Platform: %s\n') % platform.platform()
         libraries = u'Python: %s\n' % platform.python_version() + \
             u'Qt4: %s\n' % Qt.qVersion() + \
             u'Phonon: %s\n' % PHONON_VERSION + \
@@ -141,13 +141,13 @@
         """
         Saving exception log and system informations to a file.
         """
-        report_text = unicode(translate('OpenLP.ExceptionForm',
+        report_text = translate('OpenLP.ExceptionForm',
             '**OpenLP Bug Report**\n'
             'Version: %s\n\n'
             '--- Details of the Exception. ---\n\n%s\n\n '
             '--- Exception Traceback ---\n%s\n'
             '--- System information ---\n%s\n'
-            '--- Library Versions ---\n%s\n'))
+            '--- Library Versions ---\n%s\n')
         filename = QtGui.QFileDialog.getSaveFileName(self,
             translate('OpenLP.ExceptionForm', 'Save Crash Report'),
             SettingsManager.get_last_dir(self.settingsSection),
@@ -178,7 +178,7 @@
         Opening systems default email client and inserting exception log and
         system informations.
         """
-        body = unicode(translate('OpenLP.ExceptionForm',
+        body = translate('OpenLP.ExceptionForm',
             '*OpenLP Bug Report*\n'
             'Version: %s\n\n'
             '--- Details of the Exception. ---\n\n%s\n\n '
@@ -186,7 +186,7 @@
             '--- System information ---\n%s\n'
             '--- Library Versions ---\n%s\n',
             'Please add the information that bug reports are favoured written '
-            'in English.'))
+            'in English.')
         content = self._createReport()
         source = u''
         exception = u''
@@ -211,13 +211,12 @@
         else:
             self.__buttonState(False)
         self.descriptionWordCount.setText(
-            unicode(translate('OpenLP.ExceptionDialog',
-            'Description characters to enter : %s')) % count)
+            translate('OpenLP.ExceptionDialog',
+            'Description characters to enter : %s') % count)
 
     def onAttachFileButtonClicked(self):
         files = QtGui.QFileDialog.getOpenFileName(
-            self,translate('ImagePlugin.ExceptionDialog',
-            'Select Attachment'),
+            self, translate('ImagePlugin.ExceptionDialog', 'Select Attachment'),
             SettingsManager.get_last_dir(u'exceptions'),
             u'%s (*.*) (*)' % UiStrings().AllFiles)
         log.info(u'New files(s) %s', unicode(files))

=== modified file 'openlp/core/ui/firsttimeform.py'
--- openlp/core/ui/firsttimeform.py	2012-12-05 06:12:07 +0000
+++ openlp/core/ui/firsttimeform.py	2012-12-05 21:02:22 +0000
@@ -40,8 +40,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import translate, PluginStatus, Receiver, build_icon, \
-    check_directory_exists
-from openlp.core.lib.settings import Settings
+    check_directory_exists, Settings
 from openlp.core.utils import get_web_page, AppLocation, get_filesystem_encoding
 from firsttimewizard import Ui_FirstTimeWizard, FirstTimePage
 
@@ -69,7 +68,7 @@
                 os.path.join(unicode(gettempdir(), get_filesystem_encoding()),
                 u'openlp', screenshot))
             item = QtGui.QListWidgetItem(title, self.parent().themesListWidget)
-            item.setData(QtCore.Qt.UserRole, QtCore.QVariant(filename))
+            item.setData(QtCore.Qt.UserRole, filename)
             item.setCheckState(QtCore.Qt.Unchecked)
             item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
 
@@ -94,8 +93,8 @@
             self.config.readfp(io.BytesIO(files))
         self.updateScreenListCombo()
         self.downloadCancelled = False
-        self.downloading = unicode(translate('OpenLP.FirstTimeWizard',
-            'Downloading %s...'))
+        self.downloading = translate('OpenLP.FirstTimeWizard',
+            'Downloading %s...')
         QtCore.QObject.connect(self.cancelButton, QtCore.SIGNAL('clicked()'),
             self.onCancelButtonClicked)
         QtCore.QObject.connect(self.noInternetFinishButton,
@@ -121,8 +120,7 @@
             unicode(gettempdir(), get_filesystem_encoding()), u'openlp'))
         self.noInternetFinishButton.setVisible(False)
         # Check if this is a re-run of the wizard.
-        self.hasRunWizard = Settings().value(
-            u'general/has run wizard', QtCore.QVariant(False)).toBool()
+        self.hasRunWizard = Settings().value(u'general/has run wizard', False)
         # Sort out internet access for downloads
         if self.webAccess:
             songs = self.config.get(u'songs', u'languages')
@@ -133,7 +131,7 @@
                 filename = unicode(self.config.get(
                     u'songs_%s' % song, u'filename'), u'utf8')
                 item = QtGui.QListWidgetItem(title, self.songsListWidget)
-                item.setData(QtCore.Qt.UserRole, QtCore.QVariant(filename))
+                item.setData(QtCore.Qt.UserRole, filename)
                 item.setCheckState(QtCore.Qt.Unchecked)
                 item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
             bible_languages = self.config.get(u'bibles', u'languages')
@@ -142,7 +140,7 @@
                 language = unicode(self.config.get(
                     u'bibles_%s' % lang, u'title'), u'utf8')
                 langItem = QtGui.QTreeWidgetItem(
-                    self.biblesTreeWidget, QtCore.QStringList(language))
+                    self.biblesTreeWidget, [language])
                 bibles = self.config.get(u'bibles_%s' % lang, u'translations')
                 bibles = bibles.split(u',')
                 for bible in bibles:
@@ -150,10 +148,8 @@
                         u'bible_%s' % bible, u'title'), u'utf8')
                     filename = unicode(self.config.get(
                         u'bible_%s' % bible, u'filename'))
-                    item = QtGui.QTreeWidgetItem(
-                        langItem, QtCore.QStringList(title))
-                    item.setData(0, QtCore.Qt.UserRole,
-                        QtCore.QVariant(filename))
+                    item = QtGui.QTreeWidgetItem(langItem, [title])
+                    item.setData(0, QtCore.Qt.UserRole, filename)
                     item.setCheckState(0, QtCore.Qt.Unchecked)
                     item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
             self.biblesTreeWidget.expandAll()
@@ -217,9 +213,7 @@
                     index = self.themeComboBox.findText(theme)
                     if index == -1:
                         self.themeComboBox.addItem(theme)
-                default_theme = unicode(Settings().value(
-                    u'themes/global theme',
-                    QtCore.QVariant(u'')).toString())
+                default_theme = Settings().value(u'themes/global theme', u'')
                 # Pre-select the current default theme.
                 index = self.themeComboBox.findText(default_theme)
                 self.themeComboBox.setCurrentIndex(index)
@@ -271,7 +265,11 @@
         self._performWizard()
         Receiver.send_message(u'cursor_normal')
         Receiver.send_message(u'openlp_process_events')
+<<<<<<< TREE
         Settings().setValue(u'general/has run wizard', QtCore.QVariant(True))
+=======
+        Settings().setValue(u'general/has run wizard', True)
+>>>>>>> MERGE-SOURCE
         self.close()
 
     def urlGetFile(self, url, fpath):
@@ -308,7 +306,7 @@
             screenshot = self.config.get(u'theme_%s' % theme, u'screenshot')
             for index in xrange(self.themesListWidget.count()):
                 item = self.themesListWidget.item(index)
-                if item.data(QtCore.Qt.UserRole) == QtCore.QVariant(filename):
+                if item.data(QtCore.Qt.UserRole) == filename:
                     break
             item.setIcon(build_icon(os.path.join(unicode(gettempdir(),
                 get_filesystem_encoding()), u'openlp', screenshot)))
@@ -351,7 +349,7 @@
             Receiver.send_message(u'openlp_process_events')
             item = self.songsListWidget.item(i)
             if item.checkState() == QtCore.Qt.Checked:
-                filename = item.data(QtCore.Qt.UserRole).toString()
+                filename = item.data(QtCore.Qt.UserRole)
                 size = self._getFileSize(u'%s%s' % (self.web, filename))
                 self.max_progress += size
         # Loop through the Bibles list and increase for each selected item
@@ -360,7 +358,7 @@
             Receiver.send_message(u'openlp_process_events')
             item = iterator.value()
             if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
-                filename = item.data(0, QtCore.Qt.UserRole).toString()
+                filename = item.data(0, QtCore.Qt.UserRole)
                 size = self._getFileSize(u'%s%s' % (self.web, filename))
                 self.max_progress += size
             iterator += 1
@@ -369,7 +367,7 @@
             Receiver.send_message(u'openlp_process_events')
             item = self.themesListWidget.item(i)
             if item.checkState() == QtCore.Qt.Checked:
-                filename = item.data(QtCore.Qt.UserRole).toString()
+                filename = item.data(QtCore.Qt.UserRole)
                 size = self._getFileSize(u'%s%s' % (self.web, filename))
                 self.max_progress += size
         if self.max_progress:
@@ -450,7 +448,7 @@
             for i in xrange(self.songsListWidget.count()):
                 item = self.songsListWidget.item(i)
                 if item.checkState() == QtCore.Qt.Checked:
-                    filename = item.data(QtCore.Qt.UserRole).toString()
+                    filename = item.data(QtCore.Qt.UserRole)
                     self._incrementProgressBar(self.downloading % filename, 0)
                     self.previous_size = 0
                     destination = os.path.join(songs_destination,
@@ -462,7 +460,7 @@
             while bibles_iterator.value():
                 item = bibles_iterator.value()
                 if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
-                    bible = unicode(item.data(0, QtCore.Qt.UserRole).toString())
+                    bible = item.data(0, QtCore.Qt.UserRole)
                     self._incrementProgressBar(self.downloading % bible, 0)
                     self.previous_size = 0
                     self.urlGetFile(u'%s%s' % (self.web, bible),
@@ -472,7 +470,7 @@
             for i in xrange(self.themesListWidget.count()):
                 item = self.themesListWidget.item(i)
                 if item.checkState() == QtCore.Qt.Checked:
-                    theme = unicode(item.data(QtCore.Qt.UserRole).toString())
+                    theme = item.data(QtCore.Qt.UserRole)
                     self._incrementProgressBar(self.downloading % theme, 0)
                     self.previous_size = 0
                     self.urlGetFile(u'%s%s' % (self.web, theme),
@@ -480,15 +478,15 @@
         # Set Default Display
         if self.displayComboBox.currentIndex() != -1:
             Settings().setValue(u'General/monitor',
-                QtCore.QVariant(self.displayComboBox.currentIndex()))
+                self.displayComboBox.currentIndex())
             self.screens.set_current_display(
                 self.displayComboBox.currentIndex())
         # Set Global Theme
         if self.themeComboBox.currentIndex() != -1:
             Settings().setValue(u'themes/global theme',
-                QtCore.QVariant(self.themeComboBox.currentText()))
+                self.themeComboBox.currentText())
 
     def _setPluginStatus(self, field, tag):
         status = PluginStatus.Active if field.checkState() \
             == QtCore.Qt.Checked else PluginStatus.Inactive
-        Settings().setValue(tag, QtCore.QVariant(status))
+        Settings().setValue(tag, status)

=== modified file 'openlp/core/ui/formattingtagform.py'
--- openlp/core/ui/formattingtagform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/formattingtagform.py	2012-12-05 21:02:22 +0000
@@ -160,18 +160,18 @@
         html_expands = FormattingTags.get_html_tags()
         if self.selected != -1:
             html = html_expands[self.selected]
-            tag = unicode(self.tagLineEdit.text())
+            tag = self.tagLineEdit.text()
             for linenumber, html1 in enumerate(html_expands):
                 if self._strip(html1[u'start tag']) == tag and \
                     linenumber != self.selected:
                     critical_error_message_box(
                         translate('OpenLP.FormattingTagForm', 'Update Error'),
-                        unicode(translate('OpenLP.FormattingTagForm',
-                        'Tag %s already defined.')) % tag)
+                        translate('OpenLP.FormattingTagForm',
+                        'Tag %s already defined.') % tag)
                     return
-            html[u'desc'] = unicode(self.descriptionLineEdit.text())
-            html[u'start html'] = unicode(self.startTagLineEdit.text())
-            html[u'end html'] = unicode(self.endTagLineEdit.text())
+            html[u'desc'] = self.descriptionLineEdit.text()
+            html[u'start html'] = self.startTagLineEdit.text()
+            html[u'end html'] = self.endTagLineEdit.text()
             html[u'start tag'] = u'{%s}' % tag
             html[u'end tag'] = u'{/%s}' % tag
             # Keep temporary tags when the user changes one.

=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/generaltab.py	2012-12-05 21:02:22 +0000
@@ -30,9 +30,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, Receiver, translate
+from openlp.core.lib import Receiver, Settings, SettingsTab, translate
 from openlp.core.lib.ui import UiStrings
-from openlp.core.lib.settings import Settings
 from openlp.core.ui import ScreenList
 
 log = logging.getLogger(__name__)
@@ -272,49 +271,41 @@
         settings.beginGroup(self.settingsSection)
         self.monitorComboBox.clear()
         self.monitorComboBox.addItems(self.screens.get_screen_list())
-        monitorNumber = settings.value(u'monitor',
-            QtCore.QVariant(self.screens.display_count - 1)).toInt()[0]
+        monitorNumber = settings.value(
+            u'monitor', self.screens.display_count - 1)
         self.monitorComboBox.setCurrentIndex(monitorNumber)
-        self.numberEdit.setText(unicode(settings.value(
-            u'ccli number', QtCore.QVariant(u'')).toString()))
-        self.usernameEdit.setText(unicode(settings.value(
-            u'songselect username', QtCore.QVariant(u'')).toString()))
-        self.passwordEdit.setText(unicode(settings.value(
-            u'songselect password', QtCore.QVariant(u'')).toString()))
+        self.numberEdit.setText(settings.value(u'ccli number', u''))
+        self.usernameEdit.setText(settings.value(u'songselect username', u''))
+        self.passwordEdit.setText(settings.value(u'songselect password', u''))
         self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt',
-            QtCore.QVariant(False)).toBool())
+            False))
         self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank',
-            QtCore.QVariant(False)).toBool())
+            False))
         self.displayOnMonitorCheck.setChecked(self.screens.display)
-        self.warningCheckBox.setChecked(settings.value(u'blank warning',
-            QtCore.QVariant(False)).toBool())
-        self.autoOpenCheckBox.setChecked(settings.value(u'auto open',
-            QtCore.QVariant(False)).toBool())
-        self.showSplashCheckBox.setChecked(settings.value(u'show splash',
-            QtCore.QVariant(True)).toBool())
+        self.warningCheckBox.setChecked(settings.value(u'blank warning', False))
+        self.autoOpenCheckBox.setChecked(settings.value(u'auto open', False))
+        self.showSplashCheckBox.setChecked(settings.value(u'show splash', True))
         self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check',
-            QtCore.QVariant(True)).toBool())
+            True))
         self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview',
-            QtCore.QVariant(False)).toBool())
-        self.timeoutSpinBox.setValue(settings.value(u'loop delay',
-           QtCore.QVariant(5)).toInt()[0])
+            False))
+        self.timeoutSpinBox.setValue(settings.value(u'loop delay', 5))
         self.monitorRadioButton.setChecked(
-            not settings.value(u'override position',
-            QtCore.QVariant(False)).toBool())
+            not settings.value(u'override position', False))
         self.overrideRadioButton.setChecked(settings.value(u'override position',
-            QtCore.QVariant(False)).toBool())
+            False))
         self.customXValueEdit.setValue(settings.value(u'x position',
-            QtCore.QVariant(self.screens.current[u'size'].x())).toInt()[0])
+            self.screens.current[u'size'].x()))
         self.customYValueEdit.setValue(settings.value(u'y position',
-            QtCore.QVariant(self.screens.current[u'size'].y())).toInt()[0])
+            self.screens.current[u'size'].y()))
         self.customHeightValueEdit.setValue(settings.value(u'height',
-            QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0])
+            self.screens.current[u'size'].height()))
         self.customWidthValueEdit.setValue(settings.value(u'width',
-            QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0])
+            self.screens.current[u'size'].width()))
         self.startPausedCheckBox.setChecked(settings.value(
-            u'audio start paused', QtCore.QVariant(True)).toBool())
+            u'audio start paused', True))
         self.repeatListCheckBox.setChecked(settings.value(
-            u'audio repeat list', QtCore.QVariant(False)).toBool())
+            u'audio repeat list', False))
         settings.endGroup()
         self.monitorComboBox.setDisabled(self.overrideRadioButton.isChecked())
         self.customXValueEdit.setEnabled(self.overrideRadioButton.isChecked())
@@ -332,46 +323,34 @@
         """
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        settings.setValue(u'monitor',
-            QtCore.QVariant(self.monitorComboBox.currentIndex()))
+        settings.setValue(u'monitor', self.monitorComboBox.currentIndex())
         settings.setValue(u'display on monitor',
-            QtCore.QVariant(self.displayOnMonitorCheck.isChecked()))
-        settings.setValue(u'blank warning',
-            QtCore.QVariant(self.warningCheckBox.isChecked()))
-        settings.setValue(u'auto open',
-            QtCore.QVariant(self.autoOpenCheckBox.isChecked()))
-        settings.setValue(u'show splash',
-            QtCore.QVariant(self.showSplashCheckBox.isChecked()))
+            self.displayOnMonitorCheck.isChecked())
+        settings.setValue(u'blank warning', self.warningCheckBox.isChecked())
+        settings.setValue(u'auto open', self.autoOpenCheckBox.isChecked())
+        settings.setValue(u'show splash', self.showSplashCheckBox.isChecked())
         settings.setValue(u'update check',
-            QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked()))
+            self.checkForUpdatesCheckBox.isChecked())
         settings.setValue(u'save prompt',
-            QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked()))
-        settings.setValue(u'auto unblank',
-            QtCore.QVariant(self.autoUnblankCheckBox.isChecked()))
-        settings.setValue(u'auto preview',
-            QtCore.QVariant(self.autoPreviewCheckBox.isChecked()))
-        settings.setValue(u'loop delay',
-            QtCore.QVariant(self.timeoutSpinBox.value()))
-        settings.setValue(u'ccli number',
-            QtCore.QVariant(self.numberEdit.displayText()))
+            self.saveCheckServiceCheckBox.isChecked())
+        settings.setValue(u'auto unblank', self.autoUnblankCheckBox.isChecked())
+        settings.setValue(u'auto preview', self.autoPreviewCheckBox.isChecked())
+        settings.setValue(u'loop delay', self.timeoutSpinBox.value())
+        settings.setValue(u'ccli number', self.numberEdit.displayText())
         settings.setValue(u'songselect username',
-            QtCore.QVariant(self.usernameEdit.displayText()))
+            self.usernameEdit.displayText())
         settings.setValue(u'songselect password',
-            QtCore.QVariant(self.passwordEdit.displayText()))
-        settings.setValue(u'x position',
-            QtCore.QVariant(self.customXValueEdit.value()))
-        settings.setValue(u'y position',
-            QtCore.QVariant(self.customYValueEdit.value()))
-        settings.setValue(u'height',
-            QtCore.QVariant(self.customHeightValueEdit.value()))
-        settings.setValue(u'width',
-            QtCore.QVariant(self.customWidthValueEdit.value()))
+            self.passwordEdit.displayText())
+        settings.setValue(u'x position', self.customXValueEdit.value())
+        settings.setValue(u'y position', self.customYValueEdit.value())
+        settings.setValue(u'height', self.customHeightValueEdit.value())
+        settings.setValue(u'width', self.customWidthValueEdit.value())
         settings.setValue(u'override position',
-            QtCore.QVariant(self.overrideRadioButton.isChecked()))
+            self.overrideRadioButton.isChecked())
         settings.setValue(u'audio start paused',
-            QtCore.QVariant(self.startPausedCheckBox.isChecked()))
+            self.startPausedCheckBox.isChecked())
         settings.setValue(u'audio repeat list',
-            QtCore.QVariant(self.repeatListCheckBox.isChecked()))
+            self.repeatListCheckBox.isChecked())
         settings.endGroup()
         # On save update the screens as well
         self.postSetUp(True)

=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py	2012-12-05 06:13:34 +0000
+++ openlp/core/ui/maindisplay.py	2012-12-05 21:02:22 +0000
@@ -39,9 +39,8 @@
 from PyQt4.phonon import Phonon
 
 from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \
-    translate, PluginManager, expand_tags, ImageSource
+    translate, PluginManager, expand_tags, Settings, ImageSource
 from openlp.core.lib.theme import BackgroundType
-from openlp.core.lib.settings import Settings
 
 from openlp.core.ui import HideMode, ScreenList, AlertLocation
 
@@ -143,8 +142,7 @@
             # Default to False on Gnome.
             x11_bypass_default = bool(not
                 os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
-        if Settings().value(u'advanced/x11 bypass wm',
-            QtCore.QVariant(x11_bypass_default)).toBool():
+        if Settings().value(u'advanced/x11 bypass wm', x11_bypass_default):
             windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
         # TODO: The following combination of windowFlags works correctly
         # on Mac OS X. For next OpenLP version we should test it on other
@@ -211,13 +209,11 @@
             # Build the initial frame.
             background_color = QtGui.QColor()
             background_color.setNamedColor(Settings().value(
-                u'advanced/default color',
-                QtCore.QVariant(u'#ffffff')).toString())
+                u'advanced/default color', u'#ffffff'))
             if not background_color.isValid():
                 background_color = QtCore.Qt.white
             image_file = Settings().value(u'advanced/default image',
-                QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\
-                .toString()
+                u':/graphics/openlp-splash-screen.png')
             splash_image = QtGui.QImage(image_file)
             self.initialFrame = QtGui.QImage(
                 self.screen[u'size'].width(),
@@ -287,7 +283,7 @@
         height = self.frame.evaluateJavaScript(js)
         if shrink:
             if text:
-                alert_height = int(height.toString())
+                alert_height = int(height)
                 self.resize(self.width(), alert_height)
                 self.setVisible(True)
                 if location == AlertLocation.Middle:
@@ -367,7 +363,7 @@
             if self.serviceItem.themedata and \
                 self.serviceItem.themedata.display_slide_transition:
                 while self.frame.evaluateJavaScript(u'show_text_complete()') \
-                    .toString() == u'false':
+                     == u'false':
                     Receiver.send_message(u'openlp_process_events')
         # Wait for the webview to update before getting the preview.
         # Important otherwise first preview will miss the background !
@@ -381,8 +377,7 @@
                 # Single screen active
                 if self.screens.display_count == 1:
                     # Only make visible if setting enabled.
-                    if Settings().value(u'general/display on monitor',
-                        QtCore.QVariant(True)).toBool():
+                    if Settings().value(u'general/display on monitor', True):
                         self.setVisible(True)
                 else:
                     self.setVisible(True)
@@ -433,8 +428,7 @@
             self.footer(serviceItem.foot_text)
         # if was hidden keep it hidden
         if self.hideMode and self.isLive and not serviceItem.is_media():
-            if Settings().value(u'general/auto unblank',
-                QtCore.QVariant(False)).toBool():
+            if Settings().value(u'general/auto unblank', False):
                 Receiver.send_message(u'slidecontroller_live_unblank')
             else:
                 self.hideDisplay(self.hideMode)
@@ -457,8 +451,7 @@
         log.debug(u'hideDisplay mode = %d', mode)
         if self.screens.display_count == 1:
             # Only make visible if setting enabled.
-            if not Settings().value(u'general/display on monitor',
-                QtCore.QVariant(True)).toBool():
+            if not Settings().value(u'general/display on monitor', True):
                 return
         if mode == HideMode.Screen:
             self.frame.evaluateJavaScript(u'show_blank("desktop");')
@@ -482,8 +475,7 @@
         log.debug(u'showDisplay')
         if self.screens.display_count == 1:
             # Only make visible if setting enabled.
-            if not Settings().value(u'general/display on monitor',
-                QtCore.QVariant(True)).toBool():
+            if not Settings().value(u'general/display on monitor', True):
                 return
         self.frame.evaluateJavaScript('show_blank("show");')
         if self.isHidden():
@@ -497,8 +489,12 @@
         """
         Hide mouse cursor when moved over display.
         """
+<<<<<<< TREE
         if Settings().value(u'advanced/hide mouse',
             QtCore.QVariant(True)).toBool():
+=======
+        if Settings().value(u'advanced/hide mouse', False):
+>>>>>>> MERGE-SOURCE
             self.setCursor(QtCore.Qt.BlankCursor)
             self.frame.evaluateJavaScript('document.body.style.cursor = "none"')
         else:

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/mainwindow.py	2012-12-05 21:02:22 +0000
@@ -42,8 +42,7 @@
 from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \
     PluginManager, Receiver, translate, ImageManager, PluginStatus
 from openlp.core.lib.ui import UiStrings, create_action
-from openlp.core.lib.settings import Settings
-from openlp.core.lib import SlideLimits
+from openlp.core.lib import SlideLimits, Settings
 from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \
     ThemeManager, SlideController, PluginForm, MediaDockManager, \
     ShortcutListForm, FormattingTagForm
@@ -105,13 +104,10 @@
         # Create slide controllers
         self.previewController = SlideController(self)
         self.liveController = SlideController(self, True)
-        previewVisible = Settings().value(
-            u'user interface/preview panel', QtCore.QVariant(True)).toBool()
+        previewVisible = Settings().value(u'user interface/preview panel', True)
         self.previewController.panel.setVisible(previewVisible)
-        liveVisible = Settings().value(u'user interface/live panel',
-            QtCore.QVariant(True)).toBool()
-        panelLocked = Settings().value(u'user interface/lock panel',
-            QtCore.QVariant(False)).toBool()
+        liveVisible = Settings().value(u'user interface/live panel', True)
+        panelLocked = Settings().value(u'user interface/lock panel', False)
         self.liveController.panel.setVisible(liveVisible)
         # Create menu
         self.menuBar = QtGui.QMenuBar(mainWindow)
@@ -182,7 +178,7 @@
             self.themeManagerDock)
         # Create the menu items
         action_list = ActionList.get_instance()
-        action_list.add_category(unicode(UiStrings().File),
+        action_list.add_category(UiStrings().File,
             CategoryOrder.standardMenu)
         self.fileNewItem = create_action(mainWindow, u'fileNewItem',
             icon=u':/general/general_new.png',
@@ -213,19 +209,19 @@
             category=UiStrings().File, triggers=mainWindow.close)
         # Give QT Extra Hint that this is the Exit Menu Item
         self.fileExitItem.setMenuRole(QtGui.QAction.QuitRole)
-        action_list.add_category(unicode(UiStrings().Import),
+        action_list.add_category(UiStrings().Import,
             CategoryOrder.standardMenu)
         self.importThemeItem = create_action(mainWindow,
             u'importThemeItem', category=UiStrings().Import)
         self.importLanguageItem = create_action(mainWindow,
             u'importLanguageItem')#, category=UiStrings().Import)
-        action_list.add_category(unicode(UiStrings().Export),
+        action_list.add_category(UiStrings().Export,
             CategoryOrder.standardMenu)
         self.exportThemeItem = create_action(mainWindow,
             u'exportThemeItem', category=UiStrings().Export)
         self.exportLanguageItem = create_action(mainWindow,
             u'exportLanguageItem')#, category=UiStrings().Export)
-        action_list.add_category(unicode(UiStrings().View),
+        action_list.add_category(UiStrings().View,
             CategoryOrder.standardMenu)
         self.viewMediaManagerItem = create_action(mainWindow,
             u'viewMediaManagerItem', shortcuts=[QtGui.QKeySequence(u'F8')],
@@ -250,7 +246,7 @@
             category=UiStrings().View, triggers=self.setLivePanelVisibility)
         self.lockPanel = create_action(mainWindow, u'lockPanel',
             checked=panelLocked, triggers=self.setLockPanel)
-        action_list.add_category(unicode(UiStrings().ViewMode),
+        action_list.add_category(UiStrings().ViewMode,
             CategoryOrder.standardMenu)
         self.modeDefaultItem = create_action(mainWindow, u'modeDefaultItem',
             checked=False, category=UiStrings().ViewMode)
@@ -263,8 +259,7 @@
         self.modeGroup.addAction(self.modeSetupItem)
         self.modeGroup.addAction(self.modeLiveItem)
         self.modeDefaultItem.setChecked(True)
-        action_list.add_category(unicode(UiStrings().Tools),
-            CategoryOrder.standardMenu)
+        action_list.add_category(UiStrings().Tools, CategoryOrder.standardMenu)
         self.toolsAddToolItem = create_action(mainWindow,
             u'toolsAddToolItem', icon=u':/tools/tools_add.png',
             category=UiStrings().Tools)
@@ -276,7 +271,7 @@
             category=UiStrings().Tools)
         self.updateThemeImages = create_action(mainWindow,
             u'updateThemeImages', category=UiStrings().Tools)
-        action_list.add_category(unicode(UiStrings().Settings),
+        action_list.add_category(UiStrings().Settings,
             CategoryOrder.standardMenu)
         self.settingsPluginListItem = create_action(mainWindow,
             u'settingsPluginListItem',
@@ -313,8 +308,7 @@
            u'settingsImportItem', category=UiStrings().Settings)
         self.settingsExportItem = create_action(mainWindow,
            u'settingsExportItem', category=UiStrings().Settings)
-        action_list.add_category(unicode(UiStrings().Help),
-            CategoryOrder.standardMenu)
+        action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu)
         self.aboutItem = create_action(mainWindow, u'aboutItem',
             icon=u':/system/system_about.png',
             shortcuts=[QtGui.QKeySequence(u'Ctrl+F1')],
@@ -512,8 +506,8 @@
             translate('OpenLP.MainWindow', '&Web Site'))
         for item in self.languageGroup.actions():
             item.setText(item.objectName())
-            item.setStatusTip(unicode(translate('OpenLP.MainWindow',
-                'Set the interface language to %s')) % item.objectName())
+            item.setStatusTip(translate('OpenLP.MainWindow',
+                'Set the interface language to %s') % item.objectName())
         self.autoLanguageItem.setText(
             translate('OpenLP.MainWindow', '&Autodetect'))
         self.autoLanguageItem.setStatusTip(translate('OpenLP.MainWindow',
@@ -579,7 +573,7 @@
         self.settingsForm = SettingsForm(self, self)
         self.formattingTagForm = FormattingTagForm(self)
         self.shortcutForm = ShortcutListForm(self)
-        self.recentFiles = QtCore.QStringList()
+        self.recentFiles = []
         # Set up the path with plugins
         plugin_path = AppLocation.get_directory(AppLocation.PluginsDir)
         self.pluginManager = PluginManager(plugin_path)
@@ -705,10 +699,8 @@
         self.previewController.screenSizeChanged()
         self.liveController.screenSizeChanged()
         log.info(u'Load data from Settings')
-        if Settings().value(u'advanced/save current plugin',
-            QtCore.QVariant(False)).toBool():
-            savedPlugin = Settings().value(
-                u'advanced/current media plugin', QtCore.QVariant()).toInt()[0]
+        if Settings().value(u'advanced/save current plugin', False):
+            savedPlugin = Settings().value(u'advanced/current media plugin', -1)
             if savedPlugin != -1:
                 self.mediaToolBox.setCurrentIndex(savedPlugin)
         self.settingsForm.postSetUp()
@@ -735,10 +727,10 @@
         Notifies the user that a newer version of OpenLP is available.
         Triggered by delay thread.
         """
-        version_text = unicode(translate('OpenLP.MainWindow',
+        version_text = translate('OpenLP.MainWindow',
             'Version %s of OpenLP is now available for download (you are '
             'currently running version %s). \n\nYou can download the latest '
-            'version from http://openlp.org/.'))
+            'version from http://openlp.org/.')
         QtGui.QMessageBox.question(self,
             translate('OpenLP.MainWindow', 'OpenLP Version Updated'),
             version_text % (version, get_application_version()[u'full']))
@@ -760,11 +752,10 @@
                 filename = unicode(filename, sys.getfilesystemencoding())
             self.serviceManagerContents.loadFile(filename)
         elif Settings().value(
-            self.generalSettingsSection + u'/auto open',
-            QtCore.QVariant(False)).toBool():
+            self.generalSettingsSection + u'/auto open', False):
             self.serviceManagerContents.loadLastFile()
-        view_mode = Settings().value(u'%s/view mode' % \
-            self.generalSettingsSection, u'default').toString()
+        view_mode = Settings().value(u'%s/view mode' %
+            self.generalSettingsSection, u'default')
         if view_mode == u'default':
             self.modeDefaultItem.setChecked(True)
         elif view_mode == u'setup':
@@ -847,9 +838,9 @@
         settings = Settings()
         self.liveController.mainDisplaySetBackground()
         if settings.value(u'%s/screen blank' % self.generalSettingsSection,
-            QtCore.QVariant(False)).toBool():
+            False):
             if settings.value(u'%s/blank warning' % self.generalSettingsSection,
-                QtCore.QVariant(False)).toBool():
+                False):
                 QtGui.QMessageBox.question(self,
                     translate('OpenLP.MainWindow',
                         'OpenLP Main Display Blanked'),
@@ -958,11 +949,10 @@
             QtGui.QMessageBox.No)
         if answer == QtGui.QMessageBox.No:
             return
-        import_file_name = unicode(QtGui.QFileDialog.getOpenFileName(self,
-                translate('OpenLP.MainWindow', 'Open File'),
-                '',
+        import_file_name = QtGui.QFileDialog.getOpenFileName(self,
+                translate('OpenLP.MainWindow', 'Open File'), '',
                 translate('OpenLP.MainWindow',
-                'OpenLP Export Settings Files (*.conf)')))
+                'OpenLP Export Settings Files (*.conf)'))
         if not import_file_name:
             return
         setting_sections = []
@@ -980,8 +970,7 @@
         for plugin in self.pluginManager.plugins:
             setting_sections.extend([plugin.name])
         settings = Settings()
-        import_settings = Settings(import_file_name,
-            Settings.IniFormat)
+        import_settings = Settings(import_file_name, Settings.IniFormat)
         import_keys = import_settings.allKeys()
         for section_key in import_keys:
             # We need to handle the really bad files.
@@ -1010,13 +999,11 @@
         # We have a good file, import it.
         for section_key in import_keys:
             value = import_settings.value(section_key)
-            settings.setValue(u'%s' % (section_key),
-                QtCore.QVariant(value))
+            settings.setValue(u'%s' % (section_key), value)
         now = datetime.now()
         settings.beginGroup(self.headerSection)
-        settings.setValue(u'file_imported', QtCore.QVariant(import_file_name))
-        settings.setValue(u'file_date_imported',
-            now.strftime("%Y-%m-%d %H:%M"))
+        settings.setValue(u'file_imported', import_file_name)
+        settings.setValue(u'file_date_imported', now.strftime("%Y-%m-%d %H:%M"))
         settings.endGroup()
         settings.sync()
         # We must do an immediate restart or current configuration will
@@ -1037,10 +1024,10 @@
         """
         Export settings to a .conf file in INI format
         """
-        export_file_name = unicode(QtGui.QFileDialog.getSaveFileName(self,
+        export_file_name = QtGui.QFileDialog.getSaveFileName(self,
             translate('OpenLP.MainWindow', 'Export Settings File'), '',
             translate('OpenLP.MainWindow',
-                'OpenLP Export Settings File (*.conf)')))
+            'OpenLP Export Settings File (*.conf)'))
         if not export_file_name:
             return
             # Make sure it's a .conf file.
@@ -1070,8 +1057,7 @@
         settings.remove(self.headerSection)
         # Get the settings.
         keys = settings.allKeys()
-        export_settings = Settings(temp_file,
-            Settings.IniFormat)
+        export_settings = Settings(temp_file, Settings.IniFormat)
         # Add a header section.
         # This is to insure it's our conf file for import.
         now = datetime.now()
@@ -1180,8 +1166,7 @@
             else:
                 event.ignore()
         else:
-            if Settings().value(u'advanced/enable exit confirmation',
-                QtCore.QVariant(True)).toBool():
+            if Settings().value(u'advanced/enable exit confirmation', True):
                 ret = QtGui.QMessageBox.question(self,
                     translate('OpenLP.MainWindow', 'Close OpenLP'),
                     translate('OpenLP.MainWindow',
@@ -1211,10 +1196,9 @@
         # Clean temporary files used by services
         self.serviceManagerContents.cleanUp()
         if save_settings:
-            if Settings().value(u'advanced/save current plugin',
-                QtCore.QVariant(False)).toBool():
+            if Settings().value(u'advanced/save current plugin', False):
                 Settings().setValue(u'advanced/current media plugin',
-                    QtCore.QVariant(self.mediaToolBox.currentIndex()))
+                    self.mediaToolBox.currentIndex())
         # Call the cleanup method to shutdown plugins.
         log.info(u'cleanup plugins')
         self.pluginManager.finalise_plugins()
@@ -1275,8 +1259,7 @@
 
     def defaultThemeChanged(self, theme):
         self.defaultThemeLabel.setText(
-            unicode(translate('OpenLP.MainWindow', 'Default Theme: %s')) %
-                theme)
+            translate('OpenLP.MainWindow', 'Default Theme: %s') % theme)
 
     def toggleMediaManager(self):
         self.mediaManagerDock.setVisible(not self.mediaManagerDock.isVisible())
@@ -1299,8 +1282,7 @@
                 False - Hidden
         """
         self.previewController.panel.setVisible(visible)
-        Settings().setValue(u'user interface/preview panel',
-            QtCore.QVariant(visible))
+        Settings().setValue(u'user interface/preview panel', visible)
         self.viewPreviewPanel.setChecked(visible)
 
     def setLockPanel(self, lock):
@@ -1331,8 +1313,7 @@
             self.viewThemeManagerItem.setEnabled(True)
             self.viewPreviewPanel.setEnabled(True)
             self.viewLivePanel.setEnabled(True)
-        Settings().setValue(u'user interface/lock panel',
-            QtCore.QVariant(lock))
+        Settings().setValue(u'user interface/lock panel', lock)
 
     def setLivePanelVisibility(self, visible):
         """
@@ -1345,8 +1326,7 @@
                 False - Hidden
         """
         self.liveController.panel.setVisible(visible)
-        Settings().setValue(u'user interface/live panel',
-            QtCore.QVariant(visible))
+        Settings().setValue(u'user interface/live panel', visible)
         self.viewLivePanel.setChecked(visible)
 
     def loadSettings(self):
@@ -1358,12 +1338,12 @@
         if Settings().contains(self.generalSettingsSection +
             u'/enable slide loop'):
             if Settings().value(self.generalSettingsSection +
-                u'/enable slide loop', QtCore.QVariant(True)).toBool():
+                u'/enable slide loop', True):
                 Settings().setValue(self.advancedSettingsSection +
-                    u'/slide limits', QtCore.QVariant(SlideLimits.Wrap))
+                    u'/slide limits', SlideLimits.Wrap)
             else:
                 Settings().setValue(self.advancedSettingsSection +
-                    u'/slide limits', QtCore.QVariant(SlideLimits.End))
+                    u'/slide limits', SlideLimits.End)
             Settings().remove(self.generalSettingsSection +
                 u'/enable slide loop')
             Receiver.send_message(u'slidecontroller_update_slide_limits')
@@ -1372,20 +1352,20 @@
         settings.remove(u'custom slide')
         settings.remove(u'service')
         settings.beginGroup(self.generalSettingsSection)
-        self.recentFiles = settings.value(u'recent files').toStringList()
+        self.recentFiles = settings.value(u'recent files', self.recentFiles)
         settings.endGroup()
         settings.beginGroup(self.uiSettingsSection)
-        self.move(settings.value(u'main window position',
-            QtCore.QVariant(QtCore.QPoint(0, 0))).toPoint())
+        self.move(settings.value(u'main window position', QtCore.QPoint(0, 0)))
         self.restoreGeometry(
-            settings.value(u'main window geometry').toByteArray())
-        self.restoreState(settings.value(u'main window state').toByteArray())
+            settings.value(u'main window geometry', QtCore.QByteArray()))
+        self.restoreState(
+            settings.value(u'main window state', QtCore.QByteArray()))
         self.liveController.splitter.restoreState(
-            settings.value(u'live splitter geometry').toByteArray())
+            settings.value(u'live splitter geometry', QtCore.QByteArray()))
         self.previewController.splitter.restoreState(
-            settings.value(u'preview splitter geometry').toByteArray())
-        self.controlSplitter.restoreState(
-            settings.value(u'mainwindow splitter geometry').toByteArray())
+            settings.value(u'preview splitter geometry', QtCore.QByteArray()))
+        self.controlSplitter.restoreState(settings.value(
+            u'mainwindow splitter geometry', QtCore.QByteArray()))
         settings.endGroup()
 
     def saveSettings(self):
@@ -1398,23 +1378,18 @@
         log.debug(u'Saving QSettings')
         settings = Settings()
         settings.beginGroup(self.generalSettingsSection)
-        recentFiles = QtCore.QVariant(self.recentFiles) \
-            if self.recentFiles else QtCore.QVariant()
-        settings.setValue(u'recent files', recentFiles)
+        settings.setValue(u'recent files', self.recentFiles)
         settings.endGroup()
         settings.beginGroup(self.uiSettingsSection)
-        settings.setValue(u'main window position',
-            QtCore.QVariant(self.pos()))
-        settings.setValue(u'main window state',
-            QtCore.QVariant(self.saveState()))
-        settings.setValue(u'main window geometry',
-            QtCore.QVariant(self.saveGeometry()))
+        settings.setValue(u'main window position', self.pos())
+        settings.setValue(u'main window state', self.saveState())
+        settings.setValue(u'main window geometry', self.saveGeometry())
         settings.setValue(u'live splitter geometry',
-            QtCore.QVariant(self.liveController.splitter.saveState()))
+            self.liveController.splitter.saveState())
         settings.setValue(u'preview splitter geometry',
-            QtCore.QVariant(self.previewController.splitter.saveState()))
+            self.previewController.splitter.saveState())
         settings.setValue(u'mainwindow splitter geometry',
-            QtCore.QVariant(self.controlSplitter.saveState()))
+            self.controlSplitter.saveState())
         settings.endGroup()
 
     def updateRecentFilesMenu(self):
@@ -1422,8 +1397,7 @@
         Updates the recent file menu with the latest list of service files
         accessed.
         """
-        recentFileCount = Settings().value(
-            u'advanced/recent file count', QtCore.QVariant(4)).toInt()[0]
+        recentFileCount = Settings().value(u'advanced/recent file count', 4)
         existingRecentFiles = [recentFile for recentFile in self.recentFiles
             if os.path.isfile(unicode(recentFile))]
         recentFilesToDisplay = existingRecentFiles[0:recentFileCount]
@@ -1440,10 +1414,10 @@
             'Clear List of recent files'),
             statustip=translate('OpenLP.MainWindow',
             'Clear the list of recent files.'),
-            enabled=not self.recentFiles.isEmpty(),
-            triggers=self.recentFiles.clear)
+            enabled=bool(self.recentFiles),
+            triggers=self.clearRecentFileMenu)
         add_actions(self.recentFilesMenu, (None, clearRecentFilesAction))
-        clearRecentFilesAction.setEnabled(not self.recentFiles.isEmpty())
+        clearRecentFilesAction.setEnabled(bool(self.recentFiles))
 
     def addRecentFile(self, filename):
         """
@@ -1455,8 +1429,7 @@
         # The maxRecentFiles value does not have an interface and so never gets
         # actually stored in the settings therefore the default value of 20 will
         # always be used.
-        maxRecentFiles = Settings().value(u'advanced/max recent files',
-            QtCore.QVariant(20)).toInt()[0]
+        maxRecentFiles = Settings().value(u'advanced/max recent files', 20)
         if filename:
             # Add some cleanup to reduce duplication in the recent file list
             filename = os.path.abspath(filename)
@@ -1464,13 +1437,17 @@
             # in the given filename which then causes duplication.
             if filename[1:3] == ':\\':
                 filename = filename[0].upper() + filename[1:]
-            position = self.recentFiles.indexOf(filename)
-            if position != -1:
-                self.recentFiles.removeAt(position)
-            self.recentFiles.insert(0, QtCore.QString(filename))
-            while self.recentFiles.count() > maxRecentFiles:
-                # Don't care what API says takeLast works, removeLast doesn't!
-                self.recentFiles.takeLast()
+            if filename in self.recentFiles:
+                self.recentFiles.remove(filename)
+            self.recentFiles.insert(0, filename)
+            while len(self.recentFiles) > maxRecentFiles:
+                self.recentFiles.pop()
+
+    def clearRecentFileMenu(self):
+        """
+        Clears the recent files.
+        """
+        self.recentFiles = []
 
     def displayProgressBar(self, size):
         """

=== modified file 'openlp/core/ui/media/__init__.py'
--- openlp/core/ui/media/__init__.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/media/__init__.py	2012-12-05 21:02:22 +0000
@@ -28,7 +28,7 @@
 ###############################################################################
 import logging
 
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings
 
 from PyQt4 import QtCore
 
@@ -82,12 +82,12 @@
         Here an special media player is chosen for all media actions.
     """
     log.debug(u'get_media_players')
-    players = unicode(Settings().value(u'media/players').toString())
+    players = Settings().value(u'media/players', u'')
     if not players:
         players = u'webkit'
     reg_ex = QtCore.QRegExp(".*\[(.*)\].*")
     if Settings().value(u'media/override player',
-        QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == QtCore.Qt.Checked:
+        QtCore.Qt.Unchecked) == QtCore.Qt.Checked:
         if reg_ex.exactMatch(players):
             overridden_player = u'%s' % reg_ex.cap(1)
         else:
@@ -112,9 +112,9 @@
     log.debug(u'set_media_players')
     players = u','.join(players_list)
     if Settings().value(u'media/override player',
-        QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == \
-        QtCore.Qt.Checked and overridden_player != u'auto':
+        QtCore.Qt.Unchecked) == QtCore.Qt.Checked and \
+        overridden_player != u'auto':
         players = players.replace(overridden_player, u'[%s]' % overridden_player)
-    Settings().setValue(u'media/players', QtCore.QVariant(players))
+    Settings().setValue(u'media/players', players)
 
 from mediacontroller import MediaController

=== modified file 'openlp/core/ui/media/mediacontroller.py'
--- openlp/core/ui/media/mediacontroller.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/media/mediacontroller.py	2012-12-05 21:02:22 +0000
@@ -32,8 +32,7 @@
 import sys
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import OpenLPToolbar, Receiver, translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import OpenLPToolbar, Receiver, translate, Settings
 from openlp.core.lib.mediaplayer import MediaPlayer
 from openlp.core.lib.ui import critical_error_message_box
 from openlp.core.ui.media import MediaState, MediaInfo, MediaType, \
@@ -335,8 +334,7 @@
             # Media could not be loaded correctly
             critical_error_message_box(
                 translate('MediaPlugin.MediaItem', 'Unsupported File'),
-                unicode(translate('MediaPlugin.MediaItem',
-                'Unsupported File')))
+                translate('MediaPlugin.MediaItem', 'Unsupported File'))
             return False
         # dont care about actual theme, set a black background
         if controller.isLive and not controller.media_info.is_background:
@@ -351,8 +349,7 @@
         elif not hidden or controller.media_info.is_background:
             autoplay = True
         # Unblank on load set
-        elif Settings().value(u'general/auto unblank',
-            QtCore.QVariant(False)).toBool():
+        elif Settings().value(u'general/auto unblank', False):
             autoplay = True
         # Start playback only for visible widgets. If we need just load a video
         # and get video information, do not start playback.
@@ -360,8 +357,7 @@
             if not self.video_play([controller]):
                 critical_error_message_box(
                     translate('MediaPlugin.MediaItem', 'Unsupported File'),
-                    unicode(translate('MediaPlugin.MediaItem',
-                    'Unsupported File')))
+                    translate('MediaPlugin.MediaItem', 'Unsupported File'))
                 return False
         self.set_controls_visible(controller, controlsVisible)
         log.debug(u'use %s controller' % self.curDisplayMediaPlayer[display])
@@ -375,8 +371,7 @@
         if overriddenPlayer and overriddenPlayer != u'auto':
             usedPlayers = [overriddenPlayer]
         if controller.media_info.file_info.isFile():
-            suffix = u'*.%s' % \
-                controller.media_info.file_info.suffix().toLower()
+            suffix = u'*.%s' % controller.media_info.file_info.suffix().lower()
             for title in usedPlayers:
                 player = self.mediaPlayers[title]
                 if suffix in player.video_extensions_list:

=== modified file 'openlp/core/ui/media/vlcplayer.py'
--- openlp/core/ui/media/vlcplayer.py	2012-12-05 06:13:34 +0000
+++ openlp/core/ui/media/vlcplayer.py	2012-12-05 21:02:22 +0000
@@ -35,8 +35,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings
 from openlp.core.lib.mediaplayer import MediaPlayer
 from openlp.core.ui.media import MediaState
 
@@ -114,8 +113,13 @@
         command_line_options = u'--no-video-title-show'
         if not display.hasAudio:
             command_line_options += u' --no-audio --no-video-title-show'
+<<<<<<< TREE
         if Settings().value(u'advanced/hide mouse',
             QtCore.QVariant(True)).toBool() and display.controller.isLive:
+=======
+        if Settings().value(u'advanced/hide mouse', False) and \
+            display.controller.isLive:
+>>>>>>> MERGE-SOURCE
             command_line_options += u' --mouse-hide-timeout=0'
         display.vlcInstance = vlc.Instance(command_line_options)
         display.vlcInstance.set_log_verbosity(2)
@@ -148,8 +152,7 @@
         log.debug(u'load vid in Vlc Controller')
         controller = display.controller
         volume = controller.media_info.volume
-        file_path = str(
-            controller.media_info.file_info.absoluteFilePath().toUtf8())
+        file_path = str(controller.media_info.file_info.absoluteFilePath())
         path = os.path.normcase(file_path)
         # create the media
         display.vlcMedia = display.vlcInstance.media_new_path(path)

=== modified file 'openlp/core/ui/media/webkitplayer.py'
--- openlp/core/ui/media/webkitplayer.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/media/webkitplayer.py	2012-12-05 21:02:22 +0000
@@ -409,20 +409,19 @@
         controller = display.controller
         if controller.media_info.is_flash:
             currentTime = display.frame.evaluateJavaScript(
-                u'show_flash("currentTime");').toInt()[0]
-            length = display.frame.evaluateJavaScript(
-                u'show_flash("length");').toInt()[0]
+                u'show_flash("currentTime");')
+            length = display.frame.evaluateJavaScript( u'show_flash("length");')
         else:
             if display.frame.evaluateJavaScript(
-                u'show_video("isEnded");').toString() == 'true':
+                u'show_video("isEnded");') == 'true':
                 self.stop(display)
             (currentTime, ok) = display.frame.evaluateJavaScript(
-                u'show_video("currentTime");').toFloat()
+                u'show_video("currentTime");')
             # check if conversion was ok and value is not 'NaN'
             if ok and currentTime != float('inf'):
                 currentTime = int(currentTime * 1000)
             (length, ok) = display.frame.evaluateJavaScript(
-                u'show_video("length");').toFloat()
+                u'show_video("length");')
             # check if conversion was ok and value is not 'NaN'
             if ok and length != float('inf'):
                 length = int(length * 1000)

=== modified file 'openlp/core/ui/pluginform.py'
--- openlp/core/ui/pluginform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/pluginform.py	2012-12-05 21:02:22 +0000
@@ -73,22 +73,19 @@
             plugin.status = int(plugin.status)
             # Set the little status text in brackets next to the plugin name.
             if plugin.status == PluginStatus.Disabled:
-                status_text = unicode(
-                    translate('OpenLP.PluginForm', '%s (Disabled)'))
+                status_text = translate('OpenLP.PluginForm', '%s (Disabled)')
             elif plugin.status == PluginStatus.Active:
-                status_text = unicode(
-                    translate('OpenLP.PluginForm', '%s (Active)'))
+                status_text = translate('OpenLP.PluginForm', '%s (Active)')
             else:
                 # PluginStatus.Inactive
-                status_text = unicode(
-                    translate('OpenLP.PluginForm', '%s (Inactive)'))
+                status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
             item.setText(status_text % plugin.nameStrings[u'singular'])
             # If the plugin has an icon, set it!
             if plugin.icon:
                 item.setIcon(plugin.icon)
             self.pluginListWidget.addItem(item)
             pluginListWidth = max(pluginListWidth, self.fontMetrics().width(
-                unicode(translate('OpenLP.PluginForm', '%s (Inactive)')) %
+                translate('OpenLP.PluginForm', '%s (Inactive)') %
                 plugin.nameStrings[u'singular']))
         self.pluginListWidget.setFixedWidth(pluginListWidth +
             self.pluginListWidget.iconSize().width() + 48)
@@ -138,16 +135,12 @@
             self.activePlugin.appStartup()
         else:
             self.activePlugin.toggleStatus(PluginStatus.Inactive)
-        status_text = unicode(
-            translate('OpenLP.PluginForm', '%s (Inactive)'))
+        status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
         if self.activePlugin.status == PluginStatus.Active:
-            status_text = unicode(
-                translate('OpenLP.PluginForm', '%s (Active)'))
+            status_text = translate('OpenLP.PluginForm', '%s (Active)')
         elif self.activePlugin.status == PluginStatus.Inactive:
-            status_text = unicode(
-                translate('OpenLP.PluginForm', '%s (Inactive)'))
+            status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
         elif self.activePlugin.status == PluginStatus.Disabled:
-            status_text = unicode(
-                translate('OpenLP.PluginForm', '%s (Disabled)'))
+            status_text = translate('OpenLP.PluginForm', '%s (Disabled)')
         self.pluginListWidget.currentItem().setText(
             status_text % self.activePlugin.nameStrings[u'singular'])

=== modified file 'openlp/core/ui/printserviceform.py'
--- openlp/core/ui/printserviceform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/printserviceform.py	2012-12-05 21:02:22 +0000
@@ -33,9 +33,8 @@
 from PyQt4 import QtCore, QtGui
 from lxml import html
 
-from openlp.core.lib import translate, get_text_file_string, Receiver
+from openlp.core.lib import translate, get_text_file_string, Receiver, Settings
 from openlp.core.lib.ui import UiStrings
-from openlp.core.lib.settings import Settings
 from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize
 from openlp.core.utils import AppLocation
 
@@ -126,17 +125,15 @@
         settings = Settings()
         settings.beginGroup(u'advanced')
         self.slideTextCheckBox.setChecked(settings.value(
-            u'print slide text', QtCore.QVariant(False)).toBool())
+            u'print slide text', False))
         self.pageBreakAfterText.setChecked(settings.value(
-            u'add page break', QtCore.QVariant(False)).toBool())
+            u'add page break', False))
         if not self.slideTextCheckBox.isChecked():
             self.pageBreakAfterText.setDisabled(True)
         self.metaDataCheckBox.setChecked(settings.value(
-            u'print file meta data', QtCore.QVariant(False)).toBool())
-        self.notesCheckBox.setChecked(settings.value(
-            u'print notes', QtCore.QVariant(False)).toBool())
-        self.zoomComboBox.setCurrentIndex(settings.value(
-            u'display size', QtCore.QVariant(0)).toInt()[0])
+            u'print file meta data', False))
+        self.notesCheckBox.setChecked(settings.value(u'print notes', False))
+        self.zoomComboBox.setCurrentIndex(settings.value(u'display size', 0))
         settings.endGroup()
         # Signals
         QtCore.QObject.connect(self.printButton,
@@ -177,8 +174,7 @@
         """
         html_data = self._addElement(u'html')
         self._addElement(u'head', parent=html_data)
-        self._addElement(u'title', unicode(self.titleLineEdit.text()),
-            html_data.head)
+        self._addElement(u'title', self.titleLineEdit.text(), html_data.head)
         css_path = os.path.join(
             AppLocation.get_data_path(), u'service_print.css')
         custom_css = get_text_file_string(css_path)
@@ -187,7 +183,7 @@
         self._addElement(u'style', custom_css, html_data.head,
             attribute=(u'type', u'text/css'))
         self._addElement(u'body', parent=html_data)
-        self._addElement(u'h1', cgi.escape(unicode(self.titleLineEdit.text())),
+        self._addElement(u'h1', cgi.escape(self.titleLineEdit.text()),
             html_data.body, classId=u'serviceTitle')
         for index, item in enumerate(self.serviceManager.serviceItems):
             self._addPreviewItem(html_data.body, item[u'service_item'], index)
@@ -246,7 +242,7 @@
                     translate('OpenLP.ServiceManager', 'Notes: '), p,
                     classId=u'itemNotesTitle')
                 self._addElement(u'span',
-                    cgi.escape(unicode(item.notes)).replace(u'\n', u'<br>'), p,
+                    cgi.escape(item.notes).replace(u'\n', u'<br>'), p,
                     classId=u'itemNotesText')
         # Add play length of media files.
         if item.is_media() and self.metaDataCheckBox.isChecked():
@@ -323,7 +319,7 @@
             self.previewWidget.zoomIn(0.25)
         settings = Settings()
         settings.beginGroup(u'advanced')
-        settings.setValue(u'display size', QtCore.QVariant(display))
+        settings.setValue(u'display size', display)
         settings.endGroup()
 
     def copyText(self):
@@ -412,13 +408,12 @@
         settings = Settings()
         settings.beginGroup(u'advanced')
         settings.setValue(u'print slide text',
-            QtCore.QVariant(self.slideTextCheckBox.isChecked()))
+            self.slideTextCheckBox.isChecked())
         settings.setValue(u'add page break',
-            QtCore.QVariant(self.pageBreakAfterText.isChecked()))
+            self.pageBreakAfterText.isChecked())
         settings.setValue(u'print file meta data',
-            QtCore.QVariant(self.metaDataCheckBox.isChecked()))
-        settings.setValue(u'print notes',
-            QtCore.QVariant(self.notesCheckBox.isChecked()))
+            self.metaDataCheckBox.isChecked())
+        settings.setValue(u'print notes', self.notesCheckBox.isChecked())
         settings.endGroup()
 
     def update_song_usage(self):

=== modified file 'openlp/core/ui/screen.py'
--- openlp/core/ui/screen.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/screen.py	2012-12-05 21:02:22 +0000
@@ -35,8 +35,7 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import Receiver, translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, translate, Settings
 
 log = logging.getLogger(__name__)
 
@@ -251,19 +250,13 @@
         settings = Settings()
         settings.beginGroup(u'general')
         self.set_current_display(settings.value(u'monitor',
-            QtCore.QVariant(self.display_count - 1)).toInt()[0])
-        self.display = settings.value(
-            u'display on monitor', QtCore.QVariant(True)).toBool()
-        override_display = settings.value(
-            u'override position', QtCore.QVariant(False)).toBool()
-        x = settings.value(u'x position',
-            QtCore.QVariant(self.current[u'size'].x())).toInt()[0]
-        y = settings.value(u'y position',
-            QtCore.QVariant(self.current[u'size'].y())).toInt()[0]
-        width = settings.value(u'width',
-            QtCore.QVariant(self.current[u'size'].width())).toInt()[0]
-        height = settings.value(u'height',
-            QtCore.QVariant(self.current[u'size'].height())).toInt()[0]
+            self.display_count - 1))
+        self.display = settings.value(u'display on monitor', True)
+        override_display = settings.value(u'override position', False)
+        x = settings.value(u'x position', self.current[u'size'].x())
+        y = settings.value(u'y position', self.current[u'size'].y())
+        width = settings.value(u'width', self.current[u'size'].width())
+        height = settings.value(u'height', self.current[u'size'].height())
         self.override[u'size'] = QtCore.QRect(x, y, width, height)
         self.override[u'primary'] = False
         settings.endGroup()

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/servicemanager.py	2012-12-05 21:02:22 +0000
@@ -41,9 +41,8 @@
 
 from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, \
     ItemCapabilities, SettingsManager, translate, str_to_bool, \
-    check_directory_exists
+    check_directory_exists, Settings
 from openlp.core.lib.theme import ThemeLevel
-from openlp.core.lib.settings import Settings
 from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
     create_widget_action, find_and_set_in_combo_box
 from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
@@ -179,7 +178,7 @@
         self.orderToolbar = OpenLPToolbar(self)
         action_list = ActionList.get_instance()
         action_list.add_category(
-            unicode(UiStrings().Service), CategoryOrder.standardToolbar)
+            UiStrings().Service, CategoryOrder.standardToolbar)
         self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(
             u'moveTop', text=translate('OpenLP.ServiceManager', 'Move to &top'),
             icon=u':/services/service_top.png', tooltip=translate(
@@ -279,9 +278,9 @@
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate)
         # Last little bits of setting up
-        self.service_theme = unicode(Settings().value(
+        self.service_theme = Settings().value(
             self.mainwindow.serviceManagerSettingsSection + u'/service theme',
-            QtCore.QVariant(u'')).toString())
+            u'')
         self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
         # build the drag and drop context menu
         self.dndMenu = QtGui.QMenu()
@@ -357,8 +356,7 @@
         self._fileName = unicode(fileName)
         self.mainwindow.setServiceModified(self.isModified(),
             self.shortFileName())
-        Settings(). \
-            setValue(u'servicemanager/last file',QtCore.QVariant(fileName))
+        Settings().setValue(u'servicemanager/last file', fileName)
 
     def fileName(self):
         """
@@ -377,8 +375,7 @@
         Triggered when Config dialog is updated.
         """
         self.expandTabs = Settings().value(
-            u'advanced/expand service item',
-            QtCore.QVariant(u'False')).toBool()
+            u'advanced/expand service item', False)
 
     def supportedSuffixes(self, suffix):
         """
@@ -418,13 +415,13 @@
             elif result == QtGui.QMessageBox.Save:
                 self.saveFile()
         if not loadFile:
-            fileName = unicode(QtGui.QFileDialog.getOpenFileName(
+            fileName = QtGui.QFileDialog.getOpenFileName(
                 self.mainwindow,
                 translate('OpenLP.ServiceManager', 'Open File'),
                 SettingsManager.get_last_dir(
                 self.mainwindow.serviceManagerSettingsSection),
                 translate('OpenLP.ServiceManager',
-                'OpenLP Service Files (*.osz)')))
+                'OpenLP Service Files (*.osz)'))
             if not fileName:
                 return False
         else:
@@ -444,7 +441,7 @@
 
     def onRecentServiceClicked(self):
         sender = self.sender()
-        self.loadFile(sender.data().toString())
+        self.loadFile(sender.data())
 
     def newFile(self):
         """
@@ -455,8 +452,7 @@
         self.setFileName(u'')
         self.serviceId += 1
         self.setModified(False)
-        Settings(). \
-            setValue(u'servicemanager/last file',QtCore.QVariant(u''))
+        Settings().setValue(u'servicemanager/last file', u'')
         Receiver.send_message(u'servicemanager_new_service')
 
     def saveFile(self):
@@ -504,12 +500,12 @@
                     write_list.append(path_from)
         if missing_list:
             Receiver.send_message(u'cursor_normal')
-            title = unicode(translate('OpenLP.ServiceManager',
-                'Service File(s) Missing'))
-            message = unicode(translate('OpenLP.ServiceManager',
+            title = translate('OpenLP.ServiceManager',
+                'Service File(s) Missing')
+            message = translate('OpenLP.ServiceManager',
                 'The following file(s) in the service are missing:\n\t%s\n\n'
-                'These files will be removed if you continue to save.')
-                ) % "\n\t".join(missing_list)
+                'These files will be removed if you continue to save.') % \
+                "\n\t".join(missing_list)
             answer = QtGui.QMessageBox.critical(self, title,
                 message,
                 QtGui.QMessageBox.StandardButtons(
@@ -602,39 +598,38 @@
         save the file.
         """
         default_service_enabled = Settings().value(
-            u'advanced/default service enabled', QtCore.QVariant(True)).toBool()
+            u'advanced/default service enabled', True)
         if default_service_enabled:
-            service_day = Settings().value(
-                u'advanced/default service day', 7).toInt()[0]
+            service_day = Settings().value(u'advanced/default service day', 7)
             if service_day == 7:
                 local_time = datetime.now()
             else:
                 service_hour = Settings().value(
-                    u'advanced/default service hour', 11).toInt()[0]
+                    u'advanced/default service hour', 11)
                 service_minute = Settings().value(
-                    u'advanced/default service minute', 0).toInt()[0]
+                    u'advanced/default service minute', 0)
                 now = datetime.now()
                 day_delta = service_day - now.weekday()
                 if day_delta < 0:
                     day_delta += 7
                 time = now + timedelta(days=day_delta)
                 local_time = time.replace(hour=service_hour, minute=service_minute)
-            default_pattern = unicode(Settings().value(
+            default_pattern = Settings().value(
                 u'advanced/default service name',
                 translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M',
                     'This may not contain any of the following characters: '
                     '/\\?*|<>\[\]":+\nSee http://docs.python.org/library/'
                     'datetime.html#strftime-strptime-behavior for more '
-                    'information.')).toString())
+                    'information.'))
             default_filename = format_time(default_pattern, local_time)
         else:
             default_filename = u''
-        directory = unicode(SettingsManager.get_last_dir(
-            self.mainwindow.serviceManagerSettingsSection))
+        directory = SettingsManager.get_last_dir(
+            self.mainwindow.serviceManagerSettingsSection)
         path = os.path.join(directory, default_filename)
-        fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow,
+        fileName = QtGui.QFileDialog.getSaveFileName(self.mainwindow,
             UiStrings().SaveService, path,
-            translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)')))
+            translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))
         if not fileName:
             return False
         if os.path.splitext(fileName)[1] == u'':
@@ -701,7 +696,7 @@
                 self.mainwindow.addRecentFile(fileName)
                 self.setModified(False)
                 Settings().setValue(
-                    'servicemanager/last file', QtCore.QVariant(fileName))
+                    'servicemanager/last file', fileName)
             else:
                 critical_error_message_box(
                     message=translate('OpenLP.ServiceManager',
@@ -742,19 +737,18 @@
         service was last closed. Can be blank if there was no service
         present.
         """
-        fileName = Settings(). \
-            value(u'servicemanager/last file',QtCore.QVariant(u'')).toString()
-        if fileName:
-            self.loadFile(fileName)
+        file_name = Settings().value(u'servicemanager/last file', u'')
+        if file_name:
+            self.loadFile(file_name)
 
     def contextMenu(self, point):
         item = self.serviceManagerList.itemAt(point)
         if item is None:
             return
-        if item.parent() is None:
-            pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
+        if item.parent():
+            pos = item.parent().data(0, QtCore.Qt.UserRole)
         else:
-            pos = item.parent().data(0, QtCore.Qt.UserRole).toInt()[0]
+            pos = item.data(0, QtCore.Qt.UserRole)
         serviceItem = self.serviceItems[pos - 1]
         self.editAction.setVisible(False)
         self.maintainAction.setVisible(False)
@@ -763,13 +757,12 @@
         if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanEdit)\
             and serviceItem[u'service_item'].edit_id:
             self.editAction.setVisible(True)
-        if serviceItem[u'service_item']\
-            .is_capable(ItemCapabilities.CanMaintain):
+        if serviceItem[u'service_item'].is_capable(
+            ItemCapabilities.CanMaintain):
             self.maintainAction.setVisible(True)
-        if item.parent() is None:
-            self.notesAction.setVisible(True)
-        if serviceItem[u'service_item']\
-            .is_capable(ItemCapabilities.HasVariableStartTime):
+        self.notesAction.setVisible(item.parent() is None)
+        if serviceItem[u'service_item'].is_capable(
+            ItemCapabilities.HasVariableStartTime):
             self.timeAction.setVisible(True)
         self.themeMenu.menuAction().setVisible(False)
         # Set up the theme menu.
@@ -861,7 +854,7 @@
         while serviceIterator.value():
             if serviceIterator.value() == selected:
                 if message == u'last slide' and prevItemLastSlide:
-                    pos = prevItem.data(0, QtCore.Qt.UserRole).toInt()[0]
+                    pos = prevItem.data(0, QtCore.Qt.UserRole)
                     check_expanded = self.serviceItems[pos - 1][u'expanded']
                     self.serviceManagerList.setCurrentItem(prevItemLastSlide)
                     if not check_expanded:
@@ -928,7 +921,7 @@
         Record if an item is collapsed. Used when repainting the list to get the
         correct state.
         """
-        pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
+        pos = item.data(0, QtCore.Qt.UserRole)
         self.serviceItems[pos - 1][u'expanded'] = False
 
     def onExpandAll(self):
@@ -944,7 +937,7 @@
         Record if an item is collapsed. Used when repainting the list to get the
         correct state.
         """
-        pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
+        pos = item.data(0, QtCore.Qt.UserRole)
         self.serviceItems[pos - 1][u'expanded'] = True
 
     def onServiceTop(self):
@@ -1059,30 +1052,29 @@
             tips = []
             if serviceitem.temporary_edit:
                 tips.append(u'<strong>%s:</strong> <em>%s</em>' %
-                    (unicode(translate('OpenLP.ServiceManager', 'Edit')),
-                    (unicode(translate('OpenLP.ServiceManager',
-                    'Service copy only')))))
+                    (translate('OpenLP.ServiceManager', 'Edit'),
+                    (translate('OpenLP.ServiceManager',
+                    'Service copy only'))))
             if serviceitem.theme and serviceitem.theme != -1:
                 tips.append(u'<strong>%s:</strong> <em>%s</em>' %
-                    (unicode(translate('OpenLP.ServiceManager', 'Slide theme')),
+                    (translate('OpenLP.ServiceManager', 'Slide theme'),
                     serviceitem.theme))
             if serviceitem.notes:
                 tips.append(u'<strong>%s: </strong> %s' %
-                    (unicode(translate('OpenLP.ServiceManager', 'Notes')),
+                    (translate('OpenLP.ServiceManager', 'Notes'),
                     cgi.escape(unicode(serviceitem.notes))))
             if item[u'service_item'] \
                 .is_capable(ItemCapabilities.HasVariableStartTime):
                 tips.append(item[u'service_item'].get_media_time())
             treewidgetitem.setToolTip(0, u'<br>'.join(tips))
-            treewidgetitem.setData(0, QtCore.Qt.UserRole,
-                QtCore.QVariant(item[u'order']))
+            treewidgetitem.setData(0, QtCore.Qt.UserRole, item[u'order'])
             treewidgetitem.setSelected(item[u'selected'])
             # Add the children to their parent treewidgetitem.
             for count, frame in enumerate(serviceitem.get_frames()):
                 child = QtGui.QTreeWidgetItem(treewidgetitem)
                 text = frame[u'title'].replace(u'\n', u' ')
                 child.setText(0, text[:40])
-                child.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(count))
+                child.setData(0, QtCore.Qt.UserRole, count)
                 if serviceItem == itemcount:
                     if item[u'expanded'] and serviceItemChild == count:
                         self.serviceManagerList.setCurrentItem(child)
@@ -1116,12 +1108,11 @@
         Set the theme for the current service.
         """
         log.debug(u'onThemeComboBoxSelected')
-        self.service_theme = unicode(self.themeComboBox.currentText())
+        self.service_theme = self.themeComboBox.currentText()
         self.mainwindow.renderer.set_service_theme(self.service_theme)
         Settings().setValue(
             self.mainwindow.serviceManagerSettingsSection +
-                u'/service theme',
-            QtCore.QVariant(self.service_theme))
+            u'/service theme', self.service_theme)
         self.regenerateServiceItems(True)
 
     def themeChange(self):
@@ -1155,10 +1146,9 @@
                 serviceIterator += 1
             if selectedItem is not None:
                 if selectedItem.parent() is None:
-                    pos = selectedItem.data(0, QtCore.Qt.UserRole).toInt()[0]
+                    pos = selectedItem.data(0, QtCore.Qt.UserRole)
                 else:
-                    pos = selectedItem.parent().data(0, QtCore.Qt.UserRole). \
-                        toInt()[0]
+                    pos = selectedItem.parent().data(0, QtCore.Qt.UserRole)
                 self.serviceItems[pos - 1][u'selected'] = True
             tempServiceItems = self.serviceItems
             self.serviceManagerList.clear()
@@ -1301,7 +1291,7 @@
                 self.serviceItems[item][u'service_item'], child)
             if Settings().value(
                 self.mainwindow.generalSettingsSection + u'/auto preview',
-                QtCore.QVariant(False)).toBool():
+                False):
                 item += 1
                 if self.serviceItems and item < len(self.serviceItems) and \
                     self.serviceItems[item][u'service_item'].is_capable(
@@ -1343,10 +1333,10 @@
         for item in items:
             parentitem = item.parent()
             if parentitem is None:
-                serviceItem = item.data(0, QtCore.Qt.UserRole).toInt()[0]
+                serviceItem = item.data(0, QtCore.Qt.UserRole)
             else:
-                serviceItem = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
-                serviceItemChild = item.data(0, QtCore.Qt.UserRole).toInt()[0]
+                serviceItem = parentitem.data(0, QtCore.Qt.UserRole)
+                serviceItemChild = item.data(0, QtCore.Qt.UserRole)
             # Adjust for zero based arrays.
             serviceItem -= 1
             # Only process the first item on the list for this method.
@@ -1376,11 +1366,11 @@
             event.setDropAction(QtCore.Qt.CopyAction)
             event.accept()
             for url in link.urls():
-                filename = unicode(url.toLocalFile())
+                filename = url.toLocalFile()
                 if filename.endswith(u'.osz'):
                     self.onLoadServiceClicked(filename)
         elif link.hasText():
-            plugin = unicode(link.text())
+            plugin = link.text()
             item = self.serviceManagerList.itemAt(event.pos())
             # ServiceManager started the drag and drop
             if plugin == u'ServiceManager':
@@ -1452,7 +1442,7 @@
         self.regenerateServiceItems()
 
     def onThemeChangeAction(self):
-        theme = unicode(self.sender().objectName())
+        theme = self.sender().objectName()
         # No object name means that the "Default" theme is supposed to be used.
         if not theme:
             theme = None
@@ -1463,9 +1453,9 @@
     def _getParentItemData(self, item):
         parentitem = item.parent()
         if parentitem is None:
-            return item.data(0, QtCore.Qt.UserRole).toInt()[0]
+            return item.data(0, QtCore.Qt.UserRole)
         else:
-            return parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
+            return parentitem.data(0, QtCore.Qt.UserRole)
 
     def printServiceOrder(self):
         """

=== modified file 'openlp/core/ui/shortcutlistform.py'
--- openlp/core/ui/shortcutlistform.py	2012-12-05 06:12:07 +0000
+++ openlp/core/ui/shortcutlistform.py	2012-12-05 21:02:22 +0000
@@ -32,8 +32,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings
 from openlp.core.utils import translate
 from openlp.core.utils.actions import ActionList
 from shortcutlistdialog import Ui_ShortcutListDialog
@@ -131,11 +130,10 @@
                 continue
             item = QtGui.QTreeWidgetItem([category.name])
             for action in category.actions:
-                actionText = REMOVE_AMPERSAND.sub('', unicode(action.text()))
+                actionText = REMOVE_AMPERSAND.sub('', action.text())
                 actionItem = QtGui.QTreeWidgetItem([actionText])
                 actionItem.setIcon(0, action.icon())
-                actionItem.setData(0,
-                    QtCore.Qt.UserRole, QtCore.QVariant(action))
+                actionItem.setData(0, QtCore.Qt.UserRole, action)
                 item.addChild(actionItem)
             self.treeWidget.addTopLevelItem(item)
             item.setExpanded(True)
@@ -352,8 +350,7 @@
                         map(QtGui.QKeySequence.toString, action.shortcuts()))
                     action.setShortcuts(self.changedActions[action])
                     self.action_list.update_shortcut_map(action, old_shortcuts)
-                settings.setValue(
-                    action.objectName(), QtCore.QVariant(action.shortcuts()))
+                settings.setValue(action.objectName(), action.shortcuts())
         settings.endGroup()
 
     def onClearPrimaryButtonClicked(self, toggled):
@@ -446,9 +443,9 @@
             Receiver.send_message(u'openlp_warning_message', {
                 u'title': translate('OpenLP.ShortcutListDialog',
                 'Duplicate Shortcut'),
-                u'message': unicode(translate('OpenLP.ShortcutListDialog',
+                u'message': translate('OpenLP.ShortcutListDialog',
                 'The shortcut "%s" is already assigned to another action, '
-                'please use a different shortcut.')) % key_sequence.toString()
+                'please use a different shortcut.') % key_sequence.toString()
             })
         return is_valid
 
@@ -471,7 +468,7 @@
             item = self.treeWidget.currentItem()
             if item is None:
                 return
-        return item.data(0, QtCore.Qt.UserRole).toPyObject()
+        return item.data(0, QtCore.Qt.UserRole)
 
     def _adjustButton(self, button, checked=None, enabled=None, text=None):
         """

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2012-12-05 06:12:07 +0000
+++ openlp/core/ui/slidecontroller.py	2012-12-05 21:02:22 +0000
@@ -35,11 +35,10 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, \
-    translate, build_icon, build_html, PluginManager, ServiceItem, ImageSource
+    translate, build_icon, build_html, PluginManager, ServiceItem, \
+    ImageSource, SlideLimits, ServiceItemAction, Settings
+from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList
 from openlp.core.lib.ui import UiStrings, create_action
-from openlp.core.lib.settings import Settings
-from openlp.core.lib import SlideLimits, ServiceItemAction
-from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList
 from openlp.core.utils.actions import ActionList, CategoryOrder
 
 log = logging.getLogger(__name__)
@@ -233,7 +232,7 @@
                 icon=u':/media/media_time.png', checked=False, shortcuts=[],
                 category=self.category, triggers=self.onPlaySlidesOnce)
             if Settings().value(self.parent().generalSettingsSection +
-                u'/enable slide loop', QtCore.QVariant(True)).toBool():
+                u'/enable slide loop', True):
                 self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
             else:
                 self.playSlidesMenu.setDefaultAction(self.playSlidesOnce)
@@ -443,7 +442,7 @@
             SONGS_PLUGIN_AVAILABLE = True
         except ImportError:
             SONGS_PLUGIN_AVAILABLE = False
-        sender_name = unicode(self.sender().objectName())
+        sender_name = self.sender().objectName()
         verse_type = sender_name[15:] \
             if sender_name[:15] == u'shortcutAction_' else u''
         if SONGS_PLUGIN_AVAILABLE:
@@ -643,7 +642,7 @@
                         framenumber, width / self.ratio)
 
     def onSongBarHandler(self):
-        request = unicode(self.sender().text())
+        request = self.sender().text()
         slide_no = self.slideList[request]
         self.__updatePreviewSelection(slide_no)
         self.slideSelected()
@@ -660,7 +659,7 @@
         """
         self.slide_limits = Settings().value(
             self.parent().advancedSettingsSection + u'/slide limits',
-            QtCore.QVariant(SlideLimits.End)).toInt()[0]
+            SlideLimits.End)
 
     def enableToolBar(self, item):
         """
@@ -690,7 +689,7 @@
         if item.is_text():
             if Settings().value(
                 self.parent().songsSettingsSection + u'/display songbar',
-                QtCore.QVariant(True)).toBool() and self.slideList:
+                True) and self.slideList:
                 self.songMenu.show()
         if item.is_capable(ItemCapabilities.CanLoop) and \
             len(item.get_frames()) > 1:
@@ -811,12 +810,11 @@
                         self.onTrackTriggered)
                 self.display.audioPlayer.repeat = Settings().value(
                     self.parent().generalSettingsSection + \
-                        u'/audio repeat list',
-                    QtCore.QVariant(False)).toBool()
+                    u'/audio repeat list',False)
                 if Settings().value(
                     self.parent().generalSettingsSection + \
                         u'/audio start paused',
-                    QtCore.QVariant(True)).toBool():
+                    True):
                     self.audioPauseItem.setChecked(True)
                     self.display.audioPlayer.pause()
                 else:
@@ -933,8 +931,7 @@
         """
         log.debug(u'mainDisplaySetBackground live = %s' % self.isLive)
         display_type = Settings().value(
-            self.parent().generalSettingsSection + u'/screen blank',
-            QtCore.QVariant(u'')).toString()
+            self.parent().generalSettingsSection + u'/screen blank', u'')
         if self.screens.which_screen(self.window()) != \
             self.screens.which_screen(self.display):
             # Order done to handle initial conversion
@@ -975,7 +972,7 @@
         if checked:
             Settings().setValue(
                 self.parent().generalSettingsSection + u'/screen blank',
-                QtCore.QVariant(u'blanked'))
+                u'blanked')
         else:
             Settings().remove(
                 self.parent().generalSettingsSection + u'/screen blank')
@@ -996,7 +993,7 @@
         if checked:
             Settings().setValue(
                 self.parent().generalSettingsSection + u'/screen blank',
-                QtCore.QVariant(u'themed'))
+                u'themed')
         else:
             Settings().remove(
                 self.parent().generalSettingsSection + u'/screen blank')
@@ -1017,7 +1014,7 @@
         if checked:
             Settings().setValue(
                 self.parent().generalSettingsSection + u'/screen blank',
-                QtCore.QVariant(u'hidden'))
+                u'hidden')
         else:
             Settings().remove(
                 self.parent().generalSettingsSection + u'/screen blank')
@@ -1313,8 +1310,7 @@
         """
         triggered by clicking the Preview slide items
         """
-        if Settings().value(u'advanced/double click live',
-            QtCore.QVariant(False)).toBool():
+        if Settings().value(u'advanced/double click live', False):
             # Live and Preview have issues if we have video or presentations
             # playing in both at the same time.
             if self.serviceItem.is_command():
@@ -1399,5 +1395,4 @@
 
     def onTrackTriggered(self):
         action = self.sender()
-        index = action.data().toInt()[0]
-        self.display.audioPlayer.goTo(index)
+        self.display.audioPlayer.goTo(action.data())

=== modified file 'openlp/core/ui/themeform.py'
--- openlp/core/ui/themeform.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/themeform.py	2012-12-05 21:02:22 +0000
@@ -206,9 +206,8 @@
         """
         Updates the lines on a page on the wizard
         """
-        self.mainLineCountLabel.setText(unicode(translate(
-            'OpenLP.ThemeWizard',
-            '(approximately %d lines per slide)')) % int(lines))
+        self.mainLineCountLabel.setText(translate('OpenLP.ThemeForm',
+            '(approximately %d lines per slide)') % int(lines))
 
     def resizeEvent(self, event=None):
         """
@@ -233,7 +232,7 @@
         background_image = BackgroundType.to_string(BackgroundType.Image)
         if self.page(self.currentId()) == self.backgroundPage and \
             self.theme.background_type == background_image and \
-            self.imageFileEdit.text().isEmpty():
+            not self.imageFileEdit.text():
             QtGui.QMessageBox.critical(self,
                 translate('OpenLP.ThemeWizard', 'Background Image Empty'),
                 translate('OpenLP.ThemeWizard', 'You have not selected a '
@@ -326,8 +325,8 @@
         self.themeNameEdit.setVisible(not edit)
         self.edit_mode = edit
         if edit:
-            self.setWindowTitle(unicode(translate('OpenLP.ThemeWizard',
-                'Edit Theme - %s')) % self.theme.theme_name)
+            self.setWindowTitle(translate('OpenLP.ThemeWizard',
+                'Edit Theme - %s') % self.theme.theme_name)
             self.next()
         else:
             self.setWindowTitle(UiStrings().NewTheme)
@@ -358,37 +357,37 @@
             BackgroundType.to_string(BackgroundType.Solid):
             self.colorButton.setStyleSheet(u'background-color: %s' %
                 self.theme.background_color)
-            self.setField(u'background_type', QtCore.QVariant(0))
+            self.setField(u'background_type', 0)
         elif self.theme.background_type == \
             BackgroundType.to_string(BackgroundType.Gradient):
             self.gradientStartButton.setStyleSheet(u'background-color: %s' %
                 self.theme.background_start_color)
             self.gradientEndButton.setStyleSheet(u'background-color: %s' %
                 self.theme.background_end_color)
-            self.setField(u'background_type', QtCore.QVariant(1))
+            self.setField(u'background_type', 1)
         elif self.theme.background_type == \
             BackgroundType.to_string(BackgroundType.Image):
             self.imageColorButton.setStyleSheet(u'background-color: %s' %
                 self.theme.background_border_color)
             self.imageFileEdit.setText(self.theme.background_filename)
-            self.setField(u'background_type', QtCore.QVariant(2))
+            self.setField(u'background_type', 2)
         elif self.theme.background_type == \
             BackgroundType.to_string(BackgroundType.Transparent):
-            self.setField(u'background_type', QtCore.QVariant(3))
+            self.setField(u'background_type', 3)
         if self.theme.background_direction == \
             BackgroundGradientType.to_string(BackgroundGradientType.Horizontal):
-            self.setField(u'gradient', QtCore.QVariant(0))
+            self.setField(u'gradient', 0)
         elif self.theme.background_direction == \
             BackgroundGradientType.to_string(BackgroundGradientType.Vertical):
-            self.setField(u'gradient', QtCore.QVariant(1))
+            self.setField(u'gradient', 1)
         elif self.theme.background_direction == \
             BackgroundGradientType.to_string(BackgroundGradientType.Circular):
-            self.setField(u'gradient', QtCore.QVariant(2))
+            self.setField(u'gradient', 2)
         elif self.theme.background_direction == \
             BackgroundGradientType.to_string(BackgroundGradientType.LeftTop):
-            self.setField(u'gradient', QtCore.QVariant(3))
+            self.setField(u'gradient', 3)
         else:
-            self.setField(u'gradient', QtCore.QVariant(4))
+            self.setField(u'gradient', 4)
 
     def setMainAreaPageValues(self):
         """
@@ -398,26 +397,19 @@
             QtGui.QFont(self.theme.font_main_name))
         self.mainColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_color)
-        self.setField(u'mainSizeSpinBox',
-            QtCore.QVariant(self.theme.font_main_size))
+        self.setField(u'mainSizeSpinBox', self.theme.font_main_size)
         self.setField(u'lineSpacingSpinBox',
-            QtCore.QVariant(self.theme.font_main_line_adjustment))
-        self.setField(u'outlineCheckBox',
-            QtCore.QVariant(self.theme.font_main_outline))
+            self.theme.font_main_line_adjustment)
+        self.setField(u'outlineCheckBox', self.theme.font_main_outline)
         self.outlineColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_outline_color)
-        self.setField(u'outlineSizeSpinBox',
-            QtCore.QVariant(self.theme.font_main_outline_size))
-        self.setField(u'shadowCheckBox',
-            QtCore.QVariant(self.theme.font_main_shadow))
+        self.setField(u'outlineSizeSpinBox', self.theme.font_main_outline_size)
+        self.setField(u'shadowCheckBox', self.theme.font_main_shadow)
         self.shadowColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_shadow_color)
-        self.setField(u'shadowSizeSpinBox',
-            QtCore.QVariant(self.theme.font_main_shadow_size))
-        self.setField(u'mainBoldCheckBox',
-            QtCore.QVariant(self.theme.font_main_bold))
-        self.setField(u'mainItalicsCheckBox',
-            QtCore.QVariant(self.theme.font_main_italics))
+        self.setField(u'shadowSizeSpinBox', self.theme.font_main_shadow_size)
+        self.setField(u'mainBoldCheckBox', self.theme.font_main_bold)
+        self.setField(u'mainItalicsCheckBox', self.theme.font_main_italics)
 
     def setFooterAreaPageValues(self):
         """
@@ -427,8 +419,7 @@
             QtGui.QFont(self.theme.font_footer_name))
         self.footerColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_footer_color)
-        self.setField(u'footerSizeSpinBox',
-            QtCore.QVariant(self.theme.font_footer_size))
+        self.setField(u'footerSizeSpinBox', self.theme.font_footer_size)
 
     def setPositionPageValues(self):
         """
@@ -436,40 +427,31 @@
         """
         # Main Area
         self.mainPositionCheckBox.setChecked(not self.theme.font_main_override)
-        self.setField(u'mainPositionX', QtCore.QVariant(self.theme.font_main_x))
-        self.setField(u'mainPositionY', QtCore.QVariant(self.theme.font_main_y))
-        self.setField(u'mainPositionHeight',
-            QtCore.QVariant(self.theme.font_main_height))
-        self.setField(u'mainPositionWidth',
-            QtCore.QVariant(self.theme.font_main_width))
+        self.setField(u'mainPositionX', self.theme.font_main_x)
+        self.setField(u'mainPositionY', self.theme.font_main_y)
+        self.setField(u'mainPositionHeight', self.theme.font_main_height)
+        self.setField(u'mainPositionWidth', self.theme.font_main_width)
         # Footer
         self.footerPositionCheckBox.setChecked(
             not self.theme.font_footer_override)
-        self.setField(u'footerPositionX',
-            QtCore.QVariant(self.theme.font_footer_x))
-        self.setField(u'footerPositionY',
-            QtCore.QVariant(self.theme.font_footer_y))
-        self.setField(u'footerPositionHeight',
-            QtCore.QVariant(self.theme.font_footer_height))
-        self.setField(u'footerPositionWidth',
-            QtCore.QVariant(self.theme.font_footer_width))
+        self.setField(u'footerPositionX', self.theme.font_footer_x)
+        self.setField(u'footerPositionY', self.theme.font_footer_y)
+        self.setField(u'footerPositionHeight', self.theme.font_footer_height)
+        self.setField(u'footerPositionWidth', self.theme.font_footer_width)
 
     def setAlignmentPageValues(self):
         """
         Handle the display and state of the Alignments page.
         """
-        self.setField(u'horizontal',
-            QtCore.QVariant(self.theme.display_horizontal_align))
-        self.setField(u'vertical',
-            QtCore.QVariant(self.theme.display_vertical_align))
-        self.setField(u'slideTransition',
-            QtCore.QVariant(self.theme.display_slide_transition))
+        self.setField(u'horizontal', self.theme.display_horizontal_align)
+        self.setField(u'vertical', self.theme.display_vertical_align)
+        self.setField(u'slideTransition', self.theme.display_slide_transition)
 
     def setPreviewPageValues(self):
         """
         Handle the display and state of the Preview page.
         """
-        self.setField(u'name', QtCore.QVariant(self.theme.theme_name))
+        self.setField(u'name', self.theme.theme_name)
 
     def onBackgroundComboBoxCurrentIndexChanged(self, index):
         """
@@ -574,51 +556,42 @@
             return
         log.debug(u'updateTheme')
         # main page
-        self.theme.font_main_name = \
-            unicode(self.mainFontComboBox.currentFont().family())
-        self.theme.font_main_size = \
-            self.field(u'mainSizeSpinBox').toInt()[0]
-        self.theme.font_main_line_adjustment = \
-            self.field(u'lineSpacingSpinBox').toInt()[0]
-        self.theme.font_main_outline_size = \
-            self.field(u'outlineSizeSpinBox').toInt()[0]
-        self.theme.font_main_shadow_size = \
-            self.field(u'shadowSizeSpinBox').toInt()[0]
-        self.theme.font_main_bold = \
-            self.field(u'mainBoldCheckBox').toBool()
+        self.theme.font_main_name = self.mainFontComboBox.currentFont().family()
+        self.theme.font_main_size = self.field(u'mainSizeSpinBox')
+        self.theme.font_main_line_adjustment = self.field(u'lineSpacingSpinBox')
+        self.theme.font_main_outline_size = self.field(u'outlineSizeSpinBox')
+        self.theme.font_main_shadow_size = self.field(u'shadowSizeSpinBox')
+        self.theme.font_main_bold = self.field(u'mainBoldCheckBox')
+        # FIXME ?
         self.theme.font_main_italics = \
-            self.field(u'mainItalicsCheckBox').toBool()
+            self.field(u'mainItalicsCheckBox')
         # footer page
         self.theme.font_footer_name = \
-            unicode(self.footerFontComboBox.currentFont().family())
-        self.theme.font_footer_size = \
-            self.field(u'footerSizeSpinBox').toInt()[0]
+            self.footerFontComboBox.currentFont().family()
+        self.theme.font_footer_size = self.field(u'footerSizeSpinBox')
         # position page
-        self.theme.font_main_x = self.field(u'mainPositionX').toInt()[0]
-        self.theme.font_main_y = self.field(u'mainPositionY').toInt()[0]
-        self.theme.font_main_height = \
-            self.field(u'mainPositionHeight').toInt()[0]
-        self.theme.font_main_width = self.field(u'mainPositionWidth').toInt()[0]
-        self.theme.font_footer_x = self.field(u'footerPositionX').toInt()[0]
-        self.theme.font_footer_y = self.field(u'footerPositionY').toInt()[0]
-        self.theme.font_footer_height = \
-            self.field(u'footerPositionHeight').toInt()[0]
-        self.theme.font_footer_width = \
-            self.field(u'footerPositionWidth').toInt()[0]
+        self.theme.font_main_x = self.field(u'mainPositionX')
+        self.theme.font_main_y = self.field(u'mainPositionY')
+        self.theme.font_main_height = self.field(u'mainPositionHeight')
+        self.theme.font_main_width = self.field(u'mainPositionWidth')
+        #print self.field(u'footerPositionX')
+        self.theme.font_footer_x = self.field(u'footerPositionX')
+        self.theme.font_footer_y = self.field(u'footerPositionY')
+        self.theme.font_footer_height = self.field(u'footerPositionHeight')
+        self.theme.font_footer_width = self.field(u'footerPositionWidth')
         # position page
         self.theme.display_horizontal_align = \
             self.horizontalComboBox.currentIndex()
-        self.theme.display_vertical_align = \
-            self.verticalComboBox.currentIndex()
-        self.theme.display_slide_transition = \
-            self.field(u'slideTransition').toBool()
+        self.theme.display_vertical_align = self.verticalComboBox.currentIndex()
+        # TODO Check
+        self.theme.display_slide_transition = self.field(u'slideTransition')
 
     def accept(self):
         """
         Lets save the theme as Finish has been triggered
         """
         # Save the theme name
-        self.theme.theme_name = unicode(self.field(u'name').toString())
+        self.theme.theme_name = self.field(u'name')
         if not self.theme.theme_name:
             critical_error_message_box(
                 translate('OpenLP.ThemeWizard', 'Theme Name Missing'),

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2012-12-05 06:12:07 +0000
+++ openlp/core/ui/thememanager.py	2012-12-05 21:02:22 +0000
@@ -38,10 +38,9 @@
 
 from openlp.core.lib import OpenLPToolbar, get_text_file_string, build_icon, \
     Receiver, SettingsManager, translate, check_item_selected, \
-    check_directory_exists, create_thumb, validate_thumb, ImageSource
+    check_directory_exists, create_thumb, validate_thumb, ImageSource, Settings
 from openlp.core.lib.theme import ThemeXML, BackgroundType, VerticalType, \
     BackgroundGradientType
-from openlp.core.lib.settings import Settings
 from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
     create_widget_action
 from openlp.core.theme import Theme
@@ -167,9 +166,8 @@
         """
         Triggered when Config dialog is updated.
         """
-        self.global_theme = unicode(Settings().value(
-            self.settingsSection + u'/global theme',
-            QtCore.QVariant(u'')).toString())
+        self.global_theme = Settings().value(
+            self.settingsSection + u'/global theme', u'')
 
     def checkListState(self, item):
         """
@@ -177,8 +175,8 @@
         """
         if item is None:
             return
-        real_theme_name = unicode(item.data(QtCore.Qt.UserRole).toString())
-        theme_name = unicode(item.text())
+        real_theme_name = item.data(QtCore.Qt.UserRole)
+        theme_name = item.text()
         # If default theme restrict actions
         if real_theme_name == theme_name:
             self.deleteToolbarAction.setVisible(True)
@@ -193,7 +191,7 @@
         item = self.themeListWidget.itemAt(point)
         if item is None:
             return
-        real_theme_name = unicode(item.data(QtCore.Qt.UserRole).toString())
+        real_theme_name = item.data(QtCore.Qt.UserRole)
         theme_name = unicode(item.text())
         visible = real_theme_name == theme_name
         self.deleteAction.setVisible(visible)
@@ -211,13 +209,13 @@
             # reset the old name
             item = self.themeListWidget.item(count)
             old_name = item.text()
-            new_name = unicode(item.data(QtCore.Qt.UserRole).toString())
+            new_name = item.data(QtCore.Qt.UserRole)
             if old_name != new_name:
                 self.themeListWidget.item(count).setText(new_name)
             # Set the new name
             if theme_name == new_name:
-                name = unicode(translate('OpenLP.ThemeManager',
-                    '%s (default)')) % new_name
+                name = translate('OpenLP.ThemeManager',
+                    '%s (default)') % new_name
                 self.themeListWidget.item(count).setText(name)
                 self.deleteToolbarAction.setVisible(
                     item not in self.themeListWidget.selectedItems())
@@ -233,19 +231,17 @@
             item = self.themeListWidget.item(count)
             old_name = item.text()
             # reset the old name
-            if old_name != unicode(item.data(QtCore.Qt.UserRole).toString()):
+            if old_name != item.data(QtCore.Qt.UserRole):
                 self.themeListWidget.item(count).setText(
-                    unicode(item.data(QtCore.Qt.UserRole).toString()))
+                    item.data(QtCore.Qt.UserRole))
             # Set the new name
             if count == selected_row:
-                self.global_theme = unicode(
-                    self.themeListWidget.item(count).text())
-                name = unicode(translate('OpenLP.ThemeManager',
-                    '%s (default)')) % self.global_theme
+                self.global_theme = self.themeListWidget.item(count).text()
+                name = translate('OpenLP.ThemeManager',
+                    '%s (default)') % self.global_theme
                 self.themeListWidget.item(count).setText(name)
                 Settings().setValue(
-                    self.settingsSection + u'/global theme',
-                    QtCore.QVariant(self.global_theme))
+                    self.settingsSection + u'/global theme', self.global_theme)
                 Receiver.send_message(u'theme_update_global', self.global_theme)
                 self._pushThemes()
 
@@ -264,16 +260,16 @@
         """
         Renames an existing theme to a new name
         """
-        if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
-            'You must select a theme to rename.')),
-            unicode(translate('OpenLP.ThemeManager', 'Rename Confirmation')),
-            unicode(translate('OpenLP.ThemeManager', 'Rename %s theme?')),
+        if self._validate_theme_action(translate('OpenLP.ThemeManager',
+            'You must select a theme to rename.'),
+            translate('OpenLP.ThemeManager', 'Rename Confirmation'),
+            translate('OpenLP.ThemeManager', 'Rename %s theme?'),
             False, False):
             item = self.themeListWidget.currentItem()
-            old_theme_name = unicode(item.data(QtCore.Qt.UserRole).toString())
+            old_theme_name = item.data(QtCore.Qt.UserRole)
             self.fileRenameForm.fileNameEdit.setText(old_theme_name)
             if self.fileRenameForm.exec_():
-                new_theme_name = unicode(self.fileRenameForm.fileNameEdit.text())
+                new_theme_name = self.fileRenameForm.fileNameEdit.text()
                 if old_theme_name == new_theme_name:
                     return
                 if self.checkIfThemeExists(new_theme_name):
@@ -292,12 +288,12 @@
         Copies an existing theme to a new name
         """
         item = self.themeListWidget.currentItem()
-        old_theme_name = unicode(item.data(QtCore.Qt.UserRole).toString())
+        old_theme_name = item.data(QtCore.Qt.UserRole)
         self.fileRenameForm.fileNameEdit.setText(
-            unicode(translate('OpenLP.ThemeManager',
-            'Copy of %s', 'Copy of <theme name>')) % old_theme_name)
+            translate('OpenLP.ThemeManager',
+            'Copy of %s', 'Copy of <theme name>') % old_theme_name)
         if self.fileRenameForm.exec_(True):
-            new_theme_name = unicode(self.fileRenameForm.fileNameEdit.text())
+            new_theme_name = self.fileRenameForm.fileNameEdit.text()
             if self.checkIfThemeExists(new_theme_name):
                 theme_data = self.getThemeData(old_theme_name)
                 self.cloneThemeData(theme_data, new_theme_name)
@@ -326,8 +322,7 @@
         if check_item_selected(self.themeListWidget, translate(
             'OpenLP.ThemeManager', 'You must select a theme to edit.')):
             item = self.themeListWidget.currentItem()
-            theme = self.getThemeData(
-                unicode(item.data(QtCore.Qt.UserRole).toString()))
+            theme = self.getThemeData(item.data(QtCore.Qt.UserRole))
             if theme.background_type == u'image':
                 self.oldBackgroundImage = theme.background_filename
             self.themeForm.theme = theme
@@ -340,12 +335,12 @@
         """
         Delete a theme
         """
-        if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
-            'You must select a theme to delete.')),
-            unicode(translate('OpenLP.ThemeManager', 'Delete Confirmation')),
-            unicode(translate('OpenLP.ThemeManager', 'Delete %s theme?'))):
+        if self._validate_theme_action(translate('OpenLP.ThemeManager',
+            'You must select a theme to delete.'),
+            translate('OpenLP.ThemeManager', 'Delete Confirmation'),
+            translate('OpenLP.ThemeManager', 'Delete %s theme?')):
             item = self.themeListWidget.currentItem()
-            theme = unicode(item.text())
+            theme = item.text()
             row = self.themeListWidget.row(item)
             self.themeListWidget.takeItem(row)
             self.deleteTheme(theme)
@@ -380,10 +375,9 @@
             critical_error_message_box(message=translate('OpenLP.ThemeManager',
                 'You have not selected a theme.'))
             return
-        theme = unicode(item.data(QtCore.Qt.UserRole).toString())
+        theme = item.data(QtCore.Qt.UserRole)
         path = QtGui.QFileDialog.getExistingDirectory(self,
-            unicode(translate('OpenLP.ThemeManager',
-            'Save Theme - (%s)')) % theme,
+            translate('OpenLP.ThemeManager', 'Save Theme - (%s)') % theme,
             SettingsManager.get_last_dir(self.settingsSection, 1))
         path = unicode(path)
         Receiver.send_message(u'cursor_busy')
@@ -423,8 +417,8 @@
         files = QtGui.QFileDialog.getOpenFileNames(self,
             translate('OpenLP.ThemeManager', 'Select Theme Import File'),
             SettingsManager.get_last_dir(self.settingsSection),
-            unicode(translate('OpenLP.ThemeManager',
-            'OpenLP Themes (*.theme *.otz)')))
+            translate('OpenLP.ThemeManager',
+            'OpenLP Themes (*.theme *.otz)'))
         log.info(u'New Themes %s', unicode(files))
         if not files:
             return
@@ -454,8 +448,7 @@
                 theme.theme_name = UiStrings().Default
                 self._writeTheme(theme, None, None)
                 Settings().setValue(
-                    self.settingsSection + u'/global theme',
-                    QtCore.QVariant(theme.theme_name))
+                    self.settingsSection + u'/global theme', theme.theme_name)
                 self.configUpdated()
                 files = SettingsManager.get_files(self.settingsSection, u'.png')
         # Sort the themes by its name considering language specific 
@@ -468,8 +461,8 @@
             if os.path.exists(theme):
                 text_name = os.path.splitext(name)[0]
                 if text_name == self.global_theme:
-                    name = unicode(translate('OpenLP.ThemeManager',
-                        '%s (default)')) % text_name
+                    name = translate(
+                        'OpenLP.ThemeManager', '%s (default)') % text_name
                 else:
                     name = text_name
                 thumb = os.path.join(self.thumbPath, u'%s.png' % text_name)
@@ -479,8 +472,7 @@
                 else:
                     icon = create_thumb(theme, thumb)
                 item_name.setIcon(icon)
-                item_name.setData(
-                    QtCore.Qt.UserRole, QtCore.QVariant(text_name))
+                item_name.setData(QtCore.Qt.UserRole, text_name)
                 self.themeListWidget.addItem(item_name)
                 self.themeList.append(text_name)
         self._pushThemes()
@@ -774,12 +766,11 @@
         Check to see if theme has been selected and the destructive action
         is allowed.
         """
-        self.global_theme = unicode(Settings().value(
-            self.settingsSection + u'/global theme',
-            QtCore.QVariant(u'')).toString())
+        self.global_theme = Settings().value(
+            self.settingsSection + u'/global theme', u'')
         if check_item_selected(self.themeListWidget, select_text):
             item = self.themeListWidget.currentItem()
-            theme = unicode(item.text())
+            theme = item.text()
             # confirm deletion
             if confirm:
                 answer = QtGui.QMessageBox.question(self, confirm_title,
@@ -789,7 +780,7 @@
                 if answer == QtGui.QMessageBox.No:
                     return False
             # should be the same unless default
-            if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
+            if theme != item.data(QtCore.Qt.UserRole):
                 critical_error_message_box(
                     message=translate('OpenLP.ThemeManager',
                     'You are unable to delete the default theme.'))
@@ -801,8 +792,8 @@
                         critical_error_message_box(
                             translate('OpenLP.ThemeManager',
                             'Validation Error'),
-                            unicode(translate('OpenLP.ThemeManager',
-                            'Theme %s is used in the %s plugin.')) % \
+                            translate('OpenLP.ThemeManager',
+                            'Theme %s is used in the %s plugin.') % \
                             (theme, plugin.name))
                         return False
             return True

=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/themestab.py	2012-12-05 21:02:22 +0000
@@ -29,10 +29,9 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, Receiver, translate
+from openlp.core.lib import Receiver, Settings, SettingsTab, translate
 from openlp.core.lib.theme import ThemeLevel
 from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box
-from openlp.core.lib.settings import Settings
 
 class ThemesTab(SettingsTab):
     """
@@ -137,9 +136,8 @@
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        self.theme_level = settings.value(
-            u'theme level', ThemeLevel.Song).toInt()[0]
-        self.global_theme = unicode(settings.value(u'global theme').toString())
+        self.theme_level = settings.value(u'theme level', ThemeLevel.Song)
+        self.global_theme = settings.value(u'global theme', u'')
         settings.endGroup()
         if self.theme_level == ThemeLevel.Global:
             self.GlobalLevelRadioButton.setChecked(True)
@@ -151,8 +149,8 @@
     def save(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        settings.setValue(u'theme level', QtCore.QVariant(self.theme_level))
-        settings.setValue(u'global theme', QtCore.QVariant(self.global_theme))
+        settings.setValue(u'theme level', self.theme_level)
+        settings.setValue(u'global theme', self.global_theme)
         settings.endGroup()
         self.mainwindow.renderer.set_global_theme(self.global_theme)
         self.mainwindow.renderer.set_theme_level(self.theme_level)
@@ -171,9 +169,8 @@
         self.theme_level = ThemeLevel.Global
 
     def onDefaultComboBoxChanged(self, value):
-        self.global_theme = unicode(self.DefaultComboBox.currentText())
+        self.global_theme = self.DefaultComboBox.currentText()
         self.mainwindow.renderer.set_global_theme(self.global_theme)
-        self.mainwindow.renderer.set_theme_level(self.theme_level)
         self.__previewGlobalTheme()
 
     def updateThemeList(self, theme_list):
@@ -186,9 +183,8 @@
                 [u'Bible Theme', u'Song Theme']
         """
         # Reload as may have been triggered by the ThemeManager.
-        self.global_theme = unicode(Settings().value(
-            self.settingsSection + u'/global theme',
-            QtCore.QVariant(u'')).toString())
+        self.global_theme = Settings().value(
+            self.settingsSection + u'/global theme', u'')
         self.DefaultComboBox.clear()
         self.DefaultComboBox.addItems(theme_list)
         find_and_set_in_combo_box(self.DefaultComboBox, self.global_theme)

=== modified file 'openlp/core/ui/wizard.py'
--- openlp/core/ui/wizard.py	2012-12-01 07:57:54 +0000
+++ openlp/core/ui/wizard.py	2012-12-05 21:02:22 +0000
@@ -54,25 +54,25 @@
     FormatLabel = translate('OpenLP.Ui', 'Format:')
     HeaderStyle = u'<span style="font-size:14pt; font-weight:600;">%s</span>'
     Importing = translate('OpenLP.Ui', 'Importing')
-    ImportingType = unicode(translate('OpenLP.Ui', 'Importing "%s"...'))
+    ImportingType = translate('OpenLP.Ui', 'Importing "%s"...')
     ImportSelect = translate('OpenLP.Ui', 'Select Import Source')
-    ImportSelectLong = unicode(translate('OpenLP.Ui',
-        'Select the import format and the location to import from.'))
+    ImportSelectLong = translate('OpenLP.Ui',
+        'Select the import format and the location to import from.')
     NoSqlite = translate('OpenLP.Ui', 'The openlp.org 1.x importer has been '
         'disabled due to a missing Python module. If you want to use this '
         'importer, you will need to install the "python-sqlite" '
         'module.')
-    OpenTypeFile = unicode(translate('OpenLP.Ui', 'Open %s File'))
-    OpenTypeFolder = unicode(translate('OpenLP.Ui', 'Open %s Folder'))
-    PercentSymbolFormat = unicode(translate('OpenLP.Ui', '%p%'))
+    OpenTypeFile = translate('OpenLP.Ui', 'Open %s File')
+    OpenTypeFolder = translate('OpenLP.Ui', 'Open %s Folder')
+    PercentSymbolFormat = translate('OpenLP.Ui', '%p%')
     Ready = translate('OpenLP.Ui', 'Ready.')
     StartingImport = translate('OpenLP.Ui', 'Starting import...')
-    YouSpecifyFile = unicode(translate('OpenLP.Ui', 'You need to specify one '
-        '%s file to import from.', 'A file type e.g. OpenSong'))
-    YouSpecifyFiles = unicode(translate('OpenLP.Ui', 'You need to specify at '
-        'least one %s file to import from.', 'A file type e.g. OpenSong'))
-    YouSpecifyFolder = unicode(translate('OpenLP.Ui', 'You need to specify one '
-        '%s folder to import from.', 'A song format e.g. PowerSong'))
+    YouSpecifyFile = translate('OpenLP.Ui', 'You need to specify one '
+        '%s file to import from.', 'A file type e.g. OpenSong')
+    YouSpecifyFiles = translate('OpenLP.Ui', 'You need to specify at '
+        'least one %s file to import from.', 'A file type e.g. OpenSong')
+    YouSpecifyFolder = translate('OpenLP.Ui', 'You need to specify one '
+        '%s folder to import from.', 'A song format e.g. PowerSong')
 
 
 class OpenLPWizard(QtGui.QWizard):

=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py	2012-12-01 07:57:54 +0000
+++ openlp/core/utils/__init__.py	2012-12-05 21:02:22 +0000
@@ -32,13 +32,14 @@
 from datetime import datetime
 from distutils.version import LooseVersion
 import logging
+import locale
 import os
 import re
 from subprocess import Popen, PIPE
 import sys
 import urllib2
 
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings
 
 from PyQt4 import QtGui, QtCore
 
@@ -91,7 +92,7 @@
     VersionDir = 5
     CacheDir = 6
     LanguageDir = 7
-    
+
     # Base path where data/config/cache dir is located
     BaseDir = None
 
@@ -296,10 +297,9 @@
     # set to prod in the distribution config file.
     settings = Settings()
     settings.beginGroup(u'general')
-    last_test = unicode(settings.value(u'last version test',
-        QtCore.QVariant(datetime.now().date())).toString())
-    this_test = unicode(datetime.now().date())
-    settings.setValue(u'last version test', QtCore.QVariant(this_test))
+    last_test = settings.value(u'last version test', datetime.now().date())
+    this_test = datetime.now().date()
+    settings.setValue(u'last version test', this_test)
     settings.endGroup()
     if last_test != this_test:
         if current_version[u'build']:
@@ -497,15 +497,17 @@
     or 0, depending on whether string1 collates before or after string2 or
     is equal to it. Comparison is case insensitive.
     """
-    # Function locale.strcol() from standard Python library does not work
+    # Function locale.strcoll() from standard Python library does not work
     # properly on Windows and probably somewhere else.
-    return QtCore.QString.localeAwareCompare(string1.lower(), string2.lower())
+    return locale.strcoll(string1.lower(), string2.lower())
+    # TODO: check code
+    #return QtCore.QString.localeAwareCompare(string1.lower(), string2.lower())
 
 
 # For performance reasons provide direct reference to compare function
 # without wrapping it in another function making te string lowercase.
 # This is needed for sorting songs.
-locale_direct_compare = QtCore.QString.localeAwareCompare
+locale_direct_compare = locale.strcoll
 
 
 from languagemanager import LanguageManager

=== modified file 'openlp/core/utils/actions.py'
--- openlp/core/utils/actions.py	2012-12-01 07:57:54 +0000
+++ openlp/core/utils/actions.py	2012-12-05 21:02:22 +0000
@@ -32,7 +32,8 @@
 """
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings
+
 
 class ActionCategory(object):
     """
@@ -232,8 +233,7 @@
         # Load the shortcut from the config.
         settings = Settings()
         settings.beginGroup(u'shortcuts')
-        shortcuts = settings.value(action.objectName(),
-            QtCore.QVariant(action.shortcuts())).toStringList()
+        shortcuts = settings.value(action.objectName(), action.shortcuts())
         settings.endGroup()
         if not shortcuts:
             action.setShortcuts([])

=== modified file 'openlp/core/utils/languagemanager.py'
--- openlp/core/utils/languagemanager.py	2012-12-01 07:57:54 +0000
+++ openlp/core/utils/languagemanager.py	2012-12-05 21:02:22 +0000
@@ -31,13 +31,13 @@
 language file loading for OpenLP.
 """
 import logging
+import re
 import sys
 
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.utils import AppLocation
-from openlp.core.lib import translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import translate, Settings
 
 log = logging.getLogger(__name__)
 
@@ -78,13 +78,16 @@
             AppLocation.LanguageDir))
         trans_dir = QtCore.QDir(AppLocation.get_directory(
             AppLocation.LanguageDir))
-        file_names = trans_dir.entryList(QtCore.QStringList(u'*.qm'),
-                QtCore.QDir.Files, QtCore.QDir.Name)
+        file_names = trans_dir.entryList(
+            u'*.qm', QtCore.QDir.Files, QtCore.QDir.Name)
         # Remove qm files from the list which start with "qt_".
-        file_names = file_names.filter(QtCore.QRegExp("^(?!qt_)"))
+        file_names = filter(
+            lambda file_: not file_.startswith(u'qt_'), file_names)
+        names = []
         for name in file_names:
-            file_names.replaceInStrings(name, trans_dir.filePath(name))
-        return file_names
+            names.append(trans_dir.filePath(name))
+            #file_names.replaceInStrings(name, trans_dir.filePath(name))
+        return names
 
     @staticmethod
     def language_name(qm_file):
@@ -104,14 +107,12 @@
         """
         Retrieve a saved language to use from settings
         """
-        settings = Settings()
-        language = unicode(settings.value(
-            u'general/language', QtCore.QVariant(u'[en]')).toString())
+        language = Settings().value(u'general/language', u'[en]')
+        language = str(language)
         log.info(u'Language file: \'%s\' Loaded from conf file' % language)
-        reg_ex = QtCore.QRegExp("^\[(.*)\]")
-        if reg_ex.exactMatch(language):
+        if re.match(r'[[].*[]]', language):
             LanguageManager.auto_language = True
-            language = reg_ex.cap(1)
+            language = re.sub(r'[\[\]]', '', language)
         return language
 
     @staticmethod
@@ -136,8 +137,7 @@
                 language = unicode(qm_list[action_name])
         if LanguageManager.auto_language:
             language = u'[%s]' % language
-        Settings().setValue(
-            u'general/language', QtCore.QVariant(language))
+        Settings().setValue(u'general/language', language)
         log.info(u'Language file: \'%s\' written to conf file' % language)
         if message:
             QtGui.QMessageBox.information(None,

=== modified file 'openlp/plugins/alerts/alertsplugin.py'
--- openlp/plugins/alerts/alertsplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/alerts/alertsplugin.py	2012-12-05 21:02:22 +0000
@@ -31,10 +31,10 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import Plugin, StringContent, build_icon, translate
+from openlp.core.lib import Plugin, StringContent, build_icon, translate, \
+    Settings
 from openlp.core.lib.db import Manager
 from openlp.core.lib.ui import create_action, UiStrings
-from openlp.core.lib.settings import Settings
 from openlp.core.lib.theme import VerticalType
 from openlp.core.utils.actions import ActionList
 from openlp.plugins.alerts.lib import AlertsManager, AlertsTab
@@ -149,7 +149,7 @@
         Plugin.initialise(self)
         self.toolsAlertItem.setVisible(True)
         action_list = ActionList.get_instance()
-        action_list.add_action(self.toolsAlertItem, unicode(UiStrings().Tools))
+        action_list.add_action(self.toolsAlertItem, UiStrings().Tools)
 
     def finalise(self):
         """
@@ -165,7 +165,7 @@
     def toggleAlertsState(self):
         self.alertsActive = not self.alertsActive
         Settings().setValue(self.settingsSection + u'/active',
-            QtCore.QVariant(self.alertsActive))
+            self.alertsActive)
 
     def onAlertsTrigger(self):
         self.alertForm.loadList()

=== modified file 'openlp/plugins/alerts/forms/alertform.py'
--- openlp/plugins/alerts/forms/alertform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/alerts/forms/alertform.py	2012-12-05 21:02:22 +0000
@@ -79,7 +79,7 @@
             order_by_ref=AlertItem.text)
         for alert in alerts:
             item_name = QtGui.QListWidgetItem(alert.text)
-            item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(alert.id))
+            item_name.setData(QtCore.Qt.UserRole, alert.id)
             self.alertListWidget.addItem(item_name)
             if alert.text == unicode(self.alertTextEdit.text()):
                 self.item_id = alert.id
@@ -87,10 +87,10 @@
                     self.alertListWidget.row(item_name))
 
     def onDisplayClicked(self):
-        self.triggerAlert(unicode(self.alertTextEdit.text()))
+        self.triggerAlert(self.alertTextEdit.text())
 
     def onDisplayCloseClicked(self):
-        if self.triggerAlert(unicode(self.alertTextEdit.text())):
+        if self.triggerAlert(self.alertTextEdit.text()):
             self.close()
 
     def onDeleteButtonClicked(self):
@@ -99,7 +99,7 @@
         """
         item = self.alertListWidget.currentItem()
         if item:
-            item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = item.data(QtCore.Qt.UserRole)
             self.manager.delete_object(AlertItem, item_id)
             row = self.alertListWidget.row(item)
             self.alertListWidget.takeItem(row)
@@ -115,7 +115,7 @@
                 'clicking New.'))
         else:
             alert = AlertItem()
-            alert.text = unicode(self.alertTextEdit.text())
+            alert.text = self.alertTextEdit.text()
             self.manager.save_object(alert)
         self.loadList()
 
@@ -125,7 +125,7 @@
         """
         if self.item_id:
             alert = self.manager.get_object(AlertItem, self.item_id)
-            alert.text = unicode(self.alertTextEdit.text())
+            alert.text = self.alertTextEdit.text()
             self.manager.save_object(alert)
             self.item_id = None
             self.loadList()
@@ -133,7 +133,7 @@
 
     def onTextChanged(self):
         """
-        Enable save button when data has been changed by editing the form
+        Enable save button when data has been changed by editing the form.
         """
         # Only enable the button, if we are editing an item.
         if self.item_id:
@@ -147,26 +147,26 @@
 
     def onDoubleClick(self):
         """
-        List item has been double clicked to display it
+        List item has been double clicked to display it.
         """
         item = self.alertListWidget.selectedIndexes()[0]
         bitem = self.alertListWidget.item(item.row())
-        self.triggerAlert(unicode(bitem.text()))
-        self.alertTextEdit.setText(unicode(bitem.text()))
-        self.item_id = (bitem.data(QtCore.Qt.UserRole)).toInt()[0]
+        self.triggerAlert(bitem.text())
+        self.alertTextEdit.setText(bitem.text())
+        self.item_id = bitem.data(QtCore.Qt.UserRole)
         self.saveButton.setEnabled(False)
 
     def onSingleClick(self):
         """
-        List item has been single clicked to add it to
-        the edit field so it can be changed.
+        List item has been single clicked to add it to the edit field so it can
+        be changed.
         """
         item = self.alertListWidget.selectedIndexes()[0]
         bitem = self.alertListWidget.item(item.row())
-        self.alertTextEdit.setText(unicode(bitem.text()))
-        self.item_id = (bitem.data(QtCore.Qt.UserRole)).toInt()[0]
+        self.alertTextEdit.setText(bitem.text())
+        self.item_id = bitem.data(QtCore.Qt.UserRole)
         # If the alert does not contain '<>' we clear the ParameterEdit field.
-        if unicode(self.alertTextEdit.text()).find(u'<>') == -1:
+        if self.alertTextEdit.text().find(u'<>') == -1:
             self.parameterEdit.setText(u'')
         self.saveButton.setEnabled(False)
 
@@ -200,7 +200,7 @@
             QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.No:
             self.parameterEdit.setFocus()
             return False
-        text = text.replace(u'<>', unicode(self.parameterEdit.text()))
+        text = text.replace(u'<>', self.parameterEdit.text())
         self.plugin.alertsmanager.displayAlert(text)
         return True
 

=== modified file 'openlp/plugins/alerts/lib/alertstab.py'
--- openlp/plugins/alerts/lib/alertstab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/alerts/lib/alertstab.py	2012-12-05 21:02:22 +0000
@@ -29,10 +29,9 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate, Receiver
+from openlp.core.lib import SettingsTab, translate, Receiver, Settings
 from openlp.core.ui import AlertLocation
 from openlp.core.lib.ui import UiStrings, create_valign_selection_widgets
-from openlp.core.lib.settings import Settings
 
 class AlertsTab(SettingsTab):
     """
@@ -157,17 +156,12 @@
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        self.timeout = settings.value(u'timeout', QtCore.QVariant(5)).toInt()[0]
-        self.font_color = unicode(settings.value(
-            u'font color', QtCore.QVariant(u'#ffffff')).toString())
-        self.font_size = settings.value(
-            u'font size', QtCore.QVariant(40)).toInt()[0]
-        self.bg_color = unicode(settings.value(
-            u'background color', QtCore.QVariant(u'#660000')).toString())
-        self.font_face = unicode(settings.value(
-            u'font face', QtCore.QVariant(QtGui.QFont().family())).toString())
-        self.location = settings.value(
-            u'location', QtCore.QVariant(AlertLocation.Bottom)).toInt()[0]
+        self.timeout = settings.value(u'timeout', 5)
+        self.font_color = settings.value(u'font color', u'#ffffff')
+        self.font_size = settings.value(u'font size', 40)
+        self.bg_color = settings.value(u'background color', u'#660000')
+        self.font_face = settings.value(u'font face', QtGui.QFont().family())
+        self.location = settings.value(u'location', AlertLocation.Bottom)
         settings.endGroup()
         self.fontSizeSpinBox.setValue(self.font_size)
         self.timeoutSpinBox.setValue(self.timeout)
@@ -186,17 +180,17 @@
         settings = Settings()
         settings.beginGroup(self.settingsSection)
         # Check value has changed as no event handles this field
-        if settings.value(u'location', QtCore.QVariant(1)).toInt()[0] != \
+        if settings.value(u'location', 1) != \
             self.verticalComboBox.currentIndex():
             self.changed = True
-        settings.setValue(u'background color', QtCore.QVariant(self.bg_color))
-        settings.setValue(u'font color', QtCore.QVariant(self.font_color))
-        settings.setValue(u'font size', QtCore.QVariant(self.font_size))
+        settings.setValue(u'background color', self.bg_color)
+        settings.setValue(u'font color', self.font_color)
+        settings.setValue(u'font size', self.font_size)
         self.font_face = self.fontComboBox.currentFont().family()
-        settings.setValue(u'font face', QtCore.QVariant(self.font_face))
-        settings.setValue(u'timeout', QtCore.QVariant(self.timeout))
+        settings.setValue(u'font face', self.font_face)
+        settings.setValue(u'timeout', self.timeout)
         self.location = self.verticalComboBox.currentIndex()
-        settings.setValue(u'location', QtCore.QVariant(self.location))
+        settings.setValue(u'location', self.location)
         settings.endGroup()
         if self.changed:
             Receiver.send_message(u'update_display_css')

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2012-12-05 21:02:22 +0000
@@ -31,9 +31,9 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, StringContent, build_icon, translate
+from openlp.core.lib import Plugin, StringContent, build_icon, translate, \
+    Settings
 from openlp.core.lib.ui import create_action, UiStrings
-from openlp.core.lib.settings import Settings
 from openlp.core.utils.actions import ActionList
 from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem
 from openlp.plugins.bibles.forms import BibleUpgradeForm
@@ -58,11 +58,9 @@
         Plugin.initialise(self)
         self.importBibleItem.setVisible(True)
         action_list = ActionList.get_instance()
-        action_list.add_action(self.importBibleItem,
-            unicode(UiStrings().Import))
+        action_list.add_action(self.importBibleItem, UiStrings().Import)
         # Do not add the action to the list yet.
-        #action_list.add_action(self.exportBibleItem,
-        #    unicode(UiStrings().Export))
+        #action_list.add_action(self.exportBibleItem, UiStrings().Export)
         # Set to invisible until we can export bibles
         self.exportBibleItem.setVisible(False)
         self.toolsUpgradeItem.setVisible(bool(self.manager.old_bible_databases))
@@ -75,8 +73,7 @@
         self.manager.finalise()
         Plugin.finalise(self)
         action_list = ActionList.get_instance()
-        action_list.remove_action(self.importBibleItem,
-            unicode(UiStrings().Import))
+        action_list.remove_action(self.importBibleItem, UiStrings().Import)
         self.importBibleItem.setVisible(False)
         #action_list.remove_action(self.exportBibleItem, UiStrings().Export)
         self.exportBibleItem.setVisible(False)
@@ -97,7 +94,7 @@
         settings.beginGroup(self.settingsSection)
         if settings.contains(u'bookname language'):
             settings.setValue(u'book name language', settings.value(
-                u'bookname language', QtCore.QVariant(0)).toInt()[0])
+                u'bookname language', 0))
             settings.remove(u'bookname language')
         settings.endGroup()
 

=== modified file 'openlp/plugins/bibles/forms/bibleimportform.py'
--- openlp/plugins/bibles/forms/bibleimportform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/forms/bibleimportform.py	2012-12-05 21:02:22 +0000
@@ -34,10 +34,9 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, translate
+from openlp.core.lib import Receiver, translate, Settings
 from openlp.core.lib.db import delete_database
 from openlp.core.lib.ui import UiStrings, critical_error_message_box
-from openlp.core.lib.settings import Settings
 from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
 from openlp.core.utils import AppLocation, locale_compare
 from openlp.plugins.bibles.lib.manager import BibleFormat
@@ -434,50 +433,49 @@
         if self.currentPage() == self.welcomePage:
             return True
         elif self.currentPage() == self.selectPage:
-            if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS:
-                if not self.field(u'osis_location').toString():
+            if self.field(u'source_format') == BibleFormat.OSIS:
+                if not self.field(u'osis_location'):
                     critical_error_message_box(UiStrings().NFSs,
                         WizardStrings.YouSpecifyFile % WizardStrings.OSIS)
                     self.osisFileEdit.setFocus()
                     return False
-            elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV:
-                if not self.field(u'csv_booksfile').toString():
+            elif self.field(u'source_format') == BibleFormat.CSV:
+                if not self.field(u'csv_booksfile'):
                     critical_error_message_box(UiStrings().NFSs,
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file with books of '
                         'the Bible to use in the import.'))
                     self.csvBooksEdit.setFocus()
                     return False
-                elif not self.field(u'csv_versefile').toString():
+                elif not self.field(u'csv_versefile'):
                     critical_error_message_box(UiStrings().NFSs,
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file of Bible '
                         'verses to import.'))
                     self.csvVersesEdit.setFocus()
                     return False
-            elif self.field(u'source_format').toInt()[0] == \
+            elif self.field(u'source_format') == \
                 BibleFormat.OpenSong:
-                if not self.field(u'opensong_file').toString():
+                if not self.field(u'opensong_file'):
                     critical_error_message_box(UiStrings().NFSs,
                         WizardStrings.YouSpecifyFile % WizardStrings.OS)
                     self.openSongFileEdit.setFocus()
                     return False
-            elif self.field(u'source_format').toInt()[0] == \
+            elif self.field(u'source_format') == \
                 BibleFormat.WebDownload:
                 self.versionNameEdit.setText(
                     self.webTranslationComboBox.currentText())
                 return True
-            elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenLP1:
-                if not self.field(u'openlp1_location').toString():
+            elif self.field(u'source_format') == BibleFormat.OpenLP1:
+                if not self.field(u'openlp1_location'):
                     critical_error_message_box(UiStrings().NFSs,
                         WizardStrings.YouSpecifyFile % UiStrings().OLPV1)
                     self.openlp1FileEdit.setFocus()
                     return False
             return True
         elif self.currentPage() == self.licenseDetailsPage:
-            license_version = unicode(self.field(u'license_version').toString())
-            license_copyright = \
-                unicode(self.field(u'license_copyright').toString())
+            license_version = self.field(u'license_version')
+            license_copyright = self.field(u'license_copyright')
             path = AppLocation.get_section_data_path(u'bibles')
             if not license_version:
                 critical_error_message_box(UiStrings().EmptyField,
@@ -597,27 +595,21 @@
         self.restart()
         self.finishButton.setVisible(False)
         self.cancelButton.setVisible(True)
-        self.setField(u'source_format', QtCore.QVariant(0))
-        self.setField(u'osis_location', QtCore.QVariant(''))
-        self.setField(u'csv_booksfile', QtCore.QVariant(''))
-        self.setField(u'csv_versefile', QtCore.QVariant(''))
-        self.setField(u'opensong_file', QtCore.QVariant(''))
-        self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk))
+        self.setField(u'source_format', 0)
+        self.setField(u'osis_location', '')
+        self.setField(u'csv_booksfile', '')
+        self.setField(u'csv_versefile', '')
+        self.setField(u'opensong_file', '')
+        self.setField(u'web_location', WebDownload.Crosswalk)
         self.setField(u'web_biblename',
-            QtCore.QVariant(self.webTranslationComboBox.currentIndex()))
-        self.setField(u'proxy_server',
-            settings.value(u'proxy address', QtCore.QVariant(u'')))
-        self.setField(u'proxy_username',
-            settings.value(u'proxy username', QtCore.QVariant(u'')))
-        self.setField(u'proxy_password',
-            settings.value(u'proxy password', QtCore.QVariant(u'')))
-        self.setField(u'openlp1_location', QtCore.QVariant(''))
-        self.setField(u'license_version',
-            QtCore.QVariant(self.versionNameEdit.text()))
-        self.setField(u'license_copyright',
-            QtCore.QVariant(self.copyrightEdit.text()))
-        self.setField(u'license_permissions',
-            QtCore.QVariant(self.permissionsEdit.text()))
+            self.webTranslationComboBox.currentIndex())
+        self.setField(u'proxy_server', settings.value(u'proxy address', u''))
+        self.setField(u'proxy_username', settings.value(u'proxy username', u''))
+        self.setField(u'proxy_password', settings.value(u'proxy password', u''))
+        self.setField(u'openlp1_location', '')
+        self.setField(u'license_version', self.versionNameEdit.text())
+        self.setField(u'license_copyright', self.copyrightEdit.text())
+        self.setField(u'license_permissions', self.permissionsEdit.text())
         self.onWebSourceComboBoxIndexChanged(WebDownload.Crosswalk)
         settings.endGroup()
 
@@ -652,7 +644,7 @@
         Prepare the UI for the import.
         """
         OpenLPWizard.preWizard(self)
-        bible_type = self.field(u'source_format').toInt()[0]
+        bible_type = self.field(u'source_format')
         if bible_type == BibleFormat.WebDownload:
             self.progressLabel.setText(translate(
                 'BiblesPlugin.ImportWizardForm',
@@ -665,51 +657,49 @@
         """
         Perform the actual import.
         """
-        bible_type = self.field(u'source_format').toInt()[0]
-        license_version = unicode(self.field(u'license_version').toString())
-        license_copyright = unicode(self.field(u'license_copyright').toString())
-        license_permissions = \
-            unicode(self.field(u'license_permissions').toString())
+        bible_type = self.field(u'source_format')
+        license_version = self.field(u'license_version')
+        license_copyright = self.field(u'license_copyright')
+        license_permissions = self.field(u'license_permissions')
         importer = None
         if bible_type == BibleFormat.OSIS:
             # Import an OSIS bible.
             importer = self.manager.import_bible(BibleFormat.OSIS,
                 name=license_version,
-                filename=unicode(self.field(u'osis_location').toString())
+                filename=self.field(u'osis_location')
             )
         elif bible_type == BibleFormat.CSV:
             # Import a CSV bible.
             importer = self.manager.import_bible(BibleFormat.CSV,
                 name=license_version,
-                booksfile=unicode(self.field(u'csv_booksfile').toString()),
-                versefile=unicode(self.field(u'csv_versefile').toString())
+                booksfile=self.field(u'csv_booksfile'),
+                versefile=self.field(u'csv_versefile')
             )
         elif bible_type == BibleFormat.OpenSong:
             # Import an OpenSong bible.
             importer = self.manager.import_bible(BibleFormat.OpenSong,
                 name=license_version,
-                filename=unicode(self.field(u'opensong_file').toString())
+                filename=self.field(u'opensong_file')
             )
         elif bible_type == BibleFormat.WebDownload:
             # Import a bible from the web.
             self.progressBar.setMaximum(1)
-            download_location = self.field(u'web_location').toInt()[0]
-            bible_version = unicode(self.webTranslationComboBox.currentText())
+            download_location = self.field(u'web_location')
+            bible_version = self.webTranslationComboBox.currentText()
             bible = self.web_bible_list[download_location][bible_version]
             importer = self.manager.import_bible(
                 BibleFormat.WebDownload, name=license_version,
                 download_source=WebDownload.Names[download_location],
                 download_name=bible,
-                proxy_server=unicode(self.field(u'proxy_server').toString()),
-                proxy_username=\
-                    unicode(self.field(u'proxy_username').toString()),
-                proxy_password=unicode(self.field(u'proxy_password').toString())
+                proxy_server=self.field(u'proxy_server'),
+                proxy_username=self.field(u'proxy_username'),
+                proxy_password=self.field(u'proxy_password')
             )
         elif bible_type == BibleFormat.OpenLP1:
             # Import an openlp.org 1.x bible.
             importer = self.manager.import_bible(BibleFormat.OpenLP1,
                 name=license_version,
-                filename=unicode(self.field(u'openlp1_location').toString())
+                filename=self.field(u'openlp1_location')
             )
         if importer.do_import(license_version):
             self.manager.save_meta_data(license_version, license_version,

=== modified file 'openlp/plugins/bibles/forms/bibleupgradeform.py'
--- openlp/plugins/bibles/forms/bibleupgradeform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/forms/bibleupgradeform.py	2012-12-05 21:02:22 +0000
@@ -37,9 +37,8 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import Receiver, SettingsManager, translate, \
-    check_directory_exists
+    check_directory_exists, Settings
 from openlp.core.lib.ui import UiStrings, critical_error_message_box
-from openlp.core.lib.settings import Settings
 from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
 from openlp.core.utils import AppLocation, delete_file, get_filesystem_encoding
 from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \
@@ -309,7 +308,7 @@
             return True
         elif self.currentPage() == self.backupPage:
             if not self.noBackupCheckBox.checkState() == QtCore.Qt.Checked:
-                backup_path = unicode(self.backupDirectoryEdit.text())
+                backup_path = self.backupDirectoryEdit.text()
                 if not backup_path:
                     critical_error_message_box(UiStrings().EmptyField,
                         translate('BiblesPlugin.UpgradeWizardForm',
@@ -406,9 +405,9 @@
             old_bible = OldBibleDB(self.mediaItem, path=self.temp_dir,
                 file=filename[0])
             name = filename[1]
-            self.progressLabel.setText(unicode(translate(
+            self.progressLabel.setText(translate(
                 'BiblesPlugin.UpgradeWizardForm',
-                'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) %
+                'Upgrading Bible %s of %s: "%s"\nUpgrading ...') %
                 (number + 1, max_bibles, name))
             self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,
                 name=name, file=filename[0])
@@ -453,9 +452,9 @@
                         translate('BiblesPlugin.UpgradeWizardForm',
                         'To upgrade your Web Bibles an Internet connection is '
                         'required.'))
-                    self.incrementProgressBar(unicode(translate(
+                    self.incrementProgressBar(translate(
                         'BiblesPlugin.UpgradeWizardForm',
-                        'Upgrading Bible %s of %s: "%s"\nFailed')) %
+                        'Upgrading Bible %s of %s: "%s"\nFailed') %
                         (number + 1, max_bibles, name),
                         self.progressBar.maximum() - self.progressBar.value())
                     self.success[number] = False
@@ -473,9 +472,9 @@
                     log.warn(u'Upgrading from "%s" failed' % filename[0])
                     self.newbibles[number].session.close()
                     del self.newbibles[number]
-                    self.incrementProgressBar(unicode(translate(
+                    self.incrementProgressBar(translate(
                         'BiblesPlugin.UpgradeWizardForm',
-                        'Upgrading Bible %s of %s: "%s"\nFailed')) %
+                        'Upgrading Bible %s of %s: "%s"\nFailed') %
                         (number + 1, max_bibles, name),
                         self.progressBar.maximum() - self.progressBar.value())
                     self.success[number] = False
@@ -485,10 +484,10 @@
                     if self.stop_import_flag:
                         self.success[number] = False
                         break
-                    self.incrementProgressBar(unicode(translate(
+                    self.incrementProgressBar(translate(
                         'BiblesPlugin.UpgradeWizardForm',
                         'Upgrading Bible %s of %s: "%s"\n'
-                        'Upgrading %s ...')) %
+                        'Upgrading %s ...') %
                         (number + 1, max_bibles, name, book))
                     book_ref_id = self.newbibles[number].\
                         get_book_ref_id_by_name(book, len(books), language_id)
@@ -530,9 +529,9 @@
                     log.warn(u'Upgrading books from "%s" failed' % name)
                     self.newbibles[number].session.close()
                     del self.newbibles[number]
-                    self.incrementProgressBar(unicode(translate(
+                    self.incrementProgressBar(translate(
                         'BiblesPlugin.UpgradeWizardForm',
-                        'Upgrading Bible %s of %s: "%s"\nFailed')) %
+                        'Upgrading Bible %s of %s: "%s"\nFailed') %
                         (number + 1, max_bibles, name),
                         self.progressBar.maximum() - self.progressBar.value())
                     self.success[number] = False
@@ -543,10 +542,10 @@
                     if self.stop_import_flag:
                         self.success[number] = False
                         break
-                    self.incrementProgressBar(unicode(translate(
+                    self.incrementProgressBar(translate(
                         'BiblesPlugin.UpgradeWizardForm',
                         'Upgrading Bible %s of %s: "%s"\n'
-                        'Upgrading %s ...')) %
+                        'Upgrading %s ...') %
                         (number + 1, max_bibles, name, book[u'name']))
                     book_ref_id = self.newbibles[number].\
                         get_book_ref_id_by_name(book[u'name'], len(books),
@@ -577,18 +576,18 @@
                         Receiver.send_message(u'openlp_process_events')
                     self.newbibles[number].session.commit()
             if not self.success.get(number, True):
-                self.incrementProgressBar(unicode(translate(
+                self.incrementProgressBar(translate(
                     'BiblesPlugin.UpgradeWizardForm',
-                    'Upgrading Bible %s of %s: "%s"\nFailed')) %
+                    'Upgrading Bible %s of %s: "%s"\nFailed') %
                     (number + 1, max_bibles, name),
                     self.progressBar.maximum() - self.progressBar.value())
             else:
                 self.success[number] = True
                 self.newbibles[number].save_meta(u'name', name)
-                self.incrementProgressBar(unicode(translate(
+                self.incrementProgressBar(translate(
                     'BiblesPlugin.UpgradeWizardForm',
                     'Upgrading Bible %s of %s: "%s"\n'
-                    'Complete')) %
+                    'Complete') %
                     (number + 1, max_bibles, name))
             if number in self.newbibles:
                 self.newbibles[number].session.close()
@@ -612,23 +611,22 @@
                 # Copy not upgraded bible back.
                 shutil.move(os.path.join(self.temp_dir, filename[0]), self.path)
         if failed_import > 0:
-            failed_import_text = unicode(translate(
-                'BiblesPlugin.UpgradeWizardForm',
-                ', %s failed')) % failed_import
+            failed_import_text = translate('BiblesPlugin.UpgradeWizardForm',
+                ', %s failed') % failed_import
         else:
             failed_import_text = u''
         if successful_import > 0:
             if self.includeWebBible:
-                self.progressLabel.setText(unicode(
+                self.progressLabel.setText(
                     translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading '
                     'Bible(s): %s successful%s\nPlease note that verses from '
                     'Web Bibles will be downloaded on demand and so an '
-                    'Internet connection is required.')) %
+                    'Internet connection is required.') %
                     (successful_import, failed_import_text))
             else:
-                self.progressLabel.setText(unicode(
+                self.progressLabel.setText(
                     translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading '
-                    'Bible(s): %s successful%s')) % (successful_import,
+                    'Bible(s): %s successful%s') % (successful_import,
                     failed_import_text))
         else:
             self.progressLabel.setText(translate(

=== modified file 'openlp/plugins/bibles/forms/booknameform.py'
--- openlp/plugins/bibles/forms/booknameform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/forms/booknameform.py	2012-12-05 21:02:22 +0000
@@ -128,7 +128,7 @@
             self.correspondingComboBox.setFocus()
             return False
         else:
-            cor_book = unicode(self.correspondingComboBox.currentText())
+            cor_book = self.correspondingComboBox.currentText()
             for character in u'\\.^$*+?{}[]()':
                 cor_book = cor_book.replace(character, u'\\' + character)
             books = filter(lambda key:

=== modified file 'openlp/plugins/bibles/forms/editbibleform.py'
--- openlp/plugins/bibles/forms/editbibleform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/forms/editbibleform.py	2012-12-05 21:02:22 +0000
@@ -118,9 +118,9 @@
         Exit Dialog and save data
         """
         log.debug(u'BibleEditForm.accept')
-        version = unicode(self.versionNameEdit.text())
-        copyright = unicode(self.copyrightEdit.text())
-        permissions = unicode(self.permissionsEdit.text())
+        version = self.versionNameEdit.text()
+        copyright = self.copyrightEdit.text()
+        permissions = self.permissionsEdit.text()
         book_name_language = self.languageSelectionComboBox.currentIndex() - 1
         if book_name_language == -1:
             book_name_language = None
@@ -130,7 +130,7 @@
             custom_names = {}
             for abbr, book in self.books.iteritems():
                 if book:
-                    custom_names[abbr] = unicode(self.bookNameEdit[abbr].text())
+                    custom_names[abbr] = self.bookNameEdit[abbr].text()
                     if book.name != custom_names[abbr]:
                         if not self.validateBook(custom_names[abbr], abbr):
                             return
@@ -185,29 +185,29 @@
         if not new_book_name:
             self.bookNameEdit[abbreviation].setFocus()
             critical_error_message_box(UiStrings().EmptyField,
-                unicode(translate('BiblesPlugin.BibleEditForm',
-                'You need to specify a book name for "%s".')) %
+                translate('BiblesPlugin.BibleEditForm',
+                'You need to specify a book name for "%s".') %
                 self.book_names[abbreviation])
             return False
         elif not book_regex.match(new_book_name):
             self.bookNameEdit[abbreviation].setFocus()
             critical_error_message_box(UiStrings().EmptyField,
-                unicode(translate('BiblesPlugin.BibleEditForm',
+                translate('BiblesPlugin.BibleEditForm',
                 'The book name "%s" is not correct.\nNumbers can only be used '
                 'at the beginning and must\nbe followed by one or more '
-                'non-numeric characters.')) % new_book_name)
+                'non-numeric characters.') % new_book_name)
             return False
         for abbr, book in self.books.iteritems():
             if book:
                 if abbr == abbreviation:
                     continue
-                if unicode(self.bookNameEdit[abbr].text()) == new_book_name:
+                if self.bookNameEdit[abbr].text() == new_book_name:
                     self.bookNameEdit[abbreviation].setFocus()
                     critical_error_message_box(
                         translate('BiblesPlugin.BibleEditForm',
                         'Duplicate Book Name'),
-                        unicode(translate('BiblesPlugin.BibleEditForm',
-                        'The Book Name "%s" has been entered more than once.'))
+                        translate('BiblesPlugin.BibleEditForm',
+                        'The Book Name "%s" has been entered more than once.')
                         % new_book_name)
                     return False
         return True

=== modified file 'openlp/plugins/bibles/lib/__init__.py'
--- openlp/plugins/bibles/lib/__init__.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/__init__.py	2012-12-05 21:02:22 +0000
@@ -33,8 +33,7 @@
 import logging
 import re
 
-from openlp.core.lib import translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import translate, Settings
 from openlp.plugins.bibles.lib.db import BiblesResourcesDB
 
 log = logging.getLogger(__name__)
@@ -182,17 +181,17 @@
     Updates separators and matches for parsing and formating scripture
     references.
     """
-    default_separators = unicode(translate('BiblesPlugin',
+    default_separators = translate('BiblesPlugin',
         ':|v|V|verse|verses;;-|to;;,|and;;end',
         'Double-semicolon delimited separators for parsing references. '
-        'Consult the developers for further information.')).split(u';;')
+        'Consult the developers for further information.').split(u';;')
     settings = Settings()
     settings.beginGroup(u'bibles')
     custom_separators = [
-        unicode(settings.value(u'verse separator').toString()),
-        unicode(settings.value(u'range separator').toString()),
-        unicode(settings.value(u'list separator').toString()),
-        unicode(settings.value(u'end separator').toString())]
+        settings.value(u'verse separator', u''),
+        settings.value(u'range separator', u''),
+        settings.value(u'list separator', u''),
+        settings.value(u'end separator', u'')]
     settings.endGroup()
     for index, role in enumerate([u'v', u'r', u'l', u'e']):
         if custom_separators[index].strip(u'|') == u'':

=== modified file 'openlp/plugins/bibles/lib/biblestab.py'
--- openlp/plugins/bibles/lib/biblestab.py	2012-12-05 06:12:07 +0000
+++ openlp/plugins/bibles/lib/biblestab.py	2012-12-05 21:02:22 +0000
@@ -31,9 +31,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, SettingsTab, translate
+from openlp.core.lib import Receiver, SettingsTab, translate, Settings
 from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box
-from openlp.core.lib.settings import Settings
 from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \
     update_reference_separators, get_reference_separator, LanguageSelection
 
@@ -334,7 +333,7 @@
         if self.verseSeparatorLineEdit.isModified():
             text = self.verseSeparatorLineEdit.text()
             if text == get_reference_separator(u'sep_v_default') or \
-                text.remove(u'|').isEmpty():
+                not text.replace(u'|', u''):
                 self.verseSeparatorCheckBox.setChecked(False)
                 self.verseSeparatorLineEdit.setText(
                     get_reference_separator(u'sep_v_default'))
@@ -359,7 +358,7 @@
         if self.rangeSeparatorLineEdit.isModified():
             text = self.rangeSeparatorLineEdit.text()
             if text == get_reference_separator(u'sep_r_default') or \
-                text.remove(u'|').isEmpty():
+                not text.replace(u'|', u''):
                 self.rangeSeparatorCheckBox.setChecked(False)
                 self.rangeSeparatorLineEdit.setText(
                     get_reference_separator(u'sep_r_default'))
@@ -384,7 +383,7 @@
         if self.listSeparatorLineEdit.isModified():
             text = self.listSeparatorLineEdit.text()
             if text == get_reference_separator(u'sep_l_default') or \
-                text.remove(u'|').isEmpty():
+                not text.replace(u'|', u''):
                 self.listSeparatorCheckBox.setChecked(False)
                 self.listSeparatorLineEdit.setText(
                     get_reference_separator(u'sep_l_default'))
@@ -409,7 +408,7 @@
         if self.endSeparatorLineEdit.isModified():
             text = self.endSeparatorLineEdit.text()
             if text == get_reference_separator(u'sep_e_default') or \
-                text.remove(u'|').isEmpty():
+                not text.replace(u'|', u''):
                 self.endSeparatorCheckBox.setChecked(False)
                 self.endSeparatorLineEdit.setText(
                     get_reference_separator(u'sep_e_default'))
@@ -419,21 +418,16 @@
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        self.show_new_chapters = settings.value(
-            u'display new chapter', QtCore.QVariant(False)).toBool()
-        self.display_style = settings.value(
-            u'display brackets', QtCore.QVariant(0)).toInt()[0]
-        self.layout_style = settings.value(
-            u'verse layout style', QtCore.QVariant(0)).toInt()[0]
-        self.bible_theme = unicode(
-            settings.value(u'bible theme', QtCore.QVariant(u'')).toString())
-        self.second_bibles = settings.value(
-            u'second bibles', QtCore.QVariant(True)).toBool()
+        self.show_new_chapters = settings.value(u'display new chapter', False)
+        self.display_style = settings.value(u'display brackets', 0)
+        self.layout_style = settings.value(u'verse layout style', 0)
+        self.bible_theme = settings.value(u'bible theme', u'')
+        self.second_bibles = settings.value(u'second bibles', True)
         self.newChaptersCheckBox.setChecked(self.show_new_chapters)
         self.displayStyleComboBox.setCurrentIndex(self.display_style)
         self.layoutStyleComboBox.setCurrentIndex(self.layout_style)
         self.bibleSecondCheckBox.setChecked(self.second_bibles)
-        verse_separator = unicode(settings.value(u'verse separator').toString())
+        verse_separator = settings.value(u'verse separator', u'')
         if (verse_separator.strip(u'|') == u'') or \
             (verse_separator == get_reference_separator(u'sep_v_default')):
             self.verseSeparatorLineEdit.setText(
@@ -446,7 +440,7 @@
             self.verseSeparatorLineEdit.setPalette(
                 self.getGreyTextPalette(False))
             self.verseSeparatorCheckBox.setChecked(True)
-        range_separator = unicode(settings.value(u'range separator').toString())
+        range_separator = settings.value(u'range separator', u'')
         if (range_separator.strip(u'|') == u'') or \
             (range_separator == get_reference_separator(u'sep_r_default')):
             self.rangeSeparatorLineEdit.setText(
@@ -459,50 +453,42 @@
             self.rangeSeparatorLineEdit.setPalette(
                 self.getGreyTextPalette(False))
             self.rangeSeparatorCheckBox.setChecked(True)
-        list_separator = unicode(settings.value(u'list separator').toString())
+        list_separator = settings.value(u'list separator', u'')
         if (list_separator.strip(u'|') == u'') or \
             (list_separator == get_reference_separator(u'sep_l_default')):
             self.listSeparatorLineEdit.setText(
                 get_reference_separator(u'sep_l_default'))
-            self.listSeparatorLineEdit.setPalette(
-                self.getGreyTextPalette(True))
+            self.listSeparatorLineEdit.setPalette(self.getGreyTextPalette(True))
             self.listSeparatorCheckBox.setChecked(False)
         else:
             self.listSeparatorLineEdit.setText(list_separator)
             self.listSeparatorLineEdit.setPalette(
                 self.getGreyTextPalette(False))
             self.listSeparatorCheckBox.setChecked(True)
-        end_separator = unicode(settings.value(u'end separator').toString())
+        end_separator = settings.value(u'end separator', u'')
         if (end_separator.strip(u'|') == u'') or \
             (end_separator == get_reference_separator(u'sep_e_default')):
             self.endSeparatorLineEdit.setText(
                 get_reference_separator(u'sep_e_default'))
-            self.endSeparatorLineEdit.setPalette(
-                self.getGreyTextPalette(True))
+            self.endSeparatorLineEdit.setPalette(self.getGreyTextPalette(True))
             self.endSeparatorCheckBox.setChecked(False)
         else:
             self.endSeparatorLineEdit.setText(end_separator)
-            self.endSeparatorLineEdit.setPalette(
-                self.getGreyTextPalette(False))
+            self.endSeparatorLineEdit.setPalette(self.getGreyTextPalette(False))
             self.endSeparatorCheckBox.setChecked(True)
-        self.language_selection = settings.value(
-            u'book name language', QtCore.QVariant(0)).toInt()[0]
+        self.language_selection = settings.value(u'book name language', 0)
         self.languageSelectionComboBox.setCurrentIndex(self.language_selection)
         settings.endGroup()
 
     def save(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        settings.setValue(u'display new chapter',
-            QtCore.QVariant(self.show_new_chapters))
-        settings.setValue(u'display brackets',
-            QtCore.QVariant(self.display_style))
-        settings.setValue(u'verse layout style',
-            QtCore.QVariant(self.layout_style))
-        settings.setValue(u'book name language',
-            QtCore.QVariant(self.language_selection))
-        settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles))
-        settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme))
+        settings.setValue(u'display new chapter', self.show_new_chapters)
+        settings.setValue(u'display brackets', self.display_style)
+        settings.setValue(u'verse layout style', self.layout_style)
+        settings.setValue(u'book name language', self.language_selection)
+        settings.setValue(u'second bibles', self.second_bibles)
+        settings.setValue(u'bible theme', self.bible_theme)
         if self.verseSeparatorCheckBox.isChecked():
             settings.setValue(u'verse separator',
                 self.verseSeparatorLineEdit.text())

=== modified file 'openlp/plugins/bibles/lib/csvbible.py'
--- openlp/plugins/bibles/lib/csvbible.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/csvbible.py	2012-12-05 21:02:22 +0000
@@ -109,9 +109,9 @@
             for line in books_reader:
                 if self.stop_import_flag:
                     break
-                self.wizard.incrementProgressBar(unicode(
+                self.wizard.incrementProgressBar(
                     translate('BiblesPlugin.CSVBible',
-                    'Importing books... %s')) %
+                    'Importing books... %s') %
                     unicode(line[2], details['encoding']))
                 book_ref_id = self.get_book_ref_id_by_name(
                     unicode(line[2], details['encoding']), 67, language_id)
@@ -153,9 +153,9 @@
                 if book_ptr != line_book:
                     book = self.get_book(line_book)
                     book_ptr = book.name
-                    self.wizard.incrementProgressBar(unicode(translate(
+                    self.wizard.incrementProgressBar(translate(
                         'BiblesPlugin.CSVBible', 'Importing verses from %s...',
-                        'Importing verses from <book name>...')) % book.name)
+                        'Importing verses from <book name>...') % book.name)
                     self.session.commit()
                 try:
                     verse_text = unicode(line[3], details['encoding'])

=== modified file 'openlp/plugins/bibles/lib/http.py'
--- openlp/plugins/bibles/lib/http.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/http.py	2012-12-05 21:02:22 +0000
@@ -512,9 +512,9 @@
         ``True`` on success, ``False`` on failure.
         """
         self.wizard.progressBar.setMaximum(68)
-        self.wizard.incrementProgressBar(unicode(translate(
+        self.wizard.incrementProgressBar(translate(
             'BiblesPlugin.HTTPBible',
-            'Registering Bible and loading books...')))
+            'Registering Bible and loading books...'))
         self.save_meta(u'download_source', self.download_source)
         self.save_meta(u'download_name', self.download_name)
         if self.proxy_server:
@@ -537,8 +537,8 @@
                 'failed' % (self.download_source,  self.download_name))
             return False
         self.wizard.progressBar.setMaximum(len(books)+2)
-        self.wizard.incrementProgressBar(unicode(translate(
-            'BiblesPlugin.HTTPBible', 'Registering Language...')))
+        self.wizard.incrementProgressBar(translate(
+            'BiblesPlugin.HTTPBible', 'Registering Language...'))
         bible = BiblesResourcesDB.get_webbible(self.download_name,
                 self.download_source.lower())
         if bible[u'language_id']:
@@ -553,9 +553,9 @@
         for book in books:
             if self.stop_import_flag:
                 break
-            self.wizard.incrementProgressBar(unicode(translate(
+            self.wizard.incrementProgressBar(translate(
                 'BiblesPlugin.HTTPBible', 'Importing %s...',
-                'Importing <book name>...')) % book)
+                'Importing <book name>...') % book)
             book_ref_id = self.get_book_ref_id_by_name(book, len(books),
                 language_id)
             if not book_ref_id:

=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/manager.py	2012-12-05 21:02:22 +0000
@@ -32,9 +32,8 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import Receiver, SettingsManager, translate
+from openlp.core.lib import Receiver, SettingsManager, translate, Settings
 from openlp.core.utils import AppLocation, delete_file
-from openlp.core.lib.settings import Settings
 from openlp.plugins.bibles.lib import parse_reference, \
     get_reference_separator, LanguageSelection
 from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta
@@ -128,9 +127,8 @@
         self.web = u'Web'
         self.db_cache = None
         self.path = AppLocation.get_section_data_path(self.settingsSection)
-        self.proxy_name = unicode(
-            Settings().value(self.settingsSection + u'/proxy name',
-            QtCore.QVariant(u'')).toString())
+        self.proxy_name = Settings().value(
+            self.settingsSection + u'/proxy name', u'')
         self.suffix = u'.sqlite'
         self.import_wizard = None
         self.reload_bibles()
@@ -340,7 +338,7 @@
                 Receiver.send_message(u'openlp_information_message', {
                     u'title': translate('BiblesPlugin.BibleManager',
                     'Scripture Reference Error'),
-                    u'message': unicode(translate('BiblesPlugin.BibleManager',
+                    u'message': translate('BiblesPlugin.BibleManager',
                     'Your scripture reference is either not supported by '
                     'OpenLP or is invalid. Please make sure your reference '
                     'conforms to one of the following patterns or consult the '
@@ -355,7 +353,7 @@
                     'Book Chapter%(verse)sVerse%(range)sChapter%(verse)sVerse',
                     'Please pay attention to the appended "s" of the wildcards '
                     'and refrain from translating the words inside the '
-                    'names in the brackets.')) % reference_seperators
+                    'names in the brackets.') % reference_seperators
                     })
             return None
 
@@ -374,8 +372,7 @@
             # If None is returned, it's not the singleton object but a
             # BibleMeta object with the value "None"
             language_selection = Settings().value(
-                self.settingsSection + u'/book name language',
-                QtCore.QVariant(0)).toInt()[0]
+                self.settingsSection + u'/book name language', 0)
         else:
             language_selection = language_selection.value
         try:
@@ -436,7 +433,7 @@
                 })
             return None
 
-    def save_meta_data(self, bible, version, copyright, permissions, 
+    def save_meta_data(self, bible, version, copyright, permissions,
         book_name_language=None):
         """
         Saves the bibles meta data.
@@ -455,7 +452,7 @@
         """
         log.debug(u'get_meta %s,%s', bible, key)
         return self.db_cache[bible].get_object(BibleMeta, key)
-    
+
     def update_book(self, bible, book):
         """
         Update a book of the bible.

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -32,9 +32,8 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
-    translate, create_separated_list
+    translate, create_separated_list, Settings
 from openlp.core.lib.searchedit import SearchEdit
-from openlp.core.lib.settings import Settings
 from openlp.core.lib.ui import UiStrings, set_case_insensitive_completer, \
     create_horizontal_adjusting_combo_box, critical_error_message_box, \
     find_and_set_in_combo_box, build_icon
@@ -102,11 +101,7 @@
 
     def _decodeQtObject(self, bitem, key):
         reference = bitem.data(QtCore.Qt.UserRole)
-        if isinstance(reference, QtCore.QVariant):
-            reference = reference.toPyObject()
-        obj = reference[QtCore.QString(key)]
-        if isinstance(obj, QtCore.QVariant):
-            obj = obj.toPyObject()
+        obj = reference[unicode(key)]
         return unicode(obj).strip()
 
     def requiredIcons(self):
@@ -297,8 +292,7 @@
 
     def configUpdated(self):
         log.debug(u'configUpdated')
-        if Settings().value(self.settingsSection + u'/second bibles',
-            QtCore.QVariant(True)).toBool():
+        if Settings().value(self.settingsSection + u'/second bibles', True):
             self.advancedSecondLabel.setVisible(True)
             self.advancedSecondComboBox.setVisible(True)
             self.quickSecondLabel.setVisible(True)
@@ -367,7 +361,7 @@
         ])
         self.quickSearchEdit.setCurrentSearchType(Settings().value(
             u'%s/last search type' % self.settingsSection,
-            QtCore.QVariant(BibleSearch.Reference)).toInt()[0])
+            BibleSearch.Reference))
         self.configUpdated()
         log.debug(u'bible manager initialise complete')
 
@@ -389,17 +383,15 @@
         self.advancedVersionComboBox.addItems(bibles)
         self.advancedSecondComboBox.addItems(bibles)
         # set the default value
-        bible = Settings().value(
-            self.settingsSection + u'/advanced bible',
-            QtCore.QVariant(u'')).toString()
+        bible = Settings().value(self.settingsSection + u'/advanced bible', u'')
         if bible in bibles:
             find_and_set_in_combo_box(self.advancedVersionComboBox, bible)
             self.initialiseAdvancedBible(unicode(bible))
         elif bibles:
             self.initialiseAdvancedBible(bibles[0])
         bible = Settings().value(
-            self.settingsSection + u'/quick bible', QtCore.QVariant(
-            self.quickVersionComboBox.currentText())).toString()
+            self.settingsSection + u'/quick bible',
+            self.quickVersionComboBox.currentText())
         find_and_set_in_combo_box(self.quickVersionComboBox, bible)
 
     def reloadBibles(self, process=False):
@@ -427,7 +419,7 @@
         """
         log.debug(u'initialiseAdvancedBible %s, %s', bible, last_book_id)
         book_data = self.plugin.manager.get_books(bible)
-        secondbible = unicode(self.advancedSecondComboBox.currentText())
+        secondbible = self.advancedSecondComboBox.currentText()
         if secondbible != u'':
             secondbook_data = self.plugin.manager.get_books(secondbible)
             book_data_temp = []
@@ -456,14 +448,14 @@
                     book[u'book_reference_id'])
                 self.advancedBookComboBox.addItem(data[u'name'])
             self.advancedBookComboBox.setItemData(
-                row, QtCore.QVariant(book[u'book_reference_id']))
+                row, book[u'book_reference_id'])
             if first:
                 first = False
                 first_book = book
                 initialise_chapter_verse = True
             if last_book_id and last_book_id == int(book[u'book_reference_id']):
                 index = self.advancedBookComboBox.findData(
-                    QtCore.QVariant(book[u'book_reference_id']))
+                    book[u'book_reference_id'])
                 if index == -1:
                     # Not Found.
                     index = 0
@@ -501,19 +493,18 @@
         log.debug(u'updateAutoCompleter')
         # Save the current search type to the configuration.
         Settings().setValue(u'%s/last search type' %
-            self.settingsSection,
-            QtCore.QVariant(self.quickSearchEdit.currentSearchType()))
+            self.settingsSection, self.quickSearchEdit.currentSearchType())
         # Save the current bible to the configuration.
         Settings().setValue(self.settingsSection + u'/quick bible',
-            QtCore.QVariant(self.quickVersionComboBox.currentText()))
+            self.quickVersionComboBox.currentText())
         books = []
         # We have to do a 'Reference Search'.
         if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference:
             bibles = self.plugin.manager.get_bibles()
-            bible = unicode(self.quickVersionComboBox.currentText())
+            bible = self.quickVersionComboBox.currentText()
             if bible:
                 book_data = bibles[bible].get_books()
-                secondbible = unicode(self.quickSecondComboBox.currentText())
+                secondbible = self.quickSecondComboBox.currentText()
                 if secondbible != u'':
                     secondbook_data = bibles[secondbible].get_books()
                     book_data_temp = []
@@ -552,9 +543,9 @@
 
     def onEditClick(self):
         if self.quickTab.isVisible():
-            bible = unicode(self.quickVersionComboBox.currentText())
+            bible = self.quickVersionComboBox.currentText()
         elif self.advancedTab.isVisible():
-            bible = unicode(self.advancedVersionComboBox.currentText())
+            bible = self.advancedVersionComboBox.currentText()
         if bible:
             self.editBibleForm = EditBibleForm(self, self.plugin.formParent,
                 self.plugin.manager)
@@ -564,15 +555,15 @@
 
     def onDeleteClick(self):
         if self.quickTab.isVisible():
-            bible = unicode(self.quickVersionComboBox.currentText())
+            bible = self.quickVersionComboBox.currentText()
         elif self.advancedTab.isVisible():
-            bible = unicode(self.advancedVersionComboBox.currentText())
+            bible = self.advancedVersionComboBox.currentText()
         if bible:
             if QtGui.QMessageBox.question(self, UiStrings().ConfirmDelete,
-                unicode(translate('BiblesPlugin.MediaItem',
+                translate('BiblesPlugin.MediaItem',
                 'Are you sure you want to completely delete "%s" Bible from '
                 'OpenLP?\n\nYou will need to re-import this Bible to use it '
-                'again.'))% bible,
+                'again.') % bible,
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
                 QtGui.QMessageBox.No),
                 QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
@@ -603,7 +594,7 @@
             self.settings.layout_style)
         Settings().setValue(
             self.settingsSection + u'/verse layout style',
-            QtCore.QVariant(self.settings.layout_style))
+            self.settings.layout_style)
 
     def onAdvancedStyleComboBoxChanged(self):
         self.settings.layout_style = self.advancedStyleComboBox.currentIndex()
@@ -612,36 +603,35 @@
             self.settings.layout_style)
         Settings().setValue(
             self.settingsSection + u'/verse layout style',
-            QtCore.QVariant(self.settings.layout_style))
+            self.settings.layout_style)
 
     def onAdvancedVersionComboBox(self):
         Settings().setValue(self.settingsSection + u'/advanced bible',
-            QtCore.QVariant(self.advancedVersionComboBox.currentText()))
-        self.initialiseAdvancedBible(
-            unicode(self.advancedVersionComboBox.currentText()),
+            self.advancedVersionComboBox.currentText())
+        self.initialiseAdvancedBible(self.advancedVersionComboBox.currentText(),
             self.advancedBookComboBox.itemData(
                 int(self.advancedBookComboBox.currentIndex())))
 
     def onAdvancedSecondComboBox(self):
         self.initialiseAdvancedBible(
-            unicode(self.advancedVersionComboBox.currentText()),
+            self.advancedVersionComboBox.currentText(),
             self.advancedBookComboBox.itemData(
                 int(self.advancedBookComboBox.currentIndex())))
 
     def onAdvancedBookComboBox(self):
         item = int(self.advancedBookComboBox.currentIndex())
         self.initialiseChapterVerse(
-            unicode(self.advancedVersionComboBox.currentText()),
-            unicode(self.advancedBookComboBox.currentText()),
-            unicode(self.advancedBookComboBox.itemData(item).toString()))
+            self.advancedVersionComboBox.currentText(),
+            self.advancedBookComboBox.currentText(),
+            self.advancedBookComboBox.itemData(item))
 
     def onAdvancedFromVerse(self):
         chapter_from = int(self.advancedFromChapter.currentText())
         chapter_to = int(self.advancedToChapter.currentText())
         if chapter_from == chapter_to:
-            bible = unicode(self.advancedVersionComboBox.currentText())
-            book_ref_id = unicode(self.advancedBookComboBox.itemData(
-                int(self.advancedBookComboBox.currentIndex())).toString())
+            bible = self.advancedVersionComboBox.currentText()
+            book_ref_id = self.advancedBookComboBox.itemData(
+                int(self.advancedBookComboBox.currentIndex()))
             verse_from = int(self.advancedFromVerse.currentText())
             verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(
                 bible, book_ref_id, chapter_to)
@@ -649,9 +639,9 @@
                 self.advancedToVerse, True)
 
     def onAdvancedToChapter(self):
-        bible = unicode(self.advancedVersionComboBox.currentText())
-        book_ref_id = unicode(self.advancedBookComboBox.itemData(
-            int(self.advancedBookComboBox.currentIndex())).toString())
+        bible = self.advancedVersionComboBox.currentText()
+        book_ref_id = self.advancedBookComboBox.itemData(
+            int(self.advancedBookComboBox.currentIndex()))
         chapter_from = int(self.advancedFromChapter.currentText())
         chapter_to = int(self.advancedToChapter.currentText())
         verse_from = int(self.advancedFromVerse.currentText())
@@ -664,9 +654,9 @@
             self.adjustComboBox(1, verse_count, self.advancedToVerse)
 
     def onAdvancedFromChapter(self):
-        bible = unicode(self.advancedVersionComboBox.currentText())
-        book_ref_id = unicode(self.advancedBookComboBox.itemData(
-            int(self.advancedBookComboBox.currentIndex())).toString())
+        bible = self.advancedVersionComboBox.currentText()
+        book_ref_id = self.advancedBookComboBox.itemData(
+            int(self.advancedBookComboBox.currentIndex()))
         chapter_from = int(self.advancedFromChapter.currentText())
         chapter_to = int(self.advancedToChapter.currentText())
         verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible,
@@ -703,7 +693,7 @@
         """
         log.debug(u'adjustComboBox %s, %s, %s', combo, range_from, range_to)
         if restore:
-            old_text = unicode(combo.currentText())
+            old_text = combo.currentText()
         combo.clear()
         combo.addItems(map(unicode, range(range_from, range_to + 1)))
         if restore and combo.findText(old_text) != -1:
@@ -716,11 +706,11 @@
         log.debug(u'Advanced Search Button clicked')
         self.advancedSearchButton.setEnabled(False)
         Receiver.send_message(u'openlp_process_events')
-        bible = unicode(self.advancedVersionComboBox.currentText())
-        second_bible = unicode(self.advancedSecondComboBox.currentText())
-        book = unicode(self.advancedBookComboBox.currentText())
-        book_ref_id = unicode(self.advancedBookComboBox.itemData(
-            int(self.advancedBookComboBox.currentIndex())).toString())
+        bible = self.advancedVersionComboBox.currentText()
+        second_bible = self.advancedSecondComboBox.currentText()
+        book = self.advancedBookComboBox.currentText()
+        book_ref_id = self.advancedBookComboBox.itemData(
+            int(self.advancedBookComboBox.currentIndex()))
         chapter_from = self.advancedFromChapter.currentText()
         chapter_to = self.advancedToChapter.currentText()
         verse_from = self.advancedFromVerse.currentText()
@@ -755,9 +745,9 @@
         log.debug(u'Quick Search Button clicked')
         self.quickSearchButton.setEnabled(False)
         Receiver.send_message(u'openlp_process_events')
-        bible = unicode(self.quickVersionComboBox.currentText())
-        second_bible = unicode(self.quickSecondComboBox.currentText())
-        text = unicode(self.quickSearchEdit.text())
+        bible = self.quickVersionComboBox.currentText()
+        second_bible = self.quickSecondComboBox.currentText()
+        text = self.quickSearchEdit.text()
         if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference:
             # We are doing a 'Reference Search'.
             self.search_results = self.plugin.manager.get_verses(bible, text)
@@ -792,11 +782,11 @@
                 if passage_not_found:
                     QtGui.QMessageBox.information(self,
                         translate('BiblesPlugin.MediaItem', 'Information'),
-                        unicode(translate('BiblesPlugin.MediaItem',
+                        translate('BiblesPlugin.MediaItem',
                         'The second Bible does not contain all the verses '
                         'that are in the main Bible. Only verses found in both '
                         'Bibles will be shown. %d verses have not been '
-                        'included in the results.')) % count,
+                        'included in the results.') % count,
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                 self.search_results = new_search_results
                 self.second_search_results = \
@@ -861,24 +851,24 @@
                     verse.book.book_reference_id)
                 book = data[u'name']
             data = {
-                'book': QtCore.QVariant(book),
-                'chapter': QtCore.QVariant(verse.chapter),
-                'verse': QtCore.QVariant(verse.verse),
-                'bible': QtCore.QVariant(bible),
-                'version': QtCore.QVariant(version),
-                'copyright': QtCore.QVariant(copyright),
-                'permissions': QtCore.QVariant(permissions),
-                'text': QtCore.QVariant(verse.text),
-                'second_bible': QtCore.QVariant(second_bible),
-                'second_version': QtCore.QVariant(second_version),
-                'second_copyright': QtCore.QVariant(second_copyright),
-                'second_permissions': QtCore.QVariant(second_permissions),
-                'second_text': QtCore.QVariant(u'')
+                'book': book,
+                'chapter': verse.chapter,
+                'verse': verse.verse,
+                'bible': bible,
+                'version': version,
+                'copyright': copyright,
+                'permissions': permissions,
+                'text': verse.text,
+                'second_bible': second_bible,
+                'second_version': second_version,
+                'second_copyright': second_copyright,
+                'second_permissions': second_permissions,
+                'second_text': u''
             }
             if second_bible:
                 try:
-                    data[u'second_text'] = QtCore.QVariant(
-                        self.second_search_results[count].text)
+                    data[u'second_text'] = \
+                        self.second_search_results[count].text
                 except IndexError:
                     log.exception(u'The second_search_results does not have as '
                     'many verses as the search_results.')
@@ -889,7 +879,7 @@
                 bible_text = u'%s %d%s%d (%s)' % (book, verse.chapter,
                     verse_separator, verse.verse, version)
             bible_verse = QtGui.QListWidgetItem(bible_text)
-            bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
+            bible_verse.setData(QtCore.Qt.UserRole, data)
             items.append(bible_verse)
         return items
 
@@ -1092,7 +1082,7 @@
         """
         Search for some Bible verses (by reference).
         """
-        bible = unicode(self.quickVersionComboBox.currentText())
+        bible = self.quickVersionComboBox.currentText()
         search_results = self.plugin.manager.get_verses(bible, string, False,
             showError)
         if search_results:
@@ -1102,7 +1092,7 @@
 
     def createItemFromId(self, item_id):
         item = QtGui.QListWidgetItem()
-        bible = unicode(self.quickVersionComboBox.currentText())
+        bible = self.quickVersionComboBox.currentText()
         search_results = self.plugin.manager.get_verses(bible, item_id, False)
         items = self.buildDisplayResults(bible, u'', search_results)
         return items

=== modified file 'openlp/plugins/bibles/lib/opensong.py'
--- openlp/plugins/bibles/lib/opensong.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/opensong.py	2012-12-05 21:02:22 +0000
@@ -63,7 +63,7 @@
             verse_text += self.get_text(sub_element)
         if element.tail:
             verse_text += element.tail
-        return verse_text   
+        return verse_text
 
     def do_import(self, bible_name=None):
         """
@@ -129,11 +129,11 @@
                             db_book.id,
                             chapter_number,
                             verse_number,
-                            unicode(self.get_text(verse)))
-                    self.wizard.incrementProgressBar(unicode(translate(
+                            self.get_text(verse))
+                    self.wizard.incrementProgressBar(translate(
                         'BiblesPlugin.Opensong', 'Importing %s %s...',
-                        'Importing <book name> <chapter>...')) %
-                        (db_book.name, chapter_number))
+                        'Importing <book name> <chapter>...')) % \
+                        (db_book.name, chapter_number)
                 self.session.commit()
             Receiver.send_message(u'openlp_process_events')
         except etree.XMLSyntaxError as inst:

=== modified file 'openlp/plugins/bibles/lib/osis.py'
--- openlp/plugins/bibles/lib/osis.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/bibles/lib/osis.py	2012-12-05 21:02:22 +0000
@@ -103,7 +103,7 @@
             osis = codecs.open(self.filename, u'r', details['encoding'])
             repl = replacement
             language_id = False
-            # Decide if the bible propably contains only NT or AT and NT or 
+            # Decide if the bible propably contains only NT or AT and NT or
             # AT, NT and Apocrypha
             if lines_in_file < 11500:
                 book_count = 27
@@ -159,9 +159,9 @@
                     if last_chapter != chapter:
                         if last_chapter != 0:
                             self.session.commit()
-                        self.wizard.incrementProgressBar(unicode(translate(
+                        self.wizard.incrementProgressBar(translate(
                             'BiblesPlugin.OsisImport', 'Importing %s %s...',
-                            'Importing <book name> <chapter>...')) %
+                            'Importing <book name> <chapter>...') %
                             (book_details[u'name'], chapter))
                         last_chapter = chapter
                     # All of this rigmarol below is because the mod2osis

=== modified file 'openlp/plugins/custom/forms/editcustomform.py'
--- openlp/plugins/custom/forms/editcustomform.py	2012-12-05 06:12:07 +0000
+++ openlp/plugins/custom/forms/editcustomform.py	2012-12-05 21:02:22 +0000
@@ -127,13 +127,22 @@
         sxml = CustomXMLBuilder()
         sxml.new_document()
         sxml.add_lyrics_to_song()
+<<<<<<< TREE
         for count in range(self.slideListView.count()):
             sxml.add_verse_to_lyrics(u'custom', unicode(count + 1),
                 unicode(self.slideListView.item(count).text()))
         self.customSlide.title = unicode(self.titleEdit.text())
+=======
+        count = 1
+        for i in range(self.slideListView.count()):
+            sxml.add_verse_to_lyrics(u'custom', unicode(count),
+                self.slideListView.item(i).text())
+            count += 1
+        self.customSlide.title = self.titleEdit.text()
+>>>>>>> MERGE-SOURCE
         self.customSlide.text = unicode(sxml.extract_xml(), u'utf-8')
-        self.customSlide.credits = unicode(self.creditEdit.text())
-        self.customSlide.theme_name = unicode(self.themeComboBox.currentText())
+        self.customSlide.credits = self.creditEdit.text()
+        self.customSlide.theme_name = self.themeComboBox.currentText()
         success = self.manager.save_object(self.customSlide)
         self.mediaitem.autoSelectId = self.customSlide.id
         return success

=== modified file 'openlp/plugins/custom/lib/customtab.py'
--- openlp/plugins/custom/lib/customtab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/custom/lib/customtab.py	2012-12-05 21:02:22 +0000
@@ -29,8 +29,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import SettingsTab, translate, Settings
 
 class CustomTab(SettingsTab):
     """
@@ -70,10 +69,9 @@
 
     def load(self):
         self.displayFooter = Settings().value(
-            self.settingsSection + u'/display footer',
-            QtCore.QVariant(True)).toBool()
+            self.settingsSection + u'/display footer', True)
         self.displayFooterCheckBox.setChecked(self.displayFooter)
 
     def save(self):
         Settings().setValue(self.settingsSection + u'/display footer',
-            QtCore.QVariant(self.displayFooter))
+            self.displayFooter)

=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/custom/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -33,9 +33,8 @@
 from sqlalchemy.sql import or_, func
 
 from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
-    check_item_selected, translate
+    check_item_selected, translate, Settings
 from openlp.core.lib.ui import UiStrings
-from openlp.core.lib.settings import Settings
 from openlp.plugins.custom.forms import EditCustomForm
 from openlp.plugins.custom.lib import CustomXMLParser
 from openlp.plugins.custom.lib.db import CustomSlide
@@ -102,8 +101,7 @@
         self.loadList(self.manager.get_all_objects(
             CustomSlide, order_by_ref=CustomSlide.title))
         self.searchTextEdit.setCurrentSearchType(Settings().value(
-            u'%s/last search type' % self.settingsSection,
-            QtCore.QVariant(CustomSearch.Titles)).toInt()[0])
+            u'%s/last search type' % self.settingsSection, CustomSearch.Titles))
 
     def loadList(self, custom_slides):
         # Sort out what custom we want to select after loading the list.
@@ -112,8 +110,7 @@
         custom_slides.sort()
         for custom_slide in custom_slides:
             custom_name = QtGui.QListWidgetItem(custom_slide.title)
-            custom_name.setData(
-                QtCore.Qt.UserRole, QtCore.QVariant(custom_slide.id))
+            custom_name.setData(QtCore.Qt.UserRole, custom_slide.id)
             self.listView.addItem(custom_name)
             # Auto-select the custom.
             if custom_slide.id == self.autoSelectId:
@@ -161,7 +158,7 @@
         """
         if check_item_selected(self.listView, UiStrings().SelectEdit):
             item = self.listView.currentItem()
-            item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = item.data(QtCore.Qt.UserRole)
             self.edit_custom_form.loadCustom(item_id, False)
             self.edit_custom_form.exec_()
             self.autoSelectId = -1
@@ -185,7 +182,7 @@
                 return
             row_list = [item.row() for item in self.listView.selectedIndexes()]
             row_list.sort(reverse=True)
-            id_list = [(item.data(QtCore.Qt.UserRole)).toInt()[0]
+            id_list = [(item.data(QtCore.Qt.UserRole))
                 for item in self.listView.selectedIndexes()]
             for id in id_list:
                 self.plugin.manager.delete_object(CustomSlide, id)
@@ -215,7 +212,7 @@
         for slide in raw_slides:
             service_item.add_from_text(slide)
         if Settings().value(self.settingsSection + u'/display footer',
-            QtCore.QVariant(True)).toBool() or credit:
+            True) or credit:
             service_item.raw_footer.append(u' '.join([title, credit]))
         else:
             service_item.raw_footer.append(u'')
@@ -224,10 +221,9 @@
     def onSearchTextButtonClicked(self):
         # Save the current search type to the configuration.
         Settings().setValue(u'%s/last search type' %
-            self.settingsSection,
-            QtCore.QVariant(self.searchTextEdit.currentSearchType()))
+            self.settingsSection, self.searchTextEdit.currentSearchType())
         # Reload the list considering the new search type.
-        search_keywords = unicode(self.searchTextEdit.displayText())
+        search_keywords = self.searchTextEdit.displayText()
         search_results = []
         search_type = self.searchTextEdit.currentSearchType()
         if search_type == CustomSearch.Titles:

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/images/imageplugin.py	2012-12-05 21:02:22 +0000
@@ -32,8 +32,7 @@
 import logging
 
 from openlp.core.lib import Plugin, StringContent, build_icon, translate, \
-    Receiver, ImageSource
-from openlp.core.lib.settings import Settings
+    Receiver, ImageSource, Settings
 from openlp.plugins.images.lib import ImageMediaItem, ImageTab
 
 log = logging.getLogger(__name__)
@@ -98,6 +97,6 @@
         last part of saving the config.
         """
         background = QtGui.QColor(Settings().value(self.settingsSection
-            + u'/background color', QtCore.QVariant(u'#000000')))
+            + u'/background color', u'#000000'))
         self.liveController.imageManager.updateImagesBorder(
             ImageSource.ImagePlugin, background)

=== modified file 'openlp/plugins/images/lib/imagetab.py'
--- openlp/plugins/images/lib/imagetab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/images/lib/imagetab.py	2012-12-05 21:02:22 +0000
@@ -29,8 +29,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate, Receiver
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings, SettingsTab, translate
 
 class ImageTab(SettingsTab):
     """
@@ -87,8 +86,7 @@
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        self.bg_color = unicode(settings.value(
-            u'background color', QtCore.QVariant(u'#000000')).toString())
+        self.bg_color = settings.value(u'background color', u'#000000')
         self.initial_color = self.bg_color
         settings.endGroup()
         self.backgroundColorButton.setStyleSheet(
@@ -97,7 +95,7 @@
     def save(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        settings.setValue(u'background color', QtCore.QVariant(self.bg_color))
+        settings.setValue(u'background color', self.bg_color)
         settings.endGroup()
         if self.initial_color != self.bg_color:
             Receiver.send_message(u'image_updated')

=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/images/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -34,9 +34,8 @@
 
 from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \
     SettingsManager, translate, check_item_selected, check_directory_exists, \
-    Receiver, create_thumb, validate_thumb
+    Receiver, create_thumb, validate_thumb, Settings
 from openlp.core.lib.ui import UiStrings, critical_error_message_box
-from openlp.core.lib.settings import Settings
 from openlp.core.utils import AppLocation, delete_file, locale_compare, \
     get_images_filter
 
@@ -113,8 +112,7 @@
             for row in row_list:
                 text = self.listView.item(row)
                 if text:
-                    delete_file(os.path.join(self.servicePath,
-                        unicode(text.text())))
+                    delete_file(os.path.join(self.servicePath, text.text()))
                 self.listView.takeItem(row)
                 self.plugin.formParent.incrementProgressBar()
             SettingsManager.set_list(self.settingsSection,
@@ -144,7 +142,7 @@
             item_name = QtGui.QListWidgetItem(filename)
             item_name.setIcon(icon)
             item_name.setToolTip(imageFile)
-            item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile))
+            item_name.setData(QtCore.Qt.UserRole, imageFile)
             self.listView.addItem(item_name)
             if not initialLoad:
                 self.plugin.formParent.incrementProgressBar()
@@ -155,7 +153,7 @@
     def generateSlideData(self, service_item, item=None, xmlVersion=False,
         remote=False):
         background = QtGui.QColor(Settings().value(self.settingsSection
-            + u'/background color', QtCore.QVariant(u'#000000')))
+            + u'/background color', u'#000000'))
         if item:
             items = [item]
         else:
@@ -172,7 +170,7 @@
         missing_items = []
         missing_items_filenames = []
         for bitem in items:
-            filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
+            filename = bitem.data(QtCore.Qt.UserRole)
             if not os.path.exists(filename):
                 missing_items.append(bitem)
                 missing_items_filenames.append(filename)
@@ -183,22 +181,22 @@
             if not remote:
                 critical_error_message_box(
                     translate('ImagePlugin.MediaItem', 'Missing Image(s)'),
-                    unicode(translate('ImagePlugin.MediaItem',
-                    'The following image(s) no longer exist: %s')) %
+                    translate('ImagePlugin.MediaItem',
+                    'The following image(s) no longer exist: %s') %
                     u'\n'.join(missing_items_filenames))
             return False
         # We have missing as well as existing images. We ask what to do.
         elif missing_items and QtGui.QMessageBox.question(self,
             translate('ImagePlugin.MediaItem', 'Missing Image(s)'),
-            unicode(translate('ImagePlugin.MediaItem', 'The following '
+            translate('ImagePlugin.MediaItem', 'The following '
             'image(s) no longer exist: %s\nDo you want to add the other '
-            'images anyway?')) % u'\n'.join(missing_items_filenames),
+            'images anyway?') % u'\n'.join(missing_items_filenames),
             QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No |
             QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.No:
             return False
         # Continue with the existing images.
         for bitem in items:
-            filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
+            filename = bitem.data(QtCore.Qt.UserRole)
             name = os.path.split(filename)[1]
             service_item.add_from_image(filename, name, background)
         return True
@@ -224,11 +222,10 @@
             translate('ImagePlugin.MediaItem',
             'You must select an image to replace the background with.')):
             background = QtGui.QColor(Settings().value(
-                self.settingsSection + u'/background color',
-                QtCore.QVariant(u'#000000')))
+                self.settingsSection + u'/background color', u'#000000'))
             item = self.listView.selectedIndexes()[0]
             bitem = self.listView.item(item.row())
-            filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
+            filename = bitem.data(QtCore.Qt.UserRole)
             if os.path.exists(filename):
                 if self.plugin.liveController.display.directImage(
                     filename, background):
@@ -239,9 +236,9 @@
                         'There was no display item to amend.'))
             else:
                 critical_error_message_box(UiStrings().LiveBGError,
-                    unicode(translate('ImagePlugin.MediaItem',
+                    translate('ImagePlugin.MediaItem',
                     'There was a problem replacing your background, '
-                    'the image file "%s" no longer exists.')) % filename)
+                    'the image file "%s" no longer exists.') % filename)
 
     def search(self, string, showError):
         files = SettingsManager.load_list(self.settingsSection, u'images')

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -98,16 +98,15 @@
 
     def retranslateUi(self):
         self.onNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
-        self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem',
-            'Videos (%s);;Audio (%s);;%s (*)')) % (
+        self.onNewFileMasks = translate('MediaPlugin.MediaItem',
+            'Videos (%s);;Audio (%s);;%s (*)') % (
             u' '.join(self.plugin.video_extensions_list),
             u' '.join(self.plugin.audio_extensions_list), UiStrings().AllFiles)
         self.replaceAction.setText(UiStrings().ReplaceBG)
         self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG)
         self.resetAction.setText(UiStrings().ResetBG)
         self.resetAction.setToolTip(UiStrings().ResetLiveBG)
-        self.automatic = translate('MediaPlugin.MediaItem',
-            'Automatic')
+        self.automatic = translate('MediaPlugin.MediaItem', 'Automatic')
         self.displayTypeLabel.setText(
             translate('MediaPlugin.MediaItem', 'Use Player:'))
 
@@ -175,7 +174,7 @@
             translate('MediaPlugin.MediaItem',
             'You must select a media file to replace the background with.')):
             item = self.listView.currentItem()
-            filename = unicode(item.data(QtCore.Qt.UserRole).toString())
+            filename = item.data(QtCore.Qt.UserRole)
             if os.path.exists(filename):
                 if self.plugin.liveController.mediaController.video( \
                     self.plugin.liveController, filename, True, True):
@@ -186,9 +185,9 @@
                         'There was no display item to amend.'))
             else:
                 critical_error_message_box(UiStrings().LiveBGError,
-                    unicode(translate('MediaPlugin.MediaItem',
+                    translate('MediaPlugin.MediaItem',
                     'There was a problem replacing your background, '
-                    'the media file "%s" no longer exists.')) % filename)
+                    'the media file "%s" no longer exists.') % filename)
 
     def generateSlideData(self, service_item, item=None, xmlVersion=False,
         remote=False):
@@ -196,14 +195,14 @@
             item = self.listView.currentItem()
             if item is None:
                 return False
-        filename = unicode(item.data(QtCore.Qt.UserRole).toString())
+        filename = item.data(QtCore.Qt.UserRole)
         if not os.path.exists(filename):
             if not remote:
                 # File is no longer present
                 critical_error_message_box(
                     translate('MediaPlugin.MediaItem', 'Missing Media File'),
-                        unicode(translate('MediaPlugin.MediaItem',
-                            'The file %s no longer exists.')) % filename)
+                    translate('MediaPlugin.MediaItem',
+                    'The file %s no longer exists.') % filename)
             return False
         self.mediaLength = 0
         # Get media information and its length.
@@ -247,8 +246,8 @@
         the settings
         """
         self.populateDisplayTypes()
-        self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem',
-            'Videos (%s);;Audio (%s);;%s (*)')) % (
+        self.onNewFileMasks = translate('MediaPlugin.MediaItem',
+            'Videos (%s);;Audio (%s);;%s (*)') % (
             u' '.join(self.plugin.video_extensions_list),
             u' '.join(self.plugin.audio_extensions_list), UiStrings().AllFiles)
 
@@ -306,18 +305,18 @@
                 filename = os.path.split(unicode(track))[1]
                 item_name = QtGui.QListWidgetItem(filename)
                 item_name.setIcon(build_icon(ERROR))
-                item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(track))
+                item_name.setData(QtCore.Qt.UserRole, track)
             elif track_info.isFile():
                 filename = os.path.split(unicode(track))[1]
                 item_name = QtGui.QListWidgetItem(filename)
                 item_name.setIcon(build_icon(VIDEO))
-                item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(track))
+                item_name.setData(QtCore.Qt.UserRole, track)
             else:
                 filename = os.path.split(unicode(track))[1]
                 item_name = QtGui.QListWidgetItem(filename)
                 #TODO: add the appropriate Icon
                 #item_name.setIcon(build_icon(DVD_ICON))
-                item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(track))
+                item_name.setData(QtCore.Qt.UserRole, track)
             item_name.setToolTip(track)
             self.listView.addItem(item_name)
 

=== modified file 'openlp/plugins/media/lib/mediatab.py'
--- openlp/plugins/media/lib/mediatab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/media/lib/mediatab.py	2012-12-05 21:02:22 +0000
@@ -29,9 +29,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate, Receiver
+from openlp.core.lib import Receiver, Settings, SettingsTab, translate
 from openlp.core.lib.ui import UiStrings, create_button
-from openlp.core.lib.settings import Settings
 from openlp.core.ui.media import get_media_players, set_media_players
 class MediaQCheckBox(QtGui.QCheckBox):
     """
@@ -70,8 +69,7 @@
         self.playerOrderGroupBox.setObjectName(u'playerOrderGroupBox')
         self.playerOrderLayout = QtGui.QHBoxLayout(self.playerOrderGroupBox)
         self.playerOrderLayout.setObjectName(u'playerOrderLayout')
-        self.playerOrderlistWidget = QtGui.QListWidget( \
-            self.playerOrderGroupBox)
+        self.playerOrderlistWidget = QtGui.QListWidget(self.playerOrderGroupBox)
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
             QtGui.QSizePolicy.Expanding)
         sizePolicy.setHorizontalStretch(0)
@@ -79,11 +77,11 @@
         sizePolicy.setHeightForWidth(self.playerOrderlistWidget. \
             sizePolicy().hasHeightForWidth())
         self.playerOrderlistWidget.setSizePolicy(sizePolicy)
-        self.playerOrderlistWidget.setVerticalScrollBarPolicy( \
+        self.playerOrderlistWidget.setVerticalScrollBarPolicy(
             QtCore.Qt.ScrollBarAsNeeded)
-        self.playerOrderlistWidget.setHorizontalScrollBarPolicy( \
+        self.playerOrderlistWidget.setHorizontalScrollBarPolicy(
             QtCore.Qt.ScrollBarAlwaysOff)
-        self.playerOrderlistWidget.setEditTriggers( \
+        self.playerOrderlistWidget.setEditTriggers(
             QtGui.QAbstractItemView.NoEditTriggers)
         self.playerOrderlistWidget.setObjectName(u'playerOrderlistWidget')
         self.playerOrderLayout.addWidget(self.playerOrderlistWidget)
@@ -126,9 +124,8 @@
             if player.available:
                 checkbox.setText(player.display_name)
             else:
-                checkbox.setText(
-                    unicode(translate('MediaPlugin.MediaTab',
-                    '%s (unavailable)')) % player.display_name)
+                checkbox.setText(translate('MediaPlugin.MediaTab',
+                    '%s (unavailable)') % player.display_name)
         self.playerOrderGroupBox.setTitle(
             translate('MediaPlugin.MediaTab', 'Player Order'))
         self.advancedGroupBox.setTitle(UiStrings().Advanced)
@@ -190,8 +187,7 @@
                 checkbox.setChecked(False)
         self.updatePlayerList()
         self.overridePlayerCheckBox.setChecked(Settings().value(
-            self.settingsSection + u'/override player',
-            QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
+            self.settingsSection + u'/override player', QtCore.Qt.Unchecked))
 
     def save(self):
         override_changed = False
@@ -203,13 +199,12 @@
             player_string_changed = True
             override_changed = True
         setting_key = self.settingsSection + u'/override player'
-        if Settings().value(setting_key).toInt()[0] != \
+        if Settings().value(setting_key, QtCore.Qt.Unchecked) != \
             self.overridePlayerCheckBox.checkState():
             Settings().setValue(setting_key,
-                QtCore.QVariant(self.overridePlayerCheckBox.checkState()))
+                self.overridePlayerCheckBox.checkState())
             override_changed = True
-        if override_changed:
-            Receiver.send_message(u'mediaitem_media_rebuild')
-        if player_string_changed:
-            Receiver.send_message(u'mediaitem_media_rebuild')
+        if player_string_changed or override_changed:
+            if override_changed:
+                Receiver.send_message(u'mediaitem_media_rebuild')
             Receiver.send_message(u'config_screen_changed')

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/media/mediaplugin.py	2012-12-05 21:02:22 +0000
@@ -31,8 +31,8 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.lib import Plugin, StringContent, build_icon, translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Plugin, StringContent, build_icon, translate, \
+    Settings
 from openlp.plugins.media.lib import MediaMediaItem, MediaTab
 
 log = logging.getLogger(__name__)
@@ -135,7 +135,7 @@
             log.info(u'Found old Phonon setting')
             players = self.mediaController.mediaPlayers.keys()
             has_phonon = u'phonon' in players
-            if settings.value(u'use phonon').toBool() and has_phonon:
+            if settings.value(u'use phonon')  and has_phonon:
                 log.debug(u'Converting old setting to new setting')
                 new_players = []
                 if players:
@@ -143,8 +143,7 @@
                         if player != u'phonon']
                 new_players.insert(0, u'phonon')
                 self.mediaController.mediaPlayers[u'phonon'].isActive = True
-                settings.setValue(u'players', \
-                    QtCore.QVariant(u','.join(new_players)))
+                settings.setValue(u'players', u','.join(new_players))
                 self.settingsTab.load()
             settings.remove(u'use phonon')
         settings.endGroup()

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -34,10 +34,9 @@
 
 from openlp.core.lib import MediaManagerItem, build_icon, SettingsManager, \
     translate, check_item_selected, Receiver, ItemCapabilities, create_thumb, \
-    validate_thumb
+    validate_thumb, Settings
 from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
     create_horizontal_adjusting_combo_box
-from openlp.core.lib.settings import Settings
 from openlp.core.utils import locale_compare
 from openlp.plugins.presentations.lib import MessageListener
 
@@ -92,8 +91,8 @@
                     if fileType.find(type) == -1:
                         fileType += u'*.%s ' % type
                         self.plugin.serviceManager.supportedSuffixes(type)
-        self.onNewFileMasks = unicode(translate('PresentationPlugin.MediaItem',
-            'Presentations (%s)')) % fileType
+        self.onNewFileMasks = translate('PresentationPlugin.MediaItem',
+            'Presentations (%s)') % fileType
 
     def requiredIcons(self):
         """
@@ -155,7 +154,7 @@
             self.displayTypeComboBox.insertItem(0, self.Automatic)
             self.displayTypeComboBox.setCurrentIndex(0)
         if Settings().value(self.settingsSection + u'/override app',
-            QtCore.QVariant(QtCore.Qt.Unchecked)) == QtCore.Qt.Checked:
+            QtCore.Qt.Unchecked) == QtCore.Qt.Checked:
             self.presentationWidget.show()
         else:
             self.presentationWidget.hide()
@@ -185,7 +184,7 @@
             if not os.path.exists(file):
                 item_name = QtGui.QListWidgetItem(filename)
                 item_name.setIcon(build_icon(ERROR))
-                item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
+                item_name.setData(QtCore.Qt.UserRole, file)
                 item_name.setToolTip(file)
                 self.listView.addItem(item_name)
             else:
@@ -225,7 +224,7 @@
                             'This type of presentation is not supported.'))
                         continue
                 item_name = QtGui.QListWidgetItem(filename)
-                item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
+                item_name.setData(QtCore.Qt.UserRole, file)
                 item_name.setIcon(icon)
                 item_name.setToolTip(file)
                 self.listView.addItem(item_name)
@@ -245,8 +244,7 @@
             Receiver.send_message(u'cursor_busy')
             self.plugin.formParent.displayProgressBar(len(row_list))
             for item in items:
-                filepath = unicode(item.data(
-                    QtCore.Qt.UserRole).toString())
+                filepath = unicode(item.data(QtCore.Qt.UserRole))
                 for cidx in self.controllers:
                     doc = self.controllers[cidx].add_document(filepath)
                     doc.presentation_deleted()
@@ -272,15 +270,15 @@
             items = self.listView.selectedItems()
             if len(items) > 1:
                 return False
-        service_item.title = unicode(self.displayTypeComboBox.currentText())
-        service_item.shortname = unicode(self.displayTypeComboBox.currentText())
+        service_item.title = self.displayTypeComboBox.currentText()
+        service_item.shortname = self.displayTypeComboBox.currentText()
         service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay)
         service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay)
         shortname = service_item.shortname
         if not shortname:
             return False
         for bitem in items:
-            filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
+            filename = bitem.data(QtCore.Qt.UserRole)
             if os.path.exists(filename):
                 if shortname == self.Automatic:
                     service_item.shortname = self.findControllerByType(filename)
@@ -306,10 +304,9 @@
                         critical_error_message_box(
                             translate('PresentationPlugin.MediaItem',
                             'Missing Presentation'),
-                            unicode(translate(
-                            'PresentationPlugin.MediaItem',
+                            translate('PresentationPlugin.MediaItem',
                             'The presentation %s is incomplete,'
-                            ' please reload.')) % filename)
+                            ' please reload.') % filename)
                     return False
             else:
                 # File is no longer present
@@ -317,8 +314,8 @@
                     critical_error_message_box(
                         translate('PresentationPlugin.MediaItem',
                         'Missing Presentation'),
-                        unicode(translate('PresentationPlugin.MediaItem',
-                        'The presentation %s no longer exists.')) % filename)
+                        translate('PresentationPlugin.MediaItem',
+                        'The presentation %s no longer exists.') % filename)
                 return False
 
     def findControllerByType(self, filename):

=== modified file 'openlp/plugins/presentations/lib/presentationcontroller.py'
--- openlp/plugins/presentations/lib/presentationcontroller.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/presentations/lib/presentationcontroller.py	2012-12-05 21:02:22 +0000
@@ -34,8 +34,7 @@
 from PyQt4 import QtCore
 
 from openlp.core.lib import Receiver, check_directory_exists, create_thumb, \
-    validate_thumb
-from openlp.core.lib.settings import Settings
+    validate_thumb, Settings
 from openlp.core.utils import AppLocation
 
 log = logging.getLogger(__name__)
@@ -393,10 +392,8 @@
         """
         Return whether the controller is currently enabled
         """
-        if Settings().value(
-            self.settings_section + u'/' + self.name,
-            QtCore.QVariant(QtCore.Qt.Checked)).toInt()[0] == \
-                QtCore.Qt.Checked:
+        if Settings().value(self.settings_section + u'/' + self.name,
+            QtCore.Qt.Checked) == QtCore.Qt.Checked:
             return self.is_available()
         else:
             return False

=== modified file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py	2012-12-05 21:02:22 +0000
@@ -29,9 +29,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, SettingsTab, translate
+from openlp.core.lib import Receiver, Settings, SettingsTab, translate
 from openlp.core.lib.ui import UiStrings
-from openlp.core.lib.settings import Settings
 
 class PresentationTab(SettingsTab):
     """
@@ -95,8 +94,8 @@
             checkbox.setText(controller.name)
         else:
             checkbox.setText(
-                unicode(translate('PresentationPlugin.PresentationTab',
-                '%s (unavailable)')) % controller.name)
+                translate('PresentationPlugin.PresentationTab',
+                '%s (unavailable)') % controller.name)
 
     def load(self):
         """
@@ -107,10 +106,9 @@
             checkbox = self.PresenterCheckboxes[controller.name]
             checkbox.setChecked(Settings().value(
                 self.settingsSection + u'/' + controller.name,
-                QtCore.QVariant(QtCore.Qt.Checked)).toInt()[0])
+                QtCore.Qt.Checked))
         self.OverrideAppCheckBox.setChecked(Settings().value(
-            self.settingsSection + u'/override app',
-            QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
+            self.settingsSection + u'/override app', QtCore.Qt.Unchecked))
 
     def save(self):
         """
@@ -129,8 +127,7 @@
                 if Settings().value(setting_key) != \
                     checkbox.checkState():
                     changed = True
-                    Settings().setValue(setting_key,
-                        QtCore.QVariant(checkbox.checkState()))
+                    Settings().setValue(setting_key, checkbox.checkState())
                     if checkbox.isChecked():
                         controller.start_process()
                     else:
@@ -139,7 +136,7 @@
         if Settings().value(setting_key) != \
             self.OverrideAppCheckBox.checkState():
             Settings().setValue(setting_key,
-                QtCore.QVariant(self.OverrideAppCheckBox.checkState()))
+                self.OverrideAppCheckBox.checkState())
             changed = True
         if changed:
             Receiver.send_message(u'mediaitem_presentation_rebuild')

=== modified file 'openlp/plugins/remotes/lib/httpserver.py'
--- openlp/plugins/remotes/lib/httpserver.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/remotes/lib/httpserver.py	2012-12-05 21:02:22 +0000
@@ -123,8 +123,7 @@
 from PyQt4 import QtCore, QtNetwork
 from mako.template import Template
 
-from openlp.core.lib import Receiver, PluginStatus, StringContent
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Receiver, Settings, PluginStatus, StringContent
 from openlp.core.utils import AppLocation, translate
 
 log = logging.getLogger(__name__)
@@ -173,11 +172,9 @@
         """
         log.debug(u'Start TCP server')
         port = Settings().value(
-            self.plugin.settingsSection + u'/port',
-            QtCore.QVariant(4316)).toInt()[0]
+            self.plugin.settingsSection + u'/port', 4316)
         address = Settings().value(
-            self.plugin.settingsSection + u'/ip address',
-            QtCore.QVariant(u'0.0.0.0')).toString()
+            self.plugin.settingsSection + u'/ip address', u'0.0.0.0')
         self.server = QtNetwork.QTcpServer()
         self.server.listen(QtNetwork.QHostAddress(address), port)
         QtCore.QObject.connect(Receiver.get_receiver(),
@@ -238,7 +235,7 @@
         Initialise the http connection. Listen out for socket signals.
         """
         log.debug(u'Initialise HttpConnection: %s' %
-            socket.peerAddress().toString())
+            socket.peerAddress())
         self.socket = socket
         self.parent = parent
         self.routes = [
@@ -409,14 +406,11 @@
             u'slide': self.parent.current_slide or 0,
             u'item': self.parent.current_item._uuid \
                 if self.parent.current_item else u'',
-            u'twelve':Settings().value(
-            u'remotes/twelve hour', QtCore.QVariant(True)).toBool(),
-            u'blank': self.parent.plugin.liveController.blankScreen.\
-                isChecked(),
-            u'theme': self.parent.plugin.liveController.themeScreen.\
-                isChecked(),
-            u'display': self.parent.plugin.liveController.desktopScreen.\
-                isChecked()
+            u'twelve':Settings().value(u'remotes/twelve hour', True),
+            u'blank': self.parent.plugin.liveController.blankScreen.isChecked(),
+            u'theme': self.parent.plugin.liveController.themeScreen.isChecked(),
+            u'display': \
+                self.parent.plugin.liveController.desktopScreen.isChecked()
         }
         return HttpResponse(json.dumps({u'results': result}),
             {u'Content-Type': u'application/json'})

=== modified file 'openlp/plugins/remotes/lib/remotetab.py'
--- openlp/plugins/remotes/lib/remotetab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/remotes/lib/remotetab.py	2012-12-05 21:02:22 +0000
@@ -29,8 +29,7 @@
 
 from PyQt4 import QtCore, QtGui, QtNetwork
 
-from openlp.core.lib import SettingsTab, translate, Receiver
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings, SettingsTab, translate, Receiver
 
 ZERO_URL = u'0.0.0.0'
 
@@ -141,7 +140,7 @@
                     ip = addr.ip()
                     if ip.protocol() == 0 and \
                         ip != QtNetwork.QHostAddress.LocalHost:
-                        ipAddress = ip.toString()
+                        ipAddress = ip
                         break
         else:
             ipAddress = self.addressEdit.text()
@@ -152,30 +151,26 @@
 
     def load(self):
         self.portSpinBox.setValue(
-            Settings().value(self.settingsSection + u'/port',
-                QtCore.QVariant(4316)).toInt()[0])
+            Settings().value(self.settingsSection + u'/port', 4316))
         self.addressEdit.setText(
-            Settings().value(self.settingsSection + u'/ip address',
-                QtCore.QVariant(ZERO_URL)).toString())
+            Settings().value(self.settingsSection + u'/ip address', ZERO_URL))
         self.twelveHour = Settings().value(
-            self.settingsSection + u'/twelve hour',
-            QtCore.QVariant(True)).toBool()
+            self.settingsSection + u'/twelve hour', True)
         self.twelveHourCheckBox.setChecked(self.twelveHour)
         self.setUrls()
 
     def save(self):
         changed = False
-        if Settings().value(self.settingsSection + u'/ip address',
-            QtCore.QVariant(ZERO_URL).toString() != self.addressEdit.text() or
-            Settings().value(self.settingsSection + u'/port',
-            QtCore.QVariant(4316).toInt()[0]) != self.portSpinBox.value()):
+        if Settings().value(self.settingsSection + u'/ip address', ZERO_URL !=
+            self.addressEdit.text() or Settings().value(self.settingsSection +
+            u'/port', 4316) != self.portSpinBox.value()):
             changed = True
         Settings().setValue(self.settingsSection + u'/port',
-            QtCore.QVariant(self.portSpinBox.value()))
+            self.portSpinBox.value())
         Settings().setValue(self.settingsSection + u'/ip address',
-            QtCore.QVariant(self.addressEdit.text()))
+            self.addressEdit.text())
         Settings().setValue(self.settingsSection + u'/twelve hour',
-            QtCore.QVariant(self.twelveHour))
+            self.twelveHour)
         if changed:
             Receiver.send_message(u'remotes_config_updated')
 

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2012-12-05 06:12:07 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2012-12-05 21:02:22 +0000
@@ -147,8 +147,7 @@
         for author in authors:
             row = self.authorsComboBox.count()
             self.authorsComboBox.addItem(author.display_name)
-            self.authorsComboBox.setItemData(
-                row, QtCore.QVariant(author.id))
+            self.authorsComboBox.setItemData(row, author.id)
             self.authors.append(author.display_name)
         set_case_insensitive_completer(self.authors, self.authorsComboBox)
 
@@ -168,7 +167,7 @@
             row = combo.count()
             combo.addItem(object.name)
             cache.append(object.name)
-            combo.setItemData(row, QtCore.QVariant(object.id))
+            combo.setItemData(row, object.id)
         set_case_insensitive_completer(cache, combo)
 
     def loadThemes(self, theme_list):
@@ -279,7 +278,7 @@
                     verse[0][u'label'] = u'1'
                 verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label'])
                 item = QtGui.QTableWidgetItem(verse[1])
-                item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
+                item.setData(QtCore.Qt.UserRole, verse_def)
                 self.verseListWidget.setItem(count, 0, item)
         else:
             verses = self.song.lyrics.split(u'\n\n')
@@ -289,7 +288,7 @@
                 item = QtGui.QTableWidgetItem(verse)
                 verse_def = u'%s%s' % \
                     (VerseType.Tags[VerseType.Verse], unicode(count + 1))
-                item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
+                item.setData(QtCore.Qt.UserRole, verse_def)
                 self.verseListWidget.setItem(count, 0, item)
         if self.song.verse_order:
             # we translate verse order
@@ -311,20 +310,19 @@
         self.authorsListView.clear()
         for author in self.song.authors:
             author_name = QtGui.QListWidgetItem(unicode(author.display_name))
-            author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
+            author_name.setData(QtCore.Qt.UserRole, author.id)
             self.authorsListView.addItem(author_name)
         # clear the results
         self.topicsListView.clear()
         for topic in self.song.topics:
             topic_name = QtGui.QListWidgetItem(unicode(topic.name))
-            topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
+            topic_name.setData(QtCore.Qt.UserRole, topic.id)
             self.topicsListView.addItem(topic_name)
         self.audioListWidget.clear()
         for media in self.song.media_files:
             media_file = QtGui.QListWidgetItem(
                 os.path.split(media.file_name)[1])
-            media_file.setData(QtCore.Qt.UserRole,
-                QtCore.QVariant(media.file_name))
+            media_file.setData(QtCore.Qt.UserRole, media.file_name)
             self.audioListWidget.addItem(media_file)
         self.titleEdit.setFocus()
         # Hide or show the preview button.
@@ -337,7 +335,7 @@
         row_label = []
         for row in range(self.verseListWidget.rowCount()):
             item = self.verseListWidget.item(row, 0)
-            verse_def = unicode(item.data(QtCore.Qt.UserRole).toString())
+            verse_def = item.data(QtCore.Qt.UserRole)
             verse_tag = VerseType.translated_tag(verse_def[0])
             row_def = u'%s%s' % (verse_tag, verse_def[1:])
             row_label.append(row_def)
@@ -347,7 +345,7 @@
 
     def onAuthorAddButtonClicked(self):
         item = int(self.authorsComboBox.currentIndex())
-        text = unicode(self.authorsComboBox.currentText()).strip(u' \r\n\t')
+        text = self.authorsComboBox.currentText().strip(u' \r\n\t')
         # This if statement is for OS X, which doesn't seem to work well with
         # the QCompleter autocompletion class. See bug #812628.
         if text in self.authors:
@@ -373,7 +371,7 @@
             else:
                 return
         elif item > 0:
-            item_id = (self.authorsComboBox.itemData(item)).toInt()[0]
+            item_id = (self.authorsComboBox.itemData(item))
             author = self.manager.get_object(Author, item_id)
             if self.authorsListView.findItems(unicode(author.display_name),
                 QtCore.Qt.MatchExactly):
@@ -395,7 +393,7 @@
         Add an author to the author list.
         """
         author_item = QtGui.QListWidgetItem(unicode(author.display_name))
-        author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
+        author_item.setData(QtCore.Qt.UserRole, author.id)
         self.authorsListView.addItem(author_item)
 
     def onAuthorsListViewClicked(self):
@@ -410,7 +408,7 @@
 
     def onTopicAddButtonClicked(self):
         item = int(self.topicsComboBox.currentIndex())
-        text = unicode(self.topicsComboBox.currentText())
+        text = self.topicsComboBox.currentText()
         if item == 0 and text:
             if QtGui.QMessageBox.question(self,
                 translate('SongsPlugin.EditSongForm', 'Add Topic'),
@@ -421,15 +419,14 @@
                 topic = Topic.populate(name=text)
                 self.manager.save_object(topic)
                 topic_item = QtGui.QListWidgetItem(unicode(topic.name))
-                topic_item.setData(QtCore.Qt.UserRole,
-                    QtCore.QVariant(topic.id))
+                topic_item.setData(QtCore.Qt.UserRole, topic.id)
                 self.topicsListView.addItem(topic_item)
                 self.loadTopics()
                 self.topicsComboBox.setCurrentIndex(0)
             else:
                 return
         elif item > 0:
-            item_id = (self.topicsComboBox.itemData(item)).toInt()[0]
+            item_id = (self.topicsComboBox.itemData(item))
             topic = self.manager.get_object(Topic, item_id)
             if self.topicsListView.findItems(unicode(topic.name),
                 QtCore.Qt.MatchExactly):
@@ -438,8 +435,7 @@
                     'This topic is already in the list.'))
             else:
                 topic_item = QtGui.QListWidgetItem(unicode(topic.name))
-                topic_item.setData(QtCore.Qt.UserRole,
-                    QtCore.QVariant(topic.id))
+                topic_item.setData(QtCore.Qt.UserRole, topic.id)
                 self.topicsListView.addItem(topic_item)
             self.topicsComboBox.setCurrentIndex(0)
         else:
@@ -468,7 +464,7 @@
             after_text, verse_tag, verse_num = self.verseForm.getVerse()
             verse_def = u'%s%s' % (verse_tag, verse_num)
             item = QtGui.QTableWidgetItem(after_text)
-            item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
+            item.setData(QtCore.Qt.UserRole, verse_def)
             item.setText(after_text)
             self.verseListWidget.setRowCount(
                 self.verseListWidget.rowCount() + 1)
@@ -482,12 +478,12 @@
         item = self.verseListWidget.currentItem()
         if item:
             temp_text = item.text()
-            verse_id = unicode(item.data(QtCore.Qt.UserRole).toString())
+            verse_id = item.data(QtCore.Qt.UserRole)
             self.verseForm.setVerse(temp_text, True, verse_id)
             if self.verseForm.exec_():
                 after_text, verse_tag, verse_num = self.verseForm.getVerse()
                 verse_def = u'%s%s' % (verse_tag, verse_num)
-                item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
+                item.setData(QtCore.Qt.UserRole, verse_def)
                 item.setText(after_text)
                 # number of lines has changed, repaint the list moving the data
                 if len(temp_text.split(u'\n')) != len(after_text.split(u'\n')):
@@ -511,7 +507,7 @@
         if self.verseListWidget.rowCount() > 0:
             for row in range(self.verseListWidget.rowCount()):
                 item = self.verseListWidget.item(row, 0)
-                field = unicode(item.data(QtCore.Qt.UserRole).toString())
+                field = item.data(QtCore.Qt.UserRole)
                 verse_tag = VerseType.translated_name(field[0])
                 verse_num = field[1:]
                 verse_list += u'---[%s:%s]---\n' % (verse_tag, verse_num)
@@ -555,8 +551,7 @@
                         if parts.endswith(u'\n'):
                             parts = parts.rstrip(u'\n')
                         item = QtGui.QTableWidgetItem(parts)
-                        item.setData(QtCore.Qt.UserRole,
-                            QtCore.QVariant(verse_def))
+                        item.setData(QtCore.Qt.UserRole, verse_def)
                         self.verseListWidget.setRowCount(
                             self.verseListWidget.rowCount() + 1)
                         self.verseListWidget.setItem(
@@ -579,7 +574,7 @@
         order = self.__extractVerseOrder(text)
         for index in range(self.verseListWidget.rowCount()):
             verse = self.verseListWidget.item(index, 0)
-            verse = unicode(verse.data(QtCore.Qt.UserRole).toString())
+            verse = verse.data(QtCore.Qt.UserRole)
             if verse not in verse_names:
                 verses.append(verse)
                 verse_names.append(u'%s%s' % (
@@ -620,7 +615,7 @@
         order = self.__extractVerseOrder(verse_order)
         for index in range(verse_count):
             verse = self.verseListWidget.item(index, 0)
-            verse = unicode(verse.data(QtCore.Qt.UserRole).toString())
+            verse = verse.data(QtCore.Qt.UserRole)
             if verse not in verse_names:
                 verses.append(verse)
                 verse_names.append(u'%s%s' % (
@@ -631,15 +626,15 @@
         if invalid_verses:
             valid = create_separated_list(verse_names)
             if len(invalid_verses) > 1:
-                critical_error_message_box(message=unicode(translate(
+                critical_error_message_box(message=translate(
                     'SongsPlugin.EditSongForm', 'The verse order is invalid. '
                     'There are no verses corresponding to %s. Valid entries '
-                    'are %s.')) % (u', '.join(invalid_verses), valid))
+                    'are %s.') % (u', '.join(invalid_verses), valid))
             else:
-                critical_error_message_box(message=unicode(translate(
+                critical_error_message_box(message=translate(
                     'SongsPlugin.EditSongForm', 'The verse order is invalid. '
                     'There is no verse corresponding to %s. Valid entries '
-                    'are %s.')) % (invalid_verses[0], valid))
+                    'are %s.') % (invalid_verses[0], valid))
         return len(invalid_verses) == 0
 
     def __validateSong(self):
@@ -676,7 +671,7 @@
                 self.verseListWidget.rowCount())
             if not result:
                 return False
-        text = unicode(self.songBookComboBox.currentText())
+        text = self.songBookComboBox.currentText()
         if self.songBookComboBox.findText(text, QtCore.Qt.MatchExactly) < 0:
             if QtGui.QMessageBox.question(self,
                 translate('SongsPlugin.EditSongForm', 'Add Book'),
@@ -702,7 +697,7 @@
     def onMaintenanceButtonClicked(self):
         temp_song_book = None
         item = int(self.songBookComboBox.currentIndex())
-        text = unicode(self.songBookComboBox.currentText())
+        text = self.songBookComboBox.currentText()
         if item == 0 and text:
             temp_song_book = text
         self.mediaitem.songMaintenanceForm.exec_(True)
@@ -721,7 +716,7 @@
             A button (QPushButton).
         """
         log.debug(u'onPreview')
-        if unicode(button.objectName()) == u'previewButton':
+        if button.objectName() == u'previewButton':
             self.saveSong(True)
             Receiver.send_message(u'songs_preview')
 
@@ -731,8 +726,7 @@
         """
         filters = u'%s (*)' % UiStrings().AllFiles
         filenames = QtGui.QFileDialog.getOpenFileNames(self,
-            translate('SongsPlugin.EditSongForm', 'Open File(s)'),
-            QtCore.QString(), filters)
+            translate('SongsPlugin.EditSongForm', 'Open File(s)'), u'', filters)
         for filename in filenames:
             item = QtGui.QListWidgetItem(os.path.split(unicode(filename))[1])
             item.setData(QtCore.Qt.UserRole, filename)
@@ -830,30 +824,30 @@
         # Song() is in a partially complete state.
         if not self.song:
             self.song = Song()
-        self.song.title = unicode(self.titleEdit.text())
-        self.song.alternate_title = unicode(self.alternativeEdit.text())
-        self.song.copyright = unicode(self.copyrightEdit.text())
+        self.song.title = self.titleEdit.text()
+        self.song.alternate_title = self.alternativeEdit.text()
+        self.song.copyright = self.copyrightEdit.text()
         # Values will be set when cleaning the song.
         self.song.search_title = u''
         self.song.search_lyrics = u''
         self.song.verse_order = u''
-        self.song.comments = unicode(self.commentsEdit.toPlainText())
-        ordertext = unicode(self.verseOrderEdit.text())
+        self.song.comments = self.commentsEdit.toPlainText()
+        ordertext = self.verseOrderEdit.text()
         order = []
         for item in ordertext.split():
             verse_tag = VerseType.Tags[VerseType.from_translated_tag(item[0])]
             verse_num = item[1:].lower()
             order.append(u'%s%s' % (verse_tag, verse_num))
         self.song.verse_order = u' '.join(order)
-        self.song.ccli_number = unicode(self.CCLNumberEdit.text())
-        self.song.song_number = unicode(self.songBookNumberEdit.text())
-        book_name = unicode(self.songBookComboBox.currentText())
+        self.song.ccli_number = self.CCLNumberEdit.text()
+        self.song.song_number = self.songBookNumberEdit.text()
+        book_name = self.songBookComboBox.currentText()
         if book_name:
             self.song.book = self.manager.get_object_filtered(Book,
                 Book.name == book_name)
         else:
             self.song.book = None
-        theme_name = unicode(self.themeComboBox.currentText())
+        theme_name = self.themeComboBox.currentText()
         if theme_name:
             self.song.theme_name = theme_name
         else:
@@ -862,14 +856,14 @@
         self.song.authors = []
         for row in xrange(self.authorsListView.count()):
             item = self.authorsListView.item(row)
-            authorId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            authorId = (item.data(QtCore.Qt.UserRole))
             author = self.manager.get_object(Author, authorId)
             if author is not None:
                 self.song.authors.append(author)
         self.song.topics = []
         for row in xrange(self.topicsListView.count()):
             item = self.topicsListView.item(row)
-            topicId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            topicId = (item.data(QtCore.Qt.UserRole))
             topic = self.manager.get_object(Topic, topicId)
             if topic is not None:
                 self.song.topics.append(topic)
@@ -886,7 +880,7 @@
         files = []
         for row in xrange(self.audioListWidget.count()):
             item = self.audioListWidget.item(row)
-            filename = unicode(item.data(QtCore.Qt.UserRole).toString())
+            filename = item.data(QtCore.Qt.UserRole)
             if not filename.startswith(save_path):
                 oldfile, filename = filename, os.path.join(save_path,
                     os.path.split(filename)[1])
@@ -923,11 +917,10 @@
             multiple = []
             for i in range(self.verseListWidget.rowCount()):
                 item = self.verseListWidget.item(i, 0)
-                verse_id = unicode(item.data(QtCore.Qt.UserRole).toString())
+                verse_id = item.data(QtCore.Qt.UserRole)
                 verse_tag = verse_id[0]
                 verse_num = verse_id[1:]
-                sxml.add_verse_to_lyrics(verse_tag, verse_num,
-                    unicode(item.text()))
+                sxml.add_verse_to_lyrics(verse_tag, verse_num, item.text())
                 if verse_num > u'1' and verse_tag not in multiple:
                     multiple.append(verse_tag)
             self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8')

=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py	2012-12-05 06:12:07 +0000
+++ openlp/plugins/songs/forms/editverseform.py	2012-12-05 21:02:22 +0000
@@ -98,7 +98,7 @@
         and the cursor's position.
         """
         position = self.verseTextEdit.textCursor().position()
-        text = unicode(self.verseTextEdit.toPlainText())
+        text = self.verseTextEdit.toPlainText()
         verse_name = VerseType.TranslatedNames[
             self.verseTypeComboBox.currentIndex()]
         if not text:
@@ -128,7 +128,7 @@
         position and adjusts the ComboBox and SpinBox to these values.
         """
         position = self.verseTextEdit.textCursor().position()
-        text = unicode(self.verseTextEdit.toPlainText())
+        text = self.verseTextEdit.toPlainText()
         if not text:
             return
         if text.rfind(u'[', 0, position) > text.rfind(u']', 0, position) and \
@@ -182,7 +182,8 @@
 
     def getVerseAll(self):
         text = self.verseTextEdit.toPlainText()
-        if not text.startsWith(u'---['):
+        if not text.startswith(u'---['):
             text = u'---[%s:1]---\n%s' % \
                 (VerseType.TranslatedNames[VerseType.Verse], text)
         return text
+

=== modified file 'openlp/plugins/songs/forms/mediafilesform.py'
--- openlp/plugins/songs/forms/mediafilesform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/forms/mediafilesform.py	2012-12-05 21:02:22 +0000
@@ -54,6 +54,6 @@
             self.fileListWidget.addItem(item)
 
     def getSelectedFiles(self):
-        return map(lambda x: unicode(x.data(QtCore.Qt.UserRole).toString()),
+        return map(lambda item: item.data(QtCore.Qt.UserRole),
             self.fileListWidget.selectedItems())
 

=== modified file 'openlp/plugins/songs/forms/songexportform.py'
--- openlp/plugins/songs/forms/songexportform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/forms/songexportform.py	2012-12-05 21:02:22 +0000
@@ -220,8 +220,7 @@
             # Add the songs to the list of selected songs.
             for item in items:
                 song = QtGui.QListWidgetItem(item.text())
-                song.setData(QtCore.Qt.UserRole,
-                    QtCore.QVariant(item.data(QtCore.Qt.UserRole).toPyObject()))
+                song.setData(QtCore.Qt.UserRole, item.data(QtCore.Qt.UserRole))
                 song.setFlags(QtCore.Qt.ItemIsEnabled)
                 self.selectedListWidget.addItem(song)
             return True
@@ -263,7 +262,7 @@
                 for author in song.authors])
             title = u'%s (%s)' % (unicode(song.title), authors)
             item = QtGui.QListWidgetItem(title)
-            item.setData(QtCore.Qt.UserRole, QtCore.QVariant(song))
+            item.setData(QtCore.Qt.UserRole, song)
             item.setFlags(QtCore.Qt.ItemIsSelectable|
                 QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
             item.setCheckState(QtCore.Qt.Unchecked)
@@ -285,11 +284,10 @@
         and calls the *do_export* method.
         """
         songs = [
-            song.data(QtCore.Qt.UserRole).toPyObject()
+            song.data(QtCore.Qt.UserRole)
             for song in self._findListWidgetItems(self.selectedListWidget)
         ]
-        exporter = OpenLyricsExport(
-            self, songs, unicode(self.directoryLineEdit.text()))
+        exporter = OpenLyricsExport(self, songs, self.directoryLineEdit.text())
         if exporter.do_export():
             self.progressLabel.setText(
                 translate('SongsPlugin.SongExportForm', 'Finished export. To '
@@ -311,8 +309,8 @@
         ``text``
             The text to search for. (unicode string)
         """
-        return [item for item in listWidget.findItems(
-            QtCore.QString(unicode(text)), QtCore.Qt.MatchContains)
+        return [
+            item for item in listWidget.findItems(text, QtCore.Qt.MatchContains)
         ]
 
     def onItemActivated(self, item):
@@ -334,11 +332,11 @@
         will be hidden, but not unchecked!
 
         ``text``
-            The text of the *searchLineEdit*. (QString)
+            The text of the *searchLineEdit*.
         """
         search_result = [
             song for song in self._findListWidgetItems(
-            self.availableListWidget, unicode(text))
+            self.availableListWidget, text)
         ]
         for item in self._findListWidgetItems(self.availableListWidget):
             item.setHidden(item not in search_result)

=== modified file 'openlp/plugins/songs/forms/songimportform.py'
--- openlp/plugins/songs/forms/songimportform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/forms/songimportform.py	2012-12-05 21:02:22 +0000
@@ -35,9 +35,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, SettingsManager, translate
+from openlp.core.lib import Receiver, Settings, SettingsManager, translate
 from openlp.core.lib.ui import UiStrings, critical_error_message_box
-from openlp.core.lib.settings import Settings
 from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
 from openlp.plugins.songs.lib.importer import SongFormat, SongFormatSelect
 
@@ -239,8 +238,7 @@
             return True
         elif self.currentPage() == self.sourcePage:
             format = self.currentFormat
-            Settings().setValue(u'songs/last import type',
-                format)
+            Settings().setValue(u'songs/last import type', format)
             select_mode, class_, error_msg = SongFormat.get(format,
                 u'selectMode', u'class', u'invalidSourceMsg')
             if select_mode == SongFormatSelect.MultipleFiles:
@@ -293,7 +291,7 @@
         """
         Return a list of file from the listbox
         """
-        return [unicode(listbox.item(i).text()) for i in range(listbox.count())]
+        return [listbox.item(i).text() for i in range(listbox.count())]
 
     def removeSelectedItems(self, listbox):
         """
@@ -346,7 +344,7 @@
         self.finishButton.setVisible(False)
         self.cancelButton.setVisible(True)
         last_import_type = Settings().value(
-            u'songs/last import type').toInt()[0]
+            u'songs/last import type')
         if last_import_type < 0 or \
             last_import_type >= self.formatComboBox.count():
             last_import_type = 0
@@ -379,11 +377,11 @@
         source_format = self.currentFormat
         select_mode = SongFormat.get(source_format, u'selectMode')
         if select_mode == SongFormatSelect.SingleFile:
-            importer = self.plugin.importSongs(source_format, filename=unicode(
-                self.formatWidgets[source_format][u'filepathEdit'].text()))
+            importer = self.plugin.importSongs(source_format, filename=
+                self.formatWidgets[source_format][u'filepathEdit'].text())
         elif select_mode == SongFormatSelect.SingleFolder:
-            importer = self.plugin.importSongs(source_format, folder=unicode(
-                self.formatWidgets[source_format][u'filepathEdit'].text()))
+            importer = self.plugin.importSongs(source_format, folder=
+                self.formatWidgets[source_format][u'filepathEdit'].text())
         else:
             importer = self.plugin.importSongs(source_format,
                 filenames=self.getListOfFiles(

=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py	2012-12-05 21:02:22 +0000
@@ -108,7 +108,7 @@
     def _getCurrentItemId(self, listWidget):
         item = listWidget.currentItem()
         if item:
-            item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = (item.data(QtCore.Qt.UserRole))
             return item_id
         else:
             return -1
@@ -141,7 +141,7 @@
             else:
                 author_name = QtGui.QListWidgetItem(
                     u' '.join([author.first_name, author.last_name]))
-            author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
+            author_name.setData(QtCore.Qt.UserRole, author.id)
             self.authorsListWidget.addItem(author_name)
 
     def resetTopics(self):
@@ -152,7 +152,7 @@
         topics = self.manager.get_all_objects(Topic, order_by_ref=Topic.name)
         for topic in topics:
             topic_name = QtGui.QListWidgetItem(topic.name)
-            topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
+            topic_name.setData(QtCore.Qt.UserRole, topic.id)
             self.topicsListWidget.addItem(topic_name)
 
     def resetBooks(self):
@@ -164,7 +164,7 @@
         for book in books:
             book_name = QtGui.QListWidgetItem(u'%s (%s)' % (book.name,
                 book.publisher))
-            book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id))
+            book_name.setData(QtCore.Qt.UserRole, book.id)
             self.booksListWidget.addItem(book_name)
 
     def checkAuthor(self, newAuthor, edit=False):
@@ -218,9 +218,9 @@
         self.authorform.setAutoDisplayName(True)
         if self.authorform.exec_():
             author = Author.populate(
-                first_name=unicode(self.authorform.firstNameEdit.text()),
-                last_name=unicode(self.authorform.lastNameEdit.text()),
-                display_name=unicode(self.authorform.displayEdit.text()))
+                first_name=self.authorform.firstNameEdit.text(),
+                last_name=self.authorform.lastNameEdit.text(),
+                display_name=self.authorform.displayEdit.text())
             if self.checkAuthor(author):
                 if self.manager.save_object(author):
                     self.resetAuthors()
@@ -235,7 +235,7 @@
 
     def onTopicAddButtonClicked(self):
         if self.topicform.exec_():
-            topic = Topic.populate(name=unicode(self.topicform.nameEdit.text()))
+            topic = Topic.populate(name=self.topicform.nameEdit.text())
             if self.checkTopic(topic):
                 if self.manager.save_object(topic):
                     self.resetTopics()
@@ -250,8 +250,8 @@
 
     def onBookAddButtonClicked(self):
         if self.bookform.exec_():
-            book = Book.populate(name=unicode(self.bookform.nameEdit.text()),
-                publisher=unicode(self.bookform.publisherEdit.text()))
+            book = Book.populate(name=self.bookform.nameEdit.text(),
+                publisher=self.bookform.publisherEdit.text())
             if self.checkBook(book):
                 if self.manager.save_object(book):
                     self.resetBooks()
@@ -279,9 +279,9 @@
         temp_last_name = author.last_name
         temp_display_name = author.display_name
         if self.authorform.exec_(False):
-            author.first_name = unicode(self.authorform.firstNameEdit.text())
-            author.last_name = unicode(self.authorform.lastNameEdit.text())
-            author.display_name = unicode(self.authorform.displayEdit.text())
+            author.first_name = self.authorform.firstNameEdit.text()
+            author.last_name = self.authorform.lastNameEdit.text()
+            author.display_name = self.authorform.displayEdit.text()
             if self.checkAuthor(author, True):
                 if self.manager.save_object(author):
                     self.resetAuthors()
@@ -291,10 +291,10 @@
                     critical_error_message_box(
                         message=translate('SongsPlugin.SongMaintenanceForm',
                         'Could not save your changes.'))
-            elif critical_error_message_box(message=unicode(translate(
+            elif critical_error_message_box(message=translate(
                 'SongsPlugin.SongMaintenanceForm', 'The author %s already '
                 'exists. Would you like to make songs with author %s use '
-                'the existing author %s?')) % (author.display_name,
+                'the existing author %s?') % (author.display_name,
                 temp_display_name, author.display_name),
                 parent=self, question=True) == QtGui.QMessageBox.Yes:
                 self.__mergeObjects(author, self.mergeAuthors,
@@ -319,7 +319,7 @@
         # Save the topic's name for the case that he has to be restored.
         temp_name = topic.name
         if self.topicform.exec_(False):
-            topic.name = unicode(self.topicform.nameEdit.text())
+            topic.name = self.topicform.nameEdit.text()
             if self.checkTopic(topic, True):
                 if self.manager.save_object(topic):
                     self.resetTopics()
@@ -328,9 +328,9 @@
                         message=translate('SongsPlugin.SongMaintenanceForm',
                         'Could not save your changes.'))
             elif critical_error_message_box(
-                message=unicode(translate('SongsPlugin.SongMaintenanceForm',
+                message=translate('SongsPlugin.SongMaintenanceForm',
                 'The topic %s already exists. Would you like to make songs '
-                'with topic %s use the existing topic %s?')) % (topic.name,
+                'with topic %s use the existing topic %s?') % (topic.name,
                 temp_name, topic.name),
                 parent=self, question=True) == QtGui.QMessageBox.Yes:
                 self.__mergeObjects(topic, self.mergeTopics, self.resetTopics)
@@ -356,8 +356,8 @@
         temp_name = book.name
         temp_publisher = book.publisher
         if self.bookform.exec_(False):
-            book.name = unicode(self.bookform.nameEdit.text())
-            book.publisher = unicode(self.bookform.publisherEdit.text())
+            book.name = self.bookform.nameEdit.text()
+            book.publisher = self.bookform.publisherEdit.text()
             if self.checkBook(book, True):
                 if self.manager.save_object(book):
                     self.resetBooks()
@@ -366,9 +366,9 @@
                         message=translate('SongsPlugin.SongMaintenanceForm',
                         'Could not save your changes.'))
             elif critical_error_message_box(
-                message=unicode(translate('SongsPlugin.SongMaintenanceForm',
+                message=translate('SongsPlugin.SongMaintenanceForm',
                 'The book %s already exists. Would you like to make songs '
-                'with book %s use the existing book %s?')) % (book.name,
+                'with book %s use the existing book %s?') % (book.name,
                 temp_name, book.name),
                 parent=self, question=True) == QtGui.QMessageBox.Yes:
                 self.__mergeObjects(book, self.mergeBooks, self.resetBooks)

=== modified file 'openlp/plugins/songs/lib/__init__.py'
--- openlp/plugins/songs/lib/__init__.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/__init__.py	2012-12-05 21:02:22 +0000
@@ -160,13 +160,13 @@
     Tags = [name[0].lower() for name in Names]
 
     TranslatedNames = [
-        unicode(translate('SongsPlugin.VerseType', 'Verse')),
-        unicode(translate('SongsPlugin.VerseType', 'Chorus')),
-        unicode(translate('SongsPlugin.VerseType', 'Bridge')),
-        unicode(translate('SongsPlugin.VerseType', 'Pre-Chorus')),
-        unicode(translate('SongsPlugin.VerseType', 'Intro')),
-        unicode(translate('SongsPlugin.VerseType', 'Ending')),
-        unicode(translate('SongsPlugin.VerseType', 'Other'))]
+        translate('SongsPlugin.VerseType', 'Verse'),
+        translate('SongsPlugin.VerseType', 'Chorus'),
+        translate('SongsPlugin.VerseType', 'Bridge'),
+        translate('SongsPlugin.VerseType', 'Pre-Chorus'),
+        translate('SongsPlugin.VerseType', 'Intro'),
+        translate('SongsPlugin.VerseType', 'Ending'),
+        translate('SongsPlugin.VerseType', 'Other')]
     TranslatedTags = [name[0].lower() for name in TranslatedNames]
 
     @staticmethod

=== modified file 'openlp/plugins/songs/lib/db.py'
--- openlp/plugins/songs/lib/db.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/db.py	2012-12-05 21:02:22 +0000
@@ -72,14 +72,18 @@
         self.sort_key = ()
 
     def _try_int(self, s):
-        "Convert to integer if possible."
+        """
+        Convert to integer if possible.
+        """
         try:
             return int(s)
         except:
-            return QtCore.QString(s.lower())
+            return s.lower()
 
     def _natsort_key(self, s):
-        "Used internally to get a tuple by which s is sorted."
+        """
+        Used internally to get a tuple by which s is sorted.
+        """
         return map(self._try_int, re.findall(r'(\d+|\D+)', s))
 
     # This decorator tells sqlalchemy to call this method everytime

=== modified file 'openlp/plugins/songs/lib/ewimport.py'
--- openlp/plugins/songs/lib/ewimport.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/ewimport.py	2012-12-05 21:02:22 +0000
@@ -165,8 +165,8 @@
                     if copy:
                         self.copyright += u', '
                     self.copyright += \
-                        unicode(translate('SongsPlugin.EasyWorshipSongImport',
-                            'Administered by %s')) % admin
+                        translate('SongsPlugin.EasyWorshipSongImport',
+                        'Administered by %s') % admin
                 if ccli:
                     self.ccliNumber = ccli
                 if authors:

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2012-12-05 21:02:22 +0000
@@ -37,9 +37,8 @@
 
 from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
     translate, check_item_selected, PluginStatus, create_separated_list, \
-    check_directory_exists
+    check_directory_exists, Settings
 from openlp.core.lib.ui import UiStrings, create_widget_action
-from openlp.core.lib.settings import Settings
 from openlp.core.utils import AppLocation, locale_direct_compare
 from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \
     SongImportForm, SongExportForm
@@ -62,9 +61,9 @@
             if isinstance(key, int) and isinstance(b[i], int):
                 result = cmp(key, b[i])
             elif isinstance(key, int) and not isinstance(b[i], int):
-                result = locale_direct_compare(QtCore.QString(str(key)), b[i])
+                result = locale_direct_compare(str(key), b[i])
             elif not isinstance(key, int) and isinstance(b[i], int):
-                result = locale_direct_compare(key, QtCore.QString(str(b[i])))
+                result = locale_direct_compare(key, str(b[i]))
             else:
                 result = locale_direct_compare(key, b[i])
             if result != 0:
@@ -78,9 +77,9 @@
             if isinstance(a[i], int) and isinstance(key, int):
                 result = cmp(a[i], key)
             elif isinstance(a[i], int) and not isinstance(key, int):
-                result = locale_direct_compare(QtCore.QString(str(a[i])), key)
+                result = locale_direct_compare(str(a[i]), key)
             elif not isinstance(a[i], int) and isinstance(key, int):
-                result = locale_direct_compare(a[i], QtCore.QString(str(key)))
+                result = locale_direct_compare(a[i], str(key))
             else:
                 result = locale_direct_compare(a[i], key)
             if result != 0:
@@ -172,14 +171,11 @@
 
     def configUpdated(self):
         self.searchAsYouType = Settings().value(
-            self.settingsSection + u'/search as type',
-            QtCore.QVariant(u'False')).toBool()
+            self.settingsSection + u'/search as type', False)
         self.updateServiceOnEdit = Settings().value(
-            self.settingsSection + u'/update service on edit',
-            QtCore.QVariant(u'False')).toBool()
+            self.settingsSection + u'/update service on edit', False)
         self.addSongFromService = Settings().value(
-            self.settingsSection + u'/add song from service',
-            QtCore.QVariant(u'True')).toBool()
+            self.settingsSection + u'/add song from service', True)
 
     def retranslateUi(self):
         self.searchTextLabel.setText(u'%s:' % UiStrings().Search)
@@ -209,15 +205,13 @@
             UiStrings().Themes, UiStrings().SearchThemes)
         ])
         self.searchTextEdit.setCurrentSearchType(Settings().value(
-            u'%s/last search type' % self.settingsSection,
-            QtCore.QVariant(SongSearch.Entire)).toInt()[0])
+            u'%s/last search type' % self.settingsSection, SongSearch.Entire))
         self.configUpdated()
 
     def onSearchTextButtonClicked(self):
         # Save the current search type to the configuration.
         Settings().setValue(u'%s/last search type' %
-            self.settingsSection,
-            QtCore.QVariant(self.searchTextEdit.currentSearchType()))
+            self.settingsSection, self.searchTextEdit.currentSearchType())
         # Reload the list considering the new search type.
         search_keywords = unicode(self.searchTextEdit.displayText())
         search_results = []
@@ -308,7 +302,7 @@
             song_detail = u'%s (%s)' % (song_title,
                 create_separated_list(author_list))
             song_name = QtGui.QListWidgetItem(song_detail)
-            song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
+            song_name.setData(QtCore.Qt.UserRole, song.id)
             self.listView.addItem(song_name)
             # Auto-select the item if name has been set
             if song.id == self.autoSelectId:
@@ -325,7 +319,7 @@
                     continue
                 song_detail = u'%s (%s)' % (author.display_name, song.title)
                 song_name = QtGui.QListWidgetItem(song_detail)
-                song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
+                song_name.setData(QtCore.Qt.UserRole, song.id)
                 self.listView.addItem(song_name)
 
     def displayResultsBook(self, searchresults, song_number=False):
@@ -343,7 +337,7 @@
                 song_detail = u'%s - %s (%s)' % (book.name, song.song_number,
                     song.title)
                 song_name = QtGui.QListWidgetItem(song_detail)
-                song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
+                song_name.setData(QtCore.Qt.UserRole, song.id)
                 self.listView.addItem(song_name)
 
     def onClearTextButtonClick(self):
@@ -423,7 +417,7 @@
         log.debug(u'onEditClick')
         if check_item_selected(self.listView, UiStrings().SelectEdit):
             self.editItem = self.listView.currentItem()
-            item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = self.editItem.data(QtCore.Qt.UserRole)
             self.editSongForm.loadSong(item_id, False)
             self.editSongForm.exec_()
             self.autoSelectId = -1
@@ -448,7 +442,7 @@
             Receiver.send_message(u'cursor_busy')
             self.plugin.formParent.displayProgressBar(len(items))
             for item in items:
-                item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
+                item_id = item.data(QtCore.Qt.UserRole)
                 media_files = self.plugin.manager.get_all_objects(MediaFile,
                     MediaFile.song_id == item_id)
                 for media_file in media_files:
@@ -477,7 +471,7 @@
         log.debug(u'onCloneClick')
         if check_item_selected(self.listView, UiStrings().SelectEdit):
             self.editItem = self.listView.currentItem()
-            item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0]
+            item_id = self.editItem.data(QtCore.Qt.UserRole)
             old_song = self.plugin.manager.get_object(Song, item_id)
             song_xml = self.openLyrics.song_to_xml(old_song)
             new_song = self.openLyrics.xml_to_song(song_xml)
@@ -552,12 +546,10 @@
         service_item.raw_footer.append(song.title)
         service_item.raw_footer.append(create_separated_list(author_list))
         service_item.raw_footer.append(song.copyright)
-        if Settings().value(u'general/ccli number',
-            QtCore.QVariant(u'')).toString():
-            service_item.raw_footer.append(unicode(
+        if Settings().value(u'general/ccli number', u''):
+            service_item.raw_footer.append(
                 translate('SongsPlugin.MediaItem', 'CCLI License: ') +
-                Settings().value(u'general/ccli number',
-                QtCore.QVariant(u'')).toString()))
+                Settings().value(u'general/ccli number', u''))
         service_item.audit = [
             song.title, author_list, song.copyright, unicode(song.ccli_number)
         ]

=== modified file 'openlp/plugins/songs/lib/openlyricsexport.py'
--- openlp/plugins/songs/lib/openlyricsexport.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/openlyricsexport.py	2012-12-05 21:02:22 +0000
@@ -67,9 +67,8 @@
             Receiver.send_message(u'openlp_process_events')
             if self.parent.stop_export_flag:
                 return False
-            self.parent.incrementProgressBar(unicode(translate(
-                'SongsPlugin.OpenLyricsExport', 'Exporting "%s"...')) %
-                song.title)
+            self.parent.incrementProgressBar(translate(
+            'SongsPlugin.OpenLyricsExport', 'Exporting "%s"...') % song.title)
             xml = openLyrics.song_to_xml(song)
             tree = etree.ElementTree(etree.fromstring(xml))
             filename = u'%s (%s)' % (song.title,

=== modified file 'openlp/plugins/songs/lib/powersongimport.py'
--- openlp/plugins/songs/lib/powersongimport.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/powersongimport.py	2012-12-05 21:02:22 +0000
@@ -101,10 +101,10 @@
             else:
                 self.importSource = u''
         if not self.importSource or not isinstance(self.importSource, list):
-            self.logError(unicode(translate('SongsPlugin.PowerSongImport',
-                'No songs to import.')),
-                unicode(translate('SongsPlugin.PowerSongImport',
-                'No %s files found.')) % PS_string)
+            self.logError(translate('SongsPlugin.PowerSongImport',
+                'No songs to import.'),
+                translate('SongsPlugin.PowerSongImport',
+                'No %s files found.') % PS_string)
             return
         self.importWizard.progressBar.setMaximum(len(self.importSource))
         for file in self.importSource:

=== modified file 'openlp/plugins/songs/lib/songimport.py'
--- openlp/plugins/songs/lib/songimport.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/songimport.py	2012-12-05 21:02:22 +0000
@@ -109,8 +109,7 @@
         self.verseOrderList = []
         self.verses = []
         self.verseCounts = {}
-        self.copyrightString = unicode(translate(
-            'SongsPlugin.SongImport', 'copyright'))
+        self.copyrightString = translate('SongsPlugin.SongImport', 'copyright')
 
     def logError(self, filepath, reason=SongStrings.SongIncomplete):
         """

=== modified file 'openlp/plugins/songs/lib/songstab.py'
--- openlp/plugins/songs/lib/songstab.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/songstab.py	2012-12-05 21:02:22 +0000
@@ -29,8 +29,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate
-from openlp.core.lib.settings import Settings
+from openlp.core.lib import Settings, SettingsTab, translate
+
 
 class SongsTab(SettingsTab):
     """
@@ -115,14 +115,10 @@
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        self.song_search = settings.value(
-            u'search as type', QtCore.QVariant(False)).toBool()
-        self.tool_bar = settings.value(
-            u'display songbar', QtCore.QVariant(True)).toBool()
-        self.update_edit = settings.value(
-            u'update service on edit', QtCore.QVariant(False)).toBool()
-        self.update_load = settings.value(
-            u'add song from service', QtCore.QVariant(True)).toBool()
+        self.song_search = settings.value(u'search as type', False)
+        self.tool_bar = settings.value(u'display songbar', True)
+        self.update_edit = settings.value(u'update service on edit', False)
+        self.update_load = settings.value(u'add song from service', True)
         self.searchAsTypeCheckBox.setChecked(self.song_search)
         self.toolBarActiveCheckBox.setChecked(self.tool_bar)
         self.updateOnEditCheckBox.setChecked(self.update_edit)
@@ -132,10 +128,8 @@
     def save(self):
         settings = Settings()
         settings.beginGroup(self.settingsSection)
-        settings.setValue(u'search as type', QtCore.QVariant(self.song_search))
-        settings.setValue(u'display songbar', QtCore.QVariant(self.tool_bar))
-        settings.setValue(u'update service on edit',
-            QtCore.QVariant(self.update_edit))
-        settings.setValue(u'add song from service',
-            QtCore.QVariant(self.update_load))
+        settings.setValue(u'search as type', self.song_search)
+        settings.setValue(u'display songbar', self.tool_bar)
+        settings.setValue(u'update service on edit', self.update_edit)
+        settings.setValue(u'add song from service', self.update_load)
         settings.endGroup()

=== modified file 'openlp/plugins/songs/lib/xml.py'
--- openlp/plugins/songs/lib/xml.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/lib/xml.py	2012-12-05 21:02:22 +0000
@@ -732,15 +732,15 @@
         except AttributeError:
             raise OpenLyricsError(OpenLyricsError.LyricsError,
                 '<lyrics> tag is missing.',
-                unicode(translate('OpenLP.OpenLyricsImportError',
-                '<lyrics> tag is missing.')))
+                translate('OpenLP.OpenLyricsImportError',
+                '<lyrics> tag is missing.'))
         try:
             verse_list = lyrics.verse
         except AttributeError:
             raise OpenLyricsError(OpenLyricsError.VerseError,
                 '<verse> tag is missing.',
-                unicode(translate('OpenLP.OpenLyricsImportError',
-                '<verse> tag is missing.')))
+                translate('OpenLP.OpenLyricsImportError',
+                '<verse> tag is missing.'))
         # Loop over the "verse" elements.
         for verse in verse_list:
             text = u''

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songs/songsplugin.py	2012-12-05 21:02:22 +0000
@@ -78,10 +78,9 @@
         self.songExportItem.setVisible(True)
         self.toolsReindexItem.setVisible(True)
         action_list = ActionList.get_instance()
-        action_list.add_action(self.songImportItem, unicode(UiStrings().Import))
-        action_list.add_action(self.songExportItem, unicode(UiStrings().Export))
-        action_list.add_action(self.toolsReindexItem,
-            unicode(UiStrings().Tools))
+        action_list.add_action(self.songImportItem, UiStrings().Import)
+        action_list.add_action(self.songExportItem, UiStrings().Export)
+        action_list.add_action(self.toolsReindexItem, UiStrings().Tools)
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'servicemanager_new_service'),
             self.clearTemporarySongs)
@@ -282,12 +281,9 @@
         self.songExportItem.setVisible(False)
         self.toolsReindexItem.setVisible(False)
         action_list = ActionList.get_instance()
-        action_list.remove_action(self.songImportItem,
-            unicode(UiStrings().Import))
-        action_list.remove_action(self.songExportItem,
-            unicode(UiStrings().Export))
-        action_list.remove_action(self.toolsReindexItem,
-            unicode(UiStrings().Tools))
+        action_list.remove_action(self.songImportItem, UiStrings().Import)
+        action_list.remove_action(self.songExportItem, UiStrings().Export)
+        action_list.remove_action(self.toolsReindexItem, UiStrings().Tools)
         Plugin.finalise(self)
 
     def clearTemporarySongs(self):

=== modified file 'openlp/plugins/songusage/forms/songusagedetailform.py'
--- openlp/plugins/songusage/forms/songusagedetailform.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songusage/forms/songusagedetailform.py	2012-12-05 21:02:22 +0000
@@ -33,9 +33,8 @@
 from PyQt4 import QtCore, QtGui
 from sqlalchemy.sql import and_
 
-from openlp.core.lib import SettingsManager, translate, Receiver, \
+from openlp.core.lib import Receiver, Settings, SettingsManager, translate, \
     check_directory_exists
-from openlp.core.lib.settings import Settings
 from openlp.plugins.songusage.lib.db import SongUsageItem
 from songusagedetaildialog import Ui_SongUsageDetailDialog
 
@@ -62,12 +61,10 @@
         year = QtCore.QDate().currentDate().year()
         if QtCore.QDate().currentDate().month() < 9:
             year -= 1
-        toDate = Settings().value(
-            u'songusage/to date',
-            QtCore.QVariant(QtCore.QDate(year, 8, 31))).toDate()
-        fromDate = Settings().value(
-            u'songusage/from date',
-            QtCore.QVariant(QtCore.QDate(year - 1, 9, 1))).toDate()
+        toDate = Settings().value(self.plugin.settingsSection +
+            u'/to date', QtCore.QDate(year, 8, 31))
+        fromDate = Settings().value(self.plugin.settingsSection +
+            u'/from date', QtCore.QDate(year - 1, 9, 1))
         self.fromDate.setSelectedDate(fromDate)
         self.toDate.setSelectedDate(toDate)
         self.fileLineEdit.setText(
@@ -91,25 +88,24 @@
         Ok was triggered so lets save the data and run the report
         """
         log.debug(u'accept')
-        path = unicode(self.fileLineEdit.text())
-        if path == u'':
+        path = self.fileLineEdit.text()
+        if not path:
             Receiver.send_message(u'openlp_error_message', {
                 u'title': translate('SongUsagePlugin.SongUsageDetailForm',
                 'Output Path Not Selected'),
-                u'message': unicode(translate(
+                u'message': translate(
                 'SongUsagePlugin.SongUsageDetailForm', 'You have not set a '
                 'valid output location for your song usage report. Please '
-                'select an existing path on your computer.'))})
+                'select an existing path on your computer.')})
             return
         check_directory_exists(path)
-        filename = unicode(translate('SongUsagePlugin.SongUsageDetailForm',
-            'usage_detail_%s_%s.txt')) % (
+        filename = translate('SongUsagePlugin.SongUsageDetailForm',
+            'usage_detail_%s_%s.txt') % (
             self.fromDate.selectedDate().toString(u'ddMMyyyy'),
             self.toDate.selectedDate().toString(u'ddMMyyyy'))
         Settings().setValue(u'songusage/from date',
-            QtCore.QVariant(self.fromDate.selectedDate()))
-        Settings().setValue(u'songusage/to date',
-            QtCore.QVariant(self.toDate.selectedDate()))
+            self.fromDate.selectedDate())
+        Settings().setValue(u'songusage/to date', self.toDate.selectedDate())
         usage = self.plugin.manager.get_all_objects(
             SongUsageItem, and_(
             SongUsageItem.usagedate >= self.fromDate.selectedDate().toPyDate(),
@@ -129,9 +125,9 @@
             Receiver.send_message(u'openlp_information_message', {
                 u'title': translate('SongUsagePlugin.SongUsageDetailForm',
                 'Report Creation'),
-                u'message': unicode(translate(
+                u'message': translate(
                 'SongUsagePlugin.SongUsageDetailForm', 'Report \n%s \n'
-                'has been successfully created. ')) % outname})
+                'has been successfully created. ') % outname})
         except IOError:
             log.exception(u'Failed to write out song usage records')
         finally:

=== modified file 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/songusage/songusageplugin.py	2012-12-01 07:57:54 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2012-12-05 21:02:22 +0000
@@ -32,11 +32,10 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, StringContent, Receiver, build_icon, \
-    translate
+from openlp.core.lib import build_icon, Plugin, Receiver, Settings, \
+    StringContent, translate
 from openlp.core.lib.db import Manager
 from openlp.core.lib.ui import create_action
-from openlp.core.lib.settings import Settings
 from openlp.core.utils.actions import ActionList
 from openlp.plugins.songusage.forms import SongUsageDetailForm, \
     SongUsageDeleteForm
@@ -115,8 +114,7 @@
             QtCore.SIGNAL(u'visibilityChanged(bool)'),
             self.songUsageStatus.setChecked)
         QtCore.QObject.connect(self.songUsageActiveButton,
-            QtCore.SIGNAL(u'toggled(bool)'),
-            self.toggleSongUsageState)
+            QtCore.SIGNAL(u'toggled(bool)'), self.toggleSongUsageState)
         self.songUsageMenu.menuAction().setVisible(False)
 
     def initialise(self):
@@ -129,17 +127,16 @@
             QtCore.SIGNAL(u'print_service_started'),
             self.printSongUsage)
         self.songUsageActive = Settings().value(
-            self.settingsSection + u'/active',
-            QtCore.QVariant(False)).toBool()
+            self.settingsSection + u'/active', False)
         # Set the button and checkbox state
         self.setButtonState()
         action_list = ActionList.get_instance()
         action_list.add_action(self.songUsageStatus,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         action_list.add_action(self.songUsageDelete,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         action_list.add_action(self.songUsageReport,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         self.songUsageDeleteForm = SongUsageDeleteForm(self.manager,
             self.formParent)
         self.songUsageDetailForm = SongUsageDetailForm(self, self.formParent)
@@ -156,11 +153,11 @@
         self.songUsageMenu.menuAction().setVisible(False)
         action_list = ActionList.get_instance()
         action_list.remove_action(self.songUsageStatus,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         action_list.remove_action(self.songUsageDelete,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         action_list.remove_action(self.songUsageReport,
-            unicode(translate('SongUsagePlugin', 'Song Usage')))
+            translate('SongUsagePlugin', 'Song Usage'))
         self.songUsageActiveButton.hide()
         # stop any events being processed
         self.songUsageActive = False
@@ -172,7 +169,7 @@
         """
         self.songUsageActive = not self.songUsageActive
         Settings().setValue(self.settingsSection + u'/active',
-            QtCore.QVariant(self.songUsageActive))
+            self.songUsageActive)
         self.setButtonState()
 
     def setButtonState(self):
@@ -202,15 +199,13 @@
         """
         Song Usage for which has been displayed
         """
-        self._add_song_usage(unicode(translate('SongUsagePlugin',
-            'display')), item)
+        self._add_song_usage(translate('SongUsagePlugin', 'display'), item)
 
     def printSongUsage(self, item):
         """
         Song Usage for which has been printed
         """
-        self._add_song_usage(unicode(translate('SongUsagePlugin',
-            'printed')), item)
+        self._add_song_usage(translate('SongUsagePlugin', 'printed'), item)
 
     def _add_song_usage(self, source, item):
         audit = item[0].audit