Merged with default branch to prepare the 17.06 release. maintenance release-17.06

Sat, 03 Jun 2017 13:08:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 03 Jun 2017 13:08:50 +0200
branch
maintenance
changeset 5752
1860eca908e4
parent 5731
54829a44cea5 (current diff)
parent 5751
e928ff6cbb0d (diff)
child 5753
3c4c305214fb

Merged with default branch to prepare the 17.06 release.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Graphics/UMLGraphicsView.py file | annotate | diff | comparison | revisions
Helpviewer/HelpBrowserWV.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
QScintilla/Shell.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
WebBrowser/data/html_rc.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sat May 06 13:44:26 2017 +0200
+++ b/APIs/Python3/eric6.api	Sat Jun 03 13:08:50 2017 +0200
@@ -1354,6 +1354,25 @@
 eric6.E5Gui.E5ToolBox.E5HorizontalToolBox.setItemToolTip?4(index, toolTip)
 eric6.E5Gui.E5ToolBox.E5HorizontalToolBox?1(parent=None)
 eric6.E5Gui.E5ToolBox.E5VerticalToolBox?1(parent=None)
+eric6.E5Gui.E5ToolButton.E5ToolButton.NoOptions?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.ShowMenuInsideOption?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.ToolBarLookOption?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.aboutToHideMenu?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.aboutToShowMenu?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.contextMenuEvent?4(evt)
+eric6.E5Gui.E5ToolButton.E5ToolButton.controlClicked?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.doubleClicked?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.menu?4()
+eric6.E5Gui.E5ToolButton.E5ToolButton.middleClicked?7
+eric6.E5Gui.E5ToolButton.E5ToolButton.mouseDoubleClickEvent?4(evt)
+eric6.E5Gui.E5ToolButton.E5ToolButton.mousePressEvent?4(evt)
+eric6.E5Gui.E5ToolButton.E5ToolButton.mouseReleaseEvent?4(evt)
+eric6.E5Gui.E5ToolButton.E5ToolButton.setMenu?4(menu)
+eric6.E5Gui.E5ToolButton.E5ToolButton.setShowMenuInside?4(enable)
+eric6.E5Gui.E5ToolButton.E5ToolButton.setToolbarButtonLook?4(enable)
+eric6.E5Gui.E5ToolButton.E5ToolButton.showMenuInside?4()
+eric6.E5Gui.E5ToolButton.E5ToolButton.toolbarButtonLook?4()
+eric6.E5Gui.E5ToolButton.E5ToolButton?1(parent=None)
 eric6.E5Gui.E5TreeSortFilterProxyModel.E5TreeSortFilterProxyModel.filterAcceptsRow?4(sourceRow, sourceParent)
 eric6.E5Gui.E5TreeSortFilterProxyModel.E5TreeSortFilterProxyModel.hasChildren?4(parent=None)
 eric6.E5Gui.E5TreeSortFilterProxyModel.E5TreeSortFilterProxyModel?1(parent=None)
@@ -1663,6 +1682,7 @@
 eric6.Globals.isLinuxPlatform?4()
 eric6.Globals.isMacPlatform?4()
 eric6.Globals.isWindowsPlatform?4()
+eric6.Globals.qVersionTuple?4()
 eric6.Globals.recentNameFiles?7
 eric6.Globals.recentNameHexFiles?7
 eric6.Globals.recentNameHosts?7
@@ -1678,6 +1698,7 @@
 eric6.Globals.toDict?4(value)
 eric6.Globals.toList?4(value)
 eric6.Globals.translate?4(*args)
+eric6.Globals.versionToTuple?4(version)
 eric6.Graphics.ApplicationDiagramBuilder.ApplicationDiagramBuilder.buildDiagram?4()
 eric6.Graphics.ApplicationDiagramBuilder.ApplicationDiagramBuilder.getPersistenceData?4()
 eric6.Graphics.ApplicationDiagramBuilder.ApplicationDiagramBuilder.parsePersistenceData?4(version, data)
@@ -3878,6 +3899,7 @@
 eric6.PluginManager.PluginManager.PluginManager?1(parent=None, doLoadPlugins=True, develPlugin=None)
 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDialog.getDownloadedPlugins?4()
 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDialog?1(parent=None)
+eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDownloadCleanup?4(quiet=False)
 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.AuthorRole?7
 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.DescrRole?7
 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.FilenameRole?7
@@ -7970,6 +7992,8 @@
 eric6.QScintilla.MiniEditor.MiniEditor.setLanguage?4(filename, initTextDisplay=True, pyname="")
 eric6.QScintilla.MiniEditor.MiniEditor.setSearchIndicator?4(startPos, indicLength)
 eric6.QScintilla.MiniEditor.MiniEditor.setText?4(txt, filetype=None)
+eric6.QScintilla.MiniEditor.MiniEditor.showReplaceWidget?4()
+eric6.QScintilla.MiniEditor.MiniEditor.showSearchWidget?4()
 eric6.QScintilla.MiniEditor.MiniEditor.textForFind?4()
 eric6.QScintilla.MiniEditor.MiniEditor?1(filename="", filetype="", parent=None, name=None)
 eric6.QScintilla.MiniEditor.MiniScintilla.focusInEvent?4(event)
@@ -8090,6 +8114,9 @@
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.changeEvent?4(evt)
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.findNext?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.findPrev?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.replace?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.replaceAll?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.replaceSearch?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.resizeEvent?4(evt)
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.searchListChanged?7
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceSlidingWidget.selectionChanged?4()
@@ -8107,6 +8134,9 @@
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.on_replaceAllButton_clicked?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.on_replaceButton_clicked?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.on_replaceSearchButton_clicked?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.replace?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.replaceAll?4()
+eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.replaceSearch?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.searchListChanged?7
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.selectionChanged?4()
 eric6.QScintilla.SearchReplaceWidget.SearchReplaceWidget.show?4(text='')
@@ -9512,6 +9542,8 @@
 eric6.ViewManager.ViewManager.ViewManager.shareConnected?4(connected)
 eric6.ViewManager.ViewManager.ViewManager.shareEditor?4(share)
 eric6.ViewManager.ViewManager.ViewManager.showDebugSource?4(fn, line)
+eric6.ViewManager.ViewManager.ViewManager.showReplaceWidget?4()
+eric6.ViewManager.ViewManager.ViewManager.showSearchWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.showWindowMenu?4(windowMenu)
 eric6.ViewManager.ViewManager.ViewManager.startSharedEdit?4()
 eric6.ViewManager.ViewManager.ViewManager.syntaxerrorToggled?7
@@ -10200,6 +10232,7 @@
 eric6.WebBrowser.History.HistoryMenu.HistoryMenu.postPopulated?4()
 eric6.WebBrowser.History.HistoryMenu.HistoryMenu.prePopulated?4()
 eric6.WebBrowser.History.HistoryMenu.HistoryMenu.setInitialActions?4(actions)
+eric6.WebBrowser.History.HistoryMenu.HistoryMenu.showHistoryDialog?4()
 eric6.WebBrowser.History.HistoryMenu.HistoryMenu?1(parent=None, tabWidget=None)
 eric6.WebBrowser.History.HistoryMenu.HistoryMenuModel.MOVEDROWS?7
 eric6.WebBrowser.History.HistoryMenu.HistoryMenuModel.bumpedRows?4()
@@ -10267,12 +10300,16 @@
 eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.backButton?4()
 eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.exitFullScreenButton?4()
 eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.forwardButton?4()
-eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.reloadButton?4()
+eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.reloadStopButton?4()
 eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.searchEdit?4()
-eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.stopButton?4()
+eric6.WebBrowser.Navigation.NavigationBar.NavigationBar.superMenuButton?4()
 eric6.WebBrowser.Navigation.NavigationBar.NavigationBar?1(mainWindow, parent=None)
 eric6.WebBrowser.Navigation.NavigationContainer.NavigationContainer.addWidget?4(widget)
 eric6.WebBrowser.Navigation.NavigationContainer.NavigationContainer?1(parent=None)
+eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton.reloadClicked?7
+eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton.setLoading?4(loading)
+eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton.stopClicked?7
+eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton?1(parent=None)
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler.SupportedPages?7
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler.requestStarted?4(job)
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler?1(parent=None)
@@ -11038,6 +11075,7 @@
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.browsers?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.closeEvent?4(e)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.cookieJar?4()
+eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.createPopupMenu?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.currentBrowser?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.downloadManager?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.downloadRequested?4(download)
@@ -11153,7 +11191,6 @@
 eric6.eric6_api.main?4()
 eric6.eric6_api.usage?4()
 eric6.eric6_api.version?4()
-eric6.eric6_browser.MIN_QT_VERSION?7
 eric6.eric6_browser.SettingsDir?7
 eric6.eric6_browser.createMainWidget?4(argv)
 eric6.eric6_browser.main?4()
--- a/APIs/Python3/eric6.bas	Sat May 06 13:44:26 2017 +0200
+++ b/APIs/Python3/eric6.bas	Sat Jun 03 13:08:50 2017 +0200
@@ -206,6 +206,7 @@
 E5TldExtractor QObject
 E5ToolBarDialog QDialog Ui_E5ToolBarDialog
 E5ToolBarManager QObject
+E5ToolButton QToolButton
 E5TreeSortFilterProxyModel QSortFilterProxyModel
 E5TreeView QTreeView
 E5TreeWidget QTreeWidget
@@ -676,6 +677,7 @@
 RebaseProjectHelper HgExtensionProjectHelper
 RecursionError OverflowError ValueError
 Redirector QObject
+ReloadStopButton E5ToolButton
 RemoveBookmarksCommand QUndoCommand
 RestructuredTextProvider MarkupBase
 SafariImporter BookmarksImporter
--- a/DataViews/CodeMetricsDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/DataViews/CodeMetricsDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,7 +12,7 @@
 import os
 import fnmatch
 
-from PyQt5.QtCore import pyqtSlot, Qt, QLocale, qVersion
+from PyQt5.QtCore import pyqtSlot, Qt, QLocale
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMenu, QHeaderView, \
     QTreeWidgetItem, QApplication
 
@@ -20,6 +20,7 @@
 from . import CodeMetrics
 
 import Utilities
+from Globals import qVersionTuple
 
 
 class CodeMetricsDialog(QDialog, Ui_CodeMetricsDialog):
@@ -235,7 +236,7 @@
         self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
         self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.resultList.header().setSectionResizeMode(
                 QHeaderView.Interactive)
             self.summaryList.header().setSectionResizeMode(
--- a/Debugger/BreakPointViewer.py	Sat May 06 13:44:26 2017 +0200
+++ b/Debugger/BreakPointViewer.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,13 +9,15 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, qVersion, QItemSelectionModel, \
+from PyQt5.QtCore import pyqtSignal, Qt, QItemSelectionModel, \
     QSortFilterProxyModel
 from PyQt5.QtWidgets import QTreeView, QAbstractItemView, QHeaderView, QMenu, \
     QDialog
 
 from E5Gui.E5Application import e5App
 
+from Globals import qVersionTuple
+
 
 class BreakPointViewer(QTreeView):
     """
@@ -73,7 +75,7 @@
         header = self.header()
         header.setSortIndicator(0, Qt.AscendingOrder)
         header.setSortIndicatorShown(True)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionsClickable(True)
         else:
             header.setClickable(True)
--- a/Debugger/VariablesViewer.py	Sat May 06 13:44:26 2017 +0200
+++ b/Debugger/VariablesViewer.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,7 +13,7 @@
 except NameError:
     pass
 
-from PyQt5.QtCore import Qt, QRegExp, qVersion, QCoreApplication
+from PyQt5.QtCore import Qt, QRegExp, QCoreApplication
 from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView, \
     QMenu
 
@@ -23,6 +23,7 @@
 
 import Preferences
 import Utilities
+from Globals import qVersionTuple
 
 
 class VariableItem(QTreeWidgetItem):
@@ -378,7 +379,7 @@
         header = self.header()
         header.setSortIndicator(0, Qt.AscendingOrder)
         header.setSortIndicatorShown(True)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionsClickable(True)
         else:
             header.setClickable(True)
--- a/Debugger/WatchPointViewer.py	Sat May 06 13:44:26 2017 +0200
+++ b/Debugger/WatchPointViewer.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QModelIndex, qVersion, QItemSelectionModel, \
+from PyQt5.QtCore import Qt, QModelIndex, QItemSelectionModel, \
     QSortFilterProxyModel
 from PyQt5.QtWidgets import QTreeView, QAbstractItemView, QMenu, QHeaderView, \
     QDialog
@@ -18,6 +18,7 @@
 from E5Gui import E5MessageBox
 
 import Utilities
+from Globals import qVersionTuple
 
 
 class WatchPointViewer(QTreeView):
@@ -68,7 +69,7 @@
         header = self.header()
         header.setSortIndicator(0, Qt.AscendingOrder)
         header.setSortIndicatorShown(True)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionsClickable(True)
         else:
             header.setClickable(True)
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Help/source.qhp	Sat Jun 03 13:08:50 2017 +0200
@@ -117,6 +117,7 @@
             <section title="eric6.E5Gui.E5ToolBarDialog" ref="eric6.E5Gui.E5ToolBarDialog.html" />
             <section title="eric6.E5Gui.E5ToolBarManager" ref="eric6.E5Gui.E5ToolBarManager.html" />
             <section title="eric6.E5Gui.E5ToolBox" ref="eric6.E5Gui.E5ToolBox.html" />
+            <section title="eric6.E5Gui.E5ToolButton" ref="eric6.E5Gui.E5ToolButton.html" />
             <section title="eric6.E5Gui.E5TreeSortFilterProxyModel" ref="eric6.E5Gui.E5TreeSortFilterProxyModel.html" />
             <section title="eric6.E5Gui.E5TreeView" ref="eric6.E5Gui.E5TreeView.html" />
             <section title="eric6.E5Gui.E5TreeWidget" ref="eric6.E5Gui.E5TreeWidget.html" />
@@ -1176,6 +1177,7 @@
             <section title="eric6.WebBrowser.Navigation" ref="index-eric6.WebBrowser.Navigation.html">
               <section title="eric6.WebBrowser.Navigation.NavigationBar" ref="eric6.WebBrowser.Navigation.NavigationBar.html" />
               <section title="eric6.WebBrowser.Navigation.NavigationContainer" ref="eric6.WebBrowser.Navigation.NavigationContainer.html" />
+              <section title="eric6.WebBrowser.Navigation.ReloadStopButton" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html" />
             </section>
             <section title="eric6.WebBrowser.Network" ref="index-eric6.WebBrowser.Network.html">
               <section title="eric6.WebBrowser.Network.EricSchemeHandler" ref="eric6.WebBrowser.Network.EricSchemeHandler.html" />
@@ -3878,6 +3880,7 @@
       <keyword name="DocStyleChecker.__checkEricNoBlankBeforeAndAfterClassOrFunction" id="DocStyleChecker.__checkEricNoBlankBeforeAndAfterClassOrFunction" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkEricNoBlankBeforeAndAfterClassOrFunction" />
       <keyword name="DocStyleChecker.__checkEricQuotesOnSeparateLines" id="DocStyleChecker.__checkEricQuotesOnSeparateLines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkEricQuotesOnSeparateLines" />
       <keyword name="DocStyleChecker.__checkEricReturn" id="DocStyleChecker.__checkEricReturn" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkEricReturn" />
+      <keyword name="DocStyleChecker.__checkEricSignal" id="DocStyleChecker.__checkEricSignal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkEricSignal" />
       <keyword name="DocStyleChecker.__checkEricSummary" id="DocStyleChecker.__checkEricSummary" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkEricSummary" />
       <keyword name="DocStyleChecker.__checkFunctionDocstring" id="DocStyleChecker.__checkFunctionDocstring" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkFunctionDocstring" />
       <keyword name="DocStyleChecker.__checkImperativeMood" id="DocStyleChecker.__checkImperativeMood" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleChecker.__checkImperativeMood" />
@@ -4747,6 +4750,21 @@
       <keyword name="E5ToolBarManager.toolBars" id="E5ToolBarManager.toolBars" ref="eric6.E5Gui.E5ToolBarManager.html#E5ToolBarManager.toolBars" />
       <keyword name="E5ToolBarManager.toolBarsActions" id="E5ToolBarManager.toolBarsActions" ref="eric6.E5Gui.E5ToolBarManager.html#E5ToolBarManager.toolBarsActions" />
       <keyword name="E5ToolBox (Module)" id="E5ToolBox (Module)" ref="eric6.E5Gui.E5ToolBox.html" />
+      <keyword name="E5ToolButton" id="E5ToolButton" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton" />
+      <keyword name="E5ToolButton (Constructor)" id="E5ToolButton (Constructor)" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.__init__" />
+      <keyword name="E5ToolButton (Module)" id="E5ToolButton (Module)" ref="eric6.E5Gui.E5ToolButton.html" />
+      <keyword name="E5ToolButton.__menuAboutToHide" id="E5ToolButton.__menuAboutToHide" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.__menuAboutToHide" />
+      <keyword name="E5ToolButton.__showMenu" id="E5ToolButton.__showMenu" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.__showMenu" />
+      <keyword name="E5ToolButton.contextMenuEvent" id="E5ToolButton.contextMenuEvent" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.contextMenuEvent" />
+      <keyword name="E5ToolButton.menu" id="E5ToolButton.menu" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.menu" />
+      <keyword name="E5ToolButton.mouseDoubleClickEvent" id="E5ToolButton.mouseDoubleClickEvent" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.mouseDoubleClickEvent" />
+      <keyword name="E5ToolButton.mousePressEvent" id="E5ToolButton.mousePressEvent" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.mousePressEvent" />
+      <keyword name="E5ToolButton.mouseReleaseEvent" id="E5ToolButton.mouseReleaseEvent" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.mouseReleaseEvent" />
+      <keyword name="E5ToolButton.setMenu" id="E5ToolButton.setMenu" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.setMenu" />
+      <keyword name="E5ToolButton.setShowMenuInside" id="E5ToolButton.setShowMenuInside" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.setShowMenuInside" />
+      <keyword name="E5ToolButton.setToolbarButtonLook" id="E5ToolButton.setToolbarButtonLook" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.setToolbarButtonLook" />
+      <keyword name="E5ToolButton.showMenuInside" id="E5ToolButton.showMenuInside" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.showMenuInside" />
+      <keyword name="E5ToolButton.toolbarButtonLook" id="E5ToolButton.toolbarButtonLook" ref="eric6.E5Gui.E5ToolButton.html#E5ToolButton.toolbarButtonLook" />
       <keyword name="E5TreeSortFilterProxyModel" id="E5TreeSortFilterProxyModel" ref="eric6.E5Gui.E5TreeSortFilterProxyModel.html#E5TreeSortFilterProxyModel" />
       <keyword name="E5TreeSortFilterProxyModel (Constructor)" id="E5TreeSortFilterProxyModel (Constructor)" ref="eric6.E5Gui.E5TreeSortFilterProxyModel.html#E5TreeSortFilterProxyModel.__init__" />
       <keyword name="E5TreeSortFilterProxyModel (Module)" id="E5TreeSortFilterProxyModel (Module)" ref="eric6.E5Gui.E5TreeSortFilterProxyModel.html" />
@@ -4980,6 +4998,7 @@
       <keyword name="Editor.__setAutoCompletion" id="Editor.__setAutoCompletion" ref="eric6.QScintilla.Editor.html#Editor.__setAutoCompletion" />
       <keyword name="Editor.__setCallTips" id="Editor.__setCallTips" ref="eric6.QScintilla.Editor.html#Editor.__setCallTips" />
       <keyword name="Editor.__setEolMode" id="Editor.__setEolMode" ref="eric6.QScintilla.Editor.html#Editor.__setEolMode" />
+      <keyword name="Editor.__setLineMarkerColours" id="Editor.__setLineMarkerColours" ref="eric6.QScintilla.Editor.html#Editor.__setLineMarkerColours" />
       <keyword name="Editor.__setMarginsDisplay" id="Editor.__setMarginsDisplay" ref="eric6.QScintilla.Editor.html#Editor.__setMarginsDisplay" />
       <keyword name="Editor.__setSpelling" id="Editor.__setSpelling" ref="eric6.QScintilla.Editor.html#Editor.__setSpelling" />
       <keyword name="Editor.__setSpellingLanguage" id="Editor.__setSpellingLanguage" ref="eric6.QScintilla.Editor.html#Editor.__setSpellingLanguage" />
@@ -6720,6 +6739,8 @@
       <keyword name="HelpWindow.__closeAllWindows" id="HelpWindow.__closeAllWindows" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__closeAllWindows" />
       <keyword name="HelpWindow.__closeNetworkMonitor" id="HelpWindow.__closeNetworkMonitor" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__closeNetworkMonitor" />
       <keyword name="HelpWindow.__copy" id="HelpWindow.__copy" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__copy" />
+      <keyword name="HelpWindow.__createTextEncodingAction" id="HelpWindow.__createTextEncodingAction" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__createTextEncodingAction" />
+      <keyword name="HelpWindow.__createTextEncodingSubmenu" id="HelpWindow.__createTextEncodingSubmenu" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__createTextEncodingSubmenu" />
       <keyword name="HelpWindow.__currentChanged" id="HelpWindow.__currentChanged" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__currentChanged" />
       <keyword name="HelpWindow.__del__" id="HelpWindow.__del__" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__del__" />
       <keyword name="HelpWindow.__docsInstalled" id="HelpWindow.__docsInstalled" ref="eric6.Helpviewer.HelpWindow.html#HelpWindow.__docsInstalled" />
@@ -8401,13 +8422,13 @@
       <keyword name="HistoryMenu.__closedTabAvailable" id="HistoryMenu.__closedTabAvailable" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenu.__closedTabAvailable" />
       <keyword name="HistoryMenu.__closedTabAvailable" id="HistoryMenu.__closedTabAvailable" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.__closedTabAvailable" />
       <keyword name="HistoryMenu.__showHistoryDialog" id="HistoryMenu.__showHistoryDialog" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenu.__showHistoryDialog" />
-      <keyword name="HistoryMenu.__showHistoryDialog" id="HistoryMenu.__showHistoryDialog" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.__showHistoryDialog" />
       <keyword name="HistoryMenu.postPopulated" id="HistoryMenu.postPopulated" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenu.postPopulated" />
       <keyword name="HistoryMenu.postPopulated" id="HistoryMenu.postPopulated" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.postPopulated" />
       <keyword name="HistoryMenu.prePopulated" id="HistoryMenu.prePopulated" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenu.prePopulated" />
       <keyword name="HistoryMenu.prePopulated" id="HistoryMenu.prePopulated" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.prePopulated" />
       <keyword name="HistoryMenu.setInitialActions" id="HistoryMenu.setInitialActions" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenu.setInitialActions" />
       <keyword name="HistoryMenu.setInitialActions" id="HistoryMenu.setInitialActions" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.setInitialActions" />
+      <keyword name="HistoryMenu.showHistoryDialog" id="HistoryMenu.showHistoryDialog" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenu.showHistoryDialog" />
       <keyword name="HistoryMenuModel" id="HistoryMenuModel" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenuModel" />
       <keyword name="HistoryMenuModel" id="HistoryMenuModel" ref="eric6.WebBrowser.History.HistoryMenu.html#HistoryMenuModel" />
       <keyword name="HistoryMenuModel (Constructor)" id="HistoryMenuModel (Constructor)" ref="eric6.Helpviewer.History.HistoryMenu.html#HistoryMenuModel.__init__" />
@@ -9733,15 +9754,15 @@
       <keyword name="MiniEditor.__readSettings" id="MiniEditor.__readSettings" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__readSettings" />
       <keyword name="MiniEditor.__readShortcut" id="MiniEditor.__readShortcut" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__readShortcut" />
       <keyword name="MiniEditor.__redo" id="MiniEditor.__redo" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__redo" />
-      <keyword name="MiniEditor.__replace" id="MiniEditor.__replace" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__replace" />
       <keyword name="MiniEditor.__resetLanguage" id="MiniEditor.__resetLanguage" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__resetLanguage" />
       <keyword name="MiniEditor.__resizeLinenoMargin" id="MiniEditor.__resizeLinenoMargin" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__resizeLinenoMargin" />
       <keyword name="MiniEditor.__save" id="MiniEditor.__save" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__save" />
       <keyword name="MiniEditor.__saveAs" id="MiniEditor.__saveAs" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__saveAs" />
       <keyword name="MiniEditor.__saveCopy" id="MiniEditor.__saveCopy" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__saveCopy" />
       <keyword name="MiniEditor.__saveFile" id="MiniEditor.__saveFile" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__saveFile" />
-      <keyword name="MiniEditor.__search" id="MiniEditor.__search" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__search" />
       <keyword name="MiniEditor.__searchClearMarkers" id="MiniEditor.__searchClearMarkers" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__searchClearMarkers" />
+      <keyword name="MiniEditor.__searchNext" id="MiniEditor.__searchNext" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__searchNext" />
+      <keyword name="MiniEditor.__searchPrev" id="MiniEditor.__searchPrev" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__searchPrev" />
       <keyword name="MiniEditor.__selectAll" id="MiniEditor.__selectAll" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__selectAll" />
       <keyword name="MiniEditor.__selectPygmentsLexer" id="MiniEditor.__selectPygmentsLexer" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__selectPygmentsLexer" />
       <keyword name="MiniEditor.__setCurrentFile" id="MiniEditor.__setCurrentFile" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.__setCurrentFile" />
@@ -9765,6 +9786,8 @@
       <keyword name="MiniEditor.setLanguage" id="MiniEditor.setLanguage" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setLanguage" />
       <keyword name="MiniEditor.setSearchIndicator" id="MiniEditor.setSearchIndicator" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setSearchIndicator" />
       <keyword name="MiniEditor.setText" id="MiniEditor.setText" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setText" />
+      <keyword name="MiniEditor.showReplaceWidget" id="MiniEditor.showReplaceWidget" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.showReplaceWidget" />
+      <keyword name="MiniEditor.showSearchWidget" id="MiniEditor.showSearchWidget" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.showSearchWidget" />
       <keyword name="MiniEditor.textForFind" id="MiniEditor.textForFind" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.textForFind" />
       <keyword name="MiniScintilla" id="MiniScintilla" ref="eric6.QScintilla.MiniEditor.html#MiniScintilla" />
       <keyword name="MiniScintilla (Constructor)" id="MiniScintilla (Constructor)" ref="eric6.QScintilla.MiniEditor.html#MiniScintilla.__init__" />
@@ -9981,9 +10004,13 @@
       <keyword name="NavigationBar (Constructor)" id="NavigationBar (Constructor)" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__init__" />
       <keyword name="NavigationBar (Module)" id="NavigationBar (Module)" ref="eric6.WebBrowser.Navigation.NavigationBar.html" />
       <keyword name="NavigationBar.__clearHistory" id="NavigationBar.__clearHistory" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__clearHistory" />
+      <keyword name="NavigationBar.__contextMenuRequested" id="NavigationBar.__contextMenuRequested" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__contextMenuRequested" />
       <keyword name="NavigationBar.__goBack" id="NavigationBar.__goBack" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goBack" />
+      <keyword name="NavigationBar.__goBackInNewTab" id="NavigationBar.__goBackInNewTab" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goBackInNewTab" />
       <keyword name="NavigationBar.__goForward" id="NavigationBar.__goForward" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goForward" />
+      <keyword name="NavigationBar.__goForwardInNewTab" id="NavigationBar.__goForwardInNewTab" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goForwardInNewTab" />
       <keyword name="NavigationBar.__goHome" id="NavigationBar.__goHome" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goHome" />
+      <keyword name="NavigationBar.__goHomeInNewTab" id="NavigationBar.__goHomeInNewTab" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__goHomeInNewTab" />
       <keyword name="NavigationBar.__navigationMenuActionTriggered" id="NavigationBar.__navigationMenuActionTriggered" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__navigationMenuActionTriggered" />
       <keyword name="NavigationBar.__reload" id="NavigationBar.__reload" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__reload" />
       <keyword name="NavigationBar.__showBackMenu" id="NavigationBar.__showBackMenu" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__showBackMenu" />
@@ -9992,9 +10019,9 @@
       <keyword name="NavigationBar.backButton" id="NavigationBar.backButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.backButton" />
       <keyword name="NavigationBar.exitFullScreenButton" id="NavigationBar.exitFullScreenButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.exitFullScreenButton" />
       <keyword name="NavigationBar.forwardButton" id="NavigationBar.forwardButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.forwardButton" />
-      <keyword name="NavigationBar.reloadButton" id="NavigationBar.reloadButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.reloadButton" />
+      <keyword name="NavigationBar.reloadStopButton" id="NavigationBar.reloadStopButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.reloadStopButton" />
       <keyword name="NavigationBar.searchEdit" id="NavigationBar.searchEdit" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.searchEdit" />
-      <keyword name="NavigationBar.stopButton" id="NavigationBar.stopButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.stopButton" />
+      <keyword name="NavigationBar.superMenuButton" id="NavigationBar.superMenuButton" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.superMenuButton" />
       <keyword name="NavigationContainer" id="NavigationContainer" ref="eric6.WebBrowser.Navigation.NavigationContainer.html#NavigationContainer" />
       <keyword name="NavigationContainer (Constructor)" id="NavigationContainer (Constructor)" ref="eric6.WebBrowser.Navigation.NavigationContainer.html#NavigationContainer.__init__" />
       <keyword name="NavigationContainer (Module)" id="NavigationContainer (Module)" ref="eric6.WebBrowser.Navigation.NavigationContainer.html" />
@@ -10844,6 +10871,7 @@
       <keyword name="PluginRepositoryDialog (Module)" id="PluginRepositoryDialog (Module)" ref="eric6.PluginManager.PluginRepositoryDialog.html" />
       <keyword name="PluginRepositoryDialog.__closeAndInstall" id="PluginRepositoryDialog.__closeAndInstall" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryDialog.__closeAndInstall" />
       <keyword name="PluginRepositoryDialog.getDownloadedPlugins" id="PluginRepositoryDialog.getDownloadedPlugins" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryDialog.getDownloadedPlugins" />
+      <keyword name="PluginRepositoryDownloadCleanup" id="PluginRepositoryDownloadCleanup" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryDownloadCleanup" />
       <keyword name="PluginRepositoryReader" id="PluginRepositoryReader" ref="eric6.E5XML.PluginRepositoryReader.html#PluginRepositoryReader" />
       <keyword name="PluginRepositoryReader (Constructor)" id="PluginRepositoryReader (Constructor)" ref="eric6.E5XML.PluginRepositoryReader.html#PluginRepositoryReader.__init__" />
       <keyword name="PluginRepositoryReader (Module)" id="PluginRepositoryReader (Module)" ref="eric6.E5XML.PluginRepositoryReader.html" />
@@ -12184,6 +12212,12 @@
       <keyword name="Reindenter.fixedLine" id="Reindenter.fixedLine" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html#Reindenter.fixedLine" />
       <keyword name="Reindenter.getline" id="Reindenter.getline" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html#Reindenter.getline" />
       <keyword name="Reindenter.run" id="Reindenter.run" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html#Reindenter.run" />
+      <keyword name="ReloadStopButton" id="ReloadStopButton" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html#ReloadStopButton" />
+      <keyword name="ReloadStopButton (Constructor)" id="ReloadStopButton (Constructor)" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html#ReloadStopButton.__init__" />
+      <keyword name="ReloadStopButton (Module)" id="ReloadStopButton (Module)" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html" />
+      <keyword name="ReloadStopButton.__buttonClicked" id="ReloadStopButton.__buttonClicked" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html#ReloadStopButton.__buttonClicked" />
+      <keyword name="ReloadStopButton.__updateButton" id="ReloadStopButton.__updateButton" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html#ReloadStopButton.__updateButton" />
+      <keyword name="ReloadStopButton.setLoading" id="ReloadStopButton.setLoading" ref="eric6.WebBrowser.Navigation.ReloadStopButton.html#ReloadStopButton.setLoading" />
       <keyword name="RemoveBookmarksCommand" id="RemoveBookmarksCommand" ref="eric6.Helpviewer.Bookmarks.BookmarksManager.html#RemoveBookmarksCommand" />
       <keyword name="RemoveBookmarksCommand" id="RemoveBookmarksCommand" ref="eric6.WebBrowser.Bookmarks.BookmarksManager.html#RemoveBookmarksCommand" />
       <keyword name="RemoveBookmarksCommand (Constructor)" id="RemoveBookmarksCommand (Constructor)" ref="eric6.Helpviewer.Bookmarks.BookmarksManager.html#RemoveBookmarksCommand.__init__" />
@@ -12249,6 +12283,9 @@
       <keyword name="SearchReplaceSlidingWidget.changeEvent" id="SearchReplaceSlidingWidget.changeEvent" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.changeEvent" />
       <keyword name="SearchReplaceSlidingWidget.findNext" id="SearchReplaceSlidingWidget.findNext" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.findNext" />
       <keyword name="SearchReplaceSlidingWidget.findPrev" id="SearchReplaceSlidingWidget.findPrev" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.findPrev" />
+      <keyword name="SearchReplaceSlidingWidget.replace" id="SearchReplaceSlidingWidget.replace" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.replace" />
+      <keyword name="SearchReplaceSlidingWidget.replaceAll" id="SearchReplaceSlidingWidget.replaceAll" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.replaceAll" />
+      <keyword name="SearchReplaceSlidingWidget.replaceSearch" id="SearchReplaceSlidingWidget.replaceSearch" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.replaceSearch" />
       <keyword name="SearchReplaceSlidingWidget.resizeEvent" id="SearchReplaceSlidingWidget.resizeEvent" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.resizeEvent" />
       <keyword name="SearchReplaceSlidingWidget.selectionChanged" id="SearchReplaceSlidingWidget.selectionChanged" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.selectionChanged" />
       <keyword name="SearchReplaceSlidingWidget.show" id="SearchReplaceSlidingWidget.show" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceSlidingWidget.show" />
@@ -12261,6 +12298,12 @@
       <keyword name="SearchReplaceWidget.__findNextPrev" id="SearchReplaceWidget.__findNextPrev" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__findNextPrev" />
       <keyword name="SearchReplaceWidget.__markOccurrences" id="SearchReplaceWidget.__markOccurrences" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__markOccurrences" />
       <keyword name="SearchReplaceWidget.__selectionBoundary" id="SearchReplaceWidget.__selectionBoundary" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__selectionBoundary" />
+      <keyword name="SearchReplaceWidget.__setFindNextEnabled" id="SearchReplaceWidget.__setFindNextEnabled" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setFindNextEnabled" />
+      <keyword name="SearchReplaceWidget.__setFindPrevEnabled" id="SearchReplaceWidget.__setFindPrevEnabled" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setFindPrevEnabled" />
+      <keyword name="SearchReplaceWidget.__setReplaceAllEnabled" id="SearchReplaceWidget.__setReplaceAllEnabled" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setReplaceAllEnabled" />
+      <keyword name="SearchReplaceWidget.__setReplaceAndSearchEnabled" id="SearchReplaceWidget.__setReplaceAndSearchEnabled" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setReplaceAndSearchEnabled" />
+      <keyword name="SearchReplaceWidget.__setReplaceSelectionEnabled" id="SearchReplaceWidget.__setReplaceSelectionEnabled" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setReplaceSelectionEnabled" />
+      <keyword name="SearchReplaceWidget.__setShortcuts" id="SearchReplaceWidget.__setShortcuts" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__setShortcuts" />
       <keyword name="SearchReplaceWidget.__showFind" id="SearchReplaceWidget.__showFind" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__showFind" />
       <keyword name="SearchReplaceWidget.__showReplace" id="SearchReplaceWidget.__showReplace" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__showReplace" />
       <keyword name="SearchReplaceWidget.changeEvent" id="SearchReplaceWidget.changeEvent" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.changeEvent" />
@@ -12274,6 +12317,9 @@
       <keyword name="SearchReplaceWidget.on_replaceAllButton_clicked" id="SearchReplaceWidget.on_replaceAllButton_clicked" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.on_replaceAllButton_clicked" />
       <keyword name="SearchReplaceWidget.on_replaceButton_clicked" id="SearchReplaceWidget.on_replaceButton_clicked" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.on_replaceButton_clicked" />
       <keyword name="SearchReplaceWidget.on_replaceSearchButton_clicked" id="SearchReplaceWidget.on_replaceSearchButton_clicked" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.on_replaceSearchButton_clicked" />
+      <keyword name="SearchReplaceWidget.replace" id="SearchReplaceWidget.replace" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.replace" />
+      <keyword name="SearchReplaceWidget.replaceAll" id="SearchReplaceWidget.replaceAll" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.replaceAll" />
+      <keyword name="SearchReplaceWidget.replaceSearch" id="SearchReplaceWidget.replaceSearch" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.replaceSearch" />
       <keyword name="SearchReplaceWidget.selectionChanged" id="SearchReplaceWidget.selectionChanged" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.selectionChanged" />
       <keyword name="SearchReplaceWidget.show" id="SearchReplaceWidget.show" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.show" />
       <keyword name="SearchReplaceWidget.updateSelectionCheckBox" id="SearchReplaceWidget.updateSelectionCheckBox" ref="eric6.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.updateSelectionCheckBox" />
@@ -15367,14 +15413,14 @@
       <keyword name="ViewManager.__quickSearchPrev" id="ViewManager.__quickSearchPrev" ref="eric6.ViewManager.ViewManager.html#ViewManager.__quickSearchPrev" />
       <keyword name="ViewManager.__quickSearchSetEditColors" id="ViewManager.__quickSearchSetEditColors" ref="eric6.ViewManager.ViewManager.html#ViewManager.__quickSearchSetEditColors" />
       <keyword name="ViewManager.__quickSearchText" id="ViewManager.__quickSearchText" ref="eric6.ViewManager.ViewManager.html#ViewManager.__quickSearchText" />
-      <keyword name="ViewManager.__replace" id="ViewManager.__replace" ref="eric6.ViewManager.ViewManager.html#ViewManager.__replace" />
       <keyword name="ViewManager.__replaceFiles" id="ViewManager.__replaceFiles" ref="eric6.ViewManager.ViewManager.html#ViewManager.__replaceFiles" />
       <keyword name="ViewManager.__replaceOpenFiles" id="ViewManager.__replaceOpenFiles" ref="eric6.ViewManager.ViewManager.html#ViewManager.__replaceOpenFiles" />
       <keyword name="ViewManager.__saveRecent" id="ViewManager.__saveRecent" ref="eric6.ViewManager.ViewManager.html#ViewManager.__saveRecent" />
-      <keyword name="ViewManager.__search" id="ViewManager.__search" ref="eric6.ViewManager.ViewManager.html#ViewManager.__search" />
       <keyword name="ViewManager.__searchClearMarkers" id="ViewManager.__searchClearMarkers" ref="eric6.ViewManager.ViewManager.html#ViewManager.__searchClearMarkers" />
       <keyword name="ViewManager.__searchFiles" id="ViewManager.__searchFiles" ref="eric6.ViewManager.ViewManager.html#ViewManager.__searchFiles" />
+      <keyword name="ViewManager.__searchNext" id="ViewManager.__searchNext" ref="eric6.ViewManager.ViewManager.html#ViewManager.__searchNext" />
       <keyword name="ViewManager.__searchOpenFiles" id="ViewManager.__searchOpenFiles" ref="eric6.ViewManager.ViewManager.html#ViewManager.__searchOpenFiles" />
+      <keyword name="ViewManager.__searchPrev" id="ViewManager.__searchPrev" ref="eric6.ViewManager.ViewManager.html#ViewManager.__searchPrev" />
       <keyword name="ViewManager.__setAutoSpellChecking" id="ViewManager.__setAutoSpellChecking" ref="eric6.ViewManager.ViewManager.html#ViewManager.__setAutoSpellChecking" />
       <keyword name="ViewManager.__setSbFile" id="ViewManager.__setSbFile" ref="eric6.ViewManager.ViewManager.html#ViewManager.__setSbFile" />
       <keyword name="ViewManager.__shortenEmptyLines" id="ViewManager.__shortenEmptyLines" ref="eric6.ViewManager.ViewManager.html#ViewManager.__shortenEmptyLines" />
@@ -15503,6 +15549,8 @@
       <keyword name="ViewManager.shareConnected" id="ViewManager.shareConnected" ref="eric6.ViewManager.ViewManager.html#ViewManager.shareConnected" />
       <keyword name="ViewManager.shareEditor" id="ViewManager.shareEditor" ref="eric6.ViewManager.ViewManager.html#ViewManager.shareEditor" />
       <keyword name="ViewManager.showDebugSource" id="ViewManager.showDebugSource" ref="eric6.ViewManager.ViewManager.html#ViewManager.showDebugSource" />
+      <keyword name="ViewManager.showReplaceWidget" id="ViewManager.showReplaceWidget" ref="eric6.ViewManager.ViewManager.html#ViewManager.showReplaceWidget" />
+      <keyword name="ViewManager.showSearchWidget" id="ViewManager.showSearchWidget" ref="eric6.ViewManager.ViewManager.html#ViewManager.showSearchWidget" />
       <keyword name="ViewManager.showWindowMenu" id="ViewManager.showWindowMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.showWindowMenu" />
       <keyword name="ViewManager.startSharedEdit" id="ViewManager.startSharedEdit" ref="eric6.ViewManager.ViewManager.html#ViewManager.startSharedEdit" />
       <keyword name="ViewManager.textForFind" id="ViewManager.textForFind" ref="eric6.ViewManager.ViewManager.html#ViewManager.textForFind" />
@@ -15938,6 +15986,7 @@
       <keyword name="WebBrowserWindow" id="WebBrowserWindow" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow" />
       <keyword name="WebBrowserWindow (Constructor)" id="WebBrowserWindow (Constructor)" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__init__" />
       <keyword name="WebBrowserWindow (Module)" id="WebBrowserWindow (Module)" ref="eric6.WebBrowser.WebBrowserWindow.html" />
+      <keyword name="WebBrowserWindow.__TBMenuTriggered" id="WebBrowserWindow.__TBMenuTriggered" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__TBMenuTriggered" />
       <keyword name="WebBrowserWindow.__about" id="WebBrowserWindow.__about" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__about" />
       <keyword name="WebBrowserWindow.__aboutQt" id="WebBrowserWindow.__aboutQt" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__aboutQt" />
       <keyword name="WebBrowserWindow.__aboutToShowSettingsMenu" id="WebBrowserWindow.__aboutToShowSettingsMenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__aboutToShowSettingsMenu" />
@@ -15954,6 +16003,8 @@
       <keyword name="WebBrowserWindow.__clearPrivateData" id="WebBrowserWindow.__clearPrivateData" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__clearPrivateData" />
       <keyword name="WebBrowserWindow.__closeAllWindows" id="WebBrowserWindow.__closeAllWindows" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__closeAllWindows" />
       <keyword name="WebBrowserWindow.__copy" id="WebBrowserWindow.__copy" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__copy" />
+      <keyword name="WebBrowserWindow.__createTextEncodingAction" id="WebBrowserWindow.__createTextEncodingAction" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__createTextEncodingAction" />
+      <keyword name="WebBrowserWindow.__createTextEncodingSubmenu" id="WebBrowserWindow.__createTextEncodingSubmenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__createTextEncodingSubmenu" />
       <keyword name="WebBrowserWindow.__currentChanged" id="WebBrowserWindow.__currentChanged" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__currentChanged" />
       <keyword name="WebBrowserWindow.__cut" id="WebBrowserWindow.__cut" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__cut" />
       <keyword name="WebBrowserWindow.__del__" id="WebBrowserWindow.__del__" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__del__" />
@@ -15969,6 +16020,7 @@
       <keyword name="WebBrowserWindow.__initActions" id="WebBrowserWindow.__initActions" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initActions" />
       <keyword name="WebBrowserWindow.__initHelpDb" id="WebBrowserWindow.__initHelpDb" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initHelpDb" />
       <keyword name="WebBrowserWindow.__initMenus" id="WebBrowserWindow.__initMenus" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initMenus" />
+      <keyword name="WebBrowserWindow.__initSuperMenu" id="WebBrowserWindow.__initSuperMenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initSuperMenu" />
       <keyword name="WebBrowserWindow.__initToolbars" id="WebBrowserWindow.__initToolbars" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initToolbars" />
       <keyword name="WebBrowserWindow.__initWebEngineSettings" id="WebBrowserWindow.__initWebEngineSettings" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__initWebEngineSettings" />
       <keyword name="WebBrowserWindow.__linkActivated" id="WebBrowserWindow.__linkActivated" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__linkActivated" />
@@ -15979,6 +16031,7 @@
       <keyword name="WebBrowserWindow.__openFile" id="WebBrowserWindow.__openFile" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__openFile" />
       <keyword name="WebBrowserWindow.__openFileNewTab" id="WebBrowserWindow.__openFileNewTab" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__openFileNewTab" />
       <keyword name="WebBrowserWindow.__paste" id="WebBrowserWindow.__paste" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__paste" />
+      <keyword name="WebBrowserWindow.__populateToolbarsMenu" id="WebBrowserWindow.__populateToolbarsMenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__populateToolbarsMenu" />
       <keyword name="WebBrowserWindow.__prevTab" id="WebBrowserWindow.__prevTab" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__prevTab" />
       <keyword name="WebBrowserWindow.__redo" id="WebBrowserWindow.__redo" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__redo" />
       <keyword name="WebBrowserWindow.__reload" id="WebBrowserWindow.__reload" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__reload" />
@@ -15988,7 +16041,11 @@
       <keyword name="WebBrowserWindow.__saveVisiblePageScreen" id="WebBrowserWindow.__saveVisiblePageScreen" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__saveVisiblePageScreen" />
       <keyword name="WebBrowserWindow.__searchForWord" id="WebBrowserWindow.__searchForWord" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__searchForWord" />
       <keyword name="WebBrowserWindow.__selectAll" id="WebBrowserWindow.__selectAll" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__selectAll" />
+      <keyword name="WebBrowserWindow.__sendPageLink" id="WebBrowserWindow.__sendPageLink" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__sendPageLink" />
+      <keyword name="WebBrowserWindow.__setBookmarksToolbarVisibility" id="WebBrowserWindow.__setBookmarksToolbarVisibility" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setBookmarksToolbarVisibility" />
       <keyword name="WebBrowserWindow.__setIconDatabasePath" id="WebBrowserWindow.__setIconDatabasePath" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setIconDatabasePath" />
+      <keyword name="WebBrowserWindow.__setMenuBarVisibility" id="WebBrowserWindow.__setMenuBarVisibility" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setMenuBarVisibility" />
+      <keyword name="WebBrowserWindow.__setStatusBarVisible" id="WebBrowserWindow.__setStatusBarVisible" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setStatusBarVisible" />
       <keyword name="WebBrowserWindow.__setTextEncoding" id="WebBrowserWindow.__setTextEncoding" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setTextEncoding" />
       <keyword name="WebBrowserWindow.__setUserStyleSheet" id="WebBrowserWindow.__setUserStyleSheet" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setUserStyleSheet" />
       <keyword name="WebBrowserWindow.__setupFilterCombo" id="WebBrowserWindow.__setupFilterCombo" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__setupFilterCombo" />
@@ -16015,6 +16072,7 @@
       <keyword name="WebBrowserWindow.__showSyncDialog" id="WebBrowserWindow.__showSyncDialog" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showSyncDialog" />
       <keyword name="WebBrowserWindow.__showTabManager" id="WebBrowserWindow.__showTabManager" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showTabManager" />
       <keyword name="WebBrowserWindow.__showTocWindow" id="WebBrowserWindow.__showTocWindow" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showTocWindow" />
+      <keyword name="WebBrowserWindow.__showToolbarsMenu" id="WebBrowserWindow.__showToolbarsMenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showToolbarsMenu" />
       <keyword name="WebBrowserWindow.__showUserAgentsDialog" id="WebBrowserWindow.__showUserAgentsDialog" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showUserAgentsDialog" />
       <keyword name="WebBrowserWindow.__showWebIconsDialog" id="WebBrowserWindow.__showWebIconsDialog" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showWebIconsDialog" />
       <keyword name="WebBrowserWindow.__showZoomValuesDialog" id="WebBrowserWindow.__showZoomValuesDialog" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.__showZoomValuesDialog" />
@@ -16046,6 +16104,7 @@
       <keyword name="WebBrowserWindow.browsers" id="WebBrowserWindow.browsers" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.browsers" />
       <keyword name="WebBrowserWindow.closeEvent" id="WebBrowserWindow.closeEvent" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.closeEvent" />
       <keyword name="WebBrowserWindow.cookieJar" id="WebBrowserWindow.cookieJar" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.cookieJar" />
+      <keyword name="WebBrowserWindow.createPopupMenu" id="WebBrowserWindow.createPopupMenu" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.createPopupMenu" />
       <keyword name="WebBrowserWindow.currentBrowser" id="WebBrowserWindow.currentBrowser" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.currentBrowser" />
       <keyword name="WebBrowserWindow.downloadManager" id="WebBrowserWindow.downloadManager" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.downloadManager" />
       <keyword name="WebBrowserWindow.downloadRequested" id="WebBrowserWindow.downloadRequested" ref="eric6.WebBrowser.WebBrowserWindow.html#WebBrowserWindow.downloadRequested" />
@@ -16969,6 +17028,7 @@
       <keyword name="python_3000_has_key" id="python_3000_has_key" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_has_key" />
       <keyword name="python_3000_not_equal" id="python_3000_not_equal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_not_equal" />
       <keyword name="python_3000_raise_comma" id="python_3000_raise_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_raise_comma" />
+      <keyword name="qVersionTuple" id="qVersionTuple" ref="eric6.Globals.__init__.html#qVersionTuple" />
       <keyword name="qtHandler" id="qtHandler" ref="eric6.E5Gui.E5ErrorMessage.html#qtHandler" />
       <keyword name="question" id="question" ref="eric6.E5Gui.E5MessageBox.html#question" />
       <keyword name="queues (Module)" id="queues (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html" />
@@ -17140,6 +17200,7 @@
       <keyword name="version" id="version" ref="eric6.Toolbox.Startup.html#version" />
       <keyword name="version" id="version" ref="eric6.eric6_api.html#version" />
       <keyword name="version" id="version" ref="eric6.eric6_doc.html#version" />
+      <keyword name="versionToTuple" id="versionToTuple" ref="eric6.Globals.__init__.html#versionToTuple" />
       <keyword name="warning" id="warning" ref="eric6.E5Gui.E5MessageBox.html#warning" />
       <keyword name="whitespace_around_comma" id="whitespace_around_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_comma" />
       <keyword name="whitespace_around_keywords" id="whitespace_around_keywords" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_keywords" />
@@ -17253,6 +17314,7 @@
       <file>eric6.E5Gui.E5ToolBarDialog.html</file>
       <file>eric6.E5Gui.E5ToolBarManager.html</file>
       <file>eric6.E5Gui.E5ToolBox.html</file>
+      <file>eric6.E5Gui.E5ToolButton.html</file>
       <file>eric6.E5Gui.E5TreeSortFilterProxyModel.html</file>
       <file>eric6.E5Gui.E5TreeView.html</file>
       <file>eric6.E5Gui.E5TreeWidget.html</file>
@@ -18082,6 +18144,7 @@
       <file>eric6.WebBrowser.JavaScript.StartPageJsObject.html</file>
       <file>eric6.WebBrowser.Navigation.NavigationBar.html</file>
       <file>eric6.WebBrowser.Navigation.NavigationContainer.html</file>
+      <file>eric6.WebBrowser.Navigation.ReloadStopButton.html</file>
       <file>eric6.WebBrowser.Network.EricSchemeHandler.html</file>
       <file>eric6.WebBrowser.Network.NetworkManager.html</file>
       <file>eric6.WebBrowser.Network.NetworkUrlInterceptor.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.E5Gui.E5ToolButton.html	Sat Jun 03 13:08:50 2017 +0200
@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.E5Gui.E5ToolButton</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.E5Gui.E5ToolButton</h1>
+<p>
+Module implementing a specialized tool button subclass.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#E5ToolButton">E5ToolButton</a></td>
+<td>Class implementing a specialized tool button subclass.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="E5ToolButton" ID="E5ToolButton"></a>
+<h2>E5ToolButton</h2>
+<p>
+    Class implementing a specialized tool button subclass.
+</p><h3>Signals</h3>
+<dl>
+<dt>aboutToHideMenu()</dt>
+<dd>
+emitted before the tool button menu is hidden
+</dd><dt>aboutToShowMenu()</dt>
+<dd>
+emitted before the tool button menu is shown
+</dd><dt>controlClicked()</dt>
+<dd>
+emitted when the left mouse button was
+        clicked while pressing the Ctrl key
+</dd><dt>doubleClicked()</dt>
+<dd>
+emitted when the left mouse button was
+        double clicked
+</dd><dt>middleClicked()</dt>
+<dd>
+emitted when the middle mouse button was clicked
+</dd>
+</dl>
+<h3>Derived from</h3>
+QToolButton
+<h3>Class Attributes</h3>
+<table>
+<tr><td>NoOptions</td></tr><tr><td>ShowMenuInsideOption</td></tr><tr><td>ToolBarLookOption</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#E5ToolButton.__init__">E5ToolButton</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#E5ToolButton.__menuAboutToHide">__menuAboutToHide</a></td>
+<td>Private slot to handle the tool button menu about to be hidden.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.__showMenu">__showMenu</a></td>
+<td>Private slot to show the tool button menu.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.contextMenuEvent">contextMenuEvent</a></td>
+<td>Protected method to handle context menu events.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.menu">menu</a></td>
+<td>Public method to get a reference to the tool button menu.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.mouseDoubleClickEvent">mouseDoubleClickEvent</a></td>
+<td>Protected method to handle mouse double click events.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.mousePressEvent">mousePressEvent</a></td>
+<td>Protected method to handle mouse press events.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.mouseReleaseEvent">mouseReleaseEvent</a></td>
+<td>Protected method to handle mouse release events.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.setMenu">setMenu</a></td>
+<td>Public method to set the tool button menu.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.setShowMenuInside">setShowMenuInside</a></td>
+<td>Public method to set a flag to show the menu edge aligned with the button.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.setToolbarButtonLook">setToolbarButtonLook</a></td>
+<td>Public method to set the toolbar look state.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.showMenuInside">showMenuInside</a></td>
+<td>Public method to check, if the menu edge shall be aligned with the button.</td>
+</tr><tr>
+<td><a href="#E5ToolButton.toolbarButtonLook">toolbarButtonLook</a></td>
+<td>Public method to check, if the button has the toolbar look.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="E5ToolButton.__init__" ID="E5ToolButton.__init__"></a>
+<h4>E5ToolButton (Constructor)</h4>
+<b>E5ToolButton</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
+</dd>
+</dl><a NAME="E5ToolButton.__menuAboutToHide" ID="E5ToolButton.__menuAboutToHide"></a>
+<h4>E5ToolButton.__menuAboutToHide</h4>
+<b>__menuAboutToHide</b>(<i></i>)
+<p>
+        Private slot to handle the tool button menu about to be hidden.
+</p><a NAME="E5ToolButton.__showMenu" ID="E5ToolButton.__showMenu"></a>
+<h4>E5ToolButton.__showMenu</h4>
+<b>__showMenu</b>(<i></i>)
+<p>
+        Private slot to show the tool button menu.
+</p><a NAME="E5ToolButton.contextMenuEvent" ID="E5ToolButton.contextMenuEvent"></a>
+<h4>E5ToolButton.contextMenuEvent</h4>
+<b>contextMenuEvent</b>(<i>evt</i>)
+<p>
+        Protected method to handle context menu events.
+</p><dl>
+<dt><i>evt</i> (QContextMenuEvent)</dt>
+<dd>
+reference to the context menu event
+</dd>
+</dl><a NAME="E5ToolButton.menu" ID="E5ToolButton.menu"></a>
+<h4>E5ToolButton.menu</h4>
+<b>menu</b>(<i></i>)
+<p>
+        Public method to get a reference to the tool button menu.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the tool button menu
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
+</dd>
+</dl><a NAME="E5ToolButton.mouseDoubleClickEvent" ID="E5ToolButton.mouseDoubleClickEvent"></a>
+<h4>E5ToolButton.mouseDoubleClickEvent</h4>
+<b>mouseDoubleClickEvent</b>(<i>evt</i>)
+<p>
+        Protected method to handle mouse double click events.
+</p><dl>
+<dt><i>evt</i> (QMouseEvent)</dt>
+<dd>
+reference to the mouse event
+</dd>
+</dl><a NAME="E5ToolButton.mousePressEvent" ID="E5ToolButton.mousePressEvent"></a>
+<h4>E5ToolButton.mousePressEvent</h4>
+<b>mousePressEvent</b>(<i>evt</i>)
+<p>
+        Protected method to handle mouse press events.
+</p><dl>
+<dt><i>evt</i> (QMouseEvent)</dt>
+<dd>
+reference to the mouse event
+</dd>
+</dl><a NAME="E5ToolButton.mouseReleaseEvent" ID="E5ToolButton.mouseReleaseEvent"></a>
+<h4>E5ToolButton.mouseReleaseEvent</h4>
+<b>mouseReleaseEvent</b>(<i>evt</i>)
+<p>
+        Protected method to handle mouse release events.
+</p><dl>
+<dt><i>evt</i> (QMouseEvent)</dt>
+<dd>
+reference to the mouse event
+</dd>
+</dl><a NAME="E5ToolButton.setMenu" ID="E5ToolButton.setMenu"></a>
+<h4>E5ToolButton.setMenu</h4>
+<b>setMenu</b>(<i>menu</i>)
+<p>
+        Public method to set the tool button menu.
+</p><dl>
+<dt><i>menu</i> (QMenu)</dt>
+<dd>
+reference to the tool button menu
+</dd>
+</dl><a NAME="E5ToolButton.setShowMenuInside" ID="E5ToolButton.setShowMenuInside"></a>
+<h4>E5ToolButton.setShowMenuInside</h4>
+<b>setShowMenuInside</b>(<i>enable</i>)
+<p>
+        Public method to set a flag to show the menu edge aligned with
+        the button.
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating to align the menu edge to the button
+</dd>
+</dl><a NAME="E5ToolButton.setToolbarButtonLook" ID="E5ToolButton.setToolbarButtonLook"></a>
+<h4>E5ToolButton.setToolbarButtonLook</h4>
+<b>setToolbarButtonLook</b>(<i>enable</i>)
+<p>
+        Public method to set the toolbar look state.
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating toolbar look
+</dd>
+</dl><a NAME="E5ToolButton.showMenuInside" ID="E5ToolButton.showMenuInside"></a>
+<h4>E5ToolButton.showMenuInside</h4>
+<b>showMenuInside</b>(<i></i>)
+<p>
+        Public method to check, if the menu edge shall be aligned with
+        the button.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating that the menu edge shall be aligned
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="E5ToolButton.toolbarButtonLook" ID="E5ToolButton.toolbarButtonLook"></a>
+<h4>E5ToolButton.toolbarButtonLook</h4>
+<b>toolbarButtonLook</b>(<i></i>)
+<p>
+        Public method to check, if the button has the toolbar look.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating toolbar look
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.Globals.__init__.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.Globals.__init__.html	Sat Jun 03 13:08:50 2017 +0200
@@ -64,6 +64,9 @@
 <td><a href="#isWindowsPlatform">isWindowsPlatform</a></td>
 <td>Function to check, if this is a Windows platform.</td>
 </tr><tr>
+<td><a href="#qVersionTuple">qVersionTuple</a></td>
+<td>Module function to get the Qt version as a tuple.</td>
+</tr><tr>
 <td><a href="#setConfigDir">setConfigDir</a></td>
 <td>Module function to set the name of the directory storing the config data.</td>
 </tr><tr>
@@ -84,6 +87,9 @@
 </tr><tr>
 <td><a href="#translate">translate</a></td>
 <td>Module function to handle different PyQt 4/5 QCoreApplication.translate parameter.</td>
+</tr><tr>
+<td><a href="#versionToTuple">versionToTuple</a></td>
+<td>Module function to convert a version string into a tuple.</td>
 </tr>
 </table>
 <hr /><hr />
@@ -232,6 +238,24 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="qVersionTuple" ID="qVersionTuple"></a>
+<h2>qVersionTuple</h2>
+<b>qVersionTuple</b>(<i></i>)
+<p>
+    Module function to get the Qt version as a tuple.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+Qt version as a tuple
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of int
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="setConfigDir" ID="setConfigDir"></a>
 <h2>setConfigDir</h2>
 <b>setConfigDir</b>(<i>d</i>)
@@ -365,5 +389,32 @@
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="versionToTuple" ID="versionToTuple"></a>
+<h2>versionToTuple</h2>
+<b>versionToTuple</b>(<i>version</i>)
+<p>
+    Module function to convert a version string into a tuple.
+</p><p>
+    Note: A version string consists of non-negative decimals separated by "."
+    optionally followed by a suffix. Suffix is everything after the last
+    decimal.
+</p><dl>
+<dt><i>version</i> (str)</dt>
+<dd>
+version string
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+version tuple without the suffix
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of int
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.Helpviewer.HelpWindow.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.Helpviewer.HelpWindow.html	Sat Jun 03 13:08:50 2017 +0200
@@ -190,6 +190,12 @@
 <td><a href="#HelpWindow.__copy">__copy</a></td>
 <td>Private slot called to handle the copy action.</td>
 </tr><tr>
+<td><a href="#HelpWindow.__createTextEncodingAction">__createTextEncodingAction</a></td>
+<td>Private method to create an action for the text encoding menu.</td>
+</tr><tr>
+<td><a href="#HelpWindow.__createTextEncodingSubmenu">__createTextEncodingSubmenu</a></td>
+<td>Private method to create a text encoding sub menu.</td>
+</tr><tr>
 <td><a href="#HelpWindow.__currentChanged">__currentChanged</a></td>
 <td>Private slot to handle the currentChanged signal.</td>
 </tr><tr>
@@ -939,7 +945,39 @@
 <b>__copy</b>(<i></i>)
 <p>
         Private slot called to handle the copy action.
-</p><a NAME="HelpWindow.__currentChanged" ID="HelpWindow.__currentChanged"></a>
+</p><a NAME="HelpWindow.__createTextEncodingAction" ID="HelpWindow.__createTextEncodingAction"></a>
+<h4>HelpWindow.__createTextEncodingAction</h4>
+<b>__createTextEncodingAction</b>(<i>codec, defaultCodec, parentMenu</i>)
+<p>
+        Private method to create an action for the text encoding menu.
+</p><dl>
+<dt><i>codec</i> (str)</dt>
+<dd>
+name of the codec to create an action for
+</dd><dt><i>defaultCodec</i> (str)</dt>
+<dd>
+name of the default codec
+</dd><dt><i>parentMenu</i> (QMenu)</dt>
+<dd>
+reference to the parent menu
+</dd>
+</dl><a NAME="HelpWindow.__createTextEncodingSubmenu" ID="HelpWindow.__createTextEncodingSubmenu"></a>
+<h4>HelpWindow.__createTextEncodingSubmenu</h4>
+<b>__createTextEncodingSubmenu</b>(<i>title, codecNames, parentMenu</i>)
+<p>
+        Private method to create a text encoding sub menu.
+</p><dl>
+<dt><i>title</i> (str)</dt>
+<dd>
+title of the menu
+</dd><dt><i>codecNames</i> (list of str)</dt>
+<dd>
+list of codec names for the menu
+</dd><dt><i>parentMenu</i> (QMenu)</dt>
+<dd>
+reference to the parent menu
+</dd>
+</dl><a NAME="HelpWindow.__currentChanged" ID="HelpWindow.__currentChanged"></a>
 <h4>HelpWindow.__currentChanged</h4>
 <b>__currentChanged</b>(<i>index</i>)
 <p>
--- a/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Sat Jun 03 13:08:50 2017 +0200
@@ -42,7 +42,10 @@
 </table>
 <h3>Functions</h3>
 <table>
-<tr><td>None</td></tr>
+<tr>
+<td><a href="#PluginRepositoryDownloadCleanup">PluginRepositoryDownloadCleanup</a></td>
+<td>Module function to clean up the plug-in downloads area.</td>
+</tr>
 </table>
 <hr /><hr />
 <a NAME="PluginRepositoryDialog" ID="PluginRepositoryDialog"></a>
@@ -612,5 +615,18 @@
         Private slot to start the eric6 plugin installation dialog.
 </p>
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="PluginRepositoryDownloadCleanup" ID="PluginRepositoryDownloadCleanup"></a>
+<h2>PluginRepositoryDownloadCleanup</h2>
+<b>PluginRepositoryDownloadCleanup</b>(<i>quiet=False</i>)
+<p>
+    Module function to clean up the plug-in downloads area.
+</p><dl>
+<dt><i>quiet</i> (bool)</dt>
+<dd>
+flag indicating quiet operations
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sat Jun 03 13:08:50 2017 +0200
@@ -259,6 +259,16 @@
 <dd>
 list of line flags to check against
 </dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating to ignore the code
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html	Sat Jun 03 13:08:50 2017 +0200
@@ -105,6 +105,9 @@
 <td><a href="#DocStyleChecker.__checkEricReturn">__checkEricReturn</a></td>
 <td>Private method to check, that docstrings contain an &#64;return line if they return anything and don't otherwise.</td>
 </tr><tr>
+<td><a href="#DocStyleChecker.__checkEricSignal">__checkEricSignal</a></td>
+<td>Private method to check, that docstrings contain an &#64;signal line if they define signals and don't otherwise.</td>
+</tr><tr>
 <td><a href="#DocStyleChecker.__checkEricSummary">__checkEricSummary</a></td>
 <td>Private method to check, that method docstring summaries start with specific words.</td>
 </tr><tr>
@@ -349,6 +352,10 @@
 <p>
         Private method to check, that docstrings contain an &#64;exception line
         if they raise an exception and don't otherwise.
+</p><p>
+        Note: This method also checks the raised and documented exceptions for
+        completeness (i.e. raised exceptions that are not documented or
+        documented exceptions that are not raised)
 </p><dl>
 <dt><i>docstringContext</i></dt>
 <dd>
@@ -427,6 +434,24 @@
 <dd>
 context of the docstring (DocStyleContext)
 </dd>
+</dl><a NAME="DocStyleChecker.__checkEricSignal" ID="DocStyleChecker.__checkEricSignal"></a>
+<h4>DocStyleChecker.__checkEricSignal</h4>
+<b>__checkEricSignal</b>(<i>docstringContext, context</i>)
+<p>
+        Private method to check, that docstrings contain an &#64;signal line
+        if they define signals and don't otherwise.
+</p><p>
+        Note: This method also checks the defined and documented signals for
+        completeness (i.e. defined signals that are not documented or
+        documented signals that are not defined)
+</p><dl>
+<dt><i>docstringContext</i></dt>
+<dd>
+docstring context (DocStyleContext)
+</dd><dt><i>context</i></dt>
+<dd>
+context of the docstring (DocStyleContext)
+</dd>
 </dl><a NAME="DocStyleChecker.__checkEricSummary" ID="DocStyleChecker.__checkEricSummary"></a>
 <h4>DocStyleChecker.__checkEricSummary</h4>
 <b>__checkEricSummary</b>(<i>docstringContext, context</i>)
--- a/Documentation/Source/eric6.QScintilla.Editor.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Sat Jun 03 13:08:50 2017 +0200
@@ -513,6 +513,9 @@
 <td><a href="#Editor.__setEolMode">__setEolMode</a></td>
 <td>Private method to configure the eol mode of the editor.</td>
 </tr><tr>
+<td><a href="#Editor.__setLineMarkerColours">__setLineMarkerColours</a></td>
+<td>Private method to set the line marker colours.</td>
+</tr><tr>
 <td><a href="#Editor.__setMarginsDisplay">__setMarginsDisplay</a></td>
 <td>Private method to configure margins 0 and 2.</td>
 </tr><tr>
@@ -2350,6 +2353,11 @@
 <b>__setEolMode</b>(<i></i>)
 <p>
         Private method to configure the eol mode of the editor.
+</p><a NAME="Editor.__setLineMarkerColours" ID="Editor.__setLineMarkerColours"></a>
+<h4>Editor.__setLineMarkerColours</h4>
+<b>__setLineMarkerColours</b>(<i></i>)
+<p>
+        Private method to set the line marker colours.
 </p><a NAME="Editor.__setMarginsDisplay" ID="Editor.__setMarginsDisplay"></a>
 <h4>Editor.__setMarginsDisplay</h4>
 <b>__setMarginsDisplay</b>(<i></i>)
--- a/Documentation/Source/eric6.QScintilla.MiniEditor.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.QScintilla.MiniEditor.html	Sat Jun 03 13:08:50 2017 +0200
@@ -177,9 +177,6 @@
 <td><a href="#MiniEditor.__redo">__redo</a></td>
 <td>Private method to redo the last recorded change.</td>
 </tr><tr>
-<td><a href="#MiniEditor.__replace">__replace</a></td>
-<td>Private method to handle the replace action.</td>
-</tr><tr>
 <td><a href="#MiniEditor.__resetLanguage">__resetLanguage</a></td>
 <td>Private method used to reset the language selection.</td>
 </tr><tr>
@@ -198,12 +195,15 @@
 <td><a href="#MiniEditor.__saveFile">__saveFile</a></td>
 <td>Private method to save to the given file.</td>
 </tr><tr>
-<td><a href="#MiniEditor.__search">__search</a></td>
-<td>Private method to handle the search action.</td>
-</tr><tr>
 <td><a href="#MiniEditor.__searchClearMarkers">__searchClearMarkers</a></td>
 <td>Private method to clear the search markers of the active window.</td>
 </tr><tr>
+<td><a href="#MiniEditor.__searchNext">__searchNext</a></td>
+<td>Private slot to handle the search next action.</td>
+</tr><tr>
+<td><a href="#MiniEditor.__searchPrev">__searchPrev</a></td>
+<td>Private slot to handle the search previous action.</td>
+</tr><tr>
 <td><a href="#MiniEditor.__selectAll">__selectAll</a></td>
 <td>Private slot handling the select all context menu action.</td>
 </tr><tr>
@@ -273,6 +273,12 @@
 <td><a href="#MiniEditor.setText">setText</a></td>
 <td>Public method to set the text programatically.</td>
 </tr><tr>
+<td><a href="#MiniEditor.showReplaceWidget">showReplaceWidget</a></td>
+<td>Public method to show the replace widget.</td>
+</tr><tr>
+<td><a href="#MiniEditor.showSearchWidget">showSearchWidget</a></td>
+<td>Public method to show the search widget.</td>
+</tr><tr>
 <td><a href="#MiniEditor.textForFind">textForFind</a></td>
 <td>Public method to determine the selection or the current word for the next find operation.</td>
 </tr>
@@ -586,11 +592,6 @@
 <b>__redo</b>(<i></i>)
 <p>
         Private method to redo the last recorded change.
-</p><a NAME="MiniEditor.__replace" ID="MiniEditor.__replace"></a>
-<h4>MiniEditor.__replace</h4>
-<b>__replace</b>(<i></i>)
-<p>
-        Private method to handle the replace action.
 </p><a NAME="MiniEditor.__resetLanguage" ID="MiniEditor.__resetLanguage"></a>
 <h4>MiniEditor.__resetLanguage</h4>
 <b>__resetLanguage</b>(<i></i>)
@@ -641,16 +642,21 @@
 <dd>
 flag indicating success (boolean)
 </dd>
-</dl><a NAME="MiniEditor.__search" ID="MiniEditor.__search"></a>
-<h4>MiniEditor.__search</h4>
-<b>__search</b>(<i></i>)
-<p>
-        Private method to handle the search action.
-</p><a NAME="MiniEditor.__searchClearMarkers" ID="MiniEditor.__searchClearMarkers"></a>
+</dl><a NAME="MiniEditor.__searchClearMarkers" ID="MiniEditor.__searchClearMarkers"></a>
 <h4>MiniEditor.__searchClearMarkers</h4>
 <b>__searchClearMarkers</b>(<i></i>)
 <p>
         Private method to clear the search markers of the active window.
+</p><a NAME="MiniEditor.__searchNext" ID="MiniEditor.__searchNext"></a>
+<h4>MiniEditor.__searchNext</h4>
+<b>__searchNext</b>(<i></i>)
+<p>
+        Private slot to handle the search next action.
+</p><a NAME="MiniEditor.__searchPrev" ID="MiniEditor.__searchPrev"></a>
+<h4>MiniEditor.__searchPrev</h4>
+<b>__searchPrev</b>(<i></i>)
+<p>
+        Private slot to handle the search previous action.
 </p><a NAME="MiniEditor.__selectAll" ID="MiniEditor.__selectAll"></a>
 <h4>MiniEditor.__selectAll</h4>
 <b>__selectAll</b>(<i></i>)
@@ -864,7 +870,17 @@
 <dd>
 type of the source file (string)
 </dd>
-</dl><a NAME="MiniEditor.textForFind" ID="MiniEditor.textForFind"></a>
+</dl><a NAME="MiniEditor.showReplaceWidget" ID="MiniEditor.showReplaceWidget"></a>
+<h4>MiniEditor.showReplaceWidget</h4>
+<b>showReplaceWidget</b>(<i></i>)
+<p>
+        Public method to show the replace widget.
+</p><a NAME="MiniEditor.showSearchWidget" ID="MiniEditor.showSearchWidget"></a>
+<h4>MiniEditor.showSearchWidget</h4>
+<b>showSearchWidget</b>(<i></i>)
+<p>
+        Public method to show the search widget.
+</p><a NAME="MiniEditor.textForFind" ID="MiniEditor.textForFind"></a>
 <h4>MiniEditor.textForFind</h4>
 <b>textForFind</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric6.QScintilla.SearchReplaceWidget.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.QScintilla.SearchReplaceWidget.html	Sat Jun 03 13:08:50 2017 +0200
@@ -90,6 +90,15 @@
 <td><a href="#SearchReplaceSlidingWidget.findPrev">findPrev</a></td>
 <td>Public slot to find the next previous of text.</td>
 </tr><tr>
+<td><a href="#SearchReplaceSlidingWidget.replace">replace</a></td>
+<td>Public method to replace the current selection.</td>
+</tr><tr>
+<td><a href="#SearchReplaceSlidingWidget.replaceAll">replaceAll</a></td>
+<td>Public method to replace all occurrences.</td>
+</tr><tr>
+<td><a href="#SearchReplaceSlidingWidget.replaceSearch">replaceSearch</a></td>
+<td>Public method to replace the current selection and search again.</td>
+</tr><tr>
 <td><a href="#SearchReplaceSlidingWidget.resizeEvent">resizeEvent</a></td>
 <td>Protected method to handle resize events.</td>
 </tr><tr>
@@ -170,6 +179,21 @@
 <b>findPrev</b>(<i></i>)
 <p>
         Public slot to find the next previous of text.
+</p><a NAME="SearchReplaceSlidingWidget.replace" ID="SearchReplaceSlidingWidget.replace"></a>
+<h4>SearchReplaceSlidingWidget.replace</h4>
+<b>replace</b>(<i></i>)
+<p>
+        Public method to replace the current selection.
+</p><a NAME="SearchReplaceSlidingWidget.replaceAll" ID="SearchReplaceSlidingWidget.replaceAll"></a>
+<h4>SearchReplaceSlidingWidget.replaceAll</h4>
+<b>replaceAll</b>(<i></i>)
+<p>
+        Public method to replace all occurrences.
+</p><a NAME="SearchReplaceSlidingWidget.replaceSearch" ID="SearchReplaceSlidingWidget.replaceSearch"></a>
+<h4>SearchReplaceSlidingWidget.replaceSearch</h4>
+<b>replaceSearch</b>(<i></i>)
+<p>
+        Public method to replace the current selection and search again.
 </p><a NAME="SearchReplaceSlidingWidget.resizeEvent" ID="SearchReplaceSlidingWidget.resizeEvent"></a>
 <h4>SearchReplaceSlidingWidget.resizeEvent</h4>
 <b>resizeEvent</b>(<i>evt</i>)
@@ -250,6 +274,24 @@
 <td><a href="#SearchReplaceWidget.__selectionBoundary">__selectionBoundary</a></td>
 <td>Private method to calculate the current selection boundary.</td>
 </tr><tr>
+<td><a href="#SearchReplaceWidget.__setFindNextEnabled">__setFindNextEnabled</a></td>
+<td>Private method to set the enabled state of "Find Next".</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.__setFindPrevEnabled">__setFindPrevEnabled</a></td>
+<td>Private method to set the enabled state of "Find Prev".</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.__setReplaceAllEnabled">__setReplaceAllEnabled</a></td>
+<td>Private method to set the enabled state of "Replace All".</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.__setReplaceAndSearchEnabled">__setReplaceAndSearchEnabled</a></td>
+<td>Private method to set the enabled state of "Replace And Search".</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.__setReplaceSelectionEnabled">__setReplaceSelectionEnabled</a></td>
+<td>Private method to set the enabled state of "Replace Occurrence".</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.__setShortcuts">__setShortcuts</a></td>
+<td>Private method to set the local action's shortcuts to the same key sequences as in the view manager.</td>
+</tr><tr>
 <td><a href="#SearchReplaceWidget.__showFind">__showFind</a></td>
 <td>Private method to display this widget in find mode.</td>
 </tr><tr>
@@ -289,6 +331,15 @@
 <td><a href="#SearchReplaceWidget.on_replaceSearchButton_clicked">on_replaceSearchButton_clicked</a></td>
 <td>Private slot to replace one occurrence of text and search for the next one.</td>
 </tr><tr>
+<td><a href="#SearchReplaceWidget.replace">replace</a></td>
+<td>Public method to replace the current selection.</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.replaceAll">replaceAll</a></td>
+<td>Public method to replace all occurrences.</td>
+</tr><tr>
+<td><a href="#SearchReplaceWidget.replaceSearch">replaceSearch</a></td>
+<td>Public method to replace the current selection and search again.</td>
+</tr><tr>
 <td><a href="#SearchReplaceWidget.selectionChanged">selectionChanged</a></td>
 <td>Public slot tracking changes of selected text.</td>
 </tr><tr>
@@ -385,7 +436,63 @@
 tuple of start line and index and end line and index
             (tuple of four integer)
 </dd>
-</dl><a NAME="SearchReplaceWidget.__showFind" ID="SearchReplaceWidget.__showFind"></a>
+</dl><a NAME="SearchReplaceWidget.__setFindNextEnabled" ID="SearchReplaceWidget.__setFindNextEnabled"></a>
+<h4>SearchReplaceWidget.__setFindNextEnabled</h4>
+<b>__setFindNextEnabled</b>(<i>enable</i>)
+<p>
+        Private method to set the enabled state of "Find Next".
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating the enable state to be set
+</dd>
+</dl><a NAME="SearchReplaceWidget.__setFindPrevEnabled" ID="SearchReplaceWidget.__setFindPrevEnabled"></a>
+<h4>SearchReplaceWidget.__setFindPrevEnabled</h4>
+<b>__setFindPrevEnabled</b>(<i>enable</i>)
+<p>
+        Private method to set the enabled state of "Find Prev".
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating the enable state to be set
+</dd>
+</dl><a NAME="SearchReplaceWidget.__setReplaceAllEnabled" ID="SearchReplaceWidget.__setReplaceAllEnabled"></a>
+<h4>SearchReplaceWidget.__setReplaceAllEnabled</h4>
+<b>__setReplaceAllEnabled</b>(<i>enable</i>)
+<p>
+        Private method to set the enabled state of "Replace All".
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating the enable state to be set
+</dd>
+</dl><a NAME="SearchReplaceWidget.__setReplaceAndSearchEnabled" ID="SearchReplaceWidget.__setReplaceAndSearchEnabled"></a>
+<h4>SearchReplaceWidget.__setReplaceAndSearchEnabled</h4>
+<b>__setReplaceAndSearchEnabled</b>(<i>enable</i>)
+<p>
+        Private method to set the enabled state of "Replace And Search".
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating the enable state to be set
+</dd>
+</dl><a NAME="SearchReplaceWidget.__setReplaceSelectionEnabled" ID="SearchReplaceWidget.__setReplaceSelectionEnabled"></a>
+<h4>SearchReplaceWidget.__setReplaceSelectionEnabled</h4>
+<b>__setReplaceSelectionEnabled</b>(<i>enable</i>)
+<p>
+        Private method to set the enabled state of "Replace Occurrence".
+</p><dl>
+<dt><i>enable</i> (bool)</dt>
+<dd>
+flag indicating the enable state to be set
+</dd>
+</dl><a NAME="SearchReplaceWidget.__setShortcuts" ID="SearchReplaceWidget.__setShortcuts"></a>
+<h4>SearchReplaceWidget.__setShortcuts</h4>
+<b>__setShortcuts</b>(<i></i>)
+<p>
+        Private method to set the local action's shortcuts to the same key
+        sequences as in the view manager.
+</p><a NAME="SearchReplaceWidget.__showFind" ID="SearchReplaceWidget.__showFind"></a>
 <h4>SearchReplaceWidget.__showFind</h4>
 <b>__showFind</b>(<i>text=''</i>)
 <p>
@@ -476,6 +583,21 @@
 <p>
         Private slot to replace one occurrence of text and search for the next
         one.
+</p><a NAME="SearchReplaceWidget.replace" ID="SearchReplaceWidget.replace"></a>
+<h4>SearchReplaceWidget.replace</h4>
+<b>replace</b>(<i></i>)
+<p>
+        Public method to replace the current selection.
+</p><a NAME="SearchReplaceWidget.replaceAll" ID="SearchReplaceWidget.replaceAll"></a>
+<h4>SearchReplaceWidget.replaceAll</h4>
+<b>replaceAll</b>(<i></i>)
+<p>
+        Public method to replace all occurrences.
+</p><a NAME="SearchReplaceWidget.replaceSearch" ID="SearchReplaceWidget.replaceSearch"></a>
+<h4>SearchReplaceWidget.replaceSearch</h4>
+<b>replaceSearch</b>(<i></i>)
+<p>
+        Public method to replace the current selection and search again.
 </p><a NAME="SearchReplaceWidget.selectionChanged" ID="SearchReplaceWidget.selectionChanged"></a>
 <h4>SearchReplaceWidget.selectionChanged</h4>
 <b>selectionChanged</b>(<i></i>)
--- a/Documentation/Source/eric6.ViewManager.ViewManager.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.ViewManager.ViewManager.html	Sat Jun 03 13:08:50 2017 +0200
@@ -534,9 +534,6 @@
 <td><a href="#ViewManager.__quickSearchText">__quickSearchText</a></td>
 <td>Private slot to handle the textChanged signal of the quicksearch edit.</td>
 </tr><tr>
-<td><a href="#ViewManager.__replace">__replace</a></td>
-<td>Private method to handle the replace action.</td>
-</tr><tr>
 <td><a href="#ViewManager.__replaceFiles">__replaceFiles</a></td>
 <td>Private method to handle the replace in files action.</td>
 </tr><tr>
@@ -546,18 +543,21 @@
 <td><a href="#ViewManager.__saveRecent">__saveRecent</a></td>
 <td>Private method to save the list of recently opened filenames.</td>
 </tr><tr>
-<td><a href="#ViewManager.__search">__search</a></td>
-<td>Private method to handle the search action.</td>
-</tr><tr>
 <td><a href="#ViewManager.__searchClearMarkers">__searchClearMarkers</a></td>
 <td>Private method to clear the search markers of the active window.</td>
 </tr><tr>
 <td><a href="#ViewManager.__searchFiles">__searchFiles</a></td>
 <td>Private method to handle the search in files action.</td>
 </tr><tr>
+<td><a href="#ViewManager.__searchNext">__searchNext</a></td>
+<td>Private slot to handle the search next action.</td>
+</tr><tr>
 <td><a href="#ViewManager.__searchOpenFiles">__searchOpenFiles</a></td>
 <td>Private method to handle the search in open files action.</td>
 </tr><tr>
+<td><a href="#ViewManager.__searchPrev">__searchPrev</a></td>
+<td>Private slot to handle the search previous action.</td>
+</tr><tr>
 <td><a href="#ViewManager.__setAutoSpellChecking">__setAutoSpellChecking</a></td>
 <td>Private slot to set the automatic spell checking of all editors.</td>
 </tr><tr>
@@ -942,6 +942,12 @@
 <td><a href="#ViewManager.showDebugSource">showDebugSource</a></td>
 <td>Public method to open the given file and highlight the given line in it.</td>
 </tr><tr>
+<td><a href="#ViewManager.showReplaceWidget">showReplaceWidget</a></td>
+<td>Public method to show the replace widget.</td>
+</tr><tr>
+<td><a href="#ViewManager.showSearchWidget">showSearchWidget</a></td>
+<td>Public method to show the search widget.</td>
+</tr><tr>
 <td><a href="#ViewManager.showWindowMenu">showWindowMenu</a></td>
 <td>Public method to set up the viewmanager part of the Window menu.</td>
 </tr><tr>
@@ -1644,11 +1650,6 @@
 <b>__quickSearchText</b>(<i></i>)
 <p>
         Private slot to handle the textChanged signal of the quicksearch edit.
-</p><a NAME="ViewManager.__replace" ID="ViewManager.__replace"></a>
-<h4>ViewManager.__replace</h4>
-<b>__replace</b>(<i></i>)
-<p>
-        Private method to handle the replace action.
 </p><a NAME="ViewManager.__replaceFiles" ID="ViewManager.__replaceFiles"></a>
 <h4>ViewManager.__replaceFiles</h4>
 <b>__replaceFiles</b>(<i></i>)
@@ -1664,11 +1665,6 @@
 <b>__saveRecent</b>(<i></i>)
 <p>
         Private method to save the list of recently opened filenames.
-</p><a NAME="ViewManager.__search" ID="ViewManager.__search"></a>
-<h4>ViewManager.__search</h4>
-<b>__search</b>(<i></i>)
-<p>
-        Private method to handle the search action.
 </p><a NAME="ViewManager.__searchClearMarkers" ID="ViewManager.__searchClearMarkers"></a>
 <h4>ViewManager.__searchClearMarkers</h4>
 <b>__searchClearMarkers</b>(<i></i>)
@@ -1679,11 +1675,21 @@
 <b>__searchFiles</b>(<i></i>)
 <p>
         Private method to handle the search in files action.
+</p><a NAME="ViewManager.__searchNext" ID="ViewManager.__searchNext"></a>
+<h4>ViewManager.__searchNext</h4>
+<b>__searchNext</b>(<i></i>)
+<p>
+        Private slot to handle the search next action.
 </p><a NAME="ViewManager.__searchOpenFiles" ID="ViewManager.__searchOpenFiles"></a>
 <h4>ViewManager.__searchOpenFiles</h4>
 <b>__searchOpenFiles</b>(<i></i>)
 <p>
         Private method to handle the search in open files action.
+</p><a NAME="ViewManager.__searchPrev" ID="ViewManager.__searchPrev"></a>
+<h4>ViewManager.__searchPrev</h4>
+<b>__searchPrev</b>(<i></i>)
+<p>
+        Private slot to handle the search previous action.
 </p><a NAME="ViewManager.__setAutoSpellChecking" ID="ViewManager.__setAutoSpellChecking"></a>
 <h4>ViewManager.__setAutoSpellChecking</h4>
 <b>__setAutoSpellChecking</b>(<i></i>)
@@ -3090,7 +3096,17 @@
 <dd>
 line number to highlight (int)
 </dd>
-</dl><a NAME="ViewManager.showWindowMenu" ID="ViewManager.showWindowMenu"></a>
+</dl><a NAME="ViewManager.showReplaceWidget" ID="ViewManager.showReplaceWidget"></a>
+<h4>ViewManager.showReplaceWidget</h4>
+<b>showReplaceWidget</b>(<i></i>)
+<p>
+        Public method to show the replace widget.
+</p><a NAME="ViewManager.showSearchWidget" ID="ViewManager.showSearchWidget"></a>
+<h4>ViewManager.showSearchWidget</h4>
+<b>showSearchWidget</b>(<i></i>)
+<p>
+        Public method to show the search widget.
+</p><a NAME="ViewManager.showWindowMenu" ID="ViewManager.showWindowMenu"></a>
 <h4>ViewManager.showWindowMenu</h4>
 <b>showWindowMenu</b>(<i>windowMenu</i>)
 <p>
--- a/Documentation/Source/eric6.WebBrowser.History.HistoryMenu.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.WebBrowser.History.HistoryMenu.html	Sat Jun 03 13:08:50 2017 +0200
@@ -101,9 +101,6 @@
 <td><a href="#HistoryMenu.__closedTabAvailable">__closedTabAvailable</a></td>
 <td>Private slot to handle changes of the availability of closed tabs.</td>
 </tr><tr>
-<td><a href="#HistoryMenu.__showHistoryDialog">__showHistoryDialog</a></td>
-<td>Private slot to show the history dialog.</td>
-</tr><tr>
 <td><a href="#HistoryMenu.postPopulated">postPopulated</a></td>
 <td>Public method to add any actions after the tree.</td>
 </tr><tr>
@@ -112,6 +109,9 @@
 </tr><tr>
 <td><a href="#HistoryMenu.setInitialActions">setInitialActions</a></td>
 <td>Public method to set the list of actions that should appear first in the menu.</td>
+</tr><tr>
+<td><a href="#HistoryMenu.showHistoryDialog">showHistoryDialog</a></td>
+<td>Public slot to show the history dialog.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -162,12 +162,7 @@
 <dd>
 flag indicating the availability of closed tabs (boolean)
 </dd>
-</dl><a NAME="HistoryMenu.__showHistoryDialog" ID="HistoryMenu.__showHistoryDialog"></a>
-<h4>HistoryMenu.__showHistoryDialog</h4>
-<b>__showHistoryDialog</b>(<i></i>)
-<p>
-        Private slot to show the history dialog.
-</p><a NAME="HistoryMenu.postPopulated" ID="HistoryMenu.postPopulated"></a>
+</dl><a NAME="HistoryMenu.postPopulated" ID="HistoryMenu.postPopulated"></a>
 <h4>HistoryMenu.postPopulated</h4>
 <b>postPopulated</b>(<i></i>)
 <p>
@@ -193,7 +188,12 @@
 <dd>
 list of initial actions (list of QAction)
 </dd>
-</dl>
+</dl><a NAME="HistoryMenu.showHistoryDialog" ID="HistoryMenu.showHistoryDialog"></a>
+<h4>HistoryMenu.showHistoryDialog</h4>
+<b>showHistoryDialog</b>(<i></i>)
+<p>
+        Public slot to show the history dialog.
+</p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
 <a NAME="HistoryMenuModel" ID="HistoryMenuModel"></a>
--- a/Documentation/Source/eric6.WebBrowser.Navigation.NavigationBar.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.WebBrowser.Navigation.NavigationBar.html	Sat Jun 03 13:08:50 2017 +0200
@@ -63,15 +63,27 @@
 <td><a href="#NavigationBar.__clearHistory">__clearHistory</a></td>
 <td>Private slot to clear the history of the current web browser tab.</td>
 </tr><tr>
+<td><a href="#NavigationBar.__contextMenuRequested">__contextMenuRequested</a></td>
+<td>Private method to handle a context menu request.</td>
+</tr><tr>
 <td><a href="#NavigationBar.__goBack">__goBack</a></td>
 <td>Private slot called to handle the backward button.</td>
 </tr><tr>
+<td><a href="#NavigationBar.__goBackInNewTab">__goBackInNewTab</a></td>
+<td>Private slot handling a middle click or Ctrl left click of the backward button.</td>
+</tr><tr>
 <td><a href="#NavigationBar.__goForward">__goForward</a></td>
 <td>Private slot called to handle the forward button.</td>
 </tr><tr>
+<td><a href="#NavigationBar.__goForwardInNewTab">__goForwardInNewTab</a></td>
+<td>Private slot handling a middle click or Ctrl left click of the forward button.</td>
+</tr><tr>
 <td><a href="#NavigationBar.__goHome">__goHome</a></td>
 <td>Private slot called to handle the home button.</td>
 </tr><tr>
+<td><a href="#NavigationBar.__goHomeInNewTab">__goHomeInNewTab</a></td>
+<td>Private slot handling a middle click or Ctrl left click of the home button.</td>
+</tr><tr>
 <td><a href="#NavigationBar.__navigationMenuActionTriggered">__navigationMenuActionTriggered</a></td>
 <td>Private slot to go to the selected page.</td>
 </tr><tr>
@@ -96,14 +108,14 @@
 <td><a href="#NavigationBar.forwardButton">forwardButton</a></td>
 <td>Public method to get a reference to the forward button.</td>
 </tr><tr>
-<td><a href="#NavigationBar.reloadButton">reloadButton</a></td>
-<td>Public method to get a reference to the reload button.</td>
+<td><a href="#NavigationBar.reloadStopButton">reloadStopButton</a></td>
+<td>Public method to get a reference to the reload/stop button.</td>
 </tr><tr>
 <td><a href="#NavigationBar.searchEdit">searchEdit</a></td>
 <td>Public method to get a reference to the web search edit.</td>
 </tr><tr>
-<td><a href="#NavigationBar.stopButton">stopButton</a></td>
-<td>Public method to get a reference to the stop button.</td>
+<td><a href="#NavigationBar.superMenuButton">superMenuButton</a></td>
+<td>Public method to get a reference to the super menu button.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -128,21 +140,49 @@
 <b>__clearHistory</b>(<i></i>)
 <p>
         Private slot to clear the history of the current web browser tab.
-</p><a NAME="NavigationBar.__goBack" ID="NavigationBar.__goBack"></a>
+</p><a NAME="NavigationBar.__contextMenuRequested" ID="NavigationBar.__contextMenuRequested"></a>
+<h4>NavigationBar.__contextMenuRequested</h4>
+<b>__contextMenuRequested</b>(<i>pos</i>)
+<p>
+        Private method to handle a context menu request.
+</p><dl>
+<dt><i>pos</i> (QPoint)</dt>
+<dd>
+position of the request
+</dd>
+</dl><a NAME="NavigationBar.__goBack" ID="NavigationBar.__goBack"></a>
 <h4>NavigationBar.__goBack</h4>
 <b>__goBack</b>(<i></i>)
 <p>
         Private slot called to handle the backward button.
+</p><a NAME="NavigationBar.__goBackInNewTab" ID="NavigationBar.__goBackInNewTab"></a>
+<h4>NavigationBar.__goBackInNewTab</h4>
+<b>__goBackInNewTab</b>(<i></i>)
+<p>
+        Private slot handling a middle click or Ctrl left click of the
+        backward button.
 </p><a NAME="NavigationBar.__goForward" ID="NavigationBar.__goForward"></a>
 <h4>NavigationBar.__goForward</h4>
 <b>__goForward</b>(<i></i>)
 <p>
         Private slot called to handle the forward button.
+</p><a NAME="NavigationBar.__goForwardInNewTab" ID="NavigationBar.__goForwardInNewTab"></a>
+<h4>NavigationBar.__goForwardInNewTab</h4>
+<b>__goForwardInNewTab</b>(<i></i>)
+<p>
+        Private slot handling a middle click or Ctrl left click of the
+        forward button.
 </p><a NAME="NavigationBar.__goHome" ID="NavigationBar.__goHome"></a>
 <h4>NavigationBar.__goHome</h4>
 <b>__goHome</b>(<i></i>)
 <p>
         Private slot called to handle the home button.
+</p><a NAME="NavigationBar.__goHomeInNewTab" ID="NavigationBar.__goHomeInNewTab"></a>
+<h4>NavigationBar.__goHomeInNewTab</h4>
+<b>__goHomeInNewTab</b>(<i></i>)
+<p>
+        Private slot handling a middle click or Ctrl left click of the
+        home button.
 </p><a NAME="NavigationBar.__navigationMenuActionTriggered" ID="NavigationBar.__navigationMenuActionTriggered"></a>
 <h4>NavigationBar.__navigationMenuActionTriggered</h4>
 <b>__navigationMenuActionTriggered</b>(<i>act</i>)
@@ -219,15 +259,15 @@
 <dd>
 QToolButton
 </dd>
-</dl><a NAME="NavigationBar.reloadButton" ID="NavigationBar.reloadButton"></a>
-<h4>NavigationBar.reloadButton</h4>
-<b>reloadButton</b>(<i></i>)
+</dl><a NAME="NavigationBar.reloadStopButton" ID="NavigationBar.reloadStopButton"></a>
+<h4>NavigationBar.reloadStopButton</h4>
+<b>reloadStopButton</b>(<i></i>)
 <p>
-        Public method to get a reference to the reload button.
+        Public method to get a reference to the reload/stop button.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-reference to the reload button
+reference to the reload/stop button
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
@@ -249,15 +289,15 @@
 <dd>
 WebBrowserWebSearchWidget
 </dd>
-</dl><a NAME="NavigationBar.stopButton" ID="NavigationBar.stopButton"></a>
-<h4>NavigationBar.stopButton</h4>
-<b>stopButton</b>(<i></i>)
+</dl><a NAME="NavigationBar.superMenuButton" ID="NavigationBar.superMenuButton"></a>
+<h4>NavigationBar.superMenuButton</h4>
+<b>superMenuButton</b>(<i></i>)
 <p>
-        Public method to get a reference to the stop button.
+        Public method to get a reference to the super menu button.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-reference to the stop button
+reference to the super menu button
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.WebBrowser.Navigation.ReloadStopButton.html	Sat Jun 03 13:08:50 2017 +0200
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.WebBrowser.Navigation.ReloadStopButton</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.WebBrowser.Navigation.ReloadStopButton</h1>
+<p>
+Module implementing a button alternating between reload and stop.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#ReloadStopButton">ReloadStopButton</a></td>
+<td>Class implementing a button alternating between reload and stop.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="ReloadStopButton" ID="ReloadStopButton"></a>
+<h2>ReloadStopButton</h2>
+<p>
+    Class implementing a button alternating between reload and stop.
+</p><h3>Signals</h3>
+<dl>
+<dt>reloadClicked()</dt>
+<dd>
+emitted to initiate a reload action
+</dd><dt>stopClicked()</dt>
+<dd>
+emitted to initiate a stop action
+</dd>
+</dl>
+<h3>Derived from</h3>
+E5ToolButton
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ReloadStopButton.__init__">ReloadStopButton</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#ReloadStopButton.__buttonClicked">__buttonClicked</a></td>
+<td>Private slot handling a user clicking the button.</td>
+</tr><tr>
+<td><a href="#ReloadStopButton.__updateButton">__updateButton</a></td>
+<td>Private slot to update the button.</td>
+</tr><tr>
+<td><a href="#ReloadStopButton.setLoading">setLoading</a></td>
+<td>Public method to set the loading state.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="ReloadStopButton.__init__" ID="ReloadStopButton.__init__"></a>
+<h4>ReloadStopButton (Constructor)</h4>
+<b>ReloadStopButton</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
+</dd>
+</dl><a NAME="ReloadStopButton.__buttonClicked" ID="ReloadStopButton.__buttonClicked"></a>
+<h4>ReloadStopButton.__buttonClicked</h4>
+<b>__buttonClicked</b>(<i></i>)
+<p>
+        Private slot handling a user clicking the button.
+</p><a NAME="ReloadStopButton.__updateButton" ID="ReloadStopButton.__updateButton"></a>
+<h4>ReloadStopButton.__updateButton</h4>
+<b>__updateButton</b>(<i></i>)
+<p>
+        Private slot to update the button.
+</p><a NAME="ReloadStopButton.setLoading" ID="ReloadStopButton.setLoading"></a>
+<h4>ReloadStopButton.setLoading</h4>
+<b>setLoading</b>(<i>loading</i>)
+<p>
+        Public method to set the loading state.
+</p><dl>
+<dt><i>loading</i> (bool)</dt>
+<dd>
+flag indicating the new loading state
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserWindow.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserWindow.html	Sat Jun 03 13:08:50 2017 +0200
@@ -166,6 +166,9 @@
 <td><a href="#WebBrowserWindow.__init__">WebBrowserWindow</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__TBMenuTriggered">__TBMenuTriggered</a></td>
+<td>Private method to handle the toggle of a toolbar via the Window-> Toolbars submenu or the toolbars popup menu.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__about">__about</a></td>
 <td>Private slot to show the about information.</td>
 </tr><tr>
@@ -214,6 +217,12 @@
 <td><a href="#WebBrowserWindow.__copy">__copy</a></td>
 <td>Private slot called to handle the copy action.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__createTextEncodingAction">__createTextEncodingAction</a></td>
+<td>Private method to create an action for the text encoding menu.</td>
+</tr><tr>
+<td><a href="#WebBrowserWindow.__createTextEncodingSubmenu">__createTextEncodingSubmenu</a></td>
+<td>Private method to create a text encoding sub menu.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__currentChanged">__currentChanged</a></td>
 <td>Private slot to handle the currentChanged signal.</td>
 </tr><tr>
@@ -259,6 +268,9 @@
 <td><a href="#WebBrowserWindow.__initMenus">__initMenus</a></td>
 <td>Private method to create the menus.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__initSuperMenu">__initSuperMenu</a></td>
+<td>Private method to create the super menu and attach it to the super menu button.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__initToolbars">__initToolbars</a></td>
 <td>Private method to create the toolbars.</td>
 </tr><tr>
@@ -289,6 +301,9 @@
 <td><a href="#WebBrowserWindow.__paste">__paste</a></td>
 <td>Private slot called to handle the paste action.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__populateToolbarsMenu">__populateToolbarsMenu</a></td>
+<td>Private method to populate the toolbars menu.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__prevTab">__prevTab</a></td>
 <td>Private slot used to show the previous tab.</td>
 </tr><tr>
@@ -316,9 +331,21 @@
 <td><a href="#WebBrowserWindow.__selectAll">__selectAll</a></td>
 <td>Private slot to handle the select all action.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__sendPageLink">__sendPageLink</a></td>
+<td>Private slot to send the link of the current page via email.</td>
+</tr><tr>
+<td><a href="#WebBrowserWindow.__setBookmarksToolbarVisibility">__setBookmarksToolbarVisibility</a></td>
+<td>Private method to set the visibility of the bookmarks toolbar.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__setIconDatabasePath">__setIconDatabasePath</a></td>
 <td>Private method to set the favicons path.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__setMenuBarVisibility">__setMenuBarVisibility</a></td>
+<td>Private method to set the visibility of the menu bar.</td>
+</tr><tr>
+<td><a href="#WebBrowserWindow.__setStatusBarVisible">__setStatusBarVisible</a></td>
+<td>Private method to set the visibility of the status bar.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__setTextEncoding">__setTextEncoding</a></td>
 <td>Private slot to set the selected text encoding as the default for this session.</td>
 </tr><tr>
@@ -397,6 +424,9 @@
 <td><a href="#WebBrowserWindow.__showTocWindow">__showTocWindow</a></td>
 <td>Private method to show the table of contents window.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.__showToolbarsMenu">__showToolbarsMenu</a></td>
+<td>Private slot to display the Toolbars menu.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.__showUserAgentsDialog">__showUserAgentsDialog</a></td>
 <td>Private slot to show the user agents management dialog.</td>
 </tr><tr>
@@ -478,6 +508,9 @@
 <td><a href="#WebBrowserWindow.closeEvent">closeEvent</a></td>
 <td>Protected event handler for the close event.</td>
 </tr><tr>
+<td><a href="#WebBrowserWindow.createPopupMenu">createPopupMenu</a></td>
+<td>Public method to create the toolbars menu for Qt.</td>
+</tr><tr>
 <td><a href="#WebBrowserWindow.currentBrowser">currentBrowser</a></td>
 <td>Public method to get a reference to the current web browser.</td>
 </tr><tr>
@@ -983,6 +1016,17 @@
 <dd>
 directory to be used for the settings files (str)
 </dd>
+</dl><a NAME="WebBrowserWindow.__TBMenuTriggered" ID="WebBrowserWindow.__TBMenuTriggered"></a>
+<h4>WebBrowserWindow.__TBMenuTriggered</h4>
+<b>__TBMenuTriggered</b>(<i>act</i>)
+<p>
+        Private method to handle the toggle of a toolbar via the Window->
+        Toolbars submenu or the toolbars popup menu.
+</p><dl>
+<dt><i>act</i> (QAction)</dt>
+<dd>
+reference to the action that was triggered
+</dd>
 </dl><a NAME="WebBrowserWindow.__about" ID="WebBrowserWindow.__about"></a>
 <h4>WebBrowserWindow.__about</h4>
 <b>__about</b>(<i></i>)
@@ -1101,7 +1145,39 @@
 <b>__copy</b>(<i></i>)
 <p>
         Private slot called to handle the copy action.
-</p><a NAME="WebBrowserWindow.__currentChanged" ID="WebBrowserWindow.__currentChanged"></a>
+</p><a NAME="WebBrowserWindow.__createTextEncodingAction" ID="WebBrowserWindow.__createTextEncodingAction"></a>
+<h4>WebBrowserWindow.__createTextEncodingAction</h4>
+<b>__createTextEncodingAction</b>(<i>codec, defaultCodec, parentMenu</i>)
+<p>
+        Private method to create an action for the text encoding menu.
+</p><dl>
+<dt><i>codec</i> (str)</dt>
+<dd>
+name of the codec to create an action for
+</dd><dt><i>defaultCodec</i> (str)</dt>
+<dd>
+name of the default codec
+</dd><dt><i>parentMenu</i> (QMenu)</dt>
+<dd>
+reference to the parent menu
+</dd>
+</dl><a NAME="WebBrowserWindow.__createTextEncodingSubmenu" ID="WebBrowserWindow.__createTextEncodingSubmenu"></a>
+<h4>WebBrowserWindow.__createTextEncodingSubmenu</h4>
+<b>__createTextEncodingSubmenu</b>(<i>title, codecNames, parentMenu</i>)
+<p>
+        Private method to create a text encoding sub menu.
+</p><dl>
+<dt><i>title</i> (str)</dt>
+<dd>
+title of the menu
+</dd><dt><i>codecNames</i> (list of str)</dt>
+<dd>
+list of codec names for the menu
+</dd><dt><i>parentMenu</i> (QMenu)</dt>
+<dd>
+reference to the parent menu
+</dd>
+</dl><a NAME="WebBrowserWindow.__currentChanged" ID="WebBrowserWindow.__currentChanged"></a>
 <h4>WebBrowserWindow.__currentChanged</h4>
 <b>__currentChanged</b>(<i>index</i>)
 <p>
@@ -1199,6 +1275,12 @@
 <b>__initMenus</b>(<i></i>)
 <p>
         Private method to create the menus.
+</p><a NAME="WebBrowserWindow.__initSuperMenu" ID="WebBrowserWindow.__initSuperMenu"></a>
+<h4>WebBrowserWindow.__initSuperMenu</h4>
+<b>__initSuperMenu</b>(<i></i>)
+<p>
+        Private method to create the super menu and attach it to the super
+        menu button.
 </p><a NAME="WebBrowserWindow.__initToolbars" ID="WebBrowserWindow.__initToolbars"></a>
 <h4>WebBrowserWindow.__initToolbars</h4>
 <b>__initToolbars</b>(<i></i>)
@@ -1255,7 +1337,17 @@
 <b>__paste</b>(<i></i>)
 <p>
         Private slot called to handle the paste action.
-</p><a NAME="WebBrowserWindow.__prevTab" ID="WebBrowserWindow.__prevTab"></a>
+</p><a NAME="WebBrowserWindow.__populateToolbarsMenu" ID="WebBrowserWindow.__populateToolbarsMenu"></a>
+<h4>WebBrowserWindow.__populateToolbarsMenu</h4>
+<b>__populateToolbarsMenu</b>(<i>menu</i>)
+<p>
+        Private method to populate the toolbars menu.
+</p><dl>
+<dt><i>menu</i> (QMenu)</dt>
+<dd>
+reference to the menu to be populated
+</dd>
+</dl><a NAME="WebBrowserWindow.__prevTab" ID="WebBrowserWindow.__prevTab"></a>
 <h4>WebBrowserWindow.__prevTab</h4>
 <b>__prevTab</b>(<i></i>)
 <p>
@@ -1307,7 +1399,22 @@
 <b>__selectAll</b>(<i></i>)
 <p>
         Private slot to handle the select all action.
-</p><a NAME="WebBrowserWindow.__setIconDatabasePath" ID="WebBrowserWindow.__setIconDatabasePath"></a>
+</p><a NAME="WebBrowserWindow.__sendPageLink" ID="WebBrowserWindow.__sendPageLink"></a>
+<h4>WebBrowserWindow.__sendPageLink</h4>
+<b>__sendPageLink</b>(<i></i>)
+<p>
+        Private slot to send the link of the current page via email.
+</p><a NAME="WebBrowserWindow.__setBookmarksToolbarVisibility" ID="WebBrowserWindow.__setBookmarksToolbarVisibility"></a>
+<h4>WebBrowserWindow.__setBookmarksToolbarVisibility</h4>
+<b>__setBookmarksToolbarVisibility</b>(<i>visible</i>)
+<p>
+        Private method to set the visibility of the bookmarks toolbar.
+</p><dl>
+<dt><i>visible</i> (bool)</dt>
+<dd>
+flag indicating the toolbar visibility
+</dd>
+</dl><a NAME="WebBrowserWindow.__setIconDatabasePath" ID="WebBrowserWindow.__setIconDatabasePath"></a>
 <h4>WebBrowserWindow.__setIconDatabasePath</h4>
 <b>__setIconDatabasePath</b>(<i>enable=True</i>)
 <p>
@@ -1317,6 +1424,26 @@
 <dd>
 flag indicating to enabled icon storage (boolean)
 </dd>
+</dl><a NAME="WebBrowserWindow.__setMenuBarVisibility" ID="WebBrowserWindow.__setMenuBarVisibility"></a>
+<h4>WebBrowserWindow.__setMenuBarVisibility</h4>
+<b>__setMenuBarVisibility</b>(<i>visible</i>)
+<p>
+        Private method to set the visibility of the menu bar.
+</p><dl>
+<dt><i>visible</i> (bool)</dt>
+<dd>
+flag indicating the menu bar visibility
+</dd>
+</dl><a NAME="WebBrowserWindow.__setStatusBarVisible" ID="WebBrowserWindow.__setStatusBarVisible"></a>
+<h4>WebBrowserWindow.__setStatusBarVisible</h4>
+<b>__setStatusBarVisible</b>(<i>visible</i>)
+<p>
+        Private method to set the visibility of the status bar.
+</p><dl>
+<dt><i>visible</i> (bool)</dt>
+<dd>
+flag indicating the status bar visibility
+</dd>
 </dl><a NAME="WebBrowserWindow.__setTextEncoding" ID="WebBrowserWindow.__setTextEncoding"></a>
 <h4>WebBrowserWindow.__setTextEncoding</h4>
 <b>__setTextEncoding</b>(<i>act</i>)
@@ -1468,6 +1595,11 @@
 <b>__showTocWindow</b>(<i></i>)
 <p>
         Private method to show the table of contents window.
+</p><a NAME="WebBrowserWindow.__showToolbarsMenu" ID="WebBrowserWindow.__showToolbarsMenu"></a>
+<h4>WebBrowserWindow.__showToolbarsMenu</h4>
+<b>__showToolbarsMenu</b>(<i></i>)
+<p>
+        Private slot to display the Toolbars menu.
 </p><a NAME="WebBrowserWindow.__showUserAgentsDialog" ID="WebBrowserWindow.__showUserAgentsDialog"></a>
 <h4>WebBrowserWindow.__showUserAgentsDialog</h4>
 <b>__showUserAgentsDialog</b>(<i></i>)
@@ -1666,6 +1798,21 @@
             <br />This event is simply accepted after the history has been
             saved and all window references have been deleted.
 </dd>
+</dl><a NAME="WebBrowserWindow.createPopupMenu" ID="WebBrowserWindow.createPopupMenu"></a>
+<h4>WebBrowserWindow.createPopupMenu</h4>
+<b>createPopupMenu</b>(<i></i>)
+<p>
+        Public method to create the toolbars menu for Qt.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+toolbars menu
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
+</dd>
 </dl><a NAME="WebBrowserWindow.currentBrowser" ID="WebBrowserWindow.currentBrowser"></a>
 <h4>WebBrowserWindow.currentBrowser</h4>
 <b>currentBrowser</b>(<i></i>)
@@ -1865,7 +2012,7 @@
 </dd><dt><i>addNextTo</i></dt>
 <dd>
 reference to the browser to open the tab after
-            (HelpBrowser)
+            (WebBrowserView)
 </dd><dt><i>background=</i></dt>
 <dd>
 flag indicating to open the tab in the
--- a/Documentation/Source/eric6.eric6_browser.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/eric6.eric6_browser.html	Sat Jun 03 13:08:50 2017 +0200
@@ -29,7 +29,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>MIN_QT_VERSION</td></tr><tr><td>SettingsDir</td></tr>
+<tr><td>SettingsDir</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/index-eric6.E5Gui.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/index-eric6.E5Gui.html	Sat Jun 03 13:08:50 2017 +0200
@@ -135,6 +135,9 @@
 <td><a href="eric6.E5Gui.E5ToolBox.html">E5ToolBox</a></td>
 <td>Module implementing a horizontal and a vertical toolbox class.</td>
 </tr><tr>
+<td><a href="eric6.E5Gui.E5ToolButton.html">E5ToolButton</a></td>
+<td>Module implementing a specialized tool button subclass.</td>
+</tr><tr>
 <td><a href="eric6.E5Gui.E5TreeSortFilterProxyModel.html">E5TreeSortFilterProxyModel</a></td>
 <td>Module implementing a modified QSortFilterProxyModel.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric6.WebBrowser.Navigation.html	Sat May 06 13:44:26 2017 +0200
+++ b/Documentation/Source/index-eric6.WebBrowser.Navigation.html	Sat Jun 03 13:08:50 2017 +0200
@@ -33,6 +33,9 @@
 </tr><tr>
 <td><a href="eric6.WebBrowser.Navigation.NavigationContainer.html">NavigationContainer</a></td>
 <td>Module implementing the navigation container widget.</td>
+</tr><tr>
+<td><a href="eric6.WebBrowser.Navigation.ReloadStopButton.html">ReloadStopButton</a></td>
+<td>Module implementing a button alternating between reload and stop.</td>
 </tr>
 </table>
 </body></html>
\ No newline at end of file
--- a/E5Gui/E5LineEdit.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5LineEdit.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,11 +9,14 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QEvent, qVersion
+from PyQt5.QtCore import pyqtSignal, Qt, QEvent
 from PyQt5.QtGui import QPainter, QPalette
 from PyQt5.QtWidgets import QLineEdit, QStyle, QWidget, QHBoxLayout, \
     QBoxLayout, QLayout, QApplication, QSpacerItem, QSizePolicy
-if qVersion() >= "5.0.0":
+
+from Globals import qVersionTuple
+
+if qVersionTuple() >= (5, 0, 0):
     from PyQt5.QtWidgets import QStyleOptionFrame
 else:
     from PyQt5.QtWidgets import QStyleOptionFrameV2 as QStyleOptionFrame
@@ -67,7 +70,7 @@
         
         self.setMinimumHeight(22)
         
-        if qVersion() < "4.7.0":
+        if qVersionTuple() < (4, 7, 0):
             self.__inactiveText = inactiveText
         else:
             self.setPlaceholderText(inactiveText)
@@ -154,7 +157,7 @@
         """
         super(E5LineEdit, self).paintEvent(evt)
         
-        if qVersion() < "4.7.0":
+        if qVersionTuple() < (4, 7, 0):
             if not self.text() and \
                self.__inactiveText and \
                not self.hasFocus():
@@ -262,7 +265,7 @@
         
         @return inactive text (string)
         """
-        if qVersion() < "4.7.0":
+        if qVersionTuple() < (4, 7, 0):
             return self.__inactiveText
         else:
             return self.placeholderText()
@@ -273,7 +276,7 @@
         
         @param inactiveText text to be shown on inactivity (string)
         """
-        if qVersion() < "4.7.0":
+        if qVersionTuple() < (4, 7, 0):
             self.__inactiveText = inactiveText
             self.update()
         else:
--- a/E5Gui/E5MapWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5MapWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,10 +9,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QSize, QRect, QCoreApplication, qVersion
+from PyQt5.QtCore import Qt, QSize, QRect, QCoreApplication
 from PyQt5.QtGui import QColor, QBrush, QPainter
 from PyQt5.QtWidgets import QWidget, QAbstractScrollArea
 
+from Globals import qVersionTuple
+
 
 class E5MapWidget(QWidget):
     """
@@ -219,7 +221,7 @@
         
         @param event reference to the wheel event (QWheelEvent)
         """
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             isVertical = event.angleDelta().x() == 0
         else:
             isVertical = event.orientation() == Qt.Vertical
--- a/E5Gui/E5ModelMenu.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5ModelMenu.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,11 +9,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, qVersion, Qt, QModelIndex, QPoint
+from PyQt5.QtCore import pyqtSignal, Qt, QModelIndex, QPoint
 from PyQt5.QtGui import QFontMetrics, QDrag, QPixmap
 from PyQt5.QtWidgets import QMenu, QAction, QApplication
 
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class E5ModelMenu(QMenu):
@@ -388,7 +389,7 @@
         drag = QDrag(self)
         drag.setMimeData(self.__model.mimeData([idx]))
         actionRect = self.actionGeometry(act)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             drag.setPixmap(self.grab(actionRect))
         else:
             drag.setPixmap(QPixmap.grabWidget(self, actionRect))
--- a/E5Gui/E5ModelToolBar.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5ModelToolBar.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,10 +9,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, qVersion, Qt, QModelIndex, QPoint, QEvent
+from PyQt5.QtCore import pyqtSignal, Qt, QModelIndex, QPoint, QEvent
 from PyQt5.QtGui import QDrag, QPixmap, QIcon
 from PyQt5.QtWidgets import QApplication, QToolBar, QToolButton
 
+from Globals import qVersionTuple
+
 
 class E5ModelToolBar(QToolBar):
     """
@@ -251,7 +253,7 @@
         drag = QDrag(self)
         drag.setMimeData(self.__model.mimeData([idx]))
         actionRect = self.actionGeometry(act)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             drag.setPixmap(self.grab(actionRect))
         else:
             drag.setPixmap(QPixmap.grabWidget(self, actionRect))
--- a/E5Gui/E5SideBar.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5SideBar.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,13 +10,14 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import QEvent, QSize, Qt, QByteArray, QDataStream, \
-    QIODevice, QTimer, qVersion
+    QIODevice, QTimer
 from PyQt5.QtWidgets import QTabBar, QWidget, QStackedWidget, QBoxLayout, \
     QToolButton, QSizePolicy
 
 from E5Gui.E5Application import e5App
 
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class E5SideBar(QWidget):
@@ -254,7 +255,7 @@
                 elif self.isMinimized():
                     self.expand()
             elif evt.type() == QEvent.Wheel:
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     delta = evt.angleDelta().y()
                 else:
                     delta = evt.delta()
--- a/E5Gui/E5TabWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Gui/E5TabWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,11 +9,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QPoint, QMimeData, QByteArray, pyqtSignal, \
-    qVersion
+from PyQt5.QtCore import Qt, QPoint, QMimeData, QByteArray, pyqtSignal
 from PyQt5.QtGui import QDrag, QMovie
 from PyQt5.QtWidgets import QTabWidget, QTabBar, QApplication, QStyle, QLabel
 
+from Globals import qVersionTuple
+
 
 class E5WheelTabBar(QTabBar):
     """
@@ -36,7 +37,7 @@
         @param event reference to the wheel event (QWheelEvent)
         """
         try:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = event.angleDelta().y()
             else:
                 delta = event.delta()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5Gui/E5ToolButton.py	Sat Jun 03 13:08:50 2017 +0200
@@ -0,0 +1,253 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a specialized tool button subclass.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTimer, QSize
+from PyQt5.QtWidgets import QToolButton, QStyle, QStyleOptionToolButton, \
+    QStyleOption, QApplication
+
+
+class E5ToolButton(QToolButton):
+    """
+    Class implementing a specialized tool button subclass.
+    
+    @signal aboutToShowMenu() emitted before the tool button menu is shown
+    @signal aboutToHideMenu() emitted before the tool button menu is hidden
+    @signal middleClicked() emitted when the middle mouse button was clicked
+    @signal controlClicked() emitted when the left mouse button was
+        clicked while pressing the Ctrl key
+    @signal doubleClicked() emitted when the left mouse button was
+        double clicked
+    """
+    NoOptions = 0
+    ShowMenuInsideOption = 1
+    ToolBarLookOption = 2
+    
+    aboutToShowMenu = pyqtSignal()
+    aboutToHideMenu = pyqtSignal()
+    middleClicked = pyqtSignal()
+    controlClicked = pyqtSignal()
+    doubleClicked = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(E5ToolButton, self).__init__(parent)
+        
+        self.setMinimumWidth(16)
+        
+        self.__menu = None
+        self.__options = E5ToolButton.NoOptions
+        
+        opt = QStyleOptionToolButton()
+        self.initStyleOption(opt)
+        
+        self.__pressTimer = QTimer()
+        self.__pressTimer.setSingleShot(True)
+        self.__pressTimer.setInterval(
+            QApplication.style().styleHint(
+                QStyle.SH_ToolButton_PopupDelay, opt, self))
+        self.__pressTimer.timeout.connect(self.__showMenu)
+    
+    ##################################################################
+    ## Menu handling methods below.
+    ##
+    ## The menu is handled in E5ToolButton and is not passed to
+    ## QToolButton. No menu indicator will be shown in the button.
+    ##################################################################
+    
+    def menu(self):
+        """
+        Public method to get a reference to the tool button menu.
+        
+        @return reference to the tool button menu
+        @rtype QMenu
+        """
+        return self.__menu
+    
+    def setMenu(self, menu):
+        """
+        Public method to set the tool button menu.
+        
+        @param menu reference to the tool button menu
+        @type QMenu
+        """
+        assert menu is not None
+        
+        if self.__menu:
+            self.__menu.aboutToHide.disconnect(self.__menuAboutToHide)
+        
+        self.__menu = menu
+        self.__menu.aboutToHide.connect(self.__menuAboutToHide)
+    
+    def showMenuInside(self):
+        """
+        Public method to check, if the menu edge shall be aligned with
+        the button.
+        
+        @return flag indicating that the menu edge shall be aligned
+        @rtype bool
+        """
+        return bool(self.__options & E5ToolButton.ShowMenuInsideOption)
+    
+    def setShowMenuInside(self, enable):
+        """
+        Public method to set a flag to show the menu edge aligned with
+        the button.
+        
+        @param enable flag indicating to align the menu edge to the button
+        @type bool
+        """
+        if enable:
+            self.__options |= E5ToolButton.ShowMenuInsideOption
+        else:
+            self.__options &= ~E5ToolButton.ShowMenuInsideOption
+    
+    @pyqtSlot()
+    def __showMenu(self):
+        """
+        Private slot to show the tool button menu.
+        """
+        if self.__menu is None or self.__menu.isVisible():
+            return
+        
+        self.aboutToShowMenu.emit()
+        
+        if self.__options & E5ToolButton.ShowMenuInsideOption:
+            pos = self.mapToGlobal(self.rect().bottomRight())
+            if QApplication.layoutDirection() == Qt.RightToLeft:
+                pos.setX(pos.x() - self.rect().width())
+            else:
+                pos.setX(pos.x() - self.__menu.sizeHint().width())
+        else:
+            pos = self.mapToGlobal(self.rect().bottomLeft())
+        
+        self.__menu.popup(pos)
+    
+    @pyqtSlot()
+    def __menuAboutToHide(self):
+        """
+        Private slot to handle the tool button menu about to be hidden.
+        """
+        self.setDown(False)
+        self.aboutToHideMenu.emit()
+    
+    ##################################################################
+    ## Methods to handle the tool button look
+    ##################################################################
+    
+    def toolbarButtonLook(self):
+        """
+        Public method to check, if the button has the toolbar look.
+        
+        @return flag indicating toolbar look
+        @rtype bool
+        """
+        return bool(self.__options & E5ToolButton.ToolBarLookOption)
+    
+    def setToolbarButtonLook(self, enable):
+        """
+        Public method to set the toolbar look state.
+        
+        @param enable flag indicating toolbar look
+        @type bool
+        """
+        if enable:
+            self.__options |= E5ToolButton.ToolBarLookOption
+            
+            opt = QStyleOption()
+            opt.initFrom(self)
+            size = self.style().pixelMetric(
+                QStyle.PM_ToolBarIconSize, opt, self)
+            self.setIconSize(QSize(size, size))
+        else:
+            self.__options &= ~E5ToolButton.ToolBarLookOption
+        
+        self.setProperty("toolbar-look", enable)
+        self.style().unpolish(self)
+        self.style().polish(self)
+    
+    ##################################################################
+    ## Methods to handle some event types
+    ##################################################################
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method to handle mouse press events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        if self.popupMode() == QToolButton.DelayedPopup:
+            self.__pressTimer.start()
+        
+        if evt.buttons() == Qt.LeftButton and \
+           self.__menu is not None and \
+           self.popupMode() == QToolButton.InstantPopup:
+            self.setDown(True)
+            self.__showMenu()
+        elif evt.buttons() == Qt.RightButton and \
+                self.__menu is not None:
+            self.setDown(True)
+            self.__showMenu()
+        else:
+            super(E5ToolButton, self).mousePressEvent(evt)
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method to handle mouse release events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        self.__pressTimer.stop()
+        
+        if evt.button() == Qt.MiddleButton and \
+           self.rect().contains(evt.pos()):
+            self.middleClicked.emit()
+            self.setDown(False)
+        elif evt.button() == Qt.LeftButton and \
+            self.rect().contains(evt.pos()) and \
+                evt.modifiers() == Qt.ControlModifier:
+            self.controlClicked.emit()
+            self.setDown(False)
+        else:
+            super(E5ToolButton, self).mouseReleaseEvent(evt)
+    
+    def mouseDoubleClickEvent(self, evt):
+        """
+        Protected method to handle mouse double click events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        super(E5ToolButton, self).mouseDoubleClickEvent(evt)
+        
+        self.__pressTimer.stop()
+        
+        if evt.buttons() == Qt.LeftButton:
+            self.doubleClicked.emit()
+    
+    def contextMenuEvent(self, evt):
+        """
+        Protected method to handle context menu events.
+        
+        @param evt reference to the context menu event
+        @type QContextMenuEvent
+        """
+        # block to prevent showing the context menu and the tool button menu
+        if self.__menu is not None:
+            return
+        
+        super(E5ToolButton, self).contextMenuEvent(evt)
--- a/E5Network/E5SslCertificatesDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Network/E5SslCertificatesDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,7 +10,7 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import pyqtSlot, Qt, QByteArray, QFile, QFileInfo, \
-    QIODevice, qVersion
+    QIODevice
 from PyQt5.QtWidgets import QDialog, QTreeWidgetItem
 try:
     from PyQt5.QtNetwork import QSslCertificate, QSslSocket, \
@@ -26,6 +26,7 @@
 import Utilities
 import UI.PixmapCache
 import Globals
+from Globals import qVersionTuple
 
 
 class E5SslCertificatesDialog(QDialog, Ui_E5SslCertificatesDialog):
@@ -86,7 +87,7 @@
         @param cert certificate to insert (QSslCertificate)
         """
         # step 1: extract the info to be shown
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             organisation = Utilities.decodeString(
                 ", ".join(cert.subjectInfo(QSslCertificate.Organization)))
             commonName = Utilities.decodeString(
@@ -213,7 +214,7 @@
             pems = QByteArray()
             for cert in certs:
                 if cert in sCerts:
-                    if qVersion() >= "5.0.0":
+                    if qVersionTuple() >= (5, 0, 0):
                         commonStr = ", ".join(
                             cert.subjectInfo(QSslCertificate.CommonName))
                     else:
@@ -297,7 +298,7 @@
         @param cert certificate to insert (QSslCertificate)
         """
         # step 1: extract the info to be shown
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             organisation = Utilities.decodeString(
                 ", ".join(cert.subjectInfo(QSslCertificate.Organization)))
             commonName = Utilities.decodeString(
@@ -403,7 +404,7 @@
             caCerts = self.__getSystemCaCertificates()
             for cert in certs:
                 if cert in caCerts:
-                    if qVersion() >= "5.0.0":
+                    if qVersionTuple() >= (5, 0, 0):
                         commonStr = ", ".join(
                             cert.subjectInfo(QSslCertificate.CommonName))
                     else:
--- a/E5Network/E5SslCertificatesInfoWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Network/E5SslCertificatesInfoWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,13 +13,14 @@
 except NameError:
     pass
 
-from PyQt5.QtCore import pyqtSlot, QCryptographicHash, QDateTime, qVersion
+from PyQt5.QtCore import pyqtSlot, QCryptographicHash, QDateTime
 from PyQt5.QtWidgets import QWidget
 from PyQt5.QtNetwork import QSslCertificate
 
 from .Ui_E5SslCertificatesInfoWidget import Ui_E5SslCertificatesInfoWidget
 
 import Utilities
+from Globals import qVersionTuple
 
 
 class E5SslCertificatesInfoWidget(QWidget, Ui_E5SslCertificatesInfoWidget):
@@ -51,12 +52,12 @@
         self.__chain = certificateChain[:]
         
         for cert in self.__chain:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 name = ", ".join(cert.subjectInfo(QSslCertificate.CommonName))
             else:
                 name = cert.subjectInfo(QSslCertificate.CommonName)
             if not name:
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     name = ", ".join(
                         cert.subjectInfo(QSslCertificate.Organization))
                 else:
@@ -94,7 +95,7 @@
         self.expiredLabel.setStyleSheet(
             "QLabel { color : white; background-color : red; }")
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.subjectCommonNameLabel.setText(self.__certificateString(
                 ", ".join(certificate.subjectInfo(
                     QSslCertificate.CommonName))))
@@ -141,8 +142,8 @@
             str(certificate.digest(QCryptographicHash.Md5).toHex(),
                 encoding="ascii")))
         
-        if (qVersion() >= "5.0.0" and certificate.isBlacklisted()) or \
-           (qVersion() < "5.0.0" and not certificate.isValid()):
+        if (qVersionTuple() >= (5, 0, 0) and certificate.isBlacklisted()) or \
+           (qVersionTuple() < (5, 0, 0) and not certificate.isValid()):
             # something is wrong; indicate it to the user
             if self.__hasExpired(certificate.effectiveDate(),
                                  certificate.expiryDate()):
--- a/E5Network/E5SslErrorHandler.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Network/E5SslErrorHandler.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion, QObject, QByteArray
+from PyQt5.QtCore import QObject, QByteArray
 from PyQt5.QtNetwork import QSslCertificate, QSslConfiguration, QSslSocket, \
     QSslError, QSsl
 
@@ -18,6 +18,7 @@
 import Preferences
 import Utilities
 import Globals
+from Globals import qVersionTuple
 
 
 class E5SslErrorHandler(QObject):
@@ -192,7 +193,7 @@
         """
         result = "<p>"
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             result += self.tr("Name: {0}")\
                 .format(Utilities.html_encode(Utilities.decodeString(
                     ", ".join(cert.subjectInfo(QSslCertificate.CommonName)))))
--- a/E5Network/E5SslInfoWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/E5Network/E5SslInfoWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,12 +9,13 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion, Qt, QUrl, QPoint
+from PyQt5.QtCore import Qt, QUrl, QPoint
 from PyQt5.QtWidgets import QMenu, QGridLayout, QLabel, QSizePolicy
 from PyQt5.QtNetwork import QSsl, QSslConfiguration, QSslCertificate
 
 import UI.PixmapCache
 import Utilities
+from Globals import qVersionTuple
 
 
 class E5SslInfoWidget(QMenu):
@@ -68,12 +69,12 @@
                 "Warning: this site is NOT carrying a certificate."))
             imageLabel.setPixmap(UI.PixmapCache.getPixmap("securityLow32.png"))
         else:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 valid = not cert.isBlacklisted()
             else:
                 valid = cert.isValid()
             if valid:
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     txt = ", ".join(
                         cert.issuerInfo(QSslCertificate.CommonName))
                 else:
@@ -151,7 +152,7 @@
                 sslVersion = self.tr("unknown")
                 imageLabel.setPixmap(
                     UI.PixmapCache.getPixmap("securityLow32.png"))
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 if proto == QSsl.TlsV1_0:
                     sslVersion = "TLS 1.0"
                     imageLabel.setPixmap(
--- a/Globals/__init__.py	Sat May 06 13:44:26 2017 +0200
+++ b/Globals/__init__.py	Sat Jun 03 13:08:50 2017 +0200
@@ -15,9 +15,10 @@
 
 import sys
 import os
+import re
 
-from PyQt5.QtCore import (QDir, QLibraryInfo, QByteArray,
-                          QCoreApplication, QT_VERSION_STR)
+from PyQt5.QtCore import QDir, QLibraryInfo, QByteArray, QCoreApplication, \
+    QT_VERSION_STR, QT_VERSION
 
 # names of the various settings objects
 settingsNameOrganization = "Eric6"
@@ -236,10 +237,18 @@
             path = os.path.join(modDir, "bin")
         elif os.path.exists(os.path.join(modDir, "designer.exe")):
             path = modDir
+        
+        if not path:
+            # step 2.2: check for the pyqt5-tools wheel (Windows only)
+            import distutils.sysconfig
+            pyqt5ToolsPath = os.path.join(
+                distutils.sysconfig.get_python_lib(True), "pyqt5-tools")
+            if os.path.exists(os.path.join(pyqt5ToolsPath, "designer.exe")):
+                path = pyqt5ToolsPath
     
     if not path:
-        # step 2.2: get the path from Qt
-        # Note: no Qt tools are to found there for PyQt 5.7.0
+        # step 3: get the path from Qt
+        # Note: no Qt tools are to be found there for PyQt 5.7.0
         path = QLibraryInfo.location(QLibraryInfo.BinariesPath)
         if not os.path.exists(path):
             path = ""
@@ -310,6 +319,48 @@
 ###############################################################################
 
 
+def versionToTuple(version):
+    """
+    Module function to convert a version string into a tuple.
+    
+    Note: A version string consists of non-negative decimals separated by "."
+    optionally followed by a suffix. Suffix is everything after the last
+    decimal.
+    
+    @param version version string
+    @type str
+    @return version tuple without the suffix
+    @rtype tuple of int
+    """
+    versionParts = []
+    
+    # step 1: extract suffix
+    version = re.split(r"[^\d.]", version)[0]
+    for part in version.split("."):
+        versionParts.append(int(part))
+    
+    return tuple(versionParts)
+
+
+def qVersionTuple():
+    """
+    Module function to get the Qt version as a tuple.
+    
+    @return Qt version as a tuple
+    @rtype tuple of int
+    """
+    return (
+        (QT_VERSION & 0xff0000) >> 16,
+        (QT_VERSION & 0xff00) >> 8,
+        QT_VERSION & 0xff,
+    )
+
+
+###############################################################################
+## functions for extended string handling
+###############################################################################
+
+
 def strGroup(txt, sep, groupLen=4):
     """
     Module function to group a string into sub-strings separated by a
--- a/Graphics/PixmapDiagram.py	Sat May 06 13:44:26 2017 +0200
+++ b/Graphics/PixmapDiagram.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QSize, QEvent, qVersion
+from PyQt5.QtCore import Qt, QSize, QEvent
 from PyQt5.QtGui import QPalette, QImage, QPixmap, QPainter, QFont, QColor
 from PyQt5.QtWidgets import QLabel, QSizePolicy, QScrollArea, QAction, QMenu, \
     QToolBar
@@ -22,6 +22,7 @@
 import UI.Config
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class PixmapDiagram(E5MainWindow):
@@ -187,7 +188,7 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = evt.angleDelta().y()
             else:
                 delta = evt.delta()
--- a/Graphics/SvgDiagram.py	Sat May 06 13:44:26 2017 +0200
+++ b/Graphics/SvgDiagram.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QSize, QEvent, qVersion
+from PyQt5.QtCore import Qt, QSize, QEvent
 from PyQt5.QtGui import QPalette, QPainter, QFont, QColor
 from PyQt5.QtWidgets import QSizePolicy, QScrollArea, QAction, QMenu, QToolBar
 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
@@ -21,6 +21,7 @@
 import UI.Config
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class SvgDiagram(E5MainWindow):
@@ -157,7 +158,7 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = evt.angleDelta().y()
             else:
                 delta = evt.delta()
--- a/Graphics/UMLGraphicsView.py	Sat May 06 13:44:26 2017 +0200
+++ b/Graphics/UMLGraphicsView.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,7 +10,7 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import pyqtSignal, Qt, QSignalMapper, QFileInfo, QEvent, \
-    QRectF, qVersion
+    QRectF
 from PyQt5.QtWidgets import QGraphicsView, QAction, QToolBar, QDialog
 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
 
@@ -25,6 +25,7 @@
 import UI.PixmapCache
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class UMLGraphicsView(E5GraphicsView):
@@ -601,7 +602,7 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = evt.angleDelta().y()
             else:
                 delta = evt.delta()
--- a/Helpviewer/AdBlock/AdBlockAccessHandler.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/AdBlock/AdBlockAccessHandler.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion, QByteArray
+from PyQt5.QtCore import QByteArray
 from PyQt5.QtNetwork import QNetworkAccessManager
 
 from E5Gui import E5MessageBox
@@ -17,6 +17,8 @@
 from Helpviewer.Network.SchemeAccessHandler import SchemeAccessHandler
 from Helpviewer.Network.EmptyNetworkReply import EmptyNetworkReply
 
+from Globals import qVersionTuple
+
 
 class AdBlockAccessHandler(SchemeAccessHandler):
     """
@@ -40,7 +42,7 @@
         if url.path() != "subscribe":
             return None
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery, QUrl
             title = QUrl.fromPercentEncoding(
                 QByteArray(QUrlQuery(url).queryItemValue("title").encode()))
--- a/Helpviewer/AdBlock/AdBlockRule.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/AdBlock/AdBlockRule.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,9 +11,11 @@
 
 import re
 
-from PyQt5.QtCore import Qt, QRegExp, QUrl, qVersion
+from PyQt5.QtCore import Qt, QRegExp, QUrl
 from PyQt5.QtNetwork import QNetworkRequest
 
+from Globals import qVersionTuple
+
 
 # Qt version < 4.8 has an issue; it will wrongly
 # count .co.uk (and others) as second-level domains
@@ -24,7 +26,7 @@
     @param url URL to extract domain from (QUrl)
     @return name of second level domain (string)
     """
-    if qVersion() >= "4.8.0":
+    if qVersionTuple() >= (4, 8, 0):
         topLevelDomain = url.topLevelDomain()
         urlHost = url.host()
         
--- a/Helpviewer/AdBlock/AdBlockSubscription.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/AdBlock/AdBlockSubscription.py	Sat Jun 03 13:08:50 2017 +0200
@@ -15,14 +15,14 @@
 import base64
 
 from PyQt5.QtCore import pyqtSignal, Qt, QObject, QByteArray, QDateTime, \
-    QUrl, QCryptographicHash, QFile, QIODevice, QTextStream, QDate, QTime, \
-    qVersion
+    QUrl, QCryptographicHash, QFile, QIODevice, QTextStream, QDate, QTime
 from PyQt5.QtNetwork import QNetworkReply
 
 from E5Gui import E5MessageBox
 
 import Utilities
 import Preferences
+from Globals import qVersionTuple
 
 
 class AdBlockSubscription(QObject):
@@ -113,7 +113,7 @@
         if url.path() != "subscribe":
             return
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             urlQuery = QUrlQuery(url)
             self.__title = QUrl.fromPercentEncoding(
@@ -185,7 +185,7 @@
         if self.__lastUpdate.isValid():
             queryItems.append(("lastUpdate",
                                self.__lastUpdate.toString(Qt.ISODate)))
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             query = QUrlQuery()
             query.setQueryItems(queryItems)
--- a/Helpviewer/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListDelegate.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListDelegate.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,10 +10,13 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, QSize, QRect, qVersion
+from PyQt5.QtCore import Qt, QSize, QRect
 from PyQt5.QtGui import QFontMetrics, QPalette, QFont
 from PyQt5.QtWidgets import QStyle, QStyledItemDelegate, QApplication
-if qVersion() >= "5.0.0":
+
+from Globals import qVersionTuple
+
+if qVersionTuple() >= (5, 0, 0):
     from PyQt5.QtWidgets import QStyleOptionViewItem
 else:
     from PyQt5.QtWidgets import QStyleOptionViewItemV4 as QStyleOptionViewItem
--- a/Helpviewer/HelpBrowserWV.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/HelpBrowserWV.py	Sat Jun 03 13:08:50 2017 +0200
@@ -18,7 +18,7 @@
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, \
     QUrl, QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, \
-    QRect, QFile, QPoint, QByteArray, qVersion
+    QRect, QFile, QPoint, QByteArray
 from PyQt5.QtGui import QDesktopServices, QClipboard, QMouseEvent, QColor, \
     QPalette
 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QInputDialog, \
@@ -40,6 +40,7 @@
 import Preferences
 import UI.PixmapCache
 import Globals
+from Globals import qVersionTuple
 import Utilities
 
 try:
@@ -601,7 +602,7 @@
                 if cert in localCAList:
                     return True
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             for cert in certList:
                 if cert.isBlacklisted():
                     return False
@@ -1655,7 +1656,7 @@
 ##        if searchUrl.scheme() != "http":
 ##            return
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             searchUrlQuery = QUrlQuery(searchUrl)
         searchEngines = {}
@@ -1670,18 +1671,18 @@
             elif type_ == "text":
                 if inputField == element:
                     value = "{searchTerms}"
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     searchUrlQuery.addQueryItem(name, value)
                 else:
                     searchUrl.addQueryItem(name, value)
             elif type_ == "checkbox" or type_ == "radio":
                 if inputField.evaluateJavaScript("this.checked"):
-                    if qVersion() >= "5.0.0":
+                    if qVersionTuple() >= (5, 0, 0):
                         searchUrlQuery.addQueryItem(name, value)
                     else:
                         searchUrl.addQueryItem(name, value)
             elif type_ == "hidden":
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     searchUrlQuery.addQueryItem(name, value)
                 else:
                     searchUrl.addQueryItem(name, value)
@@ -1696,7 +1697,7 @@
             
             options = selectField.findAll("option")
             value = options.at(selectedIndex).toPlainText()
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 searchUrlQuery.addQueryItem(name, value)
             else:
                 searchUrl.addQueryItem(name, value)
@@ -1713,7 +1714,7 @@
                 return
             
             if searchEngines[searchEngine] != "":
-                if qVersion() >= "5.0.0":
+                if qVersionTuple() >= (5, 0, 0):
                     searchUrlQuery.addQueryItem(
                         searchEngines[searchEngine], searchEngine)
                 else:
@@ -1733,14 +1734,14 @@
         if not ok:
             return
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             searchUrl.setQuery(searchUrlQuery)
         
         from .OpenSearch.OpenSearchEngine import OpenSearchEngine
         engine = OpenSearchEngine()
         engine.setName(engineName)
         engine.setDescription(engineName)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             engine.setSearchUrlTemplate(
                 searchUrl.toDisplayString(QUrl.FullyDecoded))
         else:
@@ -1872,7 +1873,7 @@
         
         @param evt reference to the wheel event (QWheelEvent)
         """
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             delta = evt.angleDelta().y()
         else:
             delta = evt.delta()
--- a/Helpviewer/HelpDocsInstaller.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/HelpDocsInstaller.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,12 +12,14 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, qVersion, QThread, Qt, QMutex, \
-    QDateTime, QDir, QLibraryInfo, QFileInfo
+from PyQt5.QtCore import pyqtSignal, QThread, Qt, QMutex, QDateTime, QDir, \
+    QLibraryInfo, QFileInfo
 from PyQt5.QtHelp import QHelpEngineCore
 
 from eric6config import getConfig
 
+from Globals import qVersionTuple
+
 
 class HelpDocsInstaller(QThread):
     """
@@ -134,7 +136,7 @@
                 docsPathList = QDir.fromNativeSeparators(docsPath).split("/")
                 docsPath = os.sep.join(
                     docsPathList[:-3] +
-                    ["Docs", "Qt-{0}".format(qVersion()[:3])])
+                    ["Docs", "Qt-{0}.{1}".format(*qVersionTuple())])
             docsPath = QDir(docsPath)
         else:
             # unsupported Qt version
--- a/Helpviewer/HelpWindow.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/HelpWindow.py	Sat Jun 03 13:08:50 2017 +0200
@@ -3445,6 +3445,46 @@
         """
         return self.searchEdit.openSearchManager()
     
+    def __createTextEncodingAction(self, codec, defaultCodec, parentMenu):
+        """
+        Private method to create an action for the text encoding menu.
+        
+        @param codec name of the codec to create an action for
+        @type str
+        @param defaultCodec name of the default codec
+        @type str
+        @param parentMenu reference to the parent menu
+        @type QMenu
+        """
+        act = QAction(codec, parentMenu)
+        act.setData(codec)
+        act.setCheckable(True)
+        if defaultCodec == codec:
+            act.setChecked(True)
+        
+        parentMenu.addAction(act)
+    
+    def __createTextEncodingSubmenu(self, title, codecNames, parentMenu):
+        """
+        Private method to create a text encoding sub menu.
+        
+        @param title title of the menu
+        @type str
+        @param codecNames list of codec names for the menu
+        @type list of str
+        @param parentMenu reference to the parent menu
+        @type QMenu
+        """
+        if codecNames:
+            defaultCodec = \
+                QWebSettings.globalSettings().defaultTextEncoding().lower()
+            
+            menu = QMenu(title, parentMenu)
+            for codec in codecNames:
+                self.__createTextEncodingAction(codec, defaultCodec, menu)
+            
+            parentMenu.addMenu(menu)
+    
     def __aboutToShowTextEncodingMenu(self):
         """
         Private slot to populate the text encoding menu.
@@ -3452,8 +3492,11 @@
         self.__textEncodingMenu.clear()
         
         codecs = []
-        for codec in QTextCodec.availableCodecs():
-            codecs.append(str(codec, encoding="utf-8").lower())
+        for mib in QTextCodec.availableMibs():
+            codec = str(QTextCodec.codecForMib(mib).name(),
+                        encoding="utf-8").lower()
+            if codec not in codecs:
+                codecs.append(codec)
         codecs.sort()
         
         defaultTextEncoding = \
@@ -3461,47 +3504,44 @@
         if defaultTextEncoding in codecs:
             currentCodec = defaultTextEncoding
         else:
-            currentCodec = ""
-        
-        isDefaultEncodingUsed = True
-        isoMenu = QMenu(self.tr("ISO"), self.__textEncodingMenu)
-        winMenu = QMenu(self.tr("Windows"), self.__textEncodingMenu)
-        isciiMenu = QMenu(self.tr("ISCII"), self.__textEncodingMenu)
-        uniMenu = QMenu(self.tr("Unicode"), self.__textEncodingMenu)
-        otherMenu = QMenu(self.tr("Other"), self.__textEncodingMenu)
-        ibmMenu = QMenu(self.tr("IBM"), self.__textEncodingMenu)
+            currentCodec = "system"
+        
+        isoCodecs = []
+        winCodecs = []
+        isciiCodecs = []
+        uniCodecs = []
+        ibmCodecs = []
+        otherCodecs = []
         
         for codec in codecs:
-            if codec.startswith(("iso", "latin", "csisolatin")):
-                act = isoMenu.addAction(codec)
-            elif codec.startswith(("windows", "cp1")):
-                act = winMenu.addAction(codec)
+            if codec.startswith(("iso", "latin")):
+                isoCodecs.append(codec)
+            elif codec.startswith(("windows")):
+                winCodecs.append(codec)
             elif codec.startswith("iscii"):
-                act = isciiMenu.addAction(codec)
+                isciiCodecs.append(codec)
             elif codec.startswith("utf"):
-                act = uniMenu.addAction(codec)
-            elif codec.startswith(("ibm", "csibm", "cp")):
-                act = ibmMenu.addAction(codec)
+                uniCodecs.append(codec)
+            elif codec.startswith(("ibm")):
+                ibmCodecs.append(codec)
+            elif codec == "system":
+                self.__createTextEncodingAction(codec, currentCodec,
+                                                self.__textEncodingMenu)
             else:
-                act = otherMenu.addAction(codec)
-            
-            act.setData(codec)
-            act.setCheckable(True)
-            if currentCodec == codec:
-                act.setChecked(True)
-                isDefaultEncodingUsed = False
-        
-        act = self.__textEncodingMenu.addAction(
-            self.tr("Default Encoding"))
-        act.setData("")
-        act.setCheckable(True)
-        act.setChecked(isDefaultEncodingUsed)
-        self.__textEncodingMenu.addMenu(uniMenu)
-        self.__textEncodingMenu.addMenu(isoMenu)
-        self.__textEncodingMenu.addMenu(winMenu)
-        self.__textEncodingMenu.addMenu(ibmMenu)
-        self.__textEncodingMenu.addMenu(isciiMenu)
-        self.__textEncodingMenu.addMenu(otherMenu)
+                otherCodecs.append(codec)
+        
+        self.__createTextEncodingSubmenu(self.tr("ISO"), isoCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Unicode"), uniCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Windows"), winCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("ISCII"), isciiCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("IBM"), ibmCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Other"), otherCodecs,
+                                         self.__textEncodingMenu)
     
     def __setTextEncoding(self, act):
         """
--- a/Helpviewer/Network/NetworkAccessManager.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/Network/NetworkAccessManager.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, QByteArray, qVersion
+from PyQt5.QtCore import pyqtSignal, QByteArray
 from PyQt5.QtWidgets import QDialog
 from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, \
     QNetworkReply
@@ -27,6 +27,7 @@
 
 import Preferences
 import Utilities
+from Globals import qVersionTuple
 
 
 class NetworkAccessManager(QNetworkAccessManager):
@@ -267,7 +268,7 @@
             diskCache = NetworkDiskCache(self)
             location = os.path.join(
                 Utilities.getConfigDir(), "browser", 'cache',
-                "{0}-Qt{1}".format(qWebKitVersion(), qVersion()))
+                "{0}-Qt{1}.{2}".format(qWebKitVersion(), *qVersionTuple()))
             size = Preferences.getHelp("DiskCacheSize") * 1024 * 1024
             diskCache.setCacheDirectory(location)
             diskCache.setMaximumCacheSize(size)
--- a/Helpviewer/OpenSearch/OpenSearchEngine.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/OpenSearch/OpenSearchEngine.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,7 +13,7 @@
 import json
 
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, \
-    QBuffer, QIODevice, QObject, qVersion
+    QBuffer, QIODevice, QObject
 from PyQt5.QtGui import QImage
 from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, \
     QNetworkReply
@@ -22,6 +22,7 @@
 
 import Preferences
 import Utilities
+from Globals import qVersionTuple
 
 
 class OpenSearchEngine(QObject):
@@ -179,7 +180,7 @@
             .encode("utf-8"))
         
         if self.__searchMethod != "post":
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 from PyQt5.QtCore import QUrlQuery
                 urlQuery = QUrlQuery(ret)
                 for parameter in self._searchParameters:
@@ -234,7 +235,7 @@
             searchTerm, self._suggestionsUrlTemplate).encode("utf-8")))
         
         if self.__searchMethod != "post":
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 from PyQt5.QtCore import QUrlQuery
                 urlQuery = QUrlQuery(ret)
                 for parameter in self._suggestionsParameters:
--- a/Helpviewer/Passwords/PasswordManager.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/Passwords/PasswordManager.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,7 +12,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSignal, QObject, QByteArray, QUrl, \
-    QCoreApplication, QXmlStreamReader, qVersion
+    QCoreApplication, QXmlStreamReader
 from PyQt5.QtWidgets import QApplication
 from PyQt5.QtNetwork import QNetworkRequest
 from PyQt5.QtWebKit import QWebSettings
@@ -25,6 +25,7 @@
 import Utilities
 import Utilities.crypto
 import Preferences
+from Globals import qVersionTuple
 
 
 class PasswordManager(QObject):
@@ -437,7 +438,7 @@
         @return stripped URL (QUrl)
         """
         cleanUrl = QUrl(url)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             cleanUrl.setQuery("")
         else:
             cleanUrl.setQueryItems([])
@@ -466,7 +467,7 @@
         if boundary is not None:
             args = self.__extractMultipartQueryItems(data, boundary)
         else:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 from PyQt5.QtCore import QUrlQuery
                 argsUrl = QUrl.fromEncoded(
                     QByteArray(b"foo://bar.com/?" + QUrl.fromPercentEncoding(
--- a/Helpviewer/SiteInfo/SiteInfoDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/SiteInfo/SiteInfoDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, QUrl, Qt, QFile, qVersion
+from PyQt5.QtCore import pyqtSlot, QUrl, Qt, QFile
 from PyQt5.QtGui import QPixmap, QCursor, QPainter, QColor, QBrush
 from PyQt5.QtWidgets import QDialog, QTreeWidgetItem, QGraphicsScene, QMenu, \
     QApplication, QListWidgetItem
@@ -29,6 +29,7 @@
 from ..Download.DownloadUtilities import dataString
 
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class SiteInfoDialog(QDialog, Ui_SiteInfoDialog):
@@ -108,8 +109,9 @@
         
         # populate the Security info and the Security tab
         if sslInfo and \
-           ((qVersion() >= "5.0.0" and not sslInfo[0].isBlacklisted()) or
-                (qVersion() < "5.0.0" and sslInfo[0].isValid())):
+           ((qVersionTuple() >= (5, 0, 0) and
+             not sslInfo[0].isBlacklisted()) or
+                (qVersionTuple() < (5, 0, 0) and sslInfo[0].isValid())):
             self.securityLabel.setStyleSheet(SiteInfoDialog.okStyle)
             self.securityLabel.setText('<b>Connection is encrypted.</b>')
             if SSL:
--- a/Helpviewer/UrlBar/UrlBar.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/UrlBar/UrlBar.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,7 +13,7 @@
 except NameError:
     pass
 
-from PyQt5.QtCore import pyqtSlot, Qt, QPointF, QUrl, QDateTime, qVersion
+from PyQt5.QtCore import pyqtSlot, Qt, QPointF, QUrl, QDateTime
 from PyQt5.QtGui import QColor, QPalette, QLinearGradient, QIcon
 from PyQt5.QtWidgets import QDialog, QApplication
 try:
@@ -34,6 +34,7 @@
 import UI.PixmapCache
 import Preferences
 import Utilities
+from Globals import qVersionTuple
 
 
 class UrlBar(E5LineEdit):
@@ -187,14 +188,14 @@
                QSslCertificate is not None:
                 sslInfo = self.__browser.page().getSslCertificate()
                 if sslInfo is not None:
-                    if qVersion() >= "5.0.0":
+                    if qVersionTuple() >= (5, 0, 0):
                         org = Utilities.decodeString(", ".join(
                             sslInfo.subjectInfo(QSslCertificate.Organization)))
                     else:
                         org = Utilities.decodeString(
                             sslInfo.subjectInfo(QSslCertificate.Organization))
                     if org == "":
-                        if qVersion() >= "5.0.0":
+                        if qVersionTuple() >= (5, 0, 0):
                             cn = Utilities.decodeString(", ".join(
                                 sslInfo.subjectInfo(
                                     QSslCertificate.CommonName)))
@@ -208,7 +209,7 @@
                             org = self.tr("Unknown")
                     self.__sslLabel.setText(" {0} ".format(org))
                     self.__sslLabel.setVisible(True)
-                    if qVersion() >= "5.0.0":
+                    if qVersionTuple() >= (5, 0, 0):
                         valid = not sslInfo.isBlacklisted()
                     else:
                         valid = sslInfo.isValid()
--- a/Helpviewer/VirusTotal/VirusTotalApi.py	Sat May 06 13:44:26 2017 +0200
+++ b/Helpviewer/VirusTotal/VirusTotalApi.py	Sat Jun 03 13:08:50 2017 +0200
@@ -16,12 +16,13 @@
 
 import json
 
-from PyQt5.QtCore import QObject, QUrl, QByteArray, pyqtSignal, qVersion
+from PyQt5.QtCore import QObject, QUrl, QByteArray, pyqtSignal
 from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
 
 from E5Gui import E5MessageBox
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class VirusTotalAPI(QObject):
@@ -268,7 +269,7 @@
             ("ip", ipAddress),
         ]
         url = QUrl(self.GetIpAddressReportUrl)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             query = QUrlQuery()
             query.setQueryItems(queryItems)
@@ -330,7 +331,7 @@
             ("domain", domain),
         ]
         url = QUrl(self.GetDomainReportUrl)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             query = QUrlQuery()
             query.setQueryItems(queryItems)
--- a/IconEditor/IconEditorWindow.py	Sat May 06 13:44:26 2017 +0200
+++ b/IconEditor/IconEditorWindow.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,7 +12,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSignal, Qt, QSize, QSignalMapper, QFileInfo, \
-    QFile, QEvent, qVersion
+    QFile, QEvent
 from PyQt5.QtGui import QPalette, QImage, QImageReader, QImageWriter, \
     QKeySequence
 from PyQt5.QtWidgets import QScrollArea, QLabel, QDockWidget, QWhatsThis
@@ -28,6 +28,7 @@
 import UI.Config
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class IconEditorWindow(E5MainWindow):
@@ -1352,7 +1353,7 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = evt.angleDelta().y()
             else:
                 delta = evt.delta()
--- a/Network/IRC/IrcMessageEdit.py	Sat May 06 13:44:26 2017 +0200
+++ b/Network/IRC/IrcMessageEdit.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,10 +9,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt, qVersion
+from PyQt5.QtCore import Qt
 
 from E5Gui.E5LineEdit import E5LineEdit, E5ClearableLineEdit
 
+from Globals import qVersionTuple
+
 
 class IrcMessageEdit(E5ClearableLineEdit):
     """
@@ -75,7 +77,7 @@
         
         @param evt reference to the wheel event (QWheelEvent)
         """
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             delta = evt.angleDelta().y()
         else:
             delta = evt.delta()
--- a/PluginManager/PluginRepositoryDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/PluginManager/PluginRepositoryDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -16,7 +16,7 @@
 import glob
 
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFile, QIODevice, QUrl, \
-    QProcess, QPoint
+    QProcess, QPoint, QCoreApplication
 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QAbstractButton, \
     QTreeWidgetItem, QDialog, QVBoxLayout, QMenu
 from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, \
@@ -749,39 +749,7 @@
         """
         Private slot to cleanup the plug-in downloads area.
         """
-        downloadPath = Preferences.getPluginManager("DownloadPath")
-        downloads = {}  # plug-in name as key, file name as value
-        
-        # step 1: extract plug-ins and downloaded files
-        for pluginFile in os.listdir(downloadPath):
-            if not os.path.isfile(os.path.join(downloadPath, pluginFile)):
-                continue
-            
-            pluginName = pluginFile.rsplit("-", 1)[0]
-            if pluginName not in downloads:
-                downloads[pluginName] = []
-            downloads[pluginName].append(pluginFile)
-        
-        # step 2: delete old entries
-        for pluginName in downloads:
-            downloads[pluginName].sort()
-        
-            if pluginName in self.__hiddenPlugins and \
-                    not Preferences.getPluginManager("KeepHidden"):
-                removeFiles = downloads[pluginName]
-            else:
-                removeFiles = downloads[pluginName][
-                    :-Preferences.getPluginManager("KeepGenerations")]
-            for removeFile in removeFiles:
-                try:
-                    os.remove(os.path.join(downloadPath, removeFile))
-                except (IOError, OSError) as err:
-                    E5MessageBox.critical(
-                        self,
-                        self.tr("Cleanup of Plugin Downloads"),
-                        self.tr("""<p>The plugin download <b>{0}</b> could"""
-                                """ not be deleted.</p><p>Reason: {1}</p>""")
-                        .format(removeFile, str(err)))
+        PluginRepositoryDownloadCleanup()
 
 
 class PluginRepositoryDialog(QDialog):
@@ -873,3 +841,51 @@
                 self.tr('OK'))
         
         self.close()
+
+
+def PluginRepositoryDownloadCleanup(quiet=False):
+    """
+    Module function to clean up the plug-in downloads area.
+    
+    @param quiet flag indicating quiet operations
+    @type bool
+    """
+    downloadPath = Preferences.getPluginManager("DownloadPath")
+    downloads = {}  # plug-in name as key, file name as value
+    
+    # step 1: extract plug-ins and downloaded files
+    for pluginFile in os.listdir(downloadPath):
+        if not os.path.isfile(os.path.join(downloadPath, pluginFile)):
+            continue
+        
+        pluginName = pluginFile.rsplit("-", 1)[0]
+        if pluginName not in downloads:
+            downloads[pluginName] = []
+        downloads[pluginName].append(pluginFile)
+    
+    # step 2: delete old entries
+    hiddenPlugins = Preferences.getPluginManager("HiddenPlugins")
+    for pluginName in downloads:
+        downloads[pluginName].sort()
+    
+        if pluginName in hiddenPlugins and \
+                not Preferences.getPluginManager("KeepHidden"):
+            removeFiles = downloads[pluginName]
+        else:
+            removeFiles = downloads[pluginName][
+                :-Preferences.getPluginManager("KeepGenerations")]
+        for removeFile in removeFiles:
+            try:
+                os.remove(os.path.join(downloadPath, removeFile))
+            except (IOError, OSError) as err:
+                if not quiet:
+                    E5MessageBox.critical(
+                        None,
+                        QCoreApplication.translate(
+                            "PluginRepositoryWidget",
+                            "Cleanup of Plugin Downloads"),
+                        QCoreApplication.translate(
+                            "PluginRepositoryWidget",
+                            """<p>The plugin download <b>{0}</b> could"""
+                            """ not be deleted.</p><p>Reason: {1}</p>""")
+                        .format(removeFile, str(err)))
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sat Jun 03 13:08:50 2017 +0200
@@ -114,6 +114,8 @@
     @type str
     @param lineFlags list of line flags to check against
     @type list of str
+    @return flag indicating to ignore the code
+    @rtype bool
     """
     if lineFlags:
         
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Sat Jun 03 13:08:50 2017 +0200
@@ -122,7 +122,8 @@
         "D221", "D222",
         "D231", "D232", "D234", "D235", "D236", "D237", "D238", "D239",
         "D242", "D243", "D244", "D245", "D246", "D247",
-        "D250", "D251",
+        "D250", "D251", "D252", "D253",
+        "D260", "D261", "D262", "D263",
         
         "D901",
     ]
@@ -215,6 +216,7 @@
                     (self.__checkClassDocstring, ("D104", "D205")),
                     (self.__checkEricNoBlankBeforeAndAfterClassOrFunction,
                      ("D242", "D243")),
+                    (self.__checkEricSignal, ("D260", "D261", "D262", "D263")),
                 ],
                 "methodDocstring": [
                     (self.__checkEricSummary, ("D232")),
@@ -228,7 +230,8 @@
                      ("D236", "D237", "D238", "D239")),
                     (self.__checkEricNoBlankBeforeAndAfterClassOrFunction,
                      ("D244", "D245")),
-                    (self.__checkEricException, ("D250", "D251")),
+                    (self.__checkEricException,
+                     ("D250", "D251", "D252", "D253")),
                 ],
                 "docstring": [
                     (self.__checkTripleDoubleQuotes, ("D111",)),
@@ -1127,6 +1130,10 @@
         Private method to check, that docstrings contain an &#64;exception line
         if they raise an exception and don't otherwise.
         
+        Note: This method also checks the raised and documented exceptions for
+        completeness (i.e. raised exceptions that are not documented or
+        documented exceptions that are not raised)
+        
         @param docstringContext docstring context (DocStyleContext)
         @param context context of the docstring (DocStyleContext)
         """
@@ -1135,20 +1142,106 @@
         
         tokens = list(
             tokenize.generate_tokens(StringIO(context.ssource()).readline))
-        exception = [tokens[i + 1][0] for i, token in enumerate(tokens)
-                     if token[1] == "raise"]
+        exceptions = set()
+        raisedExceptions = set()
+        tokensLen = len(tokens)
+        for i, token in enumerate(tokens):
+            if token[1] == "raise":
+                exceptions.add(tokens[i + 1][0])
+                if tokens[i + 1][0] == tokenize.NAME:
+                    if tokensLen > (i + 2) and \
+                       tokens[i + 2][1] == ".":
+                        raisedExceptions.add("{0}.{1}".format(
+                            tokens[i + 1][1], tokens[i + 3][1]))
+                    else:
+                        raisedExceptions.add(tokens[i + 1][1])
+        
         if "@exception" not in docstringContext.ssource() and \
                 "@throws" not in docstringContext.ssource() and \
                 "@raise" not in docstringContext.ssource():
-            if (set(exception) -
+            if (exceptions -
                     {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} !=
                     set()):
                 self.__error(docstringContext.end(), 0, "D250")
         else:
-            if (set(exception) -
+            if (exceptions -
                     {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} ==
                     set()):
                 self.__error(docstringContext.end(), 0, "D251")
+            else:
+                # step 1: extract documented exceptions
+                documentedExceptions = set()
+                for line in docstringContext.source():
+                    line = line.strip()
+                    if line.startswith(("@exception", "@throws", "@raise")):
+                        exceptionTokens = line.split(None, 2)
+                        if len(exceptionTokens) >= 2:
+                            documentedExceptions.add(exceptionTokens[1])
+                
+                # step 2: report undocumented exceptions
+                for exception in raisedExceptions:
+                    if exception not in documentedExceptions:
+                        self.__error(docstringContext.end(), 0, "D252",
+                                     exception)
+                
+                # step 3: report undefined signals
+                for exception in documentedExceptions:
+                    if exception not in raisedExceptions:
+                        self.__error(docstringContext.end(), 0, "D253",
+                                     exception)
+    
+    def __checkEricSignal(self, docstringContext, context):
+        """
+        Private method to check, that docstrings contain an &#64;signal line
+        if they define signals and don't otherwise.
+        
+        Note: This method also checks the defined and documented signals for
+        completeness (i.e. defined signals that are not documented or
+        documented signals that are not defined)
+        
+        @param docstringContext docstring context (DocStyleContext)
+        @param context context of the docstring (DocStyleContext)
+        """
+        if docstringContext is None:
+            return
+        
+        tokens = list(
+            tokenize.generate_tokens(StringIO(context.ssource()).readline))
+        definedSignals = set()
+        for i, token in enumerate(tokens):
+            if token[1] in ("pyqtSignal", "Signal"):
+                if tokens[i - 1][1] == "." and tokens[i - 2][1] == "QtCore":
+                    definedSignals.add(tokens[i - 4][1])
+                elif tokens[i - 1][1] == "=":
+                    definedSignals.add(tokens[i - 2][1])
+        
+        if "@signal" not in docstringContext.ssource() and definedSignals:
+            self.__error(docstringContext.end(), 0, "D260")
+        elif "@signal" in docstringContext.ssource():
+            if not definedSignals:
+                self.__error(docstringContext.end(), 0, "D261")
+            else:
+                # step 1: extract documented signals
+                documentedSignals = set()
+                for line in docstringContext.source():
+                    line = line.strip()
+                    if line.startswith("@signal"):
+                        signalTokens = line.split(None, 2)
+                        if len(signalTokens) >= 2:
+                            signal = signalTokens[1]
+                            if "(" in signal:
+                                signal = signal.split("(", 1)[0]
+                            documentedSignals.add(signal)
+                
+                # step 2: report undocumented signals
+                for signal in definedSignals:
+                    if signal not in documentedSignals:
+                        self.__error(docstringContext.end(), 0, "D262", signal)
+                
+                # step 3: report undefined signals
+                for signal in documentedSignals:
+                    if signal not in definedSignals:
+                        self.__error(docstringContext.end(), 0, "D263", signal)
     
     def __checkEricBlankAfterSummary(self, docstringContext, context):
         """
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sat Jun 03 13:08:50 2017 +0200
@@ -370,6 +370,24 @@
         "DocStyleChecker",
         "docstring contains a @exception line but function/method doesn't"
         " raise an exception"),
+    "D252": QCoreApplication.translate(
+        "DocStyleChecker",
+        "raised exception '{0}' is not documented in docstring"),
+    "D253": QCoreApplication.translate(
+        "DocStyleChecker",
+        "documented exception '{0}' is not raised"),
+    "D260": QCoreApplication.translate(
+        "DocStyleChecker",
+        "docstring does not contain a @signal line but class defines signals"),
+    "D261": QCoreApplication.translate(
+        "DocStyleChecker",
+        "docstring contains a @signal line but class doesn't define signals"),
+    "D262": QCoreApplication.translate(
+        "DocStyleChecker",
+        "defined signal '{0}' is not documented in docstring"),
+    "D263": QCoreApplication.translate(
+        "DocStyleChecker",
+        "documented signal '{0}' is not defined"),
     
     "D901": QCoreApplication.translate(
         "DocStyleChecker", "{0}: {1}"),
@@ -703,6 +721,10 @@
     "E901": ["SyntaxError", "Invalid Syntax"],
     "E902": ["IOError"],
     "D232": ["public"],
+    "D252": ["RuntimeError"],
+    "D253": ["RuntimeError"],
+    "D262": ["buttonClicked"],
+    "D263": ["buttonClicked"],
     "D901": ["SyntaxError", "Invalid Syntax"],
     "C101": ["foo.bar", "42"],
     "C111": [42],
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -17,8 +17,8 @@
 import re
 import collections
 
-from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QDate, QProcess, QTimer, \
-    QRegExp, QSize, QPoint, QFileInfo
+from PyQt5.QtCore import pyqtSlot, Qt, QDate, QProcess, QTimer, QRegExp, \
+    QSize, QPoint, QFileInfo
 from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, \
     QIcon, QTextCursor
 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \
@@ -35,6 +35,7 @@
 import UI.PixmapCache
 import Preferences
 import Utilities
+from Globals import qVersionTuple
 
 COLORNAMES = ["blue", "darkgreen", "red", "green", "darkblue", "purple",
               "cyan", "olive", "magenta", "darkred", "darkmagenta",
@@ -243,7 +244,7 @@
         """
         self.__actionsMenu = QMenu()
         self.__actionsMenu.setTearOffEnabled(True)
-        if qVersion() >= "5.1.0":
+        if qVersionTuple() >= (5, 1, 0):
             self.__actionsMenu.setToolTipsVisible(True)
         else:
             self.__actionsMenu.hovered.connect(self.__actionsMenuHovered)
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -16,7 +16,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QProcess, QTimer, QSize
+from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer, QSize
 from PyQt5.QtGui import QTextCursor, QCursor
 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QMenu, QHeaderView, \
     QTreeWidgetItem, QLineEdit, QToolTip
@@ -31,6 +31,7 @@
 
 import Preferences
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class HgStatusDialog(QWidget, Ui_HgStatusDialog):
@@ -129,7 +130,7 @@
         """
         self.__actionsMenu = QMenu()
         self.__actionsMenu.setTearOffEnabled(True)
-        if qVersion() >= "5.1.0":
+        if qVersionTuple() >= (5, 1, 0):
             self.__actionsMenu.setToolTipsVisible(True)
         else:
             self.__actionsMenu.hovered.connect(self.__actionsMenuHovered)
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import QFileInfo, QRegExp, Qt, pyqtSlot, qVersion
+from PyQt5.QtCore import QFileInfo, QRegExp, Qt, pyqtSlot
 from PyQt5.QtGui import QClipboard, QTextCursor
 from PyQt5.QtWidgets import QWidget, QDialog, QApplication, QDialogButtonBox, \
     QVBoxLayout, QTableWidgetItem
@@ -25,6 +25,7 @@
 
 import Utilities
 import Preferences
+from Globals import qVersionTuple
 
 
 class QRegExpWizardWidget(QWidget, Ui_QRegExpWizardWidget):
@@ -81,7 +82,7 @@
         self.syntaxCombo.addItem("Unix Wildcard", QRegExp.WildcardUnix)
         self.syntaxCombo.addItem("Fixed String", QRegExp.FixedString)
         self.syntaxCombo.addItem("W3C XML Schema 1.1", QRegExp.W3CXmlSchema11)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.syntaxCombo.setCurrentIndex(1)
         
         self.saveButton = self.buttonBox.addButton(
@@ -646,8 +647,8 @@
                 istring, reVar, os.linesep)
         syntax = self.syntaxCombo.itemData(self.syntaxCombo.currentIndex())
         needPatternSyntax = True
-        if qVersion() < "5.0.0" and syntax == QRegExp.RegExp or \
-           qVersion() >= "5.0.0" and syntax == QRegExp.RegExp2:
+        if qVersionTuple() < (5, 0, 0) and syntax == QRegExp.RegExp or \
+           qVersionTuple() >= (5, 0, 0) and syntax == QRegExp.RegExp2:
             # default value selected
             needPatternSyntax = False
         if needPatternSyntax:
--- a/Preferences/ConfigurationDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,8 +12,7 @@
 import os
 import types
 
-from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot, \
-    qVersion
+from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot
 from PyQt5.QtGui import QPixmap
 from PyQt5.QtWidgets import QSizePolicy, QSpacerItem, QWidget, QTreeWidget, \
     QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, \
@@ -24,7 +23,7 @@
 from E5Gui import E5MessageBox
 from E5Gui.E5MainWindow import E5MainWindow
 
-from Globals import isMacPlatform
+from Globals import isMacPlatform, qVersionTuple
 
 import Preferences
 
@@ -341,7 +340,7 @@
                     [self.tr("VirusTotal Interface"), "virustotal.png",
                      "HelpVirusTotalPage", "0webBrowserPage", None],
                 })
-                if qVersion() >= "5.8.0":
+                if qVersionTuple() >= (5, 8, 0):
                     self.configItems.update({
                         "webBrowserSpellCheckingPage":
                         [self.tr("Spell checking"),
@@ -465,7 +464,7 @@
                  "HelpVirusTotalPage", None, None],
             }
             
-            if qVersion() >= "5.8.0":
+            if qVersionTuple() >= (5, 8, 0):
                 self.configItems.update({
                     "webBrowserSpellCheckingPage":
                     [self.tr("Spell checking"),
--- a/Preferences/ConfigurationPages/EditorHighlightersPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorHighlightersPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,13 +13,14 @@
 
 from pygments.lexers import get_all_lexers
 
-from PyQt5.QtCore import Qt, pyqtSlot, qVersion
+from PyQt5.QtCore import Qt, pyqtSlot
 from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorHighlightersPage import Ui_EditorHighlightersPage
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class EditorHighlightersPage(ConfigurationPageBase, Ui_EditorHighlightersPage):
@@ -39,7 +40,7 @@
         self.editorLexerList.headerItem().setText(
             self.editorLexerList.columnCount(), "")
         header = self.editorLexerList.header()
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionResizeMode(QHeaderView.ResizeToContents)
         else:
             header.setResizeMode(QHeaderView.ResizeToContents)
--- a/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSlot, Qt, QFileInfo, QFile, QIODevice, qVersion
+from PyQt5.QtCore import pyqtSlot, Qt, QFileInfo, QFile, QIODevice
 from PyQt5.QtGui import QPalette, QFont
 from PyQt5.QtWidgets import QColorDialog, QFontDialog, QInputDialog, QMenu
 
@@ -19,6 +19,7 @@
 from E5Gui import E5MessageBox, E5FileDialog
 
 import Preferences
+from Globals import qVersionTuple
 
 try:
     MonospacedFontsOption = QFontDialog.MonospacedFonts
@@ -47,7 +48,7 @@
         self.setupUi(self)
         self.setObjectName("EditorHighlightingStylesPage")
         
-        if qVersion() < "5.0.0":
+        if qVersionTuple() < (5, 0, 0):
             self.monospacedButton.setChecked(False)
             self.monospacedButton.hide()
         
--- a/Preferences/ConfigurationPages/EditorStylesPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorStylesPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -108,6 +108,8 @@
             Preferences.getEditor("CustomSelectionColours"))
         self.extentSelEolCheckBox.setChecked(
             Preferences.getEditor("ExtendSelectionToEol"))
+        self.debugMarkerBackgroundCheckBox.setChecked(
+            Preferences.getEditor("LineMarkersBackground"))
         
         self.initColour("CaretForeground", self.caretForegroundButton,
                         Preferences.getEditorColour)
@@ -117,6 +119,10 @@
                         Preferences.getEditorColour)
         self.initColour("SelectionBackground", self.selectionBackgroundButton,
                         Preferences.getEditorColour, hasAlpha=True)
+        self.initColour("CurrentMarker", self.currentLineMarkerButton,
+                        Preferences.getEditorColour, hasAlpha=True)
+        self.initColour("ErrorMarker", self.errorMarkerButton,
+                        Preferences.getEditorColour, hasAlpha=True)
         self.initColour("MarginsForeground", self.marginsForegroundButton,
                         Preferences.getEditorColour)
         self.initColour("MarginsBackground", self.marginsBackgroundButton,
@@ -292,6 +298,9 @@
             "CustomSelectionColours", self.customSelColourCheckBox.isChecked())
         Preferences.setEditor(
             "ExtendSelectionToEol", self.extentSelEolCheckBox.isChecked())
+        Preferences.setEditor(
+            "LineMarkersBackground",
+            self.debugMarkerBackgroundCheckBox.isChecked())
         
         Preferences.setEditor(
             "CaretWidth", self.caretWidthSpinBox.value())
--- a/Preferences/ConfigurationPages/EditorStylesPage.ui	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorStylesPage.ui	Sat Jun 03 13:08:50 2017 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>655</width>
-    <height>2500</height>
+    <height>2530</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_8">
@@ -705,6 +705,71 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Debugging Line Markers</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_10">
+      <item row="0" column="0" colspan="4">
+       <widget class="QCheckBox" name="debugMarkerBackgroundCheckBox">
+        <property name="toolTip">
+         <string>Select to indicate the debug markers using coloured line backgrounds, arrow indicators otherwise</string>
+        </property>
+        <property name="text">
+         <string>Use background colours</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TextLabel3_2_2">
+        <property name="text">
+         <string>Current line marker:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QPushButton" name="currentLineMarkerButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the colour for the current line marker.</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TextLabel4_2_2">
+        <property name="text">
+         <string>Error line marker:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QPushButton" name="errorMarkerButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the colour for the error line marker.</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="groupBox_6">
      <property name="title">
       <string>Braces</string>
@@ -1860,6 +1925,9 @@
   <tabstop>caretWidthSpinBox</tabstop>
   <tabstop>caretForegroundButton</tabstop>
   <tabstop>caretlineBackgroundButton</tabstop>
+  <tabstop>debugMarkerBackgroundCheckBox</tabstop>
+  <tabstop>currentLineMarkerButton</tabstop>
+  <tabstop>errorMarkerButton</tabstop>
   <tabstop>bracehighlightingCheckBox</tabstop>
   <tabstop>matchingBracesButton</tabstop>
   <tabstop>matchingBracesBackButton</tabstop>
@@ -1901,6 +1969,7 @@
   <tabstop>searchMarkerMapButton</tabstop>
   <tabstop>markerMapBackgroundButton</tabstop>
   <tabstop>miniMenuCheckBox</tabstop>
+  <tabstop>hideFormatButtonsCheckBox</tabstop>
  </tabstops>
  <resources/>
  <connections>
--- a/Preferences/ConfigurationPages/HelpViewersPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/HelpViewersPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,14 +9,15 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion
 from PyQt5.QtWidgets import QButtonGroup
 try:
     from PyQt5 import QtWebKit      # __IGNORE_WARNING__
     WEBKIT_AVAILABLE = True
 except ImportError:
     WEBKIT_AVAILABLE = False
-if qVersion() < "5.6.0":
+
+from Globals import qVersionTuple
+if qVersionTuple() < (5, 6, 0):
     WEBENGINE_AVAILABLE = False
 else:
     try:
--- a/Preferences/ConfigurationPages/PluginManagerPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/PluginManagerPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -42,6 +42,8 @@
             Preferences.getPluginManager("KeepGenerations"))
         self.keepHiddenCheckBox.setChecked(
             Preferences.getPluginManager("KeepHidden"))
+        self.startupCleanupCheckBox.setChecked(
+            Preferences.getPluginManager("StartupCleanup"))
         
         period = Preferences.getPluginManager("UpdatesCheckInterval")
         if period == 0:
@@ -80,6 +82,9 @@
         Preferences.setPluginManager(
             "KeepHidden",
             self.keepHiddenCheckBox.isChecked())
+        Preferences.setPluginManager(
+            "StartupCleanup",
+            self.startupCleanupCheckBox.isChecked())
         
         if self.noCheckRadioButton.isChecked():
             period = 0
--- a/Preferences/ConfigurationPages/PluginManagerPage.ui	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/PluginManagerPage.ui	Sat Jun 03 13:08:50 2017 +0200
@@ -63,41 +63,45 @@
      <property name="title">
       <string>Download Housekeeping</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>No. of generations to keep:</string>
-        </property>
-       </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <item>
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>No. of generations to keep:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="generationsSpinBox">
+          <property name="toolTip">
+           <string>Enter the number of generations to keep for each plugin</string>
+          </property>
+          <property name="minimum">
+           <number>1</number>
+          </property>
+          <property name="maximum">
+           <number>9</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>252</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
       </item>
-      <item row="0" column="1">
-       <widget class="QSpinBox" name="generationsSpinBox">
-        <property name="toolTip">
-         <string>Enter the number of generations to keep for each plugin</string>
-        </property>
-        <property name="minimum">
-         <number>1</number>
-        </property>
-        <property name="maximum">
-         <number>9</number>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>252</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="1" column="0" colspan="3">
+      <item>
        <widget class="QCheckBox" name="keepHiddenCheckBox">
         <property name="toolTip">
          <string>Select to keep generations of hidden plugins</string>
@@ -107,6 +111,16 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QCheckBox" name="startupCleanupCheckBox">
+        <property name="toolTip">
+         <string>Select to cleanup the plugins download area during startuo</string>
+        </property>
+        <property name="text">
+         <string>Cleanup during startup</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -257,6 +271,7 @@
   <tabstop>downloadDirPicker</tabstop>
   <tabstop>generationsSpinBox</tabstop>
   <tabstop>keepHiddenCheckBox</tabstop>
+  <tabstop>startupCleanupCheckBox</tabstop>
   <tabstop>activateExternalPluginsCheckBox</tabstop>
   <tabstop>noCheckRadioButton</tabstop>
   <tabstop>alwaysCheckRadioButton</tabstop>
--- a/Preferences/ConfigurationPages/QtPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/QtPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSlot, qVersion
+from PyQt5.QtCore import pyqtSlot
 
 from E5Gui.E5PathPicker import E5PathPickerModes
 
@@ -17,6 +17,7 @@
 from .Ui_QtPage import Ui_QtPage
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class QtPage(ConfigurationPageBase, Ui_QtPage):
@@ -37,7 +38,7 @@
             E5PathPickerModes.DirectoryShowFilesMode)
         
         # set initial values
-        if qVersion() < "5.0.0":
+        if qVersionTuple() < (5, 0, 0):
             self.qt4TransPicker.setText(
                 Preferences.getQt("Qt4TranslationsDir"))
         else:
@@ -56,7 +57,7 @@
         """
         Public slot to save the Qt configuration.
         """
-        if qVersion() < "5.0.0":
+        if qVersionTuple() < (5, 0, 0):
             Preferences.setQt("Qt4TranslationsDir", self.qt4TransPicker.text())
         else:
             Preferences.setQt("Qt5TranslationsDir", self.qt4TransPicker.text())
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -94,6 +94,9 @@
             Preferences.getUI("SingleCloseButton"))
         self.warnOnMultipleCloseCheckBox.setChecked(
             Preferences.getWebBrowser("WarnOnMultipleClose"))
+        
+        self.toolbarsCheckBox.setChecked(
+            Preferences.getWebBrowser("ShowToolbars"))
     
     def setMode(self, displayMode):
         """
@@ -173,6 +176,10 @@
         Preferences.setWebBrowser(
             "WarnOnMultipleClose",
             self.warnOnMultipleCloseCheckBox.isChecked())
+        
+        Preferences.setWebBrowser(
+            "ShowToolbars",
+            self.toolbarsCheckBox.isChecked())
     
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Sat Jun 03 13:08:50 2017 +0200
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>499</width>
-    <height>894</height>
+    <height>1014</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
+  <layout class="QVBoxLayout" name="verticalLayout_4">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -396,6 +396,45 @@
     </widget>
    </item>
    <item>
+    <widget class="Line" name="line9_2">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="TextLabel1_2_2_2">
+     <property name="text">
+      <string>&lt;font color=&quot;#FF0000&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; All settings below are activated at the next startup of the application.&lt;/font&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_5">
+     <property name="title">
+      <string>Toolbars</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QCheckBox" name="toolbarsCheckBox">
+        <property name="toolTip">
+         <string>Select to show toolbars</string>
+        </property>
+        <property name="text">
+         <string>Show Toolbars</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
--- a/Preferences/__init__.py	Sat May 06 13:44:26 2017 +0200
+++ b/Preferences/__init__.py	Sat Jun 03 13:08:50 2017 +0200
@@ -29,7 +29,7 @@
 import sys
 
 from PyQt5.QtCore import QDir, QPoint, QLocale, QSettings, QFileInfo, \
-    QCoreApplication, QByteArray, QSize, QUrl, Qt, QLibraryInfo, qVersion
+    QCoreApplication, QByteArray, QSize, QUrl, Qt, QLibraryInfo
 from PyQt5.QtGui import QColor, QFont, QPalette
 from PyQt5.QtWidgets import QInputDialog, QApplication
 from PyQt5.QtNetwork import QNetworkRequest
@@ -49,7 +49,7 @@
 
 from Globals import settingsNameOrganization, settingsNameGlobal, \
     settingsNameRecent, isWindowsPlatform, findPythonInterpreters, \
-    getPyQt5ModulesDirectory
+    getPyQt5ModulesDirectory, qVersionTuple
 
 from Project.ProjectBrowserFlags import SourcesBrowserFlag, FormsBrowserFlag, \
     ResourcesBrowserFlag, TranslationsBrowserFlag, InterfacesBrowserFlag, \
@@ -403,6 +403,7 @@
         "ColourizeSelText": False,
         "CustomSelectionColours": False,
         "ExtendSelectionToEol": False,
+        "LineMarkersBackground": True,
         
         "AutoPrepareAPIs": False,
         
@@ -607,6 +608,8 @@
         editorDefaults["CallTipsPosition"] = 0
     
     editorColourDefaults = {
+        "CurrentMarker": QColor(Qt.yellow),
+        "ErrorMarker": QColor(Qt.red),
         "MatchingBrace": QColor(Qt.green),
         "MatchingBraceBack": QColor(Qt.white),
         "NonmatchingBrace": QColor(Qt.red),
@@ -1022,6 +1025,10 @@
     # defaults for the web browser settings
     webBrowserDefaults = {
         "SingleWebBrowserWindow": True,
+        "ShowToolbars": False,
+        "BookmarksToolBarVisible": True,
+        "MenuBarVisible": False,
+        "StatusBarVisible": True,
         "SaveGeometry": True,
         "WebBrowserState": QByteArray(),
         "StartupBehavior": 1,      # show speed dial
@@ -1292,6 +1299,7 @@
         # parameters for housekeeping
         "KeepGenerations": 2,
         "KeepHidden": False,
+        "StartupCleanup": True,
     }
     
     # defaults for the printer settings
@@ -2869,7 +2877,8 @@
                  "AutoScrollEnabled", "ScreenCaptureEnabled",
                  "WebGLEnabled", "FocusOnNavigationEnabled",
                  "PrintElementBackgrounds", "AllowRunningInsecureContent",
-                 "SpellCheckEnabled",
+                 "SpellCheckEnabled", "ShowToolbars", "MenuBarVisible",
+                 "BookmarksToolBarVisible", "StatusBarVisible",
                  ]:
         return toBool(prefClass.settings.value(
             "WebBrowser/" + key, prefClass.webBrowserDefaults[key]))
@@ -2984,7 +2993,7 @@
     @param prefClass preferences class used as the storage area
     @return the requested setting (string)
     """
-    if qVersion() < "5.0.0":
+    if qVersionTuple() < (5, 0, 0):
         s = prefClass.settings.value(
             "Qt/Qt4TranslationsDir",
             prefClass.qtDefaults["Qt4TranslationsDir"])
@@ -2995,7 +3004,7 @@
     if s == "":
         s = os.getenv("QTTRANSLATIONSDIR", "")
     if s == "":
-        if qVersion() < "5.0.0":
+        if qVersionTuple() < (5, 0, 0):
             s = os.getenv("QT4TRANSLATIONSDIR", "")
         else:
             s = os.getenv("QT5TRANSLATIONSDIR", "")
--- a/Project/CreateDialogCodeDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Project/CreateDialogCodeDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -13,7 +13,7 @@
 import xml.etree.ElementTree
 
 from PyQt5.QtCore import QMetaObject, QByteArray, QRegExp, Qt, pyqtSlot, \
-    QMetaMethod, qVersion, QSortFilterProxyModel
+    QMetaMethod, QSortFilterProxyModel
 from PyQt5.QtGui import QStandardItemModel, QBrush, QStandardItem
 from PyQt5.QtWidgets import QWidget, QDialog, QDialogButtonBox, QAction
 from PyQt5 import uic
@@ -27,6 +27,9 @@
 
 from eric6config import getConfig
 
+from Globals import qVersionTuple
+
+
 pyqtSignatureRole = Qt.UserRole + 1
 pythonSignatureRole = Qt.UserRole + 2
 rubySignatureRole = Qt.UserRole + 3
@@ -258,7 +261,7 @@
                 for index in range(metaObject.methodCount()):
                     metaMethod = metaObject.method(index)
                     if metaMethod.methodType() == QMetaMethod.Signal:
-                        if qVersion() >= "5.0.0":
+                        if qVersionTuple() >= (5, 0, 0):
                             itm2 = QStandardItem("on_{0}_{1}".format(
                                 name,
                                 bytes(metaMethod.methodSignature()).decode()))
@@ -267,7 +270,7 @@
                                 name, metaMethod.signature()))
                         itm.appendRow(itm2)
                         if self.__module is not None:
-                            if qVersion() >= "5.0.0":
+                            if qVersionTuple() >= (5, 0, 0):
                                 method = "on_{0}_{1}".format(
                                     name,
                                     bytes(metaMethod.methodSignature())
@@ -308,7 +311,7 @@
                         methNamesSig = ", ".join(parameterNamesList)
                         
                         if methNamesSig:
-                            if qVersion() >= "5.0.0":
+                            if qVersionTuple() >= (5, 0, 0):
                                 pythonSignature = \
                                     "on_{0}_{1}(self, {2})".format(
                                         name,
@@ -322,7 +325,7 @@
                                         metaMethod.signature().split("(")[0],
                                         methNamesSig)
                         else:
-                            if qVersion() >= "5.0.0":
+                            if qVersionTuple() >= (5, 0, 0):
                                 pythonSignature = "on_{0}_{1}(self)".format(
                                     name,
                                     bytes(metaMethod.methodSignature())
--- a/Project/LexerAssociationDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/Project/LexerAssociationDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,11 +11,13 @@
 
 import os
 
-from PyQt5.QtCore import Qt, pyqtSlot, qVersion
+from PyQt5.QtCore import Qt, pyqtSlot
 from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem, QDialog
 
 from .Ui_LexerAssociationDialog import Ui_LexerAssociationDialog
 
+from Globals import qVersionTuple
+
 
 class LexerAssociationDialog(QDialog, Ui_LexerAssociationDialog):
     """
@@ -34,7 +36,7 @@
         self.editorLexerList.headerItem().setText(
             self.editorLexerList.columnCount(), "")
         header = self.editorLexerList.header()
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionResizeMode(QHeaderView.ResizeToContents)
         else:
             header.setResizeMode(QHeaderView.ResizeToContents)
--- a/QScintilla/Editor.py	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/Editor.py	Sat Jun 03 13:08:50 2017 +0200
@@ -18,7 +18,7 @@
 import difflib
 
 from PyQt5.QtCore import QDir, QTimer, QModelIndex, QFileInfo, pyqtSignal, \
-    pyqtSlot, QCryptographicHash, QEvent, QDateTime, QRegExp, Qt, qVersion
+    pyqtSlot, QCryptographicHash, QEvent, QDateTime, QRegExp, Qt
 from PyQt5.QtGui import QCursor, QPalette, QFont, QPixmap, QPainter
 from PyQt5.QtWidgets import QLineEdit, QActionGroup, QDialog, QInputDialog, \
     QApplication, QMenu
@@ -34,6 +34,7 @@
 import Preferences
 import Utilities
 from Utilities import MouseUtilities
+from Globals import qVersionTuple
 
 import UI.PixmapCache
 
@@ -293,10 +294,15 @@
             UI.PixmapCache.getPixmap("warning.png"))
         
         # define the line markers
-        self.currentline = self.markerDefine(
-            UI.PixmapCache.getPixmap("currentLineMarker.png"))
-        self.errorline = self.markerDefine(
-            UI.PixmapCache.getPixmap("errorLineMarker.png"))
+        if Preferences.getEditor("LineMarkersBackground"):
+            self.currentline = self.markerDefine(QsciScintilla.Background)
+            self.errorline = self.markerDefine(QsciScintilla.Background)
+            self.__setLineMarkerColours()
+        else:
+            self.currentline = self.markerDefine(
+                UI.PixmapCache.getPixmap("currentLineMarker.png"))
+            self.errorline = self.markerDefine(
+                UI.PixmapCache.getPixmap("errorLineMarker.png"))
         
         self.breakpointMask = (1 << self.breakpoint) | \
                               (1 << self.cbreakpoint) | \
@@ -4008,6 +4014,19 @@
         if QSCINTILLA_VERSION() >= 0x020301:
             self.__unifiedMargins = Preferences.getEditor("UnifiedMargins")
         
+        # set the line marker colours or pixmap
+        if Preferences.getEditor("LineMarkersBackground"):
+            self.markerDefine(QsciScintilla.Background, self.currentline)
+            self.markerDefine(QsciScintilla.Background, self.errorline)
+            self.__setLineMarkerColours()
+        else:
+            self.markerDefine(
+                UI.PixmapCache.getPixmap("currentLineMarker.png"),
+                self.currentline)
+            self.markerDefine(
+                UI.PixmapCache.getPixmap("errorLineMarker.png"),
+                self.errorline)
+        
         # set the text display
         self.__setTextDisplay()
         
@@ -4067,6 +4086,19 @@
         
         self.settingsRead.emit()
     
+    def __setLineMarkerColours(self):
+        """
+        Private method to set the line marker colours.
+        """
+        self.setMarkerForegroundColor(
+            Preferences.getEditorColour("CurrentMarker"), self.currentline)
+        self.setMarkerBackgroundColor(
+            Preferences.getEditorColour("CurrentMarker"), self.currentline)
+        self.setMarkerForegroundColor(
+            Preferences.getEditorColour("ErrorMarker"), self.errorline)
+        self.setMarkerBackgroundColor(
+            Preferences.getEditorColour("ErrorMarker"), self.errorline)
+        
     def __setMarginsDisplay(self):
         """
         Private method to configure margins 0 and 2.
@@ -6500,7 +6532,7 @@
         
         @param evt reference to the wheel event (QWheelEvent)
         """
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             delta = evt.angleDelta().y()
         else:
             delta = evt.delta()
--- a/QScintilla/KeySequenceTranslator.py	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/KeySequenceTranslator.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,10 +10,11 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion
 from PyQt5.QtGui import QKeySequence
 from PyQt5.Qsci import QsciScintilla
 
+from Globals import qVersionTuple
+
 __all__ = ["s2qTranslate"]
 
 Scintilla2QKeySequence = {
@@ -108,10 +109,10 @@
     QsciScintilla.SCI_LOWERCASE: QKeySequence.UnknownKey,
     QsciScintilla.SCI_UPPERCASE: QKeySequence.UnknownKey,
 }
-if qVersion() >= "5.2.0":
+if qVersionTuple() >= (5, 2, 0):
     Scintilla2QKeySequence[QsciScintilla.SCI_LINEDELETE] = \
         QKeySequence.DeleteCompleteLine,
-if qVersion() >= "5.5.0":
+if qVersionTuple() >= (5, 5, 0):
     Scintilla2QKeySequence[QsciScintilla.SCI_DELETEBACK] = \
         QKeySequence.Backspace
 
--- a/QScintilla/MiniEditor.py	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/MiniEditor.py	Sat Jun 03 13:08:50 2017 +0200
@@ -127,19 +127,19 @@
             "replace": []
         }
         from .SearchReplaceWidget import SearchReplaceWidget
-        self.searchDlg = SearchReplaceWidget(False, self, self)
-        self.replaceDlg = SearchReplaceWidget(True, self, self)
+        self.__searchWidget = SearchReplaceWidget(False, self, self)
+        self.__replaceWidget = SearchReplaceWidget(True, self, self)
         
         centralWidget = QWidget()
         layout = QVBoxLayout()
         layout.setContentsMargins(1, 1, 1, 1)
         layout.addWidget(self.__textEdit)
-        layout.addWidget(self.searchDlg)
-        layout.addWidget(self.replaceDlg)
+        layout.addWidget(self.__searchWidget)
+        layout.addWidget(self.__replaceWidget)
         centralWidget.setLayout(layout)
         self.setCentralWidget(centralWidget)
-        self.searchDlg.hide()
-        self.replaceDlg.hide()
+        self.__searchWidget.hide()
+        self.__replaceWidget.hide()
         
         self.lexer_ = None
         self.apiLanguage = ""
@@ -180,9 +180,9 @@
             self.__contextMenuRequested)
         
         self.__textEdit.selectionChanged.connect(
-            self.searchDlg.selectionChanged)
+            self.__searchWidget.selectionChanged)
         self.__textEdit.selectionChanged.connect(
-            self.replaceDlg.selectionChanged)
+            self.__replaceWidget.selectionChanged)
         
         self.__setCurrentFile("")
         if filename:
@@ -1954,7 +1954,7 @@
             """ dialog is shown to enter the searchtext and options"""
             """ for the search.</p>"""
         ))
-        self.searchAct.triggered.connect(self.__search)
+        self.searchAct.triggered.connect(self.showSearchWidget)
         self.searchActions.append(self.searchAct)
         
         self.searchNextAct = E5Action(
@@ -1974,7 +1974,7 @@
             """ editor. The previously entered searchtext and options are"""
             """ reused.</p>"""
         ))
-        self.searchNextAct.triggered.connect(self.searchDlg.findNext)
+        self.searchNextAct.triggered.connect(self.__searchNext)
         self.searchActions.append(self.searchNextAct)
         
         self.searchPrevAct = E5Action(
@@ -1994,7 +1994,7 @@
             """ current editor. The previously entered searchtext and"""
             """ options are reused.</p>"""
         ))
-        self.searchPrevAct.triggered.connect(self.searchDlg.findPrev)
+        self.searchPrevAct.triggered.connect(self.__searchPrev)
         self.searchActions.append(self.searchPrevAct)
         
         self.searchClearMarkersAct = E5Action(
@@ -2033,8 +2033,76 @@
             """ it. A dialog is shown to enter the searchtext, the"""
             """ replacement text and options for the search and replace.</p>"""
         ))
-        self.replaceAct.triggered.connect(self.__replace)
+        self.replaceAct.triggered.connect(self.showReplaceWidget)
         self.searchActions.append(self.replaceAct)
+        
+        self.replaceAndSearchAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace and Search'),
+            UI.PixmapCache.getIcon("editReplaceSearch.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace and Search'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Meta+R", "Search|Replace and Search")),
+            0,
+            self, 'vm_replace_search')
+        self.replaceAndSearchAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager',
+            'Replace the found text and search the next occurrence'))
+        self.replaceAndSearchAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace and Search</b>"""
+            """<p>Replace the found occurrence of text in the current"""
+            """ editor and search for the next one. The previously entered"""
+            """ search text and options are reused.</p>"""
+        ))
+        self.replaceAndSearchAct.triggered.connect(
+            self.__replaceWidget.replaceSearch)
+        self.searchActions.append(self.replaceAndSearchAct)
+        
+        self.replaceSelectionAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace Occurrence'),
+            UI.PixmapCache.getIcon("editReplace.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace Occurrence'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Ctrl+Meta+R", "Search|Replace Occurrence")),
+            0,
+            self, 'vm_replace_occurrence')
+        self.replaceSelectionAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager', 'Replace the found text'))
+        self.replaceSelectionAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace Occurrence</b>"""
+            """<p>Replace the found occurrence of the search text in the"""
+            """ current editor.</p>"""
+        ))
+        self.replaceSelectionAct.triggered.connect(
+            self.__replaceWidget.replace)
+        self.searchActions.append(self.replaceSelectionAct)
+        
+        self.replaceAllAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace All'),
+            UI.PixmapCache.getIcon("editReplaceAll.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace All'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Shift+Meta+R", "Search|Replace All")),
+            0,
+            self, 'vm_replace_all')
+        self.replaceAllAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager', 'Replace search text occurrences'))
+        self.replaceAllAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace All</b>"""
+            """<p>Replace all occurrences of the search text in the current"""
+            """ editor.</p>"""
+        ))
+        self.replaceAllAct.triggered.connect(
+            self.__replaceWidget.replaceAll)
+        self.searchActions.append(self.replaceAllAct)
     
     def __createHelpActions(self):
         """
@@ -2114,6 +2182,9 @@
         self.editMenu.addAction(self.searchPrevAct)
         self.editMenu.addAction(self.searchClearMarkersAct)
         self.editMenu.addAction(self.replaceAct)
+        self.editMenu.addAction(self.replaceAndSearchAct)
+        self.editMenu.addAction(self.replaceSelectionAct)
+        self.editMenu.addAction(self.replaceAllAct)
         
         self.menuBar().addSeparator()
         
@@ -3043,13 +3114,39 @@
         """
         line, index = self.__textEdit.getCursorPosition()
         return self.__getWord(line, index)
+        
+    def showSearchWidget(self):
+        """
+        Public method to show the search widget.
+        """
+        self.__replaceWidget.hide()
+        self.__searchWidget.show()
+        self.__searchWidget.show(self.textForFind())
     
-    def __search(self):
+    def __searchNext(self):
+        """
+        Private slot to handle the search next action.
         """
-        Private method to handle the search action.
+        if self.__replaceWidget.isVisible():
+            self.__replaceWidget.findNext()
+        else:
+            self.__searchWidget.findNext()
+    
+    def __searchPrev(self):
+        """
+        Private slot to handle the search previous action.
         """
-        self.replaceDlg.close()
-        self.searchDlg.show(self.textForFind())
+        if self.__replaceWidget.isVisible():
+            self.__replaceWidget.findPrev()
+        else:
+            self.__searchWidget.findPrev()
+    
+    def showReplaceWidget(self):
+        """
+        Public method to show the replace widget.
+        """
+        self.__searchWidget.hide()
+        self.__replaceWidget.show(self.textForFind())
     
     def __searchClearMarkers(self):
         """
@@ -3057,13 +3154,6 @@
         """
         self.clearSearchIndicators()
     
-    def __replace(self):
-        """
-        Private method to handle the replace action.
-        """
-        self.searchDlg.close()
-        self.replaceDlg.show(self.textForFind())
-    
     def activeWindow(self):
         """
         Public method to fulfill the ViewManager interface.
--- a/QScintilla/ReplaceWidget.ui	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/ReplaceWidget.ui	Sat Jun 03 13:08:50 2017 +0200
@@ -20,7 +20,16 @@
    <string>Find and Replace</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
     <number>0</number>
    </property>
    <item row="0" column="0">
@@ -36,7 +45,10 @@
    <item row="0" column="1">
     <widget class="QLabel" name="label">
      <property name="text">
-      <string>Find:</string>
+      <string>&amp;Find:</string>
+     </property>
+     <property name="buddy">
+      <cstring>findtextCombo</cstring>
      </property>
     </widget>
    </item>
@@ -82,28 +94,31 @@
    <item row="0" column="6">
     <widget class="QCheckBox" name="caseCheckBox">
      <property name="text">
-      <string>Match case</string>
+      <string>&amp;Match case</string>
      </property>
     </widget>
    </item>
    <item row="0" column="7">
     <widget class="QCheckBox" name="wordCheckBox">
      <property name="text">
-      <string>Whole word</string>
+      <string>Whole &amp;word</string>
      </property>
     </widget>
    </item>
    <item row="0" column="8">
     <widget class="QCheckBox" name="regexpCheckBox">
      <property name="text">
-      <string>Regexp</string>
+      <string>Rege&amp;xp</string>
      </property>
     </widget>
    </item>
    <item row="1" column="1">
     <widget class="QLabel" name="label_2">
      <property name="text">
-      <string>Replace:</string>
+      <string>&amp;Replace:</string>
+     </property>
+     <property name="buddy">
+      <cstring>replacetextCombo</cstring>
      </property>
     </widget>
    </item>
@@ -156,14 +171,14 @@
    <item row="1" column="6">
     <widget class="QCheckBox" name="wrapCheckBox">
      <property name="text">
-      <string>Wrap around</string>
+      <string>Wrap &amp;around</string>
      </property>
     </widget>
    </item>
    <item row="1" column="7">
     <widget class="QCheckBox" name="selectionCheckBox">
      <property name="text">
-      <string>Selection only</string>
+      <string>&amp;Selection only</string>
      </property>
     </widget>
    </item>
--- a/QScintilla/SearchReplaceWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/SearchReplaceWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -43,8 +43,9 @@
         """
         super(SearchReplaceWidget, self).__init__(parent)
         
-        self.viewmanager = vm
-        self.replace = replace
+        self.__viewmanager = vm
+        self.__isMiniEditor = vm is parent
+        self.__replace = replace
         self.__sliding = sliding
         if sliding:
             self.__topWidget = parent
@@ -122,6 +123,7 @@
         )
         self.setWhatsThis(whatsThis)
         
+        # set icons
         self.ui.closeButton.setIcon(UI.PixmapCache.getIcon("close.png"))
         self.ui.findPrevButton.setIcon(
             UI.PixmapCache.getIcon("1leftarrow.png"))
@@ -136,6 +138,7 @@
             self.ui.replaceAllButton.setIcon(
                 UI.PixmapCache.getIcon("editReplaceAll.png"))
         
+        # set line edit completers
         self.ui.findtextCombo.setCompleter(None)
         self.ui.findtextCombo.lineEdit().returnPressed.connect(
             self.__findByReturnPressed)
@@ -144,21 +147,66 @@
             self.ui.replacetextCombo.lineEdit().returnPressed.connect(
                 self.on_replaceButton_clicked)
         
+        # define actions
         self.findNextAct = E5Action(
             self.tr('Find Next'),
             self.tr('Find Next'),
             0, 0, self, 'search_widget_find_next')
         self.findNextAct.triggered.connect(self.on_findNextButton_clicked)
-        self.findNextAct.setEnabled(False)
-        self.ui.findtextCombo.addAction(self.findNextAct)
+        self.findNextAct.setShortcutContext(Qt.WidgetWithChildrenShortcut)
         
         self.findPrevAct = E5Action(
             self.tr('Find Prev'),
             self.tr('Find Prev'),
             0, 0, self, 'search_widget_find_prev')
         self.findPrevAct.triggered.connect(self.on_findPrevButton_clicked)
-        self.findPrevAct.setEnabled(False)
-        self.ui.findtextCombo.addAction(self.findPrevAct)
+        self.findPrevAct.setShortcutContext(Qt.WidgetWithChildrenShortcut)
+        
+        if replace:
+            self.replaceAndSearchAct = E5Action(
+                self.tr("Replace and Search"),
+                self.tr("Replace and Search"),
+                0, 0, self, "replace_widget_replace_search")
+            self.replaceAndSearchAct.triggered.connect(
+                self.on_replaceSearchButton_clicked)
+            self.replaceAndSearchAct.setEnabled(False)
+            self.replaceAndSearchAct.setShortcutContext(
+                Qt.WidgetWithChildrenShortcut)
+            
+            self.replaceSelectionAct = E5Action(
+                self.tr("Replace Occurrence"),
+                self.tr("Replace Occurrence"),
+                0, 0, self, "replace_widget_replace_occurrence")
+            self.replaceSelectionAct.triggered.connect(
+                self.on_replaceButton_clicked)
+            self.replaceSelectionAct.setEnabled(False)
+            self.replaceSelectionAct.setShortcutContext(
+                Qt.WidgetWithChildrenShortcut)
+            
+            self.replaceAllAct = E5Action(
+                self.tr("Replace All"),
+                self.tr("Replace All"),
+                0, 0, self, "replace_widget_replace_all")
+            self.replaceAllAct.triggered.connect(
+                self.on_replaceAllButton_clicked)
+            self.replaceAllAct.setEnabled(False)
+            self.replaceAllAct.setShortcutContext(
+                Qt.WidgetWithChildrenShortcut)
+        
+        self.addAction(self.findNextAct)
+        self.addAction(self.findPrevAct)
+        if replace:
+            self.addAction(self.replaceAndSearchAct)
+            self.addAction(self.replaceSelectionAct)
+            self.addAction(self.replaceAllAct)
+        
+        # disable search and replace buttons and actions
+        self.__setFindNextEnabled(False)
+        self.__setFindPrevEnabled(False)
+        if replace:
+            self.__setReplaceAndSearchEnabled(False)
+            self.__setReplaceSelectionEnabled(False)
+            self.__setReplaceAllEnabled(False)
         
         self.adjustSize()
         
@@ -168,6 +216,75 @@
         self.__selections = []
         self.__finding = False
     
+    def __setShortcuts(self):
+        """
+        Private method to set the local action's shortcuts to the same key
+        sequences as in the view manager.
+        """
+        if not self.__isMiniEditor:
+            self.findNextAct.setShortcuts(
+                self.__viewmanager.searchNextAct.shortcuts())
+            self.findPrevAct.setShortcuts(
+                self.__viewmanager.searchPrevAct.shortcuts())
+            
+            if self.__replace:
+                self.replaceAndSearchAct.setShortcuts(
+                    self.__viewmanager.replaceAndSearchAct.shortcuts())
+                self.replaceSelectionAct.setShortcuts(
+                    self.__viewmanager.replaceSelectionAct.shortcuts())
+                self.replaceAllAct.setShortcuts(
+                    self.__viewmanager.replaceAllAct.shortcuts())
+    
+    def __setFindNextEnabled(self, enable):
+        """
+        Private method to set the enabled state of "Find Next".
+        
+        @param enable flag indicating the enable state to be set
+        @type bool
+        """
+        self.ui.findNextButton.setEnabled(enable)
+        self.findNextAct.setEnabled(enable)
+    
+    def __setFindPrevEnabled(self, enable):
+        """
+        Private method to set the enabled state of "Find Prev".
+        
+        @param enable flag indicating the enable state to be set
+        @type bool
+        """
+        self.ui.findPrevButton.setEnabled(enable)
+        self.findPrevAct.setEnabled(enable)
+    
+    def __setReplaceAndSearchEnabled(self, enable):
+        """
+        Private method to set the enabled state of "Replace And Search".
+        
+        @param enable flag indicating the enable state to be set
+        @type bool
+        """
+        self.ui.replaceSearchButton.setEnabled(enable)
+        self.replaceAndSearchAct.setEnabled(enable)
+    
+    def __setReplaceSelectionEnabled(self, enable):
+        """
+        Private method to set the enabled state of "Replace Occurrence".
+        
+        @param enable flag indicating the enable state to be set
+        @type bool
+        """
+        self.ui.replaceButton.setEnabled(enable)
+        self.replaceSelectionAct.setEnabled(enable)
+    
+    def __setReplaceAllEnabled(self, enable):
+        """
+        Private method to set the enabled state of "Replace All".
+        
+        @param enable flag indicating the enable state to be set
+        @type bool
+        """
+        self.ui.replaceAllButton.setEnabled(enable)
+        self.replaceAllAct.setEnabled(enable)
+    
     def changeEvent(self, evt):
         """
         Protected method handling state changes.
@@ -208,23 +325,19 @@
         @param txt text of the find text combo (string)
         """
         if not txt:
-            self.ui.findNextButton.setEnabled(False)
-            self.findNextAct.setEnabled(False)
-            self.ui.findPrevButton.setEnabled(False)
-            self.findPrevAct.setEnabled(False)
-            if self.replace:
-                self.ui.replaceButton.setEnabled(False)
-                self.ui.replaceSearchButton.setEnabled(False)
-                self.ui.replaceAllButton.setEnabled(False)
+            self.__setFindNextEnabled(False)
+            self.__setFindPrevEnabled(False)
+            if self.__replace:
+                self.__setReplaceSelectionEnabled(False)
+                self.__setReplaceAndSearchEnabled(False)
+                self.__setReplaceAllEnabled(False)
         else:
-            self.ui.findNextButton.setEnabled(True)
-            self.findNextAct.setEnabled(True)
-            self.ui.findPrevButton.setEnabled(True)
-            self.findPrevAct.setEnabled(True)
-            if self.replace:
-                self.ui.replaceButton.setEnabled(False)
-                self.ui.replaceSearchButton.setEnabled(False)
-                self.ui.replaceAllButton.setEnabled(True)
+            self.__setFindNextEnabled(True)
+            self.__setFindPrevEnabled(True)
+            if self.__replace:
+                self.__setReplaceSelectionEnabled(False)
+                self.__setReplaceAndSearchEnabled(False)
+                self.__setReplaceAllEnabled(False)
 
     @pyqtSlot()
     def on_findNextButton_clicked(self):
@@ -238,7 +351,10 @@
         Public slot to find the next occurrence of text.
         """
         if not self.havefound or not self.ui.findtextCombo.currentText():
-            self.show(self.viewmanager.textForFind())
+            if self.__replace:
+                self.__viewmanager.showReplaceWidget()
+            else:
+                self.__viewmanager.showSearchWidget()
             return
         
         self.__findBackwards = False
@@ -255,9 +371,9 @@
         
         ok = self.__findNextPrev(txt, False)
         if ok:
-            if self.replace:
-                self.ui.replaceButton.setEnabled(True)
-                self.ui.replaceSearchButton.setEnabled(True)
+            if self.__replace:
+                self.__setReplaceSelectionEnabled(True)
+                self.__setReplaceAndSearchEnabled(True)
         else:
             E5MessageBox.information(
                 self, self.windowTitle(),
@@ -275,7 +391,7 @@
         Public slot to find the next previous of text.
         """
         if not self.havefound or not self.ui.findtextCombo.currentText():
-            self.show(self.viewmanager.textForFind())
+            self.show(self.__viewmanager.textForFind())
             return
         
         self.__findBackwards = True
@@ -292,9 +408,9 @@
         
         ok = self.__findNextPrev(txt, True)
         if ok:
-            if self.replace:
-                self.ui.replaceButton.setEnabled(True)
-                self.ui.replaceSearchButton.setEnabled(True)
+            if self.__replace:
+                self.__setReplaceSelectionEnabled(True)
+                self.__setReplaceAndSearchEnabled(True)
         else:
             E5MessageBox.information(
                 self, self.windowTitle(),
@@ -316,7 +432,7 @@
         
         @param txt text to search for (string)
         """
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         lineFrom = 0
         indexFrom = 0
         lineTo = -1
@@ -370,7 +486,7 @@
         if Preferences.getEditor("SearchMarkersEnabled"):
             self.__markOccurrences(txt)
         
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         aw.hideFindIndicator()
         cline, cindex = aw.getCursorPosition()
         
@@ -553,7 +669,7 @@
         
         @param text text to be shown in the findtext edit (string)
         """
-        self.replace = False
+        self.__replace = False
         
         self.ui.findtextCombo.clear()
         self.ui.findtextCombo.addItems(self.findHistory)
@@ -567,20 +683,13 @@
         self.ui.wrapCheckBox.setChecked(True)
         self.ui.regexpCheckBox.setChecked(False)
         
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         self.updateSelectionCheckBox(aw)
         
-        self.findNextAct.setShortcut(self.viewmanager.searchNextAct.shortcut())
-        self.findNextAct.setAlternateShortcut(
-            self.viewmanager.searchNextAct.alternateShortcut())
-        self.findNextAct.setShortcutContext(Qt.WidgetShortcut)
-        self.findPrevAct.setShortcut(self.viewmanager.searchPrevAct.shortcut())
-        self.findPrevAct.setAlternateShortcut(
-            self.viewmanager.searchPrevAct.alternateShortcut())
-        self.findPrevAct.setShortcutContext(Qt.WidgetShortcut)
-        
         self.havefound = True
         self.__findBackwards = False
+        
+        self.__setShortcuts()
     
     def selectionChanged(self):
         """
@@ -610,7 +719,21 @@
             self.ui.selectionCheckBox.setEnabled(False)
             self.ui.selectionCheckBox.setChecked(False)
             self.__selections = []
-
+    
+    def replace(self):
+        """
+        Public method to replace the current selection.
+        """
+        if self.ui.replaceButton.isEnabled():
+            self.__doReplace(False)
+    
+    def replaceSearch(self):
+        """
+        Public method to replace the current selection and search again.
+        """
+        if self.ui.replaceSearchButton.isEnabled():
+            self.__doReplace(True)
+    
     @pyqtSlot()
     def on_replaceButton_clicked(self):
         """
@@ -651,7 +774,7 @@
         self.ui.replacetextCombo.clear()
         self.ui.replacetextCombo.addItems(self.replaceHistory)
         
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         aw.hideFindIndicator()
         aw.replace(rtxt)
         
@@ -659,17 +782,24 @@
             ok = self.__findNextPrev(ftxt, self.__findBackwards)
             
             if not ok:
-                self.ui.replaceButton.setEnabled(False)
-                self.ui.replaceSearchButton.setEnabled(False)
+                self.__setReplaceSelectionEnabled(False)
+                self.__setReplaceAndSearchEnabled(False)
                 E5MessageBox.information(
                     self, self.windowTitle(),
                     self.tr("'{0}' was not found.").format(ftxt))
         else:
-            self.ui.replaceButton.setEnabled(False)
-            self.ui.replaceSearchButton.setEnabled(False)
+            self.__setReplaceSelectionEnabled(False)
+            self.__setReplaceAndSearchEnabled(False)
         
         self.__finding = False
     
+    def replaceAll(self):
+        """
+        Public method to replace all occurrences.
+        """
+        if self.ui.replaceAllButton.isEnabled():
+            self.on_replaceAllButton_clicked()
+    
     @pyqtSlot()
     def on_replaceAllButton_clicked(self):
         """
@@ -695,7 +825,7 @@
         self.ui.replacetextCombo.clear()
         self.ui.replacetextCombo.addItems(self.replaceHistory)
         
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         aw.hideFindIndicator()
         cline, cindex = aw.getCursorPosition()
         boundary = self.__selectionBoundary()
@@ -779,8 +909,8 @@
         aw.endUndoAction()
         if wordWrap:
             self.ui.wrapCheckBox.setChecked(True)
-        self.ui.replaceButton.setEnabled(False)
-        self.ui.replaceSearchButton.setEnabled(False)
+        self.__setReplaceSelectionEnabled(False)
+        self.__setReplaceAndSearchEnabled(False)
         
         if found:
             E5MessageBox.information(
@@ -804,7 +934,7 @@
         
         @param text text to be shown in the findtext edit
         """
-        self.replace = True
+        self.__replace = True
         
         self.ui.findtextCombo.clear()
         self.ui.findtextCombo.addItems(self.findHistory)
@@ -823,7 +953,7 @@
         
         self.havefound = True
         
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         self.updateSelectionCheckBox(aw)
         if aw.hasSelectedText():
             line1, index1, line2, index2 = aw.getSelection()
@@ -831,14 +961,7 @@
                 aw.setSelection(line1, index1, line1, index1)
                 self.findNext()
         
-        self.findNextAct.setShortcut(self.viewmanager.searchNextAct.shortcut())
-        self.findNextAct.setAlternateShortcut(
-            self.viewmanager.searchNextAct.alternateShortcut())
-        self.findNextAct.setShortcutContext(Qt.WidgetShortcut)
-        self.findPrevAct.setShortcut(self.viewmanager.searchPrevAct.shortcut())
-        self.findPrevAct.setAlternateShortcut(
-            self.viewmanager.searchPrevAct.alternateShortcut())
-        self.findPrevAct.setShortcutContext(Qt.WidgetShortcut)
+        self.__setShortcuts()
 
     def show(self, text=''):
         """
@@ -846,7 +969,7 @@
         
         @param text text to be shown in the findtext edit (string)
         """
-        if self.replace:
+        if self.__replace:
             self.__showReplace(text)
         else:
             self.__showFind(text)
@@ -858,7 +981,7 @@
         """
         Private slot to close the widget.
         """
-        aw = self.viewmanager.activeWindow()
+        aw = self.__viewmanager.activeWindow()
         if aw:
             aw.hideFindIndicator()
         
@@ -874,7 +997,7 @@
         @param event reference to the key press event (QKeyEvent)
         """
         if event.key() == Qt.Key_Escape:
-            aw = self.viewmanager.activeWindow()
+            aw = self.__viewmanager.activeWindow()
             if aw:
                 aw.setFocus(Qt.ActiveWindowFocusReason)
                 aw.hideFindIndicator()
@@ -967,6 +1090,24 @@
         """
         self.__searchReplaceWidget.findPrev()
     
+    def replace(self):
+        """
+        Public method to replace the current selection.
+        """
+        self.__searchReplaceWidget.replace()
+    
+    def replaceSearch(self):
+        """
+        Public method to replace the current selection and search again.
+        """
+        self.__searchReplaceWidget.replaceSearch()
+    
+    def replaceAll(self):
+        """
+        Public method to replace all occurrences.
+        """
+        self.__searchReplaceWidget.replaceAll()
+    
     def selectionChanged(self):
         """
         Public slot tracking changes of selected text.
--- a/QScintilla/SearchWidget.ui	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/SearchWidget.ui	Sat Jun 03 13:08:50 2017 +0200
@@ -20,7 +20,16 @@
    <string>Find</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
-   <property name="margin">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
     <number>0</number>
    </property>
    <item>
@@ -36,7 +45,10 @@
    <item>
     <widget class="QLabel" name="label">
      <property name="text">
-      <string>Find:</string>
+      <string>&amp;Find:</string>
+     </property>
+     <property name="buddy">
+      <cstring>findtextCombo</cstring>
      </property>
     </widget>
    </item>
@@ -82,35 +94,35 @@
    <item>
     <widget class="QCheckBox" name="caseCheckBox">
      <property name="text">
-      <string>Match case</string>
+      <string>&amp;Match case</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QCheckBox" name="wordCheckBox">
      <property name="text">
-      <string>Whole word</string>
+      <string>Whole &amp;word</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QCheckBox" name="regexpCheckBox">
      <property name="text">
-      <string>Regexp</string>
+      <string>Rege&amp;xp</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QCheckBox" name="wrapCheckBox">
      <property name="text">
-      <string>Wrap around</string>
+      <string>Wrap &amp;around</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QCheckBox" name="selectionCheckBox">
      <property name="text">
-      <string>Selection only</string>
+      <string>&amp;Selection only</string>
      </property>
     </widget>
    </item>
--- a/QScintilla/Shell.py	Sat May 06 13:44:26 2017 +0200
+++ b/QScintilla/Shell.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,7 +12,7 @@
 import sys
 import re
 
-from PyQt5.QtCore import pyqtSignal, QFileInfo, Qt, QEvent, qVersion
+from PyQt5.QtCore import pyqtSignal, QFileInfo, Qt, QEvent
 from PyQt5.QtGui import QClipboard, QPalette, QFont
 from PyQt5.QtWidgets import QDialog, QInputDialog, QApplication, QMenu, \
     QWidget, QHBoxLayout, QVBoxLayout, QShortcut
@@ -24,8 +24,8 @@
 from .QsciScintillaCompat import QsciScintillaCompat
 
 import Preferences
-
 import Utilities
+from Globals import qVersionTuple
 
 import UI.PixmapCache
 
@@ -1000,7 +1000,7 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 delta = evt.angleDelta().y()
             else:
                 delta = evt.delta()
--- a/README.rst	Sat May 06 13:44:26 2017 +0200
+++ b/README.rst	Sat Jun 03 13:08:50 2017 +0200
@@ -56,13 +56,25 @@
 Installing eric6 and its pre-requisites is even easier using the PyQt5 Python
 wheels. In order to have access to the suite of Qt tools and documentation it
 is recommended to install the Qt development environment. These tools are not
-part of the PyQt5 wheels.
+part of the PyQt5 wheels. Users of the Windows® operating system may use the
+'pyqt5-tools' wheel available via the Python Package Index (PyPI) as of
+2017-05-12.
 
+1.2.1 Installation of Qt Tools via Qt online installer
+======================================================
 1. Download the Qt online installer from the Qt download site.
 
 2. Install Qt by executing the installer.
 
-3. Install the eric6 pre-requisites (PyQt, sip and QScintilla) by entering
+1.2.2 Installation of Qt Tools via PyPI
+=======================================
+1. Install the Qt tools by entering this command in a command window::
+   
+        pip install pyqt5-tools
+
+1.2.3 Installation of PyQt5 and eric
+====================================
+1. Install the eric6 pre-requisites (PyQt, sip and QScintilla) by entering
    this command in a shell / command window::
    
         pip install qscintilla
@@ -73,10 +85,10 @@
    
    This will install QScintilla and all dependencies, which are PyQt5 and sip.
 
-4. Install eric6 and configure the path to the Qt tools on the Qt page of the
+2. Install eric6 and configure the path to the Qt tools on the Qt page of the
    configuration dialog.
 
-5. Once the eric6 IDE is started the Qt documentation may be loaded into the
+3. Once the eric6 IDE is started the Qt documentation may be loaded into the
    eric web browser via the ``Settings ➡ Mange Qt Help Documents`` menu entry.
 
 2. Installation of translations
--- a/Snapshot/SnapWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/Snapshot/SnapWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -16,7 +16,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSlot, QFile, QFileInfo, QTimer, QPoint, \
-    QMimeData, Qt, QEvent, QRegExp, QLocale, qVersion, PYQT_VERSION_STR
+    QMimeData, Qt, QEvent, QRegExp, QLocale, PYQT_VERSION_STR
 from PyQt5.QtGui import QImageWriter, QPixmap, QCursor, QDrag, QKeySequence
 from PyQt5.QtWidgets import QWidget, QApplication, QShortcut
 
@@ -27,6 +27,7 @@
 import UI.PixmapCache
 import Preferences
 import Globals
+from Globals import qVersionTuple
 
 
 class SnapWidget(QWidget, Ui_SnapWidget):
@@ -372,7 +373,7 @@
         
         if self.__mode == SnapWidget.ModeFullscreen:
             desktop = QApplication.desktop()
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 self.__snapshot = QApplication.screens()[0].grabWindow(
                     desktop.winId(), desktop.x(), desktop.y(),
                     desktop.width(), desktop.height())
@@ -386,7 +387,7 @@
             geom = desktop.screenGeometry(screenId)
             x = geom.x()
             y = geom.y()
-            if qVersion() >= "5.0.0":
+            if qVersionTuple() >= (5, 0, 0):
                 self.__snapshot = QApplication.screens()[0].grabWindow(
                     desktop.winId(), x, y, geom.width(), geom.height())
             else:
--- a/Snapshot/SnapshotFreehandGrabber.py	Sat May 06 13:44:26 2017 +0200
+++ b/Snapshot/SnapshotFreehandGrabber.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,12 +9,13 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QRect, QPoint, QTimer, QLocale, \
-    qVersion
+from PyQt5.QtCore import pyqtSignal, Qt, QRect, QPoint, QTimer, QLocale
 from PyQt5.QtGui import QPixmap, QColor, QRegion, QPainter, QPalette, \
     QPolygon, QPen, QBrush, QPaintEngine
 from PyQt5.QtWidgets import QWidget, QApplication, QToolTip
 
+from Globals import qVersionTuple
+
 
 def drawPolygon(painter, polygon, outline, fill=None):
     """
@@ -86,7 +87,7 @@
         self.__desktop = QApplication.desktop()
         x = self.__desktop.x()
         y = self.__desktop.y()
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.__pixmap = QApplication.screens()[0].grabWindow(
                 self.__desktop.winId(), x, y,
                 self.__desktop.width(), self.__desktop.height())
--- a/Snapshot/SnapshotRegionGrabber.py	Sat May 06 13:44:26 2017 +0200
+++ b/Snapshot/SnapshotRegionGrabber.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,12 +9,13 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QRect, QPoint, QTimer, QLocale, \
-    qVersion
+from PyQt5.QtCore import pyqtSignal, Qt, QRect, QPoint, QTimer, QLocale
 from PyQt5.QtGui import QPixmap, QColor, QRegion, QPainter, QPalette, \
     QPaintEngine, QPen, QBrush
 from PyQt5.QtWidgets import QWidget, QApplication, QToolTip
 
+from Globals import qVersionTuple
+
 
 def drawRect(painter, rect, outline, fill=None):
     """
@@ -114,7 +115,7 @@
         self.__desktop = QApplication.desktop()
         x = self.__desktop.x()
         y = self.__desktop.y()
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.__pixmap = QApplication.screens()[0].grabWindow(
                 self.__desktop.winId(), x, y,
                 self.__desktop.width(), self.__desktop.height())
--- a/SqlBrowser/SqlConnectionWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/SqlBrowser/SqlConnectionWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,11 +9,13 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, qVersion
+from PyQt5.QtCore import pyqtSignal, Qt
 from PyQt5.QtWidgets import QWidget, QHeaderView, QTreeWidget, QVBoxLayout, \
     QTreeWidgetItem, QAction
 from PyQt5.QtSql import QSqlDatabase
 
+from Globals import qVersionTuple
+
 
 class SqlConnectionWidget(QWidget):
     """
@@ -42,7 +44,7 @@
         self.__connectionTree = QTreeWidget(self)
         self.__connectionTree.setObjectName("connectionTree")
         self.__connectionTree.setHeaderLabels([self.tr("Database")])
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.__connectionTree.header().setSectionResizeMode(
                 QHeaderView.Stretch)
         else:
--- a/Toolbox/Startup.py	Sat May 06 13:44:26 2017 +0200
+++ b/Toolbox/Startup.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,13 +12,14 @@
 import os
 import sys
 
-from PyQt5.QtCore import QTranslator, QLocale, QLibraryInfo, QDir, \
-    QTextCodec, qVersion
+from PyQt5.QtCore import Qt, QTranslator, QLocale, QLibraryInfo, QDir, \
+    QTextCodec, QCoreApplication
 from PyQt5.QtWidgets import QApplication
 
 from E5Gui.E5Application import E5Application
 
 import Globals
+from Globals import qVersionTuple
 
 import UI.PixmapCache
 
@@ -164,7 +165,7 @@
     
     global loaded_translators
     
-    if qVersion() < "5.0.0":
+    if qVersionTuple() < (5, 0, 0):
         # set the default encoding for tr()
         QTextCodec.setCodecForTr(QTextCodec.codecForName("utf-8"))
     
@@ -222,6 +223,10 @@
     """
     handleArgs(argv, appinfo)
     if app is None:
+        try:
+            QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts, True)
+        except AttributeError:
+            pass
         # set the library paths for plugins
         setLibraryPaths()
         app = E5Application(argv)
--- a/Tools/UIPreviewer.py	Sat May 06 13:44:26 2017 +0200
+++ b/Tools/UIPreviewer.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion, QDir, QFileInfo, QEvent, QSize, Qt
+from PyQt5.QtCore import QDir, QFileInfo, QEvent, QSize, Qt
 from PyQt5.QtGui import QCursor, QKeySequence, QPixmap, QImageWriter, QPainter
 from PyQt5.QtWidgets import QSizePolicy, QSpacerItem, QWidget, QHBoxLayout, \
     QWhatsThis, QDialog, QScrollArea, qApp, QApplication, QStyleFactory, \
@@ -24,6 +24,7 @@
 import Preferences
 import UI.PixmapCache
 import UI.Config
+from Globals import qVersionTuple
 
 
 class UIPreviewer(E5MainWindow):
@@ -474,7 +475,7 @@
             ext = defaultExt
             fname.append(".{0}".format(defaultExt.lower()))
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             pix = self.mainWidget.grab()
         else:
             pix = QPixmap.grabWidget(self.mainWidget)
@@ -499,7 +500,7 @@
             return
         
         cb = QApplication.clipboard()
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             cb.setPixmap(self.mainWidget.grab())
         else:
             cb.setPixmap(QPixmap.grabWidget(self.mainWidget))
@@ -597,7 +598,7 @@
             marginX *= 2
             width = printer.width() - marginX * 2
             height = printer.height() - marginY * 2
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             img = self.mainWidget.grab().toImage()
         else:
             img = QPixmap.grabWidget(self.mainWidget).toImage()
--- a/UI/Browser.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/Browser.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,8 +11,8 @@
 
 import os
 
-from PyQt5.QtCore import QModelIndex, pyqtSignal, QUrl, Qt, qVersion, \
-    QCoreApplication, QItemSelectionModel, QElapsedTimer
+from PyQt5.QtCore import QModelIndex, pyqtSignal, QUrl, Qt, QCoreApplication, \
+    QItemSelectionModel, QElapsedTimer
 from PyQt5.QtGui import QDesktopServices
 from PyQt5.QtWidgets import QTreeView, QApplication, QMenu, QAbstractItemView
 
@@ -30,6 +30,7 @@
 import Preferences
 import Utilities
 import Utilities.MimeTypes
+from Globals import qVersionTuple
 
 
 class Browser(QTreeView):
@@ -165,7 +166,7 @@
         header = self.header()
         header.setSortIndicator(0, Qt.AscendingOrder)
         header.setSortIndicatorShown(True)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             header.setSectionsClickable(True)
         else:
             header.setClickable(True)
--- a/UI/EmailDialog.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/EmailDialog.py	Sat Jun 03 13:08:50 2017 +0200
@@ -14,7 +14,7 @@
 import smtplib
 import socket
 
-from PyQt5.QtCore import Qt, pyqtSlot, qVersion
+from PyQt5.QtCore import Qt, pyqtSlot
 from PyQt5.QtGui import QCursor
 from PyQt5.QtWidgets import QHeaderView, QLineEdit, QDialog, QInputDialog, \
     QApplication, QDialogButtonBox, QTreeWidgetItem
@@ -36,6 +36,8 @@
 from email.mime.multipart import MIMEMultipart
 from email.header import Header
 
+from Globals import qVersionTuple
+
 
 ############################################################
 ## This code is to work around a bug in the Python email  ##
@@ -99,7 +101,7 @@
         
         self.attachments.headerItem().setText(
             self.attachments.columnCount(), "")
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.attachments.header().setSectionResizeMode(
                 QHeaderView.Interactive)
         else:
--- a/UI/NumbersWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/NumbersWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,8 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QAbstractTableModel, \
-    qVersion
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QAbstractTableModel
 from PyQt5.QtWidgets import QWidget, QHeaderView
 
 from E5Gui.E5Application import e5App
@@ -18,6 +17,7 @@
 from .Ui_NumbersWidget import Ui_NumbersWidget
 
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class BinaryModel(QAbstractTableModel):
@@ -201,7 +201,7 @@
         
         self.__model = BinaryModel(self)
         self.binTable.setModel(self.__model)
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.binTable.horizontalHeader().setSectionResizeMode(
                 QHeaderView.ResizeToContents)
         else:
--- a/UI/Previewers/PreviewerQSS.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/Previewers/PreviewerQSS.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,7 +11,6 @@
 
 import os
 
-from PyQt5.QtCore import qVersion
 from PyQt5.QtWidgets import QWidget, QMenu, QLabel, QHeaderView, \
     QListWidgetItem
 
@@ -19,6 +18,7 @@
 
 import Preferences
 import UI.PixmapCache
+from Globals import qVersionTuple
 
 
 class PreviewerQSS(QWidget, Ui_PreviewerQSS):
@@ -46,7 +46,7 @@
         self.__mdi.resize(160, 80)
         
         # tree and table widgets
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.tree.header().setSectionResizeMode(
                 QHeaderView.ResizeToContents)
             self.table.horizontalHeader().setSectionResizeMode(
--- a/UI/SymbolsWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/SymbolsWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -22,7 +22,7 @@
 import unicodedata
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, QAbstractTableModel, \
-    QModelIndex, Qt, qVersion, QItemSelectionModel, QLocale
+    QModelIndex, Qt, QItemSelectionModel, QLocale
 from PyQt5.QtGui import QColor
 from PyQt5.QtWidgets import QWidget, QHeaderView, QAbstractItemView
 
@@ -30,6 +30,7 @@
 
 import UI.PixmapCache
 import Preferences
+from Globals import qVersionTuple
 
 
 class SymbolsModel(QAbstractTableModel):
@@ -508,7 +509,7 @@
         self.symbolsTable.selectionModel().currentRowChanged.connect(
             self.__currentRowChanged)
         
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             self.symbolsTable.horizontalHeader().setSectionResizeMode(
                 QHeaderView.Fixed)
         else:
--- a/UI/UserInterface.py	Sat May 06 13:44:26 2017 +0200
+++ b/UI/UserInterface.py	Sat Jun 03 13:08:50 2017 +0200
@@ -27,12 +27,14 @@
 from PyQt5.Qsci import QSCINTILLA_VERSION_STR
 from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager, \
     QNetworkRequest, QNetworkReply
+
+from Globals import qVersionTuple
 try:
     from PyQt5 import QtWebKit      # __IGNORE_WARNING__
     WEBKIT_AVAILABLE = True
 except ImportError:
     WEBKIT_AVAILABLE = False
-if qVersion() < "5.6.0":
+if qVersionTuple() < (5, 6, 0):
     WEBENGINE_AVAILABLE = False
 else:
     try:
@@ -575,12 +577,18 @@
             self.SAServer = None
         
         # now finalize the plugin manager setup
+        splash.showMessage(self.tr("Initializing Plugins..."))
         self.pluginManager.finalizeSetup()
         # now activate plugins having autoload set to True
         splash.showMessage(self.tr("Activating Plugins..."))
         self.pluginManager.activatePlugins()
         splash.showMessage(self.tr("Generating Plugins Toolbars..."))
         self.pluginManager.initPluginToolbars(self.toolbarManager)
+        if Preferences.getPluginManager("StartupCleanup"):
+            splash.showMessage(self.tr("Cleaning Plugins Download Area..."))
+            from PluginManager.PluginRepositoryDialog import \
+                PluginRepositoryDownloadCleanup
+            PluginRepositoryDownloadCleanup(quiet=True)
         
         # now read the keyboard shortcuts for all the actions
         from Preferences import Shortcuts
@@ -3192,7 +3200,7 @@
                 Utilities.generateDistroInfo("\r\n"))
         
         url = QUrl("mailto:{0}".format(address))
-        if qVersion() >= "5.0.0":
+        if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery
             urlQuery = QUrlQuery(url)
             urlQuery.addQueryItem("subject", subject)
@@ -3619,11 +3627,8 @@
         """
         menu.clear()
         
-        tbList = []
-        for name, (text, tb) in list(self.__toolbars.items()):
-            tbList.append((text, tb, name))
-        
-        for text, tb, name in sorted(tbList, key=lambda t: t[0]):
+        for name, (text, tb) in sorted(self.__toolbars.items(),
+                                       key=lambda t: t[1][0]):
             act = menu.addAction(text)
             act.setCheckable(True)
             act.setChecked(not tb.isHidden())
--- a/Utilities/BackgroundService.py	Sat May 06 13:44:26 2017 +0200
+++ b/Utilities/BackgroundService.py	Sat Jun 03 13:08:50 2017 +0200
@@ -203,10 +203,14 @@
                     self.enqueueRequest(*self.runningJob)
                 else:
                     fx, lng, fn, data = self.runningJob
-                    self.services[(fx, lng)][3](fx, lng, fn, self.tr(
-                        'An error in Erics background client stopped the'
-                        ' service.')
-                    )
+                    try:
+                        self.services[(fx, lng)][3](fx, lng, fn, self.tr(
+                            'An error in Erics background client stopped the'
+                            ' service.')
+                        )
+                    except KeyError:
+                        # ignore silently
+                        pass
                 if res != E5MessageBox.No:
                     self.isWorking = None
                     self.restartService(lang, True)
--- a/Utilities/__init__.py	Sat May 06 13:44:26 2017 +0200
+++ b/Utilities/__init__.py	Sat Jun 03 13:08:50 2017 +0200
@@ -65,7 +65,7 @@
 from Globals import (  # __IGNORE_WARNING__
     isWindowsPlatform, isLinuxPlatform, isMacPlatform, getConfigDir,
     setConfigDir, getPythonModulesDirectory, getPyQt5ModulesDirectory,
-    getQtBinariesPath, getPyQtToolsPath)
+    getQtBinariesPath, getPyQtToolsPath, qVersionTuple)
 
 from E5Gui.E5Application import e5App
 
@@ -1801,7 +1801,7 @@
         qVersion(), linesep, PYQT_VERSION_STR, linesep)
     info += "  sip {0}{1}  QScintilla {2}{3}".format(
         sip_version_str, linesep, QSCINTILLA_VERSION_STR, linesep)
-    if qVersion() >= "5.6.0":
+    if qVersionTuple() >= (5, 6, 0):
         try:
             from PyQt5 import QtWebEngineWidgets    # __IGNORE_WARNING__
             from WebBrowser.Tools import WebBrowserTools
--- a/ViewManager/ViewManager.py	Sat May 06 13:44:26 2017 +0200
+++ b/ViewManager/ViewManager.py	Sat Jun 03 13:08:50 2017 +0200
@@ -2831,7 +2831,7 @@
             """ dialog is shown to enter the searchtext and options"""
             """ for the search.</p>"""
         ))
-        self.searchAct.triggered.connect(self.__search)
+        self.searchAct.triggered.connect(self.showSearchWidget)
         self.searchActions.append(self.searchAct)
         
         self.searchNextAct = E5Action(
@@ -2852,7 +2852,7 @@
             """ editor. The previously entered searchtext and options are"""
             """ reused.</p>"""
         ))
-        self.searchNextAct.triggered.connect(self.__searchWidget.findNext)
+        self.searchNextAct.triggered.connect(self.__searchNext)
         self.searchActions.append(self.searchNextAct)
         
         self.searchPrevAct = E5Action(
@@ -2872,7 +2872,7 @@
             """ editor. The previously entered searchtext and options are"""
             """ reused.</p>"""
         ))
-        self.searchPrevAct.triggered.connect(self.__searchWidget.findPrev)
+        self.searchPrevAct.triggered.connect(self.__searchPrev)
         self.searchActions.append(self.searchPrevAct)
         
         self.searchClearMarkersAct = E5Action(
@@ -2956,9 +2956,77 @@
             """ A dialog is shown to enter the searchtext, the replacement"""
             """ text and options for the search and replace.</p>"""
         ))
-        self.replaceAct.triggered.connect(self.__replace)
+        self.replaceAct.triggered.connect(self.showReplaceWidget)
         self.searchActions.append(self.replaceAct)
         
+        self.replaceAndSearchAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace and Search'),
+            UI.PixmapCache.getIcon("editReplaceSearch.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace and Search'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Meta+R", "Search|Replace and Search")),
+            0,
+            self.searchActGrp, 'vm_replace_search')
+        self.replaceAndSearchAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager',
+            'Replace the found text and search the next occurrence'))
+        self.replaceAndSearchAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace and Search</b>"""
+            """<p>Replace the found occurrence of text in the current"""
+            """ editor and search for the next one. The previously entered"""
+            """ search text and options are reused.</p>"""
+        ))
+        self.replaceAndSearchAct.triggered.connect(
+            self.__replaceWidget.replaceSearch)
+        self.searchActions.append(self.replaceAndSearchAct)
+        
+        self.replaceSelectionAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace Occurrence'),
+            UI.PixmapCache.getIcon("editReplace.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace Occurrence'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Ctrl+Meta+R", "Search|Replace Occurrence")),
+            0,
+            self.searchActGrp, 'vm_replace_occurrence')
+        self.replaceSelectionAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager', 'Replace the found text'))
+        self.replaceSelectionAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace Occurrence</b>"""
+            """<p>Replace the found occurrence of the search text in the"""
+            """ current editor.</p>"""
+        ))
+        self.replaceSelectionAct.triggered.connect(
+            self.__replaceWidget.replace)
+        self.searchActions.append(self.replaceSelectionAct)
+        
+        self.replaceAllAct = E5Action(
+            QCoreApplication.translate(
+                'ViewManager', 'Replace All'),
+            UI.PixmapCache.getIcon("editReplaceAll.png"),
+            QCoreApplication.translate(
+                'ViewManager', 'Replace All'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Shift+Meta+R", "Search|Replace All")),
+            0,
+            self.searchActGrp, 'vm_replace_all')
+        self.replaceAllAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager', 'Replace search text occurrences'))
+        self.replaceAllAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Replace All</b>"""
+            """<p>Replace all occurrences of the search text in the current"""
+            """ editor.</p>"""
+        ))
+        self.replaceAllAct.triggered.connect(
+            self.__replaceWidget.replaceAll)
+        self.searchActions.append(self.replaceAllAct)
+        
         self.quickSearchAct = E5Action(
             QCoreApplication.translate('ViewManager', 'Quicksearch'),
             UI.PixmapCache.getIcon("quickFindNext.png"),
@@ -3310,6 +3378,9 @@
         toolbarManager.addToolBar(tb, tb.windowTitle())
         toolbarManager.addAction(self.gotoAct, tb.windowTitle())
         toolbarManager.addAction(self.gotoBraceAct, tb.windowTitle())
+        toolbarManager.addAction(self.replaceSelectionAct, tb.windowTitle())
+        toolbarManager.addAction(self.replaceAllAct, tb.windowTitle())
+        toolbarManager.addAction(self.replaceAndSearchAct, tb.windowTitle())
         
         return tb, qtb
     
@@ -5603,17 +5674,35 @@
             txt += ext
             self.quickFindtextCombo.lineEdit().setText(txt)
         
-    def __search(self):
-        """
-        Private method to handle the search action.
+    def showSearchWidget(self):
+        """
+        Public method to show the search widget.
         """
         self.__replaceWidget.hide()
         self.__searchWidget.show()
         self.__searchWidget.show(self.textForFind())
-        
-    def __replace(self):
-        """
-        Private method to handle the replace action.
+    
+    def __searchNext(self):
+        """
+        Private slot to handle the search next action.
+        """
+        if self.__replaceWidget.isVisible():
+            self.__replaceWidget.findNext()
+        else:
+            self.__searchWidget.findNext()
+    
+    def __searchPrev(self):
+        """
+        Private slot to handle the search previous action.
+        """
+        if self.__replaceWidget.isVisible():
+            self.__replaceWidget.findPrev()
+        else:
+            self.__searchWidget.findPrev()
+    
+    def showReplaceWidget(self):
+        """
+        Public method to show the replace widget.
         """
         self.__searchWidget.hide()
         self.__replaceWidget.show(self.textForFind())
--- a/WebBrowser/AdBlock/AdBlockRule.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/AdBlock/AdBlockRule.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,9 +11,11 @@
 
 import re
 
-from PyQt5.QtCore import qVersion, Qt, QRegExp
+from PyQt5.QtCore import Qt, QRegExp
 from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInfo
 
+from Globals import qVersionTuple
+
 
 def toSecondLevelDomain(url):
     """
@@ -532,7 +534,7 @@
         match = (
             req.resourceType() ==
             QWebEngineUrlRequestInfo.ResourceTypeSubResource)
-        if qVersion() >= "5.7.0":
+        if qVersionTuple() >= (5, 7, 0):
             match = match or (
                 req.resourceType() ==
                 QWebEngineUrlRequestInfo.ResourceTypePluginResource)
--- a/WebBrowser/Download/DownloadItem.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/Download/DownloadItem.py	Sat Jun 03 13:08:50 2017 +0200
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, qVersion, Qt, QTime, QUrl, \
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QUrl, \
     QStandardPaths, QFileInfo
 from PyQt5.QtGui import QPalette, QDesktopServices
 from PyQt5.QtWidgets import QWidget, QStyle, QDialog
@@ -27,6 +27,7 @@
 import UI.PixmapCache
 import Utilities.MimeTypes
 import Globals
+from Globals import qVersionTuple
 
 
 class DownloadItem(QWidget, Ui_DownloadItem):
@@ -129,10 +130,10 @@
         if self.__gettingFileName:
             return
         
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             savePage = self.__downloadItem.type() == \
                 QWebEngineDownloadItem.SavePage
-        elif qVersion() >= "5.7.0":
+        elif qVersionTuple() >= (5, 7, 0):
             savePage = self.__downloadItem.savePageFormat() != \
                 QWebEngineDownloadItem.UnknownSaveFormat
         else:
--- a/WebBrowser/GreaseMonkey/GreaseMonkeyScript.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/GreaseMonkey/GreaseMonkeyScript.py	Sat Jun 03 13:08:50 2017 +0200
@@ -10,7 +10,7 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl, QRegExp, \
-    QByteArray, QCryptographicHash, qVersion
+    QByteArray, QCryptographicHash
 from PyQt5.QtWebEngineWidgets import QWebEngineScript
 
 from .GreaseMonkeyJavaScript import bootstrap_js, values_js
@@ -19,6 +19,8 @@
 from ..Tools.DelayedFileWatcher import DelayedFileWatcher
 from ..WebBrowserPage import WebBrowserPage
 
+from Globals import qVersionTuple
+
 
 class GreaseMonkeyScript(QObject):
     """
@@ -328,7 +330,7 @@
             QByteArray(self.fullName().encode("utf-8")),
             QCryptographicHash.Md4).toHex()).decode("ascii")
         valuesScript = values_js.format(nspace)
-        if qVersion() < "5.8.0":
+        if qVersionTuple() < (5, 8, 0):
             runCheck = """
                 for (var value of {0}) {{
                     var re = new RegExp(value);
@@ -370,7 +372,7 @@
         @rtype QWebEngineScript
         @exception ValueError raised to indicate an unsupported start point
         """
-        if qVersion() < "5.8.0":
+        if qVersionTuple() < (5, 8, 0):
             if self.startAt() == GreaseMonkeyScript.DocumentStart:
                 injectionPoint = QWebEngineScript.DocumentCreation
             elif self.startAt() == GreaseMonkeyScript.DocumentEnd:
@@ -385,7 +387,7 @@
             bootstrap_js, self.__script
         ))
         script.setName(self.fullName())
-        if qVersion() < "5.8.0":
+        if qVersionTuple() < (5, 8, 0):
             script.setInjectionPoint(injectionPoint)
         script.setWorldId(WebBrowserPage.SafeJsWorld)
         script.setRunsOnSubFrames(not self.__noFrames)
@@ -401,7 +403,7 @@
         @return JavaScript script containing the list
         @rtype str
         """
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             script = ""
         else:
             patternList = []
--- a/WebBrowser/History/HistoryMenu.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/History/HistoryMenu.py	Sat Jun 03 13:08:50 2017 +0200
@@ -288,6 +288,7 @@
         E5ModelMenu.__init__(self, parent)
         
         self.__tabWidget = tabWidget
+        self.__mw = parent
         
         self.__historyManager = None
         self.__historyMenuModel = None
@@ -371,7 +372,7 @@
         
         act = self.addAction(UI.PixmapCache.getIcon("history.png"),
                              self.tr("Show All History..."))
-        act.triggered.connect(self.__showHistoryDialog)
+        act.triggered.connect(self.showHistoryDialog)
         act = self.addAction(UI.PixmapCache.getIcon("historyClear.png"),
                              self.tr("Clear History..."))
         act.triggered.connect(self.__clearHistoryDialog)
@@ -387,12 +388,12 @@
         for act in self.__initialActions:
             self.addAction(act)
     
-    def __showHistoryDialog(self):
+    def showHistoryDialog(self):
         """
-        Private slot to show the history dialog.
+        Public slot to show the history dialog.
         """
         from .HistoryDialog import HistoryDialog
-        dlg = HistoryDialog(self)
+        dlg = HistoryDialog(self.__mw)
         dlg.openUrl.connect(self.openUrl)
         dlg.newTab.connect(self.newTab)
         dlg.newBackgroundTab.connect(self.newBackgroundTab)
--- a/WebBrowser/Navigation/NavigationBar.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/Navigation/NavigationBar.py	Sat Jun 03 13:08:50 2017 +0200
@@ -9,13 +9,18 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import Qt
+from PyQt5.QtCore import Qt, QUrl
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStyle, QToolButton, \
     QSplitter, QSizePolicy, QMenu, QAction
 
+from E5Gui.E5ToolButton import E5ToolButton
+
 from WebBrowser.WebBrowserWindow import WebBrowserWindow
 
 import UI.PixmapCache
+import Preferences
+
+from .ReloadStopButton import ReloadStopButton
 
 
 class NavigationBar(QWidget):
@@ -44,7 +49,7 @@
             self.style().pixelMetric(QStyle.PM_ToolBarItemSpacing, None, self))
         self.setLayout(self.__layout)
         
-        self.__backButton = QToolButton(self)
+        self.__backButton = E5ToolButton(self)
         self.__backButton.setObjectName("navigation_back_button")
         self.__backButton.setToolTip(self.tr("Move one screen backward"))
         self.__backButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
@@ -54,7 +59,7 @@
             UI.PixmapCache.getIcon("back.png"))
         self.__backButton.setEnabled(False)
         
-        self.__forwardButton = QToolButton(self)
+        self.__forwardButton = E5ToolButton(self)
         self.__forwardButton.setObjectName("navigation_forward_button")
         self.__forwardButton.setToolTip(self.tr("Move one screen forward"))
         self.__forwardButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
@@ -70,25 +75,9 @@
         self.__backNextLayout.addWidget(self.__backButton)
         self.__backNextLayout.addWidget(self.__forwardButton)
         
-        self.__reloadButton = QToolButton(self)
-        self.__reloadButton.setObjectName("navigation_reload_button")
-        self.__reloadButton.setToolTip(self.tr("Reload the current screen"))
-        self.__reloadButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
-        self.__reloadButton.setFocusPolicy(Qt.NoFocus)
-        self.__reloadButton.setAutoRaise(True)
-        self.__reloadButton.setIcon(
-            UI.PixmapCache.getIcon("reload.png"))
+        self.__reloadStopButton = ReloadStopButton(self)
         
-        self.__stopButton = QToolButton(self)
-        self.__stopButton.setObjectName("navigation_stop_button")
-        self.__stopButton.setToolTip(self.tr("Stop loading"))
-        self.__stopButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
-        self.__stopButton.setFocusPolicy(Qt.NoFocus)
-        self.__stopButton.setAutoRaise(True)
-        self.__stopButton.setIcon(
-            UI.PixmapCache.getIcon("stopLoading.png"))
-        
-        self.__homeButton = QToolButton(self)
+        self.__homeButton = E5ToolButton(self)
         self.__homeButton.setObjectName("navigation_home_button")
         self.__homeButton.setToolTip(self.tr("Move to the initial screen"))
         self.__homeButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
@@ -97,18 +86,29 @@
         self.__homeButton.setIcon(
             UI.PixmapCache.getIcon("home.png"))
         
-        self.__exitFullScreenButton = QToolButton(self)
+        self.__exitFullScreenButton = E5ToolButton(self)
         self.__exitFullScreenButton.setObjectName(
             "navigation_exitfullscreen_button")
+        self.__exitFullScreenButton.setIcon(
+            UI.PixmapCache.getIcon("windowRestore.png"))
         self.__exitFullScreenButton.setToolTip(self.tr("Exit Fullscreen"))
         self.__exitFullScreenButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
         self.__exitFullScreenButton.setFocusPolicy(Qt.NoFocus)
         self.__exitFullScreenButton.setAutoRaise(True)
-        self.__exitFullScreenButton.setIcon(
-            UI.PixmapCache.getIcon("windowRestore.png"))
         self.__exitFullScreenButton.clicked.connect(self.__mw.toggleFullScreen)
         self.__exitFullScreenButton.setVisible(False)
         
+        self.__superMenuButton = E5ToolButton(self)
+        self.__superMenuButton.setObjectName(
+            "navigation_supermenu_button")
+        self.__superMenuButton.setIcon(UI.PixmapCache.getIcon("superMenu.png"))
+        self.__superMenuButton.setToolTip(self.tr("Main Menu"))
+        self.__superMenuButton.setPopupMode(QToolButton.InstantPopup)
+        self.__superMenuButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
+        self.__superMenuButton.setFocusPolicy(Qt.NoFocus)
+        self.__superMenuButton.setAutoRaise(True)
+        self.__superMenuButton.setShowMenuInside(True)
+        
         self.__navigationSplitter = QSplitter(self)
         urlBar = self.__mw.tabWidget().stackedUrlBar()
         self.__navigationSplitter.addWidget(urlBar)
@@ -128,30 +128,46 @@
         self.__navigationSplitter.setCollapsible(0, False)
         
         self.__layout.addLayout(self.__backNextLayout)
-        self.__layout.addWidget(self.__reloadButton)
-        self.__layout.addWidget(self.__stopButton)
+        self.__layout.addWidget(self.__reloadStopButton)
         self.__layout.addWidget(self.__homeButton)
         self.__layout.addWidget(self.__navigationSplitter)
         self.__layout.addWidget(self.__exitFullScreenButton)
+        self.__layout.addWidget(self.__superMenuButton)
+        
+        self.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.customContextMenuRequested.connect(self.__contextMenuRequested)
         
         self.__backMenu = QMenu(self)
-        self.__backMenu.aboutToShow.connect(self.__showBackMenu)
         self.__backMenu.triggered.connect(self.__navigationMenuActionTriggered)
         self.__backButton.setMenu(self.__backMenu)
-        self.__backButton.setPopupMode(QToolButton.MenuButtonPopup)
+        self.__backButton.aboutToShowMenu.connect(self.__showBackMenu)
         
         self.__forwardMenu = QMenu(self)
-        self.__forwardMenu.aboutToShow.connect(self.__showForwardMenu)
         self.__forwardMenu.triggered.connect(
             self.__navigationMenuActionTriggered)
         self.__forwardButton.setMenu(self.__forwardMenu)
-        self.__forwardButton.setPopupMode(QToolButton.MenuButtonPopup)
+        self.__forwardButton.aboutToShowMenu.connect(self.__showForwardMenu)
         
         self.__backButton.clicked.connect(self.__goBack)
+        self.__backButton.middleClicked.connect(self.__goBackInNewTab)
+        self.__backButton.controlClicked.connect(self.__goBackInNewTab)
         self.__forwardButton.clicked.connect(self.__goForward)
-        self.__reloadButton.clicked.connect(self.__reload)
-        self.__stopButton.clicked.connect(self.__stopLoad)
+        self.__forwardButton.middleClicked.connect(self.__goForwardInNewTab)
+        self.__forwardButton.controlClicked.connect(self.__goForwardInNewTab)
+        self.__reloadStopButton.reloadClicked.connect(self.__reload)
+        self.__reloadStopButton.stopClicked.connect(self.__stopLoad)
         self.__homeButton.clicked.connect(self.__goHome)
+        self.__homeButton.middleClicked.connect(self.__goHomeInNewTab)
+        self.__homeButton.controlClicked.connect(self.__goHomeInNewTab)
+    
+    def superMenuButton(self):
+        """
+        Public method to get a reference to the super menu button.
+        
+        @return reference to the super menu button
+        @rtype QToolButton
+        """
+        return self.__superMenuButton
     
     def backButton(self):
         """
@@ -171,23 +187,14 @@
         """
         return self.__forwardButton
     
-    def reloadButton(self):
+    def reloadStopButton(self):
         """
-        Public method to get a reference to the reload button.
+        Public method to get a reference to the reload/stop button.
         
-        @return reference to the reload button
+        @return reference to the reload/stop button
         @rtype QToolButton
         """
-        return self.__reloadButton
-    
-    def stopButton(self):
-        """
-        Public method to get a reference to the stop button.
-        
-        @return reference to the stop button
-        @rtype QToolButton
-        """
-        return self.__stopButton
+        return self.__reloadStopButton
     
     def exitFullScreenButton(self):
         """
@@ -287,18 +294,52 @@
         """
         self.__mw.currentBrowser().backward()
     
+    def __goBackInNewTab(self):
+        """
+        Private slot handling a middle click or Ctrl left click of the
+        backward button.
+        """
+        history = self.__mw.currentBrowser().history()
+        if history.canGoBack():
+            backItem = history.backItem()
+            self.__mw.newTab(link=backItem.url(),
+                             addNextTo=self.__mw.currentBrowser(),
+                             background=True)
+    
     def __goForward(self):
         """
         Private slot called to handle the forward button.
         """
         self.__mw.currentBrowser().forward()
     
+    def __goForwardInNewTab(self):
+        """
+        Private slot handling a middle click or Ctrl left click of the
+        forward button.
+        """
+        history = self.__mw.currentBrowser().history()
+        if history.canGoForward():
+            forwardItem = history.forwardItem()
+            self.__mw.newTab(link=forwardItem.url(),
+                             addNextTo=self.__mw.currentBrowser(),
+                             background=True)
+    
     def __goHome(self):
         """
         Private slot called to handle the home button.
         """
         self.__mw.currentBrowser().home()
     
+    def __goHomeInNewTab(self):
+        """
+        Private slot handling a middle click or Ctrl left click of the
+        home button.
+        """
+        homeUrl = QUrl(Preferences.getWebBrowser("HomePage"))
+        self.__mw.newTab(link=homeUrl,
+                         addNextTo=self.__mw.currentBrowser(),
+                         background=True)
+    
     def __reload(self):
         """
         Private slot called to handle the reload button.
@@ -320,3 +361,13 @@
             cb.history().clear()
             self.__mw.setForwardAvailable(cb.isForwardAvailable())
             self.__mw.setBackwardAvailable(cb.isBackwardAvailable())
+    
+    def __contextMenuRequested(self, pos):
+        """
+        Private method to handle a context menu request.
+        
+        @param pos position of the request
+        @type QPoint
+        """
+        menu = self.__mw.createPopupMenu()
+        menu.exec_(self.mapToGlobal(pos))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/Navigation/ReloadStopButton.py	Sat Jun 03 13:08:50 2017 +0200
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a button alternating between reload and stop.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt
+
+from E5Gui.E5ToolButton import E5ToolButton
+
+import UI.PixmapCache
+
+
+class ReloadStopButton(E5ToolButton):
+    """
+    Class implementing a button alternating between reload and stop.
+    
+    @signal reloadClicked() emitted to initiate a reload action
+    @signal stopClicked() emitted to initiate a stop action
+    """
+    reloadClicked = pyqtSignal()
+    stopClicked = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(ReloadStopButton, self).__init__(parent)
+        
+        self.setObjectName("navigation_reloadstop_button")
+        self.setToolButtonStyle(Qt.ToolButtonIconOnly)
+        self.setFocusPolicy(Qt.NoFocus)
+        self.setAutoRaise(True)
+        
+        self.__loading = False
+        
+        self.clicked.connect(self.__buttonClicked)
+        
+        self.__updateButton()
+    
+    @pyqtSlot()
+    def __buttonClicked(self):
+        """
+        Private slot handling a user clicking the button.
+        """
+        if self.__loading:
+            self.stopClicked.emit()
+        else:
+            self.reloadClicked.emit()
+    
+    @pyqtSlot()
+    def __updateButton(self):
+        """
+        Private slot to update the button.
+        """
+        if self.__loading:
+            self.setIcon(UI.PixmapCache.getIcon("stopLoading.png"))
+            self.setToolTip(self.tr("Stop loading"))
+        else:
+            self.setIcon(UI.PixmapCache.getIcon("reload.png"))
+            self.setToolTip(self.tr("Reload the current screen"))
+    
+    def setLoading(self, loading):
+        """
+        Public method to set the loading state.
+        
+        @param loading flag indicating the new loading state
+        @type bool
+        """
+        self.__loading = loading
+        self.__updateButton()
--- a/WebBrowser/QtHelp/HelpDocsInstaller.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/QtHelp/HelpDocsInstaller.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,12 +12,14 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, qVersion, QThread, Qt, QMutex, \
-    QDateTime, QDir, QLibraryInfo, QFileInfo
+from PyQt5.QtCore import pyqtSignal, QThread, Qt, QMutex, QDateTime, QDir, \
+    QLibraryInfo, QFileInfo
 from PyQt5.QtHelp import QHelpEngineCore
 
 from eric6config import getConfig
 
+from Globals import qVersionTuple
+
 
 class HelpDocsInstaller(QThread):
     """
@@ -134,7 +136,7 @@
                 docsPathList = QDir.fromNativeSeparators(docsPath).split("/")
                 docsPath = os.sep.join(
                     docsPathList[:-3] +
-                    ["Docs", "Qt-{0}".format(qVersion()[:3])])
+                    ["Docs", "Qt-{0}.{1}".format(*qVersionTuple())])
             docsPath = QDir(docsPath)
         else:
             # unsupported Qt version
--- a/WebBrowser/Tools/FilePrinter.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/Tools/FilePrinter.py	Sat Jun 03 13:08:50 2017 +0200
@@ -14,10 +14,11 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import qVersion, QFile, QStandardPaths, QProcess
+from PyQt5.QtCore import QFile, QStandardPaths, QProcess
 from PyQt5.QtPrintSupport import QPrinter, QPrintEngine
 
 import Globals
+from Globals import qVersionTuple
 
 
 _FilePrintJobs = []
@@ -171,7 +172,7 @@
         argsList.append(fileName)
         
         self.__process = QProcess()
-        if qVersion() < "5.6.0":
+        if qVersionTuple() < (5, 6, 0):
             self.__process.error.connect(self.__processError)
         else:
             self.__process.errorOccurred.connect(self.__processError)
--- a/WebBrowser/Tools/Scripts.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/Tools/Scripts.py	Sat Jun 03 13:08:50 2017 +0200
@@ -245,14 +245,14 @@
     source = """
         (function() {
             function findUsername(inputs) {
-                for (var i = 0; i < inputs.length; ++i)
-                    if (inputs[i].type == 'text' && inputs[i].value.length &&
-                        inputs[i].name.indexOf('user') != -1)
-                        return inputs[i].value;
-                for (var i = 0; i < inputs.length; ++i)
-                    if (inputs[i].type == 'text' && inputs[i].value.length &&
-                        inputs[i].name.indexOf('name') != -1)
-                        return inputs[i].value;
+                var usernameNames = ['user', 'name', 'login'];
+                for (var i = 0; i < usernameNames.length; ++i) {
+                    for (var j = 0; j < inputs.length; ++j)
+                        if (inputs[j].type == 'text' &&
+                            inputs[j].value.length &&
+                            inputs[j].name.indexOf(usernameNames[i]) != -1)
+                            return inputs[j].value;
+                }
                 for (var i = 0; i < inputs.length; ++i)
                     if (inputs[i].type == 'text' && inputs[i].value.length)
                         return inputs[i].value;
@@ -297,10 +297,12 @@
             var observer = new MutationObserver(function(mutations) {
                 for (var i = 0; i < mutations.length; ++i)
                     for (var j = 0; j < mutations[i].addedNodes.length; ++j)
-                        if (mutations[i].addedNodes[j].tagName == 'form')
+                        if (mutations[i].addedNodes[j].tagName == 'FORM')
                             registerForm(mutations[i].addedNodes[j]);
             });
-            observer.observe(document.documentElement, { childList: true });
+            observer.observe(document.documentElement, {
+                childList: true, subtree: true
+            });
             
         })()"""
     return source
--- a/WebBrowser/WebBrowserPage.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/WebBrowserPage.py	Sat Jun 03 13:08:50 2017 +0200
@@ -14,7 +14,7 @@
 except NameError:
     pass
 
-from PyQt5.QtCore import pyqtSlot, qVersion, QUrl, QTimer, QEventLoop, QPoint
+from PyQt5.QtCore import pyqtSlot, QUrl, QTimer, QEventLoop, QPoint
 from PyQt5.QtGui import QDesktopServices
 from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineSettings, \
     QWebEngineScript
@@ -27,13 +27,14 @@
 from .Tools.WebHitTestResult import WebHitTestResult
 
 import Preferences
+from Globals import qVersionTuple
 
 
 class WebBrowserPage(QWebEnginePage):
     """
     Class implementing an enhanced web page.
     """
-    if qVersion() >= "5.7.0":
+    if qVersionTuple() >= (5, 7, 0):
         # SafeJsWorld = QWebEngineScript.ApplicationWorld
         SafeJsWorld = QWebEngineScript.MainWorld
     else:
@@ -203,7 +204,7 @@
             ended
         @type function
         """
-        if qVersion() >= "5.7.0" and worldId > -1:
+        if qVersionTuple() >= (5, 7, 0) and worldId > -1:
             if callback is None:
                 QWebEnginePage.runJavaScript(self, script, worldId)
             else:
--- a/WebBrowser/WebBrowserTabWidget.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/WebBrowserTabWidget.py	Sat Jun 03 13:08:50 2017 +0200
@@ -12,7 +12,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \
-    QFileDevice, QTemporaryFile, qVersion
+    QFileDevice, QTemporaryFile
 from PyQt5.QtGui import QIcon, QPixmap, QPainter
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, \
     QDialog, QApplication
@@ -33,6 +33,7 @@
 import Utilities
 import Preferences
 import Globals
+from Globals import qVersionTuple
 
 from eric6config import getConfig
 
@@ -185,21 +186,21 @@
             self.tr('Close All'), self.closeAllBrowsers)
         self.__tabContextMenu.addSeparator()
         # TODO: re-check this once printing on Windows is reliable
-##        if qVersion() >= "5.8.0" or (
-##                not Globals.isWindowsPlatform() and qVersion() < "5.7.0"):
+##        if qVersionTuple() >= (5, 8, 0) or (
+##            not Globals.isWindowsPlatform() and qVersionTuple() < (5, 7, 0)):
         if not Globals.isWindowsPlatform() and (
-                qVersion() < "5.7.0" or qVersion() >= "5.8.0"):
+                qVersionTuple() < (5, 7, 0) or qVersionTuple() >= (5, 8, 0)):
             self.__tabContextMenu.addAction(
                 UI.PixmapCache.getIcon("printPreview.png"),
                 self.tr('Print Preview'), self.__tabContextMenuPrintPreview)
         # TODO: re-check this once printing on Windows is reliable
-##        if qVersion() >= "5.8.0" or (
-##                not Globals.isWindowsPlatform() or qVersion() >= "5.7.0"):
-        if not Globals.isWindowsPlatform() and qVersion() >= "5.7.0":
+##        if qVersionTuple() >= (5, 8, 0) or (
+##            not Globals.isWindowsPlatform() or qVersionTuple() >= (5, 7, 0)):
+        if not Globals.isWindowsPlatform() and qVersionTuple() >= (5, 7, 0):
             self.__tabContextMenu.addAction(
                 UI.PixmapCache.getIcon("print.png"),
                 self.tr('Print'), self.__tabContextMenuPrint)
-        if Globals.isLinuxPlatform() or qVersion() >= "5.7.0":
+        if Globals.isLinuxPlatform() or qVersionTuple() >= (5, 7, 0):
             self.__tabContextMenu.addAction(
                 UI.PixmapCache.getIcon("printPdf.png"),
                 self.tr('Print as PDF'), self.__tabContextMenuPrintPdf)
@@ -816,7 +817,7 @@
         
         preview = QPrintPreviewDialog(printer, self)
         preview.resize(800, 750)
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             preview.paintRequested.connect(
                 lambda p: self.__printPreviewRequested(p, browser))
         else:
--- a/WebBrowser/WebBrowserView.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/WebBrowserView.py	Sat Jun 03 13:08:50 2017 +0200
@@ -17,7 +17,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSignal, QUrl, QFileInfo, Qt, QTimer, QEvent, \
-    QPoint, QDateTime, qVersion, QStandardPaths
+    QPoint, QDateTime, QStandardPaths
 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \
     QContextMenuEvent, QPixmap
 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication
@@ -38,6 +38,7 @@
 import Preferences
 import UI.PixmapCache
 import Utilities
+from Globals import qVersionTuple
 
 
 class WebBrowserView(QWebEngineView):
@@ -122,7 +123,7 @@
         self.__inspector = None
         WebInspector.registerView(self)
         
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             if self.parentWidget() is not None:
                 self.parentWidget().installEventFilter(self)
             
@@ -342,7 +343,7 @@
         """
         Public slot to clear the current selection.
         """
-        if qVersion() >= "5.7.0":
+        if qVersionTuple() >= (5, 7, 0):
             self.triggerPageAction(QWebEnginePage.Unselect)
         else:
             self.page().runJavaScript(
@@ -525,11 +526,11 @@
         @type WebHitTestResult
         """
         spellCheckActionCount = 0
-        if qVersion() >= "5.7.0":
+        if qVersionTuple() >= (5, 7, 0):
             contextMenuData = self.page().contextMenuData()
             hitTest.updateWithContextMenuData(contextMenuData)
             
-            if qVersion() >= "5.8.0" and \
+            if qVersionTuple() >= (5, 8, 0) and \
                bool(contextMenuData.misspelledWord()):
                 boldFont = menu.font()
                 boldFont.setBold(True)
@@ -1287,8 +1288,8 @@
         if self.__mw and self.__mw.isFullScreen():
             if self.__mw.isFullScreenNavigationVisible():
                 self.__mw.hideFullScreenNavigation()
-            elif evt.y() < 5:
-                # mouse is within 5px to the top
+            elif evt.y() < 10:
+                # mouse is within 10px to the top
                 self.__mw.showFullScreenNavigation()
         
         if WebBrowserWindow.autoScroller().mouseMove(evt):
@@ -1391,7 +1392,7 @@
         @rtype bool
         """
         # find the render widget receiving events for the web page
-        if qVersion() < "5.8.0":
+        if qVersionTuple() < (5, 8, 0):
             if obj is self and evt.type() == QEvent.ChildAdded:
                 child = evt.child()
                 if child and child.inherits(
@@ -1704,7 +1705,7 @@
         if url.isEmpty():
             return
         
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             # since Qt 5.8.0
             fileName, savePageFormat = self.__getSavePageFileNameAndFormat()
             if fileName:
--- a/WebBrowser/WebBrowserWindow.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/WebBrowserWindow.py	Sat Jun 03 13:08:50 2017 +0200
@@ -18,11 +18,11 @@
 import sys
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \
-    QUrl, QTextCodec, QProcess, QEvent, qVersion
+    QUrl, QTextCodec, QProcess, QEvent
 from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \
     QComboBox, QLabel, QMenu, QToolButton, QLineEdit, QApplication, \
-    QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog
+    QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog, QAction
 from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEnginePage, \
     QWebEngineProfile, QWebEngineScript
 try:
@@ -44,6 +44,7 @@
 
 import Utilities
 import Globals
+from Globals import qVersionTuple
 
 import UI.PixmapCache
 import UI.Config
@@ -167,7 +168,7 @@
             self.networkManager()
             
             self.__htmlFullScreen = False
-            self.__windowStates = 0
+            self.__windowStates = Qt.WindowNoState
             
             from .SearchWidget import SearchWidget
             from .QtHelp.HelpTocWidget import HelpTocWidget
@@ -312,9 +313,25 @@
             self.historyManager()
             self.greaseMonkeyManager()
             
+            # initialize the actions
             self.__initActions()
+            
+            # initialize the menus
             self.__initMenus()
-            self.__initToolbars()
+            self.__initSuperMenu()
+            if Preferences.getWebBrowser("MenuBarVisible"):
+                self.__navigationBar.superMenuButton().hide()
+            else:
+                self.menuBar().hide()
+            
+            # save references to toolbars in order to hide them
+            # when going full screen
+            self.__toolbars = {}
+            # initialize toolbars
+            if Preferences.getWebBrowser("ShowToolbars"):
+                self.__initToolbars()
+            self.__bookmarksToolBar.setVisible(
+                Preferences.getWebBrowser("BookmarksToolBarVisible"))
             
             syncMgr = self.syncManager()
             syncMgr.syncMessage.connect(self.statusBar().showMessage)
@@ -343,6 +360,9 @@
             self.networkIcon = E5NetworkIcon(self)
             self.statusBar().addPermanentWidget(self.networkIcon)
             
+            if not Preferences.getWebBrowser("StatusBarVisible"):
+                self.statusBar().hide()
+            
             QDesktopServices.setUrlHandler("http", self.__linkActivated)
             QDesktopServices.setUrlHandler("https", self.__linkActivated)
             
@@ -744,9 +764,9 @@
         self.__actions.append(self.exportBookmarksAct)
         
         # TODO: re-check this once printing on Windows is reliable
-##        if qVersion() >= "5.8.0" or (
-##                not Globals.isWindowsPlatform() or qVersion() >= "5.7.0"):
-        if not Globals.isWindowsPlatform() and qVersion() >= "5.7.0":
+##        if qVersionTuple() >= (5, 8, 0) or (
+##            not Globals.isWindowsPlatform() or qVersionTuple() >= (5, 7, 0)):
+        if not Globals.isWindowsPlatform() and qVersionTuple() >= (5, 7, 0):
             self.printAct = E5Action(
                 self.tr('Print'),
                 UI.PixmapCache.getIcon("print.png"),
@@ -764,7 +784,7 @@
         else:
             self.printAct = None
         
-        if Globals.isLinuxPlatform() or qVersion() >= "5.7.0":
+        if Globals.isLinuxPlatform() or qVersionTuple() >= (5, 7, 0):
             self.printPdfAct = E5Action(
                 self.tr('Print as PDF'),
                 UI.PixmapCache.getIcon("printPdf.png"),
@@ -784,10 +804,10 @@
             self.printPdfAct = None
         
         # TODO: re-check this once printing on Windows is reliable
-##        if qVersion() >= "5.8.0" or (
-##                not Globals.isWindowsPlatform() and qVersion() < "5.7.0"):
+##        if qVersionTuple() >= (5, 8, 0) or (
+##            not Globals.isWindowsPlatform() and qVersionTuple() < (5, 7, 0)):
         if not Globals.isWindowsPlatform() and (
-                qVersion() < "5.7.0" or qVersion() >= "5.8.0"):
+                qVersionTuple() < (5, 7, 0) or qVersionTuple() >= (5, 8, 0)):
             self.printPreviewAct = E5Action(
                 self.tr('Print Preview'),
                 UI.PixmapCache.getIcon("printPreview.png"),
@@ -806,6 +826,21 @@
         else:
             self.printPreviewAct = None
         
+        self.sendPageLinkAct = E5Action(
+            self.tr('Send Page Link'),
+            UI.PixmapCache.getIcon("mailSend.png"),
+            self.tr('Send Page Link'),
+            0, 0, self, 'webbrowser_send_page_link')
+        self.sendPageLinkAct.setStatusTip(self.tr(
+            'Send the link of the current page via email'))
+        self.sendPageLinkAct.setWhatsThis(self.tr(
+            """<b>Send Page Link</b>"""
+            """<p>Send the link of the current page via email.</p>"""
+        ))
+        if not self.__initShortcutsOnly:
+            self.sendPageLinkAct.triggered.connect(self.__sendPageLink)
+        self.__actions.append(self.sendPageLinkAct)
+        
         self.closeAct = E5Action(
             self.tr('Close'),
             UI.PixmapCache.getIcon("close.png"),
@@ -1270,8 +1305,13 @@
             self.tr('Full Screen'),
             UI.PixmapCache.getIcon("windowFullscreen.png"),
             self.tr('&Full Screen'),
-            QKeySequence(self.tr('F11')), 0,
+            0, 0,
             self, 'webbrowser_view_full_screen')
+        if Globals.isMacPlatform():
+            self.fullScreenAct.setShortcut(
+                QKeySequence(self.tr("Meta+Ctrl+F")))
+        else:
+            self.fullScreenAct.setShortcut(QKeySequence(self.tr('F11')))
         if not self.__initShortcutsOnly:
             self.fullScreenAct.triggered.connect(self.toggleFullScreen)
         self.__actions.append(self.fullScreenAct)
@@ -1792,6 +1832,45 @@
             self.showTabManagerAct.triggered.connect(self.__showTabManager)
         self.__actions.append(self.showTabManagerAct)
         
+        self.virustotalScanCurrentAct = E5Action(
+            self.tr("Scan current site"),
+            UI.PixmapCache.getIcon("virustotal.png"),
+            self.tr("Scan current site"),
+            0, 0,
+            self, 'webbrowser_virustotal_scan_site')
+        if not self.__initShortcutsOnly:
+            self.virustotalScanCurrentAct.triggered.connect(
+                self.__virusTotalScanCurrentSite)
+        self.__actions.append(self.virustotalScanCurrentAct)
+        
+        self.virustotalIpReportAct = E5Action(
+            self.tr("IP Address Report"),
+            UI.PixmapCache.getIcon("virustotal.png"),
+            self.tr("IP Address Report"),
+            0, 0,
+            self, 'webbrowser_virustotal_ip_report')
+        if not self.__initShortcutsOnly:
+            self.virustotalIpReportAct.triggered.connect(
+                self.__virusTotalIpAddressReport)
+        self.__actions.append(self.virustotalIpReportAct)
+        
+        self.virustotalDomainReportAct = E5Action(
+            self.tr("Domain Report"),
+            UI.PixmapCache.getIcon("virustotal.png"),
+            self.tr("Domain Report"),
+            0, 0,
+            self, 'webbrowser_virustotal_domain_report')
+        if not self.__initShortcutsOnly:
+            self.virustotalDomainReportAct.triggered.connect(
+                self.__virusTotalDomainReport)
+        self.__actions.append(self.virustotalDomainReportAct)
+        
+        if not Preferences.getWebBrowser("VirusTotalEnabled") or \
+           Preferences.getWebBrowser("VirusTotalServiceKey") == "":
+            self.virustotalScanCurrentAct.setEnabled(False)
+            self.virustotalIpReportAct.setEnabled(False)
+            self.virustotalDomainReportAct.setEnabled(False)
+        
         self.backAct.setEnabled(False)
         self.forwardAct.setEnabled(False)
         
@@ -1814,7 +1893,6 @@
         mb = self.menuBar()
         
         menu = mb.addMenu(self.tr('&File'))
-        menu.setTearOffEnabled(True)
         menu.addAction(self.newTabAct)
         menu.addAction(self.newAct)
         menu.addAction(self.newPrivateAct)
@@ -1832,6 +1910,7 @@
             menu.addAction(self.printAct)
         if self.printPdfAct:
             menu.addAction(self.printPdfAct)
+        menu.addAction(self.sendPageLinkAct)
         menu.addSeparator()
         menu.addAction(self.closeAct)
         menu.addAction(self.closeAllAct)
@@ -1839,7 +1918,6 @@
         menu.addAction(self.exitAct)
         
         menu = mb.addMenu(self.tr('&Edit'))
-        menu.setTearOffEnabled(True)
         menu.addAction(self.undoAct)
         menu.addAction(self.redoAct)
         menu.addSeparator()
@@ -1855,34 +1933,27 @@
         menu.addAction(self.findPrevAct)
         
         menu = mb.addMenu(self.tr('&View'))
-        menu.setTearOffEnabled(True)
+        menu.addAction(self.stopAct)
+        menu.addAction(self.reloadAct)
+        if WebBrowserWindow._useQtHelp:
+            menu.addSeparator()
+            menu.addAction(self.syncTocAct)
+        menu.addSeparator()
         menu.addAction(self.zoomInAct)
         menu.addAction(self.zoomResetAct)
         menu.addAction(self.zoomOutAct)
         menu.addSeparator()
-        menu.addAction(self.pageSourceAct)
-        menu.addAction(self.fullScreenAct)
         self.__textEncodingMenu = menu.addMenu(
             self.tr("Text Encoding"))
         self.__textEncodingMenu.aboutToShow.connect(
             self.__aboutToShowTextEncodingMenu)
         self.__textEncodingMenu.triggered.connect(self.__setTextEncoding)
-        
-        menu = mb.addMenu(self.tr('&Go'))
-        menu.setTearOffEnabled(True)
-        menu.addAction(self.backAct)
-        menu.addAction(self.forwardAct)
-        menu.addAction(self.homeAct)
         menu.addSeparator()
-        menu.addAction(self.stopAct)
-        menu.addAction(self.reloadAct)
-        if WebBrowserWindow._useQtHelp:
-            menu.addSeparator()
-            menu.addAction(self.syncTocAct)
+        menu.addAction(self.pageSourceAct)
+        menu.addAction(self.fullScreenAct)
         
         from .History.HistoryMenu import HistoryMenu
         self.historyMenu = HistoryMenu(self, self.__tabWidget)
-        self.historyMenu.setTearOffEnabled(True)
         self.historyMenu.setTitle(self.tr('H&istory'))
         self.historyMenu.openUrl.connect(self.openUrl)
         self.historyMenu.newTab.connect(self.openUrlNewTab)
@@ -1891,9 +1962,14 @@
         self.historyMenu.newPrivateWindow.connect(self.openUrlNewPrivateWindow)
         mb.addMenu(self.historyMenu)
         
+        historyActions = []
+        historyActions.append(self.backAct)
+        historyActions.append(self.forwardAct)
+        historyActions.append(self.homeAct)
+        self.historyMenu.setInitialActions(historyActions)
+        
         from .Bookmarks.BookmarksMenu import BookmarksMenuBarMenu
         self.bookmarksMenu = BookmarksMenuBarMenu(self)
-        self.bookmarksMenu.setTearOffEnabled(True)
         self.bookmarksMenu.setTitle(self.tr('&Bookmarks'))
         self.bookmarksMenu.openUrl.connect(self.openUrl)
         self.bookmarksMenu.newTab.connect(self.openUrlNewTab)
@@ -1911,7 +1987,6 @@
         self.bookmarksMenu.setInitialActions(bookmarksActions)
         
         menu = mb.addMenu(self.tr('&Settings'))
-        menu.setTearOffEnabled(True)
         menu.addAction(self.prefAct)
         menu.addAction(self.acceptedLanguagesAct)
         menu.addAction(self.cookiesAct)
@@ -1951,14 +2026,18 @@
         menu.addAction(self.clearIconsAct)
         
         menu = mb.addMenu(self.tr("&Tools"))
-        menu.setTearOffEnabled(True)
         menu.addAction(self.feedsManagerAct)
         menu.addAction(self.siteInfoAct)
         menu.addSeparator()
         menu.addAction(self.synchronizationAct)
-        
-        menu = mb.addMenu(self.tr("&Window"))
-        menu.setTearOffEnabled(True)
+        menu.addSeparator()
+        vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"),
+                              self.tr("&VirusTotal"))
+        vtMenu.addAction(self.virustotalScanCurrentAct)
+        vtMenu.addAction(self.virustotalIpReportAct)
+        vtMenu.addAction(self.virustotalDomainReportAct)
+        
+        menu = mb.addMenu(self.tr("&Windows"))
         menu.addAction(self.showDownloadManagerAct)
         menu.addAction(self.showJavaScriptConsoleAct)
         menu.addAction(self.showTabManagerAct)
@@ -1967,24 +2046,149 @@
             menu.addAction(self.showTocAct)
             menu.addAction(self.showIndexAct)
             menu.addAction(self.showSearchAct)
+        menu.addSeparator()
+        self.__toolbarsMenu = menu.addMenu(self.tr("&Toolbars"))
+        self.__toolbarsMenu.aboutToShow.connect(self.__showToolbarsMenu)
+        self.__toolbarsMenu.triggered.connect(self.__TBMenuTriggered)
         
         mb.addSeparator()
         
         menu = mb.addMenu(self.tr('&Help'))
-        menu.setTearOffEnabled(True)
         menu.addAction(self.aboutAct)
         menu.addAction(self.aboutQtAct)
         menu.addSeparator()
         menu.addAction(self.whatsThisAct)
     
+    def __initSuperMenu(self):
+        """
+        Private method to create the super menu and attach it to the super
+        menu button.
+        """
+        self.__superMenu = QMenu(self)
+        
+        self.__superMenu.addAction(self.newTabAct)
+        self.__superMenu.addAction(self.newAct)
+        self.__superMenu.addAction(self.newPrivateAct)
+        self.__superMenu.addAction(self.openAct)
+        self.__superMenu.addAction(self.openTabAct)
+        self.__superMenu.addSeparator()
+        
+        menu = self.__superMenu.addMenu(self.tr("Save"))
+        if self.saveAsAct:
+            menu.addAction(self.saveAsAct)
+        menu.addAction(self.savePageScreenAct)
+        menu.addAction(self.saveVisiblePageScreenAct)
+        
+        if self.printPreviewAct or self.printAct or self.printPdfAct:
+            menu = self.__superMenu.addMenu(self.tr("Print"))
+            if self.printPreviewAct:
+                menu.addAction(self.printPreviewAct)
+            if self.printAct:
+                menu.addAction(self.printAct)
+            if self.printPdfAct:
+                menu.addAction(self.printPdfAct)
+        
+        self.__superMenu.addAction(self.sendPageLinkAct)
+        self.__superMenu.addSeparator()
+        self.__superMenu.addAction(self.selectAllAct)
+        self.__superMenu.addAction(self.findAct)
+        self.__superMenu.addSeparator()
+        act = self.__superMenu.addAction(UI.PixmapCache.getIcon("history.png"),
+                                         self.tr("Show All History..."))
+        act.triggered.connect(self.historyMenu.showHistoryDialog)
+        self.__superMenu.addAction(self.bookmarksManageAct)
+        self.__superMenu.addSeparator()
+        self.__superMenu.addAction(self.prefAct)
+        
+        menu = self.__superMenu.addMenu(self.tr('Settings'))
+        menu.addAction(self.acceptedLanguagesAct)
+        menu.addAction(self.cookiesAct)
+        menu.addAction(self.flashCookiesAct)
+        menu.addAction(self.personalDataAct)
+        menu.addAction(self.greaseMonkeyAct)
+        menu.addAction(self.featurePermissionAct)
+        menu.addSeparator()
+        menu.addAction(self.editMessageFilterAct)
+        menu.addSeparator()
+        menu.addAction(self.searchEnginesAct)
+        menu.addSeparator()
+        menu.addAction(self.passwordsAct)
+        menu.addAction(self.certificateErrorsAct)
+        menu.addSeparator()
+        menu.addAction(self.zoomValuesAct)
+        menu.addAction(self.manageIconsAct)
+        menu.addSeparator()
+        menu.addAction(self.adblockAct)
+        menu.addSeparator()
+        menu.addMenu(self.__userAgentMenu)
+        menu.addAction(self.userAgentManagerAct)
+        menu.addSeparator()
+        if WebBrowserWindow._useQtHelp:
+            menu.addAction(self.manageQtHelpDocsAct)
+            menu.addAction(self.manageQtHelpFiltersAct)
+            menu.addAction(self.reindexDocumentationAct)
+            menu.addSeparator()
+        menu.addAction(self.clearPrivateDataAct)
+        menu.addAction(self.clearIconsAct)
+        menu.aboutToShow.connect(
+            self.__aboutToShowSettingsMenu)
+
+        self.__superMenu.addSeparator()
+        
+        menu = self.__superMenu.addMenu(self.tr('&View'))
+        menu.addMenu(self.__toolbarsMenu)
+        windowsMenu = menu.addMenu(self.tr("&Windows"))
+        windowsMenu.addAction(self.showDownloadManagerAct)
+        windowsMenu.addAction(self.showJavaScriptConsoleAct)
+        windowsMenu.addAction(self.showTabManagerAct)
+        if WebBrowserWindow._useQtHelp:
+            windowsMenu.addSeparator()
+            windowsMenu.addAction(self.showTocAct)
+            windowsMenu.addAction(self.showIndexAct)
+            windowsMenu.addAction(self.showSearchAct)
+        menu.addSeparator()
+        menu.addAction(self.stopAct)
+        menu.addAction(self.reloadAct)
+        if WebBrowserWindow._useQtHelp:
+            menu.addSeparator()
+            menu.addAction(self.syncTocAct)
+        menu.addSeparator()
+        menu.addAction(self.zoomInAct)
+        menu.addAction(self.zoomResetAct)
+        menu.addAction(self.zoomOutAct)
+        menu.addSeparator()
+        menu.addMenu(self.__textEncodingMenu)
+        menu.addSeparator()
+        menu.addAction(self.pageSourceAct)
+        menu.addAction(self.fullScreenAct)
+        
+        self.__superMenu.addMenu(self.historyMenu)
+        self.__superMenu.addMenu(self.bookmarksMenu)
+        
+        menu = self.__superMenu.addMenu(self.tr("&Tools"))
+        menu.addAction(self.feedsManagerAct)
+        menu.addAction(self.siteInfoAct)
+        menu.addSeparator()
+        menu.addAction(self.synchronizationAct)
+        menu.addSeparator()
+        vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"),
+                              self.tr("&VirusTotal"))
+        vtMenu.addAction(self.virustotalScanCurrentAct)
+        vtMenu.addAction(self.virustotalIpReportAct)
+        vtMenu.addAction(self.virustotalDomainReportAct)
+        
+        self.__superMenu.addSeparator()
+        self.__superMenu.addAction(self.aboutAct)
+        self.__superMenu.addAction(self.aboutQtAct)
+        self.__superMenu.addSeparator()
+        self.__superMenu.addAction(self.exitAct)
+        
+        self.__navigationBar.superMenuButton().setMenu(self.__superMenu)
+    
     def __initToolbars(self):
         """
         Private method to create the toolbars.
         """
-        # save references to toolbars in order to hide them
-        # when going full screen
-        self.__toolbars = []
-        
         filetb = self.addToolBar(self.tr("File"))
         filetb.setObjectName("FileToolBar")
         filetb.setIconSize(UI.Config.ToolBarIconSize)
@@ -2008,7 +2212,7 @@
             filetb.addSeparator()
         filetb.addAction(self.closeAct)
         filetb.addAction(self.exitAct)
-        self.__toolbars.append(filetb)
+        self.__toolbars["file"] = (filetb.windowTitle(), filetb)
         
         self.savePageScreenMenu = QMenu(self)
         self.savePageScreenMenu.addAction(self.savePageScreenAct)
@@ -2028,7 +2232,7 @@
         edittb.addAction(self.pasteAct)
         edittb.addSeparator()
         edittb.addAction(self.selectAllAct)
-        self.__toolbars.append(edittb)
+        self.__toolbars["edit"] = (edittb.windowTitle(), edittb)
         
         viewtb = self.addToolBar(self.tr("View"))
         viewtb.setObjectName("ViewToolBar")
@@ -2038,7 +2242,7 @@
         viewtb.addAction(self.zoomOutAct)
         viewtb.addSeparator()
         viewtb.addAction(self.fullScreenAct)
-        self.__toolbars.append(viewtb)
+        self.__toolbars["view"] = (viewtb.windowTitle(), viewtb)
         
         findtb = self.addToolBar(self.tr("Find"))
         findtb.setObjectName("FindToolBar")
@@ -2046,7 +2250,7 @@
         findtb.addAction(self.findAct)
         findtb.addAction(self.findNextAct)
         findtb.addAction(self.findPrevAct)
-        self.__toolbars.append(findtb)
+        self.__toolbars["find"] = (findtb.windowTitle(), findtb)
         
         if WebBrowserWindow._useQtHelp:
             filtertb = self.addToolBar(self.tr("Filter"))
@@ -2060,7 +2264,7 @@
             self.filterCombo.activated[str].connect(
                 self.__filterQtHelpDocumentation)
             self.__setupFilterCombo()
-            self.__toolbars.append(filtertb)
+            self.__toolbars["filter"] = (filtertb.windowTitle(), filtertb)
         
         settingstb = self.addToolBar(self.tr("Settings"))
         settingstb.setObjectName("SettingsToolBar")
@@ -2072,7 +2276,7 @@
         settingstb.addAction(self.personalDataAct)
         settingstb.addAction(self.greaseMonkeyAct)
         settingstb.addAction(self.featurePermissionAct)
-        self.__toolbars.append(settingstb)
+        self.__toolbars["settings"] = (settingstb.windowTitle(), settingstb)
         
         toolstb = self.addToolBar(self.tr("Tools"))
         toolstb.setObjectName("ToolsToolBar")
@@ -2081,37 +2285,23 @@
         toolstb.addAction(self.siteInfoAct)
         toolstb.addSeparator()
         toolstb.addAction(self.synchronizationAct)
-        self.__toolbars.append(toolstb)
+        self.__toolbars["tools"] = (toolstb.windowTitle(), toolstb)
         
         helptb = self.addToolBar(self.tr("Help"))
         helptb.setObjectName("HelpToolBar")
         helptb.setIconSize(UI.Config.ToolBarIconSize)
         helptb.addAction(self.whatsThisAct)
-        self.__toolbars.append(helptb)
+        self.__toolbars["help"] = (helptb.windowTitle(), helptb)
         
         self.addToolBarBreak()
         vttb = self.addToolBar(self.tr("VirusTotal"))
         vttb.setObjectName("VirusTotalToolBar")
         vttb.setIconSize(UI.Config.ToolBarIconSize)
         vttb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
-        self.virustotalScanCurrentAct = vttb.addAction(
-            UI.PixmapCache.getIcon("virustotal.png"),
-            self.tr("Scan current site"),
-            self.__virusTotalScanCurrentSite)
-        self.virustotalIpReportAct = vttb.addAction(
-            UI.PixmapCache.getIcon("virustotal.png"),
-            self.tr("IP Address Report"),
-            self.__virusTotalIpAddressReport)
-        self.virustotalDomainReportAct = vttb.addAction(
-            UI.PixmapCache.getIcon("virustotal.png"),
-            self.tr("Domain Report"),
-            self.__virusTotalDomainReport)
-        if not Preferences.getWebBrowser("VirusTotalEnabled") or \
-           Preferences.getWebBrowser("VirusTotalServiceKey") == "":
-            self.virustotalScanCurrentAct.setEnabled(False)
-            self.virustotalIpReportAct.setEnabled(False)
-            self.virustotalDomainReportAct.setEnabled(False)
-        self.__toolbars.append(vttb)
+        vttb.addAction(self.virustotalScanCurrentAct)
+        vttb.addAction(self.virustotalIpReportAct)
+        vttb.addAction(self.virustotalDomainReportAct)
+        self.__toolbars["virustotal"] = (vttb.windowTitle(), vttb)
         
     def __nextTab(self):
         """
@@ -2167,7 +2357,7 @@
         
         @param link file to be displayed in the new window (string or QUrl)
         @param addNextTo reference to the browser to open the tab after
-            (HelpBrowser)
+            (WebBrowserView)
         @keyparam background flag indicating to open the tab in the
             background (bool)
         @return reference to the new browser
@@ -2359,8 +2549,7 @@
         self.reloadAct.setEnabled(not b)
         self.stopAct.setEnabled(b)
         
-        self.__navigationBar.reloadButton().setEnabled(not b)
-        self.__navigationBar.stopButton().setEnabled(b)
+        self.__navigationBar.reloadStopButton().setLoading(b)
         
     def __addBookmark(self):
         """
@@ -2704,6 +2893,7 @@
             self.__hideNavigationTimer.stop()
         
         self.__navigationContainer.show()
+        self.__tabWidget.tabBar().show()
     
     def hideFullScreenNavigation(self):
         """
@@ -2721,6 +2911,7 @@
         
         if self.isFullScreen() and mouseInBrowser:
             self.__navigationContainer.hide()
+            self.__tabWidget.tabBar().hide()
     
     def __copy(self):
         """
@@ -2869,7 +3060,7 @@
                 profile.setHttpCacheType(QWebEngineProfile.MemoryHttpCache)
                 profile.setHttpCacheMaximumSize(0)
         
-        if qVersion() >= "5.8.0":
+        if qVersionTuple() >= (5, 8, 0):
             profile.setSpellCheckEnabled(
                 Preferences.getWebBrowser("SpellCheckEnabled"))
             profile.setSpellCheckLanguages(
@@ -3493,6 +3684,15 @@
         """
         self.newPrivateWindow(url)
     
+    def __sendPageLink(self):
+        """
+        Private slot to send the link of the current page via email.
+        """
+        url = self.currentBrowser().url()
+        if not url.isEmpty():
+            urlStr = url.toString()
+            QDesktopServices.openUrl(QUrl("mailto:?body=" + urlStr))
+    
     @classmethod
     def historyManager(cls):
         """
@@ -3718,6 +3918,47 @@
         """
         return self.__navigationBar.searchEdit().openSearchManager()
     
+    def __createTextEncodingAction(self, codec, defaultCodec, parentMenu):
+        """
+        Private method to create an action for the text encoding menu.
+        
+        @param codec name of the codec to create an action for
+        @type str
+        @param defaultCodec name of the default codec
+        @type str
+        @param parentMenu reference to the parent menu
+        @type QMenu
+        """
+        act = QAction(codec, parentMenu)
+        act.setData(codec)
+        act.setCheckable(True)
+        if defaultCodec == codec:
+            act.setChecked(True)
+        
+        parentMenu.addAction(act)
+    
+    def __createTextEncodingSubmenu(self, title, codecNames, parentMenu):
+        """
+        Private method to create a text encoding sub menu.
+        
+        @param title title of the menu
+        @type str
+        @param codecNames list of codec names for the menu
+        @type list of str
+        @param parentMenu reference to the parent menu
+        @type QMenu
+        """
+        if codecNames:
+            defaultCodec = \
+                QWebEngineSettings.defaultSettings().defaultTextEncoding()\
+                .lower()
+            
+            menu = QMenu(title, parentMenu)
+            for codec in codecNames:
+                self.__createTextEncodingAction(codec, defaultCodec, menu)
+            
+            parentMenu.addMenu(menu)
+    
     def __aboutToShowTextEncodingMenu(self):
         """
         Private slot to populate the text encoding menu.
@@ -3725,8 +3966,11 @@
         self.__textEncodingMenu.clear()
         
         codecs = []
-        for codec in QTextCodec.availableCodecs():
-            codecs.append(str(codec, encoding="utf-8").lower())
+        for mib in QTextCodec.availableMibs():
+            codec = str(QTextCodec.codecForMib(mib).name(),
+                        encoding="utf-8").lower()
+            if codec not in codecs:
+                codecs.append(codec)
         codecs.sort()
         
         defaultTextEncoding = \
@@ -3734,47 +3978,46 @@
         if defaultTextEncoding in codecs:
             currentCodec = defaultTextEncoding
         else:
-            currentCodec = ""
-        
-        isDefaultEncodingUsed = True
-        isoMenu = QMenu(self.tr("ISO"), self.__textEncodingMenu)
-        winMenu = QMenu(self.tr("Windows"), self.__textEncodingMenu)
-        isciiMenu = QMenu(self.tr("ISCII"), self.__textEncodingMenu)
-        uniMenu = QMenu(self.tr("Unicode"), self.__textEncodingMenu)
-        otherMenu = QMenu(self.tr("Other"), self.__textEncodingMenu)
-        ibmMenu = QMenu(self.tr("IBM"), self.__textEncodingMenu)
+            currentCodec = "system"
+        
+        isoCodecs = []
+        winCodecs = []
+        isciiCodecs = []
+        uniCodecs = []
+        ibmCodecs = []
+        otherCodecs = []
         
         for codec in codecs:
-            if codec.startswith(("iso", "latin", "csisolatin")):
-                act = isoMenu.addAction(codec)
-            elif codec.startswith(("windows", "cp1")):
-                act = winMenu.addAction(codec)
+            if codec.startswith(("iso", "latin")):
+                isoCodecs.append(codec)
+            elif codec.startswith(("windows")):
+                winCodecs.append(codec)
             elif codec.startswith("iscii"):
-                act = isciiMenu.addAction(codec)
+                isciiCodecs.append(codec)
             elif codec.startswith("utf"):
-                act = uniMenu.addAction(codec)
-            elif codec.startswith(("ibm", "csibm", "cp")):
-                act = ibmMenu.addAction(codec)
+                uniCodecs.append(codec)
+            elif codec.startswith(("ibm")):
+                ibmCodecs.append(codec)
+            elif codec == "system":
+                self.__createTextEncodingAction(codec, currentCodec,
+                                                self.__textEncodingMenu)
             else:
-                act = otherMenu.addAction(codec)
-            
-            act.setData(codec)
-            act.setCheckable(True)
-            if currentCodec == codec:
-                act.setChecked(True)
-                isDefaultEncodingUsed = False
-        
-        act = self.__textEncodingMenu.addAction(
-            self.tr("Default Encoding"))
-        act.setData("")
-        act.setCheckable(True)
-        act.setChecked(isDefaultEncodingUsed)
-        self.__textEncodingMenu.addMenu(uniMenu)
-        self.__textEncodingMenu.addMenu(isoMenu)
-        self.__textEncodingMenu.addMenu(winMenu)
-        self.__textEncodingMenu.addMenu(ibmMenu)
-        self.__textEncodingMenu.addMenu(isciiMenu)
-        self.__textEncodingMenu.addMenu(otherMenu)
+                otherCodecs.append(codec)
+        
+        if not self.__textEncodingMenu.isEmpty():
+            self.__textEncodingMenu.addSeparator()
+        self.__createTextEncodingSubmenu(self.tr("ISO"), isoCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Unicode"), uniCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Windows"), winCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("ISCII"), isciiCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("IBM"), ibmCodecs,
+                                         self.__textEncodingMenu)
+        self.__createTextEncodingSubmenu(self.tr("Other"), otherCodecs,
+                                         self.__textEncodingMenu)
     
     def __setTextEncoding(self, act):
         """
@@ -3789,6 +4032,143 @@
         else:
             QWebEngineSettings.defaultSettings().setDefaultTextEncoding(codec)
     
+    def __populateToolbarsMenu(self, menu):
+        """
+        Private method to populate the toolbars menu.
+        
+        @param menu reference to the menu to be populated
+        @type QMenu
+        """
+        menu.clear()
+        
+        act = menu.addAction(self.tr("Menu Bar"))
+        act.setCheckable(True)
+        act.setChecked(not self.menuBar().isHidden())
+        act.setData("menubar")
+        
+        act = menu.addAction(self.tr("Bookmarks"))
+        act.setCheckable(True)
+        act.setChecked(not self.__bookmarksToolBar.isHidden())
+        act.setData("bookmarks")
+        
+        act = menu.addAction(self.tr("Status Bar"))
+        act.setCheckable(True)
+        act.setChecked(not self.statusBar().isHidden())
+        act.setData("statusbar")
+        
+        if Preferences.getWebBrowser("ShowToolbars"):
+            menu.addSeparator()
+            for name, (text, tb) in sorted(self.__toolbars.items(),
+                                           key=lambda t: t[1][0]):
+                act = menu.addAction(text)
+                act.setCheckable(True)
+                act.setChecked(not tb.isHidden())
+                act.setData(name)
+            menu.addSeparator()
+            act = menu.addAction(self.tr("&Show all"))
+            act.setData("__SHOW__")
+            act = menu.addAction(self.tr("&Hide all"))
+            act.setData("__HIDE__")
+    
+    def createPopupMenu(self):
+        """
+        Public method to create the toolbars menu for Qt.
+        
+        @return toolbars menu
+        @rtype QMenu
+        """
+        menu = QMenu(self)
+        menu.triggered.connect(self.__TBMenuTriggered)
+        
+        self.__populateToolbarsMenu(menu)
+        
+        return menu
+
+    def __showToolbarsMenu(self):
+        """
+        Private slot to display the Toolbars menu.
+        """
+        self.__populateToolbarsMenu(self.__toolbarsMenu)
+
+    def __TBMenuTriggered(self, act):
+        """
+        Private method to handle the toggle of a toolbar via the Window->
+        Toolbars submenu or the toolbars popup menu.
+        
+        @param act reference to the action that was triggered
+        @type QAction
+        """
+        name = act.data()
+        if name:
+            if name == "bookmarks":
+                # special handling of bookmarks toolbar
+                self.__setBookmarksToolbarVisibility(act.isChecked())
+            
+            elif name == "menubar":
+                # special treatment of the menu bar
+                self.__setMenuBarVisibility(act.isChecked())
+            
+            elif name == "statusbar":
+                # special treatment of the status bar
+                self.__setStatusBarVisible(act.isChecked())
+            
+            elif name == "__SHOW__":
+                for text, tb in list(self.__toolbars.values()):
+                    tb.show()
+            
+            elif name == "__HIDE__":
+                for text, tb in list(self.__toolbars.values()):
+                    tb.hide()
+            
+            else:
+                tb = self.__toolbars[name][1]
+                if act.isChecked():
+                    tb.show()
+                else:
+                    tb.hide()
+    
+    def __setBookmarksToolbarVisibility(self, visible):
+        """
+        Private method to set the visibility of the bookmarks toolbar.
+        
+        @param visible flag indicating the toolbar visibility
+        @type bool
+        """
+        if visible:
+            self.__bookmarksToolBar.show()
+        else:
+            self.__bookmarksToolBar.hide()
+        
+        # save state for next invokation
+        Preferences.setWebBrowser("BookmarksToolBarVisible", visible)
+    
+    def __setMenuBarVisibility(self, visible):
+        """
+        Private method to set the visibility of the menu bar.
+        
+        @param visible flag indicating the menu bar visibility
+        @type bool
+        """
+        if visible:
+            self.menuBar().show()
+            self.__navigationBar.superMenuButton().hide()
+        else:
+            self.menuBar().hide()
+            self.__navigationBar.superMenuButton().show()
+        
+        Preferences.setWebBrowser("MenuBarVisible", visible)
+    
+    def __setStatusBarVisible(self, visible):
+        """
+        Private method to set the visibility of the status bar.
+        
+        @param visible flag indicating the status bar visibility
+        @type bool
+        """
+        self.statusBar().setVisible(visible)
+        
+        Preferences.setWebBrowser("StatusBarVisible", visible)
+    
     def eventMouseButtons(self):
         """
         Public method to get the last recorded mouse buttons.
@@ -3998,8 +4378,10 @@
                 self.statusBar().hide()
                 self.__searchWidget.hide()
                 self.__tabWidget.tabBar().hide()
-                for toolbar in self.__toolbars:
-                    toolbar.hide()
+                if Preferences.getWebBrowser("ShowToolbars"):
+                    for title, toolbar in self.__toolbars.values():
+                        if toolbar is not self.__bookmarksToolBar:
+                            toolbar.hide()
                 self.__navigationBar.exitFullScreenButton().setVisible(True)
                 self.__navigationContainer.hide()
             
@@ -4008,8 +4390,10 @@
                 # leave full screen mode
                 self.setWindowState(self.__windowStates)
                 self.__htmlFullScreen = False
-                self.menuBar().show()
-                self.statusBar().show()
+                if Preferences.getWebBrowser("MenuBarVisible"):
+                    self.menuBar().show()
+                if Preferences.getWebBrowser("StatusBarVisible"):
+                    self.statusBar().show()
                 self.restoreState(self.__toolbarStates)
                 self.__tabWidget.tabBar().show()
                 self.__navigationBar.exitFullScreenButton().setVisible(False)
@@ -4241,7 +4625,7 @@
                 cls._webProfile.setPersistentCookiesPolicy(
                     QWebEngineProfile.AllowPersistentCookies)
             
-            if qVersion() >= "5.8.0":
+            if qVersionTuple() >= (5, 8, 0):
                 cls._webProfile.setSpellCheckEnabled(
                     Preferences.getWebBrowser("SpellCheckEnabled"))
                 cls._webProfile.setSpellCheckLanguages(
--- a/WebBrowser/data/html/speeddialPage.html	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/data/html/speeddialPage.html	Sat Jun 03 13:08:50 2017 +0200
@@ -219,349 +219,343 @@
 <script type="text/javascript" src="@JQUERY@"></script>
 <script type="text/javascript" src="@JQUERY-UI@"></script>
 <script type="text/javascript">
-    var LOADING_IMAGE = '@LOADING-IMG@';
-    var URL = '@URL@';
-    var TITLE = '@TITLE@';
-    var EDIT = '@APPLY@';
-    var NEW_PAGE = '@NEW-PAGE@';
-    var TITLE_EDIT = '@TITLE-EDIT@';
-    var TITLE_REMOVE = '@TITLE-REMOVE@';
-    var TITLE_RELOAD = '@TITLE-RELOAD@';
-    var TITLE_FETCHTITLE = '@TITLE-FETCHTITLE@';
-    var MAX_PAGES_ROW = @ROW-PAGES@;
-    var DIAL_WIDTH = @SD-SIZE@;
+var LOADING_IMAGE = '@LOADING-IMG@';
+var URL = '@URL@';
+var TITLE = '@TITLE@';
+var EDIT = '@APPLY@';
+var NEW_PAGE = '@NEW-PAGE@';
+var TITLE_EDIT = '@TITLE-EDIT@';
+var TITLE_REMOVE = '@TITLE-REMOVE@';
+var TITLE_RELOAD = '@TITLE-RELOAD@';
+var TITLE_FETCHTITLE = '@TITLE-FETCHTITLE@';
+var MAX_PAGES_ROW = @ROW-PAGES@;
+var DIAL_WIDTH = @SD-SIZE@;
 
-    var editingId = -1;
-    var ignoreNextChanged = false;
+var editingId = -1;
+var ignoreNextChanged = false;
 
-    function escapeTitle(title) {
-        title = title.replace(/"/g, '&quot;');
-        title = title.replace(/'/g, '&apos;');
-        return title;
-    }
-
-    function unescapeTitle(title) {
-        title = title.replace(/&quot;/g, '"');
-        title = title.replace(/&apos;/g, '\'');
-        return title;
-    }
+function escapeTitle(title) {
+    title = title.replace(/"/g, '&quot;');
+    title = title.replace(/'/g, '&apos;');
+    return title;
+}
 
-    function escapeUrl(url) {
-        url = url.replace(/"/g, '');
-        url = url.replace(/'/g, '');
-        return url;
-    }
+function unescapeTitle(title) {
+    title = title.replace(/&quot;/g, '"');
+    title = title.replace(/&apos;/g, '\'');
+    return title;
+}
 
-    function onRemoveClick(box) {
-        removeBox($(box).index());
-    }
+function escapeUrl(url) {
+    url = url.replace(/"/g, '');
+    url = url.replace(/'/g, '');
+    return url;
+}
 
-    function onEditKeyPress(e) {
-        if (e.keyCode == 13) {
-            boxEdited();
-            return false;
-        }
-        else if (e.keyCode == 27) {
-            $('#fadeOverlay').click();
-            return false;
-        }
-        return true;
+function onRemoveClick(box) {
+    removeBox($(box).index());
+}
+
+function onEditKeyPress(e) {
+    if (e.keyCode == 13) {
+        boxEdited();
+        return false;
     }
-
-    function onFetchTitleClick(checkbox) {
-        var displayStyle;
-        checkbox.checked ? displayStyle = 'hidden' : displayStyle = 'visible';
-        $('#titleLine').css({'visibility' : displayStyle });
+    else if (e.keyCode == 27) {
+        $('#fadeOverlay').click();
+        return false;
     }
+    return true;
+}
 
-    function hideEditBox() {
-        $('#fadeOverlay').fadeOut("slow", function() {$("#fadeOverlay").remove();});
-    }
+function onFetchTitleClick(checkbox) {
+    var displayStyle;
+    checkbox.checked ? displayStyle = 'hidden' : displayStyle = 'visible';
+    $('#titleLine').css({'visibility' : displayStyle });
+}
+
+function hideEditBox() {
+    $('#fadeOverlay').fadeOut("slow", function() {$("#fadeOverlay").remove();});
+}
 
-    function emitChanged(pages)
-    {
-        ignoreNextChanged = true;
-        external.speedDial.changed(pages);
-    }
+function emitChanged(pages) {
+    ignoreNextChanged = true;
+    external.speedDial.changed(pages);
+}
+
+function addSpeedDial() {
+    onEditClick(addBox('', NEW_PAGE, ''));
+    alignPage();
+}
+
+function onEditClick(box) {
+    editingId = $(box).index();
+    var boxUrl = $(box).children('a').first().attr('href');
+    var boxTitle = escapeTitle($(box).children('span').first().text());
+    if (boxUrl === '')
+        boxUrl = 'http://';
 
-    function addSpeedDial()
-    {
-        onEditClick(addBox('', NEW_PAGE, ''));
-        alignPage();
-    }
-    
-    function onEditClick(box) {
-        editingId = $(box).index();
-        var boxUrl = $(box).children('a').first().attr('href');
-        var boxTitle = escapeTitle($(box).children('span').first().text());
-        if (boxUrl === '')
-            boxUrl = 'http://';
+    $('body').append('<div id="fadeOverlay" style="opacity:0.9;display:none;position:fixed;left:0;' +
+                     'top:0;width:100%;height:100%;z-index:9999;background:#85784A;">' +
+                     '<div id="overlay-edit" onkeypress="return onEditKeyPress(event)">' +
+                     '<img src="' + $(box).children('img').first().attr('src') + '"> ' +
+                     '<table class="formTable"><tr><td>' + URL + ': </td><td>' +
+                     '<input type="text" id="formUrl" value="' + boxUrl + '"></td></tr>' +
+                     '<tr id="titleLine"><td>' + TITLE + ': </td><td>' +
+                     '<input type="text" id="formTitle" value="' + boxTitle + '"></td></tr>' +
+                     '<tr><td></td><td><input type="checkbox" id="fetchTitle" onclick="onFetchTitleClick(this)">' +
+                     '<label for="fetchTitle">  ' + TITLE_FETCHTITLE + ' </label></td></tr>' +
+                     '</table><p class="buttonbox">' +
+                     '<input type="button" value=" @CLOSE@ " onClick="hideEditBox();">' +
+                     '<input type="button" value="   ' + EDIT + '   " onClick="boxEdited()"></p>' +
+                     '</div></div>');
+
+    $('#fadeOverlay').css({'filter' : 'alpha(opacity=90)'}).fadeIn();
+    $('#fadeOverlay').click(function() {hideEditBox()});
+    $('#overlay-edit').click(function(event) { event.stopPropagation(); });
+    $('#formUrl').focus();
+}
+
+function onReloadClick(box) {
+    var url = $(box).children('a').first().attr('href');
+    var img = $(box).children('img').first();
+
+    if (url === '')
+        return;
+
+    $(img).attr('src', LOADING_IMAGE);
+    external.speedDial.loadThumbnail(url, false);
+}
+
+function boxEdited() {
+    if (editingId == -1)
+        return;
 
-        $('body').append('<div id="fadeOverlay" style="opacity:0.9;display:none;position:fixed;left:0;' +
-                         'top:0;width:100%;height:100%;z-index:9999;background:#85784A;">' +
-                         '<div id="overlay-edit" onkeypress="return onEditKeyPress(event)">' +
-                         '<img src="' + $(box).children('img').first().attr('src') + '"> ' +
-                         '<table class="formTable"><tr><td>' + URL + ': </td><td>' +
-                         '<input type="text" id="formUrl" value="' + boxUrl + '"></td></tr>' +
-                         '<tr id="titleLine"><td>' + TITLE + ': </td><td>' +
-                         '<input type="text" id="formTitle" value="' + boxTitle + '"></td></tr>' +
-                         '<tr><td></td><td><input type="checkbox" id="fetchTitle" onclick="onFetchTitleClick(this)">' +
-                         '<label for="fetchTitle">  ' + TITLE_FETCHTITLE + ' </label></td></tr>' +
-                         '</table><p class="buttonbox">' +
-                         '<input type="button" value=" @CLOSE@ " onClick="hideEditBox();">' +
-                         '<input type="button" value="   ' + EDIT + '   " onClick="boxEdited()"></p>' +
-                         '</div></div>');
+    external.speedDial.urlFromUserInput($('#formUrl').attr("value"), function(newUrl) {
+        var box = document.getElementById('quickdial').getElementsByTagName('div')[editingId];
+        var a = box.getElementsByTagName('a')[0];
+        var originalUrl = a.getAttribute('href');
+        setBoxUrl(editingId, newUrl);
+        setBoxTitle(editingId, $('#formTitle').attr("value"));
+        var changedUrl = a.getAttribute('href');
+        var fetchTitleChecked = document.getElementById('fetchTitle').checked;
+
+        var pages = allPages()
+
+        if (fetchTitleChecked || (originalUrl != changedUrl && changedUrl !== '') ) {
+            var img = box.getElementsByTagName('img')[0];
+            img.setAttribute('src', LOADING_IMAGE);
+
+            $('#fadeOverlay').fadeOut("slow", function() {
+                $("#fadeOverlay").remove();
+            });
+                external.speedDial.loadThumbnail(a.getAttribute('href'), fetchTitleChecked);
+                external.speedDial.removeImageForUrl(a.getAttribute('href'));
+        } else {
+            hideEditBox();
+        }
+        emitChanged(pages);
+    });
+}
+
+function allPages() {
+    var urls = $('a[class="boxUrl"]');
+    var titles = $('span[class="boxTitle"]');
+    var value = "";
+    $('div.entry').each(function(i) {
+        var url = $(this).children('a').first().attr('href');
+        var title = $(this).children('span[class="boxTitle"]').first().text();
+        var img = $(this).children('img').first().attr('src');
+        value += 'url:"' + escapeUrl(url) + '"|title:"' + escapeTitle(title) + '"|img:"' + escapeUrl(img) + '";';
+    });
 
-        $('#fadeOverlay').css({'filter' : 'alpha(opacity=90)'}).fadeIn();
-        $('#fadeOverlay').click(function() {hideEditBox()});
-        $('#overlay-edit').click(function(event) { event.stopPropagation(); });
-        $('#formUrl').focus();
-    }
+    return value;
+}
 
-    function onReloadClick(box) {
-        var url = $(box).children('a').first().attr('href');
-        var img = $(box).children('img').first();
+function addBox(url, title, img_source) {
+    var div = document.createElement('div');
+    div.setAttribute('class', 'entry');
+    var img = document.createElement('img');
+    img.setAttribute('src', img_source);
+    var a = document.createElement('a');
+    a.setAttribute('href', url);
+    a.setAttribute('class', 'boxUrl');
+    var span1 = document.createElement('span');
+    span1.setAttribute('class', 'boxTitle');
+    span1.innerText = unescapeTitle(title);
+    var span2 = document.createElement('span');
+    span2.setAttribute('class', 'edit');
+    span2.setAttribute('onClick', 'onEditClick(parentNode)');
+    span2.setAttribute('title', TITLE_EDIT);
+    var span3 = document.createElement('span');
+    span3.setAttribute('class', 'close');
+    span3.setAttribute('onClick', 'onRemoveClick(parentNode)');
+    span3.setAttribute('title', TITLE_REMOVE);
+    var span4 = document.createElement('span');
+    span4.setAttribute('class', 'reload');
+    span4.setAttribute('onClick', 'onReloadClick(parentNode)');
+    span4.setAttribute('title', TITLE_RELOAD);
 
-        if (url === '')
-            return;
+    div.appendChild(img);
+    div.appendChild(img);
+    div.appendChild(a);
+    div.appendChild(span1);
+    div.appendChild(span2);
+    div.appendChild(span3);
+    div.appendChild(span4);
 
-        $(img).attr('src', LOADING_IMAGE);
+    document.getElementById("quickdial").appendChild(div);
+
+    if (img_source == LOADING_IMAGE) {
         external.speedDial.loadThumbnail(url, false);
     }
 
-    function boxEdited() {
-        if (editingId == -1)
-            return;
-
-        external.speedDial.urlFromUserInput($('#formUrl').attr("value"), function(newUrl) {
-            var box = document.getElementById('quickdial').getElementsByTagName('div')[editingId];
-            var a = box.getElementsByTagName('a')[0];
-            var originalUrl = a.getAttribute('href');
-            setBoxUrl(editingId, newUrl);
-            setBoxTitle(editingId, $('#formTitle').attr("value"));
-            var changedUrl = a.getAttribute('href');
-            var fetchTitleChecked = document.getElementById('fetchTitle').checked;
-            
-            var pages = allPages()
-            
-            if (fetchTitleChecked || (originalUrl != changedUrl && changedUrl !== '') ) {
-                var img = box.getElementsByTagName('img')[0];
-                img.setAttribute('src', LOADING_IMAGE);
+    return div;
+}
 
-                $('#fadeOverlay').fadeOut("slow", function() {
-                    $("#fadeOverlay").remove();
-                });
-                    external.speedDial.loadThumbnail(a.getAttribute('href'), fetchTitleChecked);
-                    external.speedDial.removeImageForUrl(a.getAttribute('href'));
-            } else {
-                hideEditBox();
-            }
-            emitChanged(pages);
-        });
-    }
+function setBoxImage(id, img_source) {
+    var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
+    if (box === undefined)
+        return;
 
-    function allPages() {
-        var urls = $('a[class="boxUrl"]');
-        var titles = $('span[class="boxTitle"]');
-        var value = "";
-        $('div.entry').each(function(i) {
-            var url = $(this).children('a').first().attr('href');
-            var title = $(this).children('span[class="boxTitle"]').first().text();
-            var img = $(this).children('img').first().attr('src');
-            value += 'url:"' + escapeUrl(url) + '"|title:"' + escapeTitle(title) + '"|img:"' + escapeUrl(img) + '";';
-        });
-
-        return value;
-    }
+    var img = box.getElementsByTagName('img')[0];
+    img.setAttribute('src', img_source + '?' + new Date());
+}
 
-    function addBox(url, title, img_source) {
-        var div = document.createElement('div');
-        div.setAttribute('class', 'entry');
-        var img = document.createElement('img');
-        img.setAttribute('src', img_source);
-        var a = document.createElement('a');
-        a.setAttribute('href', url);
-        a.setAttribute('class', 'boxUrl');
-        var span1 = document.createElement('span');
-        span1.setAttribute('class', 'boxTitle');
-        span1.innerText = unescapeTitle(title);
-        var span2 = document.createElement('span');
-        span2.setAttribute('class', 'edit');
-        span2.setAttribute('onClick', 'onEditClick(parentNode)');
-        span2.setAttribute('title', TITLE_EDIT);
-        var span3 = document.createElement('span');
-        span3.setAttribute('class', 'close');
-        span3.setAttribute('onClick', 'onRemoveClick(parentNode)');
-        span3.setAttribute('title', TITLE_REMOVE);
-        var span4 = document.createElement('span');
-        span4.setAttribute('class', 'reload');
-        span4.setAttribute('onClick', 'onReloadClick(parentNode)');
-        span4.setAttribute('title', TITLE_RELOAD);
+function setTitleToUrl(url, title) {
+    var changed = false;
+    var boxes = document.getElementById('quickdial').getElementsByTagName('div');
+    for (i = 0; i < boxes.length; ++i) {
+        var box = boxes[i];
+
+        if (box === undefined)
+            continue;
 
-        div.appendChild(img);
-        div.appendChild(img);
-        div.appendChild(a);
-        div.appendChild(span1);
-        div.appendChild(span2);
-        div.appendChild(span3);
-        div.appendChild(span4);
-
-        document.getElementById("quickdial").appendChild(div);
+        var boxUrl = box.getElementsByTagName('a')[0].getAttribute('href');
+        if (url != boxUrl)
+            continue;
 
-        if (img_source == LOADING_IMAGE) {
-            external.speedDial.loadThumbnail(url, false);
+        var span = box.getElementsByTagName('span')[0];
+        if (span.innerText != title) {
+            changed = true;
+            span.innerText = title;
         }
-
-        return div;
-    }
-
-    function setBoxImage(id, img_source) {
-        var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
-        if (box === undefined)
-            return;
-
-        var img = box.getElementsByTagName('img')[0];
-        img.setAttribute('src', img_source + '?' + new Date());
     }
 
-    function setTitleToUrl(url, title) {
-        var changed = false;
-        var boxes = document.getElementById('quickdial').getElementsByTagName('div');
-        for (i = 0; i < boxes.length; ++i) {
-            var box = boxes[i];
-
-            if (box === undefined)
-                continue;
-
-            var boxUrl = box.getElementsByTagName('a')[0].getAttribute('href');
-            if (url != boxUrl)
-                continue;
-
-            var span = box.getElementsByTagName('span')[0];
-            if (span.innerText != title) {
-                changed = true;
-                span.innerText = title;
-            }
-        }
-
-        emitChanged(allPages());
-    }
+    emitChanged(allPages());
+}
 
-    function setImageToUrl(url, img_source) {
-        var aElement = $('a[href="' + url + '"]');
-        $(aElement).each(function() {
-            var box = $(this).parent();
-            var imgElement = $(box).children("img").first();
-            if ($(imgElement).size() == 0)
-                return;
-
-            $(imgElement).attr('src', img_source);
-        });
-    }
-
-    function setBoxUrl(id, url) {
-        var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
-        if (box === undefined)
-            return;
-
-        var a = box.getElementsByTagName('a')[0];
-        a.setAttribute('href', url);
-    }
-
-    function setBoxTitle(id, title) {
-        var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
-        if (box === undefined)
-            return;
-
-        var span = box.getElementsByTagName('span')[0];
-        span.innerText = title;
-    }
-
-    function removeBox(id) {
-        if (confirm("@TITLE-WARN@"))
-        var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
-        if (box === undefined)
+function setImageToUrl(url, img_source) {
+    var aElement = $('a[href="' + url + '"]');
+    $(aElement).each(function() {
+        var box = $(this).parent();
+        var imgElement = $(box).children("img").first();
+        if ($(imgElement).size() == 0)
             return;
 
-        var url = box.getElementsByTagName('a')[0].getAttribute('href');
-        document.getElementById("quickdial").removeChild(box);
-        alignPage();
+        $(imgElement).attr('src', img_source);
+    });
+}
 
-        external.speedDial.removeImageForUrl(url);
-        emitChanged(allPages());
-    }
+function setBoxUrl(id, url) {
+    var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
+    if (box === undefined)
+        return;
 
-    function alignPage() {
-        $('head').append('<style>#quickdial img[src*=".png"]{height:auto;width:'+DIAL_WIDTH+'px}</style>');
-        $('#quickdial div.entry').css({'width' : DIAL_WIDTH + 'px',
-                                       'height' : Math.round(DIAL_WIDTH / 1.54) + 'px'});
+    var a = box.getElementsByTagName('a')[0];
+    a.setAttribute('href', url);
+}
 
-        var width = $(window).width();
-        var height = $(window).height();
-        var boxWidth = Math.floor(DIAL_WIDTH + 30);
-        var boxHeight = Math.floor(Math.round(DIAL_WIDTH / 1.54) + 40);
+function setBoxTitle(id, title) {
+    var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
+    if (box === undefined)
+        return;
+
+    var span = box.getElementsByTagName('span')[0];
+    span.innerText = title;
+}
 
-        var maxBoxes = Math.floor(width / boxWidth);
-        if (maxBoxes > MAX_PAGES_ROW) maxBoxes = MAX_PAGES_ROW;
-        if (maxBoxes < 1) maxBoxes = 1;
+function removeBox(id) {
+    if (confirm("@TITLE-WARN@"))
+    var box = document.getElementById('quickdial').getElementsByTagName('div')[id];
+    if (box === undefined)
+        return;
 
-        var maxwidth = maxBoxes * boxWidth;
-        $("#quickdial").css('width', maxwidth + 'px');
+    var url = box.getElementsByTagName('a')[0].getAttribute('href');
+    document.getElementById("quickdial").removeChild(box);
+    alignPage();
+
+    external.speedDial.removeImageForUrl(url);
+    emitChanged(allPages());
+}
 
-        var boxesCount = $("#quickdial").children("div").size();
-        var rows = Math.ceil(boxesCount / maxBoxes);
-        var margintop = (height - rows * boxHeight) / 2;
-
-        if (margintop < 0) margintop = 0;
+function alignPage() {
+    $('head').append('<style>#quickdial img[src*=".png"]{height:auto;width:'+DIAL_WIDTH+'px}</style>');
+    $('#quickdial div.entry').css({'width' : DIAL_WIDTH + 'px',
+                                   'height' : Math.round(DIAL_WIDTH / 1.54) + 'px'});
 
-        $("#quickdial").css('margin-top', margintop + 'px');
-    }
-
+    var width = $(window).width();
+    var height = $(window).height();
+    var boxWidth = Math.floor(DIAL_WIDTH + 30);
+    var boxHeight = Math.floor(Math.round(DIAL_WIDTH / 1.54) + 40);
 
-    function saveSettings() {
-        MAX_PAGES_ROW = $('#PgInRow').val();
-        DIAL_WIDTH = parseInt($('#SdSize').val());
+    var maxBoxes = Math.floor(width / boxWidth);
+    if (maxBoxes > MAX_PAGES_ROW) maxBoxes = MAX_PAGES_ROW;
+    if (maxBoxes < 1) maxBoxes = 1;
 
-        external.speedDial.setPagesInRow(MAX_PAGES_ROW);
-        external.speedDial.setSdSize(DIAL_WIDTH);
+    var maxwidth = maxBoxes * boxWidth;
+    $("#quickdial").css('width', maxwidth + 'px');
 
-        alignPage();
-    }
+    var boxesCount = $("#quickdial").children("div").size();
+    var rows = Math.ceil(boxesCount / maxBoxes);
+    var margintop = (height - rows * boxHeight) / 2;
 
+    if (margintop < 0) margintop = 0;
+
+    $("#quickdial").css('margin-top', margintop + 'px');
+}
 
-    function sdSizeToggle() {
-        var check = document.getElementById('SdSizeToggle');
-        var SdSize = document.getElementById('SdSize');
-        var SdSizeSl = document.getElementById('sliderValueSd');
-        
-        SdSize.disabled = (check.checked ? false : true);
-        SdSize.value = (check.checked ? SdSize.value : 231);
-        SdSizeSl.innerHTML = (check.checked ? DIAL_WIDTH : 231);
-    }
+function saveSettings() {
+    MAX_PAGES_ROW = $('#PgInRow').val();
+    DIAL_WIDTH = parseInt($('#SdSize').val());
+
+    external.speedDial.setPagesInRow(MAX_PAGES_ROW);
+    external.speedDial.setSdSize(DIAL_WIDTH);
+
+    alignPage();
+}
+
+function sdSizeToggle() {
+    var check = document.getElementById('SdSizeToggle');
+    var SdSize = document.getElementById('SdSize');
+    var SdSizeSl = document.getElementById('sliderValueSd');
 
-    function configureSpeedDial()
-    {
-        // Load settings
-        $('#PgInRow').val(MAX_PAGES_ROW);
-        $('#sliderValuePg').html(MAX_PAGES_ROW);
-        $('#SdSize').val(DIAL_WIDTH);
-        $('#SdSizeToggle').prop('checked', DIAL_WIDTH != 231);
-        $('#sliderValueSd').html(DIAL_WIDTH);
-        $('#SdSizeToggle').is(':checked') ? $('#SdSize').removeAttr('disabled') : $('#SdSize').attr('disabled', 'disabled');
+    SdSize.disabled = (check.checked ? false : true);
+    SdSize.value = (check.checked ? SdSize.value : 231);
+    SdSizeSl.innerHTML = (check.checked ? DIAL_WIDTH : 231);
+}
 
-        // Show dialog
-        $('#fadeOverlay2').css({'filter' : 'alpha(opacity=100)'}).fadeIn();
-        $('#fadeOverlay2').click(function() { $(this).fadeOut('slow'); });
-        $('#settingsBox').click(function(event) { event.stopPropagation(); });
-    }
-    
-    function reloadAll() {
-        if (confirm("@TITLE-WARN-REL@"))
-            $('div.entry').each(function(i) {
-                onReloadClick($(this));
-            });
-    }
+function configureSpeedDial() {
+    // Load settings
+    $('#PgInRow').val(MAX_PAGES_ROW);
+    $('#sliderValuePg').html(MAX_PAGES_ROW);
+    $('#SdSize').val(DIAL_WIDTH);
+    $('#SdSizeToggle').prop('checked', DIAL_WIDTH != 231);
+    $('#sliderValueSd').html(DIAL_WIDTH);
+    $('#SdSizeToggle').is(':checked') ? $('#SdSize').removeAttr('disabled') : $('#SdSize').attr('disabled', 'disabled');
 
+    // Show dialog
+    $('#fadeOverlay2').css({'filter' : 'alpha(opacity=100)'}).fadeIn();
+    $('#fadeOverlay2').click(function() { $(this).fadeOut('slow'); });
+    $('#settingsBox').click(function(event) { event.stopPropagation(); });
+}
+
+function reloadAll() {
+    if (confirm("@TITLE-WARN-REL@"))
+        $('div.entry').each(function(i) {
+            onReloadClick($(this));
+        });
+}
 </script>
 </head>
 
@@ -571,8 +565,12 @@
     <a onClick="addSpeedDial();" title="@ADD-TITLE@" class="add"></a>
 
     <script type="text/javascript">
-    function init()
-    {
+    function init() {
+        if (!external.speedDial) {
+            setTimeout(init, 50);
+            return;
+        }
+
         @INITIAL-SCRIPT@
 
         external.speedDial.pagesChanged.connect(function() {
@@ -600,7 +598,7 @@
             }
         });
     }
-        
+
     // Initialize
     if (window.external) {
         init();
--- a/WebBrowser/data/html_rc.py	Sat May 06 13:44:26 2017 +0200
+++ b/WebBrowser/data/html_rc.py	Sat Jun 03 13:08:50 2017 +0200
@@ -2,13 +2,311 @@
 
 # Resource object code
 #
-# Created by: The Resource Compiler for PyQt5 (Qt v5.6.1)
+# Created by: The Resource Compiler for PyQt5 (Qt v5.8.0)
 #
 # WARNING! All changes made in this file will be lost!
 
 from PyQt5 import QtCore
 
 qt_resource_data = b"\
+\x00\x00\x12\x7f\
+\x00\
+\x00\x46\x2c\x78\x9c\xcd\x1c\xfb\x5b\xdb\x46\xf2\x77\xfe\x8a\x8d\
+\x48\x2a\xb9\xf1\x1b\x48\x09\xc6\x9c\x09\x38\x8d\xef\x08\x70\xd8\
+\x69\xda\xcb\xe5\xe3\x13\xd2\x62\xeb\x22\x4b\x3a\x49\xe6\xd1\x94\
+\xff\xfd\x66\xf6\x21\xed\x4a\xb2\x31\x69\xaf\x77\xce\x57\x6c\xed\
+\xce\xcc\xce\x6b\x67\x66\x1f\xea\xfe\xb3\xe3\xb3\xa3\xc9\x2f\xe7\
+\x43\x32\x4b\xe7\xfe\xc1\xc6\xbe\xfc\xa2\xb6\x0b\x5f\x73\x9a\xda\
+\xd0\x93\x46\x0d\xfa\xef\x85\x77\xd3\x37\x9c\x30\x48\x69\x90\x36\
+\xd2\xfb\x88\x1a\x44\x3c\xf5\x8d\x94\xde\xa5\x2d\x44\xed\x11\x67\
+\x66\xc7\x09\x4d\xfb\x8b\xf4\xba\xb1\x6b\x00\x8d\xd4\x4b\x7d\x7a\
+\x30\x18\x8f\x26\xc3\xc6\x64\x34\x39\x19\x0e\xf6\x5b\xbc\x6d\x63\
+\xdf\xf7\x82\x2f\x24\xa6\x7e\xdf\xf0\x80\x96\x41\x66\x31\xbd\xee\
+\x1b\x83\xb7\x87\x3f\x8d\x8e\xce\x4e\x07\x06\xc1\x71\xa0\x73\x6e\
+\x4f\x69\xeb\xae\xc1\x81\x5a\x80\x98\xa4\xf7\x3e\x15\xbd\x6c\x70\
+\x27\x49\x0c\x32\xa7\xae\x67\xf7\x8d\xc4\x89\x29\x0d\x60\xec\xab\
+\xd0\xbd\x27\x5f\x37\x08\x7c\xae\x6c\xe7\xcb\x34\x0e\x17\x81\xbb\
+\x47\x1a\xb7\xf4\xea\x8b\x97\x36\xa6\xb1\xed\x7a\xc0\xbf\x05\x6c\
+\x50\x3b\xae\x13\x9f\x5e\xa7\x24\x0d\x23\xf1\xeb\x2a\x4c\xd3\x70\
+\x5e\x27\xd7\x71\x38\xb7\x36\x77\x77\x7e\xd8\xdd\x3e\xac\xd5\x01\
+\xc0\xda\x7c\x7b\x8c\xff\xe0\xc1\x09\xfd\x30\x6e\x24\x80\x64\xb5\
+\x9b\x3b\x75\x22\x7b\x6a\xbd\xc2\xb0\x8d\x98\x46\xd4\x4e\xf7\x08\
+\xff\x6e\xdc\x71\x80\x6b\x50\xe1\x1e\xe9\x6c\x45\x77\xad\x6e\x37\
+\xba\x23\xc6\x3b\xea\xdf\xd0\xd4\x73\x6c\x72\x4a\x17\xd4\xa8\x93\
+\xac\xa1\x4e\x0e\x63\xcf\xf6\xeb\x24\xb1\x83\xa4\x91\xd0\xd8\xbb\
+\xe6\x34\x18\x0f\x7b\x64\x73\xa7\xbb\xe3\xbc\x7a\xd5\xdb\x78\xe0\
+\x82\x7f\x2f\x44\x97\xe2\x2e\x00\x05\xd0\x7c\xea\xc0\x88\x41\x18\
+\xd0\x9c\x83\x46\xe2\xfd\x4a\x81\x8d\x76\xfb\x05\x6f\x44\x8d\x34\
+\x66\xd4\x9b\xce\x90\xbb\xe6\x2b\xde\x3a\xb7\xe3\xa9\x17\xec\x91\
+\x76\x74\x87\xa3\x34\x6d\xd7\x15\x63\x44\x61\xe2\xa5\x5e\x08\x7d\
+\xf6\x55\x12\xfa\x8b\x54\x10\x8f\x19\x85\x0e\x22\x80\x8a\xf8\x0f\
+\xd6\x71\xeb\xb9\xe9\x6c\x8f\x74\xb7\x65\x83\x1c\x2c\x6f\x51\x4d\
+\xb6\x88\x7d\x6b\x30\x7a\xff\xe3\xe5\xf9\xc9\x87\xf1\x40\x28\xd7\
+\x59\xc4\x09\x0a\x1e\x85\x1e\xf8\x61\x8c\x2c\x6d\x6c\x6c\x82\xa3\
+\x3a\x5f\xc0\x0f\x7c\xc1\x9a\x64\xda\x5e\xa4\x21\xc7\x43\x87\x69\
+\xd8\xbe\x37\x85\x56\x87\x72\xd4\x4c\x13\xb7\x82\x8f\xab\xd0\x77\
+\x91\xa2\x42\xcf\xf5\x6e\x9a\x00\x1e\xdf\x97\x84\x06\x17\xb6\x53\
+\xef\x46\x6a\xd4\x0f\xd1\xd0\xe8\x43\x42\x92\x30\x76\x41\xf7\x42\
+\xe6\x5c\x09\xd2\x32\xa2\x9f\xb9\xb9\x90\xf5\xcd\xd9\xcf\x8d\x37\
+\x67\x17\xc7\xc3\x8b\x41\x0d\x30\x74\xfd\xef\x70\xfd\x2b\xac\x79\
+\xf3\xa9\x60\xca\xf5\x92\xc8\xb7\xef\x41\x00\x3f\x74\xbe\xf4\x2a\
+\x54\xa0\x21\xda\x8f\x18\x10\x85\x10\x06\x67\xaa\x03\x23\x92\xa2\
+\x11\x73\xb7\x91\x46\xdc\xfd\xe1\x05\xb7\x46\xa6\xb2\xbd\x59\x78\
+\x43\x63\xd2\x84\x19\x9a\xd6\xcb\xcd\x8e\x1f\x26\xb4\xa2\x1d\x14\
+\x1b\xda\x6e\x51\x34\x2f\x40\xff\xc4\x11\x92\xc8\x0e\x9a\x57\xe1\
+\xdd\x04\x03\x8a\x00\xe3\x5c\xe5\x4c\xcd\xed\xbb\xcc\x95\xbb\x19\
+\xef\xcb\x04\x66\x12\xee\xee\xbe\xa8\x16\x7f\x89\xe7\x20\xb3\x60\
+\xf5\xdb\xbd\x99\xe7\xba\x34\xc8\x38\x63\x62\x69\x6c\x91\x4e\xc9\
+\xe3\xf3\x96\xd5\x46\x78\xdd\x7d\xa1\xb0\xf8\x5a\x8a\x57\x39\x4d\
+\x8e\x4e\xce\xc6\x43\xf0\x9c\x20\x14\x71\xa7\x14\x8e\xf2\xb1\x54\
+\x41\xb8\x27\x02\x4f\x10\x8a\x80\x03\xcf\x25\x69\x0c\xd1\x26\xb2\
+\x63\x00\xea\xe9\x56\xe0\x21\x44\x95\x54\x58\xed\xab\xea\xf4\x22\
+\x38\x4d\x63\x7a\xaf\x4d\x06\x8c\xbd\x8b\x64\x8f\x6c\x71\x5f\x66\
+\x44\xd0\x39\xfe\x28\x6d\xe9\x2e\xbb\x5a\x5b\xc3\xe3\xd1\xe4\xcf\
+\x54\x16\xca\xf9\x7b\x75\xa5\xcd\x0c\xa9\xad\x57\x25\x6d\xbd\xfa\
+\x16\xdf\x6a\xaf\x0c\xc1\x17\xc3\x93\xb3\xc3\xe3\x3f\x53\x5f\x5c\
+\xd6\x6f\xd1\xd8\x36\xd7\x18\xa4\x05\xc4\x05\xca\x8d\xb2\x8f\x6d\
+\xed\x66\xf2\x6a\xa1\xe2\xd5\x4e\xde\x8c\xf1\xb3\xc1\x55\x95\xe7\
+\x11\xd1\xcc\x73\x5c\xb9\x9d\xa9\x12\xc2\x50\xa6\x4c\x2d\x0b\x74\
+\x9f\x9c\x05\xba\x3b\x2c\x76\x6b\x82\xac\x13\xf7\xd7\xe2\xbb\x48\
+\xb8\x79\xb5\x80\xe2\x27\x80\xd0\x0a\xd1\x36\x5a\xa4\x5a\x32\x95\
+\xa8\x5b\x95\x0a\xda\x92\x3a\x6f\x5e\x87\xf1\x7c\x62\x5f\x15\x22\
+\x33\xd9\xda\x69\xff\x11\x9a\x15\x59\x50\x19\x85\x71\xfa\x29\xaf\
+\x0a\x8d\xcf\x85\xf9\x91\xe5\x84\xca\x9a\x48\x6a\x02\x38\x87\x0a\
+\x36\x5d\xab\xb4\xd9\x7a\xa5\xc6\x99\xdf\x5f\xdf\x8c\x87\x93\xc9\
+\xe8\xf4\xc7\x55\x35\xce\x26\x32\xe7\x05\xd3\xe4\x0d\x18\x67\x1d\
+\x1e\xc9\xce\xae\x16\x0c\xbb\xb9\x63\x83\x32\x25\xa7\x3b\x45\xde\
+\x73\xb5\x4b\xde\xf3\x16\x95\xf7\xcd\xe1\xf1\xf0\x68\x58\x28\x11\
+\x77\x0a\x5e\x2f\x27\x64\x27\xeb\x88\xa0\x7a\x04\x29\x20\xd9\x42\
+\x38\xe8\x14\xe0\x57\x06\x89\x30\xb2\x1d\x2f\x05\x57\xef\xf0\xe7\
+\x5f\x1b\x5e\xe0\xd2\x3b\x9c\x53\xed\x92\x82\x9a\x62\x91\x22\x34\
+\x25\x6a\x33\xa6\x98\x0a\x17\xec\x48\xaf\xd2\x68\x44\xc4\xb7\xaf\
+\x68\xb1\xa0\xec\x96\x24\xe9\xac\xaa\x13\x8a\x7c\xa5\xe1\x34\x8c\
+\xf4\x69\xc5\x17\x1c\x0a\x1d\x41\x39\xeb\xe8\x56\x30\x27\x66\xea\
+\x37\x31\xa7\x46\x67\x61\xf5\xd7\xbb\x2f\xca\x43\xc4\xe1\x6d\xb2\
+\x86\xfc\x30\xf3\x49\x5b\x33\xbb\x22\x91\xb0\xe6\xe6\xee\xee\xee\
+\xd2\x01\xd4\x50\xb3\xac\xd6\x12\x7c\xee\x16\x6b\xce\x4e\x57\x0f\
+\x2a\x4a\x1a\x2b\xaa\xb1\xc2\x4b\x04\x03\x98\x6e\xa4\xa7\x94\x57\
+\x03\xab\xd8\x2a\x69\x45\x8f\x61\x3f\xc8\xe6\x42\x11\xdb\x50\xc2\
+\x75\x36\x13\x45\x00\x55\x62\xb0\xe6\x26\x6c\x12\x17\x93\x93\x94\
+\xad\xb1\x53\xe5\x84\xc2\xdf\x1f\x36\xf6\x5b\x6c\xe9\x7c\xb0\x01\
+\x6b\x68\x27\xf6\xa2\x54\x5d\x44\xff\xcb\xbe\xb1\x79\xab\x41\x92\
+\xd8\x81\x95\xf8\x5f\xff\xfe\x61\x78\xf1\xcb\xc0\x38\x00\x3c\xd6\
+\x71\xf0\x14\xbc\xc6\x87\xd1\x13\x50\x0f\x36\x6e\xec\x98\x60\x6d\
+\x01\x01\xf0\x72\xf4\xfe\xf0\xc7\x21\xe9\x13\x73\x20\x5a\x1a\x10\
+\x1e\x07\x66\x8f\x01\x7d\xb8\x38\x61\x5d\xf0\x2d\x9b\xd8\xd6\x02\
+\x6b\xe4\x9b\x0c\xa2\x19\x4b\x3b\xd6\x7a\x78\x7e\x7e\xf2\x8b\x6c\
+\x3d\x1d\x7e\xbc\x3c\x97\xf4\xe1\xa1\x81\x0f\x1a\xa5\xcb\x0c\x91\
+\x3d\x36\x58\x89\xa8\x01\x5c\x0c\xdf\x9f\xfd\xa4\x8c\xd8\xe0\x0d\
+\x45\x20\xe4\x5e\x03\x62\xc5\x93\x06\xf4\x76\x38\x39\x7a\x57\xe0\
+\xbf\x91\x37\x4a\xe0\xf7\x87\x3f\x33\xa6\xc7\x97\x17\x67\x1f\x01\
+\x72\x00\x5f\x8c\xf1\xf1\x80\x03\x1c\x8f\x0e\x4f\x2e\x3f\x8e\x8e\
+\x27\xef\xb0\x77\x7c\xdc\x18\x8f\xfe\x31\x84\x3e\xd6\x89\x59\x1d\
+\xbc\x7d\xe4\x42\x5f\xa3\xc3\x11\xc0\x35\xc2\x98\x9e\x82\x1d\x8e\
+\x66\x76\x30\xa5\xd8\x77\x6d\xfb\x09\x64\x8f\x8d\xeb\x45\xe0\x60\
+\x4a\x21\x34\x71\xec\x88\xb2\x05\x96\xc5\xf6\x6d\x6a\x72\x82\xb2\
+\x35\x57\x9f\x7f\x43\x8d\x06\x6e\xed\x50\xab\x65\xb4\xa6\x75\x62\
+\x7e\xf7\xef\x45\x98\xf6\x4c\x91\xc5\x96\x80\x9a\x1c\xd4\x86\xf4\
+\x95\x81\xc6\x34\x5d\xc4\x01\x87\x64\xb3\x20\x63\x64\x11\x3c\x95\
+\x15\xce\x04\x1b\xc4\x78\x84\x15\xce\x04\x03\xfd\xa7\xf9\x38\x2f\
+\x9c\x93\x0f\x90\xb5\x21\x73\x4b\x2e\xe0\x27\x10\x86\xbf\x45\x65\
+\x48\x7a\x15\x00\xa6\x06\x20\x06\x04\x08\x7d\xb8\x30\xb8\xa0\x73\
+\xa8\xcf\x8e\x7c\x58\xb7\x5b\x10\x10\xe4\x90\x31\x6b\x86\x08\x66\
+\x3d\x67\xcd\x4d\x96\x09\x2d\xdc\x7e\xd2\xf1\x87\x60\xfe\xbf\xd1\
+\xfb\xf3\x98\x26\x89\x95\xe9\xcd\xbb\x26\x16\x6d\x7e\xa1\xf7\x47\
+\xa1\x0b\x4a\xe9\x93\xce\x96\xec\xe2\x41\xfc\x0e\xf1\xa8\x6b\x09\
+\xfe\x14\x1e\x85\x9f\x60\xcb\x03\xfb\x4b\xe1\xb9\x4c\xb0\xfb\x83\
+\x4a\xf0\xb9\x65\x6e\x5e\xdb\x2e\x3d\xe3\xa5\xa6\x59\x83\x75\x23\
+\x4a\xb4\x06\x79\x69\x8b\x78\x41\x8b\xb2\xbd\xa5\xa9\x33\x63\x5e\
+\xc1\xf5\xe3\xcc\xa8\xf3\x45\x51\x12\xba\xba\x08\xbb\x63\x0c\x7e\
+\xa2\xb2\x12\x50\x4d\xf6\x03\x7c\xff\x2f\x1a\x10\x4e\x45\xbe\x9a\
+\x37\xc9\x5e\xa9\xe7\xc6\x4b\x3c\xa8\x38\x4d\x4e\x0a\xc5\x62\x4e\
+\x72\x02\x11\x1d\x85\x02\x1d\x7f\xe5\x30\x9e\x0f\x95\x4a\x89\xc2\
+\x43\xc1\x3e\x30\x10\x45\x4d\xa3\x21\x25\xd7\x65\x5d\xb1\xa7\x45\
+\x6a\x19\x89\x1f\xde\x1a\x75\x22\xd1\x11\xe5\xb9\x65\xa8\xd0\x46\
+\xad\xc9\x5d\x03\x54\x5b\x1c\x8c\xce\x3d\x39\xdf\xad\x08\xd6\x1a\
+\x49\xe6\x0d\x15\xe1\x80\xeb\x9b\xd9\xf7\x0e\x72\x5d\x60\xfb\xcd\
+\x24\xa2\xd4\x3d\xf6\xe0\x97\xa3\x51\xd1\x47\x81\x94\x3b\x96\x80\
+\x99\x4c\xdc\x0f\xb9\x95\x00\x00\xc5\x35\xcd\x7a\x16\x8e\xd9\x4c\
+\x10\xbe\xc0\x12\xd7\x39\x10\xb6\x2a\x7d\xb9\x34\x13\xd4\xf8\xa6\
+\xcf\x85\x5e\xe6\x04\xd0\xfa\x81\x4d\x41\x01\xe0\xcc\x3c\xdf\x85\
+\xba\xd2\x32\x6d\x54\xaf\x17\x27\xa9\x55\x6b\xda\x69\x1a\x5b\x26\
+\x6e\x45\x9b\x3a\xee\x44\x84\x0e\x35\x0c\x95\x28\x61\x05\xa1\x10\
+\xc3\x24\x67\x49\x99\x70\x76\x48\x1e\x60\x6e\x80\xb0\xea\x54\xe3\
+\xac\x99\xb8\xdd\xbe\xd7\x6a\x81\x6b\x49\x37\xc0\xdd\x5c\x20\x69\
+\x47\x11\x0d\x5c\xcb\xdc\x77\xbd\x1b\xe2\xb9\x7d\x43\xb5\x37\x61\
+\x69\xbd\x6f\xc8\xda\xb8\xdd\x7c\xdd\x93\xa5\x06\x5b\x4b\x67\x4b\
+\x84\x6b\xef\x8e\xba\x3d\x56\xee\xb6\x7b\x26\x79\x99\xb1\xa0\x7d\
+\x4c\x2c\x32\xda\x3d\x65\x2f\x4d\xd4\x59\xec\xb7\xac\xb8\x5f\xc3\
+\xa7\xa7\xac\x05\xc4\x26\x79\xcf\x38\x58\x4e\x38\x63\x5f\x5d\x6f\
+\x1a\x60\x56\x88\x1a\x11\x86\xa7\xbe\x21\xe6\x7a\x31\x6a\xdd\x40\
+\xb9\x55\x5b\x49\x1a\x97\xc3\xac\x00\x01\x98\xb2\x91\xa1\xb7\x64\
+\x66\x80\x36\x6b\x00\x6c\x1a\x07\x64\x05\xe1\x94\xad\x2f\x1d\xdf\
+\x46\xf6\xb2\x05\x27\xd4\x36\x69\x0c\xff\xb9\xc8\x13\x2b\x4a\x80\
+\xd0\x1e\xd9\x6f\x41\x8b\x68\x5d\xca\x29\xab\x74\x95\xa5\x2a\xb7\
+\x28\x50\x06\x37\x30\xc0\xe3\xfc\x05\xe5\x62\x08\xcf\x60\x2c\x72\
+\xca\x2d\x18\x74\x15\xaf\x31\xa3\x95\x05\x24\x23\xe3\x90\xd7\x18\
+\x7f\x00\x8f\xcc\xf7\x8b\x5c\xf2\xe9\xf1\x14\x3e\x19\x03\x19\x27\
+\xda\x78\x32\x3a\x8b\x31\xb3\x08\x8f\x8e\xc2\x72\x06\xf8\x4f\x29\
+\xf0\xa7\x33\x2f\x59\xed\x20\x7c\x1d\x07\x22\x68\x34\x0f\x08\xc9\
+\xd4\xa3\x56\x63\x20\x0b\x28\x8a\xe1\xac\x27\x52\x8b\xf9\xc9\xc1\
+\x7e\x24\x5d\x25\xab\xe0\x57\xbb\xad\x22\x38\xc7\xc8\x74\x4b\x06\
+\x7c\x2b\x97\xa0\xe0\x47\x5c\x70\x2d\x5b\xac\x9e\x6b\xab\x28\x73\
+\xa1\x59\x9d\x8b\x82\x12\x75\x08\x25\xf3\xa3\x35\xa3\x95\x42\xc3\
+\x84\x3e\xe0\x7f\x31\x60\x2e\x49\x5e\x3c\x27\x5e\x7b\x3e\x64\x11\
+\xcc\x87\xa6\xed\x47\x33\xdb\x12\xf1\xaa\xff\xba\x5d\x33\x1f\x78\
+\x8a\x1b\x05\x32\x66\x2f\x2b\x17\xd4\xc4\xa7\x29\xe3\x41\x41\x54\
+\xc3\x4b\x19\x93\x07\x13\xf2\x95\xb0\x1f\x4d\x3c\xc0\x3b\x8f\x81\
+\x99\xa9\xcd\x09\xf7\x88\x4a\x4b\xcc\x4b\x8c\x1e\xa1\xb3\x48\xca\
+\x29\xe9\x82\xed\x50\x96\x92\x12\x26\x8e\xc5\xb7\x66\x1c\x0c\x66\
+\x15\x88\x5a\x14\x13\xea\xc6\xc4\xb2\xa8\xc8\x2a\x3c\x90\x66\x36\
+\x01\x54\x35\xee\xd5\xf5\xc5\x56\x6d\x69\x9e\x47\xd9\x26\xb3\xc5\
+\xfc\x2a\xb0\x3d\x56\xf1\xd6\x79\x7d\x56\x50\x83\xe2\x34\x6a\x7d\
+\x99\x27\x66\x5c\x79\x2c\x61\xae\x62\x54\x18\xe7\x6d\x1c\xce\x3f\
+\x24\x34\x1e\xa1\x1b\x5b\xba\x25\x98\x1c\x06\x73\x66\xa3\xa6\x14\
+\x43\x01\xbd\xfd\x90\xd7\xe4\x52\x99\xb8\x88\xee\x13\x17\xac\x37\
+\x47\x7b\x4f\x69\x3a\xf4\x29\xfe\x7c\x73\x3f\x82\x9c\x9a\x1d\x88\
+\x01\xe1\xbc\x2f\x79\x73\x3f\xb1\xa7\xa7\xf6\x9c\x5a\x26\xb8\xb7\
+\x59\xfb\x94\x09\xf3\xb9\xa7\x91\xb7\x81\x38\xd6\x92\xd5\xb8\x60\
+\xeb\x4f\xed\x02\x46\x08\x4b\x72\x0f\x04\xe6\x59\xdf\x46\xcc\x43\
+\x90\xc8\x83\x59\x4a\x75\x5f\xc0\x4f\x42\xd1\xc1\x71\xbd\x91\x71\
+\x50\x27\x42\xd2\x22\x14\x2f\x4c\x14\x38\xa9\x37\xd6\x51\xd4\x5c\
+\x4d\x67\x4b\x94\x74\xeb\x71\x85\x08\x79\x18\x3d\x12\x75\xf4\x0a\
+\x35\xe7\xc0\x38\x23\x39\xbc\x70\x00\x49\x8f\xd5\x92\x38\xb6\xef\
+\x63\xf5\x07\x73\x2d\xef\x47\x77\x2a\x8f\xf7\xdb\x6f\xc4\x52\xb5\
+\xf9\xac\xaf\x4a\xf1\xdd\x77\xea\xd3\x33\x3e\x41\x88\xea\x1e\xfa\
+\x7c\x5b\x6e\x45\x36\xf1\x34\x3b\x32\x9e\xe6\x53\xdc\x2d\x56\xb4\
+\x54\x3d\xb5\x34\xa4\xa7\xd5\xf6\xa5\xc0\xbb\xa2\xd8\xd7\x60\x1f\
+\x0a\xcf\x4b\x26\x9a\x3e\xbd\xab\x8d\x5e\x2f\x1b\x7a\x3d\xe2\x9c\
+\xb3\x11\x1e\x6a\xbc\x0d\x63\xf4\xe0\xea\x01\x14\x6a\x0f\x7c\x2d\
+\xa9\xcb\xad\x27\xbd\x1c\x36\xfb\x55\x5e\xd6\x88\xe5\x63\x71\x61\
+\x92\x39\x96\x1e\xa4\x13\x16\x6c\x4d\xfb\x93\x4c\xdd\x6c\xbe\x19\
+\x9f\xd5\x90\xcc\x6a\x2a\x01\x88\x85\xbe\x02\xcb\x2b\x09\x0d\x9a\
+\xcd\x30\x00\x36\x8c\x2c\x93\x64\x07\xdc\x60\x72\x6a\x3b\xb3\x3c\
+\x21\x79\xc5\x88\x25\xf3\x06\x2b\x6a\xd6\x4e\x1c\x1a\xa7\x95\xf8\
+\xcb\xf8\x2e\x2c\x59\x74\x72\x32\x17\x15\x89\x2d\x2d\xa9\x55\x74\
+\xd4\xc2\x4b\x98\x77\x20\xd1\x1e\x2b\x16\x0b\xbb\x27\x58\x32\xfe\
+\xc6\x18\x56\xbb\xb5\x6d\x1e\x06\x02\x83\x15\xf1\x31\xa3\xb1\xce\
+\x9e\x99\x5b\x5b\xdd\x2f\x60\xa3\x97\x56\xa6\xe8\x44\x2c\x8d\x31\
+\xf2\x75\x14\xef\x32\x09\x17\xb1\x43\xf5\x3d\x83\x1b\x35\x98\x39\
+\x31\xb5\x53\x2a\x02\x83\x48\x08\x72\x4f\xf7\xa6\x10\x03\x98\x7e\
+\x21\x0a\x98\xc2\xd8\xc5\xac\xbe\x8c\x28\xd3\xa7\x58\x2c\x2e\x09\
+\x2c\x0a\xaf\x39\x55\x7b\x05\x4d\x5b\x52\xb4\x0b\xf4\x98\xdf\xd4\
+\xd1\xd1\x96\x00\x64\x52\xf0\xb9\xa0\x8a\x81\x5e\xd4\x59\x31\x28\
+\x5f\x06\x73\x78\x06\xbb\x82\xb4\x48\x08\x2a\xb0\x17\x04\x34\x9e\
+\x80\x23\xe2\x7e\x59\xc5\xbe\x9f\xce\x48\xf7\x09\x8c\x74\x97\x5a\
+\x8a\xd5\x89\xcb\x01\x45\x6d\x8c\xa0\xea\x16\x04\x3f\x98\x3a\x0d\
+\x5d\x5a\x5b\x85\xcd\xd8\x06\xdc\x7c\x73\xb9\x20\xc3\xd6\x13\x64\
+\xd8\x5a\x26\x03\xbb\x85\xb1\x0a\x52\x13\x42\xdd\x53\x5c\x22\x46\
+\x11\x5f\x17\x83\xef\x78\x17\x04\xd9\x7e\x82\x20\xdb\xcb\x04\xe1\
+\x27\xfe\xab\x40\x0b\x92\xe4\xe5\xf7\x12\x49\x8a\xf8\x45\x49\x30\
+\x5f\xcb\xd8\x81\xf3\x99\xef\xb6\x1c\x61\xa4\x63\x51\xa6\xf7\xc4\
+\x1e\x7b\x49\x3b\xf3\xef\x15\x7d\xdd\x15\x7d\x5b\x2b\xfa\xb6\x33\
+\xe6\x97\x14\x5f\x46\x56\xe3\x1a\x35\x0d\x1b\xa8\xa9\xeb\x88\x3c\
+\xbe\x60\xc1\xae\x97\x31\x4a\x8a\x7a\xda\x32\x81\xa7\x6a\x35\x30\
+\xc3\xa8\x7a\x58\xe6\xc5\x2b\x2b\x14\x2c\xcf\x5d\x16\x93\xff\xa0\
+\x3a\xde\x93\x05\xbc\xd8\x92\x63\x2b\xa7\x45\xe0\xd2\x6b\x2f\x80\
+\xca\xa6\x7a\x8d\xf2\xf4\x22\xf1\xf1\x18\x8e\xc9\xeb\x2f\x98\xd3\
+\xa0\x98\x27\xc7\x30\x57\x4a\x7b\xf7\x80\xcf\x22\xdf\x24\x14\x09\
+\x53\x64\x2d\x55\x2b\x4e\xf1\xf8\x46\x51\x17\xab\x57\x7e\xaf\xc2\
+\x38\x45\x58\x44\x80\x7f\x00\xb9\x76\x8f\x78\x64\x9f\x53\x6f\xfa\
+\x34\x98\xa6\xb3\x1e\x79\xf9\xb2\x54\xc3\x70\x6b\x31\xb0\x4f\xde\
+\xe7\x9e\x5e\xc9\xaf\x50\x3b\x7e\xf0\xdc\xde\x0b\x30\x79\x17\x49\
+\xf2\xc5\xc9\x63\xcb\xad\x47\xd6\x2e\x72\xc9\xfc\xac\x2f\x48\xae\
+\x35\x3a\x3b\x1f\x5e\x35\x36\x8f\x70\xda\x2a\x01\x47\x62\xd7\x98\
+\xf2\xa4\xf6\xac\xaf\xdb\x30\x1b\xb5\x62\xdf\x5d\x7e\x0a\x24\xfa\
+\xf2\x58\x4a\xf6\x3f\xa8\x93\x4c\x2d\x86\xf3\x82\xb7\xec\x59\x6c\
+\xba\x29\x9e\x55\x3d\xe9\x6c\x21\xa8\xac\x90\xf9\x35\x6d\xf4\xda\
+\x85\xd8\x99\xcc\xea\xde\xe7\x96\x04\x2e\x16\xb8\xd5\xbe\x21\x4b\
+\x4a\x1e\xb5\x2b\xca\x4e\x75\x68\x7d\x27\xc4\x80\x5e\x43\xd9\x09\
+\x51\xf5\xcd\xf6\x3a\x32\x46\xf0\x76\x33\x8c\x0f\xbe\xd6\xd6\xad\
+\xac\x4d\x6f\xce\xbe\x8a\xa7\x6e\x95\x94\xca\xae\xe2\xba\x22\x5f\
+\xa2\x63\xf4\x52\x8e\x05\xff\x1f\xc2\xd6\xfa\xfb\x13\x2b\x8b\xc4\
+\xb2\xbc\xbc\x28\x43\x89\x4b\x41\xe9\x7f\x2d\xf3\x53\xe7\xea\xb2\
+\x09\xa6\x0a\x9d\x9f\xb7\x7a\xae\xba\xc9\x05\xe1\x02\xfc\x70\x6e\
+\x19\xe2\xf4\xfe\xe3\xe1\xc5\xe9\xc0\xa8\xd5\xfe\x6f\x94\xb1\xf8\
+\xbd\x31\x73\xad\xb2\x82\xab\x87\x97\x15\x38\x59\x2b\x8e\xf2\x96\
+\xed\xf6\x95\xf7\x09\xf2\x75\xc9\x5a\xd1\x4c\x19\x25\x3f\x41\xc5\
+\xf7\x58\xd4\xa3\x33\x7e\xf9\x45\xbf\x38\xff\x09\x26\xf8\xf7\x7d\
+\xa3\x19\x05\x53\xe3\xf3\x57\x71\xcc\xc5\xae\xba\xf1\xd3\x2f\xf3\
+\x65\x7e\xb1\xe2\xa5\x19\xdd\x3d\xc8\x3b\x34\x79\xcc\x33\xab\xde\
+\x12\xc8\x36\xbd\x19\x19\xdc\xf3\x56\x2e\x68\x40\xd0\x8c\xee\xcc\
+\x7a\x69\x07\xa5\xe2\x63\x72\x96\x90\xc0\x7b\x3b\x9d\x35\xd9\x51\
+\x9b\xa5\xd0\x6a\x91\x4e\x73\x67\xbb\x26\x68\x66\x2b\x60\x34\x3b\
+\x1b\x9a\xc5\xce\x5b\x2f\x70\xc3\xdb\x5a\x93\xb5\xa8\x87\xa2\x9c\
+\xba\x06\xc3\x9b\x0a\x27\xa7\x1f\x05\x29\xc6\xc3\xb5\x1f\x86\xb1\
+\xa5\xc9\xb3\xd5\xd6\xe1\xdf\x49\xba\x0a\xc2\x63\xfc\x6f\xb7\x55\
+\xe6\xe7\xf6\xdd\x1b\x51\xbf\x28\x34\xb8\x48\xad\x8c\x25\xe5\x6c\
+\x35\x43\x38\xd0\x2f\xcb\xd4\x34\x52\x6a\x4f\x05\xee\x3e\xe9\x68\
+\xf0\x1d\x9d\x23\xa9\xd1\x0c\xe2\xfb\x8c\x13\xe9\x0d\xc6\xa6\x3a\
+\x27\xd0\x07\x84\x0b\xd4\x73\x02\xdc\x56\xaa\xb4\xac\x4a\x3a\x02\
+\xdd\x70\x5b\x14\x88\x64\x49\x0f\xdc\xcb\x90\x19\x2d\xd7\x37\x5e\
+\x5f\x93\x6a\x72\x28\x54\xdf\x0a\xb5\x56\xc6\xab\x82\xc0\x6f\x8d\
+\xa5\x61\x04\x58\x96\x70\x81\x06\x27\xf3\x7d\x6e\xbd\x1a\x20\x77\
+\x95\xb5\x41\x8e\xb5\x0f\xa9\x54\x23\xd2\xce\x4e\x19\x2a\xc4\xcf\
+\x2f\xae\x31\x1d\x48\xac\x4c\x09\x5a\x5e\xb1\x6f\xe8\x58\x5c\xcd\
+\xcb\xa6\x72\xf1\xee\x13\x4e\xb9\xf3\xe9\x28\xb8\x08\x6f\x61\x9a\
+\xdd\xe0\x15\x03\x2e\x9b\x76\x07\x2a\xc2\x57\xd1\x46\x01\x3f\x39\
+\x18\xbb\x63\x50\x9a\x84\x5e\x11\x89\x20\xb1\xb1\x08\xc3\xa8\x5b\
+\xba\x23\x2d\x3d\x22\x01\x24\x3e\x80\xe2\xd8\x72\x8c\xa5\x57\x19\
+\x12\x86\x31\x09\xa7\x53\x9f\x5a\x7a\x3d\x4f\x9d\x2f\xab\xf2\xc5\
+\x58\xc1\x54\xb7\x65\x78\xfb\xe3\x98\x65\x9c\xb1\xbf\x0a\x2b\xf1\
+\x3d\x97\xc6\x3f\xe1\x66\xda\xd8\xcd\xdc\x96\x63\x36\x5d\x2f\xc1\
+\x63\x4f\x2c\x5b\xf9\xdd\x1b\xe5\x4a\x0d\x5b\x8f\x40\xe4\xc2\x7a\
+\x56\x8c\x29\xb0\xe4\xee\x68\x09\x45\xeb\xdf\x23\xdd\xad\x8e\x86\
+\x38\xf6\x79\x92\x7e\x37\x79\x7f\x52\x85\xae\x78\x80\x44\x56\x75\
+\xce\x32\xf5\x74\x11\xd3\xf2\xed\x94\x56\x8b\x9c\xe0\x3b\x15\xf2\
+\x62\x68\x16\xdc\x75\x4f\xab\xf2\x08\x84\x52\x74\x74\x8e\xbb\xa2\
+\xf8\x3e\xe4\x52\x60\xcd\x1b\x35\x97\xd1\x21\xa4\x89\x9b\x51\x1c\
+\x46\x96\x29\xc4\x84\x59\xa4\x88\x09\xab\x89\x5c\x49\x05\x4e\xd0\
+\x5a\x9c\x93\x75\x06\xf1\x60\xae\xee\xc9\x31\x6a\xa0\x4c\x8d\x55\
+\x9e\xa2\x0f\x59\x51\x2c\x6d\x0e\x50\x7b\x3a\x94\xad\xf7\xd7\x89\
+\x02\x2b\xfc\x06\x14\x3d\x9e\x85\xb7\x04\x43\x44\x38\xcd\x98\x51\
+\x8e\x34\xba\x8f\x9f\x18\x77\xda\x6b\x1c\x19\x77\x2b\xcf\x8c\xb3\
+\x55\x87\x3c\x75\x31\xf1\xd4\xc5\x2c\x1c\xfa\x2a\xf7\x83\xbf\xf5\
+\xfc\x58\x2f\x1d\x71\x7f\xe4\xd0\xf7\xad\xc7\x0a\x47\xbc\x24\x9a\
+\x15\x8f\x82\x9b\x35\x0f\x0e\xf0\xa3\x6f\x87\x09\x51\xd5\x23\x93\
+\x9a\xb8\x08\x2c\x6f\xe5\xb6\xf8\xdb\xbe\x1b\xfb\x78\xd1\xe8\x80\
+\xc1\x65\x97\x74\xf2\x50\x2e\x8e\xf8\x79\xb7\x9d\x5f\x15\xa8\x9a\
+\x50\x3d\x83\x17\xcf\x7d\x63\x20\x5f\x68\x10\xef\xfe\x1a\xf2\x66\
+\x04\x6a\x17\x69\xda\x65\x8a\xfa\xd5\x31\x85\xd6\xe1\xf1\x71\x91\
+\x0c\xc0\x0a\x2a\x9c\xcc\x23\x37\x8c\x11\x26\xb3\x88\x17\x78\xa9\
+\xb6\x2c\x45\x83\x3c\x2b\x07\xf7\xa2\x82\xd9\x8e\xcc\x9c\x86\xe0\
+\x38\x48\xa2\x4e\x76\xda\x8a\x7a\xf1\x23\xcb\xef\x4c\xe5\xf9\x0a\
+\x73\x30\x3a\x1d\x4d\x60\x2a\x36\xc6\x47\x17\xa3\xf3\xc9\x20\xef\
+\xa9\xc8\x2a\xec\x1c\x4b\x54\xbe\xf8\x22\x43\x40\x9d\xb4\x7a\x45\
+\x2d\xd9\x2f\xdd\xe1\xab\x3a\x3f\x5c\x71\xef\xb7\x08\x5a\x94\x84\
+\x4b\xa3\x3e\xf1\xa2\xb1\xe9\x87\x0e\x73\x7d\xf1\xb2\x96\x55\x70\
+\xb8\x55\x52\xa6\x72\xcf\x10\xa3\xaf\x22\xa8\xb6\x3f\xa1\xd0\x5b\
+\xa2\x28\xb6\x14\x2d\x93\xc8\x37\xcf\x54\x36\xb4\x9c\x2c\x1b\xf3\
+\x0a\x38\xa6\xac\xc2\xd2\x82\x86\x8a\xa2\x1d\xad\x3e\x97\x55\x99\
+\x08\x74\x63\xf6\x3e\x11\x0f\x03\x2a\x90\x56\x17\x25\x61\xcc\x2e\
+\x0b\x59\x5f\x0b\x9e\x03\x81\x2b\xe5\xf9\x52\x5f\x1d\xc8\x37\x81\
+\x4c\x0c\xc2\x85\x95\x03\xee\x56\xd9\x5e\x80\xf9\x1a\x00\x64\x16\
+\x2f\x00\x65\xaf\xcd\xb4\x9b\xbb\x7a\x0f\xf0\x9d\xda\x81\x43\xf7\
+\xa0\x00\xd7\x7b\x16\x91\x6b\xa7\xd0\xae\xc7\xbd\x3a\x59\x94\xa2\
+\x0e\x33\xcc\xb2\x75\x9a\x0a\xf4\xa0\xf9\x05\x6f\x91\x59\x61\x04\
+\xd3\x09\xd4\x03\xaa\xcf\x02\xa4\x70\x2f\x69\x73\x6d\xba\xb2\xf9\
+\x2b\x68\x14\xcf\x8c\xb3\x52\x06\x22\xc4\x10\x99\x3e\x01\x21\x29\
+\xd4\x0d\x96\x79\x49\x63\xcf\xb9\x94\x14\x2f\xf9\x19\x05\x66\x2a\
+\x24\x98\xf1\x84\x7f\xf3\x20\xc9\x9e\x2a\x2e\x5e\x76\xbf\xf5\xe6\
+\xe5\x5a\xf7\x2b\xe1\xa1\xfa\x7a\xa5\x10\x33\xe3\x48\xc9\x55\x59\
+\xa7\xe8\x16\x81\x92\xbd\x6e\xa4\xf4\x41\xaf\x72\x19\x4e\x54\x38\
+\xc6\xc1\x60\xf2\xf3\xe4\xf2\xf4\x02\x8a\x95\xf1\x40\x5e\x7d\xcb\
+\xe9\xe5\x19\xa0\x48\x9e\xbf\x3f\xa3\xd3\x67\x1b\x30\x8c\x3b\xb5\
+\x32\x82\x31\xf2\x17\x17\x40\xc1\x00\xa4\x61\xf1\x2b\x6b\x88\x26\
+\x99\x12\xd1\x3c\x46\xc7\x32\xf0\x9d\xb5\xbe\x01\x6a\x87\x45\x4d\
+\xdf\xd8\xcd\xae\xb3\x29\x44\xd1\x24\x34\xea\x1b\x1d\x76\x59\x90\
+\xf9\x63\xdf\x58\x5a\xa1\x61\x7a\xe4\xc5\x26\xa6\x9a\xd6\x5a\xd2\
+\x56\x28\xb3\xfa\xf2\x62\x60\xcf\xe1\x39\x71\x31\x9a\x88\xfb\x93\
+\x6a\xc9\xa5\x32\xa8\x2f\x06\x90\x93\xef\x82\xab\x24\xea\xa9\x66\
+\xd2\x70\xb9\xad\xc6\xc7\xec\x2d\x8f\xff\x86\xad\xc6\x90\x5a\xb3\
+\xd7\x48\x56\x5a\x8a\xf3\x55\x65\xa8\xce\xf6\x8e\x30\xd5\xd6\xab\
+\x76\x6e\x2c\x49\x75\x1d\x53\xe5\x25\xec\xb7\x98\x4a\xbc\xfe\xa7\
+\x4b\x5b\x75\x3f\x53\x0b\x52\x4f\xbd\x92\x59\x51\x76\x16\x6b\x4b\
+\x8d\xe1\x47\xc7\x80\x42\x81\xbf\xb1\x44\xb4\x7b\x99\xfa\xe2\xb8\
+\xb7\xce\xb0\xda\xa8\x78\x95\xb3\x5a\x6b\x6a\x75\xc7\x7f\xee\xb7\
+\x78\x3d\xb8\xdf\xe2\xff\x53\x98\xff\x00\xa1\x53\x06\x7b\
 \x00\x00\x03\x7c\
 \x3c\
 \x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\
@@ -67,306 +365,6 @@
 \x20\x3c\x70\x3e\x40\x4d\x45\x53\x53\x41\x47\x45\x40\x3c\x2f\x70\
 \x3e\x0a\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x3c\x2f\x62\x6f\x64\
 \x79\x3e\x0a\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\
-\x00\x00\x12\x96\
-\x00\
-\x00\x4a\x63\x78\x9c\xcd\x3c\x6b\x77\xdb\x36\x96\xdf\xf3\x2b\x18\
-\xba\x29\xa9\x46\x6f\xdb\xa9\x63\x59\x1e\x39\xb6\xd2\x68\xd7\xb1\
-\xbd\x96\xd2\xb4\x9b\xcd\xf1\xa1\x49\x58\xe2\x86\x22\x39\x24\xe5\
-\xc7\xa4\xfe\xef\x7b\x2f\x00\x92\x00\xf8\x90\x9c\x64\xe7\x54\x73\
-\x26\x96\x08\xdc\x8b\xfb\x7e\x00\x60\x0f\x9e\x9f\x9c\x1f\xcf\xfe\
-\xbc\x18\x6b\x8b\x64\xe9\x1d\x3e\x3b\x48\xff\x10\xcb\x81\x3f\x4b\
-\x92\x58\x30\x92\x84\x2d\xf2\xcf\x95\x7b\x3b\xd4\xed\xc0\x4f\x88\
-\x9f\xb4\x92\x87\x90\xe8\x1a\xff\x35\xd4\x13\x72\x9f\x74\x10\x74\
-\xa0\xd9\x0b\x2b\x8a\x49\x32\x5c\x25\x37\xad\x3d\x1d\x70\x24\x6e\
-\xe2\x91\xc3\xd1\x74\x32\x1b\xb7\x66\x93\xd9\xe9\x78\x74\xd0\x61\
-\xcf\x9e\x1d\x78\xae\xff\x45\x8b\x88\x37\xd4\x5d\xc0\xa5\x6b\x8b\
-\x88\xdc\x0c\xf5\xd1\xdb\xa3\xdf\x27\xc7\xe7\x67\x23\x5d\xc3\x75\
-\x60\x70\x69\xcd\x49\xe7\xbe\xc5\x26\x75\x00\x30\x4e\x1e\x3c\xc2\
-\x47\xe9\xe2\x76\x1c\xeb\xda\x92\x38\xae\x35\xd4\x63\x3b\x22\xc4\
-\x87\xb5\xaf\x03\xe7\x41\xfb\xfa\x4c\x83\xcf\xb5\x65\x7f\x99\x47\
-\xc1\xca\x77\xf6\xb5\xd6\x1d\xb9\xfe\xe2\x26\xad\x79\x64\x39\x2e\
-\xd0\x6f\x02\x19\xc4\x8a\x9a\x9a\x47\x6e\x12\x2d\x09\x42\xfe\xed\
-\x3a\x48\x92\x60\xd9\xd4\x6e\xa2\x60\x69\x6e\xed\xed\xfe\xba\xb7\
-\x73\xd4\x68\xc2\x04\x73\xeb\xed\x09\xfe\x0f\x7e\xd8\x81\x17\x44\
-\xad\x18\x80\xcc\x6e\x7b\xb7\xa9\xa5\x23\x8d\x81\xb2\x6c\x2b\x22\
-\x21\xb1\x92\x7d\x8d\xfd\x6d\xdd\xb3\x09\x37\x20\xc2\x7d\xad\xb7\
-\x1d\xde\x77\xfa\xfd\xf0\x5e\xd3\xdf\x11\xef\x96\x24\xae\x6d\x69\
-\x67\x64\x45\xf4\xa6\x96\x3d\x68\x6a\x47\x91\x6b\x79\x4d\x2d\xb6\
-\xfc\xb8\x15\x93\xc8\xbd\x61\x38\x28\x0d\xfb\xda\xd6\x6e\x7f\xd7\
-\x7e\xf5\x6a\xf0\xec\x91\x31\xfe\x0b\x67\x3d\x65\x77\x05\x20\x00\
-\xe6\x11\x1b\x56\xf4\x03\x9f\xe4\x14\xb4\x62\xf7\x5f\x04\xc8\xe8\
-\x76\x5f\xb0\x87\x28\x91\xd6\x82\xb8\xf3\x05\x52\xd7\x7e\xc5\x9e\
-\x2e\xad\x68\xee\xfa\xfb\x5a\x37\xbc\xc7\x55\xda\x96\xe3\xf0\x35\
-\xc2\x20\x76\x13\x37\x80\x31\xeb\x3a\x0e\xbc\x55\xc2\x91\x47\x14\
-\x43\x0f\x01\x40\x44\xec\x0b\x1d\xb8\x73\x9d\x64\xb1\xaf\xf5\x77\
-\xd2\x07\xe9\x62\xf9\x13\x51\x65\xab\xc8\x33\x47\x93\xf7\xbf\x5d\
-\x5d\x9c\x7e\x98\x8e\xb8\x70\xed\x55\x14\x23\xe3\x61\xe0\x82\x1d\
-\x46\x48\xd2\xb3\x67\x5b\x60\xa8\xf6\x17\xb0\x03\x8f\x93\x96\x12\
-\x6d\xad\x92\x80\xc1\xa1\xc1\xb4\x2c\xcf\x9d\xc3\x53\x9b\x30\xd0\
-\x4c\x12\x77\x9c\x8e\xeb\xc0\x73\x10\xa3\x80\xcf\x71\x6f\xdb\x30\
-\x3d\x7a\x28\x30\x0d\x26\x6c\x25\xee\x6d\x2a\x51\x2f\x40\x45\xa3\
-\x0d\x71\x4e\x82\xc8\x01\xd9\x73\x9e\x73\x21\xa4\x9a\xe1\xe3\xd4\
-\xcc\x39\xaf\x6f\xce\xff\x68\xbd\x39\xbf\x3c\x19\x5f\x8e\x1a\x00\
-\x21\xcb\x7f\x97\xc9\x5f\x20\xcd\x5d\xce\x39\x51\x8e\x1b\x87\x9e\
-\xf5\x00\x0c\x78\x81\xfd\x65\x50\x22\x02\x09\xd0\x5a\xa3\x40\x64\
-\x82\x2b\x9c\x8a\x0e\x94\xa8\xa9\x4a\xcc\xcd\x26\x55\xe2\xde\xaf\
-\x2f\x98\x36\x32\x91\xed\x2f\x82\x5b\x12\x69\x6d\xf0\xd0\xa4\x59\
-\x7c\x6c\x7b\x41\x4c\x4a\x9e\x83\x60\x03\xcb\x51\x59\x73\x7d\xb4\
-\x4f\x5c\x21\x0e\x2d\xbf\x7d\x1d\xdc\xcf\x30\xa0\xf0\x69\x8c\xaa\
-\x9c\xa8\xa5\x75\x9f\x99\x72\x3f\xa3\xbd\x8a\x61\xca\xe1\xde\xde\
-\x8b\x72\xf6\x2b\x2c\x07\x89\x05\xad\xdf\xed\x2f\x5c\xc7\x21\x7e\
-\x46\x19\x65\x4b\x22\x4b\xeb\x15\x2c\x3e\x7f\x52\xaf\x84\xd7\xfd\
-\x17\x02\x89\xaf\x53\xf6\x4a\xdd\xe4\xf8\xf4\x7c\x3a\x06\xcb\xf1\
-\x03\x1e\x77\x0a\xe1\x28\x5f\x4b\x64\x84\x59\x22\xd0\x04\xa1\x08\
-\x28\x70\x1d\x2d\x89\x20\xda\x84\x56\x04\x93\x06\xb2\x16\x58\x08\
-\x11\x39\xe5\x5a\xfb\x2a\x1a\x3d\x0f\x4e\xf3\x88\x3c\x48\xce\x80\
-\xb1\x77\x15\xef\x6b\xdb\xcc\x96\x29\x12\x34\x8e\x1f\x25\x2d\xd9\
-\x64\xeb\xa5\x35\x3e\x99\xcc\xfe\x9d\xc2\x42\x3e\xbf\x57\x56\x92\
-\x67\xa4\xd2\x7a\x55\x90\xd6\xab\x6f\xb1\xad\x6e\x6d\x08\xbe\x1c\
-\x9f\x9e\x1f\x9d\xfc\x3b\xe5\xc5\x78\xfd\x16\x89\xed\x30\x89\x41\
-\x5a\x40\x58\xc0\xdc\x2a\xda\xd8\xf6\x5e\xc6\xaf\x14\x2a\x5e\xed\
-\xe6\x8f\x31\x7e\xb6\x98\xa8\xf2\x3c\xc2\x1f\xb3\x1c\x57\x7c\x4e\
-\x45\x09\x61\x28\x13\xa6\x94\x05\xfa\x4f\xce\x02\xfd\x5d\x1a\xbb\
-\x25\x46\x36\x89\xfb\x1b\xd1\xad\x22\x6e\x5f\xaf\xa0\xf8\xf1\x21\
-\xb4\x42\xb4\x0d\x57\x89\x94\x4c\x53\xd0\xed\x52\x01\x6d\xa7\x32\
-\x6f\xdf\x04\xd1\x72\x66\x5d\x2b\x91\x59\xdb\xde\xed\xfe\x08\xc9\
-\xf2\x2c\x28\xac\x42\x29\xfd\x94\x57\x85\xfa\x67\xc5\x3f\xb2\x9c\
-\x50\x5a\x13\xa5\x92\x00\xca\xa1\x82\x4d\x36\x2a\x6d\xb6\x5f\x89\
-\x71\xe6\xfb\xeb\x9b\xe9\x78\x36\x9b\x9c\xfd\x56\x57\xe3\x6c\x21\
-\x71\xae\x3f\x8f\xdf\x80\x72\x36\xa1\x51\xdb\xdd\x93\x82\x61\x3f\
-\x37\x6c\x10\x66\x4a\xe9\xae\x4a\x7b\x2e\xf6\x94\xf6\xfc\x89\x48\
-\xfb\xd6\xf8\x64\x7c\x3c\x56\x4a\xc4\x5d\xc5\xea\x53\x87\xec\x65\
-\x03\x21\x54\x8f\xc0\x05\x24\x5b\x08\x07\x3d\x65\x7e\x6d\x90\x08\
-\x42\xcb\x76\x13\x30\xf5\x1e\xfb\xfd\xaf\x96\xeb\x3b\xe4\x1e\x7d\
-\xaa\x5b\x10\x50\x9b\x37\x29\x5c\x52\xbc\x36\xa3\x82\x29\x31\xc1\
-\x5e\x6a\x55\x12\x8e\x50\xf3\xac\x6b\xa2\x16\x94\xfd\x02\x27\xbd\
-\xba\x3a\x41\xa5\x2b\x09\xe6\x41\x28\xbb\x15\x6b\x38\x04\x3c\x1c\
-\x73\x36\xd0\x2f\x21\x8e\x7b\xea\x37\x11\x27\x46\x67\xae\xf5\xd7\
-\x7b\x2f\x8a\x4b\x44\xc1\x5d\xbc\x01\xff\xe0\xf9\x5a\x57\x52\xbb\
-\xc0\x11\xd7\xe6\xd6\xde\xde\x5e\xe5\x02\x62\xa8\xa9\xaa\xb5\x38\
-\x9d\x7b\x6a\xcd\xd9\xeb\xcb\x41\x45\x48\x63\xaa\x18\x4b\xac\x84\
-\x13\x80\xe9\x26\xb5\x94\x62\x37\x50\x47\x56\x41\x2a\x72\x0c\xfb\
-\x35\x7d\xac\x14\xb1\x2d\x21\x5c\x67\x9e\xc8\x03\xa8\x10\x83\x25\
-\x33\xa1\x4e\xac\x26\xa7\x94\xb7\xd6\x6e\x99\x11\x72\x7b\x7f\x7c\
-\x76\xd0\xa1\xad\xf3\xe1\x33\xe8\xa1\xed\xc8\x0d\x13\xb1\x89\xfe\
-\x5f\xeb\xd6\x62\x4f\x75\x2d\x8e\x6c\xe8\xc4\xff\xe3\xbf\x3e\x8c\
-\x2f\xff\x1c\xe9\x87\x00\x47\x07\x0e\x9f\x02\xd7\xfa\x30\x79\x02\
-\xe8\x21\xa5\xfa\xd6\x8a\x34\xac\x2f\x20\x08\x5e\x4d\xde\x1f\xfd\
-\x36\xd6\x86\x9a\x31\xe2\x4f\x5a\x10\x22\x47\xc6\x20\x9b\xf8\xe1\
-\xf2\x94\x0e\xc3\x5f\xf1\x31\xdd\x66\xa0\x03\x6c\xc3\x41\x18\xc2\
-\x52\x8f\x8e\x1c\x5d\x5c\x9c\xfe\x29\x8e\x9c\x8d\x3f\x5e\x5d\xa4\
-\xeb\xc1\x8f\x16\xfe\x28\x60\xbd\xca\x10\xd0\x9f\x2d\x5a\x3a\x16\
-\x26\x5d\x8e\xdf\x9f\xff\x2e\x50\xd0\x62\x0f\xca\x26\x22\x67\xd2\
-\x44\x5a\x5c\x15\x26\xbe\x1d\xcf\x8e\xdf\x29\x7c\xb5\xf2\x87\x22\
-\xc0\xfb\xa3\x3f\x28\x23\xd3\xab\xcb\xf3\x8f\x30\x7b\x04\x7f\x28\
-\x33\xd3\x51\x3e\xe9\x64\x72\x74\x7a\xf5\x71\x72\x32\x7b\x87\x33\
-\xa6\x27\xad\xe9\xe4\xbf\xc7\x30\x9e\x4d\xc0\x2a\x00\xbc\x63\xe2\
-\xc0\x78\xab\x97\x03\x82\x39\x05\x11\x39\x03\xdd\x1d\x2f\x2c\x7f\
-\x4e\x70\xfc\xc6\xf2\x62\xc2\x61\x6f\x56\xbe\x8d\xa9\x48\x23\xb1\
-\x6d\x85\x84\x36\x66\x26\xdd\xef\x69\x70\x2b\xa6\xb6\x49\xfb\xb5\
-\x21\xfb\x0b\xf5\x1d\xb8\x84\x4d\xcc\x8e\xde\x99\x37\x35\xe3\xe7\
-\x7f\xae\x82\x64\x60\xf0\x0c\x58\x33\xdd\x60\xd3\x2d\x48\x7f\xd2\
-\xf4\x88\x24\xab\xc8\x67\xb3\xd9\xd3\x47\x85\xb8\x95\xff\x2d\xe4\
-\x31\xc2\xe8\xa2\xfa\x06\xe4\x31\xc2\xe8\xf4\xff\x31\x9e\x46\x1f\
-\xa3\xee\x03\x54\x05\x50\x19\x88\x94\xc1\x4f\x58\x08\xfe\x55\x85\
-\x26\xe2\x2f\x99\x64\x14\x26\x71\x22\x60\x56\x39\x09\x81\x7f\x49\
-\x96\x50\x13\x1e\x7b\xae\xfd\xc5\x84\x20\x24\x92\x11\xd1\x21\x88\
-\x9c\xe6\x4f\x74\xa8\x4d\x33\xb0\x99\x6e\x7b\x15\x71\x8d\xc1\x9c\
-\xfe\x93\x3c\x5c\x44\x24\x8e\x4d\x49\xd6\xee\x8d\x66\x92\xf6\x17\
-\xf2\x70\x1c\x38\x20\xc4\xa1\xd6\xdb\x16\x87\xf1\x03\x2b\x20\x3c\
-\x71\x4c\x81\x7e\x81\x07\x6e\x7f\xe9\xd3\xc7\xec\x1b\x81\xe7\xc5\
-\x05\xfa\xbf\xaa\x0b\xfc\x64\x1a\x5b\x37\x96\x43\xce\x59\x09\x6c\
-\x34\xa0\x9f\x45\xae\x9f\xb8\x5c\xaa\xd7\x68\x55\xa1\xd6\xc0\x7f\
-\x4b\x12\x7b\x41\xad\x8e\xc9\xd5\x5e\x10\xfb\x8b\x22\x5c\x74\x33\
-\x9e\x26\xa6\x18\xac\xf3\xa5\xd2\xd9\x6d\xfa\x05\x7c\xef\x1f\xd2\
-\x44\x0c\x0d\x6c\x07\xc2\xd0\xf6\x0b\x23\xb7\x6e\xec\x42\x95\x6c\
-\xe4\xe8\x90\x6d\x6a\x84\xa7\x90\x89\x90\x69\xd0\xcd\x57\x36\xcf\
-\xf5\xa0\xc2\x2a\x60\x79\xac\xd0\x2f\x2c\x4a\x50\x43\x68\x10\x22\
-\x27\x45\xb9\xd2\x5f\xab\xc4\xd4\x63\x2f\xb8\xd3\x9b\x19\x0a\x04\
-\xfb\xc9\xd4\xc5\xd9\x7a\xa3\xcd\xcc\x0c\xd4\x50\xb5\x30\x59\xba\
-\x69\x1c\x32\x43\xe8\x9b\xe2\x06\x1d\x17\xac\xab\x24\x5c\xe5\xfa\
-\xa1\x36\x72\x0f\x39\xdc\xb7\xbc\x76\x1c\x12\xe2\x9c\xb8\xf0\xcd\
-\x96\x30\x96\xaf\x0c\x25\xc5\x34\x05\x30\xd5\x55\x99\xbd\x33\x0d\
-\xc3\x44\x14\x8b\x61\x34\xb3\x14\x43\x3d\x51\xb0\x2d\x9a\xa4\x2f\
-\x60\x31\x33\x5b\x0c\xff\x2d\xf3\xa1\x52\x6f\x14\x63\xb5\xec\x8f\
-\x03\xc9\xa8\x60\xe4\x03\x0d\x0d\x7c\x92\xbd\x70\x3d\x07\xea\x6a\
-\xd3\xb0\x50\x35\x6e\x14\x27\x66\xa3\x6d\x25\x49\x64\x1a\xb8\x15\
-\x6f\x14\xe1\x67\x3c\xd4\x89\xe1\xb3\x80\x0d\xab\x28\x01\x21\x26\
-\x7a\x53\xe4\x17\x3d\x32\xa5\x05\xfc\x11\x84\xa1\xba\x3b\x23\xd3\
-\xc0\xa3\x87\xfd\x4e\xc7\xe0\xb9\x85\x9b\x14\xee\x6e\x03\x7a\x2b\
-\x0c\x89\xef\x98\xc6\x81\xe3\xde\x6a\xae\x33\xd4\x45\xdb\xd1\x68\
-\x99\x33\xd4\xd3\x5e\xa1\xdb\x7e\x3d\x48\x4b\x2f\xba\xb7\x90\xb5\
-\x4c\x37\xee\x3d\x71\x06\xb4\xfc\xef\x0e\x0c\xed\xa5\x44\x8a\xf4\
-\x31\xb0\xf0\xea\x0e\x84\xfd\x45\x5e\x7b\xd2\xef\x69\x17\xf2\x1a\
-\x3e\x03\xa1\x3f\xe2\x07\x07\x03\xfd\xb0\x1e\x79\xc6\x86\xd8\x87\
-\xeb\xa0\x76\x88\x5c\x21\x86\xcd\xa1\xce\xe3\x8b\x1a\x4d\x6f\xa1\
-\x0c\x6d\xac\x45\x8f\x5b\x05\xb4\x38\x83\x79\x45\x03\x80\xd1\x82\
-\x09\xc0\x6c\xa3\x01\x93\x0d\xfd\x50\x5b\x83\x3c\xa1\xfd\xb7\xed\
-\x59\x48\x66\xd6\x90\x43\xed\x97\x44\xf0\x7f\x07\x69\xa3\xc5\x1a\
-\x20\xdb\xd7\x0e\x3a\xf0\x84\x3f\xad\xa5\x98\x76\x03\x42\x3b\xcf\
-\xb4\x0c\xd8\xc1\x3c\x74\xb0\x48\x6f\x45\x18\x3b\xdc\x62\x28\xa9\
-\x0c\x7b\x07\x16\x5e\x47\x73\x44\xf1\x65\x01\x50\xcf\x28\x65\x75\
-\xd6\x0f\xa2\x95\xfa\x88\x4a\x2d\x73\xa3\xa7\xd2\x4b\x09\xc9\x28\
-\x92\xd6\x4c\x33\x03\x5f\x37\xcb\x32\x68\x40\x34\x97\x81\x5d\x15\
-\x92\x4f\xb2\x70\xe3\xf5\x86\xc3\x7a\x5f\x60\x45\xc2\x7b\xa8\x69\
-\x99\xa8\xc4\xea\x14\x78\x02\xa1\x51\x98\xcd\x59\xeb\x50\xfb\x39\
-\x3c\x08\x53\x13\xca\x3a\x9f\xf5\x66\x2d\x08\x81\x41\x65\xb2\xd6\
-\x46\x6c\x1b\x5c\x43\x21\x1c\x33\x21\x48\x99\x6a\xbd\x4f\xd6\x61\
-\x67\x02\xa0\xfd\x00\x32\xad\x89\xcb\x08\x15\x0b\x6a\x38\x5c\x2b\
-\x00\x70\xfe\x43\xf6\x2f\x06\xdd\x9a\x04\xca\x72\xf4\x8d\xeb\x41\
-\xd6\xc2\xfc\x6c\x58\x5e\xb8\xb0\x4c\x1e\xe7\x86\xaf\xbb\x0d\xe3\
-\x91\xa5\xd9\x89\x2f\xc6\xff\xaa\x12\x47\x4c\xc0\x92\x70\x1e\x15\
-\x60\x31\x2c\x15\xa1\x59\x10\xd2\xbe\x6a\xf4\x4b\x1b\x0f\x44\x2f\
-\x22\x20\x6a\x6e\x31\xe4\x03\x4d\xc5\xc7\xfd\x18\xa3\x4e\x60\xaf\
-\x62\xb3\xb2\x74\xbc\xa4\xbb\xbf\xa5\x89\x0f\x93\xd2\xea\x7b\x32\
-\x1a\x06\xc5\x12\x60\x29\x1a\x0a\xea\xc0\xc4\xb5\xaa\xc8\x5a\x2c\
-\x38\x4b\xba\x03\x34\x62\x2c\x6d\xca\x8d\x6d\xa3\xb6\x06\x41\x9e\
-\x67\x8b\xd5\xf2\xda\xb7\x5c\xda\x05\x34\x59\xdd\x59\x21\x26\xc1\
-\xe0\xd4\xda\x3a\x2f\x0e\xb0\x93\x5b\x43\x74\x09\x25\xb0\xf6\xdb\
-\x28\x58\x7e\x88\x49\x34\x41\x77\x30\x65\xed\x51\xfe\x74\xea\x14\
-\x7a\x43\x28\xe8\x7c\x72\xf7\x41\xee\x5d\x52\xa1\xe3\x86\xc6\x50\
-\x73\x40\xeb\x4b\xb4\x95\x39\x49\xc6\x1e\xc1\xaf\x6f\x1e\x26\x90\
-\xcf\xb3\xc3\x49\x40\x9e\x8f\xc5\x6f\x1e\x66\xd6\xfc\xcc\x5a\x12\
-\xd3\x00\x37\x31\x1a\x9f\x32\xc6\x3e\x0f\x0a\x4b\x58\xb0\x00\xd6\
-\xc9\xe5\xf0\x60\x1b\x9f\xba\x25\x50\x41\xe4\xce\x5d\x60\x9e\x55\
-\x1f\x16\x42\x1f\x01\x77\x2e\x78\x3e\x29\xda\x0f\x7e\x62\x82\xce\
-\x82\x7d\x5a\x46\x4d\x53\xe3\x9c\x97\xcd\x64\x05\x93\x30\x37\x95\
-\x25\x1d\x50\xa5\xd9\x28\x92\xc8\x4b\xd3\xcd\x29\x44\xa0\x3c\x6c\
-\x1f\xf3\xbe\xa1\x46\xfc\xf9\x64\xf4\x72\x36\x5f\x46\x59\xc0\x4f\
-\xeb\x64\xa4\xc7\xf3\xb0\x8a\x8d\xcd\x46\xf5\x7c\x34\xc9\x22\x3d\
-\x7f\xfd\xa5\x99\xa2\xf4\x9f\x0f\x45\x4e\x7f\xfe\x59\xfc\xf5\x9c\
-\x39\x9f\xa6\x9a\x56\x4a\x0d\xf3\xe9\x6a\xed\x53\xe7\x2e\xe8\x9f\
-\xd2\xb6\x9c\xe3\xce\xbf\x20\xd1\x72\xb7\x2d\x00\x3e\xad\xcf\x29\
-\x4d\x04\x35\xcd\x4f\x61\xfe\x63\xc9\x33\xfc\xac\x0d\x23\xe5\x06\
-\xd3\x2c\x1a\xc8\xe6\x0b\x30\x2a\x27\x78\x68\xf5\x36\x88\xd0\x13\
-\xca\x17\x51\x30\x3e\xb2\xde\xbc\x28\x0b\x39\x41\xcb\x30\xd2\xaf\
-\x62\xeb\x27\xb4\xe4\x55\x4d\x5b\x66\xa0\xc5\x24\x12\xd3\x44\x60\
-\x58\x9f\xd2\x12\x84\xfa\xb5\xfe\x59\x4d\x19\xb4\x5e\xe4\x93\xb1\
-\xd1\x11\xe6\xb3\xca\xa8\x00\x41\xbd\x19\x00\x74\x5d\xca\x80\xd9\
-\x65\x07\x30\x17\x62\xd9\x8b\x3c\x99\xba\x65\x51\x33\xcd\x73\xb4\
-\x68\x7b\x52\xa2\x93\x28\x2f\xc5\x51\xc5\x87\xd2\xc2\x15\x51\xa6\
-\xf9\x53\x45\x58\xd9\x4e\xa8\x28\x50\x32\x2f\xc1\x9f\x81\xbb\x7d\
-\x5a\x1c\x2b\x3b\x5f\x58\x22\xff\x45\x09\x17\x87\xa5\x6d\x3b\x3a\
-\x05\x16\x54\xe1\x31\xfb\xd2\xc1\x81\x21\x5b\x86\xba\x5f\x43\xa9\
-\xa8\xec\xf2\xd1\x10\x69\xfa\xa5\xcb\x35\x91\xe5\xab\x38\x58\x45\
-\x36\x29\xee\xd9\xdc\x8a\x81\xd5\x8e\x88\x95\x10\x1e\x80\x78\xd2\
-\xca\x09\x41\xed\xcb\xb1\x86\xca\x1f\xa2\x8d\xc1\x8d\xa2\xac\x52\
-\xa9\x42\x4e\xe5\x2d\x34\xd8\x15\x81\x4c\xa0\x5d\xc6\x6e\xd5\xe0\
-\xb6\x44\xcc\x96\x82\x97\xda\x5a\x13\x8d\xb3\x66\x52\xc6\x19\xf3\
-\x29\x95\x35\xb4\xbe\x5e\x0d\x01\x6c\x3b\x21\x87\xa1\xf3\x6b\x96\
-\xe0\xc9\x4b\x05\x70\x7d\x9f\x44\x33\x30\x64\xdc\x1b\x2d\xd9\xff\
-\x2d\x12\xd5\x7f\x22\x51\xfd\x4a\x8d\xd2\x9a\xb9\x7e\x32\xef\x1d\
-\x70\xba\xb8\xd5\xc3\x0e\x3e\xcf\x02\x87\x34\xd6\x61\xa0\x6c\x00\
-\x7c\x7e\x50\x51\xc2\xd3\xf6\x13\x79\xda\xae\xe2\x89\xde\xf8\x59\
-\x37\x5b\x62\x4a\xdc\x4f\xae\x61\x4b\xc5\x21\xb3\xc5\x4e\x52\x4a\
-\x18\xdb\x79\x22\x63\x3b\x55\x8c\xb1\xdb\x26\xeb\xa6\x2b\x9c\xe5\
-\x2d\x4a\x0d\x67\x2a\x0e\x95\x33\xac\x33\xc4\xf8\x84\x31\x82\xed\
-\x72\x1d\x63\x64\xa5\x11\x6d\xf0\x8d\xa3\x56\xcd\x18\xf5\x8f\x35\
-\xe3\xfd\x35\xe3\xdb\x6b\xc6\x77\x24\xc6\x2a\x8a\x4f\x3d\xab\xfd\
-\xf5\x86\x84\x01\x30\xaa\x7d\x58\x1e\xcb\xb0\xb1\x91\x4b\x34\x25\
-\x7d\x3e\xbd\xbd\xc2\xcf\x63\x21\x51\x00\x15\xe5\x69\x82\x15\xf7\
-\xb4\x08\x32\x5d\xa7\x2e\x47\xfc\xa0\xde\xc7\x15\x9b\x1e\xbe\x9d\
-\x4a\xbb\xd2\x95\xef\x90\x1b\xd7\x87\x0a\xae\xbe\xcf\xfb\xb6\x42\
-\x79\x7d\x5e\xc1\x84\xfb\x0f\xcc\xc3\xd0\x04\x69\x27\xe0\x83\x95\
-\x67\x42\x80\x87\x46\xdf\x59\xc0\x93\x3d\xcf\xb0\xaa\xc4\x6c\xf5\
-\x98\x51\x11\x27\xad\xc5\xbe\x57\xa0\x39\x56\x68\xc6\xc0\xb6\x00\
-\x65\x77\xa0\xb9\xda\x01\x5b\xa1\xed\x11\x7f\x9e\x2c\x06\xda\xcb\
-\x97\xa5\xb5\x19\xd3\x2a\x9d\xfa\xc9\xfd\xac\x34\x08\x1b\xa8\x07\
-\x3f\x78\x4f\xc5\xf5\x57\x44\x81\x96\xf6\xed\xd7\xb5\xb4\x1b\xf4\
-\x83\xe9\x16\xc6\xf3\x21\x47\xfb\x24\x4a\xe8\xfd\x88\x3a\x3a\x58\
-\xa4\x2d\x74\x57\xb8\x2a\xbd\xca\x97\x27\xe1\xe7\xc3\xa2\xbe\x33\
-\x0a\x2a\xce\x6a\xd2\x8f\x82\x6a\x28\x1e\xa5\xa6\x9f\xc7\x32\x47\
-\x16\x9b\x86\xbc\x19\xa8\xb6\x50\xea\xd2\x82\x85\x56\x3b\xb6\xc5\
-\x85\x91\x76\x11\xec\x55\x06\xf4\x84\x15\xdf\x99\x96\xfa\x82\x9f\
-\xcc\x14\x40\x2d\xfe\xab\xed\x2b\x2d\xb3\x59\x86\xa9\x28\xc7\x45\
-\x32\xe4\x5d\x2d\x1d\x46\x75\x61\x57\x4b\xd5\x0f\xdd\xaf\xca\x88\
-\xc2\x37\x02\x80\x16\xb0\xd9\x6e\xd1\x42\x0a\xe1\x84\xb1\x24\xc2\
-\x8b\xdb\x5e\xa5\x65\x67\x55\x8f\x96\x6f\xa9\x60\x24\x55\x8e\xbf\
-\xff\x6e\x21\xf4\x69\xfb\x4c\x6b\x8b\xe7\x72\x59\xb0\x22\x15\xa5\
-\x51\x1a\x20\xff\x4e\xf2\xf8\x96\xf8\x50\xe7\xcc\xaa\x40\xf2\x7b\
-\x07\xae\xa3\x6e\x74\x42\xd8\x02\xdb\x5e\x9a\x3a\xbf\x1d\xf3\xf1\
-\xe8\xf2\x6c\xa4\x37\x1a\x7f\x5b\x61\xad\x7e\x44\x4c\xdf\xa8\x94\
-\x62\x62\x63\xa5\x14\x06\x85\x8a\xa3\xe7\x3c\x4c\x6e\xb2\xcf\x23\
-\xf7\x7c\x4f\x8a\xac\xc2\xaa\xf2\x6d\x01\x7c\xef\x4c\x3c\xda\x65\
-\x97\xd5\xe4\x17\x5d\x3e\x41\x50\xf9\x65\xa8\xb7\x43\x7f\xae\x7f\
-\xfe\xca\x8f\x60\xe9\xd5\x54\x76\x32\x6b\xbc\xcc\x2f\x37\xbd\x34\
-\xc2\xfb\xc7\xf4\xce\x9b\x1c\x7f\x8d\xb2\x37\x7b\xb2\x03\x16\x8a\
-\x0a\xcf\x57\x84\x8b\x52\x10\xc4\xc3\x7b\xa3\x59\xba\x33\x56\xf2\
-\x31\x18\x69\x88\xe4\xbd\x95\x2c\xda\xf4\x38\xd8\x14\xf0\x75\xb4\
-\x5e\x7b\x77\xa7\xc1\xf1\x4a\x3b\x13\x68\x1e\x94\x04\x1a\xc7\xef\
-\x5c\xdf\x09\xee\x1a\x6d\xfa\x44\x3d\xd4\x67\xab\x48\xf3\xd8\xa3\
-\x92\xd3\xff\x8f\x1c\x25\xa5\xe7\xc6\x0b\x82\xc8\x94\xf8\xdb\xee\
-\x16\x61\xde\xa5\xf8\x05\xa0\x75\xfc\xec\x74\x55\x66\x96\xd6\xfd\
-\x1b\x5e\xab\x09\x78\x18\x8b\x9d\x8c\x34\xe5\x8e\x40\x06\x74\x28\
-\x5f\x6a\x6b\x48\xe8\xc4\x91\x0a\xf8\x03\xad\x27\xc1\xf4\x8a\xd4\
-\xa5\xd2\xce\x66\xfd\x92\x51\x25\x5a\x8d\xbe\x25\xfa\x15\xda\x0a\
-\x37\x95\x66\x8e\x84\xe9\x53\x95\x00\xad\x0e\x8f\x41\x66\x4c\x57\
-\x0a\xa2\x2c\x49\x83\x29\xea\x69\xf6\x95\x75\x81\x57\x54\x53\xf1\
-\xd9\x04\xba\x16\x01\x63\x27\xa3\x5b\x01\x62\xb7\x43\x93\x20\x04\
-\x48\x93\x9b\x4a\x8b\xa1\xfa\x25\xd7\x6e\x03\x10\xf4\x95\xfe\x2a\
-\x87\x3c\x80\x12\x40\x42\xd4\x95\x4e\xb9\x4a\x44\x92\x5f\x54\xa5\
-\x72\x49\x21\x33\xc1\x20\x20\xde\xb3\xc7\xbf\x79\xb2\xb3\x6e\xc9\
-\x94\xdf\xc9\x95\xe2\x82\x7a\xa1\x11\x7d\xf7\x62\x3e\xf1\x2f\x83\
-\x3b\xf0\xd7\x5b\xbc\x7f\x93\x33\x2d\x5d\x6c\x0c\xf1\x5d\xd4\x89\
-\xcf\x8e\xac\xa6\xce\x14\xa4\x9a\x42\xac\x09\x77\x90\x79\x69\x08\
-\xa3\xab\x98\xb2\xf5\xd5\x9e\xdb\x01\x20\x5b\x48\xf0\x0c\x71\xad\
-\x92\xbb\x3e\xaa\x1c\x28\xf8\x2c\x98\xcf\x3d\x52\xd8\xa8\xa6\x07\
-\x32\x75\x19\x6c\x2a\x40\xab\x1b\x6d\x6c\x6c\x3d\x74\x39\xdc\xd4\
-\xab\x83\x8c\x3d\xd7\x21\xd1\xef\xb8\x95\x3a\x95\x36\x4f\xb2\x2f\
-\x0c\x4b\xdb\x71\x63\x3c\xec\xc7\xe2\x9e\xdd\x7e\x13\x2e\xb3\xd1\
-\x0e\x0f\xe2\x25\x56\xfd\x02\x0a\x0e\x99\xee\xa3\x17\xc0\xa4\xf1\
-\x7d\xad\xbf\xdd\x2b\x00\x4f\x3d\x56\x62\xbc\x9b\xbd\x3f\x2d\x43\
-\x21\x98\x8d\x88\x40\x4d\x5c\xb4\xc6\x98\xaf\x22\x52\x7d\xf7\xab\
-\xd3\xd1\x4e\xf1\xcd\xac\xf4\x7a\xb9\x94\x72\x64\xb3\xad\x32\x2b\
-\x9c\x29\xc8\xf3\x02\xf7\xd2\xf1\xed\xea\x5a\x00\xc9\xbc\x25\xdb\
-\x2b\xce\x4a\xcd\xa3\x1d\x46\x41\x68\x1a\x5c\x0c\xe0\xab\x82\x18\
-\xa0\x3f\x93\x05\xa9\x50\x85\x5a\x66\x54\x6d\xba\x98\x0b\x91\x61\
-\x3f\x5d\xab\x01\x42\x97\xc8\x66\x05\xc6\x11\x6d\x1b\x52\x1b\x81\
-\x59\xfb\xf2\x2c\x4b\x1e\x6f\x6a\xc2\x5c\xc1\xcb\x40\x09\xd3\x45\
-\x70\xa7\x61\x50\x0a\xe6\x12\x51\xc2\x21\x5b\x7f\xfd\x7d\x8a\x5e\
-\x77\xc3\x0b\x15\xfd\xd2\x1b\x15\x59\xcf\x96\x9e\x07\x1a\x78\x1e\
-\x68\x94\x5c\x87\x10\xde\x46\xf8\x9e\xdb\x15\x65\x37\x07\xd9\x86\
-\xe6\x91\xe7\x15\xee\x06\x94\x95\xcc\x78\x05\x5d\x2a\x9b\x39\x85\
-\x4f\x38\xae\xc2\x8f\xbc\x29\xca\xc5\xa0\x1e\xe8\xe5\x5e\x26\xbc\
-\x24\xd0\x61\xff\xf1\x81\x67\x07\x78\xcf\x8f\xbd\x14\x90\xdd\x8d\
-\xcb\x33\x0d\xbf\x2d\xc3\x86\xad\xfc\xe6\x4d\x99\x87\x0e\x74\xd6\
-\x53\x0c\xf5\x51\xfa\x7e\x15\xff\x4f\x11\xe8\xe9\x85\x23\x14\x3f\
-\xe2\xb4\x8a\x18\xe5\x9b\x9e\x02\xae\xa3\x93\x13\x15\x0d\xcc\xe5\
-\x58\x18\x9a\x0d\x5e\x78\xc8\xd4\xe4\xfa\x6e\x52\x88\x26\xa3\xc9\
-\xd9\x64\x06\xfe\xd5\x9a\x1e\x5f\x4e\x2e\x66\xa3\xda\xa4\x45\x8f\
-\x41\x79\x11\x8e\xef\x3d\xf9\xc4\x4e\xaa\x37\x16\xe8\x26\xaa\x7a\
-\x3d\xb6\x4c\x95\x35\x57\xfe\xd5\xa9\x69\x9f\x23\x69\x59\xfa\xc5\
-\x6a\xd4\xb6\x17\xd8\xd4\x76\xf9\xbb\x9d\xa2\x63\x3d\xae\x49\xcd\
-\x49\xba\x6d\x8b\x61\x56\x60\x54\xda\xae\xa9\x4f\xd2\x28\x28\xda\
-\x55\x17\x51\xe4\x7b\x92\xb5\x59\x1b\x3f\x79\xc1\x1d\x11\x5a\xb0\
-\x49\x9e\x2f\x82\x28\xde\xce\x8b\x3c\x1e\xb9\xa6\xf4\xf5\x43\xe6\
-\xc7\x95\x65\x55\x1c\x44\xf4\x8e\x9c\x29\xab\x27\x82\x80\x10\x25\
-\x2c\x61\xca\x8d\x49\xfa\xe2\xa0\x81\x51\x55\x69\x5a\x70\x83\xcf\
-\x72\x7d\x4c\xde\x30\x21\x4d\xe9\xca\xa4\xec\x2d\xbb\x6e\x7b\x4f\
-\x1e\x01\xba\x13\xcb\xb7\xc9\x3e\xd4\xf9\xf2\xc8\x2a\x74\xac\x04\
-\x9e\xcb\x81\xab\xa9\xad\x4a\x43\x44\x6d\xcb\x98\x59\x43\xc9\x86\
-\x51\xfa\x84\x7e\x81\x50\x3f\x01\xcf\x01\x31\x81\x0a\xe8\x13\x34\
-\x6c\x6e\x66\xa9\xee\xa5\xc0\x47\xfd\x8c\xe3\x52\xaf\x21\x64\xf5\
-\x0d\x78\xf2\x18\x89\x3f\x05\x66\x09\x14\x0e\xa6\x71\x45\x22\xd7\
-\xbe\x4a\x31\x5e\xb1\x23\x26\x4c\x41\x88\x50\xa2\x2d\x0f\x66\xf4\
-\x57\xc9\xfd\xe4\xfe\xb7\x5e\x50\xde\xe8\x0a\x32\xfc\x28\xbf\x81\
-\xcc\xd9\xcc\x28\x12\x92\x4e\x36\xc8\x87\x79\x40\xa3\x6f\x29\x0a\
-\x63\x30\x2a\xdc\x07\xe5\xe5\x8c\x7e\x38\x9a\xfd\x31\xbb\x3a\xbb\
-\x84\xaa\x64\x3a\x4a\x6f\x7f\xe6\xf8\xf2\x48\xad\xa2\x67\xaf\xdd\
-\xc9\xf8\xe9\x1e\x12\xa5\x4e\x2c\x81\x60\x8d\xfc\x3d\x26\x10\x30\
-\x4c\x92\xa0\xd8\x4d\x4d\x04\x4b\x89\xe2\x51\x37\x42\x03\xd3\xf1\
-\x55\xd7\xa1\x0e\x62\x87\x3e\x69\xa8\xef\x65\xb7\x38\x05\xa4\xa8\
-\x12\x12\x0e\xf5\x1e\xbd\x33\x4b\xed\x72\xa8\x57\x96\x62\x98\xcf\
-\x58\xc5\x89\x29\xa1\xb3\x11\xb7\x25\xc2\x2c\xbf\xc3\xeb\x5b\x4b\
-\xf8\x1d\x3b\x18\x55\xf8\x55\x62\xb1\x96\x12\x09\x94\xbb\x05\xa4\
-\xe4\x67\xff\x3a\x0e\x07\xa2\x9a\x24\x58\xa6\xab\xe9\x09\x7d\xe1\
-\xeb\xff\x43\x57\x53\x48\x81\xd9\x1b\x65\xb5\x9a\x62\x74\x95\x29\
-\xaa\xb7\xb3\xcb\x55\xb5\xfd\xaa\x9b\x2b\x2b\xc5\xba\x89\xaa\xf2\
-\xfa\xf4\x5b\x54\xc5\xdf\x1a\x96\xb9\x2d\xbb\x9e\x2c\x05\xab\xa7\
-\xde\x46\x2e\xa9\x21\xd5\x42\x51\x22\x78\xed\x1a\x50\x30\xb0\x17\
-\x1b\x35\xe9\x3a\xb2\xdc\x5a\x0f\x36\x59\x56\x5a\x15\x6f\x30\x97\
-\x4b\x4d\xac\xc2\xd8\xd7\x83\x0e\xab\xdb\x0e\x3a\xec\xbf\x25\xf5\
-\x7f\x9e\xbc\x80\x7b\
 \x00\x00\x04\x84\
 \x3c\
 \x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\
@@ -442,74 +440,6 @@
 \x20\x20\x20\x20\x3c\x2f\x75\x6c\x3e\x0a\x20\x20\x3c\x2f\x64\x69\
 \x76\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\x3c\x2f\x68\x74\x6d\
 \x6c\x3e\x0a\
-\x00\x00\x04\x19\
-\x3c\
-\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\
-\x68\x74\x6d\x6c\x3e\x0a\x3c\x68\x65\x61\x64\x3e\x0a\x3c\x6d\x65\
-\x74\x61\x20\x63\x68\x61\x72\x73\x65\x74\x3d\x22\x75\x74\x66\x2d\
-\x38\x22\x3e\x20\x0a\x3c\x6d\x65\x74\x61\x20\x68\x74\x74\x70\x2d\
-\x65\x71\x75\x69\x76\x3d\x22\x63\x6f\x6e\x74\x65\x6e\x74\x2d\x74\
-\x79\x70\x65\x22\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3d\x22\x74\x65\
-\x78\x74\x2f\x68\x74\x6d\x6c\x3b\x20\x63\x68\x61\x72\x73\x65\x74\
-\x3d\x75\x74\x66\x2d\x38\x22\x3e\x0a\x3c\x74\x69\x74\x6c\x65\x3e\
-\x40\x54\x49\x54\x4c\x45\x40\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\
-\x3c\x6c\x69\x6e\x6b\x20\x72\x65\x6c\x3d\x22\x69\x63\x6f\x6e\x22\
-\x20\x68\x72\x65\x66\x3d\x22\x64\x61\x74\x61\x3a\x69\x6d\x61\x67\
-\x65\x2f\x70\x6e\x67\x3b\x62\x61\x73\x65\x36\x34\x2c\x40\x46\x41\
-\x56\x49\x43\x4f\x4e\x40\x22\x20\x74\x79\x70\x65\x3d\x22\x69\x6d\
-\x61\x67\x65\x2f\x78\x2d\x69\x63\x6f\x6e\x22\x20\x2f\x3e\x0a\x3c\
-\x73\x74\x79\x6c\x65\x3e\x0a\x62\x6f\x64\x79\x20\x7b\x0a\x20\x20\
-\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x33\x65\x6d\x20\x30\x65\x6d\
-\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\
-\x2d\x77\x65\x62\x6b\x69\x74\x2d\x67\x72\x61\x64\x69\x65\x6e\x74\
-\x28\x6c\x69\x6e\x65\x61\x72\x2c\x20\x6c\x65\x66\x74\x20\x74\x6f\
-\x70\x2c\x20\x6c\x65\x66\x74\x20\x62\x6f\x74\x74\x6f\x6d\x2c\x20\
-\x66\x72\x6f\x6d\x28\x23\x38\x35\x37\x38\x34\x41\x29\x2c\x20\x74\
-\x6f\x28\x23\x46\x44\x46\x44\x46\x44\x29\x2c\x20\x63\x6f\x6c\x6f\
-\x72\x2d\x73\x74\x6f\x70\x28\x30\x2e\x35\x2c\x20\x23\x46\x44\x46\
-\x44\x46\x44\x29\x29\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x2d\x72\x65\x70\x65\x61\x74\x3a\x20\x72\x65\x70\x65\
-\x61\x74\x2d\x78\x3b\x0a\x7d\x0a\x69\x6d\x67\x20\x7b\x0a\x20\x20\
-\x66\x6c\x6f\x61\x74\x3a\x20\x6c\x65\x66\x74\x3b\x0a\x20\x20\x6f\
-\x70\x61\x63\x69\x74\x79\x3a\x20\x2e\x38\x3b\x0a\x7d\x0a\x23\x62\
-\x6f\x78\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x3a\x20\x77\x68\x69\x74\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x38\
-\x35\x37\x38\x34\x41\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\
-\x36\x30\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\
-\x3a\x20\x36\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\
-\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\
-\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x30\x2e\x38\x65\x6d\x3b\x0a\
-\x7d\x0a\x68\x31\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\
-\x7a\x65\x3a\x20\x31\x33\x30\x25\x3b\x0a\x20\x20\x66\x6f\x6e\x74\
-\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\
-\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\
-\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x38\x35\x37\x38\x34\
-\x41\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\
-\x3a\x20\x36\x34\x70\x78\x3b\x0a\x7d\x0a\x68\x32\x20\x7b\x0a\x20\
-\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x30\x25\
-\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\
-\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\
-\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\
-\x6c\x69\x64\x20\x23\x38\x35\x37\x38\x34\x41\x3b\x0a\x20\x20\x6d\
-\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x36\x34\x70\x78\
-\x3b\x0a\x7d\x0a\x75\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\
-\x73\x69\x7a\x65\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x70\x61\
-\x64\x64\x69\x6e\x67\x2d\x6c\x65\x66\x74\x3a\x20\x36\x34\x70\x78\
-\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x35\x70\x78\x20\
-\x30\x3b\x0a\x7d\x0a\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x0a\x3c\x2f\
-\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\x0a\x20\x20\x3c\
-\x64\x69\x76\x20\x69\x64\x3d\x22\x62\x6f\x78\x22\x3e\x0a\x20\x20\
-\x20\x20\x3c\x69\x6d\x67\x20\x73\x72\x63\x3d\x22\x40\x49\x4d\x41\
-\x47\x45\x40\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x34\x38\x22\x20\
-\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x38\x22\x2f\x3e\x0a\x20\x20\
-\x20\x20\x3c\x68\x31\x3e\x40\x48\x31\x40\x3c\x2f\x68\x31\x3e\x0a\
-\x20\x20\x20\x20\x3c\x75\x6c\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\
-\x6c\x69\x3e\x40\x4c\x49\x2d\x31\x40\x3c\x2f\x6c\x69\x3e\x0a\x20\
-\x20\x20\x20\x20\x20\x3c\x6c\x69\x3e\x40\x4c\x49\x2d\x32\x40\x3c\
-\x2f\x6c\x69\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x75\x6c\x3e\x0a\x20\
-\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\
-\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\
 \x00\x00\x0c\x88\
 \x3c\
 \x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\
@@ -713,6 +643,74 @@
 \x64\x69\x76\x20\x69\x64\x3d\x22\x66\x6f\x6f\x74\x65\x72\x22\x3e\
 \x3c\x2f\x64\x69\x76\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\x3c\
 \x2f\x68\x74\x6d\x6c\x3e\x0a\
+\x00\x00\x04\x19\
+\x3c\
+\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\
+\x68\x74\x6d\x6c\x3e\x0a\x3c\x68\x65\x61\x64\x3e\x0a\x3c\x6d\x65\